[almanah/tagsupport] Allow the user to add a tag to a non-saved entry
- From: Ãlvaro PeÃa <alvaropg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [almanah/tagsupport] Allow the user to add a tag to a non-saved entry
- Date: Tue, 12 Feb 2013 12:26:32 +0000 (UTC)
commit e0297a13ebc251692f386a19073acafe14342ee1
Author: Ãlvaro PeÃa <alvaropg gmail com>
Date: Tue Feb 12 13:22:27 2013 +0100
Allow the user to add a tag to a non-saved entry
src/storage-manager.c | 17 ++++++-------
src/widgets/entry-tags-area.c | 54 +++++++++++++++++++----------------------
2 files changed, 33 insertions(+), 38 deletions(-)
---
diff --git a/src/storage-manager.c b/src/storage-manager.c
index d66f187..aa798f8 100644
--- a/src/storage-manager.c
+++ b/src/storage-manager.c
@@ -1337,20 +1337,18 @@ almanah_storage_manager_entry_add_tag (AlmanahStorageManager *self, AlmanahEntry
g_return_val_if_fail (ALMANAH_IS_ENTRY (entry), FALSE);
g_return_val_if_fail (g_utf8_strlen (tag, 1) == 1, FALSE);
- /* This validations are required for DB integrity. Only saved entry
- must have tags */
- almanah_entry_get_last_edited (entry, &entry_last_edited);
- if (g_date_valid (&entry_last_edited) != TRUE) {
- g_debug ("Entry don't saved into the storage");
- return FALSE;
- }
-
almanah_entry_get_date (entry, &entry_date);
if (g_date_valid (&entry_date) != TRUE) {
g_debug ("Invalid entry date");
return FALSE;
}
+ /* Don't duplicate tags */
+ if (almanah_storage_manager_entry_check_tag (self, entry, tag)) {
+ g_debug ("Duplicated tag now allowed");
+ return FALSE;
+ }
+
if ((result_error = sqlite3_prepare_v2 (self->priv->connection,
"INSERT INTO entry_tag (year, month, day, tag) VALUES (?, ?, ?, ?)",
-1, &statement, NULL)) != SQLITE_OK) {
@@ -1361,7 +1359,8 @@ almanah_storage_manager_entry_add_tag (AlmanahStorageManager *self, AlmanahEntry
sqlite3_bind_int (statement, 1, g_date_get_year (&entry_date));
sqlite3_bind_int (statement, 2, g_date_get_month (&entry_date));
sqlite3_bind_int (statement, 3, g_date_get_day (&entry_date));
- sqlite3_bind_text (statement, 4, tag, -1, SQLITE_STATIC); /* @TODO: STATIC or TRANSIENT */
+ /* @TODO: STATIC or TRANSIENT */
+ sqlite3_bind_text (statement, 4, tag, -1, SQLITE_STATIC);
if (sqlite3_step (statement) != SQLITE_DONE) {
sqlite3_finalize (statement);
diff --git a/src/widgets/entry-tags-area.c b/src/widgets/entry-tags-area.c
index b0d8603..875e075 100644
--- a/src/widgets/entry-tags-area.c
+++ b/src/widgets/entry-tags-area.c
@@ -18,9 +18,9 @@
*/
#include "entry-tags-area.h"
+#include "entry.h"
#include "tag.h"
#include "tag-entry.h"
-#include "entry.h"
#include "storage-manager.h"
enum {
@@ -37,19 +37,18 @@ struct _AlmanahEntryTagsAreaPrivate {
AlmanahTagEntry *tag_entry;
};
-static void almanah_entry_tags_area_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
-static void almanah_entry_tags_area_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-static void almanah_entry_tags_area_finalize (GObject *object);
-static void almanah_entry_tags_area_load_tags (AlmanahEntryTagsArea *self);
-static void almanah_entry_tags_area_update (AlmanahEntryTagsArea *self);
-static gint almanah_entry_tags_area_draw (GtkWidget *widget, cairo_t *cr);
-static void almanah_entry_tags_area_add_tag (AlmanahEntryTagsArea *self, const gchar *tag);
+static void almanah_entry_tags_area_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
+static void almanah_entry_tags_area_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
+static void almanah_entry_tags_area_finalize (GObject *object);
+static void almanah_entry_tags_area_load_tags (AlmanahEntryTagsArea *self);
+static void almanah_entry_tags_area_update (AlmanahEntryTagsArea *self);
+static gint almanah_entry_tags_area_draw (GtkWidget *widget, cairo_t *cr);
+static void almanah_entry_tags_area_add_tag (AlmanahEntryTagsArea *self, const gchar *tag);
/* Signals */
-void tag_entry_activate_cb (GtkEntry *entry, AlmanahEntryTagsArea *self);
-void entry_tags_area_remove_foreach_cb (GtkWidget *tag_widget, AlmanahEntryTagsArea *self);
-void storage_manager_entry_tag_added_cb (AlmanahEntry *entry, gchar *tag, AlmanahEntryTagsArea *self);
-static void tag_remove (AlmanahTag *tag_widget, AlmanahEntryTagsArea *self);
+void tag_entry_activate_cb (GtkEntry *entry, AlmanahEntryTagsArea *self);
+void entry_tags_area_remove_foreach_cb (GtkWidget *tag_widget, AlmanahEntryTagsArea *self);
+static void tag_remove (AlmanahTag *tag_widget, AlmanahEntryTagsArea *self);
G_DEFINE_TYPE (AlmanahEntryTagsArea, almanah_entry_tags_area, EGG_TYPE_WRAP_BOX)
@@ -108,6 +107,7 @@ almanah_entry_tags_area_finalize (GObject *object)
g_clear_object (&priv->entry);
g_clear_object (&priv->storage_manager);
+ g_clear_object (&priv->back_widget);
G_OBJECT_CLASS (almanah_entry_tags_area_parent_class)->finalize (object);
}
@@ -189,9 +189,14 @@ almanah_entry_tags_area_draw (GtkWidget *widget, cairo_t *cr)
{
gint width, height;
+ /* All GtkContainer objects don't draw anything, so just draw the background using cairo here */
+
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
+ /* Draw the background with white.
+ * @TODO: use the widget default background color, so this color can be moved to the CSS
+ */
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_rectangle (cr, 0, 0, width, height);
cairo_fill (cr);
@@ -220,12 +225,12 @@ tag_entry_activate_cb (GtkEntry *entry, AlmanahEntryTagsArea *self)
tag = g_strdup (gtk_entry_get_text (entry));
gtk_entry_set_text (entry, "");
- /* Check fist if the tag as already added to the entry */
- if (almanah_storage_manager_entry_check_tag (self->priv->storage_manager, self->priv->entry, tag) == FALSE) {
- if (almanah_storage_manager_entry_add_tag (self->priv->storage_manager, self->priv->entry, tag)) {
- almanah_entry_tags_area_add_tag (self, (const gchar*) tag);
- gtk_widget_grab_focus (self->priv->back_widget);
- }
+ if (almanah_storage_manager_entry_add_tag (self->priv->storage_manager, self->priv->entry, tag)) {
+ /* @TODO: turn this async waiting for the storage signal "tag-added" */
+ almanah_entry_tags_area_add_tag (self, (const gchar*) tag);
+ gtk_widget_grab_focus (self->priv->back_widget);
+ } else {
+ g_debug ("Can't add the tag");
}
g_free (tag);
}
@@ -258,15 +263,6 @@ almanah_entry_tags_area_set_entry (AlmanahEntryTagsArea *entry_tags_area, Almana
g_value_unset (&entry_value);
}
-void
-storage_manager_entry_tag_added_cb (AlmanahEntry *entry, gchar *tag, AlmanahEntryTagsArea *self)
-{
- GtkWidget *tag_widget;
-
- /* TODO: test if the priv->entry == entry */
-
-}
-
static void
tag_remove (AlmanahTag *tag_widget, AlmanahEntryTagsArea *self)
{
@@ -279,7 +275,7 @@ tag_remove (AlmanahTag *tag_widget, AlmanahEntryTagsArea *self)
}
/**
- * TODO: Document
+ * @TODO: Document
*/
void
almanah_entry_tags_area_set_storage_manager (AlmanahEntryTagsArea *entry_tags_area, AlmanahStorageManager *storage_manager)
@@ -295,7 +291,7 @@ almanah_entry_tags_area_set_storage_manager (AlmanahEntryTagsArea *entry_tags_ar
}
/**
- * TODO: Document
+ * @TODO: Document
*/
void
almanah_entry_tags_area_set_back_widget (AlmanahEntryTagsArea *entry_tags_area, GtkWidget *back_widget)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]