summaryrefslogtreecommitdiff
path: root/tests/testgtk.c
diff options
context:
space:
mode:
authorLars Hamann <lars@gtk.org>1998-10-16 15:00:05 +0000
committerLars Hamann <lars@src.gnome.org>1998-10-16 15:00:05 +0000
commiteff33964d753abf04786ce1f03a8cffff5a76cd2 (patch)
treed029375876fc861c20d82276306d301d706936cb /tests/testgtk.c
parent0849664209839adf6fe85608e1303ab44de26d63 (diff)
downloadgdk-pixbuf-eff33964d753abf04786ce1f03a8cffff5a76cd2.tar.gz
change a few cell styles of inserted row (change_style): change style of
Fri Oct 16 15:59:02 1998 Lars Hamann <lars@gtk.org> * gtk/testgtk.c (insert_row_clist) (create_clist): change a few cell styles of inserted row (change_style): change style of focus_row * gtk/gtkclist.c (gtk_clist_get_row_style) (gtk_clist_set_row_style) (gtk_clist_get_cell_style) (gtk_clist_set_cell_style): new functions to set/get row/cell styles. (gtk_clist_realize): attach row and cell style, allocate row colors. (gtk_clist_unrealize): detach row and cell styles. (get_cell_style): new function. get correct cell style. (draw_cell_pixmap): new function. (draw_row): draw cells with row or cell styles. (row_new): set cell and row styles to NULL. (row_delete): detach & unref cell and row styles. * gtk/gtkctree.c (ctree_detach_styles) (ctree_attach_styles): new functions to attach/detach styles and allocate colors. (gtk_ctree_realize) (gtk_ctree_unrealize): attach/detach cell and row styles of invisible nodes. (draw_cell_pixmap): new function. (get_cell_style): new function. get correct cell style. (gtk_ctree_draw_expander): new function. draw tree expander. (gtk_ctree_draw_lines): new function.draw tree lines. (draw_row): draw cells with row or cell styles. (row_new): set cell and row styles to NULL. (row_delete): detach & unref cell and row styles. (gtk_ctree_node_get_row_style) (gtk_ctree_node_set_row_style) (gtk_ctree_node_get_cell_style) (gtk_ctree_node_set_cell_style): Analogons of GtkCList functions (gtk_ctree_set_spacing): new function. set spacing between tree expander and cell contents (gtk_ctree_set_expander_style): new function. set expander style of ctree. (ctree_is_hot_spot): few changes due to draw_row modifications.
Diffstat (limited to 'tests/testgtk.c')
-rw-r--r--tests/testgtk.c504
1 files changed, 349 insertions, 155 deletions
diff --git a/tests/testgtk.c b/tests/testgtk.c
index 49c592fa6..914725b21 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -3468,6 +3468,46 @@ static char * mini_page_xpm[] = {
" oooooooooo ",
" "};
+static char * gtk_mini_xpm[] = {
+"15 20 17 1",
+" c None",
+". c #14121F",
+"+ c #278828",
+"@ c #9B3334",
+"# c #284C72",
+"$ c #24692A",
+"% c #69282E",
+"& c #37C539",
+"* c #1D2F4D",
+"= c #6D7076",
+"- c #7D8482",
+"; c #E24A49",
+"> c #515357",
+", c #9B9C9B",
+"' c #2FA232",
+") c #3CE23D",
+"! c #3B6CCB",
+" ",
+" ***> ",
+" >.*!!!* ",
+" ***....#*= ",
+" *!*.!!!**!!# ",
+" .!!#*!#*!!!!# ",
+" @%#!.##.*!!$& ",
+" @;%*!*.#!#')) ",
+" @;;@%!!*$&)'' ",
+" @%.%@%$'&)$+' ",
+" @;...@$'*'*)+ ",
+" @;%..@$+*.')$ ",
+" @;%%;;$+..$)# ",
+" @;%%;@$$$'.$# ",
+" %;@@;;$$+))&* ",
+" %;;;@+$&)&* ",
+" %;;@'))+> ",
+" %;@'&# ",
+" >%$$ ",
+" >= "};
+
#define TESTGTK_CLIST_COLUMNS 20
static gint clist_rows = 0;
static GtkWidget *clist_omenu;
@@ -3480,11 +3520,14 @@ add1000_clist (GtkWidget *widget, gpointer data)
char *texts[TESTGTK_CLIST_COLUMNS];
GdkBitmap *mask;
GdkPixmap *pixmap;
-
- pixmap = gdk_pixmap_create_from_xpm_d (GTK_CLIST (data)->clist_window,
+ GtkCList *clist;
+
+ clist = GTK_CLIST (data);
+
+ pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
&mask,
&GTK_WIDGET (data)->style->white,
- mini_page_xpm);
+ gtk_mini_xpm);
for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
{
@@ -3499,9 +3542,9 @@ add1000_clist (GtkWidget *widget, gpointer data)
gtk_clist_freeze (GTK_CLIST (data));
for (i = 0; i < 1000; i++)
{
- sprintf (text[0], "Row %d", rand() % 10000 /*clist_rows++*/);
- row = gtk_clist_append (GTK_CLIST (data), texts);
- gtk_clist_set_pixtext (GTK_CLIST (data), row, 3, "Hello World", 5, pixmap, mask);
+ sprintf (text[0], "Row %d", rand() % 10000);
+ row = gtk_clist_append (clist, texts);
+ gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
}
gtk_clist_thaw (GTK_CLIST (data));
@@ -3692,10 +3735,48 @@ insert_row_clist (GtkWidget *widget, gpointer data)
"This", "is", "a", "inserted", "row."
};
+ static GtkStyle *style1 = NULL;
+ static GtkStyle *style2 = NULL;
+ static GtkStyle *style3 = NULL;
+ gint row;
+
if (GTK_CLIST (data)->focus_row >= 0)
- gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row, text);
+ row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
+ text);
else
- gtk_clist_insert (GTK_CLIST (data), 0, text);
+ row = gtk_clist_prepend (GTK_CLIST (data), text);
+
+ if (!style1)
+ {
+ GdkColor col1;
+ GdkColor col2;
+
+ col1.red = 0;
+ col1.green = 56000;
+ col1.blue = 0;
+ col2.red = 32000;
+ col2.green = 0;
+ col2.blue = 56000;
+
+ style1 = gtk_style_copy (GTK_WIDGET (data)->style);
+ style1->bg[GTK_STATE_PRELIGHT] = col1;
+ style1->bg[GTK_STATE_SELECTED] = col2;
+
+ style2 = gtk_style_copy (GTK_WIDGET (data)->style);
+ style2->fg[GTK_STATE_PRELIGHT] = col1;
+ style2->fg[GTK_STATE_SELECTED] = col2;
+
+ style3 = gtk_style_copy (GTK_WIDGET (data)->style);
+ style3->fg[GTK_STATE_PRELIGHT] = col1;
+ style3->bg[GTK_STATE_PRELIGHT] = col2;
+ gdk_font_unref (style3->font);
+ style3->font =
+ gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
+ }
+
+ gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
+ gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
+ gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
clist_rows++;
}
@@ -3749,7 +3830,9 @@ clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
static void
clist_click_column (GtkCList *clist, gint column, gpointer data)
{
- if (column == clist->sort_column)
+ if (column == 5)
+ gtk_clist_set_column_visibility (clist, column, FALSE);
+ else if (column == clist->sort_column)
{
if (clist->sort_type == GTK_SORT_ASCENDING)
clist->sort_type = GTK_SORT_DESCENDING;
@@ -3770,10 +3853,11 @@ create_clist (void)
static char *titles[] =
{
- "Title 0", "Title 1", "Title 2", "Title 3", "Title 4",
- "Title 5", "Title 6", "Title 7", "Title 8", "Title 9",
- "Title 10", "Title 11", "Title 12", "Title 13", "Title 14",
- "Title 15", "Title 16", "Title 17", "Title 18", "Title 19"
+ "Title 0", "Title 1", "not resizeable", "max width 120",
+ "min width 40", "hide column", "Title 6", "Title 7",
+ "Title 8", "Title 9", "Title 10", "Title 11", "Title 12",
+ "Title 13", "Title 14", "Title 15", "Title 16", "Title 17",
+ "Title 18", "Title 19"
};
static OptionMenuItem items[] =
@@ -3796,14 +3880,17 @@ create_clist (void)
GtkWidget *undo_button;
GtkWidget *label;
+ GtkStyle *style;
+ GdkColor col1;
+ GdkColor col2;
+
if (!window)
{
clist_rows = 0;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed),
- &window);
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
gtk_window_set_title (GTK_WINDOW (window), "clist");
gtk_container_border_width (GTK_CONTAINER (window), 0);
@@ -3821,41 +3908,32 @@ create_clist (void)
/*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/
gtk_signal_connect (GTK_OBJECT (clist), "click_column",
- (GtkSignalFunc) clist_click_column,
- NULL);
+ (GtkSignalFunc) clist_click_column, NULL);
/* control buttons */
button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) add1000_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) add1000_clist, (gpointer) clist);
button = gtk_button_new_with_label ("Add 10,000 Rows");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) add10000_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) add10000_clist, (gpointer) clist);
button = gtk_button_new_with_label ("Clear List");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) clear_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) clear_clist, (gpointer) clist);
button = gtk_button_new_with_label ("Remove Row");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) remove_row_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) remove_row_clist, (gpointer) clist);
/* second layer of buttons */
box2 = gtk_hbox_new (FALSE, 10);
@@ -3865,34 +3943,26 @@ create_clist (void)
button = gtk_button_new_with_label ("Insert Row");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) insert_row_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) insert_row_clist, (gpointer) clist);
button = gtk_button_new_with_label ("Show Title Buttons");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) show_titles_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) show_titles_clist, (gpointer) clist);
button = gtk_button_new_with_label ("Hide Title Buttons");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) hide_titles_clist,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) hide_titles_clist, (gpointer) clist);
button = gtk_button_new_with_label ("Warning Test");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (button),
- "clicked",
- (GtkSignalFunc) clist_warning_test,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) clist_warning_test,(gpointer) clist);
box2 = gtk_hbox_new (FALSE, 10);
gtk_container_border_width (GTK_CONTAINER (box2), 10);
@@ -3900,10 +3970,8 @@ create_clist (void)
undo_button = gtk_button_new_with_label ("Undo last selection");
gtk_box_pack_start (GTK_BOX (box2), undo_button, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (undo_button),
- "clicked",
- (GtkSignalFunc) undo_selection,
- (gpointer) clist);
+ gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
+ (GtkSignalFunc) undo_selection, (gpointer) clist);
label = gtk_label_new ("Selection Mode :");
gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
@@ -3940,6 +4008,10 @@ create_clist (void)
for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
+ gtk_clist_set_column_resizeable (GTK_CLIST (clist), 2, FALSE);
+ gtk_clist_set_column_max_width (GTK_CLIST (clist), 3, 120);
+ gtk_clist_set_column_min_width (GTK_CLIST (clist), 4, 40);
+
gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
@@ -3958,10 +4030,35 @@ create_clist (void)
sprintf (text[1], "Right");
sprintf (text[2], "Center");
+ col1.red = 56000;
+ col1.green = 0;
+ col1.blue = 0;
+ col2.red = 0;
+ col2.green = 56000;
+ col2.blue = 32000;
+
+ style = gtk_style_new ();
+ style->fg[GTK_STATE_PRELIGHT] = col1;
+ style->bg[GTK_STATE_PRELIGHT] = col2;
+
+ gdk_font_unref (style->font);
+ style->font =
+ gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
+
for (i = 0; i < 10; i++)
{
sprintf (text[0], "Row %d", clist_rows++);
gtk_clist_append (GTK_CLIST (clist), texts);
+
+ switch (i % 4)
+ {
+ case 2:
+ gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
+ break;
+ default:
+ gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
+ break;
+ }
}
gtk_container_border_width (GTK_CONTAINER (clist), 5);
@@ -4014,10 +4111,11 @@ static GtkWidget *vis_label;
static GtkWidget *omenu1;
static GtkWidget *omenu2;
static GtkWidget *omenu3;
+static GtkWidget *omenu4;
static GtkWidget *spin1;
static GtkWidget *spin2;
static GtkWidget *spin3;
-static GdkColor *col_bg;
+static gint line_style;
void after_press (GtkCTree *ctree, gpointer data)
{
@@ -4150,6 +4248,55 @@ void select_all (GtkWidget *widget, GtkCTree *ctree)
after_press (ctree, NULL);
}
+void change_style (GtkWidget *widget, GtkCTree *ctree)
+{
+ static GtkStyle *style1 = NULL;
+ static GtkStyle *style2 = NULL;
+
+ GtkCTreeNode *node;
+ GdkColor col1;
+ GdkColor col2;
+
+ if (GTK_CLIST (ctree)->focus_row >= 0)
+ node = GTK_CTREE_NODE
+ (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
+ else
+ node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
+
+ if (!node)
+ return;
+
+ if (!style1)
+ {
+ col1.red = 0;
+ col1.green = 56000;
+ col1.blue = 0;
+ col2.red = 32000;
+ col2.green = 0;
+ col2.blue = 56000;
+
+ style1 = gtk_style_new ();
+ style1->bg[GTK_STATE_PRELIGHT] = col1;
+ style1->fg[GTK_STATE_SELECTED] = col2;
+
+ style2 = gtk_style_new ();
+ style2->bg[GTK_STATE_SELECTED] = col2;
+ style2->fg[GTK_STATE_PRELIGHT] = col1;
+ style2->bg[GTK_STATE_PRELIGHT] = col2;
+ gdk_font_unref (style2->font);
+ style2->font =
+ gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
+ }
+
+ gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
+ gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
+
+ if (GTK_CTREE_ROW (node)->children)
+ gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
+ style2);
+
+}
+
void unselect_all (GtkWidget *widget, GtkCTree *ctree)
{
gtk_ctree_unselect_recursive (ctree, NULL);
@@ -4204,11 +4351,6 @@ void remove_selection (GtkWidget *widget, GtkCTree *ctree)
after_press (ctree, NULL);
}
-void sort_all (GtkWidget *widget, GtkCTree *ctree)
-{
- gtk_ctree_sort_recursive (ctree, NULL);
-}
-
struct _ExportStruct {
gchar *tree;
gchar *info;
@@ -4352,6 +4494,11 @@ void change_indent (GtkWidget *widget, GtkCTree *ctree)
gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
}
+void change_spacing (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
+}
+
void change_row_height (GtkWidget *widget, GtkCList *clist)
{
gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
@@ -4364,24 +4511,20 @@ void toggle_reorderable (GtkWidget *widget, GtkCTree *ctree)
void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
{
+ GtkStyle *style = NULL;
+
if (!node)
return;
if (ctree->line_style != GTK_CTREE_LINES_TABBED)
{
- if (GTK_CTREE_ROW (node)->is_leaf)
- {
- if (GTK_CTREE_ROW (node)->parent)
- gtk_ctree_node_set_background
- (ctree, node,
- GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data);
- }
- else
- gtk_ctree_node_set_background (ctree, node,
- GTK_CTREE_ROW (node)->row.data);
+ if (!GTK_CTREE_ROW (node)->is_leaf)
+ style = GTK_CTREE_ROW (node)->row.data;
+ else if (GTK_CTREE_ROW (node)->parent)
+ style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
}
- else
- gtk_ctree_node_set_background (ctree, node, NULL);
+
+ gtk_ctree_node_set_row_style (ctree, node, style);
}
void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
@@ -4392,14 +4535,28 @@ void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
return;
RADIOMENUTOGGLED ((GtkRadioMenuItem *)
- (((GtkOptionMenu *)omenu1)->menu_item),i);
+ (((GtkOptionMenu *)omenu1)->menu_item), i);
if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
- ((GtkCTreeLineStyle) (3-i)) != GTK_CTREE_LINES_TABBED) ||
+ ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
(ctree->line_style != GTK_CTREE_LINES_TABBED &&
- ((GtkCTreeLineStyle) (3-i)) == GTK_CTREE_LINES_TABBED))
+ ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
- gtk_ctree_set_line_style (ctree, (GtkCTreeLineStyle) (3-i));
+ gtk_ctree_set_line_style (ctree, 3 - i);
+ line_style = 3 - i;
+}
+
+void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
+{
+ gint i;
+
+ if (!GTK_WIDGET_MAPPED (widget))
+ return;
+
+ RADIOMENUTOGGLED ((GtkRadioMenuItem *)
+ (((GtkOptionMenu *)omenu2)->menu_item), i);
+
+ gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
}
void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
@@ -4410,10 +4567,10 @@ void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
return;
RADIOMENUTOGGLED ((GtkRadioMenuItem *)
- (((GtkOptionMenu *)omenu2)->menu_item),i);
+ (((GtkOptionMenu *)omenu3)->menu_item), i);
gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
- (GtkJustification) (1-i));
+ (GtkJustification) (1 - i));
}
void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
@@ -4424,12 +4581,12 @@ void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
return;
RADIOMENUTOGGLED ((GtkRadioMenuItem *)
- (((GtkOptionMenu *)omenu3)->menu_item), i);
+ (((GtkOptionMenu *)omenu4)->menu_item), i);
- gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3-i));
+ gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
after_press (ctree, NULL);
}
-
+
void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
gint num_books, gint num_pages, GtkCTreeNode *parent)
{
@@ -4452,8 +4609,9 @@ void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
pixmap3, mask3, NULL, NULL,
TRUE, FALSE);
- if (ctree->line_style == GTK_CTREE_LINES_TABBED)
- gtk_ctree_node_set_background (ctree, sibling, col_bg);
+ if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
+ gtk_ctree_node_set_row_style (ctree, sibling,
+ GTK_CTREE_ROW (parent)->row.style);
}
if (cur_depth == depth)
@@ -4461,6 +4619,8 @@ void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
for (i = num_books; i > 0; i--)
{
+ GtkStyle *style;
+
books++;
sprintf (buf1, "Book %02d", (gint) rand() % 100);
sprintf (buf2, "Item %d-%d", cur_depth, i);
@@ -4468,32 +4628,30 @@ void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
pixmap1, mask1, pixmap2, mask2,
FALSE, FALSE);
- col_bg = g_new (GdkColor, 1);
-
- if (cur_depth % 3 == 0)
- {
- col_bg->red = 10000 * (cur_depth % 6);
- col_bg->green = 0;
- col_bg->blue = 65535 - ((i * 10000) % 65535);
- }
- else if (cur_depth % 3 == 1)
+ style = gtk_style_new();
+ switch (cur_depth % 3)
{
- col_bg->red = 10000 * (cur_depth % 6);
- col_bg->green = 65535 - ((i * 10000) % 65535);
- col_bg->blue = 0;
- }
- else
- {
- col_bg->red = 65535 - ((i * 10000) % 65535);
- col_bg->green = 0;
- col_bg->blue = 10000 * (cur_depth % 6);
+ case 0:
+ style->bg[GTK_STATE_PRELIGHT].red = 10000 * (cur_depth % 6);
+ style->bg[GTK_STATE_PRELIGHT].green = 0;
+ style->bg[GTK_STATE_PRELIGHT].blue = 65535 - ((i * 10000) % 65535);
+ break;
+ case 1:
+ style->bg[GTK_STATE_PRELIGHT].red = 10000 * (cur_depth % 6);
+ style->bg[GTK_STATE_PRELIGHT].green = 65535 - ((i * 10000) % 65535);
+ style->bg[GTK_STATE_PRELIGHT].blue = 0;
+ break;
+ default:
+ style->bg[GTK_STATE_PRELIGHT].red = 65535 - ((i * 10000) % 65535);
+ style->bg[GTK_STATE_PRELIGHT].green = 0;
+ style->bg[GTK_STATE_PRELIGHT].blue = 10000 * (cur_depth % 6);
+ break;
}
-
- gdk_color_alloc (gtk_widget_get_colormap (GTK_WIDGET (ctree)), col_bg);
- gtk_ctree_node_set_row_data_full (ctree, sibling, col_bg, g_free);
+ gtk_ctree_node_set_row_data_full (ctree, sibling, style,
+ (GtkDestroyNotify) gtk_style_unref);
if (ctree->line_style == GTK_CTREE_LINES_TABBED)
- gtk_ctree_node_set_background (ctree, sibling, col_bg);
+ gtk_ctree_node_set_row_style (ctree, sibling, style);
build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
sibling);
@@ -4506,6 +4664,7 @@ void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
gchar label1[] = "Root";
gchar label2[] = "";
GtkCTreeNode *parent;
+ GtkStyle *style;
guint b, d, p, n;
text[0] = label1;
@@ -4532,14 +4691,15 @@ void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
mask1, pixmap2, mask2, FALSE, TRUE);
- col_bg = g_new (GdkColor, 1);
- col_bg->red = 0;
- col_bg->green = 45000;
- col_bg->blue = 55000;
- gdk_color_alloc (gtk_widget_get_colormap (GTK_WIDGET (ctree)), col_bg);
- gtk_ctree_node_set_row_data_full (ctree, parent, col_bg, g_free);
+ style = gtk_style_new ();
+ style->bg[GTK_STATE_PRELIGHT].red = 0;
+ style->bg[GTK_STATE_PRELIGHT].green = 45000;
+ style->bg[GTK_STATE_PRELIGHT].blue = 55000;
+ gtk_ctree_node_set_row_data_full (ctree, parent, style,
+ (GtkDestroyNotify) gtk_style_unref);
+
if (ctree->line_style == GTK_CTREE_LINES_TABBED)
- gtk_ctree_node_set_background (ctree, parent, col_bg);
+ gtk_ctree_node_set_row_style (ctree, parent, style);
build_recursive (ctree, 1, d, b, p, parent);
gtk_clist_thaw (GTK_CLIST (ctree));
@@ -4572,6 +4732,8 @@ void create_ctree (void)
GtkTooltips *tooltips;
GtkCTree *ctree;
GtkWidget *vbox;
+ GtkWidget *bbox;
+ GtkWidget *mbox;
GtkWidget *hbox;
GtkWidget *hbox2;
GtkWidget *frame;
@@ -4587,19 +4749,27 @@ void create_ctree (void)
static OptionMenuItem items1[] =
{
+ { "No lines", ctree_toggle_line_style },
{ "Solid", ctree_toggle_line_style },
{ "Dotted", ctree_toggle_line_style },
- { "Tabbed", ctree_toggle_line_style },
- { "No lines", ctree_toggle_line_style }
+ { "Tabbed", ctree_toggle_line_style }
};
static OptionMenuItem items2[] =
{
+ { "None", ctree_toggle_expander_style },
+ { "Square", ctree_toggle_expander_style },
+ { "Triangle", ctree_toggle_expander_style },
+ { "Circular", ctree_toggle_expander_style }
+ };
+
+ static OptionMenuItem items3[] =
+ {
{ "Left", ctree_toggle_justify },
{ "Right", ctree_toggle_justify }
};
- static OptionMenuItem items3[] =
+ static OptionMenuItem items4[] =
{
{ "Single", ctree_toggle_sel_mode },
{ "Browse", ctree_toggle_sel_mode },
@@ -4665,6 +4835,8 @@ void create_ctree (void)
ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
+ line_style = GTK_CTREE_LINES_DOTTED;
+
gtk_ctree_set_reorderable (ctree, TRUE);
gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
(GtkSignalFunc) ctree_click_column,
@@ -4700,9 +4872,53 @@ void create_ctree (void)
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (rebuild_tree), ctree);
+ bbox = gtk_hbox_new (FALSE, 5);
+ gtk_container_border_width (GTK_CONTAINER (bbox), 5);
+ gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
+
+ mbox = gtk_vbox_new (TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
+
+ label = gtk_label_new ("Row height :");
+ gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
+
+ label = gtk_label_new ("Indent :");
+ gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
+
+ label = gtk_label_new ("Spacing :");
+ gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
+
+ mbox = gtk_vbox_new (TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
+ spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_tooltips_set_tip (tooltips, spinner,
+ "Row height of list items", NULL);
+ gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+ GTK_SIGNAL_FUNC (change_row_height), ctree);
+ gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
+ gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
+ spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_tooltips_set_tip (tooltips, spinner, "Tree indentation.", NULL);
+ gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+ GTK_SIGNAL_FUNC (change_indent), ctree);
+ gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
+ spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_tooltips_set_tip (tooltips, spinner, "Tree spacing.", NULL);
+ gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+ GTK_SIGNAL_FUNC (change_spacing), ctree);
+ gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
+
+ mbox = gtk_vbox_new (TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
+
hbox = gtk_hbox_new (FALSE, 5);
- gtk_container_border_width (GTK_CONTAINER (hbox), 5);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
button = gtk_button_new_with_label ("Expand all");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
@@ -4714,9 +4930,9 @@ void create_ctree (void)
GTK_SIGNAL_FUNC (collapse_all), ctree);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
- button = gtk_button_new_with_label ("Sort tree");
+ button = gtk_button_new_with_label ("Change Style");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (sort_all), ctree);
+ GTK_SIGNAL_FUNC (change_style), ctree);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
button = gtk_button_new_with_label ("Export tree");
@@ -4725,20 +4941,7 @@ void create_ctree (void)
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
hbox = gtk_hbox_new (FALSE, 5);
- gtk_container_border_width (GTK_CONTAINER (hbox), 5);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
- label = gtk_label_new ("Row height :");
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
-
- adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
- spinner = gtk_spin_button_new (adj, 0, 0);
- gtk_tooltips_set_tip (tooltips, spinner,
- "Row height of list items", NULL);
- gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
- GTK_SIGNAL_FUNC (change_row_height), ctree);
- gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, TRUE, 5);
- gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
+ gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
button = gtk_button_new_with_label ("Select all");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
@@ -4755,23 +4958,6 @@ void create_ctree (void)
GTK_SIGNAL_FUNC (remove_selection), ctree);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
- hbox = gtk_hbox_new (TRUE, 5);
- gtk_container_border_width (GTK_CONTAINER (hbox), 5);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
- hbox2 = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), hbox2, FALSE, TRUE, 0);
-
- label = gtk_label_new ("Indent :");
- gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
-
- adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
- spinner = gtk_spin_button_new (adj, 0, 0);
- gtk_tooltips_set_tip (tooltips, spinner, "Tree indentation.", NULL);
- gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
- GTK_SIGNAL_FUNC (change_indent), ctree);
- gtk_box_pack_start (GTK_BOX (hbox2), spinner, FALSE, TRUE, 5);
-
check = gtk_check_button_new_with_label ("Reorderable");
gtk_tooltips_set_tip (tooltips, check,
"Tree items can be reordered by dragging.", NULL);
@@ -4779,21 +4965,29 @@ void create_ctree (void)
GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (check), TRUE);
+
+ hbox = gtk_hbox_new (TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
- omenu1 = build_option_menu (items1, 4, 1, ctree);
+ omenu1 = build_option_menu (items1, 4, 2, ctree);
gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
- omenu2 = build_option_menu (items2, 2, 0, ctree);
- gtk_tooltips_set_tip (tooltips, omenu2, "The tree's justification.",
+ omenu2 = build_option_menu (items2, 4, 1, ctree);
+ gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
NULL);
gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
-
- omenu3 = build_option_menu (items3, 4, 3, ctree);
- gtk_tooltips_set_tip (tooltips, omenu3, "The list's selection mode.",
+
+ omenu3 = build_option_menu (items3, 2, 0, ctree);
+ gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
NULL);
gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
+ omenu4 = build_option_menu (items4, 4, 3, ctree);
+ gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
+ NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
+
gtk_widget_realize (window);
pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,