2 * Wireshark specific stock icons
3 * Copyright 2003-2008, Ulf Lamping <ulf.lamping@web.de>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 #include "ui/gtk/stock_icons.h"
31 #include "ui/gtk/toolbar_icons.h"
32 #include "ui/gtk/wsicon.h"
34 #include "ui/utf8_entities.h"
36 /* these icons are derived from the original stock icons */
37 #include "../../image/toolbar/capture_filter_24.xpm"
38 #include "../../image/toolbar/capture_details_24.xpm"
39 #include "../../image/toolbar/display_filter_24.xpm"
40 #include "../../image/toolbar/colorize_24.xpm"
41 #include "../../image/toolbar/autoscroll_24.xpm"
42 #include "../../image/toolbar/resize_columns_24.xpm"
43 #include "../../image/toolbar/time_24.xpm"
44 #include "../../image/toolbar/internet_24.xpm"
45 #include "../../image/toolbar/web_support_24.xpm"
46 #include "../../image/toolbar/conversations_16.xpm"
47 #include "../../image/toolbar/endpoints_16.xpm"
48 #include "../../image/toolbar/expert_info_16.xpm"
49 #include "../../image/toolbar/flow_graph_16.xpm"
50 #include "../../image/toolbar/graphs_16.xpm"
51 #include "../../image/toolbar/telephony_16.xpm"
52 #include "../../image/toolbar/decode_as_16.xpm"
53 #include "../../image/toolbar/checkbox_16.xpm"
54 #include "../../image/toolbar/file_set_list_16.xpm"
55 #include "../../image/toolbar/file_set_next_16.xpm"
56 #include "../../image/toolbar/file_set_previous_16.xpm"
57 #include "../../image/toolbar/icon_color_1.xpm"
58 #include "../../image/toolbar/icon_color_2.xpm"
59 #include "../../image/toolbar/icon_color_3.xpm"
60 #include "../../image/toolbar/icon_color_4.xpm"
61 #include "../../image/toolbar/icon_color_5.xpm"
62 #include "../../image/toolbar/icon_color_6.xpm"
63 #include "../../image/toolbar/icon_color_7.xpm"
64 #include "../../image/toolbar/icon_color_8.xpm"
65 #include "../../image/toolbar/icon_color_9.xpm"
66 #include "../../image/toolbar/icon_color_0.xpm"
67 #include "../../image/toolbar/decode_24.xpm"
68 #include "../../image/toolbar/audio_player_24.xpm"
69 #include "../../image/toolbar/voip_flow_24.xpm"
70 #include "../../image/toolbar/telephone_16.xpm"
71 #include "../../image/toolbar/analyze_24.xpm"
73 #define NO_MOD (GdkModifierType)0
75 typedef struct stock_pixmap_tag{
77 const char ** xpm_data;
80 typedef struct stock_pixbuf_tag{
82 const guint8 * pb_data16; /* Optional */
83 const guint8 * pb_data24; /* Mandatory */
86 /* generate application specific stock items */
87 void stock_icons_init(void) {
88 GtkIconFactory * factory;
94 /* register non-standard pixmaps with the gtk-stock engine */
95 static const GtkStockItem stock_items[] = {
96 { (char *)WIRESHARK_STOCK_CAPTURE_INTERFACES, (char *)"_Interfaces", NO_MOD, 0, NULL },
97 { (char *)WIRESHARK_STOCK_CAPTURE_OPTIONS, (char *)"_Options", NO_MOD, 0, NULL },
98 { (char *)WIRESHARK_STOCK_CAPTURE_START, (char *)"_Start", NO_MOD, 0, NULL },
99 { (char *)WIRESHARK_STOCK_CAPTURE_STOP, (char *)"S_top", NO_MOD, 0, NULL },
100 { (char *)WIRESHARK_STOCK_CAPTURE_RESTART, (char *)"_Restart", NO_MOD, 0, NULL },
101 { (char *)WIRESHARK_STOCK_CAPTURE_FILTER, (char *)"_Capture Filter", NO_MOD, 0, NULL },
102 { (char *)WIRESHARK_STOCK_CAPTURE_FILTER_ENTRY, (char *)"_Capture Filter:", NO_MOD, 0, NULL },
103 { (char *)WIRESHARK_STOCK_CAPTURE_DETAILS, (char *)"_Details", NO_MOD, 0, NULL },
105 { (char *)WIRESHARK_STOCK_MAP, (char *)"Map", NO_MOD, 0, NULL },
107 { (char *)WIRESHARK_STOCK_GRAPH_A_B, (char *)"Graph A" UTF8_RIGHTWARDS_ARROW "B", NO_MOD, 0, NULL },
108 { (char *)WIRESHARK_STOCK_GRAPH_B_A, (char *)"Graph B" UTF8_RIGHTWARDS_ARROW "A", NO_MOD, 0, NULL },
109 { (char *)WIRESHARK_STOCK_FOLLOW_STREAM, (char *)"Follow Stream", NO_MOD, 0, NULL },
110 { (char *)WIRESHARK_STOCK_DISPLAY_FILTER, (char *)"Display _Filter", NO_MOD, 0, NULL },
111 { (char *)WIRESHARK_STOCK_DISPLAY_FILTER_ENTRY, (char *)"F_ilter:", NO_MOD, 0, NULL },
112 { (char *)WIRESHARK_STOCK_BROWSE, (char *)"_Browse...", NO_MOD, 0, NULL },
113 { (char *)WIRESHARK_STOCK_CREATE_STAT, (char *)"Create _Stat", NO_MOD, 0, NULL },
114 { (char *)WIRESHARK_STOCK_EXPORT, (char *)"_Export...", NO_MOD, 0, NULL },
115 { (char *)WIRESHARK_STOCK_IMPORT, (char *)"_Import...", NO_MOD, 0, NULL },
116 { (char *)WIRESHARK_STOCK_EDIT, (char *)"_Edit...", NO_MOD, 0, NULL },
117 { (char *)WIRESHARK_STOCK_ADD_EXPRESSION, (char *)"E_xpression..." , NO_MOD, 0, NULL }, /* plus sign coming from icon */
118 { (char *)WIRESHARK_STOCK_CLEAR_EXPRESSION, (char *)"Clea_r" , NO_MOD, 0, NULL },
119 { (char *)WIRESHARK_STOCK_APPLY_EXPRESSION, (char *)"App_ly" , NO_MOD, 0, NULL },
120 { (char *)WIRESHARK_STOCK_SAVE_ALL, (char *)"Save A_ll", NO_MOD, 0, NULL },
121 { (char *)WIRESHARK_STOCK_DONT_SAVE, (char *)"Continue _without Saving", NO_MOD, 0, NULL },
122 { (char *)WIRESHARK_STOCK_QUIT_DONT_SAVE, (char *)"Quit _without Saving", NO_MOD, 0, NULL },
123 { (char *)WIRESHARK_STOCK_STOP_DONT_SAVE, (char *)"Stop and Continue _without Saving", NO_MOD, 0, NULL },
124 { (char *)WIRESHARK_STOCK_STOP_QUIT_DONT_SAVE, (char *)"Stop and Quit _without Saving", NO_MOD, 0, NULL },
125 { (char *)WIRESHARK_STOCK_STOP_SAVE, (char *)"Stop and Save", NO_MOD, 0, NULL },
126 { (char *)WIRESHARK_STOCK_ABOUT, (char *)"_About", NO_MOD, 0, NULL },
127 { (char *)WIRESHARK_STOCK_COLORIZE, (char *)"_Colorize", NO_MOD, 0, NULL },
128 { (char *)WIRESHARK_STOCK_AUTOSCROLL, (char *)"_Auto Scroll", NO_MOD, 0, NULL },
129 { (char *)WIRESHARK_STOCK_RESIZE_COLUMNS, (char *)"Resize Columns", NO_MOD, 0, NULL },
130 { (char *)WIRESHARK_STOCK_TIME, (char *)"Time", NO_MOD, 0, NULL },
131 { (char *)WIRESHARK_STOCK_INTERNET, (char *)"Internet", NO_MOD, 0, NULL },
132 { (char *)WIRESHARK_STOCK_WEB_SUPPORT, (char *)"Web Support", NO_MOD, 0, NULL },
133 { (char *)WIRESHARK_STOCK_WIKI, (char *)"Wiki", NO_MOD, 0, NULL },
134 { (char *)WIRESHARK_STOCK_CONVERSATIONS, (char *)"Conversations", NO_MOD, 0, NULL },
135 { (char *)WIRESHARK_STOCK_ENDPOINTS, (char *)"Endpoints", NO_MOD, 0, NULL },
136 { (char *)WIRESHARK_STOCK_EXPERT_INFO, (char *)"Expert Info", NO_MOD, 0, NULL },
137 { (char *)WIRESHARK_STOCK_GRAPHS, (char *)"Graphs", NO_MOD, 0, NULL },
138 { (char *)WIRESHARK_STOCK_FLOW_GRAPH, (char *)"Flow Graph", NO_MOD, 0, NULL },
139 { (char *)WIRESHARK_STOCK_TELEPHONY, (char *)"Telephony", NO_MOD, 0, NULL },
140 { (char *)WIRESHARK_STOCK_DECODE_AS, (char *)"Decode As", NO_MOD, 0, NULL },
141 { (char *)WIRESHARK_STOCK_CHECKBOX, (char *)"Checkbox", NO_MOD, 0, NULL },
142 { (char *)WIRESHARK_STOCK_FILE_SET_LIST, (char *)"List Files", NO_MOD, 0, NULL },
143 { (char *)WIRESHARK_STOCK_FILE_SET_NEXT, (char *)"Next File", NO_MOD, 0, NULL },
144 { (char *)WIRESHARK_STOCK_FILE_SET_PREVIOUS, (char *)"Previous File", NO_MOD, 0, NULL },
145 { (char *)WIRESHARK_STOCK_FILTER_OUT_STREAM, (char *)"Filter Out This Stream", NO_MOD, 0, NULL },
146 { (char *)WIRESHARK_STOCK_ENABLE, (char *)"Enable", NO_MOD, 0, NULL },
147 { (char *)WIRESHARK_STOCK_DISABLE, (char *)"Disable", NO_MOD, 0, NULL },
148 { (char *)WIRESHARK_STOCK_COLOR1, (char *)"Color 1", NO_MOD, 0, NULL },
149 { (char *)WIRESHARK_STOCK_COLOR2, (char *)"Color 2", NO_MOD, 0, NULL },
150 { (char *)WIRESHARK_STOCK_COLOR3, (char *)"Color 3", NO_MOD, 0, NULL },
151 { (char *)WIRESHARK_STOCK_COLOR4, (char *)"Color 4", NO_MOD, 0, NULL },
152 { (char *)WIRESHARK_STOCK_COLOR5, (char *)"Color 5", NO_MOD, 0, NULL },
153 { (char *)WIRESHARK_STOCK_COLOR6, (char *)"Color 6", NO_MOD, 0, NULL },
154 { (char *)WIRESHARK_STOCK_COLOR7, (char *)"Color 7", NO_MOD, 0, NULL },
155 { (char *)WIRESHARK_STOCK_COLOR8, (char *)"Color 8", NO_MOD, 0, NULL },
156 { (char *)WIRESHARK_STOCK_COLOR9, (char *)"Color 9", NO_MOD, 0, NULL },
157 { (char *)WIRESHARK_STOCK_COLOR0, (char *)"Color 10", NO_MOD, 0, NULL },
158 { (char *)WIRESHARK_STOCK_DECODE, (char *)"Decode", NO_MOD, 0, NULL },
159 { (char *)WIRESHARK_STOCK_AUDIO_PLAYER, (char *)"Player", NO_MOD, 0, NULL },
160 { (char *)WIRESHARK_STOCK_VOIP_FLOW, (char *)"Flow", NO_MOD, 0, NULL },
161 { (char *)WIRESHARK_STOCK_TELEPHONE, (char *)"Telephone", NO_MOD, 0, NULL },
162 { (char *)WIRESHARK_STOCK_PREPARE_FILTER, (char *)"Prepare Filter", NO_MOD, 0, NULL },
163 { (char *)WIRESHARK_STOCK_ANALYZE, (char *)"Analyze", NO_MOD, 0, NULL },
164 { (char *)WIRESHARK_STOCK_SAVE, (char *)"Save", NO_MOD, 0, NULL }
167 static const stock_pixbuf_t pixbufs[] = {
168 { WIRESHARK_STOCK_ABOUT, wsicon_16_pb_data, wsicon_24_pb_data },
169 { WIRESHARK_STOCK_CAPTURE_INTERFACES, capture_interfaces_16_pb_data, capture_interfaces_24_pb_data },
170 { WIRESHARK_STOCK_CAPTURE_OPTIONS, capture_options_16_pb_data, capture_options_24_pb_data },
171 { WIRESHARK_STOCK_CAPTURE_RESTART, capture_restart_16_pb_data, capture_restart_24_pb_data },
172 { WIRESHARK_STOCK_CAPTURE_START, capture_start_16_pb_data, capture_start_24_pb_data },
173 { WIRESHARK_STOCK_CAPTURE_STOP, capture_stop_16_pb_data, capture_stop_24_pb_data },
174 { WIRESHARK_STOCK_SAVE, toolbar_wireshark_file_16_pb_data, toolbar_wireshark_file_24_pb_data},
175 { WIRESHARK_STOCK_WIKI, gnome_emblem_web_16_pb_data, gnome_emblem_web_24_pb_data },
179 /* New images should be PNGs + pixbufs above. Please don't add to this list. */
180 static const stock_pixmap_t pixmaps[] = {
181 { WIRESHARK_STOCK_CAPTURE_FILTER, capture_filter_24_xpm },
182 { WIRESHARK_STOCK_CAPTURE_FILTER_ENTRY, capture_filter_24_xpm },
183 { WIRESHARK_STOCK_CAPTURE_DETAILS, capture_details_24_xpm },
185 { WIRESHARK_STOCK_MAP, internet_24_xpm},
187 { WIRESHARK_STOCK_DISPLAY_FILTER, display_filter_24_xpm },
188 { WIRESHARK_STOCK_DISPLAY_FILTER_ENTRY, display_filter_24_xpm },
189 { WIRESHARK_STOCK_COLORIZE, colorize_24_xpm },
190 { WIRESHARK_STOCK_AUTOSCROLL, autoscroll_24_xpm },
191 { WIRESHARK_STOCK_RESIZE_COLUMNS, resize_columns_24_xpm},
192 { WIRESHARK_STOCK_TIME, time_24_xpm},
193 { WIRESHARK_STOCK_INTERNET, internet_24_xpm},
194 { WIRESHARK_STOCK_WEB_SUPPORT, web_support_24_xpm},
195 { WIRESHARK_STOCK_CONVERSATIONS, conversations_16_xpm},
196 { WIRESHARK_STOCK_ENDPOINTS, endpoints_16_xpm},
197 { WIRESHARK_STOCK_EXPERT_INFO, expert_info_16_xpm},
198 { WIRESHARK_STOCK_GRAPHS, graphs_16_xpm},
199 { WIRESHARK_STOCK_FLOW_GRAPH, flow_graph_16_xpm},
200 { WIRESHARK_STOCK_TELEPHONY, telephony_16_xpm},
201 { WIRESHARK_STOCK_DECODE_AS, decode_as_16_xpm},
202 { WIRESHARK_STOCK_CHECKBOX, checkbox_16_xpm},
203 { WIRESHARK_STOCK_FILE_SET_LIST, file_set_list_16_xpm},
204 { WIRESHARK_STOCK_FILE_SET_NEXT, file_set_next_16_xpm},
205 { WIRESHARK_STOCK_FILE_SET_PREVIOUS, file_set_previous_16_xpm},
206 { WIRESHARK_STOCK_FILTER_OUT_STREAM, display_filter_24_xpm},
207 { WIRESHARK_STOCK_ENABLE, checkbox_16_xpm},
208 { WIRESHARK_STOCK_COLOR1, icon_color_1_xpm},
209 { WIRESHARK_STOCK_COLOR2, icon_color_2_xpm},
210 { WIRESHARK_STOCK_COLOR3, icon_color_3_xpm},
211 { WIRESHARK_STOCK_COLOR4, icon_color_4_xpm},
212 { WIRESHARK_STOCK_COLOR5, icon_color_5_xpm},
213 { WIRESHARK_STOCK_COLOR6, icon_color_6_xpm},
214 { WIRESHARK_STOCK_COLOR7, icon_color_7_xpm},
215 { WIRESHARK_STOCK_COLOR8, icon_color_8_xpm},
216 { WIRESHARK_STOCK_COLOR9, icon_color_9_xpm},
217 { WIRESHARK_STOCK_COLOR0, icon_color_0_xpm},
218 { WIRESHARK_STOCK_DECODE, decode_24_xpm},
219 { WIRESHARK_STOCK_AUDIO_PLAYER, audio_player_24_xpm},
220 { WIRESHARK_STOCK_VOIP_FLOW, voip_flow_24_xpm},
221 { WIRESHARK_STOCK_TELEPHONE, telephone_16_xpm},
222 { WIRESHARK_STOCK_PREPARE_FILTER, display_filter_24_xpm},
223 { WIRESHARK_STOCK_ANALYZE, analyze_24_xpm},
227 /* Register our stock items */
228 gtk_stock_add (stock_items, G_N_ELEMENTS (stock_items));
230 /* Add our custom icon factory to the list of defaults */
231 factory = gtk_icon_factory_new();
232 gtk_icon_factory_add_default(factory);
234 /* Add pixmaps our icon factory */
235 /* Please use pixbufs (below) for new icons */
236 for (i = 0; pixmaps[i].name != NULL; i++) {
237 /* The default icon */
238 pixbuf = gdk_pixbuf_new_from_xpm_data((const char **) (pixmaps[i].xpm_data));
240 icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
242 /* XXX - add different sized icons here (some 16*16 icons look a bit blurred) */
243 /*gtk_icon_set_add_source(icon_set, const GtkIconSource *source);*/
245 gtk_icon_factory_add (factory, pixmaps[i].name, icon_set);
246 gtk_icon_set_unref (icon_set);
247 g_object_unref (G_OBJECT (pixbuf));
250 /* Add pixbufs our icon factory */
251 for (i = 0; pixbufs[i].name != NULL; i++) {
253 icon_set = gtk_icon_set_new_from_pixbuf(gdk_pixbuf_new_from_inline(-1, pixbufs[i].pb_data24, FALSE, NULL));
255 if (pixbufs[i].pb_data16) {
256 GtkIconSource *source16 = gtk_icon_source_new();
257 gtk_icon_source_set_pixbuf(source16, gdk_pixbuf_new_from_inline(-1, pixbufs[i].pb_data16, FALSE, NULL));
258 gtk_icon_source_set_size_wildcarded(source16, FALSE);
259 gtk_icon_source_set_size(source16, GTK_ICON_SIZE_MENU);
260 gtk_icon_set_add_source(icon_set, source16);
262 /* Twice? Really? Seriously? */
263 source16 = gtk_icon_source_new();
264 gtk_icon_source_set_pixbuf(source16, gdk_pixbuf_new_from_inline(-1, pixbufs[i].pb_data16, FALSE, NULL));
265 gtk_icon_source_set_size_wildcarded(source16, FALSE);
266 gtk_icon_source_set_size(source16, GTK_ICON_SIZE_SMALL_TOOLBAR);
267 gtk_icon_set_add_source(icon_set, source16);
270 gtk_icon_factory_add (factory, pixbufs[i].name, icon_set);
271 gtk_icon_set_unref (icon_set);
274 /* use default stock icons for Wireshark specifics where the icon metapher makes sense */
275 /* PLEASE DON'T REUSE STOCK ICONS IF THEY ARE USUALLY USED FOR SOME DIFFERENT MEANING!!!) */
276 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_OPEN);
277 gtk_icon_factory_add(factory, WIRESHARK_STOCK_BROWSE, icon_set);
278 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_OK);
279 gtk_icon_factory_add(factory, WIRESHARK_STOCK_CREATE_STAT, icon_set);
280 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_SAVE);
281 gtk_icon_factory_add(factory, WIRESHARK_STOCK_EXPORT, icon_set); /* XXX: needs a better icon */
282 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_OPEN);
283 gtk_icon_factory_add(factory, WIRESHARK_STOCK_IMPORT, icon_set); /* XXX: needs a better icon */
284 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_PROPERTIES);
285 gtk_icon_factory_add(factory, WIRESHARK_STOCK_EDIT, icon_set);
286 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_ADD);
287 gtk_icon_factory_add(factory, WIRESHARK_STOCK_ADD_EXPRESSION, icon_set);
288 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_CLEAR);
289 gtk_icon_factory_add(factory, WIRESHARK_STOCK_CLEAR_EXPRESSION, icon_set);
290 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_APPLY);
291 gtk_icon_factory_add(factory, WIRESHARK_STOCK_APPLY_EXPRESSION, icon_set);
292 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_CLEAR);
293 gtk_icon_factory_add(factory, WIRESHARK_STOCK_DONT_SAVE, icon_set);
294 gtk_icon_factory_add(factory, WIRESHARK_STOCK_QUIT_DONT_SAVE, icon_set);
295 gtk_icon_factory_add(factory, WIRESHARK_STOCK_STOP_DONT_SAVE, icon_set);
296 gtk_icon_factory_add(factory, WIRESHARK_STOCK_STOP_QUIT_DONT_SAVE, icon_set);
297 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_SAVE);
298 gtk_icon_factory_add(factory, WIRESHARK_STOCK_STOP_SAVE, icon_set);
299 gtk_icon_factory_add(factory, WIRESHARK_STOCK_SAVE_ALL, icon_set); /* XXX: needs a better icon */
300 icon_set = gtk_icon_factory_lookup_default(GTK_STOCK_CLOSE);
301 gtk_icon_factory_add(factory, WIRESHARK_STOCK_DISABLE, icon_set);
303 /* Drop our reference to the factory, GTK will hold a reference.*/
304 g_object_unref (G_OBJECT (factory));
313 * indent-tabs-mode: nil
316 * ex: set shiftwidth=4 tabstop=8 expandtab:
317 * :indentSize=4:tabSize=8:noTabs=true: