[gnome-photos/wip/collection-dialog] start collection dialog



commit 7a83bbc5d44c50c3ae86b4ce7fc5f17d9ab96386
Author: Alessandro Bono <shadow openaliasbox org>
Date:   Mon Oct 26 15:34:37 2015 +0100

    start collection dialog

 src/photos-organize-collection-dialog.c |  123 ++++++++++++++++++++++---------
 src/photos-organize-collection-dialog.h |    4 +-
 src/photos-selection-toolbar.c          |   12 ++--
 src/photos.gresource.xml                |    1 +
 4 files changed, 97 insertions(+), 43 deletions(-)
---
diff --git a/src/photos-organize-collection-dialog.c b/src/photos-organize-collection-dialog.c
index c9fff67..b8de8c1 100644
--- a/src/photos-organize-collection-dialog.c
+++ b/src/photos-organize-collection-dialog.c
@@ -25,6 +25,7 @@
 
 #include "config.h"
 
+#include <gio/gio.h>
 #include <glib/gi18n.h>
 
 #include "photos-organize-collection-dialog.h"
@@ -33,13 +34,18 @@
 
 struct _PhotosOrganizeCollectionDialogPrivate
 {
+  gboolean rename_mode;
+  GtkButton *add_button_empty;
+  GtkButton *add_button_collections;
+  GtkButton *add_entry_empty;
+  GtkButton *add_entry_collections;
   GtkWidget *coll_view;
 };
 
 
-G_DEFINE_TYPE_WITH_PRIVATE (PhotosOrganizeCollectionDialog, photos_organize_collection_dialog, 
GTK_TYPE_DIALOG);
-
+G_DEFINE_TYPE_WITH_PRIVATE (PhotosOrganizeCollectionDialog, photos_organize_collection_dialog, 
GTK_TYPE_WINDOW);
 
+/*
 static gboolean
 photos_organize_collection_dialog_button_press_event (PhotosOrganizeCollectionDialog *self, GdkEvent *event)
 {
@@ -58,23 +64,87 @@ photos_organize_collection_dialog_response (GtkDialog *dialog, gint response_id)
 
   photos_organize_collection_view_add_collection (PHOTOS_ORGANIZE_COLLECTION_VIEW (self->priv->coll_view));
 }
+*/
+static void
+photos_organize_collection_dialog_add_button_clicked (GtkButton *button, gpointer user_data)
+{
+    PhotosOrganizeCollectionDialogPrivate *priv = PHOTOS_ORGANIZE_COLLECTION_DIALOG (user_data)->priv;
+  g_print("test");
+}
 
+static gboolean
+photos_organize_collection_dialog_key_pressed (PhotosOrganizeCollectionDialog *self, GdkEventKey *event, 
gpointer user_data)
+{
+  PhotosOrganizeCollectionDialogPrivate *priv = self->priv;
+
+  if (event->keyval == GDK_KEY_Escape)
+    {
+      if (priv->rename_mode)
+       gtk_widget_destroy (GTK_WIDGET (self));//this._renameModeStop(false);
+      else
+       gtk_widget_destroy (GTK_WIDGET (self));
+
+      return GDK_EVENT_STOP;
+    }
+  return GDK_EVENT_PROPAGATE;
+}
+
+static void
+photos_organize_collection_dialog_text_changed (GtkEntry *entry, gpointer user_data)
+{
+  GtkButton *add_button;
+
+  PhotosOrganizeCollectionDialog *self = PHOTOS_ORGANIZE_COLLECTION_DIALOG (user_data);
+  PhotosOrganizeCollectionDialogPrivate *priv = self->priv;
+  // check if is valid
+  gboolean sensitive = TRUE;
+  if (priv->rename_mode)
+    {
+
+    }
+  else
+    {
+      add_button = priv->add_button_empty;//check if empty
+      gtk_widget_set_sensitive (GTK_WIDGET (add_button), sensitive);
+    }
+}
 
 static void
 photos_organize_collection_dialog_init (PhotosOrganizeCollectionDialog *self)
 {
   PhotosOrganizeCollectionDialogPrivate *priv;
-  GtkWidget *content_area;
-  GtkWidget *ok_button;
-  GtkWidget *sw;
+  GSimpleActionGroup *action_group;
+  GSimpleAction *delete_action;
+  GSimpleAction *rename_action;
+  GVariantType *parameter_type;
+  //GtkWidget *content_area;
+  //GtkWidget *sw;
 
   self->priv = photos_organize_collection_dialog_get_instance_private (self);
   priv = self->priv;
 
-  gtk_dialog_add_button (GTK_DIALOG (self), _("_Add"), GTK_RESPONSE_ACCEPT);
-  ok_button = gtk_dialog_add_button (GTK_DIALOG (self), _("_OK"), GTK_RESPONSE_CLOSE);
-  gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE);
+  gtk_widget_init_template (GTK_WIDGET (self));
+
+  priv->rename_mode = FALSE;
 
+  g_signal_connect (self, "key-press-event", (GCallback) photos_organize_collection_dialog_key_pressed, 
NULL);
+  g_signal_connect (priv->add_button_empty, "clicked", (GCallback) 
photos_organize_collection_dialog_add_button_clicked, self);
+  g_signal_connect (priv->add_button_collections, "clicked", (GCallback) 
photos_organize_collection_dialog_add_button_clicked, self);
+  g_signal_connect (priv->add_entry_empty, "changed", (GCallback) 
photos_organize_collection_dialog_text_changed, self);
+  g_signal_connect (priv->add_entry_collections, "changed", (GCallback) 
photos_organize_collection_dialog_text_changed, self);
+
+  action_group = g_simple_action_group_new ();
+  parameter_type = g_variant_type_new ("s");
+  delete_action = g_simple_action_new ("delete-collection", parameter_type);
+  g_variant_type_free (parameter_type);
+  parameter_type = g_variant_type_new ("s");
+  rename_action = g_simple_action_new ("rename-collection", parameter_type);
+  g_variant_type_free (parameter_type);
+  g_action_map_add_action (G_ACTION_MAP (action_group), G_ACTION (delete_action));
+  g_action_map_add_action (G_ACTION_MAP (action_group), G_ACTION (rename_action));
+  gtk_widget_insert_action_group (GTK_WIDGET (self), "dialog", G_ACTION_GROUP (action_group));
+
+/*
   content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
   sw = gtk_scrolled_window_new (NULL, NULL);
   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
@@ -84,31 +154,21 @@ photos_organize_collection_dialog_init (PhotosOrganizeCollectionDialog *self)
 
   priv->coll_view = photos_organize_collection_view_new ();
   gtk_container_add (GTK_CONTAINER (sw), priv->coll_view);
-  gtk_container_add (GTK_CONTAINER (content_area), sw);
-
-  /* HACK:
-   * - We want clicking on "OK" to add the typed-in collection if
-   *   we're editing.
-   * - Unfortunately, since we focus out of the editable entry in
-   *   order to click the button, we'll get an editing-canceled signal
-   *   on the renderer from GTK+. As this handler will run before
-   *   focus-out, we here signal the view to ignore the next
-   *   editing-canceled signal and add the collection in that case
-   *   instead.
-   */
-  g_signal_connect_swapped (ok_button,
-                            "button-press-event",
-                            G_CALLBACK (photos_organize_collection_dialog_button_press_event),
-                            self);
+  gtk_container_add (GTK_CONTAINER (content_area), sw);*/
 }
 
 
 static void
 photos_organize_collection_dialog_class_init (PhotosOrganizeCollectionDialogClass *class)
 {
-  GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (class);
-
-  dialog_class->response = photos_organize_collection_dialog_response;
+  GtkWindowClass *window_class = GTK_WINDOW_CLASS (class);
+
+  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (window_class), 
"/org/gnome/Photos/organize-collection-dialog.ui");
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (window_class), 
PhotosOrganizeCollectionDialog, add_button_empty);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (window_class), 
PhotosOrganizeCollectionDialog, add_button_collections);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (window_class), 
PhotosOrganizeCollectionDialog, add_entry_empty);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (window_class), 
PhotosOrganizeCollectionDialog, add_entry_collections);
+  //dialog_class->response = photos_organize_collection_dialog_response;
 }
 
 
