* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "gtk.h"
#include "../gdk/gdk.h"
#include "../gdk/gdkx.h"
#include "circles.xbm"
-/* Variables used by the Drag/Drop and Shape Window demos */
-static GtkWidget *modeller = NULL;
-static GtkWidget *sheets = NULL;
-static GtkWidget *rings = NULL;
-void create_shapes(void);
-
+GtkWidget *shape_create_icon (char *xpm_file,
+ gint x,
+ gint y,
+ gint px,
+ gint py,
+ gint window_type);
/* macro, structure and variables used by tree window demos */
#define DEFAULT_NUMBER_OF_ITEM 3
guint nb_item_add;
GtkWidget* add_button;
GtkWidget* remove_button;
+ GtkWidget* subtree_button;
} sTreeButtons;
/* end of tree section */
-void
-destroy_window (GtkWidget *widget,
- GtkWidget **window)
-{
- *window = NULL;
-}
-
static void
destroy_tooltips (GtkWidget *widget, GtkWindow **window)
{
}
static void
-create_buttons ()
+create_buttons (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC (destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC (gtk_true),
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "buttons");
}
static void
-create_toggle_buttons ()
+create_toggle_buttons (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "toggle buttons");
}
static void
-create_check_buttons ()
+create_check_buttons (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "check buttons");
}
static void
-create_radio_buttons ()
+create_radio_buttons (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(bbox_widget_destroy), window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(bbox_widget_destroy), window);
if (horizontal)
{
}
static void
-test_hbbox ()
+test_hbbox (void)
{
create_bbox_window (TRUE, "Spread", 50, 40, 85, 28, GTK_BUTTONBOX_SPREAD);
create_bbox_window (TRUE, "Edge", 200, 40, 85, 25, GTK_BUTTONBOX_EDGE);
}
static void
-test_vbbox ()
+test_vbbox (void)
{
create_bbox_window (FALSE, "Spread", 50, 40, 85, 25, GTK_BUTTONBOX_SPREAD);
create_bbox_window (FALSE, "Edge", 250, 40, 85, 28, GTK_BUTTONBOX_EDGE);
}
static void
-create_button_box ()
+create_button_box (void)
{
static GtkWidget* window = NULL;
GtkWidget* bbox;
"Button Box Test");
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window), &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window), &window);
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
+ &window);
gtk_container_border_width (GTK_CONTAINER (window), 20);
pixmap = gdk_pixmap_create_from_xpm (window, &mask,
background,
- "test.xpm");
+ filename);
wpixmap = gtk_pixmap_new (pixmap, mask);
return wpixmap;
gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
}
+static void
+set_toolbar_borders (GtkWidget *widget,
+ gpointer data)
+{
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
+}
+
+static void
+set_toolbar_borderless (GtkWidget *widget,
+ gpointer data)
+{
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
+}
+
static void
create_toolbar (void)
{
gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC (destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC (destroy_window),
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&window);
gtk_container_border_width (GTK_CONTAINER (window), 0);
gtk_widget_realize (window);
toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
"Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
(GtkSignalFunc) set_toolbar_disable, toolbar);
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Borders", "Show Borders", NULL,
+ new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) set_toolbar_borders, toolbar);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Borderless", "Hide Borders", NULL,
+ new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) set_toolbar_borderless, toolbar);
+
gtk_container_add (GTK_CONTAINER (window), toolbar);
gtk_widget_show (toolbar);
}
gtk_widget_realize (window);
toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
"Horizontal", "Horizontal toolbar layout", NULL,
new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
(GtkSignalFunc) set_toolbar_disable, toolbar);
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Borders", "Show Borders", NULL,
+ new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) set_toolbar_borders, toolbar);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Borderless", "Hide Borders", NULL,
+ new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) set_toolbar_borderless, toolbar);
+
return toolbar;
}
}
static void
-create_statusbar ()
+create_statusbar (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC (gtk_true),
- NULL);
gtk_window_set_title (GTK_WINDOW (window), "statusbar");
gtk_container_border_width (GTK_CONTAINER (window), 0);
action);
}
-/* funtions used by tree window demos */
-static guint
-cb_tree_delete_event(GtkWidget* w)
-{
- return TRUE;
-}
-
static void
cb_tree_destroy_event(GtkWidget* w)
{
g_list_free (clear_list);
}
+static void
+cb_remove_subtree(GtkWidget*w, GtkTree* tree)
+{
+ GList* selected_list;
+ GtkTreeItem *item;
+
+ selected_list = GTK_TREE_SELECTION(tree);
+
+ if (selected_list)
+ {
+ item = GTK_TREE_ITEM (selected_list->data);
+ if (item->subtree)
+ gtk_tree_item_remove_subtree (item);
+ }
+}
+
static void
cb_tree_changed(GtkTree* tree)
{
else
gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
+ gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
}
else
{
gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
+ gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
}
}
/* create top level window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
- gtk_signal_connect(GTK_OBJECT (window), "delete_event",
- (GtkSignalFunc) cb_tree_delete_event, NULL);
gtk_signal_connect(GTK_OBJECT(window), "destroy",
(GtkSignalFunc) cb_tree_destroy_event, NULL);
gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
gtk_widget_show(button);
tree_buttons->remove_button = button;
+ button = gtk_button_new_with_label("Remove Subtree");
+ gtk_widget_set_sensitive(button, FALSE);
+ gtk_signal_connect(GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) cb_remove_subtree,
+ (gpointer)root_tree);
+ gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
+ tree_buttons->subtree_button = button;
+
/* create separator */
separator = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
static void
cb_create_tree(GtkWidget* w)
{
- guint selection_mode;
+ guint selection_mode = GTK_SELECTION_SINGLE;
guint view_line;
guint draw_line;
guint no_root_item;
if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
selection_mode = GTK_SELECTION_BROWSE;
else
- if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.multiple_button)->active)
- selection_mode = GTK_SELECTION_MULTIPLE;
+ selection_mode = GTK_SELECTION_MULTIPLE;
/* get options choice */
draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
+ if (pow (nb_item, recursion_level) > 10000)
+ {
+ g_print ("%g total items? That will take a very long time. Try less\n",
+ pow (nb_item, recursion_level));
+ return;
+ }
+
create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
}
/* create toplevel window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Tree Mode Selection Window");
- gtk_signal_connect(GTK_OBJECT (window), "delete_event",
- (GtkSignalFunc) gtk_main_quit, NULL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window), &window);
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
+ &window);
box1 = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), box1);
gtk_widget_show(box1);
/* end of function used by tree demos */
static void
-create_handle_box ()
+create_handle_box (void)
{
static GtkWidget* window = NULL;
+ GtkWidget *handle_box;
+ GtkWidget *handle_box2;
+ GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *toolbar;
+ GtkWidget *label;
+ GtkWidget *separator;
if (!window)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window),
"Handle Box Test");
+ gtk_window_set_policy (GTK_WINDOW (window),
+ TRUE,
+ TRUE,
+ FALSE);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window), &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window), &window);
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
+ &window);
gtk_container_border_width (GTK_CONTAINER (window), 20);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new ("Above");
+ gtk_container_add (GTK_CONTAINER (vbox), label);
+ gtk_widget_show (label);
+
+ separator = gtk_hseparator_new ();
+ gtk_container_add (GTK_CONTAINER (vbox), separator);
+ gtk_widget_show (separator);
- hbox = gtk_handle_box_new ();
- gtk_container_add (GTK_CONTAINER (window), hbox);
- gtk_signal_connect (GTK_OBJECT (hbox),
+ hbox = gtk_hbox_new (FALSE, 10);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ separator = gtk_hseparator_new ();
+ gtk_container_add (GTK_CONTAINER (vbox), separator);
+ gtk_widget_show (separator);
+
+ label = gtk_label_new ("Below");
+ gtk_container_add (GTK_CONTAINER (vbox), label);
+ gtk_widget_show (label);
+
+ handle_box = gtk_handle_box_new ();
+ gtk_container_add (GTK_CONTAINER (hbox), handle_box);
+ gtk_signal_connect (GTK_OBJECT (handle_box),
"child_attached",
GTK_SIGNAL_FUNC (handle_box_child_signal),
"attached");
- gtk_signal_connect (GTK_OBJECT (hbox),
+ gtk_signal_connect (GTK_OBJECT (handle_box),
"child_detached",
GTK_SIGNAL_FUNC (handle_box_child_signal),
"detached");
- gtk_widget_show (hbox);
+ gtk_widget_show (handle_box);
toolbar = make_toolbar (window);
- gtk_container_add (GTK_CONTAINER (hbox), toolbar);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+ gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
gtk_widget_show (toolbar);
+
+ handle_box = gtk_handle_box_new ();
+ gtk_container_add (GTK_CONTAINER (hbox), handle_box);
+ gtk_signal_connect (GTK_OBJECT (handle_box),
+ "child_attached",
+ GTK_SIGNAL_FUNC (handle_box_child_signal),
+ "attached");
+ gtk_signal_connect (GTK_OBJECT (handle_box),
+ "child_detached",
+ GTK_SIGNAL_FUNC (handle_box_child_signal),
+ "detached");
+ gtk_widget_show (handle_box);
+
+ handle_box2 = gtk_handle_box_new ();
+ gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
+ gtk_signal_connect (GTK_OBJECT (handle_box2),
+ "child_attached",
+ GTK_SIGNAL_FUNC (handle_box_child_signal),
+ "attached");
+ gtk_signal_connect (GTK_OBJECT (handle_box2),
+ "child_detached",
+ GTK_SIGNAL_FUNC (handle_box_child_signal),
+ "detached");
+ gtk_widget_show (handle_box2);
+
+ label = gtk_label_new ("Fooo!");
+ gtk_container_add (GTK_CONTAINER (handle_box2), label);
+ gtk_widget_show (label);
}
if (!GTK_WIDGET_VISIBLE (window))
gtk_type_name (GTK_OBJECT_TYPE (child)),
child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
- (gint) func_data);
+ GPOINTER_TO_INT (func_data));
}
static void
-create_reparent ()
+create_reparent (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "buttons");
gtk_signal_connect (GTK_OBJECT (label),
"parent_set",
GTK_SIGNAL_FUNC (set_parent_signal),
- (GtkObject*) 42);
+ GINT_TO_POINTER (42));
gtk_widget_show (label);
}
static void
-create_pixmap ()
+create_pixmap (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "pixmap");
gtk_widget_destroy (window);
}
+static void
+tips_query_widget_entered (GtkTipsQuery *tips_query,
+ GtkWidget *widget,
+ const gchar *tip_text,
+ const gchar *tip_private,
+ GtkWidget *toggle)
+{
+ if (GTK_TOGGLE_BUTTON (toggle)->active)
+ {
+ gtk_label_set (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
+ /* don't let GtkTipsQuery reset it's label */
+ gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
+ }
+}
+
static gint
-tips_query_widget_selected (GtkObject *object,
+tips_query_widget_selected (GtkWidget *tips_query,
GtkWidget *widget,
const gchar *tip_text,
const gchar *tip_private,
if (widget)
g_print ("Help \"%s\" requested for <%s>\n",
tip_private ? tip_private : "None",
- gtk_type_name (widget->object.klass->type));
+ gtk_type_name (GTK_OBJECT_TYPE (widget)));
return TRUE;
}
static void
-create_tooltips ()
+create_tooltips (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
GtkWidget *box2;
GtkWidget *box3;
GtkWidget *button;
+ GtkWidget *toggle;
GtkWidget *frame;
GtkWidget *tips_query;
GtkWidget *separator;
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (destroy_tooltips),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC (gtk_true),
- &window);
tooltips=gtk_tooltips_new();
gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
- gtk_tooltips_set_tip (tooltips,button,"This is button 2", "ContextHelp/buttons/2");
-
- button = gtk_toggle_button_new_with_label ("button3");
- gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- gtk_widget_show (button);
-
gtk_tooltips_set_tip (tooltips,
button,
- "This is button 3. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly.",
- "ContextHelp/buttons/3_long");
+ "This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly.",
+ "ContextHelp/buttons/2_long");
+
+ toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
+ gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
+ gtk_widget_show (toggle);
+
+ gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
box3 =
gtk_widget_new (gtk_vbox_get_type (),
"GtkWidget::visible", TRUE,
"GtkWidget::parent", box3,
"GtkTipsQuery::caller", button,
+ "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
"GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
NULL);
gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
gtk_menu_append (GTK_MENU (menu), menuitem);
gtk_widget_show (menuitem);
+ if (i == 3)
+ gtk_widget_set_sensitive (menuitem, FALSE);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1));
}
}
static void
-create_menus ()
+create_menus (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
+ gtk_signal_connect (GTK_OBJECT (window), "delete-event",
+ GTK_SIGNAL_FUNC (gtk_true),
+ NULL);
gtk_window_set_title (GTK_WINDOW (window), "menus");
gtk_container_border_width (GTK_CONTAINER (window), 0);
* GtkScrolledWindow
*/
static void
-create_scrolled_windows ()
+scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
+{
+ static GtkWidget *parent = NULL;
+ static GtkWidget *float_parent;
+
+ if (parent)
+ {
+ gtk_widget_reparent (scrollwin, parent);
+ gtk_widget_destroy (float_parent);
+ float_parent = NULL;
+ parent = NULL;
+ }
+ else
+ {
+ parent = widget->parent;
+ float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_reparent (scrollwin, float_parent);
+ gtk_widget_show (float_parent);
+ }
+}
+
+/*
+ * GtkScrolledWindow
+ */
+static void
+create_scrolled_windows (void)
{
static GtkWidget *window;
GtkWidget *scrolled_window;
window = gtk_dialog_new ();
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "dialog");
gtk_table_set_row_spacings (GTK_TABLE (table), 10);
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
gtk_container_add (GTK_CONTAINER (scrolled_window), table);
+ gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
+ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
gtk_widget_show (table);
for (i = 0; i < 20; i++)
button, TRUE, TRUE, 0);
gtk_widget_grab_default (button);
gtk_widget_show (button);
+
+ button = gtk_button_new_with_label ("remove");
+ gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(scrolled_windows_remove),
+ GTK_OBJECT (scrolled_window));
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
}
if (!GTK_WIDGET_VISIBLE (window))
}
static void
-create_entry ()
+create_entry (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
if (!window)
{
- cbitems = g_list_append(cbitems, "item1");
- cbitems = g_list_append(cbitems, "item2");
- cbitems = g_list_append(cbitems, "and item3");
+ cbitems = g_list_append(cbitems, "item0");
+ cbitems = g_list_append(cbitems, "item1 item1");
+ cbitems = g_list_append(cbitems, "item2 item2 item2");
+ cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
+ cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
+ cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
+ cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
+ cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
+ cbitems = g_list_append(cbitems, "item8 item8 item8");
+ cbitems = g_list_append(cbitems, "item9 item9");
+
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "entry");
gtk_widget_destroy (window);
}
-GtkWidget *spinner1;
+/*
+ * GtkSpinButton
+ */
+
+static GtkWidget *spinner1;
static void
toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
gtk_spin_button_set_update_policy (spin, GTK_UPDATE_ALWAYS);
}
+static void
+toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
+{
+ gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
+}
+
static void
change_digits (GtkWidget *widget, GtkSpinButton *spin)
{
- gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
+ gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
gtk_spin_button_get_value_as_int (spin));
}
static void
-create_spins ()
+get_value (GtkWidget *widget, gint data)
+{
+ gchar buf[32];
+ GtkLabel *label;
+ GtkSpinButton *spin;
+
+ spin = GTK_SPIN_BUTTON (spinner1);
+ label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
+ if (data == 1)
+ sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
+ else
+ sprintf (buf, "%0.*f", spin->digits,
+ gtk_spin_button_get_value_as_float (spin));
+ gtk_label_set (label, buf);
+}
+
+static void
+create_spins (void)
{
static GtkWidget *window = NULL;
GtkWidget *frame;
GtkWidget *spinner;
GtkWidget *button;
GtkWidget *label;
+ GtkWidget *val_label;
GtkAdjustment *adj;
if (!window)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC (destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC (destroy_window),
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
label = gtk_label_new ("Day :");
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
5.0, 0.0);
spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
label = gtk_label_new ("Month :");
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
5.0, 0.0);
spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
label = gtk_label_new ("Year :");
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
1.0, 100.0, 0.0);
spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
gtk_widget_set_usize (spinner, 55, 0);
gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
label = gtk_label_new ("Value :");
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
- adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 10000.0,
- 1.0, 100.0, 0.0);
- spinner1 = gtk_spin_button_new (adj, 1.0, 3);
- gtk_widget_set_usize (spinner1, 120, 0);
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
+ 0.5, 100.0, 0.0);
+ spinner1 = gtk_spin_button_new (adj, 1.0, 2);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
+ gtk_widget_set_usize (spinner1, 100, 0);
gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner1),
GTK_UPDATE_ALWAYS);
gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
label = gtk_label_new ("Digits :");
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
- adj = (GtkAdjustment *) gtk_adjustment_new (3.0, 0.0, 8.0,
- 1.0, 3.0, 0.0);
+ adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
spinner2 = gtk_spin_button_new (adj, 0.0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (change_digits),
(gpointer) spinner2);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
- button = gtk_check_button_new_with_label ("Snap to ticks");
+ button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (toggle_snap),
spinner1);
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
+ gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
+
+ button = gtk_check_button_new_with_label ("Numeric only input mode");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (toggle_numeric),
+ spinner1);
+ gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
+ val_label = gtk_label_new ("");
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
+
+ button = gtk_button_new_with_label ("Value as Int");
+ gtk_object_set_user_data (GTK_OBJECT (button), val_label);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (get_value),
+ (gpointer) 1);
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+
+ button = gtk_button_new_with_label ("Value as Float");
+ gtk_object_set_user_data (GTK_OBJECT (button), val_label);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (get_value),
+ (gpointer) 2);
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+
+ gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
+ gtk_label_set (GTK_LABEL (val_label), "0");
+
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
gtk_widget_destroy (window);
}
+/*
+ * Cursors
+ */
+
+static gint
+cursor_expose_event (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ GtkDrawingArea *darea;
+ GdkDrawable *drawable;
+ GdkGC *black_gc;
+ GdkGC *gray_gc;
+ GdkGC *white_gc;
+ guint max_width;
+ guint max_height;
+
+ g_return_val_if_fail (widget != NULL, TRUE);
+ g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
+
+ darea = GTK_DRAWING_AREA (widget);
+ drawable = widget->window;
+ white_gc = widget->style->white_gc;
+ gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
+ black_gc = widget->style->black_gc;
+ max_width = widget->allocation.width;
+ max_height = widget->allocation.height;
+
+ gdk_draw_rectangle (drawable, white_gc,
+ TRUE,
+ 0,
+ 0,
+ max_width,
+ max_height / 2);
+
+ gdk_draw_rectangle (drawable, black_gc,
+ TRUE,
+ 0,
+ max_height / 2,
+ max_width,
+ max_height / 2);
+
+ gdk_draw_rectangle (drawable, gray_gc,
+ TRUE,
+ max_width / 3,
+ max_height / 3,
+ max_width / 3,
+ max_height / 3);
+
+ return TRUE;
+}
+
+static void
+set_cursor (GtkWidget *spinner,
+ GtkWidget *widget)
+{
+ guint c;
+ GdkCursor *cursor;
+
+ c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
+ c &= 0xfe;
+
+ cursor = gdk_cursor_new (c);
+ gdk_window_set_cursor (widget->window, cursor);
+ gdk_cursor_destroy (cursor);
+}
+
+static gint
+cursor_event (GtkWidget *widget,
+ GdkEvent *event,
+ GtkSpinButton *spinner)
+{
+ if ((event->type == GDK_BUTTON_PRESS) &&
+ ((event->button.button == 1) ||
+ (event->button.button == 3)))
+ {
+ gtk_spin_button_spin (spinner,
+ event->button.button == 1 ? GTK_ARROW_UP : GTK_ARROW_DOWN,
+ spinner->adjustment->step_increment);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+create_cursors (void)
+{
+ static GtkWidget *window = NULL;
+ GtkWidget *frame;
+ GtkWidget *hbox;
+ GtkWidget *main_vbox;
+ GtkWidget *vbox;
+ GtkWidget *darea;
+ GtkWidget *spinner;
+ GtkWidget *button;
+ GtkWidget *label;
+ GtkWidget *any;
+ GtkAdjustment *adj;
+
+ if (!window)
+ {
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed),
+ &window);
+
+ gtk_window_set_title (GTK_WINDOW (window), "Cursors");
+
+ main_vbox = gtk_vbox_new (FALSE, 5);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);
+ gtk_container_add (GTK_CONTAINER (window), main_vbox);
+
+ vbox =
+ gtk_widget_new (gtk_vbox_get_type (),
+ "GtkBox::homogeneous", FALSE,
+ "GtkBox::spacing", 5,
+ "GtkContainer::border_width", 10,
+ "GtkWidget::parent", main_vbox,
+ "GtkWidget::visible", TRUE,
+ NULL);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox), 5);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+
+ label = gtk_label_new ("Cursor Value:");
+ gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0,
+ 0, 152,
+ 2,
+ 10, 0);
+ spinner = gtk_spin_button_new (adj, 0, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
+
+ frame =
+ gtk_widget_new (gtk_frame_get_type (),
+ "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
+ "GtkFrame::label_xalign", 0.5,
+ "GtkFrame::label", "Cursor Area",
+ "GtkContainer::border_width", 10,
+ "GtkWidget::parent", vbox,
+ "GtkWidget::visible", TRUE,
+ NULL);
+
+ darea = gtk_drawing_area_new ();
+ gtk_widget_set_usize (darea, 80, 80);
+ gtk_container_add (GTK_CONTAINER (frame), darea);
+ gtk_signal_connect (GTK_OBJECT (darea),
+ "expose_event",
+ GTK_SIGNAL_FUNC (cursor_expose_event),
+ NULL);
+ gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
+ gtk_signal_connect (GTK_OBJECT (darea),
+ "button_press_event",
+ GTK_SIGNAL_FUNC (cursor_event),
+ spinner);
+ gtk_widget_show (darea);
+
+ gtk_signal_connect (GTK_OBJECT (spinner), "changed",
+ GTK_SIGNAL_FUNC (set_cursor),
+ darea);
+
+ any =
+ gtk_widget_new (gtk_hseparator_get_type (),
+ "GtkWidget::visible", TRUE,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox), 10);
+ gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
+
+ button = gtk_button_new_with_label ("Close");
+ gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ GTK_OBJECT (window));
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+
+ gtk_widget_show_all (window);
+
+ set_cursor (spinner, darea);
+ }
+ else
+ gtk_widget_destroy (window);
+}
+
/*
* GtkList
*/
}
static void
-create_list ()
+create_list (void)
{
static GtkWidget *window = NULL;
static char *list_items[] =
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "list");
gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_MULTIPLE);
gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE);
gtk_container_add (GTK_CONTAINER (scrolled_win), list);
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (list),
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_win)));
gtk_widget_show (list);
for (i = 0; i < nlist_items; i++)
case GTK_CELL_PIXMAP:
g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
- g_print ("PIXMAP: %d\n", (int) pixmap);
- g_print ("MASK: %d\n", (int) mask);
+ g_print ("PIXMAP: %p\n", pixmap);
+ g_print ("MASK: %p\n", mask);
break;
case GTK_CELL_PIXTEXT:
gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
g_print ("TEXT: %s\n", text);
g_print ("SPACING: %d\n", spacing);
- g_print ("PIXMAP: %d\n", (int) pixmap);
- g_print ("MASK: %d\n", (int) mask);
+ g_print ("PIXMAP: %p\n", pixmap);
+ g_print ("MASK: %p\n", mask);
break;
default:
list = GTK_CLIST (widget)->selection;
while (list)
{
- g_print (" %d ", (gint) list->data);
+ g_print (" %d ", GPOINTER_TO_INT (list->data));
list = list->next;
}
case GTK_CELL_PIXMAP:
g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
- g_print ("PIXMAP: %d\n", (int) pixmap);
- g_print ("MASK: %d\n", (int) mask);
+ g_print ("PIXMAP: %p\n", pixmap);
+ g_print ("MASK: %p\n", mask);
break;
case GTK_CELL_PIXTEXT:
gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
g_print ("TEXT: %s\n", text);
g_print ("SPACING: %d\n", spacing);
- g_print ("PIXMAP: %d\n", (int) pixmap);
- g_print ("MASK: %d\n", (int) mask);
+ g_print ("PIXMAP: %p\n", pixmap);
+ g_print ("MASK: %p\n", mask);
break;
default:
list = GTK_CLIST (widget)->selection;
while (list)
{
- g_print (" %d ", (gint) list->data);
+ g_print (" %d ", GPOINTER_TO_INT (list->data));
list = list->next;
}
clist_selected_row = row;
}
-void
+static void
insert_row_clist (GtkWidget *widget, gpointer data)
{
static char *text[] =
clist_rows++;
}
-void
-create_clist ()
+static void
+clist_warning_test (GtkWidget *button,
+ GtkWidget *clist)
{
- gint i;
- static GtkWidget *window = NULL;
+ GtkWidget *child;
+ static gboolean add_remove = FALSE;
+
+ add_remove = !add_remove;
+
+ child = gtk_label_new ("Test");
+ gtk_widget_ref (child);
+ gtk_object_sink (GTK_OBJECT (child));
+
+ if (add_remove)
+ gtk_container_add (GTK_CONTAINER (clist), child);
+ else
+ {
+ child->parent = clist;
+ gtk_container_remove (GTK_CONTAINER (clist), child);
+ child->parent = NULL;
+ }
+
+ gtk_widget_destroy (child);
+ gtk_widget_unref (child);
+}
+
+static void
+create_clist (void)
+{
+ gint i;
+ static GtkWidget *window = NULL;
static char *titles[] =
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "clist");
gtk_widget_show (button);
+ 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_widget_show (button);
+
/* vbox for the list itself */
box2 = gtk_vbox_new (FALSE, 10);
gtk_container_border_width (GTK_CONTAINER (box2), 10);
}
+
+/*
+ * GtkCTree
+ */
+
+static char * book_open_xpm[] = {
+"16 16 4 1",
+" c None s None",
+". c black",
+"X c #808080",
+"o c white",
+" ",
+" .. ",
+" .Xo. ... ",
+" .Xoo. ..oo. ",
+" .Xooo.Xooo... ",
+" .Xooo.oooo.X. ",
+" .Xooo.Xooo.X. ",
+" .Xooo.oooo.X. ",
+" .Xooo.Xooo.X. ",
+" .Xooo.oooo.X. ",
+" .Xoo.Xoo..X. ",
+" .Xo.o..ooX. ",
+" .X..XXXXX. ",
+" ..X....... ",
+" .. ",
+" "};
+
+static char * book_closed_xpm[] = {
+"16 16 6 1",
+" c None s None",
+". c black",
+"X c red",
+"o c yellow",
+"O c #808080",
+"# c white",
+" ",
+" .. ",
+" ..XX. ",
+" ..XXXXX. ",
+" ..XXXXXXXX. ",
+".ooXXXXXXXXX. ",
+"..ooXXXXXXXXX. ",
+".X.ooXXXXXXXXX. ",
+".XX.ooXXXXXX.. ",
+" .XX.ooXXX..#O ",
+" .XX.oo..##OO. ",
+" .XX..##OO.. ",
+" .X.#OO.. ",
+" ..O.. ",
+" .. ",
+" "};
+
+static char * mini_page_xpm[] = {
+"16 16 4 1",
+" c None s None",
+". c black",
+"X c white",
+"o c #808080",
+" ",
+" ....... ",
+" .XXXXX.. ",
+" .XoooX.X. ",
+" .XXXXX.... ",
+" .XooooXoo.o ",
+" .XXXXXXXX.o ",
+" .XooooooX.o ",
+" .XXXXXXXX.o ",
+" .XooooooX.o ",
+" .XXXXXXXX.o ",
+" .XooooooX.o ",
+" .XXXXXXXX.o ",
+" ..........o ",
+" oooooooooo ",
+" "};
+
+GdkPixmap *pixmap1;
+GdkPixmap *pixmap2;
+GdkPixmap *pixmap3;
+GdkBitmap *mask1;
+GdkBitmap *mask2;
+GdkBitmap *mask3;
+
+static gint books = 0;
+static gint pages = 0;
+
+static GtkWidget *book_label;
+static GtkWidget *page_label;
+static GtkWidget *sel_label;
+static GtkWidget *vis_label;
+static GtkWidget *omenu;
+static GtkWidget *omenu2;
+static GtkWidget *omenu3;
+static GtkWidget *spin1;
+static GtkWidget *spin2;
+static GtkWidget *spin3;
+
+#define RADIOMENUTOGGLED(_rmi_, __i) { \
+ GSList * __g; \
+ __i = 0; \
+ __g = gtk_radio_menu_item_group(_rmi_); \
+ while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
+ __g = __g->next; \
+ __i++; \
+ }\
+}
+
+#define RADIOBUTTONTOGGLED(_rb_, __i) { \
+ GSList * __g; \
+ __i = 0; \
+ __g = gtk_radio_button_group(_rb_); \
+ while( __g && !((GtkToggleButton *)(__g->data))->active) { \
+ __g = __g->next; \
+ __i++; \
+ }\
+}
+
+void after_press (GtkCTree *ctree, gpointer data)
+{
+ char buf[80];
+
+ sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
+ gtk_label_set (GTK_LABEL (sel_label), buf);
+
+ sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
+ gtk_label_set (GTK_LABEL (vis_label), buf);
+
+ sprintf (buf, "%d", books);
+ gtk_label_set (GTK_LABEL (book_label), buf);
+
+ sprintf (buf, "%d", pages);
+ gtk_label_set (GTK_LABEL (page_label), buf);
+}
+
+void after_move (GtkCTree *ctree, GList *child, GList *parent,
+ GList *sibling, gpointer data)
+{
+ char *source;
+ char *target1;
+ char *target2;
+
+ gtk_ctree_get_node_info (ctree, child, &source,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ if (parent)
+ gtk_ctree_get_node_info (ctree, parent, &target1,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ if (sibling)
+ gtk_ctree_get_node_info (ctree, sibling, &target2,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+
+ g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
+ (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
+}
+
+gint button_press (GtkCTree *ctree, GdkEventButton *event, gpointer data)
+{
+ gint row;
+ gint column;
+ GList *work;
+ gint res;
+
+ res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
+ &row, &column);
+ if (!res && event->button != 3)
+ return FALSE;
+
+ work = g_list_nth (GTK_CLIST (ctree)->row_list, row);
+
+ switch (event->button)
+ {
+ case 1:
+ if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
+ event->state & GDK_SHIFT_MASK)
+ gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),"button_press_event");
+ break;
+ case 2:
+ if (GTK_CTREE_ROW (work)->children &&
+ gtk_ctree_is_hot_spot (ctree, event->x, event->y))
+ {
+ if (GTK_CTREE_ROW (work)->expanded)
+ gtk_ctree_collapse_recursive (ctree, work);
+ else
+ gtk_ctree_expand_recursive (ctree, work);
+ after_press (ctree, NULL);
+ gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
+ "button_press_event");
+ }
+ break;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+gint button_release (GtkCTree *ctree, GdkEventButton *event, gpointer data)
+{
+ gint row;
+ gint column;
+ GList *work;
+ gint res;
+
+ res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
+ &row, &column);
+ if (!res || event->button != 1)
+ return FALSE;
+
+ work = g_list_nth (GTK_CLIST (ctree)->row_list, row);
+
+ if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
+ event->state & GDK_SHIFT_MASK)
+ {
+ if (GTK_CTREE_ROW (work)->row.state == GTK_STATE_SELECTED)
+ gtk_ctree_unselect_recursive (ctree, work);
+ else
+ gtk_ctree_select_recursive (ctree, work);
+ after_press (ctree, NULL);
+ gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
+ "button_release_event");
+ }
+ return FALSE;
+}
+
+void count_items (GtkCTree *ctree, GList *list)
+{
+ if (GTK_CTREE_ROW (list)->is_leaf)
+ pages--;
+ else
+ books--;
+}
+
+void expand_all (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_expand_recursive (ctree, NULL);
+ after_press (ctree, NULL);
+}
+
+void collapse_all (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_collapse_recursive (ctree, NULL);
+ after_press (ctree, NULL);
+}
+
+void select_all (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_select_recursive (ctree, NULL);
+ after_press (ctree, NULL);
+}
+
+void unselect_all (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_unselect_recursive (ctree, NULL);
+ after_press (ctree, NULL);
+}
+
+void remove_selection (GtkWidget *widget, GtkCTree *ctree)
+{
+ GList *work;
+ GList *selection;
+ GList *new_sel;
+
+ selection = GTK_CLIST (ctree)->selection;
+ new_sel = NULL;
+
+ gtk_clist_freeze (GTK_CLIST (ctree));
+
+ while (selection)
+ {
+ work = selection->data;
+ if (GTK_CTREE_ROW (work)->is_leaf)
+ pages--;
+ else
+ gtk_ctree_post_recursive (ctree, work,
+ (GtkCTreeFunc) count_items, NULL);
+
+ if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_BROWSE)
+ {
+ if (GTK_CTREE_ROW (work)->children)
+ {
+ new_sel = GTK_CTREE_ROW (work)->sibling;
+ if (!new_sel)
+ new_sel = work->prev;
+ }
+ else
+ {
+ if (work->next)
+ new_sel = work->next;
+ else
+ new_sel = work->prev;
+ }
+ }
+
+ gtk_ctree_remove (ctree, work);
+ selection = GTK_CLIST (ctree)->selection;
+ }
+
+ if (new_sel)
+ gtk_ctree_select (ctree, new_sel);
+
+ gtk_clist_thaw (GTK_CLIST (ctree));
+ after_press (ctree, NULL);
+}
+
+void sort_all (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_sort_recursive (ctree, NULL);
+}
+
+void change_indent (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
+}
+
+void toggle_reorderable (GtkWidget *widget, GtkCTree *ctree)
+{
+ gtk_ctree_set_reorderable (ctree, GTK_TOGGLE_BUTTON (widget)->active);
+}
+
+void toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
+{
+ gint i;
+
+
+ if (!GTK_WIDGET_MAPPED (widget))
+ return;
+
+ RADIOMENUTOGGLED ((GtkRadioMenuItem *)
+ (((GtkOptionMenu *)omenu2)->menu_item),i);
+
+ gtk_ctree_set_line_style (ctree, (GtkCTreeLineStyle) (2-i));
+}
+
+void toggle_justify (GtkWidget *widget, GtkCTree *ctree)
+{
+ gint i;
+
+ if (!GTK_WIDGET_MAPPED (widget))
+ return;
+
+ RADIOMENUTOGGLED ((GtkRadioMenuItem *)
+ (((GtkOptionMenu *)omenu3)->menu_item),i);
+
+ gtk_clist_set_column_justification (GTK_CLIST (ctree), 0,
+ (GtkJustification) (1-i));
+}
+
+void toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
+{
+ gint i;
+
+ if (!GTK_WIDGET_MAPPED (widget))
+ return;
+
+ RADIOMENUTOGGLED ((GtkRadioMenuItem *)
+ (((GtkOptionMenu *)omenu)->menu_item), i);
+
+ gtk_ctree_set_selection_mode (ctree, (GtkSelectionMode) (3-i));
+ after_press (ctree, NULL);
+}
+
+
+void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
+ gint num_books, gint num_pages, GList *parent)
+{
+ gchar *text[2];
+ gchar buf1[60];
+ gchar buf2[60];
+ GList *sibling;
+ gint i;
+
+ text[0] = buf1;
+ text[1] = buf2;
+ sibling = NULL;
+
+ for (i = num_pages + num_books; i > num_books; i--)
+ {
+ pages++;
+ sprintf (buf1, "Page %02d", (gint) random() % 100);
+ sprintf (buf2, "Item %d-%d", cur_depth, i);
+ sibling = gtk_ctree_insert (ctree, parent, sibling, text, 5, pixmap3,
+ mask3, NULL, NULL, TRUE, FALSE);
+ }
+
+ if (cur_depth == depth)
+ return;
+
+ for (i = num_books; i > 0; i--)
+ {
+ books++;
+ sprintf (buf1, "Book %02d", (gint) random() % 100);
+ sprintf (buf2, "Item %d-%d", cur_depth, i);
+ sibling = gtk_ctree_insert (ctree, parent, sibling, text, 5, pixmap1,
+ mask1, pixmap2, mask2, FALSE, FALSE);
+ build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages, sibling);
+ }
+}
+
+void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
+{
+ gchar *text [2];
+ gchar label1[] = "Root";
+ gchar label2[] = "";
+ GList *parent;
+ guint b, d, p, n;
+
+ text[0] = label1;
+ text[1] = label2;
+
+ d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
+ b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
+ p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
+
+ n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
+
+ if (n > 200000)
+ {
+ g_print ("%d total items? Try less\n",n);
+ return;
+ }
+
+ gtk_clist_freeze (GTK_CLIST (ctree));
+ gtk_ctree_clear (ctree);
+
+ books = 1;
+ pages = 0;
+
+ parent = gtk_ctree_insert (ctree, NULL, NULL, text, 5, pixmap1,
+ mask1, pixmap2, mask2, FALSE, TRUE);
+
+ build_recursive (ctree, 1, d, b, p, parent);
+ gtk_clist_thaw (GTK_CLIST (ctree));
+ after_press (ctree, NULL);
+}
+
+void create_ctree (void)
+{
+ static GtkWidget *window = NULL;
+ GtkTooltips *tooltips;
+ GtkCTree *ctree;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *hbox2;
+ GtkWidget *frame;
+ GtkWidget *label;
+ GtkWidget *button;
+ GtkWidget *menu_item;
+ GtkWidget *menu;
+ GtkWidget *submenu;
+ GtkWidget *check;
+ GtkAdjustment *adj;
+ GtkWidget *spinner;
+ GSList *group;
+ GdkColor transparent;
+
+ char *title[] = { "Tree" , "Info" };
+ char buf[80];
+
+ if (!window)
+ {
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed),
+ &window);
+
+ gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+ tooltips = gtk_tooltips_new ();
+ gtk_object_ref (GTK_OBJECT (tooltips));
+ gtk_object_sink (GTK_OBJECT (tooltips));
+
+ gtk_object_set_data_full (GTK_OBJECT (window),
+ "tooltips",
+ tooltips,
+ (GtkDestroyNotify) gtk_object_unref);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ 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 ("Depth :");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
+ spin1 = gtk_spin_button_new (adj, 0, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
+
+ label = gtk_label_new ("Books :");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
+ spin2 = gtk_spin_button_new (adj, 0, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
+
+ label = gtk_label_new ("Pages :");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
+ spin3 = gtk_spin_button_new (adj, 0, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
+
+ button = gtk_button_new_with_label ("Close");
+ gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+ gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
+ (GtkSignalFunc) gtk_widget_destroy,
+ GTK_OBJECT(window));
+
+ button = gtk_button_new_with_label ("Rebuild tree");
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+ ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
+ gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
+ gtk_ctree_set_reorderable (ctree, TRUE);
+ gtk_signal_connect (GTK_OBJECT (ctree), "button_press_event",
+ GTK_SIGNAL_FUNC (button_press), NULL);
+ gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
+ GTK_SIGNAL_FUNC (after_press), NULL);
+ gtk_signal_connect (GTK_OBJECT (ctree), "button_release_event",
+ GTK_SIGNAL_FUNC (button_release), NULL);
+ gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
+ GTK_SIGNAL_FUNC (after_press), NULL);
+ gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
+ GTK_SIGNAL_FUNC (after_move), NULL);
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0);
+ gtk_clist_column_titles_passive (GTK_CLIST (ctree));
+ gtk_clist_set_column_justification (GTK_CLIST (ctree), 2,
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_MULTIPLE);
+ gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS,
+ GTK_POLICY_AUTOMATIC);
+ gtk_clist_set_column_width (GTK_CLIST (ctree), 0, 200);
+ gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
+
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (rebuild_tree), ctree);
+
+ 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);
+
+ button = gtk_button_new_with_label ("Expand all");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (expand_all), ctree);
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+ button = gtk_button_new_with_label ("Collapse all");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ 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");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (sort_all), ctree);
+ 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);
+
+ button = gtk_button_new_with_label ("Select all");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (select_all), ctree);
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+ button = gtk_button_new_with_label ("Unselect all");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (unselect_all), ctree);
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+ button = gtk_button_new_with_label ("Remove selection");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ 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);
+ gtk_signal_connect (GTK_OBJECT (check), "clicked",
+ 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);
+
+ omenu2 = gtk_option_menu_new ();
+ gtk_tooltips_set_tip (tooltips, omenu2, "The tree's line style.", NULL);
+
+ menu = gtk_menu_new ();
+ submenu = NULL;
+ group = NULL;
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Solid");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_line_style), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Dotted");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_line_style), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
+ gtk_widget_show (menu_item);
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "No lines");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_line_style), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu2), menu);
+ gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
+
+ gtk_option_menu_set_history (GTK_OPTION_MENU (omenu2), 1);
+
+ omenu3 = gtk_option_menu_new ();
+ gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
+ NULL);
+
+ menu = gtk_menu_new ();
+ submenu = NULL;
+ group = NULL;
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Left");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_justify), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
+ gtk_widget_show (menu_item);
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Right");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_justify), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu3), menu);
+ gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
+
+ gtk_option_menu_set_history (GTK_OPTION_MENU (omenu3), 0);
+
+ omenu = gtk_option_menu_new ();
+ gtk_tooltips_set_tip (tooltips, omenu, "The list's selection mode.",
+ NULL);
+
+ menu = gtk_menu_new ();
+ submenu = NULL;
+ group = NULL;
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Single");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_sel_mode), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Browse");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_sel_mode), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Multiple");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_sel_mode), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
+ gtk_widget_show (menu_item);
+
+ menu_item = gtk_radio_menu_item_new_with_label (group, "Extended");
+ gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
+ GTK_SIGNAL_FUNC (toggle_sel_mode), ctree);
+ group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
+ gtk_box_pack_start (GTK_BOX (hbox), omenu, FALSE, TRUE, 0);
+
+ gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), 2);
+
+ gtk_widget_realize (window);
+
+ pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
+ &transparent, book_closed_xpm);
+ pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
+ &transparent, book_open_xpm);
+ pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
+ &transparent, mini_page_xpm);
+
+ gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
+
+ frame = gtk_frame_new (NULL);
+ gtk_container_border_width (GTK_CONTAINER (frame), 0);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
+
+ hbox = gtk_hbox_new (TRUE, 2);
+ gtk_container_border_width (GTK_CONTAINER (hbox), 2);
+ gtk_container_add (GTK_CONTAINER (frame), hbox);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
+
+ hbox2 = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
+ gtk_container_add (GTK_CONTAINER (frame), hbox2);
+
+ label = gtk_label_new ("Books :");
+ gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
+
+ sprintf (buf, "%d", books);
+ book_label = gtk_label_new (buf);
+ gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
+
+ hbox2 = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
+ gtk_container_add (GTK_CONTAINER (frame), hbox2);
+
+ label = gtk_label_new ("Pages :");
+ gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
+
+ sprintf (buf, "%d", pages);
+ page_label = gtk_label_new (buf);
+ gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
+
+ hbox2 = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
+ gtk_container_add (GTK_CONTAINER (frame), hbox2);
+
+ label = gtk_label_new ("Selected :");
+ gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
+
+ sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
+ sel_label = gtk_label_new (buf);
+ gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
+
+ hbox2 = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
+ gtk_container_add (GTK_CONTAINER (frame), hbox2);
+
+ label = gtk_label_new ("Visible :");
+ gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
+
+ sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
+ vis_label = gtk_label_new (buf);
+ gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
+
+ rebuild_tree (NULL, ctree);
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show_all (window);
+ else
+ gtk_widget_destroy (window);
+}
+
+
/*
* GtkColorSelect
*/
}
void
-create_color_selection ()
+create_color_selection (void)
{
static GtkWidget *window = NULL;
if (!window)
{
- gtk_preview_set_install_cmap (TRUE);
- gtk_widget_push_visual (gtk_preview_get_visual ());
- gtk_widget_push_colormap (gtk_preview_get_cmap ());
-
window = gtk_color_selection_dialog_new ("color selection dialog");
gtk_color_selection_set_opacity (
gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_signal_connect (
"clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT (window));
-
- gtk_widget_pop_colormap ();
- gtk_widget_pop_visual ();
}
if (!GTK_WIDGET_VISIBLE (window))
}
void
-create_file_selection ()
+create_file_selection (void)
{
static GtkWidget *window = NULL;
GtkWidget *button;
gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
}
void
-create_dialog ()
+create_dialog (void)
{
static GtkWidget *label;
GtkWidget *button;
dialog_window = gtk_dialog_new ();
gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &dialog_window);
- gtk_signal_connect (GTK_OBJECT (dialog_window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&dialog_window);
gtk_window_set_title (GTK_WINDOW (dialog_window), "dialog");
* GtkRange
*/
void
-create_range_controls ()
+create_range_controls (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "range controls");
* GtkRulers
*/
void
-create_rulers ()
+create_rulers (void)
{
static GtkWidget *window = NULL;
GtkWidget *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "rulers");
GTK_TOGGLE_BUTTON(checkbutton)->active);
}
+static void
+text_toggle_word_wrap (GtkWidget *checkbutton,
+ GtkWidget *text)
+{
+ gtk_text_set_word_wrap(GTK_TEXT(text),
+ GTK_TOGGLE_BUTTON(checkbutton)->active);
+}
+
/*
* GtkText
*/
void
-create_text ()
+create_text (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
GtkWidget *box2;
+ GtkWidget *hbox;
GtkWidget *button;
- GtkWidget *editable_check;
+ GtkWidget *check;
GtkWidget *separator;
GtkWidget *table;
GtkWidget *hscrollbar;
gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "test");
while (1)
{
nchars = fread(buffer, 1, 1024, infile);
- gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black,
+ gtk_text_insert (GTK_TEXT (text), NULL, NULL,
NULL, buffer, nchars);
if (nchars < 1024)
gtk_text_thaw (GTK_TEXT (text));
- editable_check = gtk_check_button_new_with_label("Editable");
- gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
+ hbox = gtk_hbutton_box_new ();
+ gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ check = gtk_check_button_new_with_label("Editable");
+ gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(text_toggle_editable), text);
- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
- gtk_widget_show (editable_check);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);
+ gtk_widget_show (check);
+
+ check = gtk_check_button_new_with_label("Wrap Words");
+ gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT(check), "toggled",
+ GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), FALSE);
+ gtk_widget_show (check);
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
*/
GdkPixmap *book_open;
-GdkPixmap *book_closed;
-GdkBitmap *book_open_mask;
-GdkBitmap *book_closed_mask;
-
-static char * book_open_xpm[] = {
-"16 16 4 1",
-" c None s None",
-". c black",
-"X c #808080",
-"o c white",
-" ",
-" .. ",
-" .Xo. ... ",
-" .Xoo. ..oo. ",
-" .Xooo.Xooo... ",
-" .Xooo.oooo.X. ",
-" .Xooo.Xooo.X. ",
-" .Xooo.oooo.X. ",
-" .Xooo.Xooo.X. ",
-" .Xooo.oooo.X. ",
-" .Xoo.Xoo..X. ",
-" .Xo.o..ooX. ",
-" .X..XXXXX. ",
-" ..X....... ",
-" .. ",
-" "};
+GdkPixmap *book_closed;
+GdkBitmap *book_open_mask;
+GdkBitmap *book_closed_mask;
-static char * book_closed_xpm[] = {
-"16 16 6 1",
-" c None s None",
-". c black",
-"X c red",
-"o c yellow",
-"O c #808080",
-"# c white",
-" ",
-" .. ",
-" ..XX. ",
-" ..XXXXX. ",
-" ..XXXXXXXX. ",
-".ooXXXXXXXXX. ",
-"..ooXXXXXXXXX. ",
-".X.ooXXXXXXXXX. ",
-".XX.ooXXXXXX.. ",
-" .XX.ooXXX..#O ",
-" .XX.oo..##OO. ",
-" .XX..##OO.. ",
-" .X.#OO.. ",
-" ..O.. ",
-" .. ",
-" "};
+
+static void
+notebook_reparent (GtkWidget *widget, GtkWidget *scrollwin)
+{
+ static GtkWidget *parent = NULL;
+ static GtkWidget *float_parent;
+
+ if (parent)
+ {
+ gtk_widget_reparent (scrollwin, parent);
+ gtk_widget_destroy (float_parent);
+ float_parent = NULL;
+ parent = NULL;
+ }
+ else
+ {
+ parent = widget->parent;
+ float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_show (float_parent);
+ gtk_widget_reparent (scrollwin, float_parent);
+ }
+}
static void
page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
}
static void
-create_notebook ()
+create_notebook (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
GtkWidget *submenu;
GtkWidget *menuitem;
GSList *group;
- GdkColor transparent;
+ GdkColor *transparent = NULL;
if (!window)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "notebook");
gtk_widget_realize (notebook);
book_open = gdk_pixmap_create_from_xpm_d (notebook->window,
&book_open_mask,
- &transparent,
+ transparent,
book_open_xpm);
book_closed = gdk_pixmap_create_from_xpm_d (notebook->window,
&book_closed_mask,
- &transparent,
+ transparent,
book_closed_xpm);
create_pages (GTK_NOTEBOOK (notebook), 1, 5);
GTK_SIGNAL_FUNC (gtk_notebook_next_page),
GTK_OBJECT (notebook));
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
button = gtk_button_new_with_label ("prev");
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
GTK_OBJECT (notebook));
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
button = gtk_button_new_with_label ("rotate");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (rotate_notebook),
notebook);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+
+ button = gtk_button_new_with_label ("reparent");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (notebook_reparent),
+ notebook);
+ gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
}
if (!GTK_WIDGET_VISIBLE (window))
* GtkPanes
*/
void
-create_panes ()
+create_panes (void)
{
static GtkWidget *window = NULL;
GtkWidget *frame;
GtkWidget *hpaned;
GtkWidget *vpaned;
+ GtkWidget *button;
if (!window)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "Panes");
gtk_widget_set_usize (frame, 60, 60);
gtk_paned_add1 (GTK_PANED (hpaned), frame);
gtk_widget_show (frame);
+
+ button = gtk_button_new_with_label ("Hi there");
+ gtk_container_add (GTK_CONTAINER(frame), button);
+ gtk_widget_show (button);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
* Drag -N- Drop
*/
-gboolean
+gint
dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
{
if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
gtk_grab_remove(GTK_WIDGET(*window));
*window = NULL;
}
- return TRUE;
+
+ return FALSE;
}
void
GtkWidget *vbox, *lbl, *btn;
gchar *msg;
+ /* DND doesn't obey gtk_grab's, so check if we're already displaying
+ * drop modal dialog first
+ */
+ if (window)
+ return;
+
window = gtk_window_new(GTK_WINDOW_DIALOG);
gtk_container_border_width (GTK_CONTAINER(window), 10);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
+ gtk_signal_connect (GTK_OBJECT (window), "delete-event",
+ GTK_SIGNAL_FUNC(gtk_false),
&window);
vbox = gtk_vbox_new(FALSE, 5);
/* Provide an obvious way out of this heinousness */
btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
- gtk_signal_connect (GTK_OBJECT (btn), "clicked",
- GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
- &window);
+ gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT (window));
gtk_widget_show(btn);
gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
}
void
-create_dnd ()
+create_dnd (void)
{
static GtkWidget *window = NULL;
GtkWidget *box1;
char *possible_drag_types[] = {"text/plain"};
char *accepted_drop_types[] = {"text/plain"};
- if(!modeller)
- create_shapes();
+ static GtkWidget *drag_icon = NULL;
+ static GtkWidget *drop_icon = NULL;
if (!window)
{
GdkPoint hotspot = {5,5};
- gdk_dnd_set_drag_shape(modeller->window,
+
+ if (!drag_icon)
+ {
+ drag_icon = shape_create_icon ("Modeller.xpm",
+ 440, 140, 0,0, GTK_WINDOW_POPUP);
+
+ gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
+ &drag_icon);
+
+ gtk_widget_hide (drag_icon);
+ }
+
+ if (!drop_icon)
+ {
+ drop_icon = shape_create_icon ("3DRings.xpm",
+ 440, 140, 0,0, GTK_WINDOW_POPUP);
+
+ gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
+ &drop_icon);
+
+ gtk_widget_hide (drop_icon);
+ }
+
+ gdk_dnd_set_drag_shape(drag_icon->window,
&hotspot,
- rings->window,
+ drop_icon->window,
&hotspot);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
gtk_widget_show (button);
}
- gtk_widget_hide(modeller); gtk_widget_hide(rings);
-
if (!GTK_WIDGET_VISIBLE (window))
gtk_widget_show (window);
else
gtk_widget_set_uposition (window, x, y);
gtk_widget_show (window);
-
+
return window;
}
void
-create_shapes ()
+create_shapes (void)
{
+ /* Variables used by the Drag/Drop and Shape Window demos */
+ static GtkWidget *modeller = NULL;
+ static GtkWidget *sheets = NULL;
+ static GtkWidget *rings = NULL;
+
root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
if (!modeller)
440, 140, 0,0, GTK_WINDOW_POPUP);
gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &modeller);
- gtk_signal_connect (GTK_OBJECT (modeller), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&modeller);
}
else
580, 170, 0,0, GTK_WINDOW_POPUP);
gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &sheets);
- gtk_signal_connect (GTK_OBJECT (sheets), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&sheets);
}
460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (rings), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &rings);
- gtk_signal_connect (GTK_OBJECT (rings), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&rings);
}
else
}
void
-create_wmhints ()
+create_wmhints (void)
{
static GtkWidget *window = NULL;
GtkWidget *label;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
return TRUE;
}
-void
+static void
destroy_progress (GtkWidget *widget,
GtkWidget **window)
{
- destroy_window (widget, window);
gtk_timeout_remove (progress_timer);
progress_timer = 0;
+ *window = NULL;
}
void
-create_progress_bar ()
+create_progress_bar (void)
{
static GtkWidget *window = NULL;
GtkWidget *button;
GtkWidget *vbox;
GtkWidget *pbar;
GtkWidget *label;
-
+ GtkTooltips *tooltips;
+
if (!window)
{
window = gtk_dialog_new ();
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(destroy_progress),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_progress),
- &window);
gtk_window_set_title (GTK_WINDOW (window), "dialog");
gtk_container_border_width (GTK_CONTAINER (window), 0);
+ tooltips = gtk_tooltips_new();
vbox = gtk_vbox_new (FALSE, 5);
gtk_container_border_width (GTK_CONTAINER (vbox), 10);
gtk_widget_show (label);
pbar = gtk_progress_bar_new ();
+ gtk_widget_set_events (pbar, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
gtk_widget_set_usize (pbar, 200, 20);
gtk_box_pack_start (GTK_BOX (vbox), pbar, TRUE, TRUE, 0);
gtk_widget_show (pbar);
+ gtk_tooltips_set_tip (tooltips, pbar, "Countdown is progressing yet!", "Secret!");
+ gtk_tooltips_set_delay (tooltips, 0);
progress_timer = gtk_timeout_add (100, progress_timeout, pbar);
return TRUE;
}
-void
+static void
color_preview_destroy (GtkWidget *widget,
GtkWidget **window)
{
gtk_idle_remove (color_idle);
color_idle = 0;
- destroy_window (widget, window);
+ *window = NULL;
}
void
-create_color_preview ()
+create_color_preview (void)
{
static GtkWidget *window = NULL;
GtkWidget *preview;
if (!window)
{
- gtk_widget_push_visual (gtk_preview_get_visual ());
- gtk_widget_push_colormap (gtk_preview_get_cmap ());
-
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(color_preview_destroy),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(color_preview_destroy),
- &window);
gtk_window_set_title (GTK_WINDOW (window), "test");
gtk_container_border_width (GTK_CONTAINER (window), 10);
}
color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
-
- gtk_widget_pop_colormap ();
- gtk_widget_pop_visual ();
}
if (!GTK_WIDGET_VISIBLE (window))
return TRUE;
}
-void
+static void
gray_preview_destroy (GtkWidget *widget,
GtkWidget **window)
{
gtk_idle_remove (gray_idle);
gray_idle = 0;
- destroy_window (widget, window);
+ *window = NULL;
}
void
-create_gray_preview ()
+create_gray_preview (void)
{
static GtkWidget *window = NULL;
GtkWidget *preview;
if (!window)
{
- gtk_widget_push_visual (gtk_preview_get_visual ());
- gtk_widget_push_colormap (gtk_preview_get_cmap ());
-
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gray_preview_destroy),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(gray_preview_destroy),
- &window);
gtk_window_set_title (GTK_WINDOW (window), "test");
gtk_container_border_width (GTK_CONTAINER (window), 10);
}
gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
-
- gtk_widget_pop_colormap ();
- gtk_widget_pop_visual ();
}
if (!GTK_WIDGET_VISIBLE (window))
}
void
-create_selection_test ()
+create_selection_test (void)
{
static GtkWidget *window = NULL;
GtkWidget *button;
window = gtk_dialog_new ();
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
* Gamma Curve
*/
void
-create_gamma_curve ()
+create_gamma_curve (void)
{
static GtkWidget *window = NULL, *curve;
static int count = 0;
gtk_container_border_width (GTK_CONTAINER (window), 10);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
curve = gtk_gamma_curve_new ();
void
-create_scroll_test ()
+create_scroll_test (void)
{
static GtkWidget *window = NULL;
GtkWidget *hbox;
window = gtk_dialog_new ();
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(destroy_window),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_window),
+ GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&window);
gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
*/
static int timer = 0;
-void
+gint
timeout_test (GtkWidget *label)
{
static int count = 0;
sprintf (buffer, "count: %d", ++count);
gtk_label_set (GTK_LABEL (label), buffer);
+
+ return TRUE;
}
void
destroy_timeout_test (GtkWidget *widget,
GtkWidget **window)
{
- destroy_window (widget, window);
stop_timeout_test (NULL, NULL);
+
+ *window = NULL;
}
void
-create_timeout_test ()
+create_timeout_test (void)
{
static GtkWidget *window = NULL;
GtkWidget *button;
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(destroy_timeout_test),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_timeout_test),
- &window);
gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
gtk_container_border_width (GTK_CONTAINER (window), 0);
destroy_idle_test (GtkWidget *widget,
GtkWidget **window)
{
- destroy_window (widget, window);
stop_idle_test (NULL, NULL);
+
+ *window = NULL;
}
void
-create_idle_test ()
+create_idle_test (void)
{
static GtkWidget *window = NULL;
GtkWidget *button;
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(destroy_idle_test),
&window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(destroy_idle_test),
- &window);
gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
gtk_container_border_width (GTK_CONTAINER (window), 0);
}
void
-test_destroy (GtkWidget *widget,
- GtkWidget **window)
+reload_rc_file (void)
{
- destroy_window (widget, window);
- gtk_main_quit ();
+ GList *toplevels;
+
+ if (gtk_rc_reparse_all ())
+ {
+ toplevels = gdk_window_get_toplevels();
+ while (toplevels)
+ {
+ GtkWidget *widget;
+ gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
+
+ if (widget)
+ gtk_widget_reset_rc_styles (widget);
+
+ toplevels = toplevels->next;
+ }
+ g_list_free (toplevels);
+ }
+}
+
+void
+reload_all_rc_files (void)
+{
+ static GdkAtom atom_rcfiles = GDK_NONE;
+
+ GdkEventClient sev;
+ int i;
+
+ if (!atom_rcfiles)
+ atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
+
+ for(i = 0; i < 5; i++)
+ sev.data.l[i] = 0;
+ sev.data_format = 32;
+ sev.message_type = atom_rcfiles;
+ gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
+}
+
+void
+create_rc_file (void)
+{
+ static GtkWidget *window = NULL;
+ GtkWidget *button;
+
+ if (!window)
+ {
+ window = gtk_dialog_new ();
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC(destroy_idle_test),
+ &window);
+
+ gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+ button = gtk_button_new_with_label ("Reload");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(reload_rc_file), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label ("Reload All");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label ("Close");
+ gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT (window));
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_show (button);
+
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show (window);
+ else
+ gtk_widget_destroy (window);
}
/*
- * Basic Test
+ * Test of recursive mainloop
*/
+
+void
+mainloop_destroyed (GtkWidget *w, GtkWidget **window)
+{
+ *window = NULL;
+ gtk_main_quit ();
+}
+
void
-create_test ()
+create_mainloop (void)
{
static GtkWidget *window = NULL;
+ GtkWidget *label;
+ GtkWidget *button;
if (!window)
{
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ window = gtk_dialog_new ();
+
+ gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
gtk_signal_connect (GTK_OBJECT (window), "destroy",
- GTK_SIGNAL_FUNC(test_destroy),
- &window);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(test_destroy),
+ GTK_SIGNAL_FUNC(mainloop_destroyed),
&window);
+ label = gtk_label_new ("In recursive main loop...");
+ gtk_misc_set_padding (GTK_MISC(label), 20, 20);
- gtk_window_set_title (GTK_WINDOW (window), "test");
- gtk_container_border_width (GTK_CONTAINER (window), 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
+ TRUE, TRUE, 0);
+ gtk_widget_show (label);
+
+ button = gtk_button_new_with_label ("Leave");
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
+ FALSE, TRUE, 0);
+
+ gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ GTK_OBJECT (window));
+
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+
+ gtk_widget_show (button);
}
if (!GTK_WIDGET_VISIBLE (window))
{
gtk_widget_show (window);
- g_print ("create_test: start\n");
+ g_print ("create_mainloop: start\n");
gtk_main ();
- g_print ("create_test: done\n");
+ g_print ("create_mainloop: done\n");
}
else
gtk_widget_destroy (window);
}
void
-create_main_window ()
+create_main_window (void)
{
struct {
char *label;
void (*func) ();
} buttons[] =
{
+ { "button box", create_button_box },
{ "buttons", create_buttons },
- { "toggle buttons", create_toggle_buttons },
{ "check buttons", create_check_buttons },
- { "radio buttons", create_radio_buttons },
- { "button box", create_button_box },
- { "toolbar", create_toolbar },
- { "handle box", create_handle_box },
- { "statusbar", create_statusbar },
- { "reparent", create_reparent },
- { "pixmap", create_pixmap },
- { "tooltips", create_tooltips },
- { "menus", create_menus },
- { "scrolled windows", create_scrolled_windows },
- { "drawing areas", NULL },
- { "entry", create_entry },
- { "spinbutton", create_spins },
- { "list", create_list },
{ "clist", create_clist},
- { "tree", create_tree_mode_window},
{ "color selection", create_color_selection },
- { "file selection", create_file_selection },
+ { "ctree", create_ctree },
+ { "cursors", create_cursors },
{ "dialog", create_dialog },
+ { "dnd", create_dnd },
+ { "entry", create_entry },
+ { "file selection", create_file_selection },
+ { "gamma curve", create_gamma_curve },
+ { "handle box", create_handle_box },
+ { "list", create_list },
+ { "menus", create_menus },
{ "miscellaneous", NULL },
- { "range controls", create_range_controls },
- { "rulers", create_rulers },
- { "text", create_text },
{ "notebook", create_notebook },
{ "panes", create_panes },
- { "shapes", create_shapes },
- { "dnd", create_dnd },
- { "WM hints", create_wmhints },
- { "progress bar", create_progress_bar },
+ { "pixmap", create_pixmap },
{ "preview color", create_color_preview },
{ "preview gray", create_gray_preview },
- { "gamma curve", create_gamma_curve },
+ { "progress bar", create_progress_bar },
+ { "radio buttons", create_radio_buttons },
+ { "range controls", create_range_controls },
+ { "rc file", create_rc_file },
+ { "reparent", create_reparent },
+ { "rulers", create_rulers },
+ { "scrolled windows", create_scrolled_windows },
+ { "shapes", create_shapes },
+ { "spinbutton", create_spins },
+ { "statusbar", create_statusbar },
+ { "test idle", create_idle_test },
+ { "test mainloop", create_mainloop },
{ "test scrolling", create_scroll_test },
{ "test selection", create_selection_test },
{ "test timeout", create_timeout_test },
- { "test idle", create_idle_test },
- { "test", create_test },
+ { "text", create_text },
+ { "toggle buttons", create_toggle_buttons },
+ { "toolbar", create_toolbar },
+ { "tooltips", create_tooltips },
+ { "tree", create_tree_mode_window},
+ { "WM hints", create_wmhints },
};
int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
GtkWidget *window;
int i;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
gtk_widget_set_name (window, "main window");
gtk_widget_set_usize (window, 200, 400);
gtk_widget_set_uposition (window, 20, 20);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
- gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC(gtk_main_quit),
+ gtk_signal_connect (GTK_OBJECT (window), "delete-event",
+ GTK_SIGNAL_FUNC (gtk_false),
NULL);
box1 = gtk_vbox_new (FALSE, 0);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
+ GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS);
gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
gtk_widget_show (scrolled_window);
box2 = gtk_vbox_new (FALSE, 0);
gtk_container_border_width (GTK_CONTAINER (box2), 10);
gtk_container_add (GTK_CONTAINER (scrolled_window), box2);
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
gtk_widget_show (box2);
for (i = 0; i < nbuttons; i++)