[bijiben] Settings: dialog with font and color



commit e6c8c91bae5a2fe3c80b86550ccef1536d6c0a29
Author: Pierre-Yves Luyten <py luyten fr>
Date:   Sun Nov 18 16:12:02 2012 +0100

    Settings: dialog with font and color

 src/bjb-app-menu.c        |   45 +++++++++----
 src/bjb-note-view.c       |    9 ++-
 src/bjb-settings.c        |  159 +++++++++++++++++++++++++-------------------
 src/bjb-settings.h        |    9 +--
 src/resources/app-menu.ui |   16 ++---
 5 files changed, 139 insertions(+), 99 deletions(-)
---
diff --git a/src/bjb-app-menu.c b/src/bjb-app-menu.c
index 09bf426..effed0f 100644
--- a/src/bjb-app-menu.c
+++ b/src/bjb-app-menu.c
@@ -8,24 +8,29 @@
 
 void show_about_dialog(GtkApplication *app)
 {
-  GList * windows = gtk_application_get_windows(app);
+  GList * windows = gtk_application_get_windows (app);
   
-  gtk_show_about_dialog(
-  g_list_nth_data(windows,0),
-	"program-name", "Bijiben",
-	"comments", "Simple noteboook for GNOME",
-	"license", "GPLv3",
-	"version", "0.2.0",
-	"copyright", "Pierre-Yves Luyten 2012",
-	NULL,NULL,NULL);
+  gtk_show_about_dialog( g_list_nth_data (windows, 0),
+  "program-name", "Bijiben",
+  "comments", "Simple noteboook for GNOME",
+  "license", "GPLv3",
+  "version", "0.2.0",
+  "copyright", "Pierre-Yves Luyten 2012",
+  NULL,NULL,NULL);
 
 }
 
 void 
 summary()
 {
-	GError *error = NULL;
-	gtk_show_uri (NULL, "ghelp:bijiben", gtk_get_current_event_time (), &error);
+  GError *error = NULL;
+  gtk_show_uri (NULL, "ghelp:bijiben", gtk_get_current_event_time (), &error);
+
+  if (error)
+  {
+    g_warning (error->message);
+    g_error_free (error);
+  }
 }
 
 static void
@@ -37,6 +42,15 @@ new_activated (GSimpleAction *action,
 }
 
 static void
+preferences_activated (GSimpleAction *action,
+                       GVariant      *parameter,
+                       gpointer       user_data)
+{
+  GList * windows = gtk_application_get_windows (GTK_APPLICATION(user_data));
+  show_bijiben_settings_window (g_list_nth_data (windows, 0));
+}
+
+static void
 about_activated (GSimpleAction *action,
                  GVariant      *parameter,
                  gpointer       user_data)
