diary r74 - in trunk: . src
- From: pwithnall svn gnome org
- To: svn-commits-list gnome org
- Subject: diary r74 - in trunk: . src
- Date: Tue, 26 Aug 2008 01:13:00 +0000 (UTC)
Author: pwithnall
Date: Tue Aug 26 01:13:00 2008
New Revision: 74
URL: http://svn.gnome.org/viewvc/diary?rev=74&view=rev
Log:
2008-08-26 Philip Withnall <philip tecnocode co uk>
* src/main-window.c: (mw_calendar_day_selected_cb):
* src/storage-manager.c: (diary_storage_manager_entry_exists),
(diary_storage_manager_entry_is_editable),
(diary_storage_manager_set_entry):
* src/storage-manager.h: Tidy up handling past and future diary
entries. Past entries can now be edited, but the user is warned
if the
entries are older than a certain age.
* src/printing.c: (print_entry): Fix printing some Pango markup.
Modified:
trunk/ChangeLog
trunk/src/main-window.c
trunk/src/printing.c
trunk/src/storage-manager.c
trunk/src/storage-manager.h
Modified: trunk/src/main-window.c
==============================================================================
--- trunk/src/main-window.c (original)
+++ trunk/src/main-window.c Tue Aug 26 01:13:00 2008
@@ -351,7 +351,7 @@
/* Update the entry */
entry_text = diary_storage_manager_get_entry (diary->storage_manager, year, month, day);
- gtk_text_view_set_editable (diary->entry_view, diary_storage_manager_entry_is_editable (diary->storage_manager, year, month, day));
+ gtk_text_view_set_editable (diary->entry_view, diary_storage_manager_entry_is_editable (diary->storage_manager, year, month, day) != DIARY_ENTRY_FUTURE ? TRUE : FALSE);
gtk_text_buffer_set_modified (diary->entry_buffer, FALSE);
if (entry_text != NULL) {
Modified: trunk/src/printing.c
==============================================================================
--- trunk/src/printing.c (original)
+++ trunk/src/printing.c Tue Aug 26 01:13:00 2008
@@ -78,10 +78,12 @@
pango_layout_set_width (entry_layout, gtk_print_context_get_width (context) * PANGO_SCALE);
pango_layout_set_ellipsize (entry_layout, PANGO_ELLIPSIZE_NONE);
- if (entry == NULL)
+ if (entry == NULL) {
entry = g_strdup_printf ("<i>%s</i>", _("No entry for this date."));
-
- pango_layout_set_text (entry_layout, entry, -1);
+ pango_layout_set_markup (entry_layout, entry, -1);
+ } else {
+ pango_layout_set_text (entry_layout, entry, -1);
+ }
/* Check we're not orphaning things */
entry_line = pango_layout_get_line_readonly (entry_layout, MIN (pango_layout_get_line_count (entry_layout), diary_operation->current_line + MAX_ORPHANS) - 1);
Modified: trunk/src/storage-manager.c
==============================================================================
--- trunk/src/storage-manager.c (original)
+++ trunk/src/storage-manager.c Tue Aug 26 01:13:00 2008
@@ -610,6 +610,21 @@
}
gboolean
+diary_storage_manager_entry_exists (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day)
+{
+ DiaryQueryResults *results;
+ gboolean exists = FALSE;
+
+ results = diary_storage_manager_query (self, "SELECT day FROM entries WHERE year = %u AND month = %u AND day = %u LIMIT 1", year, month, day);
+
+ if (results->rows == 1)
+ exists = TRUE;
+
+ diary_storage_manager_free_results (results);
+ return exists;
+}
+
+DiaryEntryEditable
diary_storage_manager_entry_is_editable (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day)
{
GDate current_date, entry_date;
@@ -618,13 +633,15 @@
g_date_set_time_t (¤t_date, time (NULL));
g_date_set_dmy (&entry_date, day, month, year);
- /* Entries can't be edited before they've happened, or after 14 days after they've happened */
+ /* Entries can't be edited before they've happened */
days_between = g_date_days_between (&entry_date, ¤t_date);
- if (days_between < 0 || days_between > 14)
- return FALSE;
+ if (days_between < 0)
+ return DIARY_ENTRY_FUTURE;
+ else if (days_between > DIARY_ENTRY_CUTOFF_AGE)
+ return DIARY_ENTRY_PAST;
else
- return TRUE;
+ return DIARY_ENTRY_EDITABLE;
}
/* NOTE: Free results with g_free */
@@ -666,12 +683,43 @@
gboolean
diary_storage_manager_set_entry (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day, const gchar *content)
{
- /* Make sure they're editable */
- if (diary_storage_manager_entry_is_editable (self, year, month, day) == FALSE)
+ gboolean entry_exists = diary_storage_manager_entry_exists (self, year, month, day);
+ DiaryEntryEditable editability = diary_storage_manager_entry_is_editable (self, year, month, day);
+
+ /* Make sure they're editable: don't allow entries in the future to be edited,
+ * but allow entries in the past to be added or edited, as long as permission is given.
+ * If an entry is being deleted, permission must be given for that as a priority. */
+ if (editability == DIARY_ENTRY_FUTURE) {
return TRUE;
+ } else if (editability == DIARY_ENTRY_PAST &&
+ content != NULL && content[0] != '\0') {
+ GDate date;
+ gchar date_string[100];
+ GtkWidget *dialog;
+
+ g_date_set_dmy (&date, day, month, year);
+ g_date_strftime (date_string, sizeof (date_string), "%A, %e %B %Y", &date);
- /* Can't nullify entries without permission */
- if (content == NULL || content[0] == '\0') {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (diary->main_window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("Are you sure you want to edit this diary entry for %s?"),
+ date_string);
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+ GTK_STOCK_EDIT, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ gtk_widget_show_all (dialog);
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy (dialog);
+ return FALSE;
+ }
+
+ gtk_widget_destroy (dialog);
+ } else if (entry_exists == TRUE &&
+ (content == NULL || content[0] == '\0')) {
GDate date;
gchar date_string[100];
GtkWidget *dialog;
@@ -700,6 +748,9 @@
gtk_widget_destroy (dialog);
return FALSE;
+ } else if (entry_exists == FALSE &&
+ (content == NULL || content[0] == '\0')) {
+ return FALSE;
}
diary_storage_manager_query_async (self, "REPLACE INTO entries (year, month, day, content) VALUES (%u, %u, %u, '%q')", NULL, NULL, year, month, day, content);
Modified: trunk/src/storage-manager.h
==============================================================================
--- trunk/src/storage-manager.h (original)
+++ trunk/src/storage-manager.h Tue Aug 26 01:13:00 2008
@@ -55,6 +55,15 @@
DIARY_STORAGE_MANAGER_ERROR_GETTING_KEY
} DiaryStorageManagerError;
+typedef enum {
+ DIARY_ENTRY_EDITABLE = 1,
+ DIARY_ENTRY_FUTURE = 2,
+ DIARY_ENTRY_PAST = 0
+} DiaryEntryEditable;
+
+/* The number of days after which a diary entry requires confirmation to be edited */
+#define DIARY_ENTRY_CUTOFF_AGE 14
+
typedef gint (*DiaryQueryCallback) (gpointer user_data, gint columns, gchar **data, gchar **column_names);
typedef struct {
@@ -77,7 +86,8 @@
/* TODO: Surely just passing in GDates to these functions would be easier? */
gboolean diary_storage_manager_get_statistics (DiaryStorageManager *self, guint *entry_count, guint *link_count, guint *character_count);
-gboolean diary_storage_manager_entry_is_editable (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day);
+gboolean diary_storage_manager_entry_exists (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day);
+DiaryEntryEditable diary_storage_manager_entry_is_editable (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day);
gchar *diary_storage_manager_get_entry (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day);
gboolean diary_storage_manager_set_entry (DiaryStorageManager *self, GDateYear year, GDateMonth month, GDateDay day, const gchar *content);
guint diary_storage_manager_search_entries (DiaryStorageManager *self, const gchar *search_string, GDate *matches[]);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]