summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-01-09 22:00:21 -0500
committerPietro Gagliardi <[email protected]>2015-01-09 22:00:21 -0500
commit3a35ac63b57ddcb93027d4c0c1deeb34a18d9bf2 (patch)
treeefce02d3a4688def31194a545f88b108e646fbec
parentfe42db6ebd9a5d4defad8ef8fb82cc82ab2b1226 (diff)
Added the beginning of an experimental date-time picker implementation for GTK+.
-rw-r--r--gtkdtp/dtp.c88
-rw-r--r--gtkdtp/dtp.h21
-rw-r--r--gtkdtp/test.c16
3 files changed, 125 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;
+}
diff --git a/gtkdtp/dtp.h b/gtkdtp/dtp.h
new file mode 100644
index 0000000..3c936c6
--- /dev/null
+++ b/gtkdtp/dtp.h
@@ -0,0 +1,21 @@
+// 9 january 2015
+#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_32
+#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_32
+#define GDK_VERSION_MIN_REQUIRED GDK_VERSION_3_4
+#define GDK_VERSION_MAX_ALLOWED GDK_VERSION_3_4
+#include <gtk/gtk.h>
+
+typedef struct goDateTimePicker goDateTimePicker;
+typedef struct goDateTimePickerClass goDateTimePickerClass;
+typedef struct goDateTimePickerPrivate goDateTimePickerPrivate;
+
+struct goDateTimePicker {
+ GtkBox parent_instance;
+ goDateTimePickerPrivate *priv;
+};
+
+struct goDateTimePickerClass {
+ GtkBoxClass parent_class;
+};
+
+GType goDateTimePicker_get_type(void);
diff --git a/gtkdtp/test.c b/gtkdtp/test.c
new file mode 100644
index 0000000..c867c11
--- /dev/null
+++ b/gtkdtp/test.c
@@ -0,0 +1,16 @@
+// 9 january 2015
+#include "dtp.h"
+
+// #qo pkg-config: gtk+-3.0
+
+int main(void)
+{
+ GtkWidget *mainwin;
+
+ gtk_init(NULL, NULL);
+ mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_add(GTK_CONTAINER(mainwin), g_object_new(goDateTimePicker_get_type(), NULL));
+ gtk_widget_show_all(mainwin);
+ gtk_main();
+ return 0;
+}