@@ -51,6 +65,12 @@ help_activated (GSimpleAction *action,
 {
   GError *error = NULL;
   gtk_show_uri (NULL, "ghelp:bijiben", gtk_get_current_event_time (), &error);
+
+  if (error)
+  {
+    g_warning (error->message);
+    g_error_free (error);
+  }
 }
 
 static void
@@ -67,8 +87,9 @@ quit_activated (GSimpleAction *action,
 
 static GActionEntry app_entries[] = {
            { "new", new_activated, NULL, NULL, NULL },
-           { "help", help_activated, NULL, NULL, NULL },
+           { "preferences", preferences_activated, NULL, NULL, NULL },
            { "about", about_activated, NULL, NULL, NULL },
+           { "help", help_activated, NULL, NULL, NULL },
            { "quit", quit_activated, NULL, NULL, NULL },
 };
 
diff --git a/src/bjb-note-view.c b/src/bjb-note-view.c
index cc92adc..32929bc 100644
--- a/src/bjb-note-view.c
+++ b/src/bjb-note-view.c
@@ -449,7 +449,7 @@ bjb_note_view_constructed (GObject *obj)
   ClutterActor           *stage, *vbox;
   ClutterConstraint      *constraint;
   ClutterLayoutManager   *full, *box, *bin;
-  gchar                  *font;
+  gchar                  *default_font, *default_color;
 
   /* view new from note deserializes the note-content. */
   priv->view = biji_note_obj_open (priv->note);
@@ -521,15 +521,18 @@ bjb_note_view_constructed (GObject *obj)
   clutter_actor_set_y_expand(text_actor,TRUE);
 
   /* Apply the selected font */ 
-  g_object_get (G_OBJECT(settings),"font",&font,NULL);
+  g_object_get (G_OBJECT(settings),"font",&default_font,NULL);
   gtk_widget_modify_font(GTK_WIDGET(priv->view),
-                         pango_font_description_from_string(font));
+                         pango_font_description_from_string(default_font));
 
   /* User defined color */
   GdkRGBA color ;
   if (!biji_note_obj_get_rgba(priv->note, &color))
     gdk_rgba_parse (&color, DEFAULT_NOTE_COLOR);
 
+  g_object_get (G_OBJECT(settings),"color", &default_color,NULL);
+  
+
   biji_note_obj_set_rgba (priv->note, &color);
 
   /* Edition Toolbar */
diff --git a/src/bjb-settings.c b/src/bjb-settings.c
index 21f69d9..2cf4294 100644
--- a/src/bjb-settings.c
+++ b/src/bjb-settings.c
@@ -4,6 +4,9 @@
 #include "bjb-bijiben.h"
 #include "bjb-settings.h"
 
+#define WIDTH_SETTING_DIALOG_SIZE_DIFF 150
+#define HEIGHT_SETTING_DIALOG_SIZE_DIFF 180
+
 struct _BjbSettingsPrivate
 {
   GSettings *settings ;
@@ -16,10 +19,7 @@ enum
 
   // Note Editor.
   PROP_FONT,
-  PROP_HIGHLIGHT_COLOR,
-
-  // Interface / desktop integration
-  PROP_CASE_SENSITIVE_SEARCH,           // Hidden setting.
+  PROP_COLOR,
 
   N_PROPERTIES
 };
@@ -43,24 +43,20 @@ bjb_settings_finalize (GObject *object)
 
 static void
 bjb_settings_get_property (GObject    *object,
-			     guint       prop_id,
-			     GValue     *value,
-			     GParamSpec *pspec)
+                           guint       prop_id,
+                           GValue     *value,
+                           GParamSpec *pspec)
 {
   BjbSettings *settings = BJB_SETTINGS (object);
 
   switch (prop_id)
-  {
-    case PROP_CASE_SENSITIVE_SEARCH:
-      g_value_set_boolean (value,settings->case_sensitive_search);
-      break;
-            
+  {            
     case PROP_FONT:
       g_value_set_string (value,settings->font);
       break;
 
-    case PROP_HIGHLIGHT_COLOR:
-      g_value_set_string (value,settings->highlight_color);
+    case PROP_COLOR:
+      g_value_set_string (value,settings->color);
       break;
                                 
     default:
@@ -71,30 +67,26 @@ bjb_settings_get_property (GObject    *object,
 
 static void
 bjb_settings_set_property (GObject      *object,
-			     guint         prop_id,
-			     const GValue *value,
-			     GParamSpec   *pspec)
+                           guint         prop_id,
+                           const GValue *value,
+                           GParamSpec   *pspec)
 {
   BjbSettings *settings = BJB_SETTINGS (object);
 
   switch (prop_id)
   {
-    case PROP_CASE_SENSITIVE_SEARCH:
-      settings->case_sensitive_search = g_value_get_boolean (value);
-      break;
-
     case PROP_FONT:
       settings->font = g_value_dup_string(value) ; 
       break;
 
-    case PROP_HIGHLIGHT_COLOR:
-      settings->highlight_color = g_value_dup_string(value);
+    case PROP_COLOR:
+      settings->color = g_value_dup_string(value);
       break;
             
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
-	}
+  }
 }
 
 static void
@@ -107,26 +99,19 @@ bjb_settings_class_init (BjbSettingsClass *klass)
   object_class->finalize = bjb_settings_finalize;
   object_class->get_property = bjb_settings_get_property;
   object_class->set_property = bjb_settings_set_property;
-
-  g_object_class_install_property (object_class,PROP_CASE_SENSITIVE_SEARCH,
-                                   g_param_spec_boolean ("case-sensitive-search",
-							                		     "Case Sensitive Search",
-                                                         "Case man!",
-							                              FALSE,
-							                              G_PARAM_READWRITE));
     
   g_object_class_install_property (object_class,PROP_FONT,
                                    g_param_spec_string("font",
-                                                       "Font",
-                                                       "Font for notes",
+                                                       "Notes Font",
+                                                       "Font for Notes",
                                                        NULL,
                                                        G_PARAM_READWRITE | 
                                                        G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (object_class,PROP_HIGHLIGHT_COLOR,
-                                   g_param_spec_string("highlight-color",
-                                                       "Highlight Color",
-                                                       "Color text",
+  g_object_class_install_property (object_class,PROP_COLOR,
+                                   g_param_spec_string("color",
+                                                       "New Notes Color",
+                                                       "Default Color for New Notes",
                                                        NULL,
                                                        G_PARAM_READWRITE | 
                                                        G_PARAM_STATIC_STRINGS));
@@ -135,70 +120,106 @@ bjb_settings_class_init (BjbSettingsClass *klass)
 // only init from bijiben
 
 BjbSettings *
-initialize_settings(void)
+initialize_settings (void)
 {
   BjbSettings *result = g_object_new (BJB_TYPE_SETTINGS,NULL) ;
-
-  result->priv->settings= g_settings_new("org.gnome.bijiben");
-
-  // UI settings
-
-  g_settings_bind  (result->priv->settings, "case-sensitive-search",
-                    result,"case_sensitive_search",
-                    G_SETTINGS_BIND_DEFAULT);
+  result->priv->settings= g_settings_new ("org.gnome.bijiben");
 
   // Note editor settings
-
   g_settings_bind  (result->priv->settings, "font",
                     result,"font",
                     G_SETTINGS_BIND_DEFAULT);
 
-  g_settings_bind  (result->priv->settings, "highlight-color",
-                    result,"highlight_color",
+  g_settings_bind  (result->priv->settings, "color",
+                    result,"color",
                     G_SETTINGS_BIND_DEFAULT);
-    
+
   return result ;
 }
 
 static void
-on_font_selected(GtkFontButton *widget, BjbSettings *settings)
+on_font_selected (GtkFontButton *widget,
+                  BjbSettings *settings)
 {
-  g_object_set(settings,"font",gtk_font_button_get_font_name(widget),NULL);
+  g_settings_set_string (settings->priv->settings,
+                         "font",
+                         gtk_font_button_get_font_name (widget));
+}
+
+static void
+on_color_set (GtkColorButton *button,
+              BjbSettings *settings)
+{
+  GdkRGBA color;
+  gchar *color_str;
+
+  gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
+  color_str = gdk_rgba_to_string (&color);
+
+  g_settings_set_string (settings->priv->settings,
+                         "color",
+                         color_str);
+
+  g_free (color_str);
 }
 
 void
-show_bijiben_settings_window(GtkMenuItem* item, GtkWidget *parent_window)
+show_bijiben_settings_window (GtkWidget *parent_window)
 {
-  GtkWidget *dialog,*area,*notebook,*page,*frame,*picker;
+  GtkWidget *dialog,*area,*notebook,*page, *hbox, *label, *picker;
+  gint width, height;
+
   BjbSettings *settings = bjb_app_get_settings(g_application_get_default());
 
-  // create dialog
+  /* create dialog */
   dialog = gtk_dialog_new_with_buttons("Notes tag",
-	                                    GTK_WINDOW(parent_window),
-	                                    GTK_DIALOG_MODAL| 
-                                        GTK_DIALOG_DESTROY_WITH_PARENT,
-	                                    GTK_STOCK_OK,
-	                                    GTK_RESPONSE_OK,
-	                                    NULL);
+                                      GTK_WINDOW(parent_window),
+                                      GTK_DIALOG_MODAL| 
+                                      GTK_DIALOG_DESTROY_WITH_PARENT,
+                                      GTK_STOCK_OK,
+                                      GTK_RESPONSE_OK,
+                                      NULL);
+
+  gtk_window_get_size (GTK_WINDOW (parent_window), &width, &height);
+  gtk_window_set_default_size (GTK_WINDOW (dialog),
+                               width - WIDTH_SETTING_DIALOG_SIZE_DIFF,
+                               height - HEIGHT_SETTING_DIALOG_SIZE_DIFF);
 
   area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
   gtk_container_set_border_width (GTK_CONTAINER (area), 8);
+  gtk_widget_set_hexpand (area, TRUE);
+  gtk_widget_set_vexpand (area, TRUE);
+
   notebook = gtk_notebook_new();
 
-  // page 1 = Note Edition -> Font, Highlight-color
-  page = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
+  /* Edition Page */
+  page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 32);
+
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
+  gtk_box_pack_start (GTK_BOX (page), hbox, TRUE, FALSE, 2);
+  label = gtk_label_new ("Default font");
+  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 2);
   picker = gtk_font_button_new_with_font (settings->font);
   g_signal_connect(picker,"font-set",
                    G_CALLBACK(on_font_selected),settings);
-  gtk_box_pack_start (GTK_BOX(page),picker,FALSE,FALSE,2);
-  frame = gtk_frame_new("Special Formating");
-  gtk_box_pack_start (GTK_BOX(page),frame,FALSE,FALSE,2);
-  picker = gtk_color_button_new (); 
-  gtk_box_pack_start (GTK_BOX(page),picker,FALSE,FALSE,2);  
+  gtk_box_pack_start (GTK_BOX (hbox), picker, TRUE, FALSE, 2);
+
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
+  gtk_box_pack_start (GTK_BOX (page), hbox, TRUE, FALSE, 2);
+  label = gtk_label_new ("Default color");
+  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 2);
+  picker = gtk_color_button_new ();
+  g_signal_connect (picker, "color-set",
+                    G_CALLBACK(on_color_set), settings);
+  gtk_box_pack_start (GTK_BOX (hbox),picker,TRUE,FALSE,2);  
+
   gtk_notebook_append_page(GTK_NOTEBOOK(notebook),page,
                            gtk_label_new("Note Editor"));
 
-  // pack, show, run, kill
+  /* External data Page */
+  // TODO
+
+  /* pack, show, run, kill */
   gtk_box_pack_start (GTK_BOX (area), notebook, TRUE, TRUE,2);
   gtk_widget_show_all(dialog);
   gtk_dialog_run (GTK_DIALOG(dialog));
diff --git a/src/bjb-settings.h b/src/bjb-settings.h
index 6a711f3..f6e38c3 100644
--- a/src/bjb-settings.h
+++ b/src/bjb-settings.h
@@ -28,19 +28,16 @@ struct _BjbSettings
   GObject parent_instance;
   BjbSettingsPrivate *priv ;
 
-  // Note edition settings
+  /* Note edition settings */
   gchar *font ;
-  gchar *highlight_color ;
-
-  // Other settings
-  gboolean case_sensitive_search ;
+  gchar *color ;
 };
 
 GType bjb_settings_get_type (void) G_GNUC_CONST;
 
 BjbSettings * initialize_settings(void);
 
-void show_bijiben_settings_window(GtkMenuItem* item,GtkWidget *parent_window);
+void show_bijiben_settings_window (GtkWidget *parent_window);
 
 G_END_DECLS
 
diff --git a/src/resources/app-menu.ui b/src/resources/app-menu.ui
index fe5e66d..5de8ff6 100644
--- a/src/resources/app-menu.ui
+++ b/src/resources/app-menu.ui
@@ -9,21 +9,19 @@
     </section>
     <section>
       <item>
-        <attribute name="label" translatable="yes">_Tags</attribute>
-        <attribute name="action">app.tags</attribute>
+        <attribute name="label" translatable="yes">_Preferences</attribute>
+        <attribute name="action">app.preferences</attribute>
       </item>
     </section>
     <section>
       <item>
-        <attribute name="label" translatable="yes">_Help</attribute>
-        <attribute name="action">app.help</attribute>
-      </item>
-      <item>
         <attribute name="label" translatable="yes">_About Bijiben</attribute>
         <attribute name="action">app.about</attribute>
       </item>
-    </section>
-    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Help</attribute>
+        <attribute name="action">app.help</attribute>
+      </item>
       <item>
         <attribute name="label" translatable="yes">_Quit</attribute>
         <attribute name="action">app.quit</attribute>
@@ -31,4 +29,4 @@
       </item>
     </section>
   </menu>
-</interface>
\ No newline at end of file
+</interface>



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