Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion src/gtk/preferences_dialog.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ struct _preferences_combo
GtkWidget *special_locale;
GtkWidget *font_prefs;
GtkWidget *display_columns;
GtkWidget *module_grouping;
};

typedef struct _preferences_color_pickers COLOR_PICKERS;
Expand Down Expand Up @@ -119,7 +120,7 @@ struct _preferences_check_buttons
GtkWidget *statusbar;
GtkWidget *alternation;
GtkWidget *justify_margins;

GtkWidget *show_hidden_modules;
GtkWidget *show_in_viewer;
GtkWidget *show_in_dictionary;
GtkWidget *show_devotion;
Expand Down Expand Up @@ -1214,6 +1215,14 @@ on_justifybutton_toggled(GtkToggleButton *togglebutton, gpointer user_data)
redisplay_to_realign();
}

void
on_show_hidden_modules_toggled(GtkToggleButton *togglebutton, gpointer user_data)
{
xml_set_value("Xiphos", "modules", "show_hidden",
(gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
settings.show_hidden_modules = gtk_toggle_button_get_active(togglebutton);
main_load_module_tree(sidebar.module_list);
}
/******************************************************************************
* Name
* on_checkbutton_scroll_toggled
Expand Down Expand Up @@ -1604,6 +1613,18 @@ void on_columncountvalue_changed(GtkComboBox *combobox, gpointer user_data)
redisplay_to_realign();
}

void on_combobox_module_grouping_changed(GtkComboBox *combobox, gpointer user_data)
{
gint mode = gtk_combo_box_get_active(combobox);
gchar buf[4];
if (mode < 0)
return;
g_snprintf(buf, sizeof(buf), "%d", mode);
xml_set_value("Xiphos", "modules", "grouping", buf);
settings.module_tree_grouping = mode;
main_load_module_tree(sidebar.module_list);
}

/******************************************************************************
* Name
* on_basecombobox1_changed
Expand Down Expand Up @@ -3339,6 +3360,18 @@ static void create_preferences_dialog(void)
g_signal_connect(combo.display_columns, "changed",
G_CALLBACK(on_columncountvalue_changed), NULL);

combo.module_grouping = UI_GET_ITEM(gxml, "combobox_module_grouping");
gtk_combo_box_set_active(GTK_COMBO_BOX(combo.module_grouping),
settings.module_tree_grouping);
g_signal_connect(combo.module_grouping, "changed",
G_CALLBACK(on_combobox_module_grouping_changed), NULL);
check_button.show_hidden_modules = UI_GET_ITEM(gxml, "checkbutton_show_hidden_modules");

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.show_hidden_modules),
settings.show_hidden_modules);
g_signal_connect(check_button.show_hidden_modules, "toggled",
G_CALLBACK(on_show_hidden_modules_toggled), NULL);

/* module combos */
combo.default_dictionary_module = UI_GET_ITEM(gxml, "combobox5");
combo.percomm_module = UI_GET_ITEM(gxml, "combobox6");
Expand Down
82 changes: 82 additions & 0 deletions src/gtk/sidebar.c
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,21 @@ static void on_search_results_activate(GtkToggleButton *button,
* gboolean
*/

static void on_module_grouping_menu_toggled(GtkCheckMenuItem *item, gpointer user_data)
{
gint mode;
gchar buf[4];

if (!gtk_check_menu_item_get_active(item))
return;

mode = GPOINTER_TO_INT(user_data);
g_snprintf(buf, sizeof(buf), "%d", mode);
xml_set_value("Xiphos", "modules", "grouping", buf);
settings.module_tree_grouping = mode;
main_load_module_tree(sidebar.module_list);
}

static gboolean on_modules_list_button_release(GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
Expand Down Expand Up @@ -651,6 +666,40 @@ gint depth = gtk_tree_path_get_depth(path);
g_free(caption);
return FALSE;
}
if (!mod && caption) {
GtkWidget *group_menu = gtk_menu_new();
GtkWidget *item_catlang = gtk_radio_menu_item_new_with_label(NULL, _("Category, then Language"));
GtkWidget *item_cat = gtk_radio_menu_item_new_with_label_from_widget(
GTK_RADIO_MENU_ITEM(item_catlang), _("Category only"));
GtkWidget *item_langcat = gtk_radio_menu_item_new_with_label_from_widget(
GTK_RADIO_MENU_ITEM(item_catlang), _("Language, then Category"));

gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_catlang),
settings.module_tree_grouping == 0);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_cat),
settings.module_tree_grouping == 1);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_langcat),
settings.module_tree_grouping == 2);

gtk_menu_shell_append(GTK_MENU_SHELL(group_menu), item_catlang);
gtk_menu_shell_append(GTK_MENU_SHELL(group_menu), item_cat);
gtk_menu_shell_append(GTK_MENU_SHELL(group_menu), item_langcat);
gtk_widget_show_all(group_menu);

g_signal_connect(item_catlang, "toggled",
G_CALLBACK(on_module_grouping_menu_toggled), GINT_TO_POINTER(0));
g_signal_connect(item_cat, "toggled",
G_CALLBACK(on_module_grouping_menu_toggled), GINT_TO_POINTER(1));
g_signal_connect(item_langcat, "toggled",
G_CALLBACK(on_module_grouping_menu_toggled), GINT_TO_POINTER(2));
#if GTK_CHECK_VERSION(3, 22, 0)
gtk_menu_popup_at_pointer(GTK_MENU(group_menu), (GdkEvent *)event);
#else
gtk_menu_popup(GTK_MENU(group_menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
#endif
g_free(caption);
return FALSE;
}

break;
}
Expand Down Expand Up @@ -922,6 +971,22 @@ on_about2_activate(GtkMenuItem *menuitem, gpointer user_data)
buf_module = NULL;
}

G_MODULE_EXPORT void
on_toggle_favorite_activate(GtkMenuItem *menuitem, gpointer user_data)
{
module_toggle_favorite(buf_module);
g_free(buf_module);
buf_module = NULL;
}

G_MODULE_EXPORT void
on_hide_module_activate(GtkMenuItem *menuitem, gpointer user_data)
{
module_toggle_hidden(buf_module);
g_free(buf_module);
buf_module = NULL;
}

G_MODULE_EXPORT void
on_save_list_as_a_single_bookmark_activate(GtkMenuItem *menuitem,
gpointer user_data)
Expand Down Expand Up @@ -1103,6 +1168,23 @@ static GtkWidget *create_menu_modules(void)
g_return_val_if_fail((gxml != NULL), NULL);

GtkWidget *menu = UI_GET_ITEM(gxml, "menu_modules");
#ifdef USE_GTKBUILDER
GtkWidget *fav_item = UI_GET_ITEM(gxml, "toggle_favorite1");
GtkWidget *hide_item = UI_GET_ITEM(gxml, "hide_module1");
#else
GtkWidget *fav_item = UI_GET_ITEM(gxml, "toggle_favorite");
GtkWidget *hide_item = UI_GET_ITEM(gxml, "hide_module");
#endif
if (fav_item)
gtk_menu_item_set_label(GTK_MENU_ITEM(fav_item),
module_is_favorite(buf_module)
? _("Remove from Favorites")
: _("Add to Favorites"));
if (hide_item)
gtk_menu_item_set_label(GTK_MENU_ITEM(hide_item),
module_is_hidden(buf_module)
? _("Show this module")
: _("Hide this module"));
#ifdef USE_GTKBUILDER
gtk_builder_connect_signals(gxml, NULL);
/*gtk_builder_connect_signals_full
Expand Down
6 changes: 6 additions & 0 deletions src/gui/preferences_dialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ void on_checkbutton9_toggled(GtkToggleButton *togglebutton,
gpointer user_data);
void on_justifybutton_toggled(GtkToggleButton *togglebutton,
gpointer user_data);
void on_show_hidden_modules_toggled(GtkToggleButton *togglebutton,
gpointer user_data);
void on_show_hidden_modules_toggled(GtkToggleButton *togglebutton,
gpointer user_data);

void on_folder_changed(GtkFileChooser *filechooser,
gpointer user_data);
Expand Down Expand Up @@ -94,6 +98,8 @@ void on_combobox20_changed(GtkComboBox *combobox,
gpointer user_data);
void on_columncountvalue_changed(GtkComboBox *combobox,
gpointer user_data);
void on_combobox_module_grouping_changed(GtkComboBox *combobox,
gpointer user_data);

void on_colorbutton1_color_set(GtkColorButton *colorbutton,
gpointer user_data);
Expand Down
4 changes: 4 additions & 0 deletions src/gui/sidebar.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ void on_open_in_tab_activate2(GtkMenuItem *menuitem,
gpointer user_data);
void on_about2_activate(GtkMenuItem *menuitem,
gpointer user_data);
void on_toggle_favorite_activate(GtkMenuItem *menuitem,
gpointer user_data);
void on_hide_module_activate(GtkMenuItem *menuitem,
gpointer user_data);
void on_simple_activate(GtkMenuItem *menuitem,
gpointer user_data);
void on_subject_activate(GtkMenuItem *menuitem,
Expand Down
31 changes: 31 additions & 0 deletions src/main/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,37 @@ if (!settings.morph_heb_lex || strlen(settings.morph_heb_lex) == 0) {
settings.mod_mgr_remote_source_index = 0;
}

/* module tree display grouping */
/* note: the "modules" section already exists (bible/comm/dict/...),
so we only add the item, never re-create the section. */
if ((buf = xml_get_value("modules", "grouping")))
settings.module_tree_grouping = atoi(buf);
else {
xml_add_new_item_to_section("modules", "grouping", "0");
settings.module_tree_grouping = 0;
}

if (xml_get_value("modules", "favorites"))
settings.favorite_modules = xml_get_value("modules", "favorites");
else {
xml_add_new_item_to_section("modules", "favorites", "");
settings.favorite_modules = xml_get_value("modules", "favorites");
}

if (xml_get_value("modules", "hidden"))
settings.hidden_modules = xml_get_value("modules", "hidden");
else {
xml_add_new_item_to_section("modules", "hidden", "");
settings.hidden_modules = xml_get_value("modules", "hidden");
}

if ((buf = xml_get_value("modules", "show_hidden")))
settings.show_hidden_modules = atoi(buf);
else {
xml_add_new_item_to_section("modules", "show_hidden", "0");
settings.show_hidden_modules = 0;
}

/* current verse & keys */
settings.currentverse = xml_get_value("keys", "verse");
settings.dictkey = xml_get_value("keys", "dictionary");
Expand Down
10 changes: 10 additions & 0 deletions src/main/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,16 @@ struct _settings
int mod_mgr_destination; /* if = 0 destination is .sword
else sword directory */

/* module tree display grouping: 0 = category+language (default),
1 = category only, 2 = language+category */
int module_tree_grouping;

/* semicolon-delimited lists of module names: ";modname;modname;" */
char *favorite_modules;
char *hidden_modules;
/* if true, modules in hidden_modules are shown anyway (temporarily) */
int show_hidden_modules;

/* if true use prayerlist */
int prayerlist;

Expand Down
Loading