Skip to content

Commit

Permalink
simplified menu_item_add_radio usage
Browse files Browse the repository at this point in the history
  • Loading branch information
nadvornik committed Jun 27, 2009
1 parent f950952 commit 9ef0898
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 149 deletions.
47 changes: 12 additions & 35 deletions src/bar_gps.c
Original file line number Diff line number Diff line change
Expand Up @@ -384,17 +384,15 @@ static void bar_pane_gps_centre_map_checked_toggle_cb(GtkWidget *menu_widget, gp

static void bar_pane_gps_change_map_cb(GtkWidget *widget, gpointer data)
{
PaneGPSData *pgd;
PaneGPSData *pgd = data;
gchar *mapsource;

if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
return;

pgd = (PaneGPSData *) submenu_item_get_data(widget);

if (!pgd) return;

mapsource = data;
mapsource = g_object_get_data(G_OBJECT(widget), "menu_item_radio_data");
bar_pane_gps_set_map_source(pgd, mapsource);
}

Expand Down Expand Up @@ -554,51 +552,28 @@ const gchar *bar_pane_gps_get_map_id(PaneGPSData *pgd)
return map_id;
}

static GtkWidget *bar_pane_gps_add_radio(GtkWidget *menu, GtkWidget *parent,
const gchar *label, GCallback func, gchar *value,
gboolean show_current, const gchar *current_value)
{
GtkWidget *item;

if (show_current)
{
item = menu_item_add_radio(menu, parent,
label, (g_strcmp0(value, current_value) == 0), func, value);
}
else
{
item = menu_item_add(menu, label, func, value);
}

return item;
}

static GtkWidget *bar_pane_gps_menu(PaneGPSData *pgd)
{
GtkWidget *menu;
GtkWidget *map_centre;
static gboolean show_current = TRUE;
GtkWidget *parent;
ChamplainMapSourceFactory *map_factory;
GSList *map_list;
ChamplainMapSourceDesc *map_desc;
const gchar *current;

menu = popup_menu_short_lived();

map_factory = champlain_map_source_factory_get_default();
map_list = champlain_map_source_factory_get_list(map_factory);
map_desc = (ChamplainMapSourceDesc *)(map_list->data);
map_list = g_slist_next(map_list);

g_object_set_data(G_OBJECT(menu), "submenu_data", pgd);

parent = bar_pane_gps_add_radio(menu, NULL, (map_desc->name), G_CALLBACK(bar_pane_gps_change_map_cb), map_desc->id, show_current, bar_pane_gps_get_map_id(pgd));
current = bar_pane_gps_get_map_id(pgd);

while (map_list)
{
map_desc = (ChamplainMapSourceDesc *)(map_list->data);
bar_pane_gps_add_radio(menu, parent, (map_desc->name), G_CALLBACK(bar_pane_gps_change_map_cb), map_desc->id,
show_current, bar_pane_gps_get_map_id(pgd));
map_desc = (ChamplainMapSourceDesc *)(map_list->data);

menu_item_add_radio(menu, map_desc->name, map_desc->id, strcmp(map_desc->id, current) == 0, G_CALLBACK(bar_pane_gps_change_map_cb), pgd);

map_list = g_slist_next(map_list);
}

Expand Down Expand Up @@ -717,8 +692,10 @@ GtkWidget *bar_pane_gps_new(const gchar *id, const gchar *title, const gchar *ma

scrolled = gtk_scrolled_window_new(NULL, NULL);
vbox = gtk_vbox_new(FALSE, 0);
view = champlain_view_new();
gpswidget = champlain_view_embed_new(CHAMPLAIN_VIEW(view));

gpswidget = gtk_champlain_embed_new ();
view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (gpswidget));

viewport = gtk_viewport_new(NULL, NULL);

gtk_container_add(GTK_CONTAINER(viewport), gpswidget);
Expand Down
106 changes: 19 additions & 87 deletions src/bar_histogram.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,123 +198,55 @@ static void bar_pane_histogram_destroy(GtkWidget *widget, gpointer data)

static void bar_pane_histogram_popup_channels_cb(GtkWidget *widget, gpointer data)
{
PaneHistogramData *phd;
PaneHistogramData *phd = data;
gint channel;

if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return;

phd = submenu_item_get_data(widget);

if (!phd) return;

channel = GPOINTER_TO_INT(data);
channel = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "menu_item_radio_data"));
if (channel == histogram_get_channel(phd->histogram)) return;

histogram_set_channel(phd->histogram, channel);
bar_pane_histogram_update(phd);
}

static void bar_pane_histogram_popup_logmode_cb(GtkWidget *widget, gpointer data)
static void bar_pane_histogram_popup_mode_cb(GtkWidget *widget, gpointer data)
{
PaneHistogramData *phd;
PaneHistogramData *phd = data;
gint logmode;

if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return;

phd = submenu_item_get_data(widget);

if (!phd) return;

logmode = GPOINTER_TO_INT(data);
logmode = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "menu_item_radio_data"));
if (logmode == histogram_get_mode(phd->histogram)) return;

histogram_set_mode(phd->histogram, logmode);
bar_pane_histogram_update(phd);
}

static GtkWidget *bar_pane_histogram_add_radio(GtkWidget *menu, GtkWidget *parent,
const gchar *label,
GCallback func, gint value,
gboolean show_current, gint current_value)
{
GtkWidget *item;

if (show_current)
{
item = menu_item_add_radio(menu, parent,
label, (value == current_value),
func, GINT_TO_POINTER((gint)value));
}
else
{
item = menu_item_add(menu, label,
func, GINT_TO_POINTER((gint)value));
}

return item;
}

GtkWidget *bar_pane_histogram_add_channels(GtkWidget *menu, GCallback func, gpointer data,
gboolean show_current, gint current_value)
{
GtkWidget *submenu;
GtkWidget *parent;

submenu = gtk_menu_new();
g_object_set_data(G_OBJECT(submenu), "submenu_data", data);

parent = bar_pane_histogram_add_radio(submenu, NULL, _("_Red"), func, HCHAN_R, show_current, current_value);
bar_pane_histogram_add_radio(submenu, parent, _("_Green"), func, HCHAN_G, show_current, current_value);
bar_pane_histogram_add_radio(submenu, parent, _("_Blue"),func, HCHAN_B, show_current, current_value);
bar_pane_histogram_add_radio(submenu, parent, _("_RGB"),func, HCHAN_RGB, show_current, current_value);
bar_pane_histogram_add_radio(submenu, parent, _("_Value"),func, HCHAN_MAX, show_current, current_value);

if (menu)
{
GtkWidget *item;

item = menu_item_add(menu, _("Channels"), NULL, NULL);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
return item;
}

return submenu;
}
GtkWidget *bar_pane_histogram_add_logmode(GtkWidget *menu, GCallback func, gpointer data,
gboolean show_current, gint current_value)
{
GtkWidget *submenu;
GtkWidget *parent;

submenu = gtk_menu_new();
g_object_set_data(G_OBJECT(submenu), "submenu_data", data);

parent = bar_pane_histogram_add_radio(submenu, NULL, _("_Linear"), func, 0, show_current, current_value);
bar_pane_histogram_add_radio(submenu, parent, _("Lo_garithmical"), func, 1, show_current, current_value);

if (menu)
{
GtkWidget *item;

item = menu_item_add(menu, _("Mode"), NULL, NULL);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
return item;
}

return submenu;
}


static GtkWidget *bar_pane_histogram_menu(PaneHistogramData *phd)
{
GtkWidget *menu;
static gboolean show_current = TRUE;
gint channel = histogram_get_channel(phd->histogram);
gint mode = histogram_get_mode(phd->histogram);

menu = popup_menu_short_lived();
bar_pane_histogram_add_channels(menu, G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd,
show_current, histogram_get_channel(phd->histogram));
bar_pane_histogram_add_logmode(menu, G_CALLBACK(bar_pane_histogram_popup_logmode_cb), phd,
show_current, histogram_get_mode(phd->histogram));

/* use the same strings as in layout_util.c */
menu_item_add_radio(menu, _("Histogram on _Red"), GINT_TO_POINTER(HCHAN_R), (channel == HCHAN_R), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
menu_item_add_radio(menu, _("Histogram on _Green"), GINT_TO_POINTER(HCHAN_G), (channel == HCHAN_G), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
menu_item_add_radio(menu, _("Histogram on _Blue"), GINT_TO_POINTER(HCHAN_B), (channel == HCHAN_B), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
menu_item_add_radio(menu, _("_Histogram on RGB"), GINT_TO_POINTER(HCHAN_RGB), (channel == HCHAN_RGB), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
menu_item_add_radio(menu, _("Histogram on _Value"), GINT_TO_POINTER(HCHAN_MAX), (channel == HCHAN_MAX), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);

menu_item_add_divider(menu);

menu_item_add_radio(menu, _("Li_near Histogram"), GINT_TO_POINTER(0), (mode == 0), G_CALLBACK(bar_pane_histogram_popup_mode_cb), phd);
menu_item_add_radio(menu, _("L_og Histogram"), GINT_TO_POINTER(1), (mode == 1), G_CALLBACK(bar_pane_histogram_popup_mode_cb), phd);

return menu;
}
Expand Down
10 changes: 5 additions & 5 deletions src/layout_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -1384,8 +1384,8 @@ static GtkActionEntry menu_entries[] = {
{ "Escape", GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"), "Escape", N_("Leave full screen"), CB(layout_menu_escape_cb) },
{ "EscapeAlt1", GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"), "Q", N_("Leave full screen"), CB(layout_menu_escape_cb) },
{ "ImageOverlayCycle",NULL, N_("_Cycle through overlay modes"), "I", N_("Cycle through Overlay modes"), CB(layout_menu_overlay_toggle_cb) },
{ "HistogramChanCycle",NULL, N_("Cycle through histogram _channels"),"K", N_("Cycle through histogram channels"), CB(layout_menu_histogram_toggle_channel_cb) },
{ "HistogramModeCycle",NULL, N_("Cycle through histogram _modes"), "J", N_("Cycle through histogram modes"), CB(layout_menu_histogram_toggle_mode_cb) },
{ "HistogramChanCycle",NULL, N_("Cycle through histogram ch_annels"),"K", N_("Cycle through histogram channels"), CB(layout_menu_histogram_toggle_channel_cb) },
{ "HistogramModeCycle",NULL, N_("Cycle through histogram mo_des"), "J", N_("Cycle through histogram modes"), CB(layout_menu_histogram_toggle_mode_cb) },
{ "HideTools", NULL, N_("_Hide file list"), "<control>H", N_("Hide file list"), CB(layout_menu_hide_cb) },
{ "SlideShowPause", GTK_STOCK_MEDIA_PAUSE, N_("_Pause slideshow"), "P", N_("Pause slideshow"), CB(layout_menu_slideshow_pause_cb) },
{ "Refresh", GTK_STOCK_REFRESH, N_("_Refresh"), "R", N_("Refresh"), CB(layout_menu_refresh_cb) },
Expand Down Expand Up @@ -1444,13 +1444,13 @@ static GtkRadioActionEntry menu_histogram_channel[] = {
{ "HistogramChanR", NULL, N_("Histogram on _Red"), NULL, N_("Histogram on Red"), HCHAN_R },
{ "HistogramChanG", NULL, N_("Histogram on _Green"), NULL, N_("Histogram on Green"), HCHAN_G },
{ "HistogramChanB", NULL, N_("Histogram on _Blue"), NULL, N_("Histogram on Blue"), HCHAN_B },
{ "HistogramChanRGB", NULL, N_("Histogram on RGB"), NULL, N_("Histogram on RGB"), HCHAN_RGB },
{ "HistogramChanV", NULL, N_("Histogram on Value"), NULL, N_("Histogram on Value"), HCHAN_MAX }
{ "HistogramChanRGB", NULL, N_("_Histogram on RGB"), NULL, N_("Histogram on RGB"), HCHAN_RGB },
{ "HistogramChanV", NULL, N_("Histogram on _Value"), NULL, N_("Histogram on Value"), HCHAN_MAX }
};

static GtkRadioActionEntry menu_histogram_mode[] = {
{ "HistogramModeLin", NULL, N_("Li_near Histogram"), NULL, N_("Linear Histogram"), 0 },
{ "HistogramModeLog", NULL, N_("Lo_g Histogram"), NULL, N_("Log Histogram"), 1 },
{ "HistogramModeLog", NULL, N_("L_og Histogram"), NULL, N_("Log Histogram"), 1 },
};


Expand Down
19 changes: 9 additions & 10 deletions src/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,16 +153,16 @@ gchar *sort_type_get_text(SortType method)
return "";
}

static GtkWidget *submenu_add_sort_item(GtkWidget *menu, GtkWidget *parent,
static GtkWidget *submenu_add_sort_item(GtkWidget *menu,
GCallback func, SortType type,
gboolean show_current, SortType show_type)
{
GtkWidget *item;

if (show_current)
{
item = menu_item_add_radio(menu, parent,
sort_type_get_text(type), (type == show_type),
item = menu_item_add_radio(menu,
sort_type_get_text(type), GINT_TO_POINTER((gint)type), (type == show_type),
func, GINT_TO_POINTER((gint)type));
}
else
Expand All @@ -179,19 +179,18 @@ GtkWidget *submenu_add_sort(GtkWidget *menu, GCallback func, gpointer data,
gboolean show_current, SortType type)
{
GtkWidget *submenu;
GtkWidget *parent;

submenu = gtk_menu_new();
g_object_set_data(G_OBJECT(submenu), "submenu_data", data);

parent = submenu_add_sort_item(submenu, NULL, func, SORT_NAME, show_current, type);
submenu_add_sort_item(submenu, func, SORT_NAME, show_current, type);
#ifdef HAVE_STRVERSCMP
submenu_add_sort_item(submenu, parent, func, SORT_NUMBER, show_current, type);
submenu_add_sort_item(submenu, func, SORT_NUMBER, show_current, type);
#endif
submenu_add_sort_item(submenu, parent, func, SORT_TIME, show_current, type);
submenu_add_sort_item(submenu, parent, func, SORT_SIZE, show_current, type);
if (include_path) submenu_add_sort_item(submenu, parent, func, SORT_PATH, show_current, type);
if (include_none) submenu_add_sort_item(submenu, parent, func, SORT_NONE, show_current, type);
submenu_add_sort_item(submenu, func, SORT_TIME, show_current, type);
submenu_add_sort_item(submenu, func, SORT_SIZE, show_current, type);
if (include_path) submenu_add_sort_item(submenu, func, SORT_PATH, show_current, type);
if (include_none) submenu_add_sort_item(submenu, func, SORT_NONE, show_current, type);

if (menu)
{
Expand Down
14 changes: 4 additions & 10 deletions src/ui_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,18 +97,12 @@ GtkWidget *menu_item_add_check(GtkWidget *menu, const gchar *label, gboolean act
return item;
}

GtkWidget *menu_item_add_radio(GtkWidget *menu, GtkWidget *parent,
const gchar *label, gboolean active,
GtkWidget *menu_item_add_radio(GtkWidget *menu, const gchar *label, gpointer item_data, gboolean active,
GCallback func, gpointer data)
{
GtkWidget *item;
GSList *group = NULL;

if (parent) group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(parent));

item = gtk_radio_menu_item_new_with_mnemonic(group, label);
if (active) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), active);
menu_item_finish(menu, item, func, data);
GtkWidget *item = menu_item_add_check(menu, label, active, func, data);
g_object_set_data(G_OBJECT(item), "menu_item_radio_data", item_data);
g_object_set(G_OBJECT(item), "draw-as-radio", TRUE, NULL);

return item;
}
Expand Down
3 changes: 1 addition & 2 deletions src/ui_menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ GtkWidget *menu_item_add_stock_sensitive(GtkWidget *menu, const gchar *label, co
GCallback func, gpointer data);
GtkWidget *menu_item_add_check(GtkWidget *menu, const gchar *label, gboolean active,
GCallback func, gpointer data);
GtkWidget *menu_item_add_radio(GtkWidget *menu, GtkWidget *parent,
const gchar *label, gboolean active,
GtkWidget *menu_item_add_radio(GtkWidget *menu, const gchar *label, gpointer item_data, gboolean active,
GCallback func, gpointer data);
void menu_item_add_divider(GtkWidget *menu);

Expand Down

0 comments on commit 9ef0898

Please sign in to comment.