307 GtkTreeIter step_level, size_level, ring_level;
310 if (this_proj -> coord -> totcoord[rid+4])
312 for (h=0; h < this_proj -> steps; h++)
314 if (this_proj -> steps > 1)
316 gtk_tree_store_append (store, & step_level, NULL);
317 gtk_tree_store_set (store, & step_level, 0, h+1,
325 for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++)
327 j = this_proj -> coord -> geolist[rid+4][0][i];
328 k = this_proj -> modelgl -> num_rings[rid][h][j-1];
329 if (this_proj -> steps > 1 && k > 0)
331 gtk_tree_store_append (store, & size_level, & step_level);
332 gtk_tree_store_set (store, & size_level, 0, 0,
340 else if (this_proj -> steps == 1)
342 gtk_tree_store_append (store, & size_level, NULL);
343 gtk_tree_store_set (store, & size_level, 0, j,
352 gtk_tree_store_append (store, & ring_level, & size_level);
353 str =
ring_atoms (this_proj, rid, h, j-1, l, FALSE);
354 if (this_proj -> steps > 1)
356 gtk_tree_store_set (store, & ring_level, 0, -(h+1),
360 4, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l],
367 gtk_tree_store_set (store, & ring_level, 0, -j,
370 3, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l],
411 GtkTreeViewColumn * rings_col[7];
412 GtkCellRenderer * rings_cell[7];
414 gchar * ctype[8]={
"text",
"text",
"text",
"active",
"active",
"active",
"active",
"text"};
415 GType col_type_ms[8]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING};
416 GType col_type_ss[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING};
420 j = (this_proj -> steps > 1) ? 1: 0;
421 k = (this_proj -> steps > 1) ? 0: 1;
422 coord -> rings_model[rid] = gtk_tree_store_newv (7+j, (j) ? col_type_ms : col_type_ss);
423 if (fill_this)
fill_rings_model (coord -> rings_model[rid], this_proj, rid);
424 GtkWidget * rings_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> rings_model[rid]));
425 for (i=0; i<7+j; i++)
427 if (i < 2+j || i > 5+j)
429 rings_cell[i] = gtk_cell_renderer_text_new ();
433 rings_cell[i] = gtk_cell_renderer_toggle_new ();
434 g_signal_connect (G_OBJECT(rings_cell[i]),
"toggled", G_CALLBACK(
on_select_rings), & this_proj -> modelgl ->
colorp[rid*10+i][0]);
436 gtk_cell_renderer_set_fixed_size (rings_cell[i], -1, 25);
437 rings_col[i] = gtk_tree_view_column_new_with_attributes (_(
ctitle[i+k]), rings_cell[i], ctype[i+k], i, NULL);
438 gtk_tree_view_append_column(GTK_TREE_VIEW(rings_tree), rings_col[i]);
439 gtk_tree_view_column_set_alignment (rings_col[i], 0.5);
440 gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i],
rings_set_visible, & this_proj -> modelgl ->
colorp[i][0], NULL);
441 if (i > 5+j) gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i],
rings_set_markup, GINT_TO_POINTER(j), NULL);
457 GtkTreeIter step_level, size_level, ring_level;
458 GtkTreeIter new_level;
460 GtkTreeStore * store = (GtkTreeStore *) coord -> rings_model[rid];
461 GtkTreeModel * mod = GTK_TREE_MODEL(coord -> rings_model[rid]);
463 gboolean insert = TRUE;
465 int f, h, i, j, k, l, m;
467 if (this_proj -> steps > 1)
469 valid = gtk_tree_model_get_iter_first(mod, & step_level);
472 gtk_tree_model_get (mod, & step_level, 0, & f, -1);
473 if (f > coord -> rst[rid])
478 else if (f == coord -> rst[rid])
480 if (gtk_tree_model_iter_has_child (mod, &step_level))
482 h = gtk_tree_model_iter_n_children (mod, &step_level);
485 if (gtk_tree_model_iter_nth_child (mod, &size_level, &step_level, i))
487 gtk_tree_model_get (mod, &size_level, 1, & j, -1);
488 if (j > coord -> rsz[rid])
494 else if (j == coord -> rsz[rid])
496 if (gtk_tree_model_iter_has_child (mod, &size_level))
498 k = gtk_tree_model_iter_n_children (mod, &size_level);
501 if (gtk_tree_model_iter_nth_child (mod, &ring_level, &size_level, l))
503 gtk_tree_model_get (mod, &ring_level, 2, & m, -1);
504 if (m > coord -> ri[rid])
510 else if (m == coord -> ri[rid])
512 insert = valid = FALSE;
536 valid = gtk_tree_model_iter_next(mod, & step_level);
541 str =
ring_atoms (this_proj, rid, coord -> rst[rid]-1, coord -> rsz[rid]-1, coord -> ri[rid]-1, FALSE);
545 gtk_tree_store_append (store, & step_level, NULL);
546 gtk_tree_store_set (store, & step_level, 0, coord -> rst[rid],
553 gtk_tree_store_append (store, & size_level, & step_level);
554 gtk_tree_store_set (store, & size_level, 0, 0,
555 1, coord -> rsz[rid],
561 gtk_tree_store_append (store, & ring_level, & size_level);
562 gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid],
563 1, -coord -> rsz[rid],
566 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
572 gtk_tree_store_insert_before (store, & new_level, NULL, & step_level);
573 gtk_tree_store_set (store, & new_level, 0, coord -> rst[rid],
580 gtk_tree_store_append (store, & size_level, & new_level);
581 gtk_tree_store_set (store, & size_level, 0, 0,
582 1, coord -> rsz[rid],
588 gtk_tree_store_append (store, & ring_level, & size_level);
589 gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid],
590 1, -coord -> rsz[rid],
593 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
599 gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level);
600 gtk_tree_store_set (store, & new_level, 0, 0,
601 1, coord -> rsz[rid],
607 gtk_tree_store_append (store, & ring_level, & new_level);
608 gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid],
609 1, -coord -> rsz[rid],
612 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
618 gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level);
619 gtk_tree_store_set (store, & new_level, 0, 0,
620 1, coord -> rsz[rid],
626 gtk_tree_store_append (store, & ring_level, & new_level);
627 gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid],
628 1, -coord -> rsz[rid],
631 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
637 gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level);
638 gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid],
639 1, -coord -> rsz[rid],
642 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
648 gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level);
649 gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid],
650 1, -coord -> rsz[rid],
653 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
664 valid = gtk_tree_model_get_iter_first(mod, & size_level);
667 gtk_tree_model_get (mod, & size_level, 0, & i, -1);
668 if (i > coord -> rsz[rid])
673 else if (i == coord -> rsz[rid])
675 if (gtk_tree_model_iter_has_child (mod, &size_level))
677 j = gtk_tree_model_iter_n_children (mod, &size_level);
680 if (gtk_tree_model_iter_nth_child (mod, &ring_level, &size_level, k))
682 gtk_tree_model_get (mod, &ring_level, 1, & l, -1);
683 if (l > coord -> ri[rid])
689 else if (l == coord -> ri[rid])
691 insert = valid = FALSE;
705 valid = gtk_tree_model_iter_next(mod, & step_level);
710 str =
ring_atoms (this_proj, rid, coord -> rst[rid]-1, coord -> rsz[rid]-1, coord -> ri[rid]-1, FALSE);
714 gtk_tree_store_append (store, & size_level, NULL);
715 gtk_tree_store_set (store, & size_level, 0, coord -> rsz[rid],
721 gtk_tree_store_append (store, & ring_level, & size_level);
722 gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid],
725 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
731 gtk_tree_store_insert_before (store, & new_level, NULL, & size_level);
732 gtk_tree_store_set (store, & new_level, 0, coord -> rsz[rid],
738 gtk_tree_store_append (store, & ring_level, & new_level);
739 gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid],
742 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
748 gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level);
749 gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid],
752 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
758 gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level);
759 gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid],
762 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1],
949 gchar * str = g_strdup_printf (_(
"Too many <b>%s</b> rings in your model !\n"
950 " It is impossible to display the entire list ...\n"
951 "... instead you can look for ring(s) individually:\n"), _(
rings_type[rid]));
954 gchar * search_item[3]={
i18n(
"MD step:"),
i18n(
"Ring size:"),
i18n(
"Ring Id.:")};
958 j = (this_proj -> steps) > 1 ? 0 : 1;
960 coord -> rst[rid] = 1;
970 str = g_strdup_printf (
"∈ [1 - %d]", this_proj -> steps);
971 coord -> rilab[rid][i] =
markup_label(str, 50, -1, 0.0, 0.5);
976 str = g_strdup_printf (
"∈ [%d - %d]",
get_rmin(this_proj, rid, coord -> rst[rid]),
get_rmax(this_proj, rid, coord -> rst[rid]));
977 coord -> rilab[rid][i] =
markup_label(str, 50, -1, 0.0, 0.5);
982 coord -> rilab[rid][i] =
markup_label(
"", 50, -1, 0.0, 0.5);