Add properties, based on patch by Lee Mallabone.

2001-05-17  Alexander Larsson  <alla@lysator.liu.se>

	* gtk/gtkbbox.c:
	Add properties, based on patch by Lee Mallabone.

	* gtk/gtknotebook.c:
	* gtk/gtktoolbar.c:
	Convert from GtkArg to GParam, based on patch by John Margaglione.

	* gtk/gtkhscale.c:
	* gtk/gtkvscale.c:
	* gtk/gtkhscrollbar.c:
	* gtk/gtkvscrollbar.c:
	* gtk/gtkrange.c:
	Move adjustment property to GtkRange.

	* gtk/gtklabel.c:
	Setup mnemonics on property changes

	* gtk/gtkwidget.c (gtk_widget_get_property):
	GdkExtensionMode is an enum, not a flag. Set it with
	g_value_set_enum ().

	* tests/prop-editor.c:
	Better propery editor.

	* tests/testgtk.c:
	Add new property test. Pass zero to the property editor to
	get properties from all derived types.
This commit is contained in:
Alexander Larsson
2001-05-17 16:22:06 +00:00
committed by Alexander Larsson
parent be277ae413
commit 6ee1ae13ad
19 changed files with 1179 additions and 396 deletions

View File

@ -58,17 +58,17 @@ enum {
};
enum {
ARG_0,
ARG_TAB_POS,
ARG_SHOW_TABS,
ARG_SHOW_BORDER,
ARG_SCROLLABLE,
ARG_TAB_BORDER,
ARG_TAB_HBORDER,
ARG_TAB_VBORDER,
ARG_PAGE,
ARG_ENABLE_POPUP,
ARG_HOMOGENEOUS
PROP_0,
PROP_TAB_POS,
PROP_SHOW_TABS,
PROP_SHOW_BORDER,
PROP_SCROLLABLE,
PROP_TAB_BORDER,
PROP_TAB_HBORDER,
PROP_TAB_VBORDER,
PROP_PAGE,
PROP_ENABLE_POPUP,
PROP_HOMOGENEOUS
};
enum {
@ -121,12 +121,14 @@ static void gtk_notebook_focus_tab (GtkNotebook *notebook,
/*** GtkObject Methods ***/
static void gtk_notebook_destroy (GtkObject *object);
static void gtk_notebook_set_arg (GtkObject *object,
GtkArg *arg,
guint arg_id);
static void gtk_notebook_get_arg (GtkObject *object,
GtkArg *arg,
guint arg_id);
static void gtk_notebook_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void gtk_notebook_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
/*** GtkWidget Methods ***/
static void gtk_notebook_map (GtkWidget *widget);
@ -277,19 +279,21 @@ gtk_notebook_get_type (void)
static void
gtk_notebook_class_init (GtkNotebookClass *class)
{
GObjectClass *gobject_class;
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GtkContainerClass *container_class;
GtkBindingSet *binding_set;
gobject_class = G_OBJECT_CLASS (class);
object_class = (GtkObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
container_class = (GtkContainerClass*) class;
parent_class = gtk_type_class (gtk_container_get_type ());
object_class->set_arg = gtk_notebook_set_arg;
object_class->get_arg = gtk_notebook_get_arg;
gobject_class->set_property = gtk_notebook_set_property;
gobject_class->get_property = gtk_notebook_get_property;
object_class->destroy = gtk_notebook_destroy;
widget_class->map = gtk_notebook_map;
@ -321,16 +325,94 @@ gtk_notebook_class_init (GtkNotebookClass *class)
class->focus_tab = gtk_notebook_focus_tab;
class->select_page = gtk_notebook_select_page;
gtk_object_add_arg_type ("GtkNotebook::page", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAGE);
gtk_object_add_arg_type ("GtkNotebook::tab_pos", GTK_TYPE_POSITION_TYPE, GTK_ARG_READWRITE, ARG_TAB_POS);
gtk_object_add_arg_type ("GtkNotebook::tab_border", GTK_TYPE_UINT, GTK_ARG_WRITABLE, ARG_TAB_BORDER);
gtk_object_add_arg_type ("GtkNotebook::tab_hborder", GTK_TYPE_UINT, GTK_ARG_READWRITE, ARG_TAB_HBORDER);
gtk_object_add_arg_type ("GtkNotebook::tab_vborder", GTK_TYPE_UINT, GTK_ARG_READWRITE, ARG_TAB_VBORDER);
gtk_object_add_arg_type ("GtkNotebook::show_tabs", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_SHOW_TABS);
gtk_object_add_arg_type ("GtkNotebook::show_border", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_SHOW_BORDER);
gtk_object_add_arg_type ("GtkNotebook::scrollable", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_SCROLLABLE);
gtk_object_add_arg_type ("GtkNotebook::enable_popup", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_ENABLE_POPUP);
gtk_object_add_arg_type ("GtkNotebook::homogeneous", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_HOMOGENEOUS);
g_object_class_install_property (gobject_class,
PROP_PAGE,
g_param_spec_int ("page",
_("Page"),
_("The index of the current page"),
0,
G_MAXINT,
0,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_TAB_POS,
g_param_spec_enum ("tab_pos",
_("Tab Position"),
_("Which side of the notebook holds the tabs"),
GTK_TYPE_POSITION_TYPE,
GTK_POS_TOP,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_TAB_BORDER,
g_param_spec_uint ("tab_border",
_("Tab Border"),
_("Width of the border around the tab labels"),
0,
G_MAXUINT,
2,
G_PARAM_WRITABLE));
g_object_class_install_property (gobject_class,
PROP_TAB_HBORDER,
g_param_spec_uint ("tab_hborder",
_("Horizontal Tab Border"),
_("Width of the horizontal border of tab labels"),
0,
G_MAXUINT,
2,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_TAB_VBORDER,
g_param_spec_uint ("tab_vborder",
_("Vertical Tab Border"),
_("Width of the vertical border of tab labels"),
0,
G_MAXUINT,
2,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_SHOW_TABS,
g_param_spec_boolean ("show_tabs",
_("Show Tabs"),
_("Whether tabs should be shown or not"),
TRUE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_SHOW_BORDER,
g_param_spec_boolean ("show_border",
_("Show Border"),
_("Whether the border should be shown or not"),
TRUE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_SCROLLABLE,
g_param_spec_boolean ("scrollable",
_("Scrollable"),
_("If TRUE, scroll arrows are added if there are to many tabs to fit"),
FALSE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_ENABLE_POPUP,
g_param_spec_boolean ("enable_popup",
_("Enable Popup"),
_("If TRUE, pressing the right mouse button on the notebook pops up a menu that you can use to go to a page"),
FALSE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_HOMOGENEOUS,
g_param_spec_boolean ("homogeneous",
_("Homogeneous"),
_("Whether tabs should have homogeneous sizes"),
FALSE,
G_PARAM_READWRITE));
gtk_container_add_child_arg_type ("GtkNotebook::tab_label", GTK_TYPE_STRING, GTK_ARG_READWRITE, CHILD_ARG_TAB_LABEL);
gtk_container_add_child_arg_type ("GtkNotebook::menu_label", GTK_TYPE_STRING, GTK_ARG_READWRITE, CHILD_ARG_MENU_LABEL);
@ -495,48 +577,49 @@ gtk_notebook_destroy (GtkObject *object)
}
static void
gtk_notebook_set_arg (GtkObject *object,
GtkArg *arg,
guint arg_id)
gtk_notebook_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GtkNotebook *notebook;
notebook = GTK_NOTEBOOK (object);
switch (arg_id)
switch (prop_id)
{
case ARG_SHOW_TABS:
gtk_notebook_set_show_tabs (notebook, GTK_VALUE_BOOL (*arg));
case PROP_SHOW_TABS:
gtk_notebook_set_show_tabs (notebook, g_value_get_boolean (value));
break;
case ARG_SHOW_BORDER:
gtk_notebook_set_show_border (notebook, GTK_VALUE_BOOL (*arg));
case PROP_SHOW_BORDER:
gtk_notebook_set_show_border (notebook, g_value_get_boolean (value));
break;
case ARG_SCROLLABLE:
gtk_notebook_set_scrollable (notebook, GTK_VALUE_BOOL (*arg));
case PROP_SCROLLABLE:
gtk_notebook_set_scrollable (notebook, g_value_get_boolean (value));
break;
case ARG_ENABLE_POPUP:
if (GTK_VALUE_BOOL (*arg))
case PROP_ENABLE_POPUP:
if (g_value_get_boolean (value))
gtk_notebook_popup_enable (notebook);
else
gtk_notebook_popup_disable (notebook);
break;
case ARG_HOMOGENEOUS:
gtk_notebook_set_homogeneous_tabs (notebook, GTK_VALUE_BOOL (*arg));
case PROP_HOMOGENEOUS:
gtk_notebook_set_homogeneous_tabs (notebook, g_value_get_boolean (value));
break;
case ARG_PAGE:
gtk_notebook_set_page (notebook, GTK_VALUE_INT (*arg));
case PROP_PAGE:
gtk_notebook_set_page (notebook, g_value_get_int (value));
break;
case ARG_TAB_POS:
gtk_notebook_set_tab_pos (notebook, GTK_VALUE_ENUM (*arg));
case PROP_TAB_POS:
gtk_notebook_set_tab_pos (notebook, g_value_get_enum (value));
break;
case ARG_TAB_BORDER:
gtk_notebook_set_tab_border (notebook, GTK_VALUE_UINT (*arg));
case PROP_TAB_BORDER:
gtk_notebook_set_tab_border (notebook, g_value_get_uint (value));
break;
case ARG_TAB_HBORDER:
gtk_notebook_set_tab_hborder (notebook, GTK_VALUE_UINT (*arg));
case PROP_TAB_HBORDER:
gtk_notebook_set_tab_hborder (notebook, g_value_get_uint (value));
break;
case ARG_TAB_VBORDER:
gtk_notebook_set_tab_vborder (notebook, GTK_VALUE_UINT (*arg));
case PROP_TAB_VBORDER:
gtk_notebook_set_tab_vborder (notebook, g_value_get_uint (value));
break;
default:
break;
@ -544,45 +627,46 @@ gtk_notebook_set_arg (GtkObject *object,
}
static void
gtk_notebook_get_arg (GtkObject *object,
GtkArg *arg,
guint arg_id)
gtk_notebook_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GtkNotebook *notebook;
notebook = GTK_NOTEBOOK (object);
switch (arg_id)
switch (prop_id)
{
case ARG_SHOW_TABS:
GTK_VALUE_BOOL (*arg) = notebook->show_tabs;
case PROP_SHOW_TABS:
g_value_set_boolean (value, notebook->show_tabs);
break;
case ARG_SHOW_BORDER:
GTK_VALUE_BOOL (*arg) = notebook->show_border;
case PROP_SHOW_BORDER:
g_value_set_boolean (value, notebook->show_border);
break;
case ARG_SCROLLABLE:
GTK_VALUE_BOOL (*arg) = notebook->scrollable;
case PROP_SCROLLABLE:
g_value_set_boolean (value, notebook->scrollable);
break;
case ARG_ENABLE_POPUP:
GTK_VALUE_BOOL (*arg) = notebook->menu != NULL;
case PROP_ENABLE_POPUP:
g_value_set_boolean (value, notebook->menu != NULL);
break;
case ARG_HOMOGENEOUS:
GTK_VALUE_BOOL (*arg) = notebook->homogeneous;
case PROP_HOMOGENEOUS:
g_value_set_boolean (value, notebook->homogeneous);
break;
case ARG_PAGE:
GTK_VALUE_INT (*arg) = gtk_notebook_get_current_page (notebook);
case PROP_PAGE:
g_value_set_int (value, gtk_notebook_get_current_page (notebook));
break;
case ARG_TAB_POS:
GTK_VALUE_ENUM (*arg) = notebook->tab_pos;
case PROP_TAB_POS:
g_value_set_enum (value, notebook->tab_pos);
break;
case ARG_TAB_HBORDER:
GTK_VALUE_UINT (*arg) = notebook->tab_hborder;
case PROP_TAB_HBORDER:
g_value_set_uint (value, notebook->tab_hborder);
break;
case ARG_TAB_VBORDER:
GTK_VALUE_UINT (*arg) = notebook->tab_vborder;
case PROP_TAB_VBORDER:
g_value_set_uint (value, notebook->tab_vborder);
break;
default:
arg->type = GTK_TYPE_INVALID;
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
@ -3343,6 +3427,7 @@ gtk_notebook_real_switch_page (GtkNotebook *notebook,
gtk_widget_map (notebook->cur_page->child);
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "page");
}
/* Private GtkNotebook Page Switch Functions:
@ -4080,6 +4165,8 @@ gtk_notebook_set_show_border (GtkNotebook *notebook,
if (GTK_WIDGET_VISIBLE (notebook))
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "show_border");
}
}
@ -4134,6 +4221,8 @@ gtk_notebook_set_show_tabs (GtkNotebook *notebook,
gtk_notebook_update_labels (notebook);
}
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "show_tabs");
}
/**
@ -4156,6 +4245,8 @@ gtk_notebook_set_tab_pos (GtkNotebook *notebook,
if (GTK_WIDGET_VISIBLE (notebook))
gtk_widget_queue_resize (GTK_WIDGET (notebook));
}
g_object_notify (G_OBJECT (notebook), "tab_pos");
}
/**
@ -4176,6 +4267,8 @@ gtk_notebook_set_homogeneous_tabs (GtkNotebook *notebook,
notebook->homogeneous = homogeneous;
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "homogeneous");
}
/**
@ -4199,6 +4292,8 @@ gtk_notebook_set_tab_border (GtkNotebook *notebook,
if (GTK_WIDGET_VISIBLE (notebook) && notebook->show_tabs)
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "tab_hborder");
}
/**
@ -4221,6 +4316,8 @@ gtk_notebook_set_tab_hborder (GtkNotebook *notebook,
if (GTK_WIDGET_VISIBLE (notebook) && notebook->show_tabs)
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "tab_vborder");
}
/**
@ -4282,6 +4379,8 @@ gtk_notebook_set_scrollable (GtkNotebook *notebook,
if (GTK_WIDGET_VISIBLE (notebook))
gtk_widget_queue_resize (GTK_WIDGET (notebook));
g_object_notify (G_OBJECT (notebook), "scrollable");
}
}
@ -4319,6 +4418,8 @@ gtk_notebook_popup_enable (GtkNotebook *notebook)
gtk_menu_attach_to_widget (GTK_MENU (notebook->menu),
GTK_WIDGET (notebook),
gtk_notebook_menu_detacher);
g_object_notify (G_OBJECT (notebook), "enable_popup");
}
/**
@ -4338,6 +4439,8 @@ gtk_notebook_popup_disable (GtkNotebook *notebook)
gtk_container_foreach (GTK_CONTAINER (notebook->menu),
(GtkCallback) gtk_notebook_menu_label_unparent, NULL);
gtk_widget_destroy (notebook->menu);
g_object_notify (G_OBJECT (notebook), "enable_popup");
}
/* Public GtkNotebook Page Properties Functions: