G_DEFINE_TYPE (MilkMainWindow, milk_main_window, HILDON_TYPE_WINDOW)
-#define MILK_MAIN_WINDOW_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), MILK_TYPE_MAIN_WINDOW, MilkMainWindowPrivate))
+/* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */
+#define MILK_MAIN_WINDOW_PRIVATE(o) ((MILK_MAIN_WINDOW ((o)))->priv)
struct _MilkMainWindowPrivate
{
+ GtkWidget *app_menu;
+
GtkWidget *main_vbox;
GtkWidget *new_task_entry;
GtkWidget *task_view;
+ GtkWidget *task_selector;
};
enum {
N_VIEW_COLUMNS
};
+typedef struct {
+ const char *display_name;
+ const char *id;
+ gpointer callback;
+} MenuItem;
+
static void
milk_main_window_get_property (GObject *object,
guint property_id,
g_object_unref (task);
}
-static HildonAppMenu*
+static MenuItem menu_items_always_shown[] = {
+ {"New Task", "menu-item-new-task", new_task_clicked_cb},
+};
+
+static MenuItem menu_items_selection_required[] = {
+ {"Edit", "menu-item-edit", edit_clicked_cb},
+ {"Priority +", "menu-item-priority_plus", priority_plus_clicked_cb},
+ {"Priority -", "menu-item-priority_minus", priority_minus_clicked_cb},
+ {"Complete", "menu-item-complete", complete_clicked_cb},
+ {"Delete", "menu-item-delete", delete_clicked_cb},
+};
+
+static void
+task_view_selection_changed_cb (HildonTouchSelector *view,
+ gint column,
+ MilkMainWindow *window)
+{
+ MilkMainWindowPrivate *priv;
+ GList *rows;
+ gboolean show = FALSE;
+ gint i;
+
+ priv = MILK_MAIN_WINDOW_PRIVATE (window);
+
+ rows = hildon_touch_selector_get_selected_rows (view, column);
+ show = (g_list_length (rows) > 0);
+
+ for (i = 0; i < G_N_ELEMENTS (menu_items_selection_required); i++) {
+ GtkWidget *w;
+
+ w = g_object_get_data (
+ G_OBJECT (priv->app_menu),
+ menu_items_selection_required[i].id);
+
+ if (show)
+ gtk_widget_show (w);
+ else
+ gtk_widget_hide (w);
+ }
+}
+
+static GtkWidget*
create_menu (gpointer user_data)
{
HildonAppMenu *menu;
+ MenuItem *menu_array;
+ gint i, length;
GtkWidget *w;
menu = HILDON_APP_MENU (hildon_app_menu_new ());
- w = hildon_button_new_with_text (
- HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
- HILDON_BUTTON_ARRANGEMENT_VERTICAL,
- _("New Task"), "");
- g_signal_connect (w, "clicked", G_CALLBACK (new_task_clicked_cb),
- user_data);
- hildon_app_menu_append (menu, GTK_BUTTON (w));
-
- w = hildon_button_new_with_text (
- HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
- HILDON_BUTTON_ARRANGEMENT_VERTICAL,
- _("Edit"), "");
- g_signal_connect (w, "clicked", G_CALLBACK (edit_clicked_cb),
- user_data);
- hildon_app_menu_append (menu, GTK_BUTTON (w));
-
- w = hildon_button_new_with_text (
- HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
- HILDON_BUTTON_ARRANGEMENT_VERTICAL,
- _("Priority +"), "");
- g_signal_connect (w, "clicked", G_CALLBACK (priority_plus_clicked_cb),
- user_data);
- hildon_app_menu_append (menu, GTK_BUTTON (w));
-
- w = hildon_button_new_with_text (
- HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
- HILDON_BUTTON_ARRANGEMENT_VERTICAL,
- _("Priority -"), "");
- g_signal_connect (w, "clicked", G_CALLBACK (priority_minus_clicked_cb),
- user_data);
- hildon_app_menu_append (menu, GTK_BUTTON (w));
-
- w = hildon_button_new_with_text (
- HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
- HILDON_BUTTON_ARRANGEMENT_VERTICAL,
- _("Complete"), "");
- g_signal_connect (w, "clicked", G_CALLBACK (complete_clicked_cb),
- user_data);
- hildon_app_menu_append (menu, GTK_BUTTON (w));
-
- w = hildon_button_new_with_text (
- HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
- HILDON_BUTTON_ARRANGEMENT_VERTICAL,
- _("Delete"), "");
- g_signal_connect (w, "clicked", G_CALLBACK (delete_clicked_cb),
- user_data);
- hildon_app_menu_append (menu, GTK_BUTTON (w));
-
- gtk_widget_show_all (GTK_WIDGET (menu));
-
- return menu;
+ menu_array = menu_items_always_shown;
+ length = G_N_ELEMENTS (menu_items_always_shown);
+ for (i = 0; i < length; i++) {
+ w = hildon_button_new_with_text (
+ HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
+ HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+ _(menu_array[i].display_name), "");
+ g_signal_connect (w, "clicked",
+ G_CALLBACK (menu_array[i].callback), user_data);
+ g_object_set_data (G_OBJECT (menu), menu_array[i].id, w);
+ hildon_app_menu_append (menu, GTK_BUTTON (w));
+ gtk_widget_show (w);
+ }
+
+ menu_array = menu_items_selection_required;
+ length = G_N_ELEMENTS (menu_items_selection_required);
+ for (i = 0; i < length; i++) {
+ w = hildon_button_new_with_text (
+ HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH,
+ HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+ menu_array[i].display_name, "");
+ g_signal_connect (w, "clicked",
+ G_CALLBACK (menu_array[i].callback), user_data);
+ g_object_set_data (G_OBJECT (menu), menu_array[i].id, w);
+ hildon_app_menu_append (menu, GTK_BUTTON (w));
+ gtk_widget_hide (w);
+ }
+
+ gtk_widget_show (GTK_WIDGET (menu));
+
+ return GTK_WIDGET (menu);
}
static void
gtk_box_pack_start (GTK_BOX (priv->main_vbox), w, TRUE, TRUE, 0);
g_object_set (w, "can-focus", TRUE, NULL);
gtk_widget_grab_focus (w);
+
+ g_signal_connect (
+ G_OBJECT (w), "changed",
+ G_CALLBACK (task_view_selection_changed_cb), self);
priv->task_view = w;
- hildon_window_set_app_menu (HILDON_WINDOW (self), create_menu (self));
+ priv->app_menu = create_menu (self);
+ hildon_window_set_app_menu (
+ HILDON_WINDOW (self), HILDON_APP_MENU (priv->app_menu));
}
static void
static void
milk_main_window_init (MilkMainWindow *self)
{
- self->priv = MILK_MAIN_WINDOW_PRIVATE (self);
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (
+ self, MILK_TYPE_MAIN_WINDOW, MilkMainWindowPrivate);
}
GtkWidget*