198 GtkTreeIter step_level, size_level, chain_level;
201 if (this_proj -> coord -> totcoord[9])
203 for (h=0; h < this_proj -> steps; h++)
205 if (this_proj -> steps > 1)
207 gtk_tree_store_append (store, & step_level, NULL);
208 gtk_tree_store_set (store, & step_level, 0, h+1,
215 for (i=0; i < this_proj -> coord -> totcoord[9]; i++)
217 j = this_proj -> coord -> geolist[9][0][i];
218 k = this_proj -> modelgl -> num_chains[h][j-1];
219 if (this_proj -> steps > 1 && k > 0)
221 gtk_tree_store_append (store, & size_level, & step_level);
222 gtk_tree_store_set (store, & size_level, 0, 0,
229 else if (this_proj -> steps == 1)
231 gtk_tree_store_append (store, & size_level, NULL);
232 gtk_tree_store_set (store, & size_level, 0, j,
240 gtk_tree_store_append (store, & chain_level, & size_level);
242 if (this_proj -> steps > 1)
244 gtk_tree_store_set (store, & chain_level, 0, -(h+1),
254 gtk_tree_store_set (store, & chain_level, 0, -j,
296 GtkTreeViewColumn * chains_col[7];
297 GtkCellRenderer * chains_cell[7];
299 gchar * ctype[7]={
"text",
"text",
"text",
"active",
"active",
"active",
"text"};
300 GType col_type_ms[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING};
301 GType col_type_ss[6]={G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING};
304 j = (this_proj -> steps > 1) ? 1: 0;
305 k = (this_proj -> steps > 1) ? 0: 1;
306 coord -> chains_model = gtk_tree_store_newv (6+j, (j) ? col_type_ms : col_type_ss);
308 GtkWidget * chains_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> chains_model));
309 for (i=0; i<6+j; i++)
311 if (i < 2+j || i > 4+j)
313 chains_cell[i] = gtk_cell_renderer_text_new ();
317 chains_cell[i] = gtk_cell_renderer_toggle_new ();
318 g_signal_connect (G_OBJECT(chains_cell[i]),
"toggled", G_CALLBACK(
on_select_chains), & this_proj -> modelgl ->
colorp[i][0]);
320 gtk_cell_renderer_set_fixed_size (chains_cell[i], -1, 25);
321 chains_col[i] = gtk_tree_view_column_new_with_attributes (_(
ctitle[i+k]), chains_cell[i], ctype[i+k], i, NULL);
322 gtk_tree_view_append_column(GTK_TREE_VIEW(chains_tree), chains_col[i]);
323 gtk_tree_view_column_set_alignment (chains_col[i], 0.5);
324 gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i],
rings_set_visible, & this_proj -> modelgl ->
colorp[i][0], NULL);
325 if (i > 4+j) gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i],
chains_set_markup, GINT_TO_POINTER(j), NULL);
339 GtkTreeIter step_level, size_level, chain_level;
340 GtkTreeIter new_level;
342 GtkTreeStore * store = (GtkTreeStore *) coord -> chains_model;
343 GtkTreeModel * mod = GTK_TREE_MODEL(coord -> chains_model);
345 gboolean insert = TRUE;
346 int g, h, i, j, k, l, m;
349 if (this_proj -> steps > 1)
351 valid = gtk_tree_model_get_iter_first(mod, & step_level);
354 gtk_tree_model_get (mod, & step_level, 0, & g, -1);
355 if (g > coord -> cst)
360 else if (g == coord -> cst)
362 if (gtk_tree_model_iter_has_child (mod, &step_level))
364 h = gtk_tree_model_iter_n_children (mod, &step_level);
367 if (gtk_tree_model_iter_nth_child (mod, &size_level, &step_level, i))
369 gtk_tree_model_get (mod, &size_level, 1, & j, -1);
370 if (j > coord -> csz)
376 else if (j == coord -> csz)
378 if (gtk_tree_model_iter_has_child (mod, &size_level))
380 k = gtk_tree_model_iter_n_children (mod, &size_level);
383 if (gtk_tree_model_iter_nth_child (mod, &chain_level, &size_level, l))
385 gtk_tree_model_get (mod, &chain_level, 2, & m, -1);
392 else if (m == coord -> ch)
394 insert = valid = FALSE;
418 valid = gtk_tree_model_iter_next(mod, & step_level);
423 str =
chain_atoms (this_proj, coord -> cst-1, coord -> csz-1, coord -> ch-1, FALSE);
427 gtk_tree_store_append (store, & step_level, NULL);
428 gtk_tree_store_set (store, & step_level, 0, coord -> cst,
434 gtk_tree_store_append (store, & size_level, & step_level);
435 gtk_tree_store_set (store, & size_level, 0, 0,
441 gtk_tree_store_append (store, & chain_level, & size_level);
442 gtk_tree_store_set (store, & chain_level, 0, -coord -> cst,
451 gtk_tree_store_insert_before (store, & new_level, NULL, & step_level);
452 gtk_tree_store_set (store, & new_level, 0, coord -> cst,
458 gtk_tree_store_append (store, & size_level, & new_level);
459 gtk_tree_store_set (store, & size_level, 0, 0,
465 gtk_tree_store_append (store, & chain_level, & size_level);
466 gtk_tree_store_set (store, & chain_level, 0, -coord -> cst,
475 gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level);
476 gtk_tree_store_set (store, & new_level, 0, 0,
482 gtk_tree_store_append (store, & chain_level, & new_level);
483 gtk_tree_store_set (store, & chain_level, 0, -coord -> cst,
492 gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level);
493 gtk_tree_store_set (store, & new_level, 0, 0,
499 gtk_tree_store_append (store, & chain_level, & new_level);
500 gtk_tree_store_set (store, & chain_level, 0, -coord -> cst,
509 gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level);
510 gtk_tree_store_set (store, & new_level, 0, -coord -> cst,
519 gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level);
520 gtk_tree_store_set (store, & new_level, 0, -coord -> cst,
534 valid = gtk_tree_model_get_iter_first(mod, & size_level);
537 gtk_tree_model_get (mod, & size_level, 0, & i, -1);
538 if (i > coord -> csz)
543 else if (i == coord -> csz)
545 if (gtk_tree_model_iter_has_child (mod, &size_level))
547 j = gtk_tree_model_iter_n_children (mod, &size_level);
550 if (gtk_tree_model_iter_nth_child (mod, &chain_level, &size_level, k))
552 gtk_tree_model_get (mod, &chain_level, 1, & l, -1);
559 else if (l == coord -> ch)
561 insert = valid = FALSE;
575 valid = gtk_tree_model_iter_next(mod, & step_level);
580 str =
chain_atoms (this_proj, coord -> cst-1, coord -> csz-1, coord -> ch-1, FALSE);
584 gtk_tree_store_append (store, & size_level, NULL);
585 gtk_tree_store_set (store, & size_level, 0, coord -> csz,
590 gtk_tree_store_append (store, & chain_level, & size_level);
591 gtk_tree_store_set (store, & chain_level, 0, -coord -> csz,
599 gtk_tree_store_insert_before (store, & new_level, NULL, & size_level);
600 gtk_tree_store_set (store, & new_level, 0, coord -> csz,
605 gtk_tree_store_append (store, & chain_level, & new_level);
606 gtk_tree_store_set (store, & chain_level, 0, -coord -> csz,
614 gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level);
615 gtk_tree_store_set (store, & new_level, 0, -coord -> csz,
623 gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level);
624 gtk_tree_store_set (store, & new_level, 0, -coord -> csz,
716 if (v > 0 && v < this_proj -> steps+1)
718 if (v != coord -> cst)
721 coord -> csz = coord -> ch = -1;
722 for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]),
"");
727 coord -> cst = coord -> csz = coord -> ch = -1;
729 if (coord -> cst > 0)
732 str = g_strdup_printf (
"∈ [%d - %d]",
get_cmin(this_proj, coord -> cst),
get_cmax(this_proj, coord -> cst));
733 gtk_label_set_text (GTK_LABEL(coord -> chlab[1]), str);
739 for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]),
"");
743 if (coord -> cst > -1)
745 i =
get_cmin(this_proj, coord -> cst);
746 j =
get_cmax(this_proj, coord -> cst);
747 if (v >= i && v <= j)
749 if (v != coord -> csz)
751 if (this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1])
755 gtk_label_set_text (GTK_LABEL(coord -> chlab[2]),
"");
759 coord -> csz = coord -> ch = -1;
766 coord -> csz = coord -> ch = -1;
768 if (coord -> csz > 0)
771 str = g_strdup_printf (
"∈ [1 - %d]", this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]);
772 gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), str);
778 gtk_label_set_text (GTK_LABEL(coord -> chlab[2]),
"");
782 if (coord -> cst > -1 && coord -> csz > -1)
784 if (v > 0 && v < this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]+1)
807 if (coord -> cst > 0 && coord -> csz > 0 && coord -> ch > 0)
823 gchar * str = g_strdup_printf (_(
"Too many chains in your model !\n"
824 " It is impossible to display the entire list ...\n"
825 "... instead you can look for chain(s) individually:\n"));
828 gchar * search_item[3]={
i18n(
"MD step:"),
i18n(
"Chain size:"),
i18n(
"Chain Id.:")};
832 j = (this_proj -> steps) > 1 ? 0 : 1;
844 str = g_strdup_printf (
"∈ [1 - %d]", this_proj -> steps);
845 coord -> chlab[i] =
markup_label(str, 50, -1, 0.0, 0.5);
850 str = g_strdup_printf (
"∈ [%d - %d]",
get_cmin(this_proj, coord -> cst),
get_cmax(this_proj, coord -> cst));
851 coord -> chlab[i] =
markup_label(str, 50, -1, 0.0, 0.5);
862 return chains_search;