Added search disabling when current view can't be searched

This commit is contained in:
Jesse van den Kieboom 2005-11-19 13:03:36 +00:00
parent 8b127400e8
commit e14ab32aa6
1 changed files with 84 additions and 28 deletions

View File

@ -28,6 +28,7 @@
#include "gm-world-tab.h"
#include "mcp/gm-mcp-session.h"
#include "mcp/gm-mcp-package.h"
#include "gm-searchable.h"
//#include "if_world.h"
//#include "if_worlds_listing.h"
@ -55,6 +56,8 @@ void on_gm_app_view_button_find_close_clicked(GtkButton *button,
void on_gm_app_view_notebook_switch_page(GtkNotebook * notebook,
GtkNotebookPage * page, guint page_num, GmAppView *view);
void on_gm_app_view_world_view_notebook_switch_page(GtkNotebook * notebook,
GtkNotebookPage * page, guint page_num, GmAppView *view);
gboolean on_gm_app_view_notebook_button_press(GtkNotebook *notebook,
GdkEventButton *event, GmAppView *view);
gboolean on_gm_app_view_notebook_button_release(GtkNotebook *notebook,
@ -116,7 +119,9 @@ struct _GmAppViewPrivate {
GtkEntry *entry_find;
GtkVBox *vbox_find;
GtkHBox *hbox_control_find;
GtkCheckButton *check_button_search_direction;
gboolean ignore_toggling;
gboolean drag_in_progress;
gint motion_notify_handler_id;
@ -214,6 +219,7 @@ GtkWidget *
gm_app_view_create_search_box(GmAppView *view) {
GtkWidget *vbox = gtk_vbox_new(FALSE, 3);
GtkWidget *hbox = gtk_hbox_new(FALSE, 6);
GtkWidget *hbox_control = gtk_hbox_new(FALSE, 6);
GtkWidget *lbl = gtk_label_new(_("Find:"));
GtkWidget *entry = gtk_entry_new();
GtkWidget *button = gtk_button_new();
@ -235,19 +241,22 @@ gm_app_view_create_search_box(GmAppView *view) {
gtk_box_pack_start(GTK_BOX(hbox_button),
gtk_label_new(_("Find next")), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), lbl, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), check_button, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox_control), lbl, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox_control), entry, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox_control), button, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox_control), check_button, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), hbox_control, FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(hbox), button_close, FALSE, FALSE, 0);
view->priv->vbox_find = GTK_VBOX(vbox);
view->priv->hbox_control_find = GTK_HBOX(hbox_control);
view->priv->entry_find = GTK_ENTRY(entry);
view->priv->check_button_search_direction = GTK_CHECK_BUTTON(check_button);
view->priv->ignore_toggling = FALSE;
gtk_widget_show_all(vbox);
gtk_widget_hide(vbox);
g_signal_connect(entry, "activate",
G_CALLBACK(on_gm_app_view_entry_find_activate), view);
g_signal_connect(entry, "changed",
@ -257,6 +266,8 @@ gm_app_view_create_search_box(GmAppView *view) {
g_signal_connect(button_close, "clicked",
G_CALLBACK(on_gm_app_view_button_find_close_clicked), view);
g_signal_connect(button, "clicked",
G_CALLBACK(on_gm_app_view_entry_find_activate), view);
g_signal_connect(check_button, "toggled",
G_CALLBACK(on_gm_app_view_check_button_search_direction_toggled),
view);
@ -328,7 +339,6 @@ gm_app_view_init(GmAppView *view) {
GtkWidget *note;
view->priv = GM_APP_VIEW_GET_PRIVATE(view);
vbox = gtk_vbox_new(FALSE, 3);
gtk_widget_show(vbox);
@ -392,8 +402,9 @@ gm_app_view_new(GmApp *application) {
view->priv->active_world = NULL;
// Toggle search direction
dir = gm_options_get_int(gm_app_options(application), "search_direction")
dir = gm_options_get_int(gm_app_options(application), "search_direction_world")
== 1;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
view->priv->check_button_search_direction), dir);
@ -793,6 +804,8 @@ on_gm_app_view_world_load(GmWorld *world, GmAppView *view) {
g_signal_connect(gm_world_get_mcp_session(world), "package_created",
G_CALLBACK(on_gm_app_view_world_mcp_package_created), view);
g_signal_connect(world_view, "switch_page",
G_CALLBACK(on_gm_app_view_world_view_notebook_switch_page), view);
gtk_notebook_append_page(view->priv->notebook, world_view,
GTK_WIDGET(tab));
@ -837,32 +850,32 @@ void
on_gm_app_view_accel_switch_page(GtkAccelGroup * accelgroup, GObject * arg1,
guint arg2, GdkModifierType arg3, AccelInfo *info) {
gtk_notebook_set_current_page(info->view->priv->notebook, info->num);
gtk_notebook_set_current_page(info->view->priv->notebook, info->num);
}
void
on_gm_app_view_accel_switch_edit(GtkAccelGroup * accelgroup, GObject * arg1,
guint arg2, GdkModifierType arg3, AccelInfo *info) {
GmWorld *world = gm_app_view_active_world(info->view);
GmWorld *world = gm_app_view_active_world(info->view);
if (world) {
gtk_notebook_set_current_page(info->view->priv->notebook, info->num);
}
if (world) {
gtk_notebook_set_current_page(info->view->priv->notebook, info->num);
}
}
void
on_gm_app_view_accel_cycle_page(GtkAccelGroup * accelgroup, GObject * arg1,
guint arg2, GdkModifierType arg3, AccelInfo *info) {
GtkNotebook *note = info->view->priv->notebook;
int p = gtk_notebook_get_current_page(note) + info->num;
GtkNotebook *note = info->view->priv->notebook;
gint p = gtk_notebook_get_current_page(note) + info->num;
if (p < 0) {
gtk_notebook_set_current_page(note, gtk_notebook_get_n_pages(note) - 1);
} else if (p > gtk_notebook_get_n_pages(note) - 1) {
gtk_notebook_set_current_page(note, 0);
} else {
gtk_notebook_set_current_page(note, p);
}
if (p < 0) {
gtk_notebook_set_current_page(note, gtk_notebook_get_n_pages(note) - 1);
} else if (p > gtk_notebook_get_n_pages(note) - 1) {
gtk_notebook_set_current_page(note, 0);
} else {
gtk_notebook_set_current_page(note, p);
}
}
void
@ -870,15 +883,15 @@ on_gm_app_view_world_activate(GtkAction * action, GmWorld *world) {
gm_world_load(world);
}
GmWorldViewSearchFlags
GmSearchableSearchFlags
gm_app_view_search_flags(GmAppView *view) {
gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
view->priv->check_button_search_direction));
if (active) {
return GM_WORLD_VIEW_SEARCH_BACKWARDS;
return GM_SEARCHABLE_SEARCH_BACKWARDS;
} else {
return GM_WORLD_VIEW_SEARCH_FORWARDS;
return GM_SEARCHABLE_SEARCH_FORWARDS;
}
}
@ -917,7 +930,7 @@ on_gm_app_view_entry_find_activate(GtkEntry *entry, GmAppView *view) {
void
gm_app_view_show_find_box(GmAppView *view) {
GmWorldView *world_view;
int i, n;
gint i, n;
if (!GTK_WIDGET_VISIBLE(view->priv->vbox_find)) {
n = gtk_notebook_get_n_pages(view->priv->notebook);
@ -991,10 +1004,27 @@ on_gm_app_view_button_find_close_clicked(GtkButton *button,
void
on_gm_app_view_check_button_search_direction_toggled(GtkToggleButton *button,
GmAppView *view) {
gboolean active = gtk_toggle_button_get_active(button);
GmWorldView *active_view;
gboolean active;
gm_options_set_int(gm_app_options(view->priv->application),
"search_direction", active ? 1 : 0);
if (view->priv->ignore_toggling) {
return;
}
active_view = gm_app_view_active_world_view(view);
if (active_view == NULL) {
return;
}
active = gtk_toggle_button_get_active(button);
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(active_view)) == 0) {
gm_options_set_int(gm_app_options(view->priv->application),
"search_direction_world", active ? 1 : 0);
} else {
gm_options_set_int(gm_app_options(view->priv->application),
"search_direction", active ? 1 : 0);
}
}
void
@ -1178,6 +1208,29 @@ on_gm_app_view_notebook_button_release(GtkNotebook *notebook,
return FALSE;
}
void
on_gm_app_view_world_view_notebook_switch_page(GtkNotebook *notebook,
GtkNotebookPage * page, guint page_num, GmAppView *view) {
GmWorldView *world_view = GM_WORLD_VIEW(notebook);
gboolean direction;
gtk_widget_set_sensitive(GTK_WIDGET(view->priv->hbox_control_find),
gm_world_view_page_can_find(world_view, page_num));
if (page_num == 0) {
direction = gm_options_get_int(gm_app_options(gm_app_instance()),
"search_direction_world");
} else {
direction = gm_options_get_int(gm_app_options(gm_app_instance()),
"search_direction");
}
view->priv->ignore_toggling = TRUE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
view->priv->check_button_search_direction), direction);
view->priv->ignore_toggling = FALSE;
}
void
on_gm_app_view_notebook_switch_page(GtkNotebook * notebook,
GtkNotebookPage * page, guint page_num, GmAppView *view) {
@ -1195,6 +1248,9 @@ on_gm_app_view_notebook_switch_page(GtkNotebook * notebook,
view->priv->active_world = world;
gm_world_set_active(view->priv->active_world, TRUE);
}
on_gm_app_view_world_view_notebook_switch_page(GTK_NOTEBOOK(
gm_app_view_active_world_view(view)), NULL, 0, view);
}
static const gchar *authors[] = {