[bijiben] noteView : use mainToolbar rather own toolbar
- From: Pierre-Yves Luyten <pyluyten src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [bijiben] noteView : use mainToolbar rather own toolbar
- Date: Tue, 23 Apr 2013 22:21:49 +0000 (UTC)
commit 6a721f0249ee5886bd34457a365a78c2f96bd808
Author: Pierre-Yves Luyten <py luyten fr>
Date: Wed Apr 24 00:19:37 2013 +0200
noteView : use mainToolbar rather own toolbar
Change MainToolbar implementation to handle also note view.
This is a bit more simple
src/bjb-app-menu.c | 2 +-
src/bjb-bijiben.c | 2 +-
src/bjb-main-toolbar.c | 490 ++++++++++++++++++++++++++++++++++++++----------
src/bjb-main-toolbar.h | 10 +-
src/bjb-main-view.c | 102 +++++++++--
src/bjb-main-view.h | 13 ++
src/bjb-note-view.c | 298 +----------------------------
src/bjb-window-base.c | 81 ++++++---
src/bjb-window-base.h | 10 +-
9 files changed, 568 insertions(+), 440 deletions(-)
---
diff --git a/src/bjb-app-menu.c b/src/bjb-app-menu.c
index 2faf4dc..72163a5 100644
--- a/src/bjb-app-menu.c
+++ b/src/bjb-app-menu.c
@@ -49,7 +49,7 @@ new_activated (GSimpleAction *action,
BjbWindowBase *win;
win = BJB_WINDOW_BASE (bjb_window_base_new());
- bjb_window_base_switch_to (win, BJB_MAIN_VIEW);
+ bjb_window_base_switch_to (win, BJB_WINDOW_BASE_MAIN_VIEW);
}
/* Import external data - TODO : BJB_TYPE_IMPORT_DIALOG.c */
diff --git a/src/bjb-bijiben.c b/src/bjb-bijiben.c
index a989318..95fca66 100644
--- a/src/bjb-bijiben.c
+++ b/src/bjb-bijiben.c
@@ -61,7 +61,7 @@ bijiben_new_window_internal (GApplication *app,
else
{
- bjb_window_base_switch_to (BJB_WINDOW_BASE (win), BJB_MAIN_VIEW);
+ bjb_window_base_switch_to (BJB_WINDOW_BASE (win), BJB_WINDOW_BASE_MAIN_VIEW);
gtk_widget_show_all (GTK_WIDGET (win)); // FIXME not here
}
}
diff --git a/src/bjb-main-toolbar.c b/src/bjb-main-toolbar.c
index 39ce019..8e53521 100644
--- a/src/bjb-main-toolbar.c
+++ b/src/bjb-main-toolbar.c
@@ -17,47 +17,59 @@
#include <glib/gi18n.h>
+#include "bjb-bijiben.h"
+#include "bjb-color-button.h"
#include "bjb-main-toolbar.h"
+#include "bjb-note-tag-dialog.h"
#include "bjb-rename-note.h"
+#include "bjb-share.h"
#include "bjb-window-base.h"
+#include "utils/bjb-icons-colors.h"
-/* select_mode + two different standard mode */
+/* All needed toolbars */
typedef enum
{
BJB_TOOLBAR_0,
BJB_TOOLBAR_STD_LIST,
BJB_TOOLBAR_STD_ICON,
BJB_TOOLBAR_SELECT,
+ BJB_TOOLBAR_NOTE_VIEW,
BJB_TOOLBAR_NUM
-} BjbToolbarType ;
+} BjbToolbarType;
+
+/* Color Button */
+#define COLOR_SIZE 24
struct _BjbMainToolbarPrivate
{
/* Controllers */
- GdMainView *view;
- BjbToolbarType type;
- BjbMainView *parent;
- BjbController *controller;
-
- /* Buttons */
- GtkWidget *new;
- GtkWidget *list;
- GtkWidget *grid;
- GtkWidget *select;
- GtkWidget *search;
-
- /* Signal Handlers */
- gulong finish_sig;
- gulong update_selection;
- gulong search_handler;
- gulong display_notes;
+ BjbToolbarType type;
+ BjbMainView *parent;
+ BjbController *controller;
+ GtkWindow *window;
+
+ /* Main View */
+ GtkWidget *new;
+ GtkWidget *list;
+ GtkWidget *grid;
+ GtkWidget *select;
+ GtkWidget *search;
+ gulong finish_sig;
+ gulong update_selection;
+ gulong search_handler;
+ gulong display_notes;
+
+ /* When note view */
+ BijiNoteObj *note;
+ gulong note_renamed;
+ gulong note_color_changed;
+ GtkAccelGroup *accel;
};
/* GObject properties */
enum {
PROP_0,
- PROP_VIEW,
PROP_PARENT,
PROP_CONTROLLER,
NUM_PROPERTIES
@@ -78,7 +90,7 @@ on_new_note_clicked (GtkWidget *but, BjbMainView *view)
BijiNoteBook *book ;
/* append note to collection */
- book = bjb_window_base_get_book(bjb_main_view_get_window(view));
+ book = bjb_window_base_get_book (bjb_main_view_get_window (view));
result = biji_note_book_get_new_note_from_string (book, "");
/* Go to that note */
@@ -87,53 +99,77 @@ on_new_note_clicked (GtkWidget *but, BjbMainView *view)
static void populate_main_toolbar(BjbMainToolbar *self);
+static gboolean
+update_selection_label (BjbMainToolbar *self)
+{
+ GList *selected;
+ gint length;
+ gchar *label;
+
+ selected = bjb_main_view_get_selection (self->priv->parent);
+ length = g_list_length (selected);
+ g_list_free (selected);
+
+ if (length == 0)
+ label = g_strdup(_("Click on items to select them"));
+ else
+ label = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, "%d selected", "%d selected", length),length);
+
+ gd_main_toolbar_set_labels (GD_MAIN_TOOLBAR (self), NULL, label);
+ g_free (label);
+
+ return TRUE;
+}
+
void
-on_selection_mode_changed (BjbMainToolbar *self)
+on_view_selection_changed_cb (BjbMainToolbar *self)
{
GtkStyleContext *context;
- GdMainView *view = self->priv->view;
- GtkWidget *widget = GTK_WIDGET(self);
+ GtkWidget *widget = GTK_WIDGET (self);
context = gtk_widget_get_style_context (widget);
- if (!gd_main_view_get_selection_mode (view))
+ g_return_if_fail (BJB_IS_MAIN_TOOLBAR (self));
+
+ if (!bjb_main_view_get_selection_mode (self->priv->parent))
gtk_style_context_remove_class (context, "selection-mode");
else
gtk_style_context_add_class (context, "selection-mode");
gtk_widget_reset_style (widget);
- populate_main_toolbar(self);
- return ;
+ populate_main_toolbar (self);
+
+ if (self->priv->type == BJB_TOOLBAR_SELECT)
+ update_selection_label (self);
+
+ return;
}
static void
on_selection_mode_clicked (GtkWidget *button, BjbMainToolbar *self)
{
- if (gd_main_view_get_selection_mode (self->priv->view))
- gd_main_view_set_selection_mode (self->priv->view, FALSE);
+ if (bjb_main_view_get_selection_mode (self->priv->parent))
+ bjb_main_view_set_selection_mode (self->priv->parent, FALSE);
else
- gd_main_view_set_selection_mode (self->priv->view, TRUE);
-
- on_selection_mode_changed (self);
+ bjb_main_view_set_selection_mode (self->priv->parent, TRUE);
}
static gboolean
on_view_mode_clicked (GtkWidget *button, BjbMainToolbar *self)
{
- GdMainView *view = self->priv->view ;
- GdMainViewType current = gd_main_view_get_view_type(view);
+ GdMainViewType current = bjb_main_view_get_view_type (self->priv->parent);
switch ( current )
{
case GD_MAIN_VIEW_ICON :
- gd_main_view_set_view_type ( view ,GD_MAIN_VIEW_LIST );
+ bjb_main_view_set_view_type (self->priv->parent ,GD_MAIN_VIEW_LIST );
break ;
case GD_MAIN_VIEW_LIST :
- gd_main_view_set_view_type ( view ,GD_MAIN_VIEW_ICON );
+ bjb_main_view_set_view_type (self->priv->parent, GD_MAIN_VIEW_ICON );
break ;
default:
- gd_main_view_set_view_type ( view ,GD_MAIN_VIEW_ICON );
+ bjb_main_view_set_view_type (self->priv->parent, GD_MAIN_VIEW_ICON );
}
bjb_main_view_update_model (self->priv->parent);
@@ -207,28 +243,6 @@ update_selection_buttons (BjbMainToolbarPrivate *priv)
gtk_widget_set_sensitive (priv->select, some_note_is_visible);
}
-static gboolean
-update_selection_label (GdMainView *view, BjbMainToolbar *self)
-{
- GList *selected;
- gint length;
- gchar *label;
-
- selected = gd_main_view_get_selection(view);
- length = g_list_length (selected);
- g_list_free (selected);
-
- if (length == 0)
- label = g_strdup(_("Click on items to select them"));
- else
- label = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, "%d selected", "%d selected", length),length);
-
- gd_main_toolbar_set_labels (GD_MAIN_TOOLBAR (self), NULL, label);
- g_free (label);
-
- return TRUE;
-}
-
static void
populate_bar_for_selection (BjbMainToolbar *self)
{
@@ -248,12 +262,7 @@ populate_bar_for_selection (BjbMainToolbar *self)
g_signal_connect (priv->select, "clicked",
G_CALLBACK (on_selection_mode_clicked), self);
- priv->update_selection = g_signal_connect(priv->view,
- "view-selection-changed",
- G_CALLBACK(update_selection_label),
- self);
-
- update_selection_label(priv->view,self);
+ update_selection_label (self);
}
static void
@@ -353,6 +362,283 @@ populate_bar_for_list_view(BjbMainToolbar *self)
populate_bar_for_standard(self);
}
+
+static void
+disconnect_note_handlers (BjbMainToolbarPrivate *priv)
+{
+ if (priv->accel)
+ gtk_window_remove_accel_group (priv->window, priv->accel);
+
+ if (priv->note_renamed != 0)
+ {
+ g_signal_handler_disconnect (priv->note, priv->note_renamed);
+ priv->note_renamed = 0;
+ }
+
+ if (priv->note_color_changed != 0)
+ {
+ g_signal_handler_disconnect (priv->note, priv->note_color_changed);
+ priv->note_color_changed = 0;
+ }
+
+ priv->note = NULL;
+}
+
+static void
+just_switch_to_main_view (BjbMainToolbar *self)
+{
+ disconnect_note_handlers (self->priv);
+ bjb_window_base_switch_to (BJB_WINDOW_BASE (self->priv->window),
+ BJB_WINDOW_BASE_MAIN_VIEW);
+}
+
+static void
+on_note_renamed (BijiNoteObj *note,
+ BjbMainToolbar *self)
+{
+ gd_main_toolbar_set_labels (
+ GD_MAIN_TOOLBAR (self),
+ biji_note_obj_get_title (note),
+ NULL);
+}
+
+static void
+on_color_button_clicked (GtkColorButton *button,
+ BjbMainToolbar *bar)
+{
+ GdkRGBA color;
+
+ if (!bar->priv->note)
+ return;
+
+ gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
+ biji_note_obj_set_rgba (bar->priv->note, &color);
+}
+
+static void
+on_note_color_changed (BijiNoteObj *note, GtkColorButton *button)
+{
+ GdkRGBA color;
+
+ if (biji_note_obj_get_rgba (note, &color))
+ gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (button), &color);
+}
+
+static void
+bjb_toggle_bullets (BijiWebkitEditor *editor)
+{
+ biji_webkit_editor_apply_format (editor, BIJI_BULLET_LIST);
+}
+
+static void
+bjb_toggle_list (BijiWebkitEditor *editor)
+{
+ biji_webkit_editor_apply_format (editor, BIJI_ORDER_LIST);
+}
+
+static void
+action_view_tags_callback (GtkWidget *item, gpointer user_data)
+{
+ BjbMainToolbar *self = BJB_MAIN_TOOLBAR (user_data);
+ GList *list = NULL;
+
+ list = g_list_append (list, self->priv->note);
+ bjb_note_tag_dialog_new (self->priv->window, list);
+ g_list_free (list);
+}
+
+static void
+delete_item_callback (GtkWidget *item, gpointer user_data)
+{
+ BjbMainToolbar *self = BJB_MAIN_TOOLBAR (user_data);
+
+ /* Delete the note from collection
+ * The deleted note will emit a signal. */
+ biji_note_book_remove_note (
+ bjb_window_base_get_book (GTK_WIDGET (self->priv->window)),
+ self->priv->note);
+}
+
+static void
+action_rename_note_callback (GtkWidget *item, gpointer user_data)
+{
+ BjbMainToolbar *bar;
+ BjbMainToolbarPrivate *priv;
+ gchar *title;
+
+ bar = BJB_MAIN_TOOLBAR (user_data);
+ priv = bar->priv;
+
+ title = note_title_dialog (priv->window,
+ _("Rename Note"),
+ biji_note_obj_get_title (priv->note));
+
+ if (!title)
+ return;
+
+ biji_note_obj_set_title (priv->note, title);
+ biji_note_obj_save_note (priv->note); //FIXME libbiji needs to to this auto
+}
+
+GtkWidget *
+bjb_note_menu_new (BjbMainToolbar *self)
+{
+ BjbMainToolbarPrivate *priv = self->priv;
+ GtkWidget *result, *item;
+ BijiWebkitEditor *editor;
+
+ result = gtk_menu_new();
+ editor = BIJI_WEBKIT_EDITOR (biji_note_obj_get_editor (priv->note));
+
+ /* Undo Redo separator */
+ item = gtk_menu_item_new_with_label (_("Undo"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (webkit_web_view_undo), editor);
+ gtk_widget_add_accelerator (item, "activate", priv->accel, GDK_KEY_u,
+ GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+ gtk_widget_show (item);
+
+ item = gtk_menu_item_new_with_label (_("Redo"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (webkit_web_view_redo), editor);
+ gtk_widget_add_accelerator (item, "activate", priv->accel, GDK_KEY_r,
+ GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+ gtk_widget_show (item);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ gtk_widget_show (item);
+
+ /* Bullets, ordered list, separator */
+ /* Bullets : unordered list format */
+ item = gtk_menu_item_new_with_label (_("Bullets"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (bjb_toggle_bullets), editor);
+ gtk_widget_show (item);
+
+ /* Ordered list as 1.mouse 2.cats 3.dogs */
+ item = gtk_menu_item_new_with_label (_("List"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (bjb_toggle_list), editor);
+ gtk_widget_show(item);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ gtk_widget_show (item);
+
+ /* Rename, view tags, separtor */
+ item = gtk_menu_item_new_with_label(_("Rename"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(result),item);
+ g_signal_connect(item,"activate",
+ G_CALLBACK(action_rename_note_callback),self);
+ gtk_widget_show(item);
+
+ item = gtk_menu_item_new_with_label(_("Tags"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(result),item);
+ g_signal_connect(item,"activate",
+ G_CALLBACK(action_view_tags_callback),self);
+ gtk_widget_show(item);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
+ gtk_widget_show (item);
+
+ /* Delete Note */
+ item = gtk_menu_item_new_with_label(_("Delete this Note"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(result),item);
+ g_signal_connect(item,"activate",
+ G_CALLBACK(delete_item_callback),self);
+ gtk_widget_show(item);
+
+ return result;
+}
+
+static void
+populate_bar_for_note_view (BjbMainToolbar *self)
+{
+ BjbMainToolbarPrivate *priv = self->priv;
+ GdMainToolbar *bar = GD_MAIN_TOOLBAR (self);
+ BjbSettings *settings;
+ GtkWidget *grid, *notes_icon, *notes_label, *button;
+ GdkRGBA color;
+
+ priv->note = bjb_window_base_get_note (BJB_WINDOW_BASE (self->priv->window));
+
+ if (!priv->note) /* no reason this would happen */
+ return;
+
+ settings = bjb_app_get_settings (g_application_get_default());
+ priv->accel = gtk_accel_group_new ();
+ gtk_window_add_accel_group (priv->window, priv->accel);
+
+ /* Go to main view basically means closing note */
+ grid = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
+ notes_icon = get_icon ("go-previous-symbolic");
+ gtk_box_pack_start (GTK_BOX (grid), notes_icon, TRUE, TRUE, TRUE);
+
+ notes_label = gtk_label_new (_("Notes"));
+ gtk_box_pack_start (GTK_BOX (grid), notes_label, TRUE, TRUE, TRUE);
+
+ button = gd_main_toolbar_add_button (bar, NULL, NULL, TRUE);
+
+ gtk_container_add (GTK_CONTAINER (button), grid);
+
+ g_signal_connect_swapped (button, "clicked",
+ G_CALLBACK (just_switch_to_main_view), self);
+ gtk_widget_add_accelerator (button, "activate", self->priv->accel,
+ GDK_KEY_w, GDK_CONTROL_MASK, GTK_ACCEL_MASK);
+
+ /* Note Title */
+ gd_main_toolbar_set_labels (bar, biji_note_obj_get_title (priv->note), NULL);
+
+ self->priv->note_renamed = g_signal_connect (priv->note,"renamed",
+ G_CALLBACK (on_note_renamed), self);
+
+
+ /* Note Color */
+ if (!biji_note_obj_get_rgba (priv->note, &color))
+ {
+ gchar *default_color;
+
+ g_object_get (G_OBJECT(settings),"color", &default_color, NULL);
+ gdk_rgba_parse (&color, default_color);
+ g_free (default_color);
+ }
+
+ button = bjb_color_button_new ();
+ gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (button), &color);
+
+ gd_main_toolbar_add_widget (bar, button, FALSE);
+ gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
+ COLOR_SIZE, COLOR_SIZE);
+ gtk_widget_show (button);
+
+ g_signal_connect (button, "color-set",
+ G_CALLBACK (on_color_button_clicked), self);
+ priv->note_color_changed = g_signal_connect (priv->note, "color-changed",
+ G_CALLBACK (on_note_color_changed), button);
+
+ /* Sharing */
+ button = gd_main_toolbar_add_button (bar, "send-to-symbolic",
+ NULL, FALSE);
+
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (on_email_note_callback), priv->note);
+
+ /* Menu */
+ button = gd_main_toolbar_add_menu (bar,
+ "emblem-system-symbolic",
+ NULL,
+ FALSE);
+
+ gtk_menu_button_set_popup (GTK_MENU_BUTTON (button),
+ bjb_note_menu_new (self));
+}
+
static void
populate_bar_switch(BjbMainToolbar *self)
{
@@ -374,8 +660,12 @@ populate_bar_switch(BjbMainToolbar *self)
update_selection_buttons (self->priv);
break;
+ case BJB_TOOLBAR_NOTE_VIEW:
+ populate_bar_for_note_view (self);
+ break;
+
default:
- g_warning("Main Toolbar implementation is erroneous.\
+ g_warning ("Main Toolbar implementation is erroneous.\
Please fill in a bug report");
}
@@ -387,19 +677,29 @@ populate_main_toolbar(BjbMainToolbar *self)
{
BjbMainToolbarPrivate *priv = self->priv;
BjbToolbarType to_be = BJB_TOOLBAR_0 ;
+ BjbWindowViewType view_type;
+
+ view_type = bjb_window_base_get_view_type (BJB_WINDOW_BASE (priv->window));
+
+ if (view_type == BJB_WINDOW_BASE_NOTE_VIEW)
+ to_be = BJB_TOOLBAR_NOTE_VIEW;
- if (gd_main_view_get_selection_mode(priv->view) == TRUE)
+ else if (bjb_main_view_get_selection_mode (priv->parent) == TRUE)
to_be = BJB_TOOLBAR_SELECT;
- else if (gd_main_view_get_view_type(priv->view) == GD_MAIN_VIEW_ICON)
+ else if (bjb_main_view_get_view_type (priv->parent) == GD_MAIN_VIEW_ICON)
to_be = BJB_TOOLBAR_STD_ICON;
- else if (gd_main_view_get_view_type(priv->view) == GD_MAIN_VIEW_LIST)
+ else if (bjb_main_view_get_view_type (priv->parent) == GD_MAIN_VIEW_LIST)
to_be = BJB_TOOLBAR_STD_LIST;
-
+
/* Simply clear then populate */
if (to_be != priv->type)
{
+ /* If we leave a note view */
+ if (priv->type == BJB_TOOLBAR_NOTE_VIEW)
+ disconnect_note_handlers (priv);
+
priv->type = to_be;
gd_main_toolbar_clear (GD_MAIN_TOOLBAR (self));
@@ -422,6 +722,14 @@ populate_main_toolbar(BjbMainToolbar *self)
static void
bjb_main_toolbar_constructed (GObject *obj)
{
+ BjbMainToolbar *self = BJB_MAIN_TOOLBAR (obj);
+
+ g_signal_connect_swapped (self->priv->window, "view-changed",
+ G_CALLBACK (populate_main_toolbar), self);
+
+ g_signal_connect_swapped (self->priv->parent, "view-selection-changed",
+ G_CALLBACK (on_view_selection_changed_cb), self);
+
G_OBJECT_CLASS(bjb_main_toolbar_parent_class)->constructed(obj);
}
@@ -432,9 +740,17 @@ bjb_main_toolbar_init (BjbMainToolbar *self)
BjbMainToolbarPrivate *priv = self->priv;
priv->type = BJB_TOOLBAR_0 ;
+
priv->grid = NULL;
priv->list = NULL;
priv->search = NULL;
+ priv->search_handler = 0;
+ priv->display_notes = 0;
+
+ priv->accel = NULL;
+ priv->note = NULL;
+ priv->note_renamed = 0;
+ priv->note_color_changed = 0;
g_signal_connect (self, "button-press-event", G_CALLBACK (on_button_press), NULL);
}
@@ -464,16 +780,13 @@ bjb_main_toolbar_get_property (GObject *object,
BjbMainToolbar *self = BJB_MAIN_TOOLBAR (object);
switch (property_id)
- {
- case PROP_VIEW:
- g_value_set_object (value, self->priv->view);
- break;
+ {
case PROP_PARENT:
g_value_set_object (value, self->priv->parent);
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
- }
+ }
}
static void
@@ -485,12 +798,11 @@ bjb_main_toolbar_set_property (GObject *object,
BjbMainToolbar *self = BJB_MAIN_TOOLBAR (object);
switch (property_id)
- {
- case PROP_VIEW:
- bjb_main_toolbar_set_view(self,g_value_get_object(value));
- break;
+ {
case PROP_PARENT:
self->priv->parent = g_value_get_object(value);
+ self->priv->window = GTK_WINDOW (
+ bjb_main_view_get_window (self->priv->parent));
break;
case PROP_CONTROLLER:
self->priv->controller = g_value_get_object (value);
@@ -498,7 +810,7 @@ bjb_main_toolbar_set_property (GObject *object,
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
- }
+ }
}
static void
@@ -513,14 +825,6 @@ bjb_main_toolbar_class_init (BjbMainToolbarClass *klass)
object_class->constructed = bjb_main_toolbar_constructed;
object_class->finalize = bjb_main_toolbar_finalize;
- properties[PROP_VIEW] = g_param_spec_object ("view",
- "View",
- "View",
- GD_TYPE_MAIN_VIEW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS);
-
properties[PROP_PARENT] = g_param_spec_object ("parent",
"Parent",
"Parent",
@@ -541,8 +845,7 @@ bjb_main_toolbar_class_init (BjbMainToolbarClass *klass)
}
BjbMainToolbar *
-bjb_main_toolbar_new (GdMainView *view,
- BjbMainView *parent,
+bjb_main_toolbar_new (BjbMainView *parent,
BjbController *controller)
{
/* Since heriting GdMainToolbar, we populate bar _after_ construct */
@@ -551,7 +854,6 @@ bjb_main_toolbar_new (GdMainView *view,
self = BJB_MAIN_TOOLBAR (g_object_new (BJB_TYPE_MAIN_TOOLBAR,
"controller", controller,
"parent", parent,
- "view", view,
NULL));
populate_main_toolbar(self);
@@ -559,12 +861,6 @@ bjb_main_toolbar_new (GdMainView *view,
}
void
-bjb_main_toolbar_set_view (BjbMainToolbar *self, GdMainView *view)
-{
- self->priv->view = view ;
-}
-
-void
bjb_main_toolbar_set_search_toggle_state (BjbMainToolbar *self,
gboolean active)
{
diff --git a/src/bjb-main-toolbar.h b/src/bjb-main-toolbar.h
index f77a512..7437af7 100644
--- a/src/bjb-main-toolbar.h
+++ b/src/bjb-main-toolbar.h
@@ -1,6 +1,6 @@
/*
* bijiben
- * Copyright (C) Pierre-Yves Luyten 2012 <py luyten fr>
+ * Copyright (C) Pierre-Yves Luyten 2012, 2013 <py luyten fr>
*
bijiben is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -51,13 +51,7 @@ struct _BjbMainToolbar
GType bjb_main_toolbar_get_type (void) G_GNUC_CONST;
-BjbMainToolbar * bjb_main_toolbar_new (GdMainView *view,
- BjbMainView *parent,
- BjbController *controller);
-
-void on_selection_mode_changed (BjbMainToolbar *self);
-
-void bjb_main_toolbar_set_view (BjbMainToolbar *self, GdMainView *view);
+BjbMainToolbar *bjb_main_toolbar_new (BjbMainView *parent, BjbController *controller);
void bjb_main_toolbar_set_search_toggle_state (BjbMainToolbar *self, gboolean active);
diff --git a/src/bjb-main-view.c b/src/bjb-main-view.c
index e7d3b50..3ffb5f7 100644
--- a/src/bjb-main-view.c
+++ b/src/bjb-main-view.c
@@ -46,6 +46,13 @@ enum
static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
+enum {
+ VIEW_SELECTION_CHANGED,
+ BJB_MAIN_VIEW_SIGNALS
+};
+
+static guint bjb_main_view_signals [BJB_MAIN_VIEW_SIGNALS] = { 0 };
+
/************************** Gobject ***************************/
struct _BjbMainViewPriv {
@@ -70,6 +77,7 @@ struct _BjbMainViewPriv {
gulong button;
gulong activated;
gulong data;
+ gulong view_selection_changed;
};
G_DEFINE_TYPE (BjbMainView, bjb_main_view, GTK_TYPE_BOX);
@@ -79,6 +87,12 @@ bjb_main_view_init (BjbMainView *object)
{
object->priv =
G_TYPE_INSTANCE_GET_PRIVATE(object,BJB_TYPE_MAIN_VIEW,BjbMainViewPriv);
+
+ object->priv->key = 0;
+ object->priv->button = 0;
+ object->priv->activated = 0;
+ object->priv->data = 0;
+ object->priv->view_selection_changed =0;
}
static void
@@ -96,6 +110,13 @@ bjb_main_view_disconnect_handlers (BjbMainView *self)
g_signal_handler_disconnect (priv->view, priv->button);
g_signal_handler_disconnect (priv->view, priv->activated);
g_signal_handler_disconnect (priv->view, priv->data);
+ g_signal_handler_disconnect (priv->view, priv->view_selection_changed);
+
+ priv->key = 0;
+ priv->button = 0;
+ priv->activated = 0;
+ priv->data = 0;
+ priv->view_selection_changed =0;
}
static void
@@ -317,6 +338,14 @@ action_delete_selected_notes(GtkWidget *w,BjbMainView *view)
g_list_free (notes);
}
+/* Just tell */
+static void
+on_selection_mode_changed_cb (BjbMainView *self)
+{
+ g_signal_emit (G_OBJECT (self),
+ bjb_main_view_signals[VIEW_SELECTION_CHANGED],0);
+}
+
/* Select all, escape */
static gboolean
on_key_press_event_cb (GtkWidget *widget,
@@ -341,7 +370,6 @@ on_key_press_event_cb (GtkWidget *widget,
if (gd_main_view_get_selection_mode (priv->view))
{
gd_main_view_set_selection_mode (priv->view, FALSE);
- on_selection_mode_changed (priv->main_toolbar);
return TRUE;
}
@@ -366,11 +394,7 @@ on_button_press_event_cb (GtkWidget *widget,
/* Right click */
case 3:
if (!gd_main_view_get_selection_mode (priv->view))
- {
gd_main_view_set_selection_mode (priv->view, TRUE);
- on_selection_mode_changed (priv->main_toolbar);
- }
-
return TRUE;
default:
@@ -452,13 +476,27 @@ bjb_main_view_connect_signals (BjbMainView *self)
bjb_controller_connect (priv->controller);
bjb_search_toolbar_connect (priv->search_bar);
- priv->key = g_signal_connect (priv->window, "key-press-event",
+ if (priv->view_selection_changed == 0)
+ priv->view_selection_changed = g_signal_connect_swapped
+ (priv->view,
+ "view-selection-changed",
+ G_CALLBACK (on_selection_mode_changed_cb),
+ self);
+
+ if (priv->key == 0)
+ priv->key = g_signal_connect (priv->window, "key-press-event",
G_CALLBACK (on_key_press_event_cb), self);
- priv->button = g_signal_connect (priv->view, "button-press-event",
+
+ if (priv->button == 0)
+ priv->button = g_signal_connect (priv->view, "button-press-event",
G_CALLBACK (on_button_press_event_cb), self);
- priv->activated = g_signal_connect(priv->view,"item-activated",
+
+ if (priv->activated == 0)
+ priv->activated = g_signal_connect(priv->view,"item-activated",
G_CALLBACK(on_item_activated),self);
- priv->data = g_signal_connect (priv->view, "drag-data-received",
+
+ if (priv->data == 0)
+ priv->data = g_signal_connect (priv->view, "drag-data-received",
G_CALLBACK (on_drag_data_received), self);
}
@@ -484,10 +522,6 @@ bjb_main_view_constructed(GObject *o)
priv->view = gd_main_view_new (DEFAULT_VIEW);
bjb_controller_set_main_view (priv->controller, priv->view);
- /* main Toolbar */
- priv->main_toolbar = bjb_main_toolbar_new (priv->view, self, priv->controller);
- gtk_box_pack_start (vbox, GTK_WIDGET (priv->main_toolbar), FALSE, FALSE, 0);
-
/* Search entry toolbar */
priv->search_bar = bjb_search_toolbar_new (priv->window, priv->controller);
revealer = bjb_search_toolbar_get_revealer (priv->search_bar);
@@ -544,6 +578,17 @@ bjb_main_view_class_init (BjbMainViewClass *klass)
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
+
+ bjb_main_view_signals[VIEW_SELECTION_CHANGED] = g_signal_new ( "view-selection-changed" ,
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
}
BjbMainView *
@@ -586,3 +631,34 @@ bjb_main_view_get_main_toolbar (BjbMainView *view)
return (gpointer) view->priv->main_toolbar;
}
+
+/* interface for notes view (GdMainView) */
+gboolean
+bjb_main_view_get_selection_mode (BjbMainView *self)
+{
+ return gd_main_view_get_selection_mode (self->priv->view);
+}
+
+void
+bjb_main_view_set_selection_mode (BjbMainView *self, gboolean mode)
+{
+ gd_main_view_set_selection_mode (self->priv->view, mode);
+}
+
+GdMainViewType
+bjb_main_view_get_view_type (BjbMainView *view)
+{
+ return gd_main_view_get_view_type (view->priv->view);
+}
+
+void
+bjb_main_view_set_view_type (BjbMainView *view, GdMainViewType type)
+{
+ gd_main_view_set_view_type (view->priv->view, type);
+}
+
+GList *
+bjb_main_view_get_selection (BjbMainView *view)
+{
+ return gd_main_view_get_selection (view->priv->view);
+}
diff --git a/src/bjb-main-view.h b/src/bjb-main-view.h
index bc8fcca..e4a3889 100644
--- a/src/bjb-main-view.h
+++ b/src/bjb-main-view.h
@@ -86,6 +86,19 @@ BjbSearchToolbar *bjb_main_view_get_search_toolbar (BjbMainView *view);
gpointer bjb_main_view_get_main_toolbar (BjbMainView *view);
+/* bridge for notes view (GdMainView)
+ * TODO : get rid of this it's a bit idiot */
+
+gboolean bjb_main_view_get_selection_mode (BjbMainView *view);
+
+void bjb_main_view_set_selection_mode (BjbMainView *view, gboolean mode);
+
+GdMainViewType bjb_main_view_get_view_type (BjbMainView *view);
+
+void bjb_main_view_set_view_type (BjbMainView *view, GdMainViewType type);
+
+GList *bjb_main_view_get_selection (BjbMainView *view);
+
G_END_DECLS
#endif /* _MAIN_VIEW_H_ */
diff --git a/src/bjb-note-view.c b/src/bjb-note-view.c
index a4d35a6..14a4e26 100644
--- a/src/bjb-note-view.c
+++ b/src/bjb-note-view.c
@@ -20,15 +20,9 @@
#include <libbiji/libbiji.h>
#include <libgd/gd.h>
-#include "utils/bjb-icons-colors.h"
-
#include "bjb-bijiben.h"
-#include "bjb-color-button.h"
#include "bjb-editor-toolbar.h"
-#include "bjb-rename-note.h"
-#include "bjb-share.h"
#include "bjb-main-view.h"
-#include "bjb-note-tag-dialog.h"
#include "bjb-note-view.h"
#include "bjb-window-base.h"
@@ -69,7 +63,6 @@ struct _BjbNoteViewPrivate {
/* Signals */
gulong destroy ;
- gulong renamed ;
gulong deleted ;
gulong color;
};
@@ -77,9 +70,6 @@ struct _BjbNoteViewPrivate {
static void
bjb_note_view_disconnect (BjbNoteViewPrivate *priv)
{
- if (priv->renamed != 0)
- g_signal_handler_disconnect (priv->note, priv->renamed);
-
if (priv->destroy != 0)
g_signal_handler_disconnect (priv->window, priv->destroy);
@@ -89,7 +79,6 @@ bjb_note_view_disconnect (BjbNoteViewPrivate *priv)
if (priv->color != 0)
g_signal_handler_disconnect (priv->note, priv->color);
- priv->renamed =0;
priv->destroy = 0,
priv->deleted = 0;
priv->color =0;
@@ -104,7 +93,6 @@ bjb_note_view_finalize(GObject *object)
bjb_note_view_disconnect (priv);
g_clear_object (&priv->view);
- g_clear_object (&priv->accel);
g_clear_object (&priv->edit_bar);
clutter_color_free (priv->last_date_bckgrd_clr);
@@ -191,267 +179,8 @@ just_switch_to_main_view(BjbNoteView *self)
bjb_note_view_disconnect (self->priv);
window = GTK_WINDOW(self->priv->window);
- gtk_window_remove_accel_group (window, self->priv->accel);
-
- bjb_window_base_switch_to (BJB_WINDOW_BASE (window), BJB_MAIN_VIEW);
-}
-
-static void
-action_view_tags_callback (GtkWidget *item, gpointer user_data)
-{
- BjbNoteView *self = BJB_NOTE_VIEW (user_data);
- GtkWindow *window = GTK_WINDOW (self->priv->window);
-
- GList *note = NULL;
- note = g_list_append (note, self->priv->note);
-
- bjb_note_tag_dialog_new (window, note);
- g_list_free (note);
-}
-
-static void
-action_rename_note_callback (GtkWidget *item, gpointer user_data)
-{
- BjbNoteView *view;
- BjbNoteViewPrivate *priv;
- gchar *title;
-
- view = BJB_NOTE_VIEW (user_data);
- priv = view->priv;
-
- title = note_title_dialog(GTK_WINDOW(priv->window), _("Rename Note"),
- biji_note_obj_get_title(priv->note));
-
- if (!title)
- return ;
-
- biji_note_obj_set_title (priv->note,title);
- biji_note_obj_save_note (priv->note);
-}
-
-static void
-delete_item_callback (GtkWidget *item, gpointer user_data)
-{
- BjbNoteView *view = BJB_NOTE_VIEW (user_data);
-
- /* Delete the note from collection
- * The deleted note will emit a signal. */
- biji_note_book_remove_note(bjb_window_base_get_book(view->priv->window),
- view->priv->note);
-}
-
-static void
-on_color_set(GtkColorButton *button,
- BjbNoteView *view)
-{
- GdkRGBA color;
-
- gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
- biji_note_obj_set_rgba (view->priv->note,&color) ;
-}
-
-/* just a bridge between note menu & webkit func */
-static void
-bjb_toggle_bullets (BijiWebkitEditor *editor)
-{
- biji_webkit_editor_apply_format (editor, BIJI_BULLET_LIST);
-}
-
-static void
-bjb_toggle_list (BijiWebkitEditor *editor)
-{
- biji_webkit_editor_apply_format (editor, BIJI_ORDER_LIST);
-}
-
-
-GtkWidget *
-bjb_note_menu_new (BjbNoteView *self)
-{
- BjbNoteViewPrivate *priv = self->priv;
- GtkWidget *result, *item;
-
- result = gtk_menu_new();
- priv->editor = BIJI_WEBKIT_EDITOR (biji_note_obj_get_editor (priv->note));
-
- /* Undo Redo separator */
- item = gtk_menu_item_new_with_label (_("Undo"));
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (webkit_web_view_undo), priv->editor);
- gtk_widget_add_accelerator (item, "activate", priv->accel, GDK_KEY_u,
- GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
- gtk_widget_show (item);
-
- item = gtk_menu_item_new_with_label (_("Redo"));
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (webkit_web_view_redo), priv->editor);
- gtk_widget_add_accelerator (item, "activate", priv->accel, GDK_KEY_r,
- GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
- gtk_widget_show (item);
-
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- gtk_widget_show (item);
-
- /* Bullets, ordered list, separator */
- /* Bullets : unordered list format */
- item = gtk_menu_item_new_with_label (_("Bullets"));
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (bjb_toggle_bullets), priv->editor);
- gtk_widget_show(item);
-
- /* Ordered list as 1.mouse 2.cats 3.dogs */
- item = gtk_menu_item_new_with_label (_("List"));
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (bjb_toggle_list), priv->editor);
- gtk_widget_show(item);
-
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- gtk_widget_show (item);
-
- /* Rename, view tags, separtor */
- item = gtk_menu_item_new_with_label(_("Rename"));
- gtk_menu_shell_append(GTK_MENU_SHELL(result),item);
- g_signal_connect(item,"activate",
- G_CALLBACK(action_rename_note_callback),self);
- gtk_widget_show(item);
-
- item = gtk_menu_item_new_with_label(_("Tags"));
- gtk_menu_shell_append(GTK_MENU_SHELL(result),item);
- g_signal_connect(item,"activate",
- G_CALLBACK(action_view_tags_callback),self);
- gtk_widget_show(item);
-
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (result), item);
- gtk_widget_show (item);
-
- /* Delete Note */
- item = gtk_menu_item_new_with_label(_("Delete this Note"));
- gtk_menu_shell_append(GTK_MENU_SHELL(result),item);
- g_signal_connect(item,"activate",
- G_CALLBACK(delete_item_callback),self);
- gtk_widget_show(item);
-
- return result;
-}
-
-#define COLOR_SIZE 24
-
-static void
-on_note_renamed (BijiNoteObj *note, GdMainToolbar *bar)
-{
- gd_main_toolbar_set_labels (bar, biji_note_obj_get_title (note), NULL);
-}
-
-/* Just makes toolbar draggable */
-static gboolean
-on_button_press (GtkWidget* widget,
- GdkEventButton * event,
- GdkWindowEdge edge)
-{
- if (event->type == GDK_BUTTON_PRESS)
- {
- if (event->button == 1) {
- gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
- event->button,
- event->x_root,
- event->y_root,
- event->time);
- }
- }
-
- return FALSE;
-}
-
-static ClutterActor *
-bjb_note_main_toolbar_new (BjbNoteView *self,
- ClutterActor *parent,
- BijiNoteObj *note)
-{
- GdMainToolbar *gd;
- ClutterActor *result;
- GtkWidget *w,*button;
-
- GtkWidget *grid,*notes_label,*notes_icon;
-
- GtkWidget *color_button;
- GdkRGBA color;
- BjbSettings *settings;
-
- w = gd_main_toolbar_new();
- gd = GD_MAIN_TOOLBAR(w);
-
- settings = bjb_app_get_settings (g_application_get_default());
-
- result = gtk_clutter_actor_new_with_contents(w);
- clutter_actor_add_child(parent,result);
- gtk_widget_show_all(w);
- clutter_actor_set_x_expand(result,TRUE);
-
- /* Go to main view basically means closing note */
- grid = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
- notes_icon = get_icon("go-previous-symbolic");
- gtk_box_pack_start(GTK_BOX(grid),notes_icon,TRUE,TRUE,TRUE);
- /* Button to go back to main view */
- notes_label = gtk_label_new (_("Notes"));
- gtk_box_pack_start(GTK_BOX(grid),notes_label,TRUE,TRUE,TRUE);
-
- button = gd_main_toolbar_add_button (gd, NULL, NULL, TRUE);
-
- gtk_container_add(GTK_CONTAINER(button),grid);
- gtk_widget_show_all(button);
- gtk_widget_set_vexpand (button, TRUE);
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK(just_switch_to_main_view),self);
- gtk_widget_add_accelerator (button, "activate", self->priv->accel,
- GDK_KEY_w, GDK_CONTROL_MASK, GTK_ACCEL_MASK);
-
- /* Note title */
- gd_main_toolbar_set_labels (gd,biji_note_obj_get_title(note),NULL);
-
- self->priv->renamed = g_signal_connect(note,"renamed",
- G_CALLBACK(on_note_renamed), w);
-
- /* Note Color */
- if (!biji_note_obj_get_rgba (note, &color))
- {
- gchar *default_color;
- g_object_get (G_OBJECT(settings),"color", &default_color, NULL);
- gdk_rgba_parse (&color, default_color);
- g_free (default_color);
- }
-
- color_button = bjb_color_button_new ();
- gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (color_button), &color);
-
- gd_main_toolbar_add_widget (gd, color_button, FALSE);
- gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (color_button)),
- COLOR_SIZE, COLOR_SIZE);
- gtk_widget_show (color_button);
-
- g_signal_connect (color_button,"color-set",
- G_CALLBACK(on_color_set),self);
-
- /* Sharing */
- button = gd_main_toolbar_add_button (gd, "send-to-symbolic",
- NULL, FALSE);
-
- g_signal_connect(button,"clicked",
- G_CALLBACK(on_email_note_callback),note);
-
- /* Menu */
- button = gd_main_toolbar_add_menu(gd,"emblem-system-symbolic",NULL,FALSE);
-
- gtk_menu_button_set_popup (GTK_MENU_BUTTON (button),
- bjb_note_menu_new (self));
-
- g_signal_connect (w, "button-press-event", G_CALLBACK (on_button_press), NULL);
- return result;
+ bjb_window_base_switch_to (BJB_WINDOW_BASE (window),
+ BJB_WINDOW_BASE_MAIN_VIEW);
}
static gboolean
@@ -522,9 +251,9 @@ bjb_note_view_constructed (GObject *obj)
BjbNoteViewPrivate *priv = self->priv;
BjbSettings *settings;
GtkWidget *scroll;
- ClutterActor *vbox;
+ ClutterActor *text_actor, *overlay;
ClutterConstraint *constraint;
- ClutterLayoutManager *full, *box, *bin;
+ ClutterLayoutManager *full, *bin;
gchar *default_font;
/* view new from note deserializes the note-content. */
@@ -542,31 +271,20 @@ bjb_note_view_constructed (GObject *obj)
/* Start packing ui */
gtk_container_add (GTK_CONTAINER (priv->parent), GTK_WIDGET (self));
- gtk_widget_show_all (priv->parent);
priv->embed = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (self));
full = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
CLUTTER_BIN_ALIGNMENT_CENTER);
- clutter_actor_set_layout_manager (priv->embed,full);
-
- vbox = clutter_actor_new();
- box = clutter_box_layout_new();
- clutter_box_layout_set_orientation(CLUTTER_BOX_LAYOUT(box),
- CLUTTER_ORIENTATION_VERTICAL);
- clutter_actor_set_layout_manager (vbox,box);
- clutter_actor_add_child (priv->embed,vbox);
-
- /* Main Toolbar */
- bjb_note_main_toolbar_new (self, vbox, priv->note);
+ clutter_actor_set_layout_manager (priv->embed, full);
/* Overlay contains Text and EditToolbar */
- ClutterActor *overlay = clutter_actor_new ();
+ overlay = clutter_actor_new ();
bin = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
CLUTTER_BIN_ALIGNMENT_CENTER);
clutter_actor_set_layout_manager (overlay,bin);
- clutter_actor_add_child (vbox,overlay);
+ clutter_actor_add_child (priv->embed, overlay);
clutter_actor_set_x_expand (overlay,TRUE);
clutter_actor_set_y_expand (overlay,TRUE);
@@ -587,7 +305,7 @@ bjb_note_view_constructed (GObject *obj)
gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET(priv->view));
gtk_widget_show (GTK_WIDGET (priv->view));
- ClutterActor *text_actor = gtk_clutter_actor_new_with_contents (scroll);
+ text_actor = gtk_clutter_actor_new_with_contents (scroll);
clutter_actor_add_child(overlay,text_actor);
clutter_actor_set_x_expand(text_actor,TRUE);
diff --git a/src/bjb-window-base.c b/src/bjb-window-base.c
index 61cd32e..19ab10a 100644
--- a/src/bjb-window-base.c
+++ b/src/bjb-window-base.c
@@ -7,6 +7,7 @@
#include "bjb-bijiben.h"
#include "bjb-window-base.h"
+#include "bjb-main-toolbar.h"
#include "bjb-main-view.h"
#include "bjb-note-view.h"
@@ -17,6 +18,13 @@
#define BJB_DEFAULT_FONT "Serif 10"
+enum {
+ BJB_WIN_BASE_VIEW_CHANGED,
+ BJB_WIN_BASE_SIGNALS
+};
+
+static guint bjb_win_base_signals [BJB_WIN_BASE_SIGNALS] = { 0 };
+
/* As the main window remains, it owns the data */
struct _BjbWindowBasePriv
{
@@ -27,11 +35,13 @@ struct _BjbWindowBasePriv
/* UI
* The Notebook always has a main view.
* When editing a note, it _also_ has a note view */
+ GtkWidget *vbox;
GdStack *stack;
GtkWidget *spinner; // this spinner takes the whole place
// and only shows on startup
BjbWindowViewType current_view;
BjbMainView *view;
+ BjbMainToolbar *main_toolbar;
gchar *entry;
/* when a note is opened */
@@ -126,16 +136,6 @@ bjb_window_base_constructed (GObject *obj)
priv->entry = NULL ;
priv->font = pango_font_description_from_string (BJB_DEFAULT_FONT);
- /* UI : basic notebook */
- priv->stack = GD_STACK (gd_stack_new ());
- gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (priv->stack));
-
- priv->spinner = gtk_spinner_new ();
- gd_stack_add_named (priv->stack, priv->spinner, "spinner");
- gd_stack_set_visible_child_name (priv->stack, "spinner");
- gtk_widget_show (priv->spinner);
- gtk_spinner_start (GTK_SPINNER (priv->spinner));
-
/* Signals */
g_signal_connect(GTK_WIDGET(self),"destroy",
G_CALLBACK(bjb_window_base_destroy),self);
@@ -144,12 +144,17 @@ bjb_window_base_constructed (GObject *obj)
static void
bjb_window_base_init (BjbWindowBase *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- BJB_TYPE_WINDOW_BASE,
- BjbWindowBasePriv);
+ BjbWindowBasePriv *priv;
+ priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ BJB_TYPE_WINDOW_BASE,
+ BjbWindowBasePriv);
+ self->priv = priv;
/* Default window has no note opened */
- self->priv->note_view = NULL;
+ priv->note_view = NULL;
+
+ priv->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_container_add (GTK_CONTAINER (self), priv->vbox);
}
static void
@@ -162,6 +167,16 @@ bjb_window_base_class_init (BjbWindowBaseClass *klass)
gobject_class->finalize = bjb_window_base_finalize ;
g_type_class_add_private (klass, sizeof (BjbWindowBasePriv));
+
+ bjb_win_base_signals[BJB_WIN_BASE_VIEW_CHANGED] = g_signal_new ("view-changed" ,
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
}
GtkWindow *
@@ -183,7 +198,21 @@ bjb_window_base_new(void)
(bijiben_get_book (BIJIBEN_APPLICATION(g_application_get_default())),
priv->entry );
+ /* Shared toolbar */
priv->view = bjb_main_view_new (GTK_WIDGET (retval), priv->controller);
+ priv->main_toolbar = bjb_main_toolbar_new (priv->view, priv->controller);
+ gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET (priv->main_toolbar), FALSE, FALSE, 0);
+
+ /* UI : stack for different views */
+ priv->stack = GD_STACK (gd_stack_new ());
+ gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET (priv->stack), TRUE, TRUE, 0);
+
+ priv->spinner = gtk_spinner_new ();
+ gd_stack_add_named (priv->stack, priv->spinner, "spinner");
+ gd_stack_set_visible_child_name (priv->stack, "spinner");
+ gtk_widget_show (priv->spinner);
+ gtk_spinner_start (GTK_SPINNER (priv->spinner));
+
gd_stack_add_named (priv->stack, GTK_WIDGET (priv->view), "main-view");
gtk_widget_show_all (GTK_WIDGET (retval));
@@ -203,14 +232,6 @@ window_base_get_font(GtkWidget *window)
return b->priv->font ;
}
-void
-bjb_window_base_set_note (BjbWindowBase *self, BijiNoteObj *note)
-{
- g_return_if_fail (BJB_IS_WINDOW_BASE (self));
-
- self->priv->note = note;
-}
-
BijiNoteObj *
bjb_window_base_get_note (BjbWindowBase *self)
{
@@ -232,11 +253,12 @@ void
bjb_window_base_switch_to (BjbWindowBase *bwb, BjbWindowViewType type)
{
BjbWindowBasePriv *priv = bwb->priv;
+ priv->current_view = type;
/* Precise the window does not display any specific note
* Refresh the model
* Ensure the main view receives the proper signals */
- if (type == BJB_MAIN_VIEW)
+ if (type == BJB_WINDOW_BASE_MAIN_VIEW)
{
priv->note = NULL;
bjb_main_view_connect_signals (priv->view);
@@ -250,6 +272,8 @@ bjb_window_base_switch_to (BjbWindowBase *bwb, BjbWindowViewType type)
gtk_widget_show_all (GTK_WIDGET (priv->note_overlay));
gd_stack_set_visible_child_name (priv->stack, "note-view");
}
+
+ g_signal_emit (G_OBJECT (bwb), bjb_win_base_signals[BJB_WIN_BASE_VIEW_CHANGED],0);
}
void
@@ -262,16 +286,23 @@ bjb_window_base_switch_to_note (BjbWindowBase *bwb, BijiNoteObj *note)
priv->note = note;
priv->note_overlay = gtk_overlay_new ();
+
gd_stack_add_named (priv->stack, priv->note_overlay, "note-view");
priv->note_view = bjb_note_view_new (w, priv->note_overlay, note);
+
g_object_add_weak_pointer (G_OBJECT (priv->note_view),
(gpointer *) &priv->note_view);
- bjb_window_base_set_note (bwb, priv->note);
- bjb_window_base_switch_to (bwb, BJB_NOTE_VIEW);
+ bjb_window_base_switch_to (bwb, BJB_WINDOW_BASE_NOTE_VIEW);
gtk_widget_show_all (w);
}
+BjbWindowViewType
+bjb_window_base_get_view_type (BjbWindowBase *win)
+{
+ return win->priv->current_view;
+}
+
BijiNoteBook *
bjb_window_base_get_book(GtkWidget * win)
{
diff --git a/src/bjb-window-base.h b/src/bjb-window-base.h
index 93c1881..6d6d4ac 100644
--- a/src/bjb-window-base.h
+++ b/src/bjb-window-base.h
@@ -32,9 +32,9 @@ struct _BjbWindowBase
};
typedef enum {
- BJB_MAIN_VIEW,
- BJB_NOTE_VIEW,
- BJB_NO_VIEW
+ BJB_WINDOW_BASE_MAIN_VIEW,
+ BJB_WINDOW_BASE_NOTE_VIEW,
+ BJB_WINDOW_BASE_NO_VIEW
} BjbWindowViewType;
GType bjb_window_base_get_type (void);
@@ -51,6 +51,8 @@ void bjb_window_base_switch_to (BjbWindowBase *bwb, BjbWindowViewType type);
void bjb_window_base_switch_to_note (BjbWindowBase *bwb, BijiNoteObj *note);
+BjbWindowViewType bjb_window_base_get_view_type (BjbWindowBase *win);
+
BijiNoteBook * bjb_window_base_get_book(GtkWidget * win);
void bjb_window_base_set_entry(GtkWidget *win, gchar *search_entry) ;
@@ -63,8 +65,6 @@ gpointer bjb_window_base_get_main_view (BjbWindowBase *self);
BijiNoteObj * bjb_window_base_get_note (BjbWindowBase *self);
-void bjb_window_base_set_note (BjbWindowBase *self, BijiNoteObj *note);
-
gboolean switch_window_fullscreen();
#endif /* _BJB_WINDOW_BASE_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]