summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRebecca Schulman <rebecka@eazel.com>2000-08-03 02:30:44 +0000
committerRebecca Schulman <rebecka@src.gnome.org>2000-08-03 02:30:44 +0000
commit0c8b5b0506149d6dd2135f7094a4ef15c4cc39be (patch)
treec2e98181396fc7766a03b52368177fe67e3f9565
parent4d0d674ddf55b74a41a48a40b9602634cf70e957 (diff)
downloadnautilus-0c8b5b0506149d6dd2135f7094a4ef15c4cc39be.tar.gz
Completed bug 1433, the interface to search by file name and attribute.
2000-08-02 Rebecca Schulman <rebecka@eazel.com> Completed bug 1433, the interface to search by file name and attribute. * libnautilus-extensions/nautilus-search-uri.c: * libnautilus-extensions/nautilus-search-uri.h: * libnautilus-extensions/Makefile.am: removed the search uri files and placed their functionality in the appropriate search bar classes. * libnautilus-extensions/nautilus-search-bar-criterion-private.h: * libnautilus-extensions/nautilus-search-bar-criterion.h: * libnautilus-extensions/nautilus-search-bar-criterion.c: (nautilus_search_bar_criterion_new_from_values), (nautilus_search_bar_criterion_next_new), (nautilus_search_bar_criterion_get_location), (get_next_default_search_criterion_type), (nautilus_search_bar_criterion_show), (nautilus_search_bar_criterion_hide), (get_name_location_for), (get_content_location_for), (get_file_type_location_for), (get_size_location_for), (get_emblem_location_for), (get_date_modified_location_for), (get_owner_location_for): added ability to turn the criteria state into a text explanation for the search uri. It is slightly circuitous, because search uris are not internationalized. * libnautilus-extensions/nautilus-string.c: * libnautilus-extensions/nautilus-string.h: (nautilus_str_strip_trailing_str), (nautilus_self_check_string): added new string function used by the search bar criterion code, to strip a string off the end of an existing string. * src/nautilus-complex-search-bar.c: (nautilus_complex_search_bar_initialize), (nautilus_complex_search_bar_get_location), (attach_criterion_to_search_bar), (unattach_criterion_from_search_bar), (load_find_them_pixmap_widget), (fewer_options_callback): tweaks to make sizing an spacing on the bar better, and added search pixmap to the find button. Moved the find them button here from the switchable search bar class for appearance reasons. * src/nautilus-simple-search-bar.c: (nautilus_simple_search_bar_initialize), (nautilus_simple_search_bar_set_location), (nautilus_simple_search_bar_get_location), (nautilus_search_uri_to_simple_search_criteria), (nautilus_simple_search_criteria_to_search_uri): moved search uri functionality and find them button into the simple search bar class for apprearance reasons. * src/nautilus-switchable-search-bar.c: * src/nautilus-switchable-search-bar.h: (nautilus_switchable_search_bar_initialize_class), (nautilus_switchable_search_bar_initialize), (nautilus_switchable_search_bar_set_mode), (nautilus_search_uri_to_search_bar_mode), (nautilus_search_uri_is_displayable_by_mode), (other_search_mode): moved the find them button out of this class.
-rw-r--r--ChangeLog63
-rw-r--r--libnautilus-extensions/Makefile.am2
-rw-r--r--libnautilus-extensions/nautilus-search-bar-criterion-private.h5
-rw-r--r--libnautilus-extensions/nautilus-search-bar-criterion.c222
-rw-r--r--libnautilus-extensions/nautilus-search-bar-criterion.h1
-rw-r--r--libnautilus-extensions/nautilus-search-uri.c122
-rw-r--r--libnautilus-extensions/nautilus-search-uri.h37
-rw-r--r--libnautilus-extensions/nautilus-string.c25
-rw-r--r--libnautilus-extensions/nautilus-string.h2
-rw-r--r--libnautilus-private/Makefile.am2
-rw-r--r--libnautilus-private/nautilus-search-bar-criterion-private.h5
-rw-r--r--libnautilus-private/nautilus-search-bar-criterion.c222
-rw-r--r--libnautilus-private/nautilus-search-bar-criterion.h1
-rw-r--r--libnautilus-private/nautilus-search-uri.c122
-rw-r--r--libnautilus-private/nautilus-search-uri.h37
-rw-r--r--libnautilus-private/nautilus-string.c25
-rw-r--r--libnautilus-private/nautilus-string.h2
-rw-r--r--src/nautilus-complex-search-bar.c130
-rw-r--r--src/nautilus-simple-search-bar.c81
-rw-r--r--src/nautilus-switchable-search-bar.c123
-rw-r--r--src/nautilus-switchable-search-bar.h2
21 files changed, 707 insertions, 524 deletions
diff --git a/ChangeLog b/ChangeLog
index 2778e82d5..2bb0c6dea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,66 @@
+2000-08-02 Rebecca Schulman <rebecka@eazel.com>
+ Completed bug 1433, the interface to search by file
+ name and attribute.
+
+ * libnautilus-extensions/nautilus-search-uri.c:
+ * libnautilus-extensions/nautilus-search-uri.h:
+ * libnautilus-extensions/Makefile.am:
+ removed the search uri files and placed their functionality
+ in the appropriate search bar classes.
+
+ * libnautilus-extensions/nautilus-search-bar-criterion-private.h:
+ * libnautilus-extensions/nautilus-search-bar-criterion.h:
+ * libnautilus-extensions/nautilus-search-bar-criterion.c:
+ (nautilus_search_bar_criterion_new_from_values),
+ (nautilus_search_bar_criterion_next_new),
+ (nautilus_search_bar_criterion_get_location),
+ (get_next_default_search_criterion_type),
+ (nautilus_search_bar_criterion_show),
+ (nautilus_search_bar_criterion_hide), (get_name_location_for),
+ (get_content_location_for), (get_file_type_location_for),
+ (get_size_location_for), (get_emblem_location_for),
+ (get_date_modified_location_for), (get_owner_location_for):
+ added ability to turn the criteria state into a text
+ explanation for the search uri. It is slightly circuitous,
+ because search uris are not internationalized.
+
+
+ * libnautilus-extensions/nautilus-string.c:
+ * libnautilus-extensions/nautilus-string.h:
+ (nautilus_str_strip_trailing_str), (nautilus_self_check_string):
+ added new string function used by the search bar criterion code,
+ to strip a string off the end of an existing string.
+
+ * src/nautilus-complex-search-bar.c:
+ (nautilus_complex_search_bar_initialize),
+ (nautilus_complex_search_bar_get_location),
+ (attach_criterion_to_search_bar),
+ (unattach_criterion_from_search_bar),
+ (load_find_them_pixmap_widget), (fewer_options_callback):
+ tweaks to make sizing an spacing on the bar better, and
+ added search pixmap to the find button. Moved the find
+ them button here from the switchable search bar
+ class for appearance reasons.
+
+ * src/nautilus-simple-search-bar.c:
+ (nautilus_simple_search_bar_initialize),
+ (nautilus_simple_search_bar_set_location),
+ (nautilus_simple_search_bar_get_location),
+ (nautilus_search_uri_to_simple_search_criteria),
+ (nautilus_simple_search_criteria_to_search_uri):
+ moved search uri functionality and
+ find them button into the simple search bar class for
+ apprearance reasons.
+
+ * src/nautilus-switchable-search-bar.c:
+ * src/nautilus-switchable-search-bar.h:
+ (nautilus_switchable_search_bar_initialize_class),
+ (nautilus_switchable_search_bar_initialize),
+ (nautilus_switchable_search_bar_set_mode),
+ (nautilus_search_uri_to_search_bar_mode),
+ (nautilus_search_uri_is_displayable_by_mode), (other_search_mode):
+ moved the find them button out of this class.
+
2000-08-02 Darin Adler <darin@eazel.com>
Finished task 222 "Don't look for metafile for some URIs for
diff --git a/libnautilus-extensions/Makefile.am b/libnautilus-extensions/Makefile.am
index d2843e72f..d196dc2b3 100644
--- a/libnautilus-extensions/Makefile.am
+++ b/libnautilus-extensions/Makefile.am
@@ -90,7 +90,6 @@ libnautilus_extensions_la_SOURCES = \
nautilus-program-choosing.c \
nautilus-radio-button-group.c \
nautilus-search-bar-criterion.c \
- nautilus-search-uri.c \
nautilus-self-checks.c \
nautilus-stock-dialogs.c \
nautilus-string-list.c \
@@ -167,7 +166,6 @@ noinst_HEADERS = \
nautilus-program-choosing.h \
nautilus-radio-button-group.h \
nautilus-search-bar-criterion.h \
- nautilus-search-uri.h \
nautilus-self-checks.h \
nautilus-stock-dialogs.h \
nautilus-string-list.h \
diff --git a/libnautilus-extensions/nautilus-search-bar-criterion-private.h b/libnautilus-extensions/nautilus-search-bar-criterion-private.h
index e243246d9..4de522d7c 100644
--- a/libnautilus-extensions/nautilus-search-bar-criterion-private.h
+++ b/libnautilus-extensions/nautilus-search-bar-criterion-private.h
@@ -24,12 +24,13 @@
Author: Rebecca Schulman <rebecka@eazel.com>
*/
+
struct NautilusSearchBarCriterionDetails {
NautilusSearchBarCriterionType type;
/* various widgets hold by the criterion */
- GtkOptionMenu *available_option_menu;
- GtkOptionMenu *operator_menu;
+ GtkOptionMenu *available_criteria;
+ GtkOptionMenu *relation_menu;
gboolean use_value_entry;
GtkEntry *value_entry;
gboolean use_value_menu;
diff --git a/libnautilus-extensions/nautilus-search-bar-criterion.c b/libnautilus-extensions/nautilus-search-bar-criterion.c
index 3c987ab46..80f2aaa11 100644
--- a/libnautilus-extensions/nautilus-search-bar-criterion.c
+++ b/libnautilus-extensions/nautilus-search-bar-criterion.c
@@ -44,7 +44,6 @@ static char * criteria_titles [] = {
N_("Type"),
N_("Stored"),
N_("Size"),
- N_("With Note"),
N_("With Emblem"),
N_("Last Modified"),
N_("Owned By"),
@@ -74,7 +73,7 @@ static char *type_relations [] = {
NULL
};
-static char *type_options [] = {
+static char *type_objects [] = {
N_("regular file"),
N_("text file"),
N_("application"),
@@ -88,7 +87,7 @@ static char *location_relations [] = {
NULL
};
-static char *location_options [] = {
+static char *location_objects [] = {
N_("on this computer"),
N_("in my vault"),
NULL
@@ -100,7 +99,7 @@ static char *size_relations [] = {
NULL
};
-static char *size_options [] = {
+static char *size_objects [] = {
N_("1 KB"),
N_("10 KB"),
N_("100 KB"),
@@ -111,11 +110,6 @@ static char *size_options [] = {
};
-static char *notes_relations [] = {
- N_("including"),
- N_("not including"),
- NULL
-};
static char *emblem_relations [] = {
N_("marked with"),
@@ -123,7 +117,7 @@ static char *emblem_relations [] = {
NULL
};
-static char *emblem_options [] = {
+static char *emblem_objects [] = {
/* FIXME: add emblem possibilities here.
likely to be icon filenames
*/
@@ -136,7 +130,7 @@ static char *modified_relations [] = {
NULL
};
-static char *modified_options [] = {
+static char *modified_objects [] = {
N_("today"),
N_("this week"),
N_("this month"),
@@ -159,6 +153,22 @@ static NautilusSearchBarCriterion * nautilus_search_bar_criterion_new_from_value
NautilusSearchBarCriterionType get_next_default_search_criterion_type (NautilusSearchBarCriterionType type) ;
+static char * get_name_location_for (int relation_number,
+ char *name_text);
+static char * get_content_location_for (int relation_number,
+ char *name_text);
+static char * get_file_type_location_for (int relation_number,
+ int value_number);
+static char * get_size_location_for (int relation_number,
+ char *size_text);
+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);
+static char * get_owner_location_for (int relation_number,
+ char *owner_number);
+
+
void
nautilus_search_bar_criterion_destroy (NautilusSearchBarCriterion *criterion)
@@ -174,8 +184,6 @@ nautilus_search_bar_criterion_new (void)
return g_new0 (NautilusSearchBarCriterion, 1);
}
-static void
-option_menu_callback (GtkWidget *widget, gpointer data);
static void
option_menu_callback (GtkWidget *widget, gpointer data)
@@ -207,14 +215,14 @@ nautilus_search_bar_criterion_set_callback (NautilusSearchBarCriterion *crit
static NautilusSearchBarCriterion *
nautilus_search_bar_criterion_new_from_values (NautilusSearchBarCriterionType type,
- char *operator_options[],
+ char *relation_options[],
gboolean use_value_entry,
gboolean use_value_menu,
char *value_options[])
{
NautilusSearchBarCriterion *criterion;
GtkWidget *search_criteria_option_menu, *search_criteria_menu;
- GtkWidget *operator_option_menu, *operator_menu;
+ GtkWidget *relation_option_menu, *relation_menu;
GtkWidget *value_option_menu, *value_menu;
int i;
@@ -239,24 +247,24 @@ nautilus_search_bar_criterion_new_from_values (NautilusSearchBarCriterionType ty
gtk_menu_set_active (GTK_MENU (search_criteria_menu), type);
gtk_option_menu_set_menu (GTK_OPTION_MENU (search_criteria_option_menu),
search_criteria_menu);
- criterion->details->available_option_menu = GTK_OPTION_MENU (search_criteria_option_menu);
+ criterion->details->available_criteria = GTK_OPTION_MENU (search_criteria_option_menu);
gtk_widget_show_all (GTK_WIDGET(search_criteria_option_menu));
- operator_option_menu = gtk_option_menu_new ();
- operator_menu = gtk_menu_new ();
- for (i = 0; operator_options[i] != NULL; i++) {
+ relation_option_menu = gtk_option_menu_new ();
+ relation_menu = gtk_menu_new ();
+ for (i = 0; relation_options[i] != NULL; i++) {
GtkWidget *item;
- item = gtk_menu_item_new_with_label (_(operator_options[i]));
+ item = gtk_menu_item_new_with_label (_(relation_options[i]));
gtk_object_set_data (GTK_OBJECT(item), "type", GINT_TO_POINTER(i));
- gtk_menu_append (GTK_MENU (operator_menu),
+ gtk_menu_append (GTK_MENU (relation_menu),
item);
}
- gtk_option_menu_set_menu (GTK_OPTION_MENU (operator_option_menu),
- operator_menu);
- criterion->details->operator_menu = GTK_OPTION_MENU (operator_option_menu);
- gtk_widget_show_all (GTK_WIDGET(operator_option_menu));
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (relation_option_menu),
+ relation_menu);
+ criterion->details->relation_menu = GTK_OPTION_MENU (relation_option_menu);
+ gtk_widget_show_all (GTK_WIDGET(relation_option_menu));
@@ -316,42 +324,35 @@ nautilus_search_bar_criterion_next_new (NautilusSearchBarCriterionType criterion
type_relations,
FALSE,
TRUE,
- type_options);
+ type_objects);
break;
case NAUTILUS_LOCATION_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_LOCATION_SEARCH_CRITERION,
location_relations,
FALSE,
TRUE,
- location_options);
+ location_objects);
break;
case NAUTILUS_SIZE_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_SIZE_SEARCH_CRITERION,
size_relations,
FALSE,
TRUE,
- size_options);
- break;
- case NAUTILUS_NOTES_SEARCH_CRITERION:
- new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_NOTES_SEARCH_CRITERION,
- notes_relations,
- TRUE,
- FALSE,
- NULL);
+ size_objects);
break;
case NAUTILUS_EMBLEM_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_EMBLEM_SEARCH_CRITERION,
emblem_relations,
FALSE,
TRUE,
- emblem_options);
+ emblem_objects);
break;
case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION,
modified_relations,
FALSE,
TRUE,
- modified_options);
+ modified_objects);
break;
case NAUTILUS_OWNER_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_OWNER_SEARCH_CRITERION,
@@ -382,6 +383,11 @@ nautilus_search_bar_criterion_first_new (void)
char *
nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterion)
{
+ GtkWidget *menu;
+ GtkWidget *menu_item;
+ int name_number, relation_number, value_number;
+ char *value_text;
+
/* There is ONE thing you should be aware of while implementing this function.
You have to make sure you use non-translated strings for building the uri.
So, to implement this, you are supposed to:
@@ -391,8 +397,49 @@ nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterio
menu_item = gtk_menu_get_active (optin_menu)
number = gtk_object_get_data (menu_item, "type")
*/
+ menu = gtk_option_menu_get_menu (criterion->details->available_criteria);
+ menu_item = gtk_menu_get_active (GTK_MENU (menu));
+ name_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type"));
+ menu = gtk_option_menu_get_menu (criterion->details->relation_menu);
+ menu_item = gtk_menu_get_active (GTK_MENU (menu));
+ relation_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type"));
+ if (criterion->details->use_value_menu) {
+ menu = gtk_option_menu_get_menu (criterion->details->value_menu);
+ menu_item = gtk_menu_get_active (GTK_MENU (menu));
+ value_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type"));
+ }
+ else {
+ value_text = gtk_entry_get_text (GTK_ENTRY (criterion->details->value_entry));
+ }
+
+ switch (name_number) {
+ case NAUTILUS_FILE_NAME_SEARCH_CRITERION:
+ return get_name_location_for (relation_number,
+ value_text);
+ case NAUTILUS_CONTENT_SEARCH_CRITERION:
+ return get_content_location_for (relation_number,
+ value_text);
+ case NAUTILUS_FILE_TYPE_SEARCH_CRITERION:
+ return get_file_type_location_for (relation_number,
+ value_number);
+ case NAUTILUS_SIZE_SEARCH_CRITERION:
+ return get_size_location_for (relation_number,
+ value_text);
+ case NAUTILUS_EMBLEM_SEARCH_CRITERION:
+ return get_emblem_location_for (relation_number,
+ value_number);
+ case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION:
+ return get_date_modified_location_for (relation_number,
+ value_number);
+ case NAUTILUS_OWNER_SEARCH_CRITERION:
+ return get_owner_location_for (relation_number,
+ value_text);
+ default:
+ g_assert_not_reached ();
+ return NULL;
+ }
return g_strdup ("file_name contains evolution ");
}
@@ -410,9 +457,7 @@ get_next_default_search_criterion_type (NautilusSearchBarCriterionType type)
case NAUTILUS_LOCATION_SEARCH_CRITERION:
return NAUTILUS_SIZE_SEARCH_CRITERION;
case NAUTILUS_SIZE_SEARCH_CRITERION:
- return NAUTILUS_NOTES_SEARCH_CRITERION;
- case NAUTILUS_NOTES_SEARCH_CRITERION:
- return NAUTILUS_EMBLEM_SEARCH_CRITERION;
+ return NAUTILUS_SIZE_SEARCH_CRITERION;
case NAUTILUS_EMBLEM_SEARCH_CRITERION:
return NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION;
case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION:
@@ -430,8 +475,8 @@ void
nautilus_search_bar_criterion_show (NautilusSearchBarCriterion *criterion)
{
- gtk_widget_show (GTK_WIDGET (criterion->details->available_option_menu));
- gtk_widget_show (GTK_WIDGET (criterion->details->operator_menu));
+ gtk_widget_show (GTK_WIDGET (criterion->details->available_criteria));
+ gtk_widget_show (GTK_WIDGET (criterion->details->relation_menu));
if (criterion->details->use_value_entry) {
gtk_widget_show (GTK_WIDGET (criterion->details->value_entry));
@@ -447,8 +492,8 @@ void
nautilus_search_bar_criterion_hide (NautilusSearchBarCriterion *criterion)
{
- gtk_widget_hide (GTK_WIDGET (criterion->details->available_option_menu));
- gtk_widget_hide (GTK_WIDGET (criterion->details->operator_menu));
+ gtk_widget_hide (GTK_WIDGET (criterion->details->available_criteria));
+ gtk_widget_hide (GTK_WIDGET (criterion->details->relation_menu));
if (criterion->details->use_value_entry) {
gtk_widget_hide (GTK_WIDGET (criterion->details->value_entry));
@@ -458,6 +503,95 @@ nautilus_search_bar_criterion_hide (NautilusSearchBarCriterion *criterion)
}
}
+static char *
+get_name_location_for (int relation_number, char *name_text)
+{
+ const char *possible_relations[] = { "contains",
+ "starts_with",
+ "ends_with",
+ "matches_glob",
+ "matches_regexp" };
+
+ g_assert (relation_number >= 0);
+ g_assert (relation_number < 5);
+
+ return g_strdup_printf ("file_name %s %s", possible_relations[relation_number],
+ name_text);
+
+}
+
+static char *
+get_content_location_for (int relation_number, char *name_text)
+{
+ const char *possible_relations[] = { "includes",
+ "does_not_include" };
+
+ g_assert (relation_number == 0 || relation_number == 1);
+
+ return g_strdup_printf ("content %s %s", possible_relations[relation_number],
+ name_text);
+}
+
+static char *
+get_file_type_location_for (int relation_number,
+ int value_number)
+{
+ const char *possible_relations[] = { "is", "is_not" };
+ const char *possible_values[] = {"file", "text_file", "application", "directory", "music" };
+
+ g_assert (relation_number == 0 || relation_number == 1);
+ g_assert (value_number >= 0);
+ g_assert (value_number < 5);
+ return g_strdup_printf ("file_type %s %s", possible_relations[relation_number],
+ possible_values[value_number]);
+}
+
+
+static char *
+get_size_location_for (int relation_number,
+ char *size_text)
+{
+ const char *possible_relations[] = { "larger_than", "smaller_than" };
+
+ g_assert (relation_number == 0 || relation_number == 1);
+ /* FIXME: Need checks for appropriate size here */
+ return g_strdup_printf ("size %s %s", possible_relations[relation_number], size_text);
+
+}
+
+static char *
+get_emblem_location_for (int relation_number,
+ int value_number)
+{
+ /* FIXME */
+ return g_strdup ("");
+}
+
+static char *
+get_date_modified_location_for (int relation_number,
+ int value_number)
+{
+ 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 ("mod_time %s %s", possible_relations[relation_number],
+ possible_values[value_number]);
+
+}
+
+static char *
+get_owner_location_for (int relation_number,
+ char *owner_text)
+{
+ const char *possible_relations[] = { "is", "is not" };
+ g_assert (relation_number == 0 || relation_number == 1);
+ return g_strdup_printf ("owner %s %s", possible_relations[relation_number], owner_text);
+
+}
diff --git a/libnautilus-extensions/nautilus-search-bar-criterion.h b/libnautilus-extensions/nautilus-search-bar-criterion.h
index 1bcbcb7f6..f415e7919 100644
--- a/libnautilus-extensions/nautilus-search-bar-criterion.h
+++ b/libnautilus-extensions/nautilus-search-bar-criterion.h
@@ -37,7 +37,6 @@ typedef enum {
NAUTILUS_FILE_TYPE_SEARCH_CRITERION,
NAUTILUS_LOCATION_SEARCH_CRITERION,
NAUTILUS_SIZE_SEARCH_CRITERION,
- NAUTILUS_NOTES_SEARCH_CRITERION,
NAUTILUS_EMBLEM_SEARCH_CRITERION,
NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION,
NAUTILUS_OWNER_SEARCH_CRITERION,
diff --git a/libnautilus-extensions/nautilus-search-uri.c b/libnautilus-extensions/nautilus-search-uri.c
deleted file mode 100644
index b3660c360..000000000
--- a/libnautilus-extensions/nautilus-search-uri.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* nautilus-search-uri.c -- tools for creating
- and parsing search uris
-
- Copyright (C) 2000 Eazel, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with this program; see the file COPYING. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Author: Rebecca Schulman <rebecka@eazel.com>
-*/
-
-#include <string.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include "nautilus-search-uri.h"
-
-static NautilusSearchBarMode other_search_mode (NautilusSearchBarMode mode);
-
-char *
-nautilus_search_uri_to_simple_search_criteria (const char *uri)
-{
- /* FIXME: Not yet implemented. */
- return g_strdup ("");
-}
-
-char *
-nautilus_simple_search_criteria_to_search_uri (const char *search_criteria)
-{
- char **words;
- char *search_uri;
- char *fragment;
- char *escaped_fragment;
- int length, i;
-
- g_return_val_if_fail (search_criteria != NULL, NULL);
-
- words = g_new0 (char *, strlen (search_criteria));
- words = g_strsplit (search_criteria, " ", strlen (search_criteria));
- /* FIXME: this should eventually be: length = strlen ("[file%3A%2F%2F%2F]"); */
- length = strlen ("[file:///]");
- /* Count total length */
- for (i = 0; words[i] != NULL; i++) {
- length += strlen (words[i]) + strlen ("file_name contains & ");
- }
- fragment = g_new0 (char, length);
- /* FIXME: this should eventually be: sprintf (fragment, "[file%%3A%%2F%%2F%%2F]"); */
- sprintf (fragment, "[file:///]");
- if (words[0] != NULL) {
- for (i = 0; words[i+1] != NULL; i++) {
- strcat (fragment, "file_name contains ");
- strcat (fragment, words[i]);
- strcat (fragment, " & ");
- }
- strcat (fragment, "file_name contains ");
- strcat (fragment, words[i]);
- }
- escaped_fragment = gnome_vfs_escape_string (fragment);
- g_free (fragment);
- search_uri = g_strconcat ("search:", escaped_fragment, NULL);
- g_free (escaped_fragment);
-#ifdef SEARCH_URI_DEBUG
- printf ("Made uri %s from simple search criteria %s\n",
- search_uri, search_criteria);
-#endif
- return search_uri;
-}
-
-
-NautilusSearchBarMode
-nautilus_search_uri_to_search_bar_mode (const char *uri)
-{
- NautilusSearchBarMode preferred_mode;
-
- preferred_mode = nautilus_preferences_get_enum (NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
- NAUTILUS_SIMPLE_SEARCH_BAR);
- if (nautilus_search_uri_is_displayable_by_mode (uri, preferred_mode)) {
- return preferred_mode;
- }
- else {
- return (other_search_mode (preferred_mode));
- }
-}
-
-
-
-gboolean
-nautilus_search_uri_is_displayable_by_mode (const char *uri,
- NautilusSearchBarMode mode)
-{
- /* FIXME */
- return TRUE;
-}
-
-
-static NautilusSearchBarMode
-other_search_mode (NautilusSearchBarMode mode)
-{
- switch (mode) {
- case NAUTILUS_SIMPLE_SEARCH_BAR:
- return NAUTILUS_COMPLEX_SEARCH_BAR;
- break;
- case NAUTILUS_COMPLEX_SEARCH_BAR:
- return NAUTILUS_SIMPLE_SEARCH_BAR;
- break;
- default:
- g_assert_not_reached ();
- }
- return NAUTILUS_COMPLEX_SEARCH_BAR;
-}
diff --git a/libnautilus-extensions/nautilus-search-uri.h b/libnautilus-extensions/nautilus-search-uri.h
deleted file mode 100644
index 3f1ee58ca..000000000
--- a/libnautilus-extensions/nautilus-search-uri.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* nautilus-search-uri.c -- tools for creating
- and parsing search uris
-
- Copyright (C) 2000 Eazel, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with this program; see the file COPYING. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Author: Rebecca Schulman <rebecka@eazel.com>
-*/
-
-#include "nautilus-global-preferences.h"
-#include "nautilus-search-bar-criterion.h"
-
-
-char * nautilus_search_uri_to_simple_search_criteria (const char *location);
-char * nautilus_simple_search_criteria_to_search_uri (const char *search_criteria);
-
-/* Translate a search criterion from the complex search bar into a search uri criterion */
-char * nautilus_search_uri_generate_criterion_from_widgets (NautilusSearchBarCriterion *criterion);
-NautilusSearchBarMode nautilus_search_uri_to_search_bar_mode (const char *uri);
-gboolean nautilus_search_uri_is_displayable_by_mode (const char *uri,
- NautilusSearchBarMode mode);
diff --git a/libnautilus-extensions/nautilus-string.c b/libnautilus-extensions/nautilus-string.c
index ec10075f1..6081289ab 100644
--- a/libnautilus-extensions/nautilus-string.c
+++ b/libnautilus-extensions/nautilus-string.c
@@ -348,6 +348,26 @@ nautilus_str_strip_trailing_chr (const char *source, char remove_this)
return g_strndup (source, end - source);
}
+char *
+nautilus_str_strip_trailing_str (const char *source, const char *remove_this)
+{
+ const char *end;
+ if (source == NULL) {
+ return NULL;
+ }
+ if (remove_this == NULL) {
+ return g_strdup (source);
+ }
+ end = source + strlen (source);
+ if (strcmp (end - strlen (remove_this), remove_this) != 0) {
+ return g_strdup (source);
+ }
+ else {
+ return g_strndup (source, strlen (source) - strlen(remove_this));
+ }
+
+}
+
gboolean
nautilus_eat_str_to_int (char *source, int *integer)
{
@@ -561,6 +581,11 @@ nautilus_self_check_string (void)
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_chr ("foo_", '_'), "foo");
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_chr ("_foo__", '_'), "_foo");
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_chr ("_f_o__o_", '_'), "_f_o__o");
+
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str (NULL, "bar"), NULL);
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str ("foo", "bar"), "foo");
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str ("foo bar", "bar"), "foo ");
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str ("bar", "bar"), "bar");
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_double_underscores (NULL), NULL);
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_double_underscores (""), "");
diff --git a/libnautilus-extensions/nautilus-string.h b/libnautilus-extensions/nautilus-string.h
index 18a15818c..72926e6cc 100644
--- a/libnautilus-extensions/nautilus-string.h
+++ b/libnautilus-extensions/nautilus-string.h
@@ -70,6 +70,8 @@ char * nautilus_str_strip_chr (const char *string,
char remove_this);
char * nautilus_str_strip_trailing_chr (const char *string,
char remove_this);
+char * nautilus_str_strip_trailing_str (const char *string,
+ const char *remove_this);
/* Conversions to and from strings. */
gboolean nautilus_str_to_int (const char *string,
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index d2843e72f..d196dc2b3 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -90,7 +90,6 @@ libnautilus_extensions_la_SOURCES = \
nautilus-program-choosing.c \
nautilus-radio-button-group.c \
nautilus-search-bar-criterion.c \
- nautilus-search-uri.c \
nautilus-self-checks.c \
nautilus-stock-dialogs.c \
nautilus-string-list.c \
@@ -167,7 +166,6 @@ noinst_HEADERS = \
nautilus-program-choosing.h \
nautilus-radio-button-group.h \
nautilus-search-bar-criterion.h \
- nautilus-search-uri.h \
nautilus-self-checks.h \
nautilus-stock-dialogs.h \
nautilus-string-list.h \
diff --git a/libnautilus-private/nautilus-search-bar-criterion-private.h b/libnautilus-private/nautilus-search-bar-criterion-private.h
index e243246d9..4de522d7c 100644
--- a/libnautilus-private/nautilus-search-bar-criterion-private.h
+++ b/libnautilus-private/nautilus-search-bar-criterion-private.h
@@ -24,12 +24,13 @@
Author: Rebecca Schulman <rebecka@eazel.com>
*/
+
struct NautilusSearchBarCriterionDetails {
NautilusSearchBarCriterionType type;
/* various widgets hold by the criterion */
- GtkOptionMenu *available_option_menu;
- GtkOptionMenu *operator_menu;
+ GtkOptionMenu *available_criteria;
+ GtkOptionMenu *relation_menu;
gboolean use_value_entry;
GtkEntry *value_entry;
gboolean use_value_menu;
diff --git a/libnautilus-private/nautilus-search-bar-criterion.c b/libnautilus-private/nautilus-search-bar-criterion.c
index 3c987ab46..80f2aaa11 100644
--- a/libnautilus-private/nautilus-search-bar-criterion.c
+++ b/libnautilus-private/nautilus-search-bar-criterion.c
@@ -44,7 +44,6 @@ static char * criteria_titles [] = {
N_("Type"),
N_("Stored"),
N_("Size"),
- N_("With Note"),
N_("With Emblem"),
N_("Last Modified"),
N_("Owned By"),
@@ -74,7 +73,7 @@ static char *type_relations [] = {
NULL
};
-static char *type_options [] = {
+static char *type_objects [] = {
N_("regular file"),
N_("text file"),
N_("application"),
@@ -88,7 +87,7 @@ static char *location_relations [] = {
NULL
};
-static char *location_options [] = {
+static char *location_objects [] = {
N_("on this computer"),
N_("in my vault"),
NULL
@@ -100,7 +99,7 @@ static char *size_relations [] = {
NULL
};
-static char *size_options [] = {
+static char *size_objects [] = {
N_("1 KB"),
N_("10 KB"),
N_("100 KB"),
@@ -111,11 +110,6 @@ static char *size_options [] = {
};
-static char *notes_relations [] = {
- N_("including"),
- N_("not including"),
- NULL
-};
static char *emblem_relations [] = {
N_("marked with"),
@@ -123,7 +117,7 @@ static char *emblem_relations [] = {
NULL
};
-static char *emblem_options [] = {
+static char *emblem_objects [] = {
/* FIXME: add emblem possibilities here.
likely to be icon filenames
*/
@@ -136,7 +130,7 @@ static char *modified_relations [] = {
NULL
};
-static char *modified_options [] = {
+static char *modified_objects [] = {
N_("today"),
N_("this week"),
N_("this month"),
@@ -159,6 +153,22 @@ static NautilusSearchBarCriterion * nautilus_search_bar_criterion_new_from_value
NautilusSearchBarCriterionType get_next_default_search_criterion_type (NautilusSearchBarCriterionType type) ;
+static char * get_name_location_for (int relation_number,
+ char *name_text);
+static char * get_content_location_for (int relation_number,
+ char *name_text);
+static char * get_file_type_location_for (int relation_number,
+ int value_number);
+static char * get_size_location_for (int relation_number,
+ char *size_text);
+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);
+static char * get_owner_location_for (int relation_number,
+ char *owner_number);
+
+
void
nautilus_search_bar_criterion_destroy (NautilusSearchBarCriterion *criterion)
@@ -174,8 +184,6 @@ nautilus_search_bar_criterion_new (void)
return g_new0 (NautilusSearchBarCriterion, 1);
}
-static void
-option_menu_callback (GtkWidget *widget, gpointer data);
static void
option_menu_callback (GtkWidget *widget, gpointer data)
@@ -207,14 +215,14 @@ nautilus_search_bar_criterion_set_callback (NautilusSearchBarCriterion *crit
static NautilusSearchBarCriterion *
nautilus_search_bar_criterion_new_from_values (NautilusSearchBarCriterionType type,
- char *operator_options[],
+ char *relation_options[],
gboolean use_value_entry,
gboolean use_value_menu,
char *value_options[])
{
NautilusSearchBarCriterion *criterion;
GtkWidget *search_criteria_option_menu, *search_criteria_menu;
- GtkWidget *operator_option_menu, *operator_menu;
+ GtkWidget *relation_option_menu, *relation_menu;
GtkWidget *value_option_menu, *value_menu;
int i;
@@ -239,24 +247,24 @@ nautilus_search_bar_criterion_new_from_values (NautilusSearchBarCriterionType ty
gtk_menu_set_active (GTK_MENU (search_criteria_menu), type);
gtk_option_menu_set_menu (GTK_OPTION_MENU (search_criteria_option_menu),
search_criteria_menu);
- criterion->details->available_option_menu = GTK_OPTION_MENU (search_criteria_option_menu);
+ criterion->details->available_criteria = GTK_OPTION_MENU (search_criteria_option_menu);
gtk_widget_show_all (GTK_WIDGET(search_criteria_option_menu));
- operator_option_menu = gtk_option_menu_new ();
- operator_menu = gtk_menu_new ();
- for (i = 0; operator_options[i] != NULL; i++) {
+ relation_option_menu = gtk_option_menu_new ();
+ relation_menu = gtk_menu_new ();
+ for (i = 0; relation_options[i] != NULL; i++) {
GtkWidget *item;
- item = gtk_menu_item_new_with_label (_(operator_options[i]));
+ item = gtk_menu_item_new_with_label (_(relation_options[i]));
gtk_object_set_data (GTK_OBJECT(item), "type", GINT_TO_POINTER(i));
- gtk_menu_append (GTK_MENU (operator_menu),
+ gtk_menu_append (GTK_MENU (relation_menu),
item);
}
- gtk_option_menu_set_menu (GTK_OPTION_MENU (operator_option_menu),
- operator_menu);
- criterion->details->operator_menu = GTK_OPTION_MENU (operator_option_menu);
- gtk_widget_show_all (GTK_WIDGET(operator_option_menu));
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (relation_option_menu),
+ relation_menu);
+ criterion->details->relation_menu = GTK_OPTION_MENU (relation_option_menu);
+ gtk_widget_show_all (GTK_WIDGET(relation_option_menu));
@@ -316,42 +324,35 @@ nautilus_search_bar_criterion_next_new (NautilusSearchBarCriterionType criterion
type_relations,
FALSE,
TRUE,
- type_options);
+ type_objects);
break;
case NAUTILUS_LOCATION_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_LOCATION_SEARCH_CRITERION,
location_relations,
FALSE,
TRUE,
- location_options);
+ location_objects);
break;
case NAUTILUS_SIZE_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_SIZE_SEARCH_CRITERION,
size_relations,
FALSE,
TRUE,
- size_options);
- break;
- case NAUTILUS_NOTES_SEARCH_CRITERION:
- new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_NOTES_SEARCH_CRITERION,
- notes_relations,
- TRUE,
- FALSE,
- NULL);
+ size_objects);
break;
case NAUTILUS_EMBLEM_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_EMBLEM_SEARCH_CRITERION,
emblem_relations,
FALSE,
TRUE,
- emblem_options);
+ emblem_objects);
break;
case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION,
modified_relations,
FALSE,
TRUE,
- modified_options);
+ modified_objects);
break;
case NAUTILUS_OWNER_SEARCH_CRITERION:
new_criterion = nautilus_search_bar_criterion_new_from_values (NAUTILUS_OWNER_SEARCH_CRITERION,
@@ -382,6 +383,11 @@ nautilus_search_bar_criterion_first_new (void)
char *
nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterion)
{
+ GtkWidget *menu;
+ GtkWidget *menu_item;
+ int name_number, relation_number, value_number;
+ char *value_text;
+
/* There is ONE thing you should be aware of while implementing this function.
You have to make sure you use non-translated strings for building the uri.
So, to implement this, you are supposed to:
@@ -391,8 +397,49 @@ nautilus_search_bar_criterion_get_location (NautilusSearchBarCriterion *criterio
menu_item = gtk_menu_get_active (optin_menu)
number = gtk_object_get_data (menu_item, "type")
*/
+ menu = gtk_option_menu_get_menu (criterion->details->available_criteria);
+ menu_item = gtk_menu_get_active (GTK_MENU (menu));
+ name_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type"));
+ menu = gtk_option_menu_get_menu (criterion->details->relation_menu);
+ menu_item = gtk_menu_get_active (GTK_MENU (menu));
+ relation_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type"));
+ if (criterion->details->use_value_menu) {
+ menu = gtk_option_menu_get_menu (criterion->details->value_menu);
+ menu_item = gtk_menu_get_active (GTK_MENU (menu));
+ value_number = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu_item), "type"));
+ }
+ else {
+ value_text = gtk_entry_get_text (GTK_ENTRY (criterion->details->value_entry));
+ }
+
+ switch (name_number) {
+ case NAUTILUS_FILE_NAME_SEARCH_CRITERION:
+ return get_name_location_for (relation_number,
+ value_text);
+ case NAUTILUS_CONTENT_SEARCH_CRITERION:
+ return get_content_location_for (relation_number,
+ value_text);
+ case NAUTILUS_FILE_TYPE_SEARCH_CRITERION:
+ return get_file_type_location_for (relation_number,
+ value_number);
+ case NAUTILUS_SIZE_SEARCH_CRITERION:
+ return get_size_location_for (relation_number,
+ value_text);
+ case NAUTILUS_EMBLEM_SEARCH_CRITERION:
+ return get_emblem_location_for (relation_number,
+ value_number);
+ case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION:
+ return get_date_modified_location_for (relation_number,
+ value_number);
+ case NAUTILUS_OWNER_SEARCH_CRITERION:
+ return get_owner_location_for (relation_number,
+ value_text);
+ default:
+ g_assert_not_reached ();
+ return NULL;
+ }
return g_strdup ("file_name contains evolution ");
}
@@ -410,9 +457,7 @@ get_next_default_search_criterion_type (NautilusSearchBarCriterionType type)
case NAUTILUS_LOCATION_SEARCH_CRITERION:
return NAUTILUS_SIZE_SEARCH_CRITERION;
case NAUTILUS_SIZE_SEARCH_CRITERION:
- return NAUTILUS_NOTES_SEARCH_CRITERION;
- case NAUTILUS_NOTES_SEARCH_CRITERION:
- return NAUTILUS_EMBLEM_SEARCH_CRITERION;
+ return NAUTILUS_SIZE_SEARCH_CRITERION;
case NAUTILUS_EMBLEM_SEARCH_CRITERION:
return NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION;
case NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION:
@@ -430,8 +475,8 @@ void
nautilus_search_bar_criterion_show (NautilusSearchBarCriterion *criterion)
{
- gtk_widget_show (GTK_WIDGET (criterion->details->available_option_menu));
- gtk_widget_show (GTK_WIDGET (criterion->details->operator_menu));
+ gtk_widget_show (GTK_WIDGET (criterion->details->available_criteria));
+ gtk_widget_show (GTK_WIDGET (criterion->details->relation_menu));
if (criterion->details->use_value_entry) {
gtk_widget_show (GTK_WIDGET (criterion->details->value_entry));
@@ -447,8 +492,8 @@ void
nautilus_search_bar_criterion_hide (NautilusSearchBarCriterion *criterion)
{
- gtk_widget_hide (GTK_WIDGET (criterion->details->available_option_menu));
- gtk_widget_hide (GTK_WIDGET (criterion->details->operator_menu));
+ gtk_widget_hide (GTK_WIDGET (criterion->details->available_criteria));
+ gtk_widget_hide (GTK_WIDGET (criterion->details->relation_menu));
if (criterion->details->use_value_entry) {
gtk_widget_hide (GTK_WIDGET (criterion->details->value_entry));
@@ -458,6 +503,95 @@ nautilus_search_bar_criterion_hide (NautilusSearchBarCriterion *criterion)
}
}
+static char *
+get_name_location_for (int relation_number, char *name_text)
+{
+ const char *possible_relations[] = { "contains",
+ "starts_with",
+ "ends_with",
+ "matches_glob",
+ "matches_regexp" };
+
+ g_assert (relation_number >= 0);
+ g_assert (relation_number < 5);
+
+ return g_strdup_printf ("file_name %s %s", possible_relations[relation_number],
+ name_text);
+
+}
+
+static char *
+get_content_location_for (int relation_number, char *name_text)
+{
+ const char *possible_relations[] = { "includes",
+ "does_not_include" };
+
+ g_assert (relation_number == 0 || relation_number == 1);
+
+ return g_strdup_printf ("content %s %s", possible_relations[relation_number],
+ name_text);
+}
+
+static char *
+get_file_type_location_for (int relation_number,
+ int value_number)
+{
+ const char *possible_relations[] = { "is", "is_not" };
+ const char *possible_values[] = {"file", "text_file", "application", "directory", "music" };
+
+ g_assert (relation_number == 0 || relation_number == 1);
+ g_assert (value_number >= 0);
+ g_assert (value_number < 5);
+ return g_strdup_printf ("file_type %s %s", possible_relations[relation_number],
+ possible_values[value_number]);
+}
+
+
+static char *
+get_size_location_for (int relation_number,
+ char *size_text)
+{
+ const char *possible_relations[] = { "larger_than", "smaller_than" };
+
+ g_assert (relation_number == 0 || relation_number == 1);
+ /* FIXME: Need checks for appropriate size here */
+ return g_strdup_printf ("size %s %s", possible_relations[relation_number], size_text);
+
+}
+
+static char *
+get_emblem_location_for (int relation_number,
+ int value_number)
+{
+ /* FIXME */
+ return g_strdup ("");
+}
+
+static char *
+get_date_modified_location_for (int relation_number,
+ int value_number)
+{
+ 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 ("mod_time %s %s", possible_relations[relation_number],
+ possible_values[value_number]);
+
+}
+
+static char *
+get_owner_location_for (int relation_number,
+ char *owner_text)
+{
+ const char *possible_relations[] = { "is", "is not" };
+ g_assert (relation_number == 0 || relation_number == 1);
+ return g_strdup_printf ("owner %s %s", possible_relations[relation_number], owner_text);
+
+}
diff --git a/libnautilus-private/nautilus-search-bar-criterion.h b/libnautilus-private/nautilus-search-bar-criterion.h
index 1bcbcb7f6..f415e7919 100644
--- a/libnautilus-private/nautilus-search-bar-criterion.h
+++ b/libnautilus-private/nautilus-search-bar-criterion.h
@@ -37,7 +37,6 @@ typedef enum {
NAUTILUS_FILE_TYPE_SEARCH_CRITERION,
NAUTILUS_LOCATION_SEARCH_CRITERION,
NAUTILUS_SIZE_SEARCH_CRITERION,
- NAUTILUS_NOTES_SEARCH_CRITERION,
NAUTILUS_EMBLEM_SEARCH_CRITERION,
NAUTILUS_DATE_MODIFIED_SEARCH_CRITERION,
NAUTILUS_OWNER_SEARCH_CRITERION,
diff --git a/libnautilus-private/nautilus-search-uri.c b/libnautilus-private/nautilus-search-uri.c
deleted file mode 100644
index b3660c360..000000000
--- a/libnautilus-private/nautilus-search-uri.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* nautilus-search-uri.c -- tools for creating
- and parsing search uris
-
- Copyright (C) 2000 Eazel, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with this program; see the file COPYING. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Author: Rebecca Schulman <rebecka@eazel.com>
-*/
-
-#include <string.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include "nautilus-search-uri.h"
-
-static NautilusSearchBarMode other_search_mode (NautilusSearchBarMode mode);
-
-char *
-nautilus_search_uri_to_simple_search_criteria (const char *uri)
-{
- /* FIXME: Not yet implemented. */
- return g_strdup ("");
-}
-
-char *
-nautilus_simple_search_criteria_to_search_uri (const char *search_criteria)
-{
- char **words;
- char *search_uri;
- char *fragment;
- char *escaped_fragment;
- int length, i;
-
- g_return_val_if_fail (search_criteria != NULL, NULL);
-
- words = g_new0 (char *, strlen (search_criteria));
- words = g_strsplit (search_criteria, " ", strlen (search_criteria));
- /* FIXME: this should eventually be: length = strlen ("[file%3A%2F%2F%2F]"); */
- length = strlen ("[file:///]");
- /* Count total length */
- for (i = 0; words[i] != NULL; i++) {
- length += strlen (words[i]) + strlen ("file_name contains & ");
- }
- fragment = g_new0 (char, length);
- /* FIXME: this should eventually be: sprintf (fragment, "[file%%3A%%2F%%2F%%2F]"); */
- sprintf (fragment, "[file:///]");
- if (words[0] != NULL) {
- for (i = 0; words[i+1] != NULL; i++) {
- strcat (fragment, "file_name contains ");
- strcat (fragment, words[i]);
- strcat (fragment, " & ");
- }
- strcat (fragment, "file_name contains ");
- strcat (fragment, words[i]);
- }
- escaped_fragment = gnome_vfs_escape_string (fragment);
- g_free (fragment);
- search_uri = g_strconcat ("search:", escaped_fragment, NULL);
- g_free (escaped_fragment);
-#ifdef SEARCH_URI_DEBUG
- printf ("Made uri %s from simple search criteria %s\n",
- search_uri, search_criteria);
-#endif
- return search_uri;
-}
-
-
-NautilusSearchBarMode
-nautilus_search_uri_to_search_bar_mode (const char *uri)
-{
- NautilusSearchBarMode preferred_mode;
-
- preferred_mode = nautilus_preferences_get_enum (NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
- NAUTILUS_SIMPLE_SEARCH_BAR);
- if (nautilus_search_uri_is_displayable_by_mode (uri, preferred_mode)) {
- return preferred_mode;
- }
- else {
- return (other_search_mode (preferred_mode));
- }
-}
-
-
-
-gboolean
-nautilus_search_uri_is_displayable_by_mode (const char *uri,
- NautilusSearchBarMode mode)
-{
- /* FIXME */
- return TRUE;
-}
-
-
-static NautilusSearchBarMode
-other_search_mode (NautilusSearchBarMode mode)
-{
- switch (mode) {
- case NAUTILUS_SIMPLE_SEARCH_BAR:
- return NAUTILUS_COMPLEX_SEARCH_BAR;
- break;
- case NAUTILUS_COMPLEX_SEARCH_BAR:
- return NAUTILUS_SIMPLE_SEARCH_BAR;
- break;
- default:
- g_assert_not_reached ();
- }
- return NAUTILUS_COMPLEX_SEARCH_BAR;
-}
diff --git a/libnautilus-private/nautilus-search-uri.h b/libnautilus-private/nautilus-search-uri.h
deleted file mode 100644
index 3f1ee58ca..000000000
--- a/libnautilus-private/nautilus-search-uri.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* nautilus-search-uri.c -- tools for creating
- and parsing search uris
-
- Copyright (C) 2000 Eazel, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with this program; see the file COPYING. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Author: Rebecca Schulman <rebecka@eazel.com>
-*/
-
-#include "nautilus-global-preferences.h"
-#include "nautilus-search-bar-criterion.h"
-
-
-char * nautilus_search_uri_to_simple_search_criteria (const char *location);
-char * nautilus_simple_search_criteria_to_search_uri (const char *search_criteria);
-
-/* Translate a search criterion from the complex search bar into a search uri criterion */
-char * nautilus_search_uri_generate_criterion_from_widgets (NautilusSearchBarCriterion *criterion);
-NautilusSearchBarMode nautilus_search_uri_to_search_bar_mode (const char *uri);
-gboolean nautilus_search_uri_is_displayable_by_mode (const char *uri,
- NautilusSearchBarMode mode);
diff --git a/libnautilus-private/nautilus-string.c b/libnautilus-private/nautilus-string.c
index ec10075f1..6081289ab 100644
--- a/libnautilus-private/nautilus-string.c
+++ b/libnautilus-private/nautilus-string.c
@@ -348,6 +348,26 @@ nautilus_str_strip_trailing_chr (const char *source, char remove_this)
return g_strndup (source, end - source);
}
+char *
+nautilus_str_strip_trailing_str (const char *source, const char *remove_this)
+{
+ const char *end;
+ if (source == NULL) {
+ return NULL;
+ }
+ if (remove_this == NULL) {
+ return g_strdup (source);
+ }
+ end = source + strlen (source);
+ if (strcmp (end - strlen (remove_this), remove_this) != 0) {
+ return g_strdup (source);
+ }
+ else {
+ return g_strndup (source, strlen (source) - strlen(remove_this));
+ }
+
+}
+
gboolean
nautilus_eat_str_to_int (char *source, int *integer)
{
@@ -561,6 +581,11 @@ nautilus_self_check_string (void)
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_chr ("foo_", '_'), "foo");
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_chr ("_foo__", '_'), "_foo");
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_chr ("_f_o__o_", '_'), "_f_o__o");
+
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str (NULL, "bar"), NULL);
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str ("foo", "bar"), "foo");
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str ("foo bar", "bar"), "foo ");
+ NAUTILUS_CHECK_STRING_RESULT (nautilus_str_strip_trailing_str ("bar", "bar"), "bar");
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_double_underscores (NULL), NULL);
NAUTILUS_CHECK_STRING_RESULT (nautilus_str_double_underscores (""), "");
diff --git a/libnautilus-private/nautilus-string.h b/libnautilus-private/nautilus-string.h
index 18a15818c..72926e6cc 100644
--- a/libnautilus-private/nautilus-string.h
+++ b/libnautilus-private/nautilus-string.h
@@ -70,6 +70,8 @@ char * nautilus_str_strip_chr (const char *string,
char remove_this);
char * nautilus_str_strip_trailing_chr (const char *string,
char remove_this);
+char * nautilus_str_strip_trailing_str (const char *string,
+ const char *remove_this);
/* Conversions to and from strings. */
gboolean nautilus_str_to_int (const char *string,
diff --git a/src/nautilus-complex-search-bar.c b/src/nautilus-complex-search-bar.c
index be21372e8..255696da6 100644
--- a/src/nautilus-complex-search-bar.c
+++ b/src/nautilus-complex-search-bar.c
@@ -26,14 +26,16 @@
#include "nautilus-complex-search-bar.h"
-#include <glib.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <glib.h>
#include <gtk/gtkeventbox.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
-#include <libnautilus-extensions/nautilus-search-uri.h>
#include <libnautilus-extensions/nautilus-search-bar-criterion.h>
#include <libnautilus-extensions/nautilus-search-bar-criterion-private.h>
+#include <libnautilus-extensions/nautilus-string.h>
struct NautilusComplexSearchBarDetails {
GtkVBox *bar_container;
@@ -41,6 +43,7 @@ struct NautilusComplexSearchBarDetails {
GtkWidget *more_options;
GtkWidget *fewer_options;
+ GtkWidget *find_them;
GSList *search_criteria;
gchar *undo_text;
@@ -64,7 +67,7 @@ static void fewer_options_callback (GtkObject
static void criterion_callback (NautilusSearchBarCriterion *old_criterion,
NautilusSearchBarCriterion *new_criterion,
gpointer data);
-
+static GtkWidget * load_find_them_pixmap_widget (void);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusComplexSearchBar, nautilus_complex_search_bar, NAUTILUS_TYPE_SEARCH_BAR)
@@ -118,12 +121,18 @@ nautilus_complex_search_bar_initialize (NautilusComplexSearchBar *bar)
{
NautilusSearchBarCriterion *file_name_criterion;
GtkWidget *hbox;
+ GtkWidget *find_them_box, *find_them_pixmap_widget, *find_them_label;
bar->details = g_new0 (NautilusComplexSearchBarDetails, 1);
- bar->details->bar_container = GTK_VBOX (gtk_vbox_new (FALSE, 0));
+ bar->details->bar_container = GTK_VBOX (gtk_vbox_new (FALSE, GNOME_PAD_SMALL));
- bar->details->table = GTK_TABLE (gtk_table_new (1, 1, FALSE));
+ bar->details->table = GTK_TABLE (gtk_table_new (1, 3, TRUE));
+ gtk_table_set_col_spacings (bar->details->table,
+ 1);
+
+ gtk_container_set_resize_mode (GTK_CONTAINER (bar->details->table),
+ GTK_RESIZE_IMMEDIATE);
file_name_criterion = nautilus_search_bar_criterion_first_new ();
nautilus_search_bar_criterion_set_callback (file_name_criterion,
criterion_callback,
@@ -141,24 +150,55 @@ nautilus_complex_search_bar_initialize (NautilusComplexSearchBar *bar)
0);
gtk_widget_show (GTK_WIDGET (bar->details->table));
- hbox = gtk_hbox_new (0, FALSE);
+ hbox = gtk_hbox_new (FALSE, 1);
+
+
+ bar->details->find_them = gtk_button_new ();
+ find_them_box = gtk_hbox_new (FALSE, 1);
+ find_them_pixmap_widget = load_find_them_pixmap_widget ();
+ gtk_box_pack_start (GTK_BOX (find_them_box),
+ find_them_pixmap_widget,
+ TRUE,
+ FALSE,
+ 1);
+ find_them_label = gtk_label_new ("Find Them!");
+ gtk_box_pack_start (GTK_BOX (find_them_box),
+ find_them_label,
+ TRUE,
+ FALSE,
+ 1);
+
+ gtk_container_add (GTK_CONTAINER (bar->details->find_them), find_them_box);
+ gtk_signal_connect_object (GTK_OBJECT (bar->details->find_them), "pressed",
+ nautilus_navigation_bar_location_changed,
+ GTK_OBJECT (bar));
+
+ gtk_box_pack_end (GTK_BOX (hbox),
+ bar->details->find_them, FALSE, FALSE, 0);
+ gtk_widget_show (bar->details->find_them);
+
- bar->details->more_options = gtk_button_new_with_label ("More Options");
- gtk_signal_connect (GTK_OBJECT (bar->details->more_options), "clicked",
- more_options_callback, bar);
- gtk_box_pack_start (GTK_BOX (hbox),
- bar->details->more_options,
- TRUE, FALSE, 0);
- gtk_widget_show (bar->details->more_options);
bar->details->fewer_options = gtk_button_new_with_label ("Fewer Options");
gtk_signal_connect (GTK_OBJECT (bar->details->fewer_options), "clicked",
fewer_options_callback, bar);
- gtk_box_pack_start (GTK_BOX (hbox),
+
+ gtk_box_pack_end (GTK_BOX (hbox),
bar->details->fewer_options,
- TRUE, FALSE, 0);
+ FALSE, FALSE, 2 * GNOME_PAD_SMALL);
+
gtk_widget_show (bar->details->fewer_options);
+ bar->details->more_options = gtk_button_new_with_label ("More Options");
+ gtk_signal_connect (GTK_OBJECT (bar->details->more_options), "clicked",
+ more_options_callback, bar);
+
+
+ gtk_box_pack_end (GTK_BOX (hbox),
+ bar->details->more_options,
+ FALSE, FALSE, 0);
+ gtk_widget_show (bar->details->more_options);
+
gtk_box_pack_start (GTK_BOX (bar->details->bar_container),
hbox,
TRUE,
@@ -174,26 +214,31 @@ static char *
nautilus_complex_search_bar_get_location (NautilusNavigationBar *navigation_bar)
{
NautilusComplexSearchBar *bar;
- char *uri;
+ char *criteria_text, *trimmed_fragment, *escaped_fragment;
+ char *search_uri;
GSList *list;
bar = NAUTILUS_COMPLEX_SEARCH_BAR (navigation_bar);
- uri = g_strdup ("search:[file:///]");
+ criteria_text = g_strdup ("[file:///]");
for (list = bar->details->search_criteria; list != NULL; list = list->next) {
- char *temp_uri, *criterion_uri;
+ char *temp_criterion, *criterion_text;
NautilusSearchBarCriterion *criterion;
criterion = (NautilusSearchBarCriterion *) list->data;
- criterion_uri = nautilus_search_bar_criterion_get_location (criterion);
- temp_uri = g_strconcat (uri, criterion_uri, NULL);
- g_free (uri);
- g_free (criterion_uri);
- uri = temp_uri;
+ criterion_text = nautilus_search_bar_criterion_get_location (criterion);
+ temp_criterion = g_strconcat (criteria_text, criterion_text, " & ", NULL);
+ g_free (criteria_text);
+ g_free (criterion_text);
+ criteria_text = temp_criterion;
}
+ trimmed_fragment = nautilus_str_strip_trailing_str (criteria_text, " & ");
+ g_free (criteria_text);
-
- return uri;
+ escaped_fragment = gnome_vfs_escape_string (trimmed_fragment);
+ search_uri = g_strconcat ("search:", escaped_fragment, NULL);
+ g_free (escaped_fragment);
+ return search_uri;
}
static void
@@ -212,15 +257,16 @@ attach_criterion_to_search_bar (NautilusComplexSearchBar *bar,
NautilusSearchBarCriterion *criterion,
int row)
{
+
g_return_if_fail (NAUTILUS_IS_COMPLEX_SEARCH_BAR (bar));
gtk_table_attach_defaults (bar->details->table,
- GTK_WIDGET (criterion->details->available_option_menu),
+ GTK_WIDGET (criterion->details->available_criteria),
0, 1, row - 1, row);
- gtk_table_attach_defaults (bar->details->table,
- GTK_WIDGET (criterion->details->operator_menu),
- 1, 2, row - 1, row);
+ gtk_table_attach_defaults (bar->details->table,
+ GTK_WIDGET (criterion->details->relation_menu),
+ 1, 2, row - 1, row);
g_assert (criterion->details->use_value_entry +
criterion->details->use_value_menu == 1);
if (criterion->details->use_value_entry) {
@@ -233,6 +279,8 @@ attach_criterion_to_search_bar (NautilusComplexSearchBar *bar,
GTK_WIDGET (criterion->details->value_menu),
2, 3, row - 1, row);
}
+ gtk_table_resize (bar->details->table, row, 3);
+
}
static void
@@ -240,10 +288,10 @@ unattach_criterion_from_search_bar (NautilusComplexSearchBar *bar,
NautilusSearchBarCriterion *criterion)
{
gtk_container_remove (GTK_CONTAINER (bar->details->table),
- GTK_WIDGET (criterion->details->available_option_menu));
+ GTK_WIDGET (criterion->details->available_criteria));
gtk_container_remove (GTK_CONTAINER (bar->details->table),
- GTK_WIDGET (criterion->details->operator_menu));
+ GTK_WIDGET (criterion->details->relation_menu));
g_assert (criterion->details->use_value_entry +
criterion->details->use_value_menu == 1);
if (criterion->details->use_value_entry) {
@@ -254,7 +302,24 @@ unattach_criterion_from_search_bar (NautilusComplexSearchBar *bar,
gtk_container_remove (GTK_CONTAINER (bar->details->table),
GTK_WIDGET (criterion->details->value_menu));
}
+ gtk_table_resize (bar->details->table,
+ g_slist_length (bar->details->search_criteria) - 1,
+ 3);
+
+}
+
+static GtkWidget *
+load_find_them_pixmap_widget (void)
+{
+ GdkPixbuf *pixbuf;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+
+ pixbuf = gdk_pixbuf_new_from_file ("/gnome/share/pixmaps/nautilus/search.png");
+ gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, &mask, 128);
+ gdk_pixbuf_unref (pixbuf);
+ return gtk_pixmap_new (pixmap, mask);
}
@@ -320,8 +385,7 @@ fewer_options_callback (GtkObject *object,
/* Assert that the old criteria got removed from the criteria list */
new_length = g_slist_length (bar->details->search_criteria);
- g_assert ( new_length + 1 == old_length);
- gtk_table_resize (bar->details->table, 3, new_length);
+ g_assert (new_length + 1 == old_length);
/* FIXME: the folowing is pretty much evil since it relies on the run-time
widget hierarchy of the nautilus toolbar.
diff --git a/src/nautilus-simple-search-bar.c b/src/nautilus-simple-search-bar.c
index 1130966ee..aefaad77b 100644
--- a/src/nautilus-simple-search-bar.c
+++ b/src/nautilus-simple-search-bar.c
@@ -25,18 +25,22 @@
#include <config.h>
#include "nautilus-simple-search-bar.h"
+#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
-#include <libnautilus-extensions/nautilus-search-uri.h>
struct NautilusSimpleSearchBarDetails {
GtkEntry *entry;
};
-static char *nautilus_simple_search_bar_get_location (NautilusNavigationBar *bar);
-static void nautilus_simple_search_bar_set_location (NautilusNavigationBar *bar,
- const char *location);
-static void nautilus_simple_search_bar_initialize_class (NautilusSimpleSearchBarClass *class);
-static void nautilus_simple_search_bar_initialize (NautilusSimpleSearchBar *bar);
+static char * nautilus_simple_search_bar_get_location (NautilusNavigationBar *bar);
+static void nautilus_simple_search_bar_set_location (NautilusNavigationBar *bar,
+ const char *location);
+
+static char * nautilus_search_uri_to_simple_search_criteria (const char *location);
+static char * nautilus_simple_search_criteria_to_search_uri (const char *search_criteria);
+
+static void nautilus_simple_search_bar_initialize_class (NautilusSimpleSearchBarClass *class);
+static void nautilus_simple_search_bar_initialize (NautilusSimpleSearchBar *bar);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusSimpleSearchBar,
nautilus_simple_search_bar,
@@ -54,6 +58,7 @@ nautilus_simple_search_bar_initialize (NautilusSimpleSearchBar *bar)
{
GtkWidget *entry;
GtkWidget *hbox;
+ GtkWidget *find_them, *find_them_label;
hbox = gtk_hbox_new (0, FALSE);
@@ -61,8 +66,19 @@ nautilus_simple_search_bar_initialize (NautilusSimpleSearchBar *bar)
gtk_signal_connect_object (GTK_OBJECT (entry), "activate",
nautilus_navigation_bar_location_changed, GTK_OBJECT (bar));
gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
+
+ find_them = gtk_button_new ();
+ find_them_label = gtk_label_new ("Find Them!");
+ gtk_container_add (GTK_CONTAINER (find_them), find_them_label);
+ gtk_signal_connect_object (GTK_OBJECT (find_them), "pressed",
+ nautilus_navigation_bar_location_changed,
+ GTK_OBJECT (bar));
+ gtk_box_pack_start (GTK_BOX (hbox), find_them, FALSE, TRUE, 1);
+
gtk_container_add (GTK_CONTAINER (bar), hbox);
+
+
gtk_widget_show_all (hbox);
@@ -85,8 +101,6 @@ nautilus_simple_search_bar_set_location (NautilusNavigationBar *navigation_bar,
/* We shouldn't have gotten here if the uri can't be displayed
* using a simple search bar
*/
- g_return_if_fail (nautilus_search_uri_is_displayable_by_mode (location, NAUTILUS_SIMPLE_SEARCH_BAR));
-
bar = NAUTILUS_SIMPLE_SEARCH_BAR (navigation_bar);
/* Set the words in the box to be the words originally done in the search */
@@ -105,3 +119,54 @@ nautilus_simple_search_bar_get_location (NautilusNavigationBar *navigation_bar)
search_entry_text = gtk_entry_get_text (bar->entry);
return nautilus_simple_search_criteria_to_search_uri (search_entry_text);
}
+
+
+
+char *
+nautilus_search_uri_to_simple_search_criteria (const char *uri)
+{
+ /* FIXME: Not yet implemented. */
+ return g_strdup ("");
+}
+
+char *
+nautilus_simple_search_criteria_to_search_uri (const char *search_criteria)
+{
+ char **words;
+ char *search_uri;
+ char *fragment;
+ char *escaped_fragment;
+ int length, i;
+
+ g_return_val_if_fail (search_criteria != NULL, NULL);
+
+ words = g_new0 (char *, strlen (search_criteria));
+ words = g_strsplit (search_criteria, " ", strlen (search_criteria));
+ /* FIXME: this should eventually be: length = strlen ("[file%3A%2F%2F%2F]"); */
+ length = strlen ("[file:///]");
+ /* Count total length */
+ for (i = 0; words[i] != NULL; i++) {
+ length += strlen (words[i]) + strlen ("file_name contains & ");
+ }
+ fragment = g_new0 (char, length);
+ /* FIXME: this should eventually be: sprintf (fragment, "[file%%3A%%2F%%2F%%2F]"); */
+ sprintf (fragment, "[file:///]");
+ if (words[0] != NULL) {
+ for (i = 0; words[i+1] != NULL; i++) {
+ strcat (fragment, "file_name contains ");
+ strcat (fragment, words[i]);
+ strcat (fragment, " & ");
+ }
+ strcat (fragment, "file_name contains ");
+ strcat (fragment, words[i]);
+ }
+ escaped_fragment = gnome_vfs_escape_string (fragment);
+ g_free (fragment);
+ search_uri = g_strconcat ("search:", escaped_fragment, NULL);
+ g_free (escaped_fragment);
+#ifdef SEARCH_URI_DEBUG
+ printf ("Made uri %s from simple search criteria %s\n",
+ search_uri, search_criteria);
+#endif
+ return search_uri;
+}
diff --git a/src/nautilus-switchable-search-bar.c b/src/nautilus-switchable-search-bar.c
index 3f6e039a2..90b9a111f 100644
--- a/src/nautilus-switchable-search-bar.c
+++ b/src/nautilus-switchable-search-bar.c
@@ -35,14 +35,17 @@
#include <libnautilus-extensions/nautilus-directory.h>
#include <libnautilus-extensions/nautilus-global-preferences.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
-#include <libnautilus-extensions/nautilus-search-uri.h>
-static void nautilus_switchable_search_bar_set_location (NautilusNavigationBar *bar,
- const char *location);
-static char *nautilus_switchable_search_bar_get_location (NautilusNavigationBar *bar);
-static void nautilus_switchable_search_bar_initialize_class (NautilusSwitchableSearchBarClass *class);
-static void nautilus_switchable_search_bar_initialize (NautilusSwitchableSearchBar *bar);
-static void nautilus_switchable_search_bar_destroy (GtkObject *object);
+static void nautilus_switchable_search_bar_set_location (NautilusNavigationBar *bar,
+ const char *location);
+static char * nautilus_switchable_search_bar_get_location (NautilusNavigationBar *bar);
+static void nautilus_switchable_search_bar_initialize_class (NautilusSwitchableSearchBarClass *class);
+static void nautilus_switchable_search_bar_initialize (NautilusSwitchableSearchBar *bar);
+
+static NautilusSearchBarMode other_search_mode (NautilusSearchBarMode mode);
+static NautilusSearchBarMode nautilus_search_uri_to_search_bar_mode (const char *uri);
+static gboolean nautilus_search_uri_is_displayable_by_mode (const char *uri,
+ NautilusSearchBarMode mode);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusSwitchableSearchBar,
nautilus_switchable_search_bar,
@@ -53,24 +56,6 @@ nautilus_switchable_search_bar_initialize_class (NautilusSwitchableSearchBarClas
{
NAUTILUS_NAVIGATION_BAR_CLASS (klass)->get_location = nautilus_switchable_search_bar_get_location;
NAUTILUS_NAVIGATION_BAR_CLASS (klass)->set_location = nautilus_switchable_search_bar_set_location;
-
- GTK_OBJECT_CLASS (klass)->destroy = nautilus_switchable_search_bar_destroy;
-}
-
-static void
-search_bar_preference_changed_callback (gpointer user_data)
-{
- g_assert (NAUTILUS_IS_SWITCHABLE_SEARCH_BAR (user_data));
-
- /* Switch immediately as long as the current search_uri doesn't veto the switch.
- * FIXME: Perhaps switch immediately anyway and blow away partially-formed
- * search criteria?
- */
- nautilus_switchable_search_bar_set_mode
- (NAUTILUS_SWITCHABLE_SEARCH_BAR (user_data),
- nautilus_search_uri_to_search_bar_mode
- (nautilus_switchable_search_bar_get_location
- (NAUTILUS_NAVIGATION_BAR (user_data))));
}
static void
@@ -81,7 +66,6 @@ nautilus_switchable_search_bar_initialize (NautilusSwitchableSearchBar *bar)
GtkWidget *event_box;
GtkWidget *vbox;
GtkWidget *hbox;
- GtkWidget *find_them, *find_them_label;
hbox = gtk_hbox_new (0, FALSE);
event_box = gtk_event_box_new ();
@@ -100,46 +84,14 @@ nautilus_switchable_search_bar_initialize (NautilusSwitchableSearchBar *bar)
0);
gtk_box_pack_start (GTK_BOX (hbox), bar->simple_search_bar, TRUE, TRUE,
0);
-
- find_them = gtk_button_new ();
- find_them_label = gtk_label_new ("Find Them!");
- gtk_container_add (GTK_CONTAINER (find_them), find_them_label);
- gtk_signal_connect_object (GTK_OBJECT (find_them), "pressed",
- nautilus_navigation_bar_location_changed,
- GTK_OBJECT (bar));
-
- gtk_box_pack_start (GTK_BOX (hbox), find_them, FALSE, TRUE, 1);
-
gtk_container_add (GTK_CONTAINER (bar), hbox);
- bar->label = GTK_LABEL (label);
- bar->search_button = GTK_BUTTON (find_them);
-
gtk_widget_show_all (hbox);
nautilus_switchable_search_bar_set_mode
- (bar,
+ (bar,
nautilus_preferences_get_enum (NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
NAUTILUS_SIMPLE_SEARCH_BAR));
-
- /* React to future preference changes. */
- nautilus_preferences_add_callback (NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
- search_bar_preference_changed_callback,
- bar);
-}
-
-static void
-nautilus_switchable_search_bar_destroy (GtkObject *object)
-{
- NautilusSwitchableSearchBar *bar;
-
- bar = NAUTILUS_SWITCHABLE_SEARCH_BAR (object);
-
- nautilus_preferences_remove_callback (NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
- search_bar_preference_changed_callback,
- bar);
-
- NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
GtkWidget *
@@ -165,12 +117,7 @@ nautilus_switchable_search_bar_set_mode (NautilusSwitchableSearchBar *bar,
return;
}
g_free (location);
-
- /* FIXME bugzilla.eazel.com 1860:
- * Switching to the complex search bar, which is taller, leaves
- * the navigation bar forever at the taller height, even after switching
- * back to the simple search bar or the location bar.
- */
+
switch (mode) {
case NAUTILUS_SIMPLE_SEARCH_BAR:
gtk_widget_show (bar->simple_search_bar);
@@ -227,3 +174,49 @@ nautilus_switchable_search_bar_set_location (NautilusNavigationBar *navigation_b
nautilus_navigation_bar_set_location (NAUTILUS_NAVIGATION_BAR (bar->complex_search_bar),
location);
}
+
+
+
+NautilusSearchBarMode
+nautilus_search_uri_to_search_bar_mode (const char *uri)
+{
+ NautilusSearchBarMode preferred_mode;
+
+ preferred_mode = nautilus_preferences_get_enum (NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
+ NAUTILUS_SIMPLE_SEARCH_BAR);
+ if (nautilus_search_uri_is_displayable_by_mode (uri, preferred_mode)) {
+ return preferred_mode;
+ }
+ else {
+ return (other_search_mode (preferred_mode));
+ }
+}
+
+
+
+gboolean
+nautilus_search_uri_is_displayable_by_mode (const char *uri,
+ NautilusSearchBarMode mode)
+{
+ /* FIXME */
+ return TRUE;
+}
+
+
+static NautilusSearchBarMode
+other_search_mode (NautilusSearchBarMode mode)
+{
+ switch (mode) {
+ case NAUTILUS_SIMPLE_SEARCH_BAR:
+ return NAUTILUS_COMPLEX_SEARCH_BAR;
+ break;
+ case NAUTILUS_COMPLEX_SEARCH_BAR:
+ return NAUTILUS_SIMPLE_SEARCH_BAR;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+ return NAUTILUS_COMPLEX_SEARCH_BAR;
+}
+
+
diff --git a/src/nautilus-switchable-search-bar.h b/src/nautilus-switchable-search-bar.h
index 5f2bf1fbc..e4130b5e0 100644
--- a/src/nautilus-switchable-search-bar.h
+++ b/src/nautilus-switchable-search-bar.h
@@ -41,8 +41,6 @@ typedef struct {
NautilusSearchBarMode mode;
GtkHBox *container;
- GtkLabel *label;
- GtkButton *search_button;
GtkWidget *complex_search_bar;
GtkWidget *simple_search_bar;
} NautilusSwitchableSearchBar;