@@ -118,13 +178,6 @@ photos_organize_collection_dialog_new (GtkWindow *parent)
   g_return_val_if_fail (GTK_IS_WINDOW (parent), NULL);
 
   return g_object_new (PHOTOS_TYPE_ORGANIZE_COLLECTION_DIALOG,
-                       "default-width", 400,
-                       "default-height", 250,
-                       "destroy-with-parent", TRUE,
-                       "modal", TRUE,
-                       /* Translators: "Organize" refers to photos in this context */
-                       "title", C_("Dialog title", "Organize"),
-                       "transient-for", parent,
-                       "use-header-bar", TRUE,
+                      "transient-for", parent,
                        NULL);
 }
diff --git a/src/photos-organize-collection-dialog.h b/src/photos-organize-collection-dialog.h
index fd48449..dc4b787 100644
--- a/src/photos-organize-collection-dialog.h
+++ b/src/photos-organize-collection-dialog.h
@@ -57,13 +57,13 @@ typedef struct _PhotosOrganizeCollectionDialogPrivate PhotosOrganizeCollectionDi
 
 struct _PhotosOrganizeCollectionDialog
 {
-  GtkDialog parent_instance;
+  GtkWindow parent_instance;
   PhotosOrganizeCollectionDialogPrivate *priv;
 };
 
 struct _PhotosOrganizeCollectionDialogClass
 {
-  GtkDialogClass parent_class;
+  GtkWindowClass parent_class;
 };
 
 GType               photos_organize_collection_dialog_get_type           (void) G_GNUC_CONST;
diff --git a/src/photos-selection-toolbar.c b/src/photos-selection-toolbar.c
index a77ab2a..3e62ad3 100644
--- a/src/photos-selection-toolbar.c
+++ b/src/photos-selection-toolbar.c
@@ -65,19 +65,19 @@ enum
 };
 
 
+
 static void
-photos_selection_toolbar_dialog_response (GtkDialog *dialog, gint response_id, gpointer user_data)
+photos_selection_toolbar_dialog_response (GtkWindow *dialog, gpointer user_data)
 {
   PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data);
 
-  if (response_id != GTK_RESPONSE_CLOSE)
-    return;
+  //if (response_id != GTK_RESPONSE_CLOSE)
+  //  return;
 
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  //gtk_widget_destroy (GTK_WIDGET (dialog));
   photos_selection_controller_set_selection_mode (self->priv->sel_cntrlr, FALSE);
 }
 
-
 static void
 photos_selection_toolbar_collection_clicked (GtkButton *button, gpointer user_data)
 {
@@ -91,7 +91,7 @@ photos_selection_toolbar_collection_clicked (GtkButton *button, gpointer user_da
 
   dialog = photos_organize_collection_dialog_new (GTK_WINDOW (toplevel));
   gtk_widget_show_all (dialog);
-  g_signal_connect (dialog, "response", G_CALLBACK (photos_selection_toolbar_dialog_response), self);
+  g_signal_connect (dialog, "destroy", G_CALLBACK (photos_selection_toolbar_dialog_response), self);
 }
 
 
diff --git a/src/photos.gresource.xml b/src/photos.gresource.xml
index 20b58a2..6a3022b 100644
--- a/src/photos.gresource.xml
+++ b/src/photos.gresource.xml
@@ -5,6 +5,7 @@
     <file alias="Adwaita.css">../data/Adwaita.css</file>
     <file alias="dlna-renderers-dialog.ui" preprocess="xml-stripblanks" 
compressed="true">photos-dlna-renderers-dialog.ui</file>
     <file alias="dnd-counter.svg" preprocess="to-pixdata">../data/dnd-counter.svg</file>
+    <file alias="organize-collection-dialog.ui" preprocess="xml-stripblanks" 
compressed="true">photos-organize-collection-dialog.ui</file>
     <file alias="preview-menu.ui" preprocess="xml-stripblanks" 
compressed="true">photos-preview-menu.ui</file>
     <file alias="selection-menu.ui" preprocess="xml-stripblanks" 
compressed="true">photos-selection-menu.ui</file>
     <file alias="sidebar-radio-checked.svg" preprocess="to-pixdata">../data/sidebar-radio-checked.svg</file>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]