diff options
Diffstat (limited to 'libnautilus-private/nautilus-search-bar-criterion.c')
-rw-r--r-- | libnautilus-private/nautilus-search-bar-criterion.c | 91 |
1 files changed, 65 insertions, 26 deletions
diff --git a/libnautilus-private/nautilus-search-bar-criterion.c b/libnautilus-private/nautilus-search-bar-criterion.c index 315e3a842..89b2276c3 100644 --- a/libnautilus-private/nautilus-search-bar-criterion.c +++ b/libnautilus-private/nautilus-search-bar-criterion.c @@ -24,12 +24,14 @@ Author: Rebecca Schulman <rebecka@eazel.com> */ +#include "nautilus-dateedit-extensions.h" #include "nautilus-gtk-macros.h" #include "nautilus-search-bar-criterion.h" #include "nautilus-search-bar-criterion-private.h" #include <stdio.h> #include <stdlib.h> +#include <time.h> #include <gtk/gtksignal.h> #include <gtk/gtkentry.h> @@ -41,6 +43,7 @@ #include <libgnome/gnome-i18n.h> #include <libgnomevfs/gnome-vfs-utils.h> +#include <libgnomeui/gnome-dateedit.h> #include <libgnomeui/gnome-uidefs.h> static char * criteria_titles [] = { @@ -118,17 +121,19 @@ static char *emblem_objects [] = { }; static char *modified_relations [] = { - N_("after"), - N_("before"), + N_("is"), + N_("is not"), + N_("is after"), + N_("is before"), + N_("--"), + N_("is today"), + N_("is yesterday"), + N_("--"), + N_("is within a week of"), + N_("is within a month of"), NULL }; -static char *modified_objects [] = { - N_("today"), - N_("this week"), - N_("this month"), - NULL -}; static char *owner_relations [] = { N_("is"), @@ -159,7 +164,7 @@ static char * get_size_location_for static char * get_emblem_location_for (int relation_number, int value_number); static char * get_date_modified_location_for (int relation_number, - int value_number); + char *date); static char * get_owner_location_for (int relation_number, char *owner_number); @@ -292,6 +297,11 @@ nautilus_search_bar_criterion_new_from_values (NautilusSearchBarCriterionType ty criterion->details->value_suffix = GTK_LABEL (gtk_label_new (value_suffix)); gtk_widget_show_all (GTK_WIDGET (criterion->details->value_suffix)); } + /* Special case widgets here */ + if (criterion->details->type == NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION) { + criterion->details->date = GNOME_DATE_EDIT (gnome_date_edit_new (time (NULL), FALSE, FALSE)); + gtk_widget_show_all (GTK_WIDGET (criterion->details->date)); + } return criterion; } @@ -363,8 +373,8 @@ nautilus_search_bar_criterion_next_new (NautilusSearchBarCriterionType criterion new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION, modified_relations, FALSE, - TRUE, - modified_objects, + FALSE, + NULL, FALSE, NULL); break; @@ -428,14 +438,17 @@ nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterio menu_item = gtk_menu_get_active (GTK_MENU (menu)); value_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type")); } - else { + else if (criterion->details->use_value_entry) { value_text = gtk_entry_get_text (GTK_ENTRY (criterion->details->value_entry)); } + else if (criterion->details->type == NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION) { + value_text = nautilus_gnome_date_edit_get_date_as_string (criterion->details->date); + } switch (name_number) { case NAUTILUS_FILE_NAME_SEARCH_CRITERION: return get_name_location_for (relation_number, - value_text); + value_text); case NAUTILUS_CONTENT_SEARCH_CRITERION: return get_content_location_for (relation_number, value_text); @@ -450,7 +463,7 @@ nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterio value_number); case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION: return get_date_modified_location_for (relation_number, - value_number); + value_text); case NAUTILUS_OWNER_SEARCH_CRITERION: return get_owner_location_for (relation_number, value_text); @@ -458,7 +471,9 @@ nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterio g_assert_not_reached (); return NULL; } - return g_strdup ("file_name contains evolution "); + + g_assert_not_reached (); + return NULL; } @@ -630,19 +645,43 @@ get_emblem_location_for (int relation_number, static char * get_date_modified_location_for (int relation_number, - int value_number) + char *date_string) { - const char *possible_relations[] = { "updated", "not_updated" }; - const char *possible_values[] = { "today", "this_week", "this_month" }; - - g_assert (relation_number == 0 || relation_number == 1); - g_assert (value_number >= 0); - g_assert (value_number < 3); - - return g_strdup_printf ("%s %s %s", NAUTILUS_SEARCH_URI_TEXT_DATE_MODIFIED, - possible_relations[relation_number], - possible_values[value_number]); + const char *possible_relations[] = { "is", + "is_not", + "is_after", + "is_before", + "--", + "is today", + "is yesterday", + "--", + "is_within_a_week_of", + "is_within_a_month_of" }; + char *result; + g_assert (relation_number >= 0); + g_assert (relation_number < 10); + g_return_val_if_fail (relation_number != 4 && relation_number != 7, g_strdup ("")); + + /* Handle "is today" and "is yesterday" separately */ + if (relation_number == 5) { + result = g_strdup_printf ("%s is today", NAUTILUS_SEARCH_URI_TEXT_DATE_MODIFIED); + } + if (relation_number == 6) { + result = g_strdup_printf ("%s is yesterday", NAUTILUS_SEARCH_URI_TEXT_DATE_MODIFIED); + } + if (relation_number != 5 && relation_number != 6) { + if (date_string == NULL) { + return g_strdup (""); + } + else { + result = g_strdup_printf ("%s %s %s", NAUTILUS_SEARCH_URI_TEXT_DATE_MODIFIED, + possible_relations[relation_number], + date_string); + } + } + return result; + } static char * |