1 /*
2  * Author:      William Chia-Wei Cheng (bill.cheng@acm.org)
3  *
4  * Copyright (C) 2001-2009, William Chia-Wei Cheng.
5  *
6  * This file may be distributed under the terms of the Q Public License
7  * as defined by Trolltech AS of Norway and appearing in the file
8  * LICENSE.QPL included in the packaging of this file.
9  *
10  * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING
11  * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
12  * PURPOSE.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
13  * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
14  * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15  * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
16  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  *
18  * @(#)$Header: /mm2/home/cvs/bc-src/tgif/menuinfo.c,v 1.60 2011/06/09 15:55:15 cvsps Exp $
19  */
20 
21 #define _INCLUDE_FROM_MENUINFO_C_
22 
23 #include "tgifdefs.h"
24 #include "cmdids.h"
25 
26 #include "align.e"
27 #include "color.e"
28 #include "cutpaste.e"
29 #include "drawing.e"
30 #include "edit.e"
31 #include "file.e"
32 #include "font.e"
33 #include "grid.e"
34 #include "help.e"
35 #include "imgproc.e"
36 #include "import.e"
37 #include "menu.e"
38 #include "menuinfo.e"
39 #include "names.e"
40 #include "navigate.e"
41 #include "page.e"
42 #include "pattern.e"
43 #include "raster.e"
44 #include "scroll.e"
45 #include "shape.e"
46 #include "special.e"
47 #include "stream.e"
48 #include "stretch.e"
49 #include "tangram2.e"
50 #include "text.e"
51 #include "xbitmap.e"
52 
53 /* ------------------ color menus ------------------ */
54 
55 TgMenuInfo colorMenuInfo={ TGMUTYPE_COLOR, NULL, CreateColorMenu };
56 
57 /* ------------------ bitmap menus ------------------ */
58 
59 static TgMenuItemInfo modeMenuItemInfo[] = {
60    { (char*)(&choicePixmap[NOTHING]), NULL,
61      N_("Enter select/move/resize object mode"), NULL, CMDID_SELECTMODE },
62    { (char*)(&choicePixmap[DRAWTEXT]), NULL,
63      N_("Enter draw text mode"), NULL, CMDID_DRAWTEXT },
64    { (char*)(&choicePixmap[DRAWBOX]), NULL,
65      N_("Enter draw rectangle mode"), NULL, CMDID_DRAWBOX },
66    { (char*)(&choicePixmap[DRAWCORNEROVAL]), NULL,
67      N_("Enter draw corner oval mode"), NULL, CMDID_DRAWCORNEROVAL },
68    { (char*)(&choicePixmap[DRAWCENTEROVAL]), NULL,
69      N_("Enter draw center oval mode"), NULL, CMDID_DRAWCENTEROVAL },
70    { (char*)(&choicePixmap[DRAWEDGECIRCLE]), NULL,
71      N_("Enter draw edge circle mode"), NULL, CMDID_DRAWEDGEOVAL },
72    { (char*)(&choicePixmap[DRAWPOLY]), NULL,
73      N_("Enter draw poly/open spline mode"), NULL, CMDID_DRAWPOLY },
74    { (char*)(&choicePixmap[DRAWPOLYGON]), NULL,
75      N_("Enter draw polygon/close spline mode"), NULL, CMDID_DRAWPOLYGON },
76    { (char*)(&choicePixmap[DRAWARC]), NULL,
77      N_("Enter draw arc mode (specify center first)"), NULL, CMDID_DRAWARC },
78    { (char*)(&choicePixmap[DRAWEDGEARC]), NULL,
79      N_("Enter draw arc mode (specify endpoints first)"), NULL,
80      CMDID_DRAWEDGEARC },
81    { (char*)(&choicePixmap[DRAWRCBOX]), NULL,
82      N_("Enter draw rcbox mode"), NULL, CMDID_DRAWRCBOX },
83    { (char*)(&choicePixmap[FREEHAND]), NULL,
84      N_("Enter draw freehand poly/open spline mode"), NULL,
85      CMDID_FREEHANDMODE },
86    { (char*)(&choicePixmap[VERTEXMODE]), NULL,
87      N_("Enter select/move vertices mode"), NULL, CMDID_SELECTVERTEXMODE },
88    { (char*)(&choicePixmap[ROTATEMODE]), NULL,
89      N_("Enter rotate/shear object mode"), NULL, CMDID_ROTATESHEARMODE },
90    { NULL, NULL, NULL, NULL, INVALID }
91 };
92 TgMenuInfo modeMenuInfo={ TGMUTYPE_BITMAP, modeMenuItemInfo, CreateModeMenu };
93 
94 TgMenuInfo fillMenuInfo={ TGMUTYPE_BITMAP, NULL, CreateFillMenu };
95 TgMenuInfo penMenuInfo={ TGMUTYPE_BITMAP, NULL, CreatePenMenu };
96 TgMenuInfo lineWidthMenuInfo={ TGMUTYPE_BITMAP, NULL, CreateLineWidthMenu };
97 
98 static TgMenuItemInfo lineStyleMenuItemInfo[] = {
99    { (char*)(&lineStylePixmap[LS_PLAIN]), NULL,
100      N_("No arrows for a poly/open spline"), NULL,
101      CMDID_CHANGEALLSELLINESTYLE },
102    { (char*)(&lineStylePixmap[LS_RIGHT]), NULL,
103      N_("An arrow at the end of a poly/open spline"),
104      NULL, CMDID_CHANGEALLSELLINESTYLE },
105    { (char*)(&lineStylePixmap[LS_LEFT]), NULL,
106      N_("An arrow at the beginning of a poly/open spline"),
107      NULL, CMDID_CHANGEALLSELLINESTYLE },
108    { (char*)(&lineStylePixmap[LS_DOUBLE]), NULL,
109      N_("Arrows at both ends of a poly/open spline"),
110      NULL, CMDID_CHANGEALLSELLINESTYLE },
111    { NULL, NULL, NULL, NULL, INVALID }
112 };
113 TgMenuInfo lineStyleMenuInfo={ TGMUTYPE_BITMAP, lineStyleMenuItemInfo,
114                                CreateLineStyleMenu };
115 
116 static TgMenuItemInfo lineTypeMenuItemInfo[] = {
117    { (char*)(&lineTypePixmap[LT_STRAIGHT]), NULL,
118      N_("Straight line segments"), NULL, CMDID_CHANGEALLSELLINETYPE },
119    { (char*)(&lineTypePixmap[LT_SPLINE]), NULL,
120      N_("Open/closed splines"), NULL, CMDID_CHANGEALLSELLINETYPE },
121    { (char*)(&lineTypePixmap[LT_INTSPLINE]), NULL,
122      N_("Interpolated splines"), NULL, CMDID_CHANGEALLSELLINETYPE },
123    { (char*)(&lineTypePixmap[LT_STRUCT_SPLINE]), NULL,
124      N_("Structured splines"), NULL, CMDID_CHANGEALLSELLINETYPE },
125    { NULL, NULL, NULL, NULL, INVALID }
126 };
127 TgMenuInfo lineTypeMenuInfo={ TGMUTYPE_BITMAP, lineTypeMenuItemInfo,
128                               CreateLineTypeMenu };
129 
130 TgMenuInfo lineDashMenuInfo={ TGMUTYPE_BITMAP, NULL, CreateLineDashMenu };
131 
132 static TgMenuItemInfo horiAlignMenuItemInfo[] = {
133    { (char*)(&alignHoriPixmap[ALIGN_N]), NULL,
134      N_("Set horizontal alignment to none"),
135      NULL, CMDID_SETHORIZONTALALIGN },
136    { (char*)(&alignHoriPixmap[ALIGN_L]), NULL,
137      N_("Set horizontal alignment to left aligned"),
138      NULL, CMDID_SETHORIZONTALALIGN },
139    { (char*)(&alignHoriPixmap[ALIGN_C]), NULL,
140      N_("Set horizontal alignment to center aligned"),
141      NULL, CMDID_SETHORIZONTALALIGN },
142    { (char*)(&alignHoriPixmap[ALIGN_R]), NULL,
143      N_("Set horizontal alignment to right aligned"),
144      NULL, CMDID_SETHORIZONTALALIGN },
145    { (char*)(&alignHoriPixmap[ALIGN_S]), NULL,
146      N_("Set horizontal distribution to equal-spacing"),
147      NULL, CMDID_SETHORIZONTALALIGN },
148    { NULL, NULL, NULL, NULL, INVALID }
149 };
150 TgMenuInfo horiAlignMenuInfo={ TGMUTYPE_BITMAP, horiAlignMenuItemInfo,
151                                CreateHoriAlignMenu };
152 
153 static TgMenuItemInfo vertAlignMenuItemInfo[] = {
154    { (char*)(&alignVertPixmap[ALIGN_N]), NULL,
155      N_("Set vertical alignment to none"),
156      NULL, CMDID_SETVERTICALALIGN },
157    { (char*)(&alignVertPixmap[ALIGN_T]), NULL,
158      N_("Set vertical alignment to top aligned"),
159      NULL, CMDID_SETVERTICALALIGN },
160    { (char*)(&alignVertPixmap[ALIGN_M]), NULL,
161      N_("Set vertical alignment to middle aligned"),
162      NULL, CMDID_SETVERTICALALIGN },
163    { (char*)(&alignVertPixmap[ALIGN_B]), NULL,
164      N_("Set vertical alignment to bottom aligned"),
165      NULL, CMDID_SETVERTICALALIGN },
166    { (char*)(&alignVertPixmap[ALIGN_S]), NULL,
167      N_("Set vertical distribution to equal-spacing"),
168      NULL, CMDID_SETVERTICALALIGN },
169    { NULL, NULL, NULL, NULL, INVALID }
170 };
171 TgMenuInfo vertAlignMenuInfo={ TGMUTYPE_BITMAP, vertAlignMenuItemInfo,
172                                CreateVertAlignMenu };
173 
174 static TgMenuItemInfo moveModeMenuItemInfo[] = {
175    { (char*)(&moveModePixmap[CONST_MOVE]), NULL,
176      N_("Set constrained move mode"), NULL, CMDID_SETMOVEMODE },
177    { (char*)(&moveModePixmap[UNCONST_MOVE]), NULL,
178      N_("Set unconstrained move mode"), NULL, CMDID_SETMOVEMODE },
179    { NULL, NULL, NULL, NULL, INVALID }
180 };
181 TgMenuInfo moveModeMenuInfo={ TGMUTYPE_BITMAP, moveModeMenuItemInfo,
182                               CreateMoveModeMenu };
183 
184 static TgMenuItemInfo stretchableTextModeMenuItemInfo[] = {
185    { (char*)(&stretchableModePixmap[NO_STRETCHABLE_TEXT]), NULL,
186      N_("Make text objects not stretchable"), NULL, CMDID_SETSTRETCHTEXTMODE },
187    { (char*)(&stretchableModePixmap[STRETCHABLE_TEXT]), NULL,
188      N_("Make text objects stretchable"), NULL, CMDID_SETSTRETCHTEXTMODE },
189    { NULL, NULL, NULL, NULL, INVALID }
190 };
191 TgMenuInfo stretchableTextModeMenuInfo={ TGMUTYPE_BITMAP,
192                                          stretchableTextModeMenuItemInfo,
193                                          CreateStretchableTextModeMenu };
194 
195 static TgMenuItemInfo objShadowMenuItemInfo[] = {
196    { N_("Add Object Shadow"), NULL,
197      N_("Add shadows to selected objects"), NULL, CMDID_ADDOBJSHADOW },
198    { N_("Remove Object Shadow"), NULL,
199      N_("Remove shadows from selected objects"), NULL, CMDID_REMOVEOBJSHADOW },
200    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
201    { N_("Set Object Shadow Color..."), NULL,
202      N_("Set the shadow color to be used for creating object shadows"), NULL,
203      CMDID_SETOBJSHADOWCOLOR },
204    { N_("Set Object Shadow Offsets..."), NULL,
205      N_("Set the x and y offset for generic object shadow"), NULL,
206      CMDID_SETOBJSHADOWOFFSETS },
207    { NULL, NULL, NULL, NULL, INVALID }
208 };
209 static TgMenuInfo objShadowMenuInfo={ TGMUTYPE_TEXT,
210                                       objShadowMenuItemInfo,
211                                       TgCreateMenuFromMenuInfo };
212 
213 TgMenuInfo shapeMenuInfo={ TGMUTYPE_BITMAP, NULL, CreateShapeMenu };
214 
215 static TgMenuItemInfo pageLayoutMenuItemInfo[] = {
216    { (char*)(&pageLayoutPixmap[PAGE_STACK]), NULL,
217      N_("Stacked page mode"), NULL, CMDID_SETPAGELAYOUTMODE },
218    { (char*)(&pageLayoutPixmap[PAGE_TILE]), NULL,
219      N_("Tiled page mode"), NULL, CMDID_SETPAGELAYOUTMODE },
220    { NULL, NULL, NULL, NULL, INVALID }
221 };
222 TgMenuInfo pageLayoutMenuInfo={ TGMUTYPE_BITMAP, pageLayoutMenuItemInfo,
223                                 CreatePageLayoutMenu };
224 
225 static TgMenuItemInfo transPatModeMenuItemInfo[] = {
226    { (char*)(&transPatPixmap[NO_TRANSPAT_MODE]), NULL,
227      N_("Make fill and pen patterns opaque"), NULL, CMDID_SETTRANSPATMODE },
228    { (char*)(&transPatPixmap[TRANSPAT_MODE]), NULL,
229      N_("Make fill and pen patterns transparent"), NULL,
230      CMDID_SETTRANSPATMODE },
231    { NULL, NULL, NULL, NULL, INVALID }
232 };
233 TgMenuInfo transPatModeMenuInfo={ TGMUTYPE_BITMAP, transPatModeMenuItemInfo,
234                                   CreateTransPatModeMenu };
235 
236 static TgMenuItemInfo pageStyleMenuItemInfo[] = {
237    { N_("Portrait"), NULL, N_("Portrait page style"), NULL,
238      CMDID_PORTRAITMODE },
239    { N_("Landscape"), NULL, N_("Lanscape page style"), NULL,
240      CMDID_LANDSCAPEMODE },
241    { NULL, NULL, NULL, NULL, INVALID }
242 };
243 TgMenuInfo pageStyleMenuInfo={ TGMUTYPE_TEXT, pageStyleMenuItemInfo,
244                                CreatePageStyleMenu };
245 
246 /* ------------------ text menus ------------------ */
247 
248 TgMenuInfo fontMenuInfo={ TGMUTYPE_TEXT, NULL, CreateFontMenu };
249 
250 static TgMenuItemInfo fontStyleMenuItemInfo[] = {
251    { N_("Roman"), "Alt+Cntrl+o", N_("Roman text style"), NULL,
252      CMDID_CHANGEALLSELFONTSTYLE },
253    { N_("Bold"), "Alt+Cntrl+b", N_("Bold text style"), NULL,
254      CMDID_CHANGEALLSELFONTSTYLE },
255    { N_("Italic"), "Alt+Cntrl+t", N_("Italic text style"), NULL,
256      CMDID_CHANGEALLSELFONTSTYLE },
257    { N_("BoldItalic"), "Alt+Cntrl+p", N_("Bold-italic text style"), NULL,
258      CMDID_CHANGEALLSELFONTSTYLE },
259    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
260    { N_("Left"), "Alt+Cntrl+l", N_("Left justified text"), NULL,
261      CMDID_CHANGEALLSELFONTJUST },
262    { N_("Center"), "Alt+Cntrl+c", N_("Center justified text"), NULL,
263      CMDID_CHANGEALLSELFONTJUST },
264    { N_("Right"), "Alt+Cntrl+r", N_("Right justified text"), NULL,
265      CMDID_CHANGEALLSELFONTJUST },
266    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
267    { N_("No Underline"), NULL, N_("No underlined text"), NULL,
268      CMDID_CHANGEALLSELFONTUNDERLINE },
269    { N_("Underline"), NULL, N_("Underlined text"), NULL,
270      CMDID_CHANGEALLSELFONTUNDERLINE },
271    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
272    { N_("No Overline"), NULL, N_("No overlined text"), NULL,
273      CMDID_CHANGEALLSELFONTOVERLINE },
274    { N_("Overline"), NULL, N_("Overlined text"), NULL,
275      CMDID_CHANGEALLSELFONTOVERLINE },
276    { NULL, NULL, NULL, NULL, INVALID }
277 };
278 TgMenuInfo fontStyleMenuInfo={ TGMUTYPE_TEXT, fontStyleMenuItemInfo,
279                                CreateFontStyleMenu };
280 
281 TgMenuInfo fontSizeMenuInfo={ TGMUTYPE_TEXT, NULL, CreateFontSizeMenu };
282 
283 static TgMenuItemInfo stackedPageMenuItemInfo[] = {
284    { N_("Next Page"), NULL, N_("Go to next page"), NULL, CMDID_NEXTPAGE },
285    { N_("Prev Page"), NULL, N_("Go to previous page"), NULL, CMDID_PREVPAGE },
286    { N_("Goto Page..."), NULL, N_("Go to a specified page"), NULL,
287      CMDID_GOTOPAGE },
288    { N_("Name Pages..."), NULL, N_("Assign names to pages"), NULL,
289      CMDID_NAMEPAGES },
290    { N_("Edit Page File Names..."), NULL,
291      N_("Assign file names to pages to be used for PrintOneFilePerPage()"),
292      NULL, CMDID_EDITPAGEFILENAMES },
293    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
294    { N_("Add Page Before..."), NULL, N_("Add a page before the current page"),
295      NULL, CMDID_ADDPAGEBEFORE },
296    { N_("Add Page After..."), NULL,
297      N_("Add a page after the current page"), NULL, CMDID_ADDPAGEAFTER },
298    { N_("Add Page Before (Copy All)..."), NULL,
299      N_("Add a page before the current page and copy everything on the current page to the new page"),
300      NULL, CMDID_ADDPAGEBEFORECOPYALL },
301    { N_("Add Page After (Copy All)..."), NULL,
302      N_("Add a page after the current page and copy everything on the current page to the new page"),
303      NULL, CMDID_ADDPAGEAFTERCOPYALL },
304    { N_("Delete Current Page"), NULL, N_("Delete the current page"), NULL,
305      CMDID_DELETECURPAGE },
306    { N_("Delete Pages..."), NULL, N_("Delete user-specified pages"), NULL,
307      CMDID_DELETEPAGES },
308    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
309    { N_("Print One Page"), NULL, N_("Print the curret page"), NULL,
310      CMDID_PRINTONEPAGE },
311    { N_("Print Pages..."), NULL, N_("Print user-specified pages"), NULL,
312      CMDID_PRINTPAGES },
313    { N_("Print One File Per Page..."), NULL,
314      N_("Print into a separate file for each page"),
315      NULL, CMDID_PRINTONEFILEPERPAGE },
316    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
317    { N_("Specify Paper Size..."), NULL,
318      N_("Set the physical size of the paper"), NULL, CMDID_SPECIFYPAPERSIZE },
319    { N_("Set Paper Color..."), NULL, N_("Set the color of the paper"), NULL,
320      CMDID_SETPAPERCOLOR },
321    { NULL, NULL, NULL, NULL, INVALID }
322 };
323 TgMenuInfo stackedPageMenuInfo={ TGMUTYPE_TEXT, stackedPageMenuItemInfo,
324                                  TgCreateMenuFromMenuInfo };
325 
326 static TgMenuItemInfo tiledPageMenuItemInfo[] = {
327    { N_("Toggle Page Line Shown"), NULL,
328      N_("Toggle the showing of page boundaries"), NULL,
329      CMDID_TOGGLEPAGELINESHOWN },
330    { N_("Specify Drawing Size..."), NULL, N_("Change the drawing size"), NULL,
331      CMDID_SPECIFYDRAWINGSIZE },
332    { N_("Print One Page"), NULL, N_("Select and print one of the pages"), NULL,
333      CMDID_PRINTONEPAGE },
334    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
335    { N_("Specify Paper Size..."), NULL,
336      N_("Set the physical size of the paper"), NULL, CMDID_SPECIFYPAPERSIZE },
337    { N_("Set Paper Color..."), NULL, N_("Set the color of the paper"), NULL,
338      CMDID_SETPAPERCOLOR },
339    { NULL, NULL, NULL, NULL, INVALID }
340 };
341 TgMenuInfo tiledPageMenuInfo={ TGMUTYPE_TEXT, tiledPageMenuItemInfo,
342                                TgCreateMenuFromMenuInfo };
343 
344 static TgMenuItemInfo pageMenuItemInfo[] = {
345    { N_("Stacked Page"), TGMUITEM_PINNABLESUBMENU,
346      N_("StackedPage Menu"), &stackedPageMenuInfo, MENU_STACKEDPAGE },
347    { N_("Tiled Page"), TGMUITEM_PINNABLESUBMENU,
348      N_("TiledPage Menu"), &tiledPageMenuInfo, MENU_TILEDPAGE },
349    { NULL, NULL, NULL, NULL, INVALID }
350 };
351 TgMenuInfo pageMenuInfo={ TGMUTYPE_TEXT, pageMenuItemInfo, CreatePageMenu };
352 
353 static TgMenuItemInfo reduceColorMenuItemInfo[] = {
354    { N_("Reduce Colors..."), NULL,
355      N_("Reduce the number of colors of a selected image"),
356      NULL, CMDID_REDUCECOLORS },
357    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
358    { N_("Set Default Color Levels..."), NULL,
359      N_("Set the number of R G B color levels for the ``standard colors''"),
360      NULL, CMDID_SETDEFAULTCOLORLEVELS },
361    { N_("Reduce To Default Colors"), NULL,
362      N_("Reduce the colors of a selected image to standard colors"), NULL,
363      CMDID_REDUCETODEFAULTCOLORs },
364    { N_("Default Error Diffuse"), NULL,
365      N_("Error diffuse to reduce colors of a selected image to standard colors"),
366      NULL, CMDID_DEFAULTERRORDIFFUSE },
367    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
368    { N_("Reduce To Pixmap Colors..."), NULL,
369      N_("Reduce the colors of a selected image to a the colors in an XPM file"),
370      NULL, CMDID_REDUCETOPIXMAPCOLORS },
371    { N_("Reduce To Mobileweb Safe Colors"), NULL,
372      N_("Reduce the colors of a selected image to colors that are \"MobileWeb safe\" (6 shades of red/green/blue each)"),
373      NULL, CMDID_REDUCETOMOBILEWEBCOLORS },
374    { NULL, NULL, NULL, NULL, INVALID }
375 };
376 static TgMenuInfo reduceColorMenuInfo={ TGMUTYPE_TEXT, reduceColorMenuItemInfo,
377                                         TgCreateMenuFromMenuInfo };
378 
379 static TgMenuItemInfo effectsMenuItemInfo[] = {
380    { N_("Edge Detect"), NULL, N_("Perform edge-detection on a selected image"),
381      NULL, CMDID_EDGEDETECT },
382    { N_("Emboss"), NULL, N_("Convert a selected image to gray and then emboss"),
383      NULL, CMDID_EMBOSS },
384    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
385    { N_("Spread..."), NULL, N_("Spread the pixels of a selected image around"),
386      NULL, CMDID_SPREAD },
387    { N_("Sharpen"), NULL, N_("Sharpen a selected image"), NULL, CMDID_SHARPEN },
388    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
389    { N_("Blur (3x3)"), NULL, N_("Blur a selected image using a 3 by 3 filter"),
390      NULL, CMDID_BLUR3 },
391    { N_("Blur (5x5)"), NULL, N_("Blur a selected image using a 5 by 5 filter"),
392      NULL, CMDID_BLUR5 },
393    { N_("Blur (7x7)"), NULL, N_("Blur a selected image using a 7 by 7 filter"),
394      NULL, CMDID_BLUR7 },
395    { NULL, NULL, NULL, NULL, INVALID }
396 };
397 static TgMenuInfo effectsMenuInfo={ TGMUTYPE_TEXT, effectsMenuItemInfo,
398                                     TgCreateMenuFromMenuInfo };
399 
400 static TgMenuItemInfo generateMenuItemInfo[] = {
401    { N_("Run Bggen..."), NULL,
402      N_("Run 'bggen' to create an image using the size of a selected image"),
403      NULL, CMDID_RUNBGGEN },
404    { N_("Circular Bggen..."), NULL,
405      N_("Create a gray circular image using the size of a selected image"),
406      NULL, CMDID_CIRCULARBGGEN },
407    { N_("Simple Rect Bggen..."), NULL,
408      N_("Create a single-color rectanglar image using the size of selected image"),
409      NULL, CMDID_SIMPLERECTBGGEN },
410    { NULL, NULL, NULL, NULL, INVALID }
411 };
412 static TgMenuInfo generateMenuInfo={ TGMUTYPE_TEXT, generateMenuItemInfo,
413                                      TgCreateMenuFromMenuInfo };
414 
415 static TgMenuItemInfo fillReplaceMenuItemInfo[] = {
416    { N_("Replace Color"), NULL,
417      N_("Replace a color in a selected image with the current color"), NULL,
418      CMDID_REPLACECOLOR },
419    { N_("Replace Color with Transparent"), NULL,
420      N_("Replace a color in a selected image with a transparent color"), NULL,
421      CMDID_REPLACECOLORWITHTRANS },
422    { N_("Flood Fill"), NULL,
423      N_("Flood-fill a selected image with the current color"),
424      NULL, CMDID_FLOODFILL },
425    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
426    { N_("Enable Threshold-based Flood and Replace Color"), NULL,
427      N_("Enable flood fill and replace color to apply to colors similar to the selected pixel (+/- a threshold)"),
428      NULL, CMDID_TOGGLEFLOODREPLACECOLORTHRESH },
429    { N_("Set Flood and Replace Color Threshold"), NULL,
430      N_("Set flood fill and replace color threshold"),
431      NULL, CMDID_SETFLOODREPLACECOLORTHRESH },
432    { NULL, NULL, NULL, NULL, INVALID }
433 };
434 static TgMenuInfo fillReplaceMenuInfo={ TGMUTYPE_TEXT, fillReplaceMenuItemInfo,
435                                         CreateImageProcMenu };
436 static TgMenuItemInfo imageProcMenuItemInfo[] = {
437    { N_("Make Gray"), NULL, N_("Convert a selected image into gray-scale"),
438      NULL, CMDID_MAKEGRAY },
439    { N_("Brighten/Darken..."), NULL, N_("Brighten or darken a selected image"),
440      NULL, CMDID_BRIGHTENDARKEN },
441    { N_("Contrast Enhance..."), NULL, N_("Adjust contrast of a selected image"),
442      NULL, CMDID_CONTRASTENHANCE },
443    { N_("Gamma Correct..."), NULL,
444      N_("Apply gamma correction a selected image"), NULL, CMDID_GAMMA },
445    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
446    { N_("Change Saturation..."), NULL,
447      N_("Change saturation of a selected image"), NULL,
448      CMDID_CHANGESATURATION },
449    { N_("Change Hue..."), NULL, N_("Change hue of a selected image"), NULL,
450      CMDID_CHANGEHUE },
451    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
452    { N_("Invert Color"), NULL,
453      N_("Subtract every pixel of a selected image from White (in RGB-model)"),
454      NULL, CMDID_INVERTCOLOR },
455    { N_("Interpolate Color..."), NULL,
456      N_("Map pixel intensities of a selected image between two specified colors"),
457      NULL, CMDID_INTERPOLATECOLOR },
458    { N_("Color Balance..."), NULL,
459      N_("Balance the RGB components of a selected image"),
460      NULL, CMDID_COLORBALANCE },
461    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
462    { N_("Reduce Number Of Colors"), TGMUITEM_SUBMENU,
463      N_("Reduce number of colors submenu >>>"), &reduceColorMenuInfo, INVALID },
464    { N_("Effects"), TGMUITEM_SUBMENU,
465      N_("Effects submenu >>>"), &effectsMenuInfo, INVALID },
466    { N_("Generate"), TGMUITEM_SUBMENU,
467      N_("Generate submenu >>>"), &generateMenuInfo, INVALID },
468    { N_("Flood Fill / Replace Colors"), TGMUITEM_SUBMENU,
469      N_("Flood fill and replace colors submenu >>>"), &fillReplaceMenuInfo, INVALID },
470    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
471    { N_("Regenerate Image"), NULL,
472      N_("Regenerated a selected image"), NULL, CMDID_REGENERATEIMAGE },
473    { N_("Crop Image"), NULL, N_("Crop a selected image"), NULL,
474      CMDID_CROPIMAGE },
475    { N_("Get Color"), NULL,
476      N_("Pick a color from a selected image to be the current color"), NULL,
477      CMDID_GETCOLOR },
478    { N_("Create Contour"), NULL,
479      N_("Generate a contour from a point in a selected image"), NULL,
480      CMDID_CREATECONTOUR },
481    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
482    { N_("Subtract"), NULL,
483      N_("Subtract one image from another"), NULL, CMDID_SUBTRACT },
484    { N_("Alpha Combine"), NULL,
485      N_("Combine 2 images using another image as the alpha channel"), NULL,
486      CMDID_ALPHACOMBINE },
487    { N_("Xor Color"), NULL, N_("XOR the colors of one image into another"),
488      NULL, CMDID_XORCOLORS },
489    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
490    { N_("Vector Warp"), NULL,
491      N_("Warp selected image in a specified direction for a specified amount"),
492      NULL, CMDID_VECTORWARP },
493    { NULL, NULL, NULL, NULL, INVALID }
494 };
495 TgMenuInfo imageProcMenuInfo={ TGMUTYPE_TEXT, imageProcMenuItemInfo,
496                                TgCreateMenuFromMenuInfo };
497 
498 static TgMenuItemInfo driverMenuItemInfo[] = {
499    { N_("Solve"), "Alt+s", N_("Escape to driver"), NULL, CMDID_SOLVE },
500    { N_("Simulate"), "Alt+y", N_("Escape to driver"), NULL, CMDID_SIMULATE },
501    { N_("Probe"), "Alt+b", N_("Escape to driver"), NULL, CMDID_PROBE },
502    { N_("Animate"), "Alt+u", N_("Escape to driver"), NULL, CMDID_ANIMATE },
503    { N_("Escape"), "Alt+x", N_("Escape to driver"), NULL, CMDID_ESCAPE },
504    { NULL, NULL, NULL, NULL, INVALID }
505 };
506 static TgMenuInfo driverMenuInfo={ TGMUTYPE_TEXT, driverMenuItemInfo,
507                                    TgCreateMenuFromMenuInfo };
508 
509 static TgMenuItemInfo browseMenuItemInfo[] = {
510    { N_("Create Thumbnails"), NULL,
511      N_("Create a thumbnail map of all object files"), NULL,
512      CMDID_CREATETHUMBNAILS },
513    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
514    { N_("Browse X Bitmap"), NULL,
515      N_("Recursively read in all X11 bitmap files"), NULL,
516      CMDID_BROWSEXBITMAP },
517    { N_("Browse X Pixmap"), NULL,
518      N_("Recursively read in all X11 pixmap files"), NULL,
519      CMDID_BROWSEXPIXMAP },
520    { N_("Browse Other..."), NULL,
521      N_("Recursively read in all another type of files"), NULL,
522      CMDID_BROWSEOTHER },
523    { NULL, NULL, NULL, NULL, INVALID }
524 };
525 static TgMenuInfo browseMenuInfo={ TGMUTYPE_TEXT, browseMenuItemInfo,
526                                    TgCreateMenuFromMenuInfo };
527 
528 static TgMenuItemInfo importMultipageTextMenuItemInfo[] = {
529    { N_("Import Multipage Text File"), NULL, N_("Import a multipage text file"),
530      NULL, CMDID_IMPORTMULTIPAGETEXTFILE },
531    { N_("Set Margins"), NULL,
532      N_("Set margins for importing multipage text files"), NULL,
533      CMDID_SETMARGINSONIMPORTTEXT },
534    { N_("Word Wrap"), NULL,
535      N_("Turn word wrapping on and off for importing multipage text files"),
536      NULL, CMDID_TOGGLEWORDWRAPONIMPORTTEXT },
537    { NULL, NULL, NULL, NULL, INVALID }
538 };
539 static TgMenuInfo importMultipageTextMenuInfo={ TGMUTYPE_TEXT,
540 		importMultipageTextMenuItemInfo,
541 		CreateImportMutipageTextFileMenu };
542 
543 static TgMenuItemInfo captureMenuItemInfo[] = {
544    { N_("Screen Capture"), "Cntrl+1",
545      N_("Capture a rectangular area of the screen"), NULL,
546      CMDID_SCREENCAPTURE },
547    { N_("Full Screen Capture"), "Cntrl+2", N_("Capture the whole screen"), NULL,
548      CMDID_FULLSCREENCAPTURE },
549    { N_("Delayed Full Screen Capture..."), NULL,
550      N_("Capture the whole screen after a specified delay"), NULL,
551      CMDID_DELAYEDFULLSCREENCAPTURE },
552    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
553    { N_("Hide During Capture"), NULL,
554      N_("Toggle between hiding and showing tgif during capture"), NULL,
555      CMDID_TOGGLEHIDEDURINGCAPTURE },
556    { NULL, NULL, NULL, NULL, INVALID }
557 };
558 static TgMenuInfo captureMenuInfo={ TGMUTYPE_TEXT, captureMenuItemInfo,
559                                     CreateScreenCaptureMenu };
560 
561 static TgMenuItemInfo importMenuItemInfo[] = {
562    { N_("Import..."), "Alt+p", N_("Embed/Import another drawing"), NULL,
563      CMDID_IMPORT },
564    { N_("Import X Bitmap..."), "Alt+Cntrl+.",
565      N_("Embed/Import an X11 bitmap file"), NULL, CMDID_IMPORTXBITMAP },
566    { N_("Import X Pixmap..."), "Alt+Cntrl+,",
567      N_("Embed/Import an X11 pixmap file"), NULL, CMDID_IMPORTXPIXMAP },
568    { N_("Import EPS File..."), "Alt+(", N_("Link to a PS/EPS file"), NULL,
569      CMDID_IMPORTEPSFILE },
570    { N_("Import GIF File..."), NULL, N_("Embed/Import a GIF file"), NULL,
571      CMDID_IMPORTGIFFILE },
572    { N_("Import PNG File..."), NULL, N_("Embed/Import a PNG file"), NULL,
573      CMDID_IMPORTPNGFILE },
574    { N_("Import JPEG File..."), NULL, N_("Embed/Import a JPEG file"), NULL,
575      CMDID_IMPORTJPEGFILE },
576    { N_("Import PBM File..."), NULL, N_("Embed/Import a PBM file"), NULL,
577      CMDID_IMPORTPBMFILE },
578    { N_("Import PGM File..."), NULL, N_("Embed/Import a PGM file"), NULL,
579      CMDID_IMPORTPGMFILE },
580    { N_("Import PPM File..."), NULL, N_("Embed/Import a PPM file"), NULL,
581      CMDID_IMPORTPPMFILE },
582    { N_("Import Other File..."), NULL, N_("Embed/Import another type of file"),
583      NULL, CMDID_IMPORTOTHERFILE },
584    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
585    { N_("Embed EPS File..."), NULL, N_("Embed/Import a PS/EPS file"), NULL,
586      CMDID_EMBEDEPSFILE },
587    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
588    { N_("Link External JPEG File..."), NULL,
589      N_("Link to an external JPEG file"), NULL, CMDID_LINKEXTJPEGFILE },
590    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
591    { N_("Auto EPS Preview Bitmap"), NULL,
592      N_("Auto-generate a preview bitmap for a PS/EPS file when embedding/importing it (if it does not have one already)."), NULL,
593      CMDID_TOGGLEAUTOEPSPREVIEWBITMAP },
594    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
595    { N_("Paste From File..."), NULL,
596      N_("Select a file and paste the content as text"), NULL,
597      CMDID_PASTEFROMFILE },
598    { N_("Import Multipage Text File"), TGMUITEM_SUBMENU,
599      N_("Import Multipage Text File submenu >>>"),
600      &importMultipageTextMenuInfo, INVALID },
601    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
602    { N_("Browse"), TGMUITEM_SUBMENU,
603      N_("Browse submenu >>>"), &browseMenuInfo, INVALID },
604    { N_("Screen Capture"), TGMUITEM_SUBMENU,
605      N_("Screen Capture submenu >>>"), &captureMenuInfo, INVALID },
606    { NULL, NULL, NULL, NULL, INVALID }
607 };
608 static TgMenuInfo importMenuInfo={ TGMUTYPE_TEXT, importMenuItemInfo,
609                                    CreateImportMenu };
610 
611 static TgMenuItemInfo domainMenuItemInfo[] = {
612    { N_("Change Domain..."), "Alt+*", N_("Change to a different domain"), NULL,
613      CMDID_CHANGEDOMAIN },
614    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
615    { N_("Edit Domain Paths..."), NULL, N_("Edit domain paths"), NULL,
616      CMDID_EDITDOMAINPATHS },
617    { N_("Select Default Domain..."), NULL, N_("Select the default domain"),
618      NULL, CMDID_SELECTDEFAULTDOMAIN },
619    { N_("Add A Domain..."), NULL, N_("Add a new domain"), NULL,
620      CMDID_ADDADOMAIN },
621    { N_("Delete A Domain..."), NULL, N_("Delete an existing domain"), NULL,
622      CMDID_DELETEADOMAIN },
623    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
624    { N_("Reload Domain Info From X..."), NULL,
625      N_("Reload domain information from X defaults"), NULL,
626      CMDID_RELOADDOMAININFOFROMX },
627    { NULL, NULL, NULL, NULL, INVALID }
628 };
629 static TgMenuInfo domainMenuInfo={ TGMUTYPE_TEXT, domainMenuItemInfo,
630                                    CreateDomainMenu };
631 
632 TgMenuInfo exportFormatMenuInfo={ TGMUTYPE_BITMAP, NULL,
633                                   CreateExportFormatMenu };
634 
635 static TgMenuItemInfo gifAnimateMenuItemInfo[] = {
636    { N_("Export X Pixmap Deck To GIF"), NULL,
637      N_("Export a deck of X11 pixmap images to an animated GIF file"), NULL,
638      CMDID_EXPORTXPMDECKTOGIF },
639    { N_("Import GIF To X Pixmap Deck..."), NULL,
640      N_("Import an animated GIF file into a deck of X11 pixmap images"), NULL,
641      CMDID_IMPORTGIFTOXPMDECK },
642    { NULL, NULL, NULL, NULL, INVALID }
643 };
644 static TgMenuInfo gifAnimateMenuInfo={ TGMUTYPE_TEXT, gifAnimateMenuItemInfo,
645                                        TgCreateMenuFromMenuInfo };
646 
647 TgMenuInfo recentFilesMenuInfo={ TGMUTYPE_TEXT, NULL, CreateRecentFilesMenu };
648 
649 #ifdef _TGIF_DBG
650 static TgMenuItemInfo mimeMenuItemInfo[] = {
651    { N_("Fake User Agent..."), NULL,
652      N_("Set 'UserAgent' to be used when making an HTTP request"), NULL,
653      CMDID_FAKEUSERAGENT },
654    { N_("Fake Referer..."), NULL,
655      N_("Set 'Referer' to be used when making an HTTP request"), NULL,
656      CMDID_FAKEREFERER },
657    { N_("Toggle Keep Alive"), NULL,
658      N_("Toggle between using Keep-Alive and non-Keep-Alive HTTP connections"),
659      NULL, CMDID_TOGGLEKEEPALIVE },
660    { NULL, NULL, NULL, NULL, INVALID }
661 };
662 static TgMenuInfo mimeMenuInfo={ TGMUTYPE_TEXT, mimeMenuItemInfo,
663                                  TgCreateMenuFromMenuInfo };
664 #endif /* _TGIF_DBG */
665 
666 static TgMenuItemInfo fileMenuItemInfo[] = {
667    { N_("New"), "Cntrl+n", N_("Start with a blank/new drawing"), NULL,
668      CMDID_NEW },
669    { N_("Open..."), "Cntrl+o", N_("Open an existing drawing"), NULL,
670      CMDID_OPEN },
671    { N_("Import"), TGMUITEM_SUBMENU,
672      "Import submenu >>>", &importMenuInfo, INVALID },
673    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
674    { N_("Save"), "Cntrl+s", N_("Save current drawing"), NULL, CMDID_SAVE },
675    { N_("Save New..."), "Alt+Cntrl+s",
676      N_("Save current drawing in a different file"), NULL, CMDID_SAVENEW },
677    { N_("Save Selected As..."), "Alt+~",
678      N_("Save selected objects in a different file"), NULL,
679      CMDID_SAVESELECTEDAS },
680    { N_("Save Pages As..."), NULL,
681      N_("Save user-specified pages in a different file"), NULL,
682      CMDID_SAVEPAGESAS },
683    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
684    { N_("Print"), "Cntrl+p", N_("Print/export current drawing"), NULL,
685      CMDID_PRINT },
686    { N_("Print/Export Format"), TGMUITEM_SUBMENU,
687      N_("Select print/export format submenu >>>"), &exportFormatMenuInfo,
688      INVALID },
689    { N_("Set HTML Export Template..."), NULL,
690      N_("Specify a file to be used as a template for genearting HTML files"),
691      NULL, CMDID_SETHTMLEXPORTTEMPLATE },
692    { N_("Print/Export In Color"), "Alt+Cntrl+k",
693      N_("Toggle between color and black & white printing modes"), NULL,
694      CMDID_TOGGLEBWCOLORPS },
695    { N_("Print With Cmd..."), "Cntrl+-",
696      N_("Print/export current drawing with a specific command"), NULL,
697      CMDID_PRINTWITHCMD },
698    { N_("Print Selected Objects"), NULL,
699      N_("Print/export only selected objects"), NULL, CMDID_PRINTSELECTEDOBJS },
700    { N_("Print One Page"), NULL, N_("Print a page in a multipage drawing"),
701      NULL, CMDID_PRINTONEPAGE },
702    { N_("Print Pages..."), NULL, N_("Print user-specified pages"), NULL,
703      CMDID_PRINTPAGES },
704    { N_("Print One File Per Page..."), NULL,
705      N_("Print into a separate file for each page"),
706      NULL, CMDID_PRINTONEFILEPERPAGE },
707    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
708    { N_("GIF Animation"), TGMUITEM_SUBMENU,
709      N_("GIFAnimation submenu >>>"), &gifAnimateMenuInfo, INVALID },
710 #ifdef _TGIF_DBG
711    { N_("Mime"), TGMUITEM_SUBMENU, N_("Mime submenu >>>"),
712      &mimeMenuInfo, INVALID },
713 #endif /* _TGIF_DBG */
714    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
715    { N_("Print Msg Buffer..."), NULL,
716      N_("Display/save the contents of the message window"), NULL,
717      CMDID_PRINTMSGBUFFER },
718    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
719    { N_("Set Export Pixel Trim..."), NULL,
720      N_("Specify the number of pixels to trim when exporting"), NULL,
721      CMDID_SETEXPORTPIXELTRIM },
722    { N_("Set Template..."), NULL,
723      N_("Select a template file be used in STACKED page mode"), NULL,
724      CMDID_SETTEMPLATE },
725    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
726    { N_("Recent Files"), TGMUITEM_SUBMENU,
727      N_("Recently used files submenu >>>"), &recentFilesMenuInfo, INVALID },
728    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
729    { N_("Quit"), "Cntrl+q", N_("Exit <<PROGRAM_NAME>>"), NULL, CMDID_QUIT },
730    { NULL, NULL, NULL, NULL, INVALID }
731 };
732 TgMenuInfo fileMenuInfo={ TGMUTYPE_TEXT, fileMenuItemInfo, CreateFileMenu };
733 
734 static TgMenuItemInfo transformMenuItemInfo[] = {
735    { N_("Precise Scale..."), "Alt+)", N_("Scale selected objects"), NULL,
736      CMDID_PRECISESCALE },
737    { "Precise Scale Everything...", NULL, N_("Scale everything"), NULL,
738      CMDID_PRECISESCALEEVERYTHING },
739    { N_("Precise Rotate..."), NULL,
740      N_("Rotate selected objects by a specified number of degrees"), NULL,
741      CMDID_PRECISEROTATE },
742    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
743    { N_("Restore Image Width & Height"), NULL,
744      N_("Restore a seleted bitmap/pixmap/EPS object to its original dimension"),
745      NULL, CMDID_RESTOREIMAGEWH },
746    { N_("No Transform"), NULL,
747      N_("Get rid of transformations on selected simple objects"), NULL,
748      CMDID_NOTRANSFORM },
749    { NULL, NULL, NULL, NULL, INVALID }
750 };
751 static TgMenuInfo transformMenuInfo={ TGMUTYPE_TEXT, transformMenuItemInfo,
752                                       TgCreateMenuFromMenuInfo };
753 
754 static TgMenuItemInfo bitPixmapMenuItemInfo[] = {
755    { N_("Invert X Bitmap"), "Alt+Cntrl+f",
756      N_("Invert pixels for selected bitmap objects"), NULL,
757      CMDID_INVERTXBITMAP },
758    { N_("Cut Bit/Pixmap..."), "Alt+;",
759      N_("Trim/scale a selected bitmap/pixmap object"), NULL,
760      CMDID_CUTBITPIXMAP },
761    { N_("Break Up Bit/Pixmap..."), NULL,
762      N_("Break selected bitmap/pixmap object into smaller objects"), NULL,
763      CMDID_BREAKUPBITPIXMAP },
764    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
765    { N_("Remove Transparent Pixel For Pixmap..."), NULL,
766      N_("Remove transparent pixels for selected pixmap objects"), NULL,
767      CMDID_REMOVETRANSPIXEL },
768    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
769    { N_("Export Half Tone Bitmap"), NULL,
770      N_("Use Floyd-Steinberg half-tone method when exporting an X11 bitmap file"),
771      NULL, CMDID_EXPORTHALFTONEBITMAP },
772    { N_("Export Threshold Bitmap"), NULL,
773      N_("Use simple thresholding method when exporting an X11 bitmap file"),
774      NULL, CMDID_EXPORTTHRESHOLDBITMAP },
775    { N_("Set Export Bitmap Threshold..."), NULL,
776      N_("Set bitmap threshold value for the simple thresholding method"),
777      NULL, CMDID_SETEXPORTBITMAPTHRESHOLD },
778    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
779    { N_("Update EPS"), NULL, N_("Refresh a selected EPS object"), NULL,
780      CMDID_UPDATEEPS },
781    { NULL, NULL, NULL, NULL, INVALID }
782 };
783 static TgMenuInfo bitPixmapMenuInfo={ TGMUTYPE_TEXT, bitPixmapMenuItemInfo,
784                                       CreateBitPixmapMenu };
785 
786 static TgMenuItemInfo addTickMarksMenuItemInfo[] = {
787    { N_("Set Tick Mark Size..."), NULL,
788      N_("Set the size of tick marks for various commands"), NULL,
789      CMDID_SETTICKMARKSIZE },
790    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
791    { N_("Add Squares"), NULL,
792      N_("Add square tick marks at vertices of selected polys/polygons/splines"),
793      NULL, CMDID_ADDSQUARETICKMARKS },
794    { N_("Add Triangles"), NULL,
795      N_("Add triangle tick marks at vertices of selected polys/polygons/splines"),
796      NULL, CMDID_ADDTRIANGLETICKMARKS },
797    { N_("Add Circles"), NULL,
798      N_("Add circle tick marks at vertices of selected polys/polygons/splines"),
799      NULL, CMDID_ADDCIRCLETICKMARKS },
800    { N_("Add Xs"), NULL,
801      N_("Add X tick marks at vertices of selected polys/polygons/splines"),
802      NULL, CMDID_ADDXTICKMARKS },
803    { N_("Add Diamonds"), NULL,
804      N_("Add diamond tick marks at vertices of selected polys/polygons/splines"),
805      NULL, CMDID_ADDDIAMONDTICKMARKS },
806    { N_("Add Bowties"), NULL,
807      N_("Add bowtie tick marks at vertices of selected polys/polygons/splines"),
808      NULL, CMDID_ADDBOWTIETICKMARKS },
809    { N_("Add Inverted Triangles"), NULL,
810      N_("Add inverted triangle tick marks at vertices of selected polys/polygons/splines"),
811      NULL, CMDID_ADDINVTRIANGLETICKMARKS },
812    { N_("Add Plus"), NULL,
813      N_("Add plus tick marks at vertices of selected polys/polygons/splines"),
814      NULL, CMDID_ADDPLUSTICKMARKS },
815    { N_("Add Hour Glasss"), NULL,
816      N_("Add hour glass tick marks at vertices of selected polys/polygons/splines"),
817      NULL, CMDID_ADDHOURGLASSTICKMARKS },
818    { NULL, NULL, NULL, NULL, INVALID }
819 };
820 static TgMenuInfo addTickMarksMenuInfo={ TGMUTYPE_TEXT,
821                                          addTickMarksMenuItemInfo,
822                                          TgCreateMenuFromMenuInfo };
823 
824 static TgMenuItemInfo polyMenuItemInfo[] = {
825    { N_("Delete Point"), "Alt+Cntrl+d",
826      N_("Delete vertices from a poly/polygon/spline"), NULL,
827      CMDID_DELETEPOINT },
828    { N_("Add Point"), "Alt+Cntrl+a",
829      N_("Add vertices to a polygon/polygon/spline"), NULL, CMDID_ADDPOINT },
830    { N_("Extend Segment"), NULL,
831      N_("Extend or shrink a line segment"), NULL, CMDID_EXTENDSEGMENT },
832    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
833    { N_("Convert Interpolated Spline"), NULL,
834      N_("Convert selected interpolated splines to regular splines"), NULL,
835      CMDID_CONVERTINTSPLINE },
836    { N_("Smooth<->Hinge"), NULL,
837      N_("Toggle smooth/hinge vertices for a selected poly/polygon/spline"),
838      NULL, CMDID_TOGGLESMOOTHHINGE },
839 #ifdef NOT_DEFINED
840    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
841    { N_("Use Tighter Structured Splines"), NULL,
842      N_("Toggle between tighter and looser structured splines"),
843      NULL, CMDID_TOGGLETIGHTERSPLINES },
844 #endif /* NOT_DEFINED */
845    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
846    { N_("Convert To Bezier Curve"), NULL,
847      N_("Convert selected splines to Bezier curves"), NULL,
848      CMDID_CONVERTTOBEZIER },
849    { N_("Set Segments For Convert To Bezier..."), NULL,
850      N_("Set the number of segments for the convert to Bezier command"), NULL,
851      CMDID_SETBEZIERCONVERTNUMSEGS },
852    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
853    { N_("Join Poly"), NULL, N_("Join polylines or open-splines at endpoints"),
854      NULL, CMDID_JOINPOLY },
855    { N_("Cut Poly"), NULL, N_("Cut a poly/polygon at a vertex into two pieces"),
856      NULL, CMDID_CUTPOLY },
857    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
858    { N_("Make Regular Polygon..."), "Alt+\"",
859      N_("Make a selected polygon/closed spline into a regular one"), NULL,
860      CMDID_MAKEREGPOLYGON },
861    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
862    { N_("Add Tick Marks"), TGMUITEM_SUBMENU,
863      N_("Add Tick Marks submenu >>>"), &addTickMarksMenuInfo, INVALID },
864    { NULL, NULL, NULL, NULL, INVALID }
865 };
866 TgMenuInfo polyMenuInfo={ TGMUTYPE_TEXT, polyMenuItemInfo,
867                                  CreatePolySplineMenu };
868 
869 static TgMenuItemInfo textMenuItemInfo[] = {
870    { N_("Break Up Text"), "Alt+#",
871      N_("Break up selected text objects into one-character text objects"), NULL,
872      CMDID_BREAKUPTEXT },
873    { N_("Set Text Fill Pattern Color"), NULL,
874      N_("Set the fill pattern color of a text object to be the current color"),
875      NULL, CMDID_SETTEXTFILLPATTERNCOLOR },
876    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
877    { N_("Insert Right Superscript"), "Alt+Cntrl+6",
878      N_("Insert superscript to the right of the text cursor"), NULL,
879      CMDID_INSERTRIGHTSUPERSCRIPT },
880    { N_("Insert Right Subscript"), "Alt+Cntrl+5",
881      N_("Insert subscript to the right of the text cursor"), NULL,
882      CMDID_INSERTRIGHTSUBSCRIPT },
883    { N_("Insert Left Superscript"), NULL,
884      N_("Insert superscript to the left of the text cursor"), NULL,
885      CMDID_INSERTLEFTSUPERSCRIPT },
886    { N_("Insert Left Subscript"), NULL,
887      N_("Insert subscript to the left of the text cursor"), NULL,
888      CMDID_INSERTLEFTSUBSCRIPT },
889    { N_("Insert Center Superscript"), NULL,
890      N_("Insert superscript above the text cursor"), NULL,
891      CMDID_INSERTCENTERSUPERSCRIPT },
892    { N_("Insert Center Subscript"), NULL,
893      N_("Insert subscript below the text cursor"), NULL,
894      CMDID_INSERTCENTERSUBSCRIPT },
895    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
896    { N_("Insert Symbol..."), NULL,
897      N_("Insert a symbol from the Symbol Font"), NULL,
898      CMDID_INSERTSYMBOL },
899 #ifdef _TGIF_DBG
900    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
901    { N_("Insert Hex/Octal Character..."), NULL,
902      N_("Insert a character using hex or octal code"), NULL,
903      CMDID_INSERTHEXOCTALCHAR },
904 #endif /* _TGIF_DBG */
905    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
906    { N_("Reset input method..."), NULL,
907      N_("Reset connection to the input method (in case it is stuck)"), NULL,
908      CMDID_RESETINMETHOD },
909    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
910    { N_("Insert Thin Space..."), NULL,
911      N_("Insert a think space at the text cursor"), NULL,
912      CMDID_INSERTTHINSPACE },
913    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
914    { N_("Insert Vertical Offset..."), NULL,
915      N_("Insert a vertical offset at the text cursor"), NULL,
916      CMDID_INSERTVERTICALOFFSET },
917    { N_("Remove Vertical Offset..."), NULL,
918      N_("Remove any vertical offset at the text cursor"), NULL,
919      CMDID_REMOVEVERTICALOFFSET },
920    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
921    { N_("Set Script Fraction..."), NULL,
922      N_("Set the relative size of super/subscript text"), NULL,
923      CMDID_SETSCRIPTFRACTION },
924    { NULL, NULL, NULL, NULL, INVALID }
925 };
926 static TgMenuInfo textMenuInfo={ TGMUTYPE_TEXT, textMenuItemInfo,
927                                  CreateEditTextMenu };
928 
929 static TgMenuItemInfo createObjectMenuItemInfo[] = {
930    { N_("Input Poly Pts"), NULL,
931      N_("Read points from terminal and create a poly"), NULL,
932      CMDID_INPUTPOLYPTS },
933    { N_("Input Polygon Pts"), NULL,
934      N_("Read points from terminal and create a polygon"),
935      NULL, CMDID_INPUTPOLYGONPTS },
936    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
937    { N_("Add Tick Marks"), TGMUITEM_SUBMENU,
938      N_("Add Tick Marks submenu >>>"), &addTickMarksMenuInfo, INVALID },
939    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
940    { N_("Specify An Arc..."), "Alt+9", N_("Create and specify an arc"), NULL,
941      CMDID_SPECIFYANARC },
942    { N_("Get Bounding Box"), NULL,
943      N_("Get rectangular bounding boxes of selected objects"), NULL,
944      CMDID_GETBOUNDINGBOX },
945    { N_("Create Rectangle From Bounding Box"), NULL,
946      N_("Create a rectangle from the overall bounding box of selected objects"), NULL,
947      CMDID_NEWRECTFROMBOUNDINGBOX },
948    { N_("Create Oval From Bounding Box"), NULL,
949      N_("Create an oval from the overall bounding box of selected objects"), NULL,
950      CMDID_NEWOVALFROMBOUNDINGBOX },
951    { N_("Create Rounded-corner Rectangle From Bounding Box"), NULL,
952      N_("Create a rounded-corner rectangle from the overall bounding box of selected objects"), NULL,
953      CMDID_NEWRCBOXFROMBOUNDINGBOX },
954    { N_("Create Pixmap From Selected"), NULL,
955      N_("Create an X11 pixmap object from selected objects"), NULL,
956      CMDID_CREATEPIXMAPFROMSEL },
957    { NULL, NULL, NULL, NULL, INVALID }
958 };
959 static TgMenuInfo createObjectMenuInfo={ TGMUTYPE_TEXT,
960                                          createObjectMenuItemInfo,
961                                          TgCreateMenuFromMenuInfo };
962 
963 static TgMenuItemInfo editMenuItemInfo[] = {
964    { N_("Redraw"), "Cntrl+r", N_("Redraw canvas window"), NULL, CMDID_REDRAW },
965    { N_("Duplicate"), "Cntrl+d", N_("Duplicate selected objects"), NULL,
966      CMDID_DUPLICATE },
967    { N_("Delete"), NULL, N_("Delete selected objects"), NULL, CMDID_DELETE },
968    { N_("Select All"), "Cntrl+a", N_("Select all objects on the current page"),
969      NULL, CMDID_SELECTALL },
970    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
971    { N_("Undo"), "Cntrl+z", N_("Undo the most recent command"), NULL,
972      CMDID_UNDO },
973    { N_("Redo"), "Cntrl+y", N_("Redo the most undone command"), NULL,
974      CMDID_REDO },
975    { N_("Flush Undo Buffer"), NULL, N_("Flush undo buffer and unused colors"),
976      NULL, CMDID_FLUSHUNDOBUFFER },
977    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
978    { N_("Copy"), "Cntrl+c", N_("Copy selected objects into the cut buffer"),
979      NULL, CMDID_COPY },
980    { N_("Copy Plain Text As Object"), NULL,
981      N_("Copy highlighted plain text as an object into the cut buffer (to be pasted into Tgif)"), NULL,
982      CMDID_COPYPLAINTEXTASOBJECT },
983    { N_("Cut"), NULL, N_("Cut selected objects into the cut buffer"), NULL,
984      CMDID_CUT },
985    { N_("Paste"), "Cntrl+v", N_("Paste from the cut buffer"), NULL,
986      CMDID_PASTE },
987    { N_("Paste From File..."), NULL,
988      N_("Select a file and paste the content as text"), NULL,
989      CMDID_PASTEFROMFILE },
990    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
991    { N_("Copy Double-byte (UTF-8) String"), NULL,
992      N_("Copy selected double-byte text string into the cut buffer (UTF-8) encoding"), NULL,
993      CMDID_COPYUTF8 },
994    { N_("Paste Double-byte (UTF-8) String"), NULL,
995      N_("Paste from the cut buffer (UTF-8 encoding) into a double-byte text object"), NULL,
996      CMDID_PASTEUTF8 },
997    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
998    { N_("Generic Object Shadow"), TGMUITEM_SUBMENU,
999      N_("Generic Object Shadow submenu >>>"), &objShadowMenuInfo, INVALID },
1000    { N_("Shape"), TGMUITEM_PINNABLESUBMENU,
1001      N_("Shape submenu >>>"), &shapeMenuInfo, MENU_SHAPE },
1002    { N_("Set Shape Shadow..."), NULL, N_("Specify the shadow for shapes"), NULL,
1003      CMDID_SETSHAPESHADOW },
1004    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1005    { N_("Image Proc"), TGMUITEM_PINNABLESUBMENU,
1006      N_("ImageProc submenu >>>"), &imageProcMenuInfo, MENU_IMAGEPROC },
1007    { N_("Properties"), TGMUITEM_PINNABLESUBMENU,
1008      N_("Properties submenu >>>"), &propertiesMenuInfo, MENU_PROPERTIES },
1009    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1010    { N_("Transformation"), TGMUITEM_SUBMENU,
1011      N_("Transformation submenu >>>"), &transformMenuInfo, INVALID },
1012    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1013    { N_("Bitmap/Pixmap/EPS"), TGMUITEM_SUBMENU,
1014      N_("Bitmap/Pixmap/EPS submenu >>>"), &bitPixmapMenuInfo, INVALID },
1015    { N_("Poly/Polygon"), TGMUITEM_SUBMENU,
1016      N_("Poly/Polygon submenu >>>"), &polyMenuInfo, INVALID },
1017    { N_("Text"), TGMUITEM_SUBMENU, N_("Text submenu >>>"), &textMenuInfo,
1018      INVALID },
1019    { N_("Create Object"), TGMUITEM_SUBMENU,
1020      N_("Create object submenu >>>"), &createObjectMenuInfo, INVALID },
1021    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1022    { N_("Push Current Choice"), "Cntrl+e",
1023      N_("Save/restore current drawing mode"), NULL, CMDID_PUSHCURCHOICE },
1024    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1025    { N_("Find Case Sensitive..."), "Alt+Cntrl+0",
1026      N_("Find string in visible text objects (case sensitive)"), NULL,
1027      CMDID_FINDCASESENSITIVE },
1028    { N_("Find No Case..."), "Alt+Cntrl+9",
1029      N_("Find string in visible text objects (case insensitive)"), NULL,
1030      CMDID_FINDNOCASE },
1031    { N_("Find Again"), "Alt+Cntrl+=", N_("Repeat the last Find command"), NULL,
1032      CMDID_FINDAGAIN },
1033 /*
1034    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1035    { N_("ConnectPins", NULL, "Connect pins", NULL, CMDID_CONNECTPINS },
1036  */
1037    { NULL, NULL, NULL, NULL, INVALID }
1038 };
1039 TgMenuInfo editMenuInfo={ TGMUTYPE_TEXT, editMenuItemInfo, CreateEditMenu };
1040 
1041 static TgMenuItemInfo alignMenuItemInfo[] = {
1042    { N_("Align Objects Top"), "Alt+{",
1043      N_("Align top sides of selected objects"), NULL, CMDID_ALIGNOBJSTOP },
1044    { N_("Align Objects Middle"), "Alt++",
1045      N_("Align vertical centers of selected objects"),
1046      NULL, CMDID_ALIGNOBJSMIDDLE },
1047    { N_("Align Objects Bottom"), "Alt+}",
1048      N_("Align bottom sides of selected objects"), NULL,
1049      CMDID_ALIGNOBJSBOTTOM },
1050    { N_("Align Objects Left"), "Alt+[",
1051      N_("Align left sides of selected objects"), NULL, CMDID_ALIGNOBJSLEFT },
1052    { N_("Align Objects Center"), "Alt+=",
1053      N_("Align horizontal centers of selected objects"),
1054      NULL, CMDID_ALIGNOBJSCENTER },
1055    { N_("Align Objects Right"), "Alt+]",
1056      N_("Align right sides of selected objects"), NULL, CMDID_ALIGNOBJSRIGHT },
1057    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1058    { N_("Center An End Point"), NULL,
1059      N_("Move an endpoint of a selected poly to the center of another object"),
1060      NULL, CMDID_CENTERANENDPOINT },
1061    { NULL, NULL, NULL, NULL, INVALID }
1062 };
1063 static TgMenuInfo alignMenuInfo={ TGMUTYPE_TEXT, alignMenuItemInfo,
1064                                   TgCreateMenuFromMenuInfo };
1065 
1066 static TgMenuItemInfo sizeMenuItemInfo[] = {
1067    { N_("Size To Widest"), NULL,
1068      N_("Resize all selected objects to be as wide as the widest one"), NULL,
1069      CMDID_SIZETOWIDEST },
1070    { N_("Size To Narrowest"), NULL,
1071      N_("Resize all selected objects to be as narrow as the narrowest one"),
1072      NULL, CMDID_SIZETONARROWEST },
1073    { N_("Size To Tallest"), NULL,
1074      N_("Resize all selected objects to be as tall as the tallest one"), NULL,
1075      CMDID_SIZETOTALLEST },
1076    { N_("Size To Shortest"), NULL,
1077      N_("Resize all selected objects to be as short as the shortest one"), NULL,
1078      CMDID_SIZETOSHORTEST },
1079    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1080    { N_("Size To Given Width & Height..."), NULL,
1081      N_("Resize all selected objects to a specified width and height"), NULL,
1082      CMDID_SIZETOGIVENWIDTHHEIGHT },
1083    { N_("Size To Given Width..."), NULL,
1084      N_("Resize all selected objects to a specified width"), NULL,
1085      CMDID_SIZETOGIVENWIDTH },
1086    { N_("Size To Given Height..."), NULL,
1087      N_("Resize all selected objects to a specified height"), NULL,
1088      CMDID_SIZETOGIVENHEIGHT },
1089    { NULL, NULL, NULL, NULL, INVALID }
1090 };
1091 static TgMenuInfo sizeMenuInfo={ TGMUTYPE_TEXT, sizeMenuItemInfo,
1092                                  TgCreateMenuFromMenuInfo };
1093 
1094 static TgMenuInfo alignObjsDirectMenuInfo={ TGMUTYPE_BITMAP, NULL,
1095                                             CreateAlignObjsDirectMenu };
1096 static TgMenuInfo alignToGridDirectMenuInfo={ TGMUTYPE_BITMAP, NULL,
1097                                               CreateAlignToGridDirectMenu };
1098 static TgMenuInfo alignToPageDirectMenuInfo={ TGMUTYPE_BITMAP, NULL,
1099                                               CreateAlignToPageDirectMenu };
1100 
1101 static TgMenuInfo distrObjsDirectMenuInfo={ TGMUTYPE_BITMAP, NULL,
1102                                             CreateDistributeDirectMenu };
1103 
1104 static TgMenuItemInfo autoRotatePivotMenuItemInfo[] = {
1105    { (char*)(&rotateModePixmap[AUTO_ROTATE_PIVOT]), NULL,
1106      N_("Set rotation pivot mode to automatic"),
1107      NULL, CMDID_CHOOSEROTATEPIVOT },
1108    { (char*)(&rotateModePixmap[USER_ROTATE_PIVOT]), NULL,
1109      N_("Set rotation pivot mode to user-specified"),
1110      NULL, CMDID_CHOOSEROTATEPIVOT },
1111    { NULL, NULL, NULL, NULL, INVALID }
1112 };
1113 TgMenuInfo autoRotatePivotMenuInfo={ TGMUTYPE_BITMAP,
1114                                      autoRotatePivotMenuItemInfo,
1115                                      CreateAutoRotatePivotMenu };
1116 
1117 static TgMenuItemInfo moveStdRotatePivotMenuItemInfo[] = {
1118    { N_("Move Rotation Pivot To Center"), NULL,
1119      N_("Move rotation pivot to the center of selected objects"), NULL,
1120      CMDID_MOVEROTATEPIVOTCENTER },
1121    { N_("Move Rotation Pivot To LeftTop Corner"), NULL,
1122      N_("Move rotation pivot to the left-top corner of selected objects"),
1123      NULL, CMDID_MOVEROTATEPIVOTLT },
1124    { N_("Move Rotation Pivot To RightTop Corner"), NULL,
1125      N_("Move rotation pivot to the right-top corner of selected objects"),
1126      NULL, CMDID_MOVEROTATEPIVOTRT },
1127    { N_("Move Rotation Pivot To LeftBottom Corner"), NULL,
1128      N_("Move rotation pivot to the left-bottom corner of selected objects"),
1129      NULL, CMDID_MOVEROTATEPIVOTLB },
1130    { N_("Move Rotation Pivot To RightBottom Corner"), NULL,
1131      N_("Move rotation pivot to the right-bottom corner of selected objects"),
1132      NULL, CMDID_MOVEROTATEPIVOTRB },
1133    { N_("Move Rotation Pivot To Left Center"), NULL,
1134      N_("Move rotation pivot to the left center of selected objects"),
1135      NULL, CMDID_MOVEROTATEPIVOTLEFT },
1136    { N_("Move Rotation Pivot To Right Center"), NULL,
1137      N_("Move rotation pivot to the right center of selected objects"),
1138      NULL, CMDID_MOVEROTATEPIVOTRIGHT },
1139    { N_("Move Rotation Pivot To Top Center"), NULL,
1140      N_("Move rotation pivot to the top center of selected objects"),
1141      NULL, CMDID_MOVEROTATEPIVOTTOP },
1142    { N_("Move Rotation Pivot To Bottom Center"), NULL,
1143      N_("Move rotation pivot to the bottom center of selected objects"),
1144      NULL, CMDID_MOVEROTATEPIVOTBOTTOM },
1145    { NULL, NULL, NULL, NULL, INVALID }
1146 };
1147 TgMenuInfo rotatePivotMenuInfo={ TGMUTYPE_TEXT, moveStdRotatePivotMenuItemInfo,
1148                                 CreateMoveStdRotatePivotMenu };
1149 
1150 static TgMenuItemInfo flipRotateMenuItemInfo[] = {
1151    { N_("Flip Horizontal"), "Alt+h",
1152      N_("Flip selected objects horizontally"), NULL, CMDID_FLIPHORIZONTAL },
1153    { N_("Flip Vertical"), "Alt+v", N_("Flip selected objects vertically"), NULL,
1154      CMDID_FLIPVERTICAL },
1155    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1156    { N_("Rotate Clock-Wise"), "Alt+w", N_("Rotate selected objects clockwise"),
1157      NULL, CMDID_ROTATECLOCKWISE },
1158    { N_("Rotate Counter"), "Alt+c",
1159      N_("Rotate selected objects counter-clockwise"), NULL,
1160      CMDID_ROTATECOUNTER },
1161    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1162    { N_("Set Text Rotation..."), NULL, N_("Set text rotation in degrees"), NULL,
1163      CMDID_SETTEXTROTATION },
1164    { N_("Set Rotation Increment..."), NULL,
1165      N_("Set rotation increment in degrees"), NULL,
1166      CMDID_SETROTATIONINCREMENT },
1167    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1168    { N_("Rotation Pivot"), TGMUITEM_SUBMENU,
1169      N_("Rotation pivot submenu >>>"), &autoRotatePivotMenuInfo, INVALID },
1170    { N_("Reset Rotation Pivot"), NULL,
1171      N_("Reset user-specified rotation pivot to center of selected objects"),
1172      NULL, CMDID_RESETROTATEPIVOT },
1173    { N_("Speficy Rotation Pivot..."), NULL,
1174      N_("Specify the coordinates for the user-specified rotation pivot"), NULL,
1175      CMDID_SPECIFYROTATEPIVOT },
1176    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1177    { N_("Next Poly/Polygon Rotation Pivot"), NULL,
1178      N_("Move the rotation pivot to the next vertex of a poly/polygon object"),
1179      NULL, CMDID_NEXTPOLYROTATEPIVOT },
1180    { N_("Move Rotation Pivot To Arc Center"), NULL,
1181      N_("Move the rotation pivot to the center of the circle which an arc object is part of"),
1182      NULL, CMDID_MOVEROTATEPIVOTARCCNTR },
1183    { N_("Move Standard Rotation Pivot"), TGMUITEM_SUBMENU,
1184      N_("Move standard rotation pivot submenu >>>"), &rotatePivotMenuInfo,
1185      INVALID },
1186    { NULL, NULL, NULL, NULL, INVALID }
1187 };
1188 TgMenuInfo flipRotateMenuInfo={ TGMUTYPE_TEXT, flipRotateMenuItemInfo,
1189                                 CreateFlipRotateMenu };
1190 
1191 static TgMenuItemInfo arrangeMenuItemInfo[] = {
1192    { N_("Front"), "Cntrl+f", N_("Bring selected objects to the front"), NULL,
1193      CMDID_FRONT },
1194    { N_("Back"), "Cntrl+b", N_("Send selected objects to the back"), NULL,
1195      CMDID_BACK },
1196    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1197    { N_("Group"), "Cntrl+g",
1198      N_("Group selected objects into a compound object"), NULL, CMDID_GROUP },
1199    { N_("UnGroup"), "Cntrl+u",
1200      N_("Break up selected grouped objects into its components"), NULL,
1201      CMDID_UNGROUP },
1202    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1203    { N_("Lock"), "Alt+<", N_("Lock the positions of selected objects"), NULL,
1204      CMDID_LOCK },
1205    { N_("UnLock"), "Alt+>", N_("UnLock the positions of selected objects"),
1206      NULL, CMDID_UNLOCK },
1207    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1208    { N_("Horizontal Align"), TGMUITEM_PINNABLESUBMENU,
1209      N_("HoriAlign submenu >>>"), &horiAlignMenuInfo, MENU_HORIALIGN },
1210    { N_("Vertical Align"), TGMUITEM_PINNABLESUBMENU,
1211      N_("VertAlign submenu >>>"), &vertAlignMenuInfo,
1212      MENU_VERTALIGN },
1213    { N_("Align Objects"), "Cntrl+l",
1214      N_("Align selected objects with each other using the current alignments"),
1215      NULL, CMDID_ALIGNOBJS },
1216    { N_("Align Objects Direct"), TGMUITEM_SUBMENU,
1217      N_("Align objects direct submenu >>>"), &alignObjsDirectMenuInfo,
1218      INVALID },
1219    { N_("Align To Grid"), "Cntrl+t",
1220      N_("Align selected objects to grid points using the current alignments"),
1221      NULL, CMDID_ALIGNTOGRID },
1222    { N_("Align To Grid Direct"), TGMUITEM_SUBMENU,
1223      N_("Align to grid direct submenu >>>"), &alignToGridDirectMenuInfo,
1224      INVALID },
1225    { N_("Align To Page"), "Alt+&",
1226      N_("Align selected objects to the page using the current alignments"),
1227      NULL, CMDID_ALIGNTOPAGE },
1228    { N_("Align To Page Direct"), TGMUITEM_SUBMENU,
1229      N_("Align to page direct submenu >>>"), &alignToPageDirectMenuInfo,
1230      INVALID },
1231    { N_("More Object Alignments"), TGMUITEM_SUBMENU,
1232      N_("Align objects submenu >>>"), &alignMenuInfo, INVALID },
1233    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1234    { N_("Size Objects"), TGMUITEM_SUBMENU,
1235      N_("Size objects submenu >>>"), &sizeMenuInfo, INVALID },
1236    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1237    { N_("Distribute Objects"), "Alt+l",
1238      N_("Distribute selected objects using the current alignments"), NULL,
1239      CMDID_DISTRIBUTEOBJS },
1240    { N_("Distribute Objects Direct"), TGMUITEM_SUBMENU,
1241      N_("Distribute objects direct submenu >>>"), &distrObjsDirectMenuInfo,
1242      INVALID },
1243    { N_("Layout On Arc"), NULL, N_("Layout objects on an arc"), NULL,
1244      CMDID_LAYOUTONARC },
1245    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1246    { N_("Abut Horizontal"), "Alt+_",
1247      N_("Squish selected objects together horizontally"),
1248      NULL, CMDID_ABUTHORIZONTAL },
1249    { N_("Abut Vertical"), "Alt+|",
1250      N_("Squish selected objects together vertically"), NULL,
1251      CMDID_ABUTVERTICAL },
1252    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1253    { N_("Flip/Rotate"), TGMUITEM_SUBMENU,
1254      N_("Flip and rotate submenu >>>"), &flipRotateMenuInfo, INVALID },
1255    { NULL, NULL, NULL, NULL, INVALID }
1256 };
1257 TgMenuInfo arrangeMenuInfo={ TGMUTYPE_TEXT, arrangeMenuItemInfo,
1258                              TgCreateMenuFromMenuInfo };
1259 
1260 static TgMenuItemInfo scrollModeMenuItemInfo[] = {
1261    { N_("Off"), NULL, N_("Do not update canvas window while scrolling"), NULL,
1262      CMDID_CHANGESCROLLMODE },
1263    { N_("Jump"), NULL, N_("Jump update canvas window while scrolling"), NULL,
1264      CMDID_CHANGESCROLLMODE },
1265    { N_("Smooth"), NULL, N_("Update canvas window smoothly while scrolling"),
1266      NULL, CMDID_CHANGESCROLLMODE },
1267    { NULL, NULL, NULL, NULL, INVALID }
1268 };
1269 TgMenuInfo scrollModeMenuInfo={ TGMUTYPE_TEXT, scrollModeMenuItemInfo,
1270                                 CreateScrollModeMenu };
1271 
1272 static TgMenuItemInfo showHideMenuItemInfo[] = {
1273    { N_("Show Bit/Pixmap"), NULL,
1274      N_("Toggle between hiding and showing detailed bitmap/pixmap objects"),
1275      NULL, CMDID_TOGGLEMAPSHOWN },
1276    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1277    { N_("Show Measurement"), NULL,
1278      N_("Show cursor measurements"), NULL, CMDID_TOGGLESHOWMEASUREMENT },
1279    { N_("Show Measurement in Tooltip"), NULL,
1280      N_("Show cursor measurements in tooltip"), NULL,
1281      CMDID_TOGGLESHOWMEASUREMENTINTT },
1282    { N_("Set Measure Unit..."), NULL, N_("Set the unit of measurements"), NULL,
1283      CMDID_SETMEASUREUNIT },
1284    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1285    { N_("Enable Right Margin"), NULL,
1286      N_("Toggle between using (simple) right margin or not"), NULL,
1287      CMDID_TOGGLERIGHTMARGIN },
1288    { N_("Specify Right Margin..."), NULL,
1289      N_("Specify the (simple) right margin"), NULL,
1290      CMDID_SPECIFYRIGHTMARGIN },
1291    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1292    { N_("Show Menubar"), NULL, N_("Show menubar window"), NULL,
1293      CMDID_TOGGLESHOWMENUBAR },
1294    { N_("Show Choice"), NULL, N_("Show choice and message window"), NULL,
1295      CMDID_TOGGLESHOWCHOICEBAR },
1296    { N_("Show Status"), NULL, N_("Show status window"), NULL,
1297      CMDID_TOGGLESHOWSTATUS },
1298    { N_("Show Mode"), NULL, N_("Show mode window"), NULL,
1299      CMDID_TOGGLESHOWMODE },
1300    { N_("Show Chat"), NULL, N_("Show chat window"), NULL,
1301      CMDID_TOGGLESHOWCHAT },
1302    { NULL, NULL, NULL, NULL, INVALID }
1303 };
1304 static TgMenuInfo showHideMenuInfo={ TGMUTYPE_TEXT, showHideMenuItemInfo,
1305                                      CreateShowHideMenu };
1306 
1307 static TgMenuItemInfo slideShowModeMenuItemInfo[] = {
1308    { N_("Go HyperSpace In Slide Show"), NULL,
1309      N_("Enter HyperSpace mode in slideshow"), NULL,
1310      CMDID_GOHYPERSPACEINSLIDESHOW },
1311    { N_("Freehand Mode In Slide Show"), NULL,
1312      N_("Go into freehand drawing mode in slideshow"), NULL,
1313      CMDID_FREEHANDMODEINSLIDESHOW },
1314    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1315    { N_("Next Slide"), NULL, N_("Go to next slide"), NULL,
1316      CMDID_NEXTPAGE },
1317    { N_("Prev Slide"), NULL, N_("Go to previous slide"), NULL,
1318      CMDID_PREVPAGE },
1319    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1320    { N_("Color"), TGMUITEM_PINNABLESUBMENU,
1321      N_("Color Menu"), &colorMenuInfo, MENU_COLOR },
1322    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1323    { N_("Exit Slide Show Mode"), "Esc", N_("Exit SlideShow mode"), NULL,
1324      CMDID_TOGGLESLIDESHOW },
1325    { NULL, NULL, NULL, NULL, INVALID }
1326 };
1327 TgMenuInfo slideShowModeMenuInfo={ TGMUTYPE_TEXT, slideShowModeMenuItemInfo,
1328                                    CreateSlideShowModeMenu };
1329 
1330 static TgMenuItemInfo slideShowMenuItemInfo[] = {
1331    { N_("Slide Show"), "Alt+Cntrl+8", N_("Toggle SlideShow mode"), NULL,
1332      CMDID_TOGGLESLIDESHOW },
1333    { N_("Set Slide Show Border Color..."), NULL,
1334      N_("Set the color of the slideshow border"), NULL,
1335      CMDID_SETSLIDESHOWBRDRCOLOR },
1336    { N_("Set Slide Show Window Offsets..."), NULL,
1337      N_("Set the offsets of the slideshow window"), NULL,
1338      CMDID_SETSLIDESHOWWINOFFSETS },
1339    { N_("Visible Grid In Slide Show"), NULL,
1340      N_("Toggle visible grid in slideshow mode"), NULL,
1341      CMDID_VISIBLEGRIDINSLIDESHOW },
1342    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1343    { N_("Go HyperSpace In Slide Show"), NULL,
1344      N_("Enter HyperSpace mode in slideshow"), NULL,
1345      CMDID_GOHYPERSPACEINSLIDESHOW },
1346    { N_("Freehand Mode In Slide Show"), NULL,
1347      N_("Go into freehand drawing mode in slideshow"), NULL,
1348      CMDID_FREEHANDMODEINSLIDESHOW },
1349    { NULL, NULL, NULL, NULL, INVALID }
1350 };
1351 static TgMenuInfo slideShowMenuInfo={ TGMUTYPE_TEXT, slideShowMenuItemInfo,
1352                                       CreateSlideShowMenu };
1353 
1354 static TgMenuItemInfo zoomMenuItemInfo[] = {
1355    { N_("Zoom In"), "Alt+z", N_("Zoom in"), NULL, CMDID_ZOOMIN },
1356    { N_("Zoom Out"), "Alt+o", N_("Zoom out"), NULL, CMDID_ZOOMOUT },
1357    { N_("Default Zoom"), "Alt+:", N_("No zoom"), NULL, CMDID_DEFAULTZOOM },
1358    { N_("Zoom Way Out"), "Alt+`", N_("Zoom way out to see the whole drawing"),
1359      NULL, CMDID_ZOOMWAYOUT },
1360    { NULL, NULL, NULL, NULL, INVALID }
1361 };
1362 static TgMenuInfo zoomMenuInfo={ TGMUTYPE_TEXT, zoomMenuItemInfo,
1363                                  TgCreateMenuFromMenuInfo };
1364 
1365 static TgMenuItemInfo layoutMenuItemInfo[] = {
1366    { N_("+Grid"), "Alt+i", N_("Increment grid size"), NULL, CMDID_INCGRID },
1367    { N_("-Grid"), "Alt+d", N_("Decrement grid size"), NULL, CMDID_DECGRID },
1368    { N_("Visible Grid"), "Alt+g", N_("Hide/show grid lines"), NULL,
1369      CMDID_TOGGLEGRID },
1370    { N_("Snap To Grid"), "Alt+Cntrl+g",
1371      N_("Toggle the snapping to grid points effect"), NULL, CMDID_TOGGLESNAP },
1372    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1373    { N_("Save Origin"), NULL,
1374      N_("Save current location as the 'origin' of the drawing"),
1375      NULL, CMDID_SAVEORIGIN },
1376    { N_("Scroll To Origin"), "Alt+^",
1377      N_("Scroll to the 'origin' of the drawing"), NULL, CMDID_SCROLLTOORIG },
1378    { N_("Scroll Mode"), TGMUITEM_SUBMENU,
1379      N_("ScrollMode submenu >>>"), &scrollModeMenuInfo, INVALID },
1380    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1381    { N_("Zoom"), TGMUITEM_SUBMENU, N_("Zoom submenu >>>"), &zoomMenuInfo,
1382      INVALID },
1383    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1384    { N_("Portrait"), NULL, N_("Portrait page style"), NULL,
1385      CMDID_PORTRAITMODE },
1386    { N_("Landscape"), NULL, N_("Lanscape page style"), NULL,
1387      CMDID_LANDSCAPEMODE },
1388    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1389    { N_("Stacked Page"), TGMUITEM_PINNABLESUBMENU,
1390      N_("StackedPage submenu >>>"), &stackedPageMenuInfo, MENU_STACKEDPAGE },
1391    { N_("Tiled Page"), TGMUITEM_PINNABLESUBMENU,
1392      N_("TiledPage submenu >>>"), &tiledPageMenuInfo, MENU_TILEDPAGE },
1393    { N_("Page Layout"), TGMUITEM_PINNABLESUBMENU,
1394      N_("PageLayout submenu >>>"), &pageLayoutMenuInfo, MENU_PAGELAYOUT },
1395    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1396    { N_("Print/Export Format"), TGMUITEM_SUBMENU,
1397      N_("Select print/export format submenu >>>"), &exportFormatMenuInfo,
1398      INVALID },
1399    { N_("Print/Export In Color"), "Alt+Cntrl+k",
1400      N_("Toggle between color and black & white printing modes"), NULL,
1401      CMDID_TOGGLEBWCOLORPS },
1402    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1403    { N_("Set Reduction..."), "Alt+%",
1404      N_("Specify reduction/magnification of the whole drawing"), NULL,
1405      CMDID_SETREDUCTION },
1406    { N_("Metric Grid"), "Alt+Cntrl+-",
1407      N_("Toggle between English and Metric grid systems"), NULL,
1408      CMDID_TOGGLEGRIDSYSTEM },
1409    { N_("One Motion Select Move"), NULL,
1410      N_("Toggle between click-select-move and click-select-click-move modes"),
1411      NULL, CMDID_TOGGLEONEMOTIONSELMOVE },
1412    { N_("Use Gray Scale"), NULL,
1413      N_("Toggle between using gray scales to tile patterns to speed up printing"),
1414      NULL, CMDID_TOGGLEUSEGRAYSCALE },
1415    { N_("Use Color Layers"), NULL, N_("Toggle color layers"), NULL,
1416      CMDID_TOGGLECOLORLAYERS },
1417    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1418    { N_("Show/Hide"), TGMUITEM_SUBMENU,
1419      N_("Show/Hide submenu >>>"), &showHideMenuInfo, INVALID },
1420    { N_("Slide Show"), TGMUITEM_SUBMENU,
1421      N_("SlideShow submenu >>>"), &slideShowMenuInfo, INVALID },
1422    { NULL, NULL, NULL, NULL, INVALID }
1423 };
1424 TgMenuInfo layoutMenuInfo={ TGMUTYPE_TEXT, layoutMenuItemInfo,
1425                             CreateLayoutMenu };
1426 
1427 static TgMenuItemInfo propertiesMenuItemInfo[] = {
1428    { N_("Copy Properties..."), NULL,
1429      N_("Copy properties (e.g., color, fill, etc.) into the cut buffer"), NULL,
1430      CMDID_COPYPROPERTIES },
1431    { N_("Paste Properties..."), NULL,
1432      N_("Paste properties (e.g., color, fill, etc.) from the cut buffer"), NULL,
1433      CMDID_PASTEPROPERTIES },
1434    { N_("Save Properties..."), NULL,
1435      N_("Save and name a property (e.g., color, fill, etc.) set"), NULL,
1436      CMDID_SAVEPROPERTIES },
1437    { N_("Restore Properties..."), NULL,
1438      N_("Restore a named property (e.g., color, fill, etc.) set"), NULL,
1439      CMDID_RESTOREPROPERTIES },
1440    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1441 /*
1442  * { N_("Update Objects"), "Alt+0",
1443  *   N_("Update selected objects to have current drawing properties"), NULL,
1444  *   CMDID_UPDATE },
1445  * { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1446  */
1447    { N_("Set Selected Line Width..."), NULL,
1448      N_("Change the line width (and arrow width/height) of selected objects"),
1449      NULL, CMDID_SETSELLINEWIDTH },
1450    { N_("Set Selected Font Size..."), NULL,
1451      N_("Change the font size of selected objects"), NULL,
1452      CMDID_SETSELFONTSIZE },
1453    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1454    { N_("Add Color..."), NULL, N_("Add colors to the current palette"), NULL,
1455      CMDID_ADDCOLOR },
1456    { N_("Choose Color..."), NULL,
1457      N_("Choose a color from a color wheel and add it to the current palette"),
1458      NULL, CMDID_COLORWHEEL },
1459    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1460    { N_("Set Edit Text Size..."), NULL,
1461      N_("Set the text size to be used in editing existing text objects"), NULL,
1462      CMDID_SETEDITTEXTSIZE },
1463    { N_("Set Alt Edit Text BgColor..."), NULL,
1464      N_("Set the background color to be used in editing existing text objects"),
1465      NULL, CMDID_SETALTEDITTEXTBGCOLOR },
1466    { N_("Set Alt Edit Text Highlight Color..."), NULL,
1467      N_("Set the highlight color to be used in editing existing text objects"),
1468      NULL, CMDID_SETALTEDITTEXTHIGHLIGHTCOLOR },
1469    { N_("Use Alt Edit Text BgColor"), NULL,
1470      N_("Toggles the background color to be used in editing existing text objects"),
1471      NULL, CMDID_TOGGLEALTEDITTEXTBGCOLOR },
1472    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1473    { N_("Font"), TGMUITEM_PINNABLESUBMENU,
1474      N_("Font submenu >>>"), &fontMenuInfo, MENU_FONT },
1475    { N_("Text Style"), TGMUITEM_PINNABLESUBMENU,
1476      N_("TextStyle submenu >>>"), &fontStyleMenuInfo, MENU_STYLE },
1477    { N_("Text Size"), TGMUITEM_PINNABLESUBMENU,
1478      N_("TextSize submenu >>>"), &fontSizeMenuInfo, MENU_SIZE },
1479    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1480    { N_("Line Dash"), TGMUITEM_PINNABLESUBMENU,
1481      N_("LineDash submenu >>>"), &lineDashMenuInfo, MENU_LINEDASH },
1482    { N_("Line Style"), TGMUITEM_PINNABLESUBMENU,
1483      N_("LineStyle submenu >>>"), &lineStyleMenuInfo, MENU_LINESTYLE },
1484    { N_("Line Type"), TGMUITEM_PINNABLESUBMENU,
1485      N_("LineType submenu >>>"), &lineTypeMenuInfo, MENU_LINETYPE },
1486    { N_("Line Width"), TGMUITEM_PINNABLESUBMENU,
1487      N_("LineWidth submenu >>>"), &lineWidthMenuInfo, MENU_LINEWIDTH },
1488    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1489    { N_("Fill"), TGMUITEM_PINNABLESUBMENU,
1490      N_("Fill submenu >>>"), &fillMenuInfo, MENU_FILL },
1491    { N_("Pen"), TGMUITEM_PINNABLESUBMENU,
1492      N_("Pen submenu >>>"), &penMenuInfo, MENU_PEN },
1493    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1494    { N_("Color"), TGMUITEM_PINNABLESUBMENU, N_("Color submenu >>>"),
1495      &colorMenuInfo, MENU_COLOR },
1496    { N_("Transparent Pattern"), TGMUITEM_PINNABLESUBMENU,
1497      N_("TransPattern submenu >>>"), &transPatModeMenuInfo, MENU_TRANSPAT },
1498    { NULL, NULL, NULL, NULL, INVALID }
1499 };
1500 TgMenuInfo propertiesMenuInfo={ TGMUTYPE_TEXT, propertiesMenuItemInfo,
1501                                 CreatePropertiesMenu };
1502 
1503 static TgMenuItemInfo navigateMenuItemInfo[] = {
1504    { N_("Go Back"), NULL, N_("Go back one file"), NULL, CMDID_GOBACK },
1505    { N_("Go Forward"), NULL, N_("Go forward one file"), NULL, CMDID_GOFORWARD },
1506    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1507    { N_("Refresh Current"), NULL, N_("Reload the current file"), NULL,
1508      CMDID_REFRESHCURRENT },
1509    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1510    { N_("Hot List..."), NULL, N_("Navigate using the hot-list"), NULL,
1511      CMDID_HOTLIST },
1512    { N_("Add Current To Hot List"), NULL,
1513      N_("Add the current file to the hot-list"), NULL,
1514      CMDID_ADDCURRENTTOHOTLIST },
1515    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1516    { N_("Session History..."), NULL,
1517      N_("Go to a file visited during this session"), NULL,
1518      CMDID_SESSIONHISTORY },
1519    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1520    { N_("Hyper Space"), NULL, N_("Toggle HyperSpace mode"), NULL,
1521      CMDID_TOGGLEHYPERSPACE },
1522    { NULL, NULL, NULL, NULL, INVALID }
1523 };
1524 TgMenuInfo navigateMenuInfo={ TGMUTYPE_TEXT, navigateMenuItemInfo,
1525                               CreateNavigateMenu };
1526 
1527 static TgMenuItemInfo attrMenuItemInfo[] = {
1528    { N_("Attach Attributes"), "Alt+a",
1529      N_("Attach selected text objects as attributes for the non-text object"),
1530      NULL, CMDID_ATTACHATTRS },
1531    { N_("Detach Attributes"), "Alt+t",
1532      N_("Detach all attributes of selected objects"), NULL,
1533      CMDID_DETACHATTRS },
1534    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1535    { N_("Edit Attributes..."), NULL,
1536      N_("Edit attributes of a selected object"), NULL,
1537      CMDID_EDITATTRS },
1538    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1539    { N_("Show Attributes"), "Alt+-",
1540      N_("Make all attributes of selected objects visible"), NULL,
1541      CMDID_SHOWATTR },
1542    { N_("Show Attribute Names"), "Alt+n",
1543      N_("Make all attribute names of selected objects visible"), NULL,
1544      CMDID_SHOWATTRNAME },
1545    { N_("Hide Attributes"), "Alt+Cntrl+h",
1546      N_("Hide all attributes for selected objects"), NULL,
1547      CMDID_HIDEATTR },
1548    { N_("Hide Attribute Names"), "Alt+j",
1549      N_("Hide all attribute names for selected objects"), NULL,
1550      CMDID_HIDEATTRNAME },
1551    { N_("Toggle Eq Attribute Shown..."), "Alt+Cntrl+7",
1552      N_("Showing/hiding the 'eq=' attibute (for a LaTeX equation object)"),
1553      NULL, CMDID_TOGGLEEQATTRSHOWN },
1554    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1555    { N_("Move/Justfy An Attribute"), "Alt+m",
1556      N_("Move/justify an attribute for a selected object"), NULL,
1557      CMDID_MOVEJUSTIFYATTR },
1558    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1559    { N_("Import Attributes..."), NULL,
1560      N_("Import attributes of a selected object from a text file"), NULL,
1561      CMDID_IMPORTATTRS },
1562    { N_("Export Attributes..."), NULL,
1563      N_("Export attributes of a selected object to a text file"), NULL,
1564      CMDID_EXPORTATTRS },
1565    { NULL, NULL, NULL, NULL, INVALID }
1566 };
1567 static TgMenuInfo attrMenuInfo={ TGMUTYPE_TEXT, attrMenuItemInfo,
1568                                  TgCreateMenuFromMenuInfo };
1569 
1570 static TgMenuItemInfo fileAttrMenuItemInfo[] = {
1571    { N_("Attach File Attributes"), NULL,
1572      N_("Attach selected text objects as file attributes"), NULL,
1573      CMDID_ATTACHFILEATTRS },
1574    { N_("Detach File Attributes"), NULL,
1575      N_("Detach all file attributes"), NULL,
1576      CMDID_DETACHFILEATTRS },
1577    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1578    { N_("Edit File Attributes..."), NULL,
1579      N_("Edit file attributes"), NULL,
1580      CMDID_EDITFILEATTRS },
1581    { NULL, NULL, NULL, NULL, INVALID }
1582 };
1583 static TgMenuInfo fileAttrMenuInfo={ TGMUTYPE_TEXT, fileAttrMenuItemInfo,
1584                                      TgCreateMenuFromMenuInfo };
1585 
1586 static TgMenuItemInfo animateMenuItemInfo[] = {
1587    { N_("Animate Send"), "Alt+e",
1588      N_("Animate a little token on a selected poly (not very useful)"), NULL,
1589      CMDID_ANIMATESEND },
1590    { N_("Animate Flash"), "Alt+f",
1591      N_("Flash a selected poly (not very useful)"), NULL,
1592      CMDID_ANIMATEFLASH },
1593    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1594    { N_("Renumber Object IDs"), "Alt+f",
1595      N_("Renumber object IDs for all objects"), NULL,
1596      CMDID_RENUMBER_OBJECT_IDS },
1597    { NULL, NULL, NULL, NULL, INVALID }
1598 };
1599 static TgMenuInfo animateMenuInfo={ TGMUTYPE_TEXT, animateMenuItemInfo,
1600                                     TgCreateMenuFromMenuInfo };
1601 
1602 static TgMenuItemInfo portMenuItemInfo[] = {
1603    { N_("Connect Two Ports by a Wire..."), NULL,
1604      N_("Connect two ports by a wire"), NULL,
1605      CMDID_CONNECT2PORTSBYWIRE },
1606    { N_("Repeat Connect Two Ports by a Wire..."), NULL,
1607      N_("Repeatedly connecting two ports by a wire (will not prompt if the wire name can be detected).  Wire signal name will not be shown."), NULL,
1608      CMDID_REPEATCONNECT2PORTSBYWIRE },
1609    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1610    { N_("Show Wire Signal Name"), NULL,
1611      N_("Toggle between showing (with placing) and hiding the wire signal name when connecting ports"), NULL,
1612      CMDID_TOGGLESHOWWIRESIGNALNAME },
1613    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1614    { N_("Merge Ports with An Object"), NULL,
1615      N_("Merge selected floating port objects with a selected composite object"), NULL,
1616      CMDID_MERGEPORTSWITHANOBJECT },
1617    { N_("Connect Ports to a Broadcast Wire"), NULL,
1618      N_("Connect selected floating port objects to a selected broadcast-type wire"), NULL,
1619      CMDID_CONNECTPORTSTOBROADCAST },
1620    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1621    { N_("Clear Signal Name for a Port..."), NULL,
1622      N_("Clear the 'signal_name=' attribute for a port"), NULL,
1623      CMDID_CLEARSIGNAMEFORAPORT },
1624    { N_("Rename Signal Name for a Port..."), NULL,
1625      N_("Rename the 'signal_name=' attribute for a port"), NULL,
1626      CMDID_RENAMESIGNAMEFORAPORT },
1627    { NULL, NULL, NULL, NULL, INVALID }
1628 };
1629 static TgMenuInfo portMenuInfo={ TGMUTYPE_TEXT, portMenuItemInfo,
1630                                  CreatePortMenu };
1631 
1632 static TgMenuItemInfo tableMenuItemInfo[] = {
1633    { N_("Merge With Table..."), NULL,
1634      N_("Merge selected object with a table file"), NULL,
1635      CMDID_MERGEWITHTABLE },
1636    { N_("Export To Table..."), NULL,
1637      N_("Export attributes of selected objects to a table file"), NULL,
1638      CMDID_EXPORTTOTABLE },
1639    { NULL, NULL, NULL, NULL, INVALID }
1640 };
1641 static TgMenuInfo tableMenuInfo={ TGMUTYPE_TEXT, tableMenuItemInfo,
1642                                   TgCreateMenuFromMenuInfo };
1643 
1644 static TgMenuItemInfo specialMenuItemInfo[] = {
1645    { N_("Make Symbolic"), "Alt+Cntrl+m",
1646      N_("Turn a selected grouped/icon object into a symbol object"), NULL,
1647      CMDID_MAKESYMBOLIC },
1648    { N_("UnMake Symbolic"), "Alt+Cntrl+n",
1649      N_("Turn a selected symbol object into a grouped object"), NULL,
1650      CMDID_UNMAKESYMBOLIC },
1651    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1652    { N_("Instantiate..."), "Cntrl+i",
1653      N_("Instantiate a building-block object from the current domain"), NULL,
1654      CMDID_INSTANTIATE },
1655    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1656    { N_("Make Iconic..."), "Alt+Cntrl+i",
1657      N_("Turn a selected grouped/symbol object into an icon object"), NULL,
1658      CMDID_MAKEICONIC },
1659    { N_("UnMake Iconic"), "Alt+Cntrl+j",
1660      N_("Turn an icon object into a grouped object"), NULL,
1661      CMDID_UNMAKEICONIC },
1662    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1663    { N_("Push"), "Alt+Cntrl+y",
1664      N_("Push into (edit) the symbol file which defines the selected icon object"),
1665      NULL, CMDID_PUSH },
1666    { N_("Pop"), "Cntrl+k",
1667      N_("Pop back to a high lever (reverse of Push)"), NULL,
1668      CMDID_POP },
1669    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1670    { N_("Attribute"), TGMUITEM_SUBMENU,
1671      N_("Attribute submenu >>>"), &attrMenuInfo, INVALID },
1672    { N_("File Attribute"), TGMUITEM_SUBMENU,
1673      N_("File attribute submenu >>>"), &fileAttrMenuInfo, INVALID },
1674    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1675    { N_("Update Symbols"), "Alt+Cntrl+u",
1676      N_("Refresh selected icon objects from their definition files"), NULL,
1677      CMDID_UPDATESYMBOLS },
1678    { N_("Save Sym In Library..."), NULL,
1679      N_("Save symbol file in a library path within the current domain"), NULL,
1680      CMDID_SAVESYMINLIBRARY },
1681    { N_("Replace Graphic"), NULL,
1682      N_("Replace the graphical part of selected objects by the graphical object in the cut buffer"), NULL,
1683      CMDID_REPLACEGRAPHIC },
1684    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1685    { N_("Domain"), TGMUITEM_SUBMENU,
1686      N_("Domain submenu >>>"), &domainMenuInfo, INVALID },
1687    { N_("Ports and Signals"), TGMUITEM_SUBMENU,
1688      N_("Ports and Signal submenu >>>"), &portMenuInfo, INVALID },
1689    { N_("Table"), TGMUITEM_SUBMENU,
1690      N_("Table submenu >>>"), &tableMenuInfo, INVALID },
1691    { N_("Misc"), TGMUITEM_SUBMENU,
1692      N_("Misc submenu >>>"), &animateMenuInfo, INVALID },
1693    { N_("Return"), TGMUITEM_SUBMENU,
1694      N_("Return submenu >>>"), &driverMenuInfo, INVALID },
1695    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1696    { N_("Exec Cmds From File..."), NULL,
1697      N_("Execute internal commands from a file"), NULL,
1698      CMDID_EXECCMDSFROMFILE },
1699    { NULL, NULL, NULL, NULL, INVALID }
1700 };
1701 TgMenuInfo specialMenuInfo={ TGMUTYPE_TEXT, specialMenuItemInfo,
1702                              TgCreateMenuFromMenuInfo };
1703 
1704 static TgMenuItemInfo helpMenuItemInfo[] = {
1705    { N_("Latest Release Info"), NULL,
1706      N_("Find out what is the version number of the most recently released tgif"),
1707      NULL, CMDID_LATESTRELEASEINFO },
1708    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1709    { N_("Copyright"), NULL, N_("Copyright information"), NULL,
1710      CMDID_COPYRIGHT },
1711    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1712    { N_("About"), NULL,
1713      N_("Version information, where to send bug reports, etc."), NULL,
1714      CMDID_ABOUT },
1715    { NULL, NULL, NULL, NULL, INVALID }
1716 };
1717 TgMenuInfo helpMenuInfo={ TGMUTYPE_TEXT, helpMenuItemInfo,
1718                           TgCreateMenuFromMenuInfo };
1719 
1720 /* ------------------ context menu ------------------ */
1721 
1722 TgMenuInfo editAttrInEditorMenuInfo={ TGMUTYPE_TEXT, NULL,
1723                                       CreateEditAttrInEditorMenu };
1724 
1725 TgMenuInfo editAttrGroupInEditorMenuInfo={ TGMUTYPE_TEXT, NULL,
1726                                            CreateEditAttrGroupInEditorMenu };
1727 
1728 TgMenuInfo getPropertyMenuInfo={ TGMUTYPE_TEXT, NULL, CreateGetPropertyMenu };
1729 
1730 TgMenuInfo peekDimensionMenuInfo={ TGMUTYPE_TEXT, NULL,
1731                                    CreatePeekDimensionMenu };
1732 
1733 static TgMenuItemInfo baseContextMenuItemInfo[] = {
1734    { N_("Mode"), TGMUITEM_PINNABLESUBMENU, N_("Mode Menu"), &modeMenuInfo,
1735      MENU_MODE },
1736    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1737    { N_("Copy"), "Cntrl+c", N_("Copy selected objects into the cut buffer"),
1738      NULL, CMDID_COPY },
1739    { N_("Duplicate"), "Cntrl+d", N_("Duplicate selected objects"), NULL,
1740      CMDID_DUPLICATE },
1741    { N_("Delete"), "Cntrl+x", N_("Delete selected objects"), NULL,
1742      CMDID_DELETE },
1743    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1744    { N_("Properties"), TGMUITEM_PINNABLESUBMENU,
1745      N_("Properties Menu"), &propertiesMenuInfo, MENU_PROPERTIES },
1746    { N_("Image Proc"), TGMUITEM_PINNABLESUBMENU,
1747      N_("ImageProc Menu"), &imageProcMenuInfo, MENU_IMAGEPROC },
1748    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1749    { N_("Edit Attribute In Editor"), TGMUITEM_SUBMENU,
1750      N_("Edit attribute in editor submenu >>>"), &editAttrInEditorMenuInfo,
1751      INVALID },
1752    { N_("Edit Attribute Group In Editor"), TGMUITEM_SUBMENU,
1753      N_("Edit a group of attributes in editor submenu >>>"),
1754      &editAttrGroupInEditorMenuInfo, INVALID },
1755    { N_("Get Property"), TGMUITEM_SUBMENU,
1756      N_("Get property submenu >>>"), &getPropertyMenuInfo, INVALID },
1757    { N_("Peek Dimension"), TGMUITEM_SUBMENU,
1758      N_("Peek dimension submenu >>>"), &peekDimensionMenuInfo, INVALID },
1759    { NULL, NULL, NULL, NULL, INVALID }
1760 };
1761 TgMenuInfo baseContextMenuInfo={ TGMUTYPE_TEXT, baseContextMenuItemInfo,
1762                                  CreateContextMenu };
1763 
1764 static TgMenuItemInfo editTextContextMenuItemInfo[] = {
1765    { N_("Mode"), TGMUITEM_PINNABLESUBMENU, N_("Mode Menu"), &modeMenuInfo,
1766      MENU_MODE },
1767    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1768    { N_("Copy"), "Cntrl+c", N_("Copy selected objects into the cut buffer"),
1769      NULL, CMDID_COPY },
1770    { N_("Copy Plain Text As Object"), NULL,
1771      N_("Copy highlighted plain text as an object into the cut buffer"), NULL,
1772      CMDID_COPYPLAINTEXTASOBJECT },
1773    { N_("Cut"), NULL, N_("Cut selected text into the cut buffer"), NULL,
1774      CMDID_CUT },
1775    { N_("Paste"), "Cntrl+v", N_("Paste from the cut buffer"), NULL,
1776      CMDID_PASTE },
1777    { N_("Duplicate"), "Cntrl+d", N_("Duplicate selected objects"), NULL,
1778      CMDID_DUPLICATE },
1779    { N_("Delete"), "Cntrl+x", N_("Delete selected objects"), NULL,
1780      CMDID_DELETE },
1781    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1782    { N_("Move Edit Text Box..."), NULL, N_("Move the edit text box"), NULL,
1783      CMDID_MOVEEDITTEXTBOX },
1784    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1785    { N_("Properties"), TGMUITEM_PINNABLESUBMENU,
1786      N_("Properties Menu"), &propertiesMenuInfo, MENU_PROPERTIES },
1787    { NULL, NULL, NULL, NULL, INVALID }
1788 };
1789 TgMenuInfo editTextContextMenuInfo={ TGMUTYPE_TEXT, editTextContextMenuItemInfo,
1790                                      CreateEditTextContextMenu };
1791 
1792 /* ------------------ grid menu ------------------ */
1793 
1794 static TgMenuItemInfo gridMenuItemInfo[] = {
1795    { N_("+Grid"), "Alt+i", N_("Increment grid size"), NULL, CMDID_INCGRID },
1796    { N_("-Grid"), "Alt+d", N_("Decrement grid size"), NULL, CMDID_DECGRID },
1797    { N_("Visible Grid"), "Alt+g", N_("Hide/show grid lines"), NULL,
1798      CMDID_TOGGLEGRID },
1799    { N_("Snap To Grid"), "Alt+Cntrl+g",
1800      N_("Toggle the snapping to grid points effect"), NULL, CMDID_TOGGLESNAP },
1801    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1802    { N_("Save Origin"), NULL,
1803      N_("Save current location as the 'origin' of the drawing"),
1804      NULL, CMDID_SAVEORIGIN },
1805    { N_("Scroll To Origin"), "Alt+^",
1806      N_("Scroll to the 'origin' of the drawing"), NULL, CMDID_SCROLLTOORIG },
1807    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1808    { N_("Zoom"), TGMUITEM_SUBMENU, N_("Zoom submenu >>>"), &zoomMenuInfo,
1809      INVALID },
1810    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1811    { N_("Set Reduction..."), "Alt+%",
1812      N_("Specify reduction/magnification of the whole drawing"), NULL,
1813      CMDID_SETREDUCTION },
1814    { N_("Metric Grid"), "Alt+Cntrl+-",
1815      N_("Toggle between English and Metric grid systems"), NULL,
1816      CMDID_TOGGLEGRIDSYSTEM },
1817    { N_("Enable Right Margin"), NULL,
1818      N_("Toggle between using (simple) right margin or not"), NULL,
1819      CMDID_TOGGLERIGHTMARGIN },
1820    { N_("Specify Right Margin..."), NULL,
1821      N_("Specify the (simple) right margin"), NULL,
1822      CMDID_SPECIFYRIGHTMARGIN },
1823    { NULL, NULL, NULL, NULL, INVALID }
1824 };
1825 TgMenuInfo gridMenuInfo={ TGMUTYPE_TEXT, gridMenuItemInfo, CreateGridMenu };
1826 
1827 /* ------------------ main menu ------------------ */
1828 
1829 static TgMenuItemInfo mainMenuItemInfo[] = {
1830    { N_("File"), TGMUITEM_PINNABLESUBMENU, N_("File Menu"), &fileMenuInfo,
1831      MENU_FILE },
1832    { N_("Edit"), TGMUITEM_PINNABLESUBMENU, N_("Edit Menu"), &editMenuInfo,
1833      MENU_EDIT },
1834    { N_("Layout"), TGMUITEM_PINNABLESUBMENU,
1835      N_("Layout Menu"), &layoutMenuInfo, MENU_LAYOUT },
1836    { N_("Arrange"), TGMUITEM_PINNABLESUBMENU,
1837      N_("Arrange Menu"), &arrangeMenuInfo, MENU_ARRANGE },
1838    { N_("Properties"), TGMUITEM_PINNABLESUBMENU,
1839      N_("Properties Menu"), &propertiesMenuInfo, MENU_PROPERTIES },
1840    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1841    { N_("Stacked Page"), TGMUITEM_PINNABLESUBMENU,
1842      N_("StackedPage Menu"), &stackedPageMenuInfo, MENU_STACKEDPAGE },
1843    { N_("Tiled Page"), TGMUITEM_PINNABLESUBMENU,
1844      N_("TiledPage Menu"), &tiledPageMenuInfo, MENU_TILEDPAGE },
1845    { N_("Page Layout"), TGMUITEM_PINNABLESUBMENU,
1846      N_("PageLayout Menu"), &pageLayoutMenuInfo, MENU_PAGELAYOUT },
1847    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1848    { N_("Horizontal Align"), TGMUITEM_PINNABLESUBMENU,
1849      N_("HoriAlign Menu"), &horiAlignMenuInfo, MENU_HORIALIGN },
1850    { N_("Vertical Align"), TGMUITEM_PINNABLESUBMENU,
1851      N_("VertAlign Menu"), &vertAlignMenuInfo, MENU_VERTALIGN },
1852    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1853    { N_("Font"), TGMUITEM_PINNABLESUBMENU, N_("Font Menu"), &fontMenuInfo,
1854      MENU_FONT },
1855    { N_("Text Style"), TGMUITEM_PINNABLESUBMENU,
1856      N_("TextStyle Menu"), &fontStyleMenuInfo, MENU_STYLE },
1857    { N_("Text Size"), TGMUITEM_PINNABLESUBMENU,
1858      N_("TextSize Menu"), &fontSizeMenuInfo, MENU_SIZE },
1859    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1860    { N_("Line Dash"), TGMUITEM_PINNABLESUBMENU,
1861      N_("LineDash Menu"), &lineDashMenuInfo, MENU_LINEDASH },
1862    { N_("Line Style"), TGMUITEM_PINNABLESUBMENU,
1863      N_("LineStyle Menu"), &lineStyleMenuInfo, MENU_LINESTYLE },
1864    { N_("Line Type"), TGMUITEM_PINNABLESUBMENU,
1865      N_("LineType Menu"), &lineTypeMenuInfo, MENU_LINETYPE },
1866    { N_("Line Width"), TGMUITEM_PINNABLESUBMENU,
1867      N_("LineWidth Menu"), &lineWidthMenuInfo, MENU_LINEWIDTH },
1868    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1869    { N_("Fill"), TGMUITEM_PINNABLESUBMENU, N_("Fill Menu"), &fillMenuInfo,
1870      MENU_FILL },
1871    { N_("Pen"), TGMUITEM_PINNABLESUBMENU, N_("Pen Menu"), &penMenuInfo,
1872      MENU_PEN },
1873    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1874    { N_("Move Mode"), TGMUITEM_PINNABLESUBMENU,
1875      N_("MoveMode Menu"), &moveModeMenuInfo, MENU_MOVEMODE },
1876    { N_("Shape"), TGMUITEM_PINNABLESUBMENU,
1877      N_("Shape Menu"), &shapeMenuInfo, MENU_SHAPE },
1878    { N_("Stretchable Text"), TGMUITEM_PINNABLESUBMENU,
1879      N_("StretchText Menu"), &stretchableTextModeMenuInfo, MENU_STRETCHTEXT },
1880    { N_("Transparent Pattern"), TGMUITEM_PINNABLESUBMENU,
1881      N_("TransPattern Menu"), &transPatModeMenuInfo,
1882          MENU_TRANSPAT },
1883    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1884    { N_("Image Proc"), TGMUITEM_PINNABLESUBMENU,
1885      N_("ImageProc Menu"), &imageProcMenuInfo, MENU_IMAGEPROC },
1886    { TGMUITEM_SEPARATOR, NULL, NULL, NULL, INVALID },
1887    { N_("Color"), TGMUITEM_PINNABLESUBMENU,
1888      N_("Color Menu"), &colorMenuInfo, MENU_COLOR },
1889    { N_("Navigate"), TGMUITEM_PINNABLESUBMENU,
1890      N_("Navigate Menu"), &navigateMenuInfo, MENU_NAVIGATE },
1891    { N_("Special"), TGMUITEM_PINNABLESUBMENU,
1892      N_("Special Menu"), &specialMenuInfo, MENU_SPECIAL },
1893    { N_("Tangram-II"), TGMUITEM_PINNABLESUBMENU,
1894      N_("Tangram-II Menu"), &tangram2MenuInfo, MENU_TANGRAM2 },
1895    { N_("Help"), TGMUITEM_PINNABLESUBMENU, N_("Help Menu"), &helpMenuInfo,
1896      MENU_HELP },
1897    { NULL, NULL, NULL, NULL, INVALID }
1898 };
1899 TgMenuInfo mainMenuInfo={ TGMUTYPE_TEXT, mainMenuItemInfo, CreateMainMenu };
1900 
1901 /* ------------------ menubar ------------------ */
1902 
1903 /*
1904  * Don't put any separators here!
1905  */
1906 
1907 static TgMenuItemInfo minimalMenubarMenuItemInfo[] = {
1908    { N_("File"), TGMUITEM_PINNABLESUBMENU, N_("File Menu"), &fileMenuInfo,
1909      MENU_FILE },
1910    { N_("Edit"), TGMUITEM_PINNABLESUBMENU, N_("Edit Menu"), &editMenuInfo,
1911      MENU_EDIT },
1912    { N_("Layout"), TGMUITEM_PINNABLESUBMENU,
1913      N_("Layout Menu"), &layoutMenuInfo, MENU_LAYOUT },
1914    { N_("Arrange"), TGMUITEM_PINNABLESUBMENU,
1915      N_("Arrange Menu"), &arrangeMenuInfo, MENU_ARRANGE },
1916    { N_("Properties"), TGMUITEM_PINNABLESUBMENU,
1917      N_("Properties Menu"), &propertiesMenuInfo, MENU_PROPERTIES },
1918    { N_("Color"), TGMUITEM_PINNABLESUBMENU,
1919      N_("Color Menu"), &colorMenuInfo, MENU_COLOR },
1920    { N_("Navigate"), TGMUITEM_PINNABLESUBMENU,
1921      N_("Navigate Menu"), &navigateMenuInfo, MENU_NAVIGATE },
1922    { N_("Special"), TGMUITEM_PINNABLESUBMENU,
1923      N_("Special Menu"), &specialMenuInfo, MENU_SPECIAL },
1924    { N_("Tangram-II"), TGMUITEM_PINNABLESUBMENU,
1925      N_("Tangram-II Menu"), &tangram2MenuInfo, MENU_TANGRAM2 },
1926    { N_("Help"), TGMUITEM_PINNABLESUBMENU, N_("Help Menu"), &helpMenuInfo,
1927      MENU_HELP },
1928    { NULL, NULL, NULL, NULL, INVALID }
1929 };
1930 TgMenuInfo minimalMenubarMenuInfo={ TGMUTYPE_TEXT, minimalMenubarMenuItemInfo,
1931                                     NULL };
1932 
1933 static TgMenuItemInfo maximalMenubarMenuItemInfo[] = {
1934    { N_("File"), TGMUITEM_PINNABLESUBMENU, N_("File Menu"), &fileMenuInfo,
1935      MENU_FILE },
1936    { N_("Edit"), TGMUITEM_PINNABLESUBMENU, N_("Edit Menu"), &editMenuInfo,
1937      MENU_EDIT },
1938    { N_("Layout"), TGMUITEM_PINNABLESUBMENU,
1939      N_("Layout Menu"), &layoutMenuInfo, MENU_LAYOUT },
1940    { N_("Arrange"), TGMUITEM_PINNABLESUBMENU,
1941      N_("Arrange Menu"), &arrangeMenuInfo, MENU_ARRANGE },
1942    { N_("Properties"), TGMUITEM_PINNABLESUBMENU,
1943      N_("Properties Menu"), &propertiesMenuInfo, MENU_PROPERTIES },
1944    { N_("Move Mode"), TGMUITEM_PINNABLESUBMENU,
1945      N_("MoveMode Menu"), &moveModeMenuInfo, MENU_MOVEMODE },
1946    { N_("Page"), TGMUITEM_PINNABLESUBMENU,
1947      N_("Page Menu"), &pageMenuInfo, MENU_PAGE },
1948    { N_("Page Layout"), TGMUITEM_PINNABLESUBMENU,
1949      N_("PageLayout Menu"), &pageLayoutMenuInfo, MENU_PAGELAYOUT },
1950    { N_("Horizontal Align"), TGMUITEM_PINNABLESUBMENU,
1951      N_("HoriAlign Menu"), &horiAlignMenuInfo, MENU_HORIALIGN },
1952    { N_("Vertical Align"), TGMUITEM_PINNABLESUBMENU,
1953      N_("VertAlign Menu"), &vertAlignMenuInfo, MENU_VERTALIGN },
1954    { N_("Font"), TGMUITEM_PINNABLESUBMENU, N_("Font Menu"), &fontMenuInfo,
1955      MENU_FONT },
1956    { N_("Text Style"), TGMUITEM_PINNABLESUBMENU,
1957      N_("TextStyle Menu"), &fontStyleMenuInfo, MENU_STYLE },
1958    { N_("Text Size"), TGMUITEM_PINNABLESUBMENU,
1959      N_("TextSize Menu"), &fontSizeMenuInfo, MENU_SIZE },
1960    { N_("Shape"), TGMUITEM_PINNABLESUBMENU,
1961      N_("Shape Menu"), &shapeMenuInfo, MENU_SHAPE },
1962    { N_("Stretchable Text"), TGMUITEM_PINNABLESUBMENU,
1963      N_("StretchText Menu"), &stretchableTextModeMenuInfo, MENU_STRETCHTEXT },
1964    { N_("Line Dash"), TGMUITEM_PINNABLESUBMENU,
1965      N_("LineDash Menu"), &lineDashMenuInfo, MENU_LINEDASH },
1966    { N_("Line Style"), TGMUITEM_PINNABLESUBMENU,
1967      N_("LineStyle Menu"), &lineStyleMenuInfo, MENU_LINESTYLE },
1968    { N_("Line Type"), TGMUITEM_PINNABLESUBMENU,
1969      N_("LineType Menu"), &lineTypeMenuInfo, MENU_LINETYPE },
1970    { N_("Line Width"), TGMUITEM_PINNABLESUBMENU,
1971      N_("LineWidth Menu"), &lineWidthMenuInfo, MENU_LINEWIDTH },
1972    { N_("Fill"), TGMUITEM_PINNABLESUBMENU, N_("Fill Menu"), &fillMenuInfo,
1973      MENU_FILL },
1974    { N_("Pen"), TGMUITEM_PINNABLESUBMENU, N_("Pen Menu"), &penMenuInfo,
1975      MENU_PEN },
1976    { N_("Transparent Pattern"), TGMUITEM_PINNABLESUBMENU,
1977      N_("TransPattern Menu"), &transPatModeMenuInfo, MENU_TRANSPAT },
1978    { N_("Color"), TGMUITEM_PINNABLESUBMENU,
1979      N_("Color Menu"), &colorMenuInfo, MENU_COLOR },
1980    { N_("Image Proc"), TGMUITEM_PINNABLESUBMENU,
1981      N_("ImageProc Menu"), &imageProcMenuInfo, MENU_IMAGEPROC },
1982    { N_("Navigate"), TGMUITEM_PINNABLESUBMENU,
1983      N_("Navigate Menu"), &navigateMenuInfo, MENU_NAVIGATE },
1984    { N_("Special"), TGMUITEM_PINNABLESUBMENU,
1985      N_("Special Menu"), &specialMenuInfo, MENU_SPECIAL },
1986    { N_("Tangram-II"), TGMUITEM_PINNABLESUBMENU,
1987      N_("Tangram-II Menu"), &tangram2MenuInfo, MENU_TANGRAM2 },
1988    { N_("Help"), TGMUITEM_PINNABLESUBMENU, N_("Help Menu"), &helpMenuInfo,
1989      MENU_HELP },
1990    { NULL, NULL, NULL, NULL, INVALID }
1991 };
1992 TgMenuInfo maximalMenubarMenuInfo={ TGMUTYPE_TEXT, maximalMenubarMenuItemInfo,
1993                                     NULL };
1994 
1995