fix a fixme.
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net> * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme. * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to GTK_TYPE_STRING. * gtk/gtktreeview.c: New functions to allow initial column dragging work. * gtk/gtktreeviewcolumn.c: Initial column dragging support. * tests/testtreefocus.c: give dave some love. * tests/testtreesort.c: Modify test to check really long samples.
This commit is contained in:

committed by
Jonathan Blandford

parent
12d7863c53
commit
31210813cb
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -1,3 +1,19 @@
|
||||
Sun Apr 8 05:36:06 2001 Jonathan Blandford <jrb@webwynk.net>
|
||||
|
||||
* gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
|
||||
|
||||
* gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
|
||||
GTK_TYPE_STRING.
|
||||
|
||||
* gtk/gtktreeview.c: New functions to allow initial column
|
||||
dragging work.
|
||||
|
||||
* gtk/gtktreeviewcolumn.c: Initial column dragging support.
|
||||
|
||||
* tests/testtreefocus.c: give dave some love.
|
||||
|
||||
* tests/testtreesort.c: Modify test to check really long samples.
|
||||
|
||||
2001-04-11 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* gtk-2.0.m4: Pass pkg-config options
|
||||
|
@ -145,9 +145,9 @@ gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class)
|
||||
GTK_RUN_LAST,
|
||||
GTK_CLASS_TYPE (object_class),
|
||||
GTK_SIGNAL_OFFSET (GtkCellRendererToggleClass, toggled),
|
||||
gtk_marshal_VOID__POINTER,
|
||||
gtk_marshal_VOID__STRING,
|
||||
GTK_TYPE_NONE, 1,
|
||||
GTK_TYPE_POINTER);
|
||||
GTK_TYPE_STRING);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -723,6 +723,7 @@ gtk_list_store_set_valist (GtkListStore *list_store,
|
||||
break;
|
||||
}
|
||||
|
||||
/* FIXME: instead of calling this n times, refactor with above */
|
||||
gtk_list_store_set_value (list_store,
|
||||
iter,
|
||||
column,
|
||||
|
@ -516,7 +516,7 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
|
||||
GTK_ARG_READWRITE, ARG_RIGHT_MARGIN);
|
||||
gtk_object_add_arg_type ("GtkTextView::indent", GTK_TYPE_INT,
|
||||
GTK_ARG_READWRITE, ARG_INDENT);
|
||||
gtk_object_add_arg_type ("GtkTextView::tabs", GTK_TYPE_POINTER, /* FIXME */
|
||||
gtk_object_add_arg_type ("GtkTextView::tabs", GTK_TYPE_PANGO_TAB_ARRAY,
|
||||
GTK_ARG_READWRITE, ARG_TABS);
|
||||
|
||||
/*
|
||||
|
@ -64,7 +64,6 @@ gtk_tree_model_get_type (void)
|
||||
return tree_model_type;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gtk_tree_model_base_init (gpointer g_class)
|
||||
{
|
||||
|
@ -87,6 +87,8 @@ struct _GtkTreeViewPrivate
|
||||
|
||||
GdkWindow *bin_window;
|
||||
GdkWindow *header_window;
|
||||
GdkWindow *drag_window;
|
||||
GtkTreeViewColumn *drag_column;
|
||||
|
||||
gint expander_column;
|
||||
|
||||
@ -116,6 +118,8 @@ struct _GtkTreeViewPrivate
|
||||
gint n_columns;
|
||||
GList *columns;
|
||||
gint header_height;
|
||||
GtkTreeViewColumnDropFunc *column_drop_func;
|
||||
GList *column_drag_info;
|
||||
|
||||
/* Scroll timeout (e.g. during dnd) */
|
||||
guint scroll_timeout;
|
||||
@ -232,7 +236,8 @@ void _gtk_tree_view_column_unrealize_button (GtkTreeViewColumn *column);
|
||||
void _gtk_tree_view_column_set_tree_view (GtkTreeViewColumn *column,
|
||||
GtkTreeView *tree_view);
|
||||
void _gtk_tree_view_column_unset_tree_view (GtkTreeViewColumn *column);
|
||||
|
||||
void _gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
|
||||
GtkTreeViewColumn *column);
|
||||
|
||||
GtkTreeSelection* _gtk_tree_selection_new (void);
|
||||
GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view);
|
||||
|
@ -741,6 +741,7 @@ gtk_tree_store_set_valist (GtkTreeStore *tree_store,
|
||||
break;
|
||||
}
|
||||
|
||||
/* FIXME: instead of calling this n times, refactor with above */
|
||||
gtk_tree_store_set_value (tree_store,
|
||||
iter,
|
||||
column,
|
||||
|
@ -34,6 +34,16 @@
|
||||
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
#if defined (GDK_WINDOWING_X11)
|
||||
#include "x11/gdkx.h"
|
||||
#elif defined (GDK_WINDOWING_WIN32)
|
||||
#include "win32/gdkwin32.h"
|
||||
#elif defined(GDK_WINDOWING_FB)
|
||||
#include "linux-fb/gdkfb.h"
|
||||
#elif defined (GDK_WINDOWING_NANOX)
|
||||
#include "nanox/gdkprivate-nanox.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* The "background" areas of all rows/cells add up to cover the entire tree.
|
||||
* The background includes all inter-row and inter-cell spacing.
|
||||
@ -59,6 +69,16 @@ struct _GtkTreeViewChild
|
||||
gint y;
|
||||
};
|
||||
|
||||
|
||||
typedef struct _GtkTreeViewColumnReorder GtkTreeViewColumnReorder;
|
||||
struct _GtkTreeViewColumnReorder
|
||||
{
|
||||
gint left_align;
|
||||
gint right_align;
|
||||
GtkTreeViewColumn *left_column;
|
||||
GtkTreeViewColumn *right_column;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ROW_ACTIVATED,
|
||||
@ -241,11 +261,6 @@ static void gtk_tree_view_discover_dirty (GtkTreeView *tree_view,
|
||||
GtkTreeIter *iter,
|
||||
gint depth);
|
||||
static void gtk_tree_view_check_dirty (GtkTreeView *tree_view);
|
||||
#if 0
|
||||
static void gtk_tree_view_create_button (GtkTreeView *tree_view,
|
||||
gint i);
|
||||
static void gtk_tree_view_create_buttons (GtkTreeView *tree_view);
|
||||
#endif
|
||||
static void gtk_tree_view_clamp_node_visible (GtkTreeView *tree_view,
|
||||
GtkRBTree *tree,
|
||||
GtkRBNode *node);
|
||||
@ -459,6 +474,7 @@ gtk_tree_view_init (GtkTreeView *tree_view)
|
||||
tree_view->priv->pressed_button = -1;
|
||||
tree_view->priv->press_start_x = -1;
|
||||
tree_view->priv->press_start_y = -1;
|
||||
tree_view->priv->drag_window = NULL;
|
||||
|
||||
gtk_tree_view_set_adjustments (tree_view, NULL, NULL);
|
||||
_gtk_tree_view_update_size (tree_view);
|
||||
@ -1613,6 +1629,49 @@ ensure_unprelighted (GtkTreeView *tree_view)
|
||||
do_unprelight (tree_view, -1000, -1000); /* coords not possibly over an arrow */
|
||||
}
|
||||
|
||||
|
||||
static gint
|
||||
gtk_tree_view_column_button_expose (GtkWidget *button,
|
||||
GdkEventExpose *event,
|
||||
gpointer right)
|
||||
{
|
||||
if (button->window != event->window)
|
||||
return FALSE;
|
||||
|
||||
if (GPOINTER_TO_INT (right))
|
||||
{
|
||||
if (event->area.x + event->area.width < button->allocation.width - 2)
|
||||
return FALSE;
|
||||
|
||||
gdk_draw_line (button->window,
|
||||
button->style->black_gc,
|
||||
button->allocation.width - 2, 0,
|
||||
button->allocation.width - 2,
|
||||
button->allocation.height);
|
||||
gdk_draw_line (button->window,
|
||||
button->style->white_gc,
|
||||
button->allocation.width - 1, 0,
|
||||
button->allocation.width - 1,
|
||||
button->allocation.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (event->area.x > 2)
|
||||
return FALSE;
|
||||
|
||||
gdk_draw_line (button->window,
|
||||
button->style->black_gc,
|
||||
1, 0,
|
||||
1, button->allocation.height);
|
||||
gdk_draw_line (button->window,
|
||||
button->style->white_gc,
|
||||
0, 0,
|
||||
0, button->allocation.height);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_tree_view_motion (GtkWidget *widget,
|
||||
GdkEventMotion *event)
|
||||
@ -1647,6 +1706,21 @@ gtk_tree_view_motion (GtkWidget *widget,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (event->window == tree_view->priv->drag_window)
|
||||
{
|
||||
GtkTreeViewColumn *column = tree_view->priv->drag_column;
|
||||
gint x, y;
|
||||
|
||||
if (column == NULL)
|
||||
return FALSE;
|
||||
gdk_window_get_position (tree_view->priv->drag_window, &x, &y);
|
||||
x = CLAMP (x + (gint)event->x - column->drag_x, 0,
|
||||
MAX (tree_view->priv->width, GTK_WIDGET (tree_view)->allocation.width) - column->button->allocation.width);
|
||||
|
||||
gdk_window_move (tree_view->priv->drag_window, x, y);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Sanity check it */
|
||||
if (event->window != tree_view->priv->bin_window)
|
||||
return FALSE;
|
||||
@ -1977,6 +2051,22 @@ gtk_tree_view_button_release (GtkWidget *widget,
|
||||
|
||||
tree_view = GTK_TREE_VIEW (widget);
|
||||
|
||||
if (tree_view->priv->drag_column)
|
||||
{
|
||||
gdk_pointer_ungrab (GDK_CURRENT_TIME);
|
||||
gdk_window_reparent (tree_view->priv->drag_column->button->window,
|
||||
tree_view->priv->header_window,
|
||||
tree_view->priv->drag_column->button->allocation.x,
|
||||
tree_view->priv->drag_column->button->allocation.y);
|
||||
gtk_widget_set_parent_window (tree_view->priv->drag_column->button, tree_view->priv->header_window);
|
||||
|
||||
tree_view->priv->drag_column = NULL;
|
||||
gtk_widget_queue_resize (GTK_WIDGET (tree_view));
|
||||
gdk_window_hide (tree_view->priv->drag_window);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (tree_view->priv->pressed_button == event->button)
|
||||
tree_view->priv->pressed_button = -1;
|
||||
|
||||
@ -2041,7 +2131,6 @@ gtk_tree_view_button_release (GtkWidget *widget,
|
||||
gtk_tree_path_get_depth (path) + 1,
|
||||
FALSE,
|
||||
GTK_WIDGET_REALIZED (widget));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2743,12 +2832,23 @@ gtk_tree_view_row_activated (GtkTreeView *tree_view,
|
||||
GtkTreePath *path,
|
||||
GtkTreeViewColumn *column)
|
||||
{
|
||||
g_return_if_fail (tree_view != NULL);
|
||||
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
|
||||
|
||||
g_signal_emit (G_OBJECT(tree_view), tree_view_signals[ROW_ACTIVATED], 0, path, column);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gtk_tree_view_map_open_rows (GtkTreeView *tree_view,
|
||||
GtkTreeViewMappingFunc func,
|
||||
gpointer data)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
|
||||
g_return_if_fail (func != NULL);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* TreeModel Callbacks
|
||||
*/
|
||||
|
||||
@ -3410,70 +3510,6 @@ gtk_tree_view_check_dirty (GtkTreeView *tree_view)
|
||||
column->dirty = FALSE;
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
static void
|
||||
gtk_tree_view_create_buttons (GtkTreeView *tree_view)
|
||||
{
|
||||
GtkWidget *alignment;
|
||||
GtkWidget *label;
|
||||
GList *list;
|
||||
GtkTreeViewColumn *column;
|
||||
gint i;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *arrow;
|
||||
|
||||
/* FIXME this has to be merged with update_button_contents() in
|
||||
* gtktreeviewcolumn.c
|
||||
*/
|
||||
|
||||
for (list = tree_view->priv->columns, i = 0; list; list = list->next, i++)
|
||||
{
|
||||
column = list->data;
|
||||
|
||||
if (column->button != NULL)
|
||||
continue;
|
||||
|
||||
gtk_tree_view_create_button (tree_view, i);
|
||||
alignment = gtk_alignment_new (column->xalign, 0.5, 0.0, 0.0);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 2);
|
||||
arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_IN);
|
||||
|
||||
column->arrow = arrow;
|
||||
column->alignment = alignment;
|
||||
|
||||
if (column->child)
|
||||
label = column->child;
|
||||
else
|
||||
{
|
||||
label = gtk_label_new (column->title);
|
||||
gtk_widget_show (label);
|
||||
}
|
||||
|
||||
if (column->xalign <= 0.5)
|
||||
gtk_box_pack_end (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
|
||||
else
|
||||
gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 0);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (alignment), label);
|
||||
gtk_container_add (GTK_CONTAINER (column->button), hbox);
|
||||
|
||||
gtk_widget_show (hbox);
|
||||
gtk_widget_show (alignment);
|
||||
/* don't show the arrow yet */
|
||||
}
|
||||
|
||||
gtk_tree_view_size_request_buttons (tree_view);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (tree_view))
|
||||
gtk_tree_view_realize_buttons (tree_view);
|
||||
|
||||
if (GTK_WIDGET_MAPPED (tree_view))
|
||||
gtk_tree_view_map_buttons (tree_view);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Make sure the node is visible vertically */
|
||||
static void
|
||||
@ -3636,6 +3672,106 @@ gtk_tree_view_unref_tree (GtkTreeView *tree_view,
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
|
||||
GtkTreeViewColumn *column)
|
||||
{
|
||||
GdkEvent send_event;
|
||||
GList *list = NULL;
|
||||
GList *tmp_list;
|
||||
gint left, right;
|
||||
GtkTreeViewColumn *left_column;
|
||||
GtkTreeViewColumn *right_column;
|
||||
|
||||
/* We want to precalculate the motion list such that we know what column slots
|
||||
* are available.
|
||||
*/
|
||||
left = 0;
|
||||
left_column = NULL;
|
||||
|
||||
for (tmp_list = tree_view->priv->columns; tmp_list; tmp_list = tmp_list->next)
|
||||
{
|
||||
GtkTreeViewColumnReorder *reorder;
|
||||
|
||||
if (GTK_TREE_VIEW_COLUMN (tmp_list->data)->visible == FALSE)
|
||||
continue;
|
||||
|
||||
right_column = tmp_list->data;
|
||||
reorder = g_malloc (sizeof (GtkTreeViewColumnReorder), 1);
|
||||
reorder->left_align = left;
|
||||
}
|
||||
/* if (list == NULL)
|
||||
return;*/
|
||||
|
||||
if (tree_view->priv->drag_window == NULL)
|
||||
{
|
||||
GdkWindowAttr attributes;
|
||||
guint attributes_mask;
|
||||
|
||||
attributes.window_type = GDK_WINDOW_CHILD;
|
||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||
attributes.visual = gtk_widget_get_visual (GTK_WIDGET (tree_view));
|
||||
attributes.colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_view));
|
||||
attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK;
|
||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
|
||||
|
||||
tree_view->priv->drag_window = gdk_window_new (tree_view->priv->bin_window,
|
||||
&attributes,
|
||||
attributes_mask);
|
||||
gdk_window_set_user_data (tree_view->priv->drag_window, GTK_WIDGET (tree_view));
|
||||
}
|
||||
|
||||
gdk_pointer_ungrab (GDK_CURRENT_TIME);
|
||||
gdk_keyboard_ungrab (GDK_CURRENT_TIME);
|
||||
|
||||
gtk_grab_remove (column->button);
|
||||
|
||||
send_event.crossing.type = GDK_LEAVE_NOTIFY;
|
||||
send_event.crossing.send_event = TRUE;
|
||||
send_event.crossing.window = column->button->window;
|
||||
send_event.crossing.subwindow = NULL;
|
||||
send_event.crossing.detail = GDK_NOTIFY_ANCESTOR;
|
||||
send_event.crossing.time = GDK_CURRENT_TIME;
|
||||
|
||||
gtk_propagate_event (column->button, &send_event);
|
||||
|
||||
send_event.button.type = GDK_BUTTON_RELEASE;
|
||||
send_event.button.window = GDK_ROOT_PARENT ();
|
||||
send_event.button.send_event = TRUE;
|
||||
send_event.button.time = GDK_CURRENT_TIME;
|
||||
send_event.button.x = -1;
|
||||
send_event.button.y = -1;
|
||||
send_event.button.axes = NULL;
|
||||
send_event.button.state = 0;
|
||||
send_event.button.button = 1;
|
||||
send_event.button.device = gdk_core_pointer;
|
||||
send_event.button.x_root = 0;
|
||||
send_event.button.y_root = 0;
|
||||
|
||||
gtk_propagate_event (column->button, &send_event);
|
||||
|
||||
gdk_window_move_resize (tree_view->priv->drag_window,
|
||||
column->button->allocation.x,
|
||||
column->button->allocation.y + column->button->allocation.height,
|
||||
column->button->allocation.width,
|
||||
column->button->allocation.height);
|
||||
gdk_window_reparent (column->button->window, tree_view->priv->drag_window, 0, 0);
|
||||
gtk_widget_set_parent_window (column->button, tree_view->priv->drag_window);
|
||||
|
||||
|
||||
tree_view->priv->drag_column = column;
|
||||
gdk_window_show (tree_view->priv->drag_window);
|
||||
|
||||
while (gtk_events_pending ())
|
||||
gtk_main_iteration ();
|
||||
|
||||
gdk_pointer_grab (tree_view->priv->drag_window,
|
||||
FALSE,
|
||||
GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, GDK_CURRENT_TIME);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_view_queue_draw_node (GtkTreeView *tree_view,
|
||||
GtkRBTree *tree,
|
||||
@ -3944,27 +4080,27 @@ gtk_tree_view_setup_model (GtkTreeView *tree_view)
|
||||
|
||||
g_signal_connectc (tree_view->priv->model,
|
||||
"range_changed",
|
||||
gtk_tree_view_range_changed,
|
||||
(GCallback) gtk_tree_view_range_changed,
|
||||
tree_view,
|
||||
FALSE);
|
||||
g_signal_connectc (tree_view->priv->model,
|
||||
"inserted",
|
||||
gtk_tree_view_inserted,
|
||||
(GCallback) gtk_tree_view_inserted,
|
||||
tree_view,
|
||||
FALSE);
|
||||
g_signal_connectc (tree_view->priv->model,
|
||||
"has_child_toggled",
|
||||
gtk_tree_view_has_child_toggled,
|
||||
(GCallback) gtk_tree_view_has_child_toggled,
|
||||
tree_view,
|
||||
FALSE);
|
||||
g_signal_connectc (tree_view->priv->model,
|
||||
"deleted",
|
||||
gtk_tree_view_deleted,
|
||||
(GCallback) gtk_tree_view_deleted,
|
||||
tree_view,
|
||||
FALSE);
|
||||
g_signal_connectc (tree_view->priv->model,
|
||||
"reordered",
|
||||
gtk_tree_view_reordered,
|
||||
(GCallback) gtk_tree_view_reordered,
|
||||
tree_view,
|
||||
FALSE);
|
||||
|
||||
|
@ -79,6 +79,22 @@ struct _GtkTreeViewClass
|
||||
|
||||
};
|
||||
|
||||
|
||||
typedef gboolean (* GtkTreeViewColumnDropFunc) (GtkTreeView *tree_view,
|
||||
GtkTreeViewColumn *column,
|
||||
GtkTreeViewColumn *prev_column,
|
||||
GtkTreeViewColumn *next_column,
|
||||
gpointer data);
|
||||
typedef gboolean (* GtkTreeViewDraggableFunc) (GtkTreeView *tree_view,
|
||||
GdkDragContext *context,
|
||||
GtkTreePath *path,
|
||||
gpointer user_data);
|
||||
typedef void (* GtkTreeViewMappingFunc) (GtkTreeView *tree_view,
|
||||
GtkTreePath *path,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
|
||||
GtkType gtk_tree_view_get_type (void);
|
||||
GtkWidget *gtk_tree_view_new (void);
|
||||
GtkWidget *gtk_tree_view_new_with_model (GtkTreeModel *model);
|
||||
@ -110,6 +126,10 @@ gint gtk_tree_view_insert_column_with_attributes (GtkTreeView
|
||||
gchar *title,
|
||||
GtkCellRenderer *cell,
|
||||
...);
|
||||
void gtk_tree_view_move_column (GtkTreeView *tree_view,
|
||||
GtkTreeViewColumn *column,
|
||||
GtkTreeViewColumn *base_column,
|
||||
gint side);
|
||||
GtkTreeViewColumn *gtk_tree_view_get_column (GtkTreeView *tree_view,
|
||||
gint n);
|
||||
void gtk_tree_view_set_expander_column (GtkTreeView *tree_view,
|
||||
@ -152,6 +172,9 @@ gboolean gtk_tree_view_collapse_row (GtkTreeView
|
||||
void gtk_tree_view_row_activated (GtkTreeView *tree_view,
|
||||
GtkTreePath *path,
|
||||
GtkTreeViewColumn *column);
|
||||
void gtk_tree_view_map_open_rows (GtkTreeView *tree_view,
|
||||
GtkTreeViewMappingFunc func,
|
||||
gpointer data);
|
||||
|
||||
void gtk_tree_view_get_visible_rect (GtkTreeView *tree_view,
|
||||
GdkRectangle *visible_rect);
|
||||
@ -172,12 +195,6 @@ gboolean gtk_tree_view_get_rules_hint (GtkTreeView *tree_view);
|
||||
|
||||
|
||||
/* Drag-and-Drop support */
|
||||
|
||||
typedef gboolean (* GtkTreeViewDraggableFunc) (GtkTreeView *tree_view,
|
||||
GdkDragContext *context,
|
||||
GtkTreePath *path,
|
||||
gpointer user_data);
|
||||
|
||||
/* this func can change "pos" if it likes, in addition to returning
|
||||
* true/false for whether a drop is possible
|
||||
*/
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "gtkarrow.h"
|
||||
#include "gtkintl.h"
|
||||
#include <string.h>
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
@ -259,6 +260,8 @@ gtk_tree_view_column_init (GtkTreeViewColumn *tree_column)
|
||||
tree_column->sort_clicked_signal = 0;
|
||||
tree_column->sort_column_changed_signal = 0;
|
||||
tree_column->sort_column_id = -1;
|
||||
tree_column->reorderable = 1;
|
||||
tree_column->maybe_reordered = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -470,6 +473,57 @@ gtk_tree_view_column_button_clicked (GtkWidget *widget, gpointer data)
|
||||
g_signal_emit_by_name (G_OBJECT (data), "clicked");
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_view_column_button_released (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
GtkTreeViewColumn *column = (GtkTreeViewColumn *) data;
|
||||
|
||||
gtk_widget_show (widget);
|
||||
column->maybe_reordered = FALSE;
|
||||
}
|
||||
static gint
|
||||
gtk_tree_view_column_button_motion_event (GtkWidget *widget,
|
||||
GdkEventMotion *event,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreeViewColumn *column = (GtkTreeViewColumn *) data;
|
||||
|
||||
if ((column->maybe_reordered) &&
|
||||
(gtk_drag_check_threshold (widget,
|
||||
column->drag_x,
|
||||
column->drag_y,
|
||||
(gint) event->x,
|
||||
(gint) event->y)))
|
||||
{
|
||||
column->maybe_reordered = FALSE;
|
||||
_gtk_tree_view_column_start_drag (GTK_TREE_VIEW (column->tree_view),
|
||||
column);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_view_column_button_realize (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gdk_window_set_events (widget->window, gdk_window_get_events (widget->window) | GDK_POINTER_MOTION_MASK);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_view_column_button_pressed (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
GtkTreeViewColumn *column = (GtkTreeViewColumn *) data;
|
||||
|
||||
if (! column->reorderable)
|
||||
return;
|
||||
|
||||
column->maybe_reordered = TRUE;
|
||||
gdk_window_get_pointer (widget->window,
|
||||
&column->drag_x,
|
||||
&column->drag_y,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_tree_view_column_create_button (GtkTreeViewColumn *column)
|
||||
{
|
||||
@ -490,9 +544,21 @@ _gtk_tree_view_column_create_button (GtkTreeViewColumn *column)
|
||||
/* make sure we own a reference to it as well. */
|
||||
gtk_widget_set_parent (column->button, GTK_WIDGET (tree_view));
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (column->button), "realize",
|
||||
(GtkSignalFunc) gtk_tree_view_column_button_realize,
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (column->button), "clicked",
|
||||
(GtkSignalFunc) gtk_tree_view_column_button_clicked,
|
||||
(gpointer) column);
|
||||
gtk_signal_connect (GTK_OBJECT (column->button), "pressed",
|
||||
(GtkSignalFunc) gtk_tree_view_column_button_pressed,
|
||||
(gpointer) column);
|
||||
gtk_signal_connect (GTK_OBJECT (column->button), "motion_notify_event",
|
||||
(GtkSignalFunc) gtk_tree_view_column_button_motion_event,
|
||||
(gpointer) column);
|
||||
gtk_signal_connect (GTK_OBJECT (column->button), "released",
|
||||
(GtkSignalFunc) gtk_tree_view_column_button_released,
|
||||
(gpointer) column);
|
||||
|
||||
column->alignment = gtk_alignment_new (column->xalign, 0.5, 0.0, 0.0);
|
||||
|
||||
@ -1608,6 +1674,7 @@ sort_clicked_func (GtkTreeViewColumn *tree_column,
|
||||
|
||||
list = list->next;
|
||||
}
|
||||
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (GTK_TREE_VIEW (tree_column->tree_view)->priv->model),
|
||||
tree_column->sort_column_id,
|
||||
tree_column->sort_order);
|
||||
|
@ -70,6 +70,10 @@ struct _GtkTreeViewColumn
|
||||
gint max_width;
|
||||
gint displayed_width;
|
||||
|
||||
/* dragging columns */
|
||||
gint drag_x;
|
||||
gint drag_y;
|
||||
|
||||
GtkCellDataFunc func;
|
||||
gpointer func_data;
|
||||
GtkDestroyNotify destroy;
|
||||
@ -88,6 +92,8 @@ struct _GtkTreeViewColumn
|
||||
guint button_active : 1;
|
||||
guint dirty : 1;
|
||||
guint show_sort_indicator : 1;
|
||||
guint maybe_reordered : 1;
|
||||
guint reorderable : 1;
|
||||
};
|
||||
|
||||
struct _GtkTreeViewColumnClass
|
||||
|
@ -10285,7 +10285,7 @@ create_main_window (void)
|
||||
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
|
||||
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
|
||||
|
||||
button = gtk_button_new_with_label ("close");
|
||||
button = gtk_button_new_with_mnemonic ("_Close");
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (do_exit),
|
||||
window);
|
||||
|
@ -8,126 +8,128 @@ struct _TreeStruct
|
||||
gboolean havoc;
|
||||
gboolean tim;
|
||||
gboolean owen;
|
||||
gboolean dave;
|
||||
gboolean world_holiday; /* shared by the european hackers */
|
||||
TreeStruct *children;
|
||||
};
|
||||
|
||||
|
||||
static TreeStruct january[] =
|
||||
{
|
||||
{"New Years Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL},
|
||||
{"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, NULL},
|
||||
{"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL},
|
||||
{"New Years Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
|
||||
{"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct february[] =
|
||||
{
|
||||
{ "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
|
||||
{ "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{ "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct march[] =
|
||||
{
|
||||
{ "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct april[] =
|
||||
{
|
||||
{ "April Fools' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Earth Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "April Fools' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Earth Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct may[] =
|
||||
{
|
||||
{ "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Mothers' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Memorial Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
|
||||
{ "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Mothers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Memorial Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct june[] =
|
||||
{
|
||||
{ "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
|
||||
{ "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct july[] =
|
||||
{
|
||||
{ "Parents' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
|
||||
{ "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct august[] =
|
||||
{
|
||||
{ "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct september[] =
|
||||
{
|
||||
{ "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Labor Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
|
||||
{ "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Labor Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct october[] =
|
||||
{
|
||||
{ "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
|
||||
{ "Halloween", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{ "Halloween", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct november[] =
|
||||
{
|
||||
{ "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Veterans' Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
|
||||
{ "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
|
||||
{ "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Veterans' Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
|
||||
{ "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TreeStruct december[] =
|
||||
{
|
||||
{ "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Christmas", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
|
||||
{ "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ "Christmas", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
|
||||
{ "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
||||
static TreeStruct toplevel[] =
|
||||
{
|
||||
{"January", FALSE, FALSE, FALSE, FALSE, FALSE, january},
|
||||
{"February", FALSE, FALSE, FALSE, FALSE, FALSE, february},
|
||||
{"March", FALSE, FALSE, FALSE, FALSE, FALSE, march},
|
||||
{"April", FALSE, FALSE, FALSE, FALSE, FALSE, april},
|
||||
{"May", FALSE, FALSE, FALSE, FALSE, FALSE, may},
|
||||
{"June", FALSE, FALSE, FALSE, FALSE, FALSE, june},
|
||||
{"July", FALSE, FALSE, FALSE, FALSE, FALSE, july},
|
||||
{"August", FALSE, FALSE, FALSE, FALSE, FALSE, august},
|
||||
{"September", FALSE, FALSE, FALSE, FALSE, FALSE, september},
|
||||
{"October", FALSE, FALSE, FALSE, FALSE, FALSE, october},
|
||||
{"November", FALSE, FALSE, FALSE, FALSE, FALSE, november},
|
||||
{"December", FALSE, FALSE, FALSE, FALSE, FALSE, december},
|
||||
{"January", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, january},
|
||||
{"February", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, february},
|
||||
{"March", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, march},
|
||||
{"April", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, april},
|
||||
{"May", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, may},
|
||||
{"June", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, june},
|
||||
{"July", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, july},
|
||||
{"August", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, august},
|
||||
{"September", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, september},
|
||||
{"October", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, october},
|
||||
{"November", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, november},
|
||||
{"December", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, december},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
@ -139,6 +141,7 @@ enum
|
||||
HAVOC_COLUMN,
|
||||
TIM_COLUMN,
|
||||
OWEN_COLUMN,
|
||||
DAVE_COLUMN,
|
||||
VISIBLE_COLUMN,
|
||||
WORLD_COLUMN,
|
||||
NUM_COLUMNS
|
||||
@ -151,7 +154,15 @@ make_model (void)
|
||||
TreeStruct *month = toplevel;
|
||||
GtkTreeIter iter;
|
||||
|
||||
model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
|
||||
model = gtk_tree_store_new_with_types (NUM_COLUMNS,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN);
|
||||
|
||||
while (month->label)
|
||||
{
|
||||
@ -164,6 +175,7 @@ make_model (void)
|
||||
HAVOC_COLUMN, FALSE,
|
||||
TIM_COLUMN, FALSE,
|
||||
OWEN_COLUMN, FALSE,
|
||||
DAVE_COLUMN, FALSE,
|
||||
VISIBLE_COLUMN, FALSE,
|
||||
WORLD_COLUMN, FALSE,
|
||||
-1);
|
||||
@ -178,6 +190,7 @@ make_model (void)
|
||||
HAVOC_COLUMN, holiday->havoc,
|
||||
TIM_COLUMN, holiday->tim,
|
||||
OWEN_COLUMN, holiday->owen,
|
||||
DAVE_COLUMN, holiday->dave,
|
||||
VISIBLE_COLUMN, TRUE,
|
||||
WORLD_COLUMN, holiday->world_holiday,
|
||||
-1);
|
||||
@ -266,6 +279,25 @@ tim_toggled (GtkCellRendererToggle *cell,
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
static void
|
||||
dave_toggled (GtkCellRendererToggle *cell,
|
||||
gchar *path_str,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreeModel *model = (GtkTreeModel *) data;
|
||||
GtkTreeIter iter;
|
||||
GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
|
||||
gboolean dave;
|
||||
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
gtk_tree_model_get (model, &iter, DAVE_COLUMN, &dave, -1);
|
||||
|
||||
dave = !dave;
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DAVE_COLUMN, dave, -1);
|
||||
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
@ -281,6 +313,7 @@ main (int argc, char *argv[])
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
|
||||
vbox = gtk_vbox_new (FALSE, 8);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
|
||||
@ -294,7 +327,6 @@ main (int argc, char *argv[])
|
||||
|
||||
model = make_model ();
|
||||
tree_view = gtk_tree_view_new_with_model (model);
|
||||
g_object_unref (G_OBJECT (model));
|
||||
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
@ -369,8 +401,114 @@ main (int argc, char *argv[])
|
||||
gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
g_object_unref (renderer);
|
||||
|
||||
/* Owen Column */
|
||||
renderer = gtk_cell_renderer_toggle_new ();
|
||||
g_signal_connect_data (G_OBJECT (renderer), "toggled", dave_toggled, model, NULL, FALSE, FALSE);
|
||||
g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Dave",
|
||||
renderer,
|
||||
"active", DAVE_COLUMN,
|
||||
"visible", VISIBLE_COLUMN,
|
||||
NULL);
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
|
||||
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
g_object_unref (renderer);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
|
||||
GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
|
||||
NULL);
|
||||
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||
650, 400);
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Model");
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
|
||||
vbox = gtk_vbox_new (FALSE, 8);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
|
||||
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
|
||||
|
||||
|
||||
tree_view = gtk_tree_view_new_with_model (model);
|
||||
g_object_unref (G_OBJECT (model));
|
||||
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Holiday Column",
|
||||
renderer,
|
||||
"text", 0, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Alex Column",
|
||||
renderer,
|
||||
"text", 1, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Havoc Column",
|
||||
renderer,
|
||||
"text", 2, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Tim Column",
|
||||
renderer,
|
||||
"text", 3, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Owen Column",
|
||||
renderer,
|
||||
"text", 4, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Dave Column",
|
||||
renderer,
|
||||
"text", 5, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "Visible Column",
|
||||
renderer,
|
||||
"text", 6, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
||||
-1, "World Holiday",
|
||||
renderer,
|
||||
"text", 7, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
|
||||
GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
|
||||
NULL);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
|
||||
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||
650, 400);
|
||||
|
||||
gtk_widget_show_all (window);
|
||||
gtk_main ();
|
||||
|
||||
|
@ -12,7 +12,7 @@ struct _ListSort
|
||||
|
||||
static ListSort data[] =
|
||||
{
|
||||
{ "Apples", "Transmorgrify", "Exculpatory", "Gesundheit"},
|
||||
{ "Apples", "Transmorgrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit"},
|
||||
{ "Oranges", "Wicker", "Adamantine", "Convivial" },
|
||||
{ "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander" },
|
||||
{ "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless" },
|
||||
@ -48,11 +48,12 @@ main (int argc, char *argv[])
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkTreeIter iter;
|
||||
gint i;
|
||||
gint i, j;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Words, words, words");
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
|
||||
vbox = gtk_vbox_new (FALSE, 8);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
|
||||
@ -65,20 +66,22 @@ main (int argc, char *argv[])
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
|
||||
|
||||
model = gtk_list_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
|
||||
0, GTK_TREE_SORT_ASCENDING);
|
||||
for (i = 0; data[i].word_1 != NULL; i++)
|
||||
{
|
||||
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
|
||||
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
||||
WORD_COLUMN_1, data[i].word_1,
|
||||
WORD_COLUMN_2, data[i].word_2,
|
||||
WORD_COLUMN_3, data[i].word_3,
|
||||
WORD_COLUMN_4, data[i].word_4,
|
||||
-1);
|
||||
}
|
||||
|
||||
// gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_TREE_SORT_ASCENDING);
|
||||
g_print ("start model\n");
|
||||
tree_view = gtk_tree_view_new_with_model (model);
|
||||
for (j = 0; j < 2; j++)
|
||||
for (i = 0; data[i].word_1 != NULL; i++)
|
||||
{
|
||||
gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
|
||||
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
||||
WORD_COLUMN_1, data[i].word_1,
|
||||
WORD_COLUMN_2, data[i].word_2,
|
||||
WORD_COLUMN_3, data[i].word_3,
|
||||
WORD_COLUMN_4, data[i].word_4,
|
||||
-1);
|
||||
}
|
||||
g_print ("done with model\n");
|
||||
|
||||
g_object_unref (G_OBJECT (model));
|
||||
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
|
||||
|
||||
@ -105,7 +108,7 @@ main (int argc, char *argv[])
|
||||
column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
|
||||
"text", WORD_COLUMN_3,
|
||||
NULL);
|
||||
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
|
||||
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
|
||||
g_object_unref (column);
|
||||
g_object_unref (renderer);
|
||||
|
Reference in New Issue
Block a user