1 /*
2   FXiTe - The Free eXtensIble Text Editor
3   Copyright (c) 2009-2013 Jeffrey Pohlmeyer <yetanothergeek@gmail.com>
4 
5   This program is free software; you can redistribute it and/or modify it
6   under the terms of the GNU General Public License version 3 as
7   published by the Free Software Foundation.
8 
9   This software is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13 
14   You should have received a copy of the GNU General Public License
15   along with this program; if not, write to the Free Software
16   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18 
19 
20 #ifndef MAINMENU_H
21 #define MAINMENU_H
22 
23 class TopWindow;
24 class Settings;
25 class HistMenu;
26 class UserMenu;
27 
28 class MainMenu: public FXMenuBar {
29 private:
30   TopWindow* tw;
31   SettingsBase* prefs;
32   void CreateMenus();
33   void CreateLanguageMenu();
34   void CreateTabsMenu();
35   void CreateZoomMenu();
36 
37   FXMenuPane* filemenu;
38   FXMenuPane* editmenu;
39   FXMenuPane* searchmenu;
40   FXMenuPane* viewmenu;
41   FXMenuPane* toolsmenu;
42   FXMenuPane* docmenu;
43   FXMenuPane* helpmenu;
44 
45   FXMenuPane* recordermenu;
46   FXMenuCommand* recorderstartmenu;
47   FXMenuCommand* playbackmenu;
48   FXMenuCommand* showmacromenu;
49   FXMenuCommand* filterselmenu;
50   FXMenuCommand* openselmenu;
51 
52 
53   FXMenuPane* editdeletemenu;
54   FXMenuPane* editindentmenu;
55   FXMenuPane* viewzoommenu;
56   FXMenuPane* searchselectmenu;
57   FXMenuPane* searchmarkmenu;
58   FXMenuPane* tabmenu;
59   FXMenuPane* tabordermenu;
60   FXMenuPane* tabsidemenu;
61   FXMenuPane* tabwidthmenu;
62   FXMenuPane* fileexportmenu;
63   FXMenuPane* fileformatmenu;
64   FXMenuPane* langmenu;
65   FXMenuCascade* langcasc;
66   FXMenuPane* cpp_langmenu;
67   FXMenuCascade* cpp_langcasc;
68   FXMenuPane* html_langmenu;
69   FXMenuCascade* html_langcasc;
70   FXMenuPane* lgcy_langmenu;
71   FXMenuCascade* lgcy_langcasc;
72   FXMenuPane* scr_langmenu;
73   FXMenuCascade* scr_langcasc;
74   FXMenuPane* db_langmenu;
75   FXMenuCascade* db_langcasc;
76   FXMenuPane* cfg_langmenu;
77   FXMenuCascade* cfg_langcasc;
78   FXMenuPane* inf_langmenu;
79   FXMenuCascade* inf_langcasc;
80   FXMenuPane* tex_langmenu;
81   FXMenuCascade* tex_langcasc;
82   FXMenuPane* asm_langmenu;
83   FXMenuCascade* asm_langcasc;
84   FXMenuPane* misc_langmenu;
85   FXMenuCascade* misc_langcasc;
86 
87   FXMenuCascade* fileformatcasc;
88   FXMenuRadio* fmt_dos_mnu;
89   FXMenuRadio* fmt_mac_mnu;
90   FXMenuRadio* fmt_unx_mnu;
91 
92   FXMenuCascade* unloadtagsmenu;
93   FXMenuCommand* autocompmenu;
94   FXMenuCommand* findtagmenu;
95   FXMenuCommand* showtipmenu;
96 
97   FXScrollPane* doclistmenu;
98   HistMenu* recent_files;
99 
100   UserMenu* usercmdmenu;
101   UserMenu* userfiltermenu;
102   UserMenu* usermacromenu;
103   UserMenu* usersnipmenu;
104 
105   FXMenuCheck* readonly_chk;
106   FXMenuCheck* caretline_chk;
107   FXMenuCheck* guides_chk;
108   FXMenuCheck* linenums_chk;
109   FXMenuCheck* margin_chk;
110   FXMenuCheck* outpane_chk;
111   FXMenuCheck* status_chk;
112   FXMenuCheck* toolbar_chk;
113   FXMenuCheck* white_chk;
114   FXMenuCheck* wordwrap_chk;
115   FXMenuCheck* invert_chk;
116 
117   static void SetMenuEnabled(FXMenuCommand*mnu, bool enabled);
118   void EnableTagMenus(bool enabled);
119 
120 public:
121   MainMenu(FXComposite* p);
122   ~MainMenu();
123   void Recording(bool recording, bool recorded);
124   void RescanUserMenus();
125   void SyncPrefsCheckmarks();
126   void SetWordWrapCheckmark(bool wrapped);
127   void SetReadOnlyCheckmark(bool rdonly);
128   void SetLanguageCheckmark(LangStyle*ls);
129   FXMenuRadio*GetMenuForLanguage(const FXString &name) const;
130   void UnloadTagFile(FXMenuCommand*mc);
131   void AddFileToTagsList(const FXString &filename);
132   bool RemoveFileFromTagsList(const FXString &filename);
133   void AppendDocList(const FXString &filename, FXTabItem*tab);
134   void PrependRecentFile(const FXString &filename);
135   void RemoveRecentFile(const FXString &filename);
136   void EnableFileFormats();
137   void EnableFilterMenu(bool enabled);
138   void UpdateDocTabSettings();
139   UserMenu**UserMenus() const;
140   FXMenuCascade*TagsMenu() const;
141 };
142 
143 
144 #endif
145 
146