summaryrefslogtreecommitdiff
path: root/gtkdtp/dtp.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtkdtp/dtp.c')
-rw-r--r--gtkdtp/dtp.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/gtkdtp/dtp.c b/gtkdtp/dtp.c
new file mode 100644
index 0000000..5983e5d
--- /dev/null
+++ b/gtkdtp/dtp.c
@@ -0,0 +1,88 @@
+// 9 january 2015
+#include "dtp.h"
+
+#define GDTP(x) ((goDateTimePicker *) x)
+#define PRIV(x) (GDTP(x)->priv)
+#define GDTPC(x) ((goDateTimePickerClass *) x)
+
+struct goDateTimePickerPrivate {
+ GtkWidget *openbutton;
+
+ GtkWidget *popup;
+ GtkWidget *calendar;
+ GtkWidget *spinHours;
+ GtkWidget *spinMinutes;
+ GtkWidget *spinSeconds;
+};
+
+G_DEFINE_TYPE_WITH_CODE(goDateTimePicker, goDateTimePicker, GTK_TYPE_BOX,
+ G_ADD_PRIVATE(goDateTimePicker))
+
+enum {
+ gtkMargin = 12,
+ gtkXPadding = 12,
+ gtkYPadding = 6,
+};
+
+static void goDateTimePicker_init(goDateTimePicker *dtp)
+{
+ goDateTimePickerPrivate *d;
+ GtkWidget *arrow;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+
+ 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)
+{
+ goDateTimePickerPrivate *d = PRIV(obj);
+
+ // 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);
+}
+
+static void goDateTimePicker_finalize(GObject *obj)
+{
+ G_OBJECT_CLASS(goDateTimePicker_parent_class)->finalize(obj);
+}
+
+static void goDateTimePicker_class_init(goDateTimePickerClass *class)
+{
+ G_OBJECT_CLASS(class)->dispose = goDateTimePicker_dispose;
+ G_OBJECT_CLASS(class)->finalize = goDateTimePicker_finalize;
+}