00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00027
00028
00029
00030
00031
00032
00033 #define _GNU_SOURCE
00034
00035
00036 #include <string.h>
00037 #include <sys/types.h>
00038
00039
00040 #include <gdk/gdkkeysyms.h>
00041 #include <gtk/gtkbutton.h>
00042 #include <gtk/gtk.h>
00043
00044
00045 #include <liberdm/display.h>
00046 #include <liberdm/erdm.h>
00047 #include <liberipc/eripctoolbar.h>
00048 #include <libermanifest/ermanifest.h>
00049 #include <libergtk/erGtkEntry.h>
00050 #include <libergtk/erGtkToggleButton.h>
00051
00052
00053 #include "contentListerLog.h"
00054 #include "erConnect.h"
00055 #include "system.h"
00056 #include "gtkPincodeScreen.h"
00057 #include "control.h"
00058 #include "displayUpdate.h"
00059 #include "erbusy.h"
00060 #include "erMdsContent.h"
00061 #include "gtkSearchWnd.h"
00062 #include "languages.h"
00063 #include "pagebar.h"
00064 #include "search_files.h"
00065 #include "toolbar.h"
00066
00067
00068
00069 static swSearch_t g_wnd;
00070
00071
00072 static gboolean delayed_on_searchbutton_toggled(gpointer data);
00073
00074
00076
00078
00079 static void on_changed(GtkEditable * widget, gpointer data)
00080 {
00081 CL_SEARCHPRINTF("entry");
00082
00083
00084 const char* illegal_chars = ILLEGAL_FILENAME_CHARS;
00085 const char* pattern = gtk_entry_get_text(GTK_ENTRY(widget));
00086
00087 char* new_pattern = alloca( strlen(pattern) + 1 );
00088 strcpy(new_pattern, pattern);
00089
00090 gboolean found = FALSE;
00091 char* cp = new_pattern;
00092 while (*cp)
00093 {
00094 if ( strchr(illegal_chars, *cp) )
00095 {
00096 *cp = '-';
00097 found = TRUE;
00098 }
00099 cp++;
00100 }
00101 if (found)
00102 {
00103 CL_SEARCHPRINTF("illegal pattern [%s] new pattern [%s]", pattern, new_pattern);
00104 gtk_entry_set_text(GTK_ENTRY(widget), new_pattern);
00105 }
00106 }
00107
00108 static gboolean on_expose(GtkWidget * widget, GdkEventExpose * event, gpointer data)
00109 {
00110 CL_SEARCHPRINTF("entry");
00111
00112 gtk_widget_grab_focus(GTK_WIDGET(g_wnd.patternEntry));
00113
00114
00115 gtk_editable_select_region(GTK_EDITABLE(g_wnd.patternEntry), 0, -1);
00116
00117 display_update_request_screen_refresh(LISTER_EXPOSE_LEVEL);
00118
00119 return FALSE;
00120 }
00121
00122
00123
00124 static void on_searchbutton_toggled_event(GtkToggleButton * button, gpointer ptr)
00125 {
00126 CL_SEARCHPRINTF("entry");
00127
00128 gboolean active = gtk_toggle_button_get_active(button);
00129 if (active)
00130 {
00131 erbusy_blink();
00132
00133
00134 g_timeout_add(200, delayed_on_searchbutton_toggled, button);
00135 }
00136 }
00137
00138 static gboolean delayed_on_searchbutton_toggled(gpointer data)
00139 {
00140 CL_SEARCHPRINTF("entry");
00141
00142 GtkToggleButton* button = GTK_TOGGLE_BUTTON(data);
00143 const char* pattern = "";
00144
00145
00146 if (g_wnd.patternEntry)
00147 {
00148 pattern = gtk_entry_get_text(GTK_ENTRY(g_wnd.patternEntry));
00149 }
00150
00151
00152 char root[ERMDS_MAX_FILENAME_SIZE] = "";
00153 const char* sCurrPath = ctrl_get_abscurr_location(root, sizeof(root));
00154 execSearch(sCurrPath, pattern);
00155
00156
00157 display_update_increase_level(LISTER_EXPOSE_LEVEL);
00158 gtk_toggle_button_set_active(button, FALSE);
00159 ctrl_hide_search_wnd();
00160 ctrl_display_search_result();
00161
00162 return FALSE;
00163 }
00164
00166
00168
00169
00170
00171
00172
00173
00174 static void createPatternItem(GtkWidget* parent)
00175 {
00176 GtkWidget* widget;
00177
00178 CL_SEARCHPRINTF("entry");
00179
00180
00181 widget = gtk_label_new("");
00182 gtk_widget_set_name(GTK_WIDGET(widget), "search_wnd_text_bold");
00183 gtk_widget_set_size_request(GTK_WIDGET(widget), SEARCH_ITEM_WIDTH, SEARCH_TAG_HEIGHT);
00184 gtk_misc_set_alignment(GTK_MISC(widget), 0, 1.0);
00185 gtk_box_pack_start(GTK_BOX(parent), widget, FALSE, FALSE, 0);
00186 gtk_widget_show(widget);
00187 g_wnd.patternTag = widget;
00188
00189
00190 widget = ergtk_entry_new();
00191 gtk_widget_set_size_request(widget, SEARCH_ITEM_WIDTH, SEARCH_NAME_HEIGHT);
00192 g_signal_connect_after(G_OBJECT(widget), "changed-stable", G_CALLBACK(on_changed), NULL);
00193 gtk_box_pack_start(GTK_BOX(parent), widget, FALSE, FALSE, 0);
00194 gtk_widget_show(widget);
00195 g_wnd.patternEntry = widget;
00196
00197
00198 widget = gtk_label_new("");
00199 gtk_widget_set_name(GTK_WIDGET(widget), "search_wnd_text");
00200 gtk_widget_set_size_request(GTK_WIDGET(widget), SEARCH_ITEM_WIDTH, SEARCH_NAME_EXPL_HEIGHT);
00201 gtk_label_set_single_line_mode(GTK_LABEL(widget), FALSE);
00202 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
00203 gtk_misc_set_alignment(GTK_MISC(widget), 0, 0.0);
00204 gtk_box_pack_start(GTK_BOX(parent), widget, FALSE, FALSE, 0);
00205 gtk_widget_show(widget);
00206 g_wnd.patternExpl = widget;
00207 }
00208
00209
00210
00211
00212
00213
00214
00215 static void createSearchButtonItem(GtkWidget* parent)
00216 {
00217 GtkWidget* widget;
00218 GtkWidget* alignment;
00219
00220 CL_SEARCHPRINTF("entry");
00221
00222
00223 widget = gtk_label_new("");
00224 gtk_widget_set_name(GTK_WIDGET(widget), "search_wnd_text_bold");
00225 gtk_widget_set_size_request(GTK_WIDGET(widget), SEARCH_ITEM_WIDTH, SEARCH_TAG_HEIGHT);
00226 gtk_misc_set_alignment(GTK_MISC(widget), 0, 1.0);
00227 gtk_box_pack_start(GTK_BOX(parent), widget, FALSE, FALSE, 0);
00228 gtk_widget_show(widget);
00229 g_wnd.searchTag = widget;
00230
00231
00232 widget = gtk_alignment_new(1.0, 0.5, 0.0, 0.0);
00233 gtk_widget_set_size_request(GTK_WIDGET(widget), -1, SEARCH_BUTTON_AREA_HEIGHT);
00234 gtk_container_add(GTK_CONTAINER(parent), widget);
00235 gtk_widget_show(widget);
00236 alignment = widget;
00237
00238
00239 widget = ergtk_toggle_button_new_with_label("");
00240 gtk_widget_set_size_request(GTK_WIDGET(widget), SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT);
00241 g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(on_searchbutton_toggled_event), NULL);
00242 gtk_container_add(GTK_CONTAINER(alignment), widget);
00243 gtk_widget_show(widget);
00244 g_wnd.searchButton = widget;
00245 }
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 GtkWidget* create_search_wnd(GtkWidget* parent)
00256 {
00257 CL_SEARCHPRINTF("entry");
00258
00259
00260 g_wnd.window = parent;
00261 g_signal_connect(G_OBJECT(g_wnd.window), "expose-event", G_CALLBACK(on_expose), NULL);
00262
00263
00264 GtkWidget* background = gtk_event_box_new();
00265 gtk_widget_set_name(GTK_WIDGET(background), "search_wnd_background");
00266 gtk_widget_set_size_request(GTK_WIDGET(background), SEARCH_BK_IMG_WIDTH, SEARCH_BK_IMG_HEIGHT);
00267 gtk_container_add(GTK_CONTAINER(parent), background);
00268 gtk_widget_show(background);
00269
00270
00271 GtkWidget* alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0);
00272 gtk_alignment_set_padding( GTK_ALIGNMENT(alignment),
00273 SEARCH_VBORDER,
00274 SEARCH_VBORDER,
00275 SEARCH_HBORDER,
00276 SEARCH_HBORDER );
00277 gtk_container_add(GTK_CONTAINER(background), alignment);
00278 gtk_widget_show(alignment);
00279
00280
00281 GtkWidget*vbox = gtk_vbox_new(FALSE, SEARCH_WND_ITEM_SPACING);
00282 gtk_container_add(GTK_CONTAINER(alignment), vbox);
00283 gtk_widget_show(vbox);
00284
00285
00286 createPatternItem(vbox);
00287
00288
00289 createSearchButtonItem(vbox);
00290
00291 return background;
00292 }
00293
00294
00295 void search_wnd_set_text()
00296 {
00297 CL_SEARCHPRINTF("entry");
00298
00299
00300 gtk_label_set_text( GTK_LABEL(g_wnd.patternTag), _("Step 1: Please enter the search pattern") );
00301 gtk_label_set_text( GTK_LABEL(g_wnd.patternExpl), _("Multiple search strings can be separated with a space.\n"
00302 "Search strings containing spaces should be enclosed in double quotes (\").\n"
00303 "Narrow your search results by clicking the 'Search' icon again.") );
00304
00305
00306 gtk_label_set_text( GTK_LABEL(g_wnd.searchTag), _("Step 2: Please click on the 'Search' button to start your enquiry") );
00307 gtk_button_set_label( GTK_BUTTON(g_wnd.searchButton), _("Search") );
00308 }
00309