1 /* 2 * Copyright (c) Tony Bybell 1999-2017. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 2 7 * of the License, or (at your option) any later version. 8 */ 9 10 #include "globals.h" 11 12 /* example-start menu menufactory.h */ 13 14 #ifndef __MENUFACTORY_H__ 15 #define __MENUFACTORY_H__ 16 17 #include <gtk/gtk.h> 18 #include <stdio.h> 19 20 #ifndef _MSC_VER 21 #include <strings.h> 22 #endif 23 24 #include <errno.h> 25 #include "currenttime.h" 26 #include "fgetdynamic.h" 27 #include "strace.h" 28 #include "debug.h" 29 #include "symbol.h" 30 #include "main.h" 31 32 void do_popup_menu (GtkWidget *my_widget, GdkEventButton *event); 33 void do_sst_popup_menu (GtkWidget *my_widget, GdkEventButton *event); 34 void get_main_menu (GtkWidget *, GtkWidget **menubar); 35 void menu_set_sensitive(void); 36 int file_quit_cmd_callback (GtkWidget *widget, gpointer data); 37 int set_wave_menu_accelerator(char *str); 38 int execute_script(char *name, int dealloc_name); 39 40 void kill_main_menu_accelerators(void); /* for conflicts with twinwave */ 41 42 struct stringchain_t 43 { 44 struct stringchain_t *next; 45 char *name; 46 }; 47 48 #ifdef MAC_INTEGRATION 49 #define WAVE_USE_MLIST_T 50 #endif 51 52 #ifdef WAVE_USE_MLIST_T 53 typedef void (*gtkwave_mlist_callback) (); 54 55 struct gtkwave_mlist_t 56 { 57 gchar *path; 58 gchar *accelerator; 59 60 gtkwave_mlist_callback callback; 61 guint callback_action; 62 63 /* possible values: 64 * "<Item>" -> create a simple item 65 * "<ToggleItem>" -> create a toggle item 66 * "<Separator>" -> create a separator 67 */ 68 gchar *item_type; 69 70 /* Extra data for some item types: 71 * ImageItem -> pointer to inlined pixbuf stream 72 * StockItem -> name of stock item 73 */ 74 gconstpointer extra_data; 75 }; 76 77 typedef struct gtkwave_mlist_t gtkwave_mlist_t; 78 79 GtkWidget *alt_menu_top(GtkWidget *window); 80 GtkWidget *alt_menu(gtkwave_mlist_t *mi, int nmenu_items, GtkWidget **wlist, GtkAccelGroup *accel, gboolean is_menubar); 81 82 #else 83 #define gtkwave_mlist_t GtkItemFactoryEntry 84 #endif 85 86 enum WV_MenuItems { 87 WV_MENU_FONV, 88 WV_MENU_FONVT, 89 WV_MENU_FRW, 90 WV_MENU_WRVCD, 91 WV_MENU_WRLXT, 92 WV_MENU_WRTIM, 93 WV_MENU_WCLOSE, 94 WV_MENU_SEP2VCD, 95 WV_MENU_FPTF, 96 #if GTK_CHECK_VERSION(2,14,0) 97 WV_MENU_SGRAB, 98 #endif 99 WV_MENU_SEP1, 100 WV_MENU_FRSF, 101 WV_MENU_FWSF, 102 WV_MENU_FWSFAS, 103 WV_MENU_SEP2, 104 WV_MENU_FRLF, 105 WV_MENU_SEP2LF, 106 #if !defined _MSC_VER 107 WV_MENU_FRSTMF, 108 WV_MENU_SEP2STMF, 109 #endif 110 #if defined(HAVE_LIBTCL) 111 WV_MENU_TCLSCR, 112 WV_MENU_TCLSEP, 113 #endif 114 WV_MENU_FQY, 115 WV_MENU_ESTMH, 116 WV_MENU_ETH, 117 WV_MENU_SEP3, 118 WV_MENU_EIB, 119 WV_MENU_EIC, 120 WV_MENU_EIA, 121 WV_MENU_EC, 122 WV_MENU_ECY, 123 WV_MENU_EP, 124 WV_MENU_DEL, 125 WV_MENU_SEP3A, 126 WV_MENU_EAHT, 127 WV_MENU_ERHA, 128 WV_MENU_SEP4, 129 WV_MENU_EE, 130 WV_MENU_ECD, 131 WV_MENU_ECU, 132 WV_MENU_SEP5, 133 WV_MENU_EDFH, 134 WV_MENU_EDFD, 135 WV_MENU_EDFSD, 136 WV_MENU_EDFB, 137 WV_MENU_EDFO, 138 WV_MENU_EDFA, 139 WV_MENU_TIME, 140 WV_MENU_ENUM, 141 WV_MENU_EDRL, 142 WV_MENU_EDR2BON, 143 WV_MENU_EDR2BOFF, 144 WV_MENU_EDFRJON, 145 WV_MENU_EDFRJOFF, 146 WV_MENU_EDFION, 147 WV_MENU_EDFIOFF, 148 WV_MENU_EDFRON, 149 WV_MENU_EDFROFF, 150 WV_MENU_XLF_0, 151 WV_MENU_XLF_1, 152 WV_MENU_XLP_0, 153 WV_MENU_XLP_1, 154 WV_MENU_TTXLP_0, 155 WV_MENU_TTXLP_1, 156 WV_MENU_EDFAOFF, 157 WV_MENU_EDFASTEP, 158 WV_MENU_EDFAINTERPOL, 159 WV_MENU_EDFAINTERPOL2, 160 WV_MENU_EDFARSD, 161 WV_MENU_EDFARAD, 162 WV_MENU_RFILL0, 163 WV_MENU_RFILL1, 164 WV_MENU_RFILLOFF, 165 WV_MENU_B2G, 166 WV_MENU_G2B, 167 WV_MENU_GBNONE, 168 WV_MENU_POPON, 169 WV_MENU_POPOFF, 170 WV_MENU_FFOON, 171 WV_MENU_FFOOFF, 172 WV_MENU_FPSHIFTON, 173 WV_MENU_FPSHIFTOFF, 174 WV_MENU_FPSHIFTVAL, 175 WV_MENU_CLRFMT0, 176 WV_MENU_CLRFMT1, 177 WV_MENU_CLRFMT2, 178 WV_MENU_CLRFMT3, 179 WV_MENU_CLRFMT4, 180 WV_MENU_CLRFMT5, 181 WV_MENU_CLRFMT6, 182 WV_MENU_CLRFMT7, 183 WV_MENU_CLRFMTC, 184 WV_MENU_SEP5A, 185 WV_MENU_KEEPXZ, 186 WV_MENU_ESCAH, 187 WV_MENU_ESCFH, 188 WV_MENU_SEP6, 189 WV_MENU_WARP, 190 WV_MENU_UNWARP, 191 WV_MENU_UNWARPA, 192 WV_MENU_SEP7A, 193 WV_MENU_EEX, 194 WV_MENU_ESH, 195 WV_MENU_SEP6A, 196 /* WV_MENU_EXA, */ 197 /* WV_MENU_CPA, */ 198 WV_MENU_TG, 199 WV_MENU_AG, 200 WV_MENU_SEP6A1, 201 WV_MENU_EHR, 202 WV_MENU_EUHR, 203 WV_MENU_EHA, 204 WV_MENU_EUHA, 205 WV_MENU_SEP6B, 206 WV_MENU_ALPHA, 207 WV_MENU_ALPHA2, 208 WV_MENU_LEX, 209 WV_MENU_RVS, 210 WV_MENU_SPS, 211 #ifdef WAVE_USE_GTK2 212 WV_MENU_SPS2, 213 #endif 214 WV_MENU_SEP7B, 215 WV_MENU_SSR, 216 WV_MENU_SSH, 217 WV_MENU_SST, 218 WV_MENU_SEP7, 219 #if !defined __MINGW32__ && !defined _MSC_VER 220 WV_MENU_OPENHS, 221 WV_MENU_OPENIHS, 222 #endif 223 WV_MENU_OPENH, 224 WV_MENU_SEP7D, 225 WV_MENU_ACOL, 226 WV_MENU_ACOLR, 227 WV_MENU_ABON, 228 WV_MENU_HTGP, 229 WV_MENU_SEP7C, 230 WV_MENU_STRSE, 231 WV_MENU_TMTT, 232 WV_MENU_TZZA, 233 WV_MENU_TZZB, 234 WV_MENU_TZZI, 235 WV_MENU_TZZO, 236 WV_MENU_TZZBFL, 237 WV_MENU_TZZBF, 238 WV_MENU_TZZTS, 239 WV_MENU_TZZTE, 240 WV_MENU_TZUZ, 241 WV_MENU_TFFS, 242 WV_MENU_TFFR, 243 WV_MENU_TFFL, 244 WV_MENU_TDDR, 245 WV_MENU_TDDL, 246 WV_MENU_TSSR, 247 WV_MENU_TSSL, 248 WV_MENU_TPPR, 249 WV_MENU_TPPL, 250 WV_MENU_MSCMD, 251 WV_MENU_MDNM, 252 WV_MENU_MCNM, 253 WV_MENU_MCANM, 254 WV_MENU_MCAB, 255 WV_MENU_MDPM, 256 WV_MENU_SEP8, 257 WV_MENU_SLE, 258 WV_MENU_SRE, 259 WV_MENU_SEP8B, 260 WV_MENU_HSWM, 261 WV_MENU_MWSON, 262 WV_MENU_MLKLT, 263 WV_MENU_MLKRT, 264 WV_MENU_MLKOFF, 265 WV_MENU_VSG, 266 WV_MENU_SEP9, 267 WV_MENU_SHW, 268 WV_MENU_FILL1, 269 WV_MENU_SEP9B, 270 WV_MENU_VSMO, 271 #ifdef WAVE_USE_GTK2 272 WV_MENU_VSMC, 273 #endif 274 WV_MENU_SEP9A, 275 WV_MENU_VSBS, 276 WV_MENU_SEP10, 277 WV_MENU_ESTS, 278 WV_MENU_SEP10A, 279 WV_MENU_VDR, 280 WV_MENU_SEP11, 281 WV_MENU_VCZ, 282 WV_MENU_SEP12, 283 WV_MENU_VTDF, 284 WV_MENU_VTMM, 285 WV_MENU_SEP13, 286 WV_MENU_VCMU, 287 WV_MENU_SEP14, 288 WV_MENU_VDRV, 289 WV_MENU_SEP15, 290 WV_MENU_VLJS, 291 WV_MENU_VRJS, 292 WV_MENU_SEP16, 293 WV_MENU_VZPS, 294 WV_MENU_VZDYN, 295 WV_MENU_VZDYNE, 296 WV_MENU_VFTP, 297 WV_MENU_SEP17, 298 WV_MENU_RULER, 299 WV_MENU_RMRKS, 300 WV_MENU_SEP17A, 301 WV_MENU_USECOLOR, 302 WV_MENU_USEBW, 303 WV_MENU_SEP18, 304 WV_MENU_LXTCC2Z, 305 WV_MENU_SEP19, 306 WV_MENU_TDSCALEX, 307 WV_MENU_TDSCALES, 308 WV_MENU_TDSCALEM, 309 WV_MENU_TDSCALEU, 310 WV_MENU_TDSCALEN, 311 WV_MENU_TDSCALEP, 312 WV_MENU_TDSCALEF, 313 WV_MENU_HWH, 314 #ifdef MAC_INTEGRATION 315 WV_MENU_HWM, 316 #endif 317 WV_MENU_HWV, 318 WV_MENU_NUMITEMS 319 }; 320 321 enum WV_RecurseType { 322 WV_RECURSE_APPEND, 323 WV_RECURSE_INSERT, 324 WV_RECURSE_REPLACE, 325 }; 326 327 void menu_new_viewer(gpointer null_data, guint callback_action, GtkWidget *widget); 328 void menu_write_vcd_file(gpointer null_data, guint callback_action, GtkWidget *widget); 329 void menu_write_lxt_file(gpointer null_data, guint callback_action, GtkWidget *widget); 330 void menu_print(gpointer null_data, guint callback_action, GtkWidget *widget); 331 void menu_read_save_file(gpointer null_data, guint callback_action, GtkWidget *widget); 332 void menu_write_save_file(gpointer null_data, guint callback_action, GtkWidget *widget); 333 void menu_write_save_file_as(gpointer null_data, guint callback_action, GtkWidget *widget); 334 void menu_read_log_file(gpointer null_data, guint callback_action, GtkWidget *widget); 335 void menu_read_stems_file(gpointer null_data, guint callback_action, GtkWidget *widget); 336 void menu_quit(gpointer null_data, guint callback_action, GtkWidget *widget); 337 void menu_set_max_hier(gpointer null_data, guint callback_action, GtkWidget *widget); 338 void menu_insert_blank_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 339 void menu_insert_comment_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 340 void menu_insert_analog_height_extension(gpointer null_data, guint callback_action, GtkWidget *widget); 341 void menu_alias(gpointer null_data, guint callback_action, GtkWidget *widget); 342 void menu_remove_aliases(gpointer null_data, guint callback_action, GtkWidget *widget); 343 void menu_cut_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 344 void menu_copy_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 345 void menu_paste_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 346 void menu_combine_down(gpointer null_data, guint callback_action, GtkWidget *widget); 347 void menu_combine_up(gpointer null_data, guint callback_action, GtkWidget *widget); 348 void menu_dataformat_hex(gpointer null_data, guint callback_action, GtkWidget *widget); 349 void menu_dataformat_dec(gpointer null_data, guint callback_action, GtkWidget *widget); 350 void menu_dataformat_signed(gpointer null_data, guint callback_action, GtkWidget *widget); 351 void menu_dataformat_bin(gpointer null_data, guint callback_action, GtkWidget *widget); 352 void menu_dataformat_oct(gpointer null_data, guint callback_action, GtkWidget *widget); 353 void menu_dataformat_ascii(gpointer null_data, guint callback_action, GtkWidget *widget); 354 void menu_dataformat_real(gpointer null_data, guint callback_action, GtkWidget *widget); 355 void menu_dataformat_rjustify_on(gpointer null_data, guint callback_action, GtkWidget *widget); 356 void menu_dataformat_rjustify_off(gpointer null_data, guint callback_action, GtkWidget *widget); 357 void menu_dataformat_invert_on(gpointer null_data, guint callback_action, GtkWidget *widget); 358 void menu_dataformat_invert_off(gpointer null_data, guint callback_action, GtkWidget *widget); 359 void menu_dataformat_reverse_on(gpointer null_data, guint callback_action, GtkWidget *widget); 360 void menu_dataformat_reverse_off(gpointer null_data, guint callback_action, GtkWidget *widget); 361 void menu_dataformat_xlate_file_0(gpointer null_data, guint callback_action, GtkWidget *widget); 362 void menu_dataformat_xlate_file_1(gpointer null_data, guint callback_action, GtkWidget *widget); 363 void menu_dataformat_xlate_proc_0(gpointer null_data, guint callback_action, GtkWidget *widget); 364 void menu_dataformat_xlate_proc_1(gpointer null_data, guint callback_action, GtkWidget *widget); 365 void menu_dataformat_analog_off(gpointer null_data, guint callback_action, GtkWidget *widget); 366 void menu_dataformat_analog_step(gpointer null_data, guint callback_action, GtkWidget *widget); 367 void menu_dataformat_analog_interpol(gpointer null_data, guint callback_action, GtkWidget *widget); 368 void menu_showchangeall(gpointer null_data, guint callback_action, GtkWidget *widget); 369 void menu_showchange(gpointer null_data, guint callback_action, GtkWidget *widget); 370 void menu_warp_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 371 void menu_unwarp_traces(gpointer null_data, guint callback_action, GtkWidget *widget); 372 void menu_unwarp_traces_all(gpointer null_data, guint callback_action, GtkWidget *widget); 373 374 void menu_dataformat_exclude_on(gpointer null_data, guint callback_action, GtkWidget *widget); 375 void menu_dataformat_exclude_off(gpointer null_data, guint callback_action, GtkWidget *widget); 376 void menu_regexp_highlight(gpointer null_data, guint callback_action, GtkWidget *widget); 377 void menu_regexp_unhighlight(gpointer null_data, guint callback_action, GtkWidget *widget); 378 void menu_dataformat_highlight_all(gpointer null_data, guint callback_action, GtkWidget *widget); 379 void menu_dataformat_unhighlight_all(gpointer null_data, guint callback_action, GtkWidget *widget); 380 void menu_alphabetize(gpointer null_data, guint callback_action, GtkWidget *widget); 381 void menu_alphabetize2(gpointer null_data, guint callback_action, GtkWidget *widget); 382 void menu_lexize(gpointer null_data, guint callback_action, GtkWidget *widget); 383 void menu_reverse(gpointer null_data, guint callback_action, GtkWidget *widget); 384 void menu_tracesearchbox(gpointer null_data, guint callback_action, GtkWidget *widget); 385 void menu_signalsearch(gpointer null_data, guint callback_action, GtkWidget *widget); 386 void menu_hiersearch(gpointer null_data, guint callback_action, GtkWidget *widget); 387 void menu_treesearch(gpointer null_data, guint callback_action, GtkWidget *widget); 388 void menu_autocoalesce(gpointer null_data, guint callback_action, GtkWidget *widget); 389 void menu_autocoalesce_reversal(gpointer null_data, guint callback_action, GtkWidget *widget); 390 void menu_autoname_bundles_on(gpointer null_data, guint callback_action, GtkWidget *widget); 391 void menu_hgrouping(gpointer null_data, guint callback_action, GtkWidget *widget); 392 void menu_movetotime(gpointer null_data, guint callback_action, GtkWidget *widget); 393 void menu_zoomsize(gpointer null_data, guint callback_action, GtkWidget *widget); 394 void menu_zoombase(gpointer null_data, guint callback_action, GtkWidget *widget); 395 void menu_fetchsize(gpointer null_data, guint callback_action, GtkWidget *widget); 396 void menu_markerbox(gpointer null_data, guint callback_action, GtkWidget *widget); 397 398 void drop_named_marker(gpointer null_data, guint callback_action, GtkWidget *widget); 399 void collect_named_marker(gpointer null_data, guint callback_action, GtkWidget *widget); 400 void collect_all_named_markers(gpointer null_data, guint callback_action, GtkWidget *widget); 401 void delete_unnamed_marker(gpointer null_data, guint callback_action, GtkWidget *widget); 402 void wave_scrolling_on(gpointer null_data, guint callback_action, GtkWidget *widget); 403 void menu_show_grid(gpointer null_data, guint callback_action, GtkWidget *widget); 404 void menu_show_mouseover(gpointer null_data, guint callback_action, GtkWidget *widget); 405 void menu_show_base(gpointer null_data, guint callback_action, GtkWidget *widget); 406 void menu_enable_dynamic_resize(gpointer null_data, guint callback_action, GtkWidget *widget); 407 void menu_center_zooms(gpointer null_data, guint callback_action, GtkWidget *widget); 408 void menu_toggle_delta_or_frequency(gpointer null_data, guint callback_action, GtkWidget *widget); 409 void menu_toggle_max_or_marker(gpointer null_data, guint callback_action, GtkWidget *widget); 410 void menu_enable_constant_marker_update(gpointer null_data, guint callback_action, GtkWidget *widget); 411 void menu_use_roundcaps(gpointer null_data, guint callback_action, GtkWidget *widget); 412 void menu_left_justify(gpointer null_data, guint callback_action, GtkWidget *widget); 413 void menu_right_justify(gpointer null_data, guint callback_action, GtkWidget *widget); 414 void menu_zoom10_snap(gpointer null_data, guint callback_action, GtkWidget *widget); 415 void menu_use_full_precision(gpointer null_data, guint callback_action, GtkWidget *widget); 416 void menu_remove_marked(gpointer null_data, guint callback_action, GtkWidget *widget); 417 void menu_lxt_clk_compress(gpointer null_data, guint callback_action, GtkWidget *widget); 418 void menu_help(gpointer null_data, guint callback_action, GtkWidget *widget); 419 void menu_version(gpointer null_data, guint callback_action, GtkWidget *widget); 420 void menu_toggle_group(gpointer null_data, guint callback_action, GtkWidget *widget); 421 422 gtkwave_mlist_t *retrieve_menu_items_array(int *num_items); 423 424 void menu_read_stems_cleanup(GtkWidget *widget, gpointer data); 425 void menu_new_viewer_tab_cleanup(GtkWidget *widget, gpointer data); 426 int menu_new_viewer_tab_cleanup_2(char *fname, int optimize_vcd); 427 428 void movetotime_cleanup(GtkWidget *widget, gpointer data); 429 void zoomsize_cleanup(GtkWidget *widget, gpointer data); 430 431 432 void set_scale_to_time_dimension_toggles(void); 433 434 void SetTraceScrollbarRowValue(int row, unsigned center); 435 436 bvptr combine_traces(int direction, Trptr single_trace_only); 437 unsigned create_group (char* name, Trptr t_composite); 438 439 /* currently only for OSX to disable OSX menus when grabbed */ 440 void wave_gtk_grab_add(GtkWidget *w); 441 void wave_gtk_grab_remove(GtkWidget *w); 442 #ifdef MAC_INTEGRATION 443 void osx_menu_sensitivity(gboolean tr); 444 #endif 445 446 #endif 447