Removed all the GUI stuff from the GTK+ date/time picker for now. Installed the date properties instead.
This commit is contained in:
parent
28679658d2
commit
2ce4ae1a2e
138
gtkdtp/dtp.c
138
gtkdtp/dtp.c
|
@ -10,18 +10,15 @@ https://git.gnome.org/browse/gtk+/tree/gtk/gtkcombobox.c?h=gtk-3-4
|
||||||
#define GDTPC(x) ((goDateTimePickerClass *) x)
|
#define GDTPC(x) ((goDateTimePickerClass *) x)
|
||||||
|
|
||||||
struct goDateTimePickerPrivate {
|
struct goDateTimePickerPrivate {
|
||||||
GtkWidget *openbutton;
|
gint year;
|
||||||
|
gint month;
|
||||||
GtkWidget *popup;
|
gint day;
|
||||||
GtkWidget *calendar;
|
|
||||||
GtkWidget *spinHours;
|
|
||||||
GtkWidget *spinMinutes;
|
|
||||||
GtkWidget *spinSeconds;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE(goDateTimePicker, goDateTimePicker, GTK_TYPE_BOX,
|
G_DEFINE_TYPE_WITH_CODE(goDateTimePicker, goDateTimePicker, GTK_TYPE_BOX,
|
||||||
G_ADD_PRIVATE(goDateTimePicker))
|
G_ADD_PRIVATE(goDateTimePicker))
|
||||||
|
|
||||||
|
// TODO figure out how to share these between C and Go
|
||||||
enum {
|
enum {
|
||||||
gtkMargin = 12,
|
gtkMargin = 12,
|
||||||
gtkXPadding = 12,
|
gtkXPadding = 12,
|
||||||
|
@ -30,43 +27,7 @@ enum {
|
||||||
|
|
||||||
static void goDateTimePicker_init(goDateTimePicker *dtp)
|
static void goDateTimePicker_init(goDateTimePicker *dtp)
|
||||||
{
|
{
|
||||||
goDateTimePickerPrivate *d;
|
|
||||||
GtkWidget *arrow;
|
|
||||||
GtkWidget *vbox;
|
|
||||||
GtkWidget *hbox;
|
|
||||||
|
|
||||||
dtp->priv = goDateTimePicker_get_instance_private(dtp);
|
dtp->priv = goDateTimePicker_get_instance_private(dtp);
|
||||||
d = dtp->priv;
|
|
||||||
|
|
||||||
// create the actual bar elements
|
|
||||||
// TODO the entry field
|
|
||||||
// just make a dummy one for testing
|
|
||||||
hbox = gtk_entry_new();
|
|
||||||
gtk_style_context_add_class(gtk_widget_get_style_context(hbox), GTK_STYLE_CLASS_COMBOBOX_ENTRY);
|
|
||||||
gtk_widget_set_hexpand(hbox, TRUE);
|
|
||||||
gtk_widget_set_halign(hbox, GTK_ALIGN_FILL);
|
|
||||||
gtk_container_add(GTK_CONTAINER(dtp), hbox);
|
|
||||||
// the open button
|
|
||||||
d->openbutton = gtk_toggle_button_new();
|
|
||||||
arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE);
|
|
||||||
gtk_container_add(GTK_CONTAINER(d->openbutton), arrow);
|
|
||||||
// and make them look linked
|
|
||||||
// TODO sufficient?
|
|
||||||
gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(dtp)), "linked");
|
|
||||||
// and mark them as visible
|
|
||||||
gtk_widget_show_all(d->openbutton);
|
|
||||||
// and add them to the bar
|
|
||||||
gtk_container_add(GTK_CONTAINER(dtp), d->openbutton);
|
|
||||||
|
|
||||||
// now create the popup that will hold everything
|
|
||||||
d->popup = gtk_window_new(GTK_WINDOW_POPUP);
|
|
||||||
gtk_window_set_type_hint(GTK_WINDOW(d->popup), GDK_WINDOW_TYPE_HINT_COMBO);
|
|
||||||
gtk_window_set_resizable(GTK_WINDOW(d->popup), FALSE);
|
|
||||||
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, gtkYPadding);
|
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(vbox), gtkMargin);
|
|
||||||
d->calendar = gtk_calendar_new();
|
|
||||||
gtk_container_add(GTK_CONTAINER(vbox), d->calendar);
|
|
||||||
gtk_container_add(GTK_CONTAINER(d->popup), vbox);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void goDateTimePicker_dispose(GObject *obj)
|
static void goDateTimePicker_dispose(GObject *obj)
|
||||||
|
@ -74,9 +35,6 @@ static void goDateTimePicker_dispose(GObject *obj)
|
||||||
goDateTimePickerPrivate *d = PRIV(obj);
|
goDateTimePickerPrivate *d = PRIV(obj);
|
||||||
|
|
||||||
// TODO really with g_clear_object()?
|
// TODO really with g_clear_object()?
|
||||||
g_clear_object(&(d->openbutton));
|
|
||||||
g_clear_object(&(d->popup));
|
|
||||||
// TODO g_object_clear() the children?
|
|
||||||
G_OBJECT_CLASS(goDateTimePicker_parent_class)->dispose(obj);
|
G_OBJECT_CLASS(goDateTimePicker_parent_class)->dispose(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,8 +43,96 @@ static void goDateTimePicker_finalize(GObject *obj)
|
||||||
G_OBJECT_CLASS(goDateTimePicker_parent_class)->finalize(obj);
|
G_OBJECT_CLASS(goDateTimePicker_parent_class)->finalize(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
pYear = 1,
|
||||||
|
pMonth,
|
||||||
|
pDay,
|
||||||
|
nParams,
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *gdtpParams[] = {
|
||||||
|
NULL, // always null
|
||||||
|
NULL, // year
|
||||||
|
NULL, // month
|
||||||
|
NULL, // day
|
||||||
|
};
|
||||||
|
|
||||||
|
static void goDateTimePicker_set_property(GObject *obj, guint prop, const GValue *value, GParamSpec *spec)
|
||||||
|
{
|
||||||
|
goDateTimePickerPrivate *d = PRIV(obj);
|
||||||
|
|
||||||
|
switch (prop) {
|
||||||
|
case pYear:
|
||||||
|
d->year = g_value_get_int(value);
|
||||||
|
break;
|
||||||
|
case pMonth:
|
||||||
|
d->month = g_value_get_int(value);
|
||||||
|
break;
|
||||||
|
case pDay:
|
||||||
|
d->day = g_value_get_int(value);
|
||||||
|
// see note on GtkCalendar comaptibility below
|
||||||
|
if (d->day == 0)
|
||||||
|
; // TODO
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop, spec);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// TODO refresh everything here
|
||||||
|
}
|
||||||
|
|
||||||
|
static void goDateTimePicker_get_property(GObject *obj, guint prop, GValue *value, GParamSpec *spec)
|
||||||
|
{
|
||||||
|
goDateTimePickerPrivate *d = PRIV(obj);
|
||||||
|
|
||||||
|
switch (prop) {
|
||||||
|
case pYear:
|
||||||
|
g_value_set_int(value, d->year);
|
||||||
|
break;
|
||||||
|
case pMonth:
|
||||||
|
g_value_set_int(value, d->month);
|
||||||
|
break;
|
||||||
|
case pDay:
|
||||||
|
g_value_set_int(value, d->day);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop, spec);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void goDateTimePicker_class_init(goDateTimePickerClass *class)
|
static void goDateTimePicker_class_init(goDateTimePickerClass *class)
|
||||||
{
|
{
|
||||||
G_OBJECT_CLASS(class)->dispose = goDateTimePicker_dispose;
|
G_OBJECT_CLASS(class)->dispose = goDateTimePicker_dispose;
|
||||||
G_OBJECT_CLASS(class)->finalize = goDateTimePicker_finalize;
|
G_OBJECT_CLASS(class)->finalize = goDateTimePicker_finalize;
|
||||||
|
G_OBJECT_CLASS(class)->set_property = goDateTimePicker_set_property;
|
||||||
|
G_OBJECT_CLASS(class)->get_property = goDateTimePicker_get_property;
|
||||||
|
|
||||||
|
// types and values are to be compatible with the 3.4 GtkCalendar parameters
|
||||||
|
gdtpParams[pYear] = g_param_spec_int("year",
|
||||||
|
"current year",
|
||||||
|
"Current year",
|
||||||
|
0,
|
||||||
|
G_MAXINT >> 9,
|
||||||
|
0,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
gdtpParams[pMonth] = g_param_spec_uint("month",
|
||||||
|
"current month",
|
||||||
|
"Current month",
|
||||||
|
0,
|
||||||
|
11,
|
||||||
|
0,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
// because of the requirement to be compatible with GtkCalendar, we have to follow its rules about dates
|
||||||
|
// values are 1..31 with 0 meaning no date selected
|
||||||
|
// we will not allow no date to be selected, so we will set the default to 1 instead of 0
|
||||||
|
// TODO is this an issue for binding?
|
||||||
|
gdtpParams[pDay] = g_param_spec_uint("day",
|
||||||
|
"current day",
|
||||||
|
"Current day",
|
||||||
|
0,
|
||||||
|
31,
|
||||||
|
1,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
g_object_class_install_properties(G_OBJECT_CLASS(class), nParams, gdtpParams);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue