menubar.cpp 11 KB
Newer Older
1
/**
2
 * @file kicad/menubar.cpp
jerryjacobs's avatar
jerryjacobs committed
3
 * @brief Project manager menubars and toolbars
4
 */
5
#include "fctsys.h"
6
#include "appl_wxstruct.h"
7 8 9
#include "common.h"
#include "kicad.h"
#include "macros.h"
jerryjacobs's avatar
jerryjacobs committed
10
#include "bitmaps.h"
11

jerryjacobs's avatar
jerryjacobs committed
12
/* Menubar and toolbar event table */
13
BEGIN_EVENT_TABLE( WinEDA_MainFrame, WinEDA_BasicFrame )
jerryjacobs's avatar
jerryjacobs committed
14
    /* Window events */
15 16
    EVT_SIZE( WinEDA_MainFrame::OnSize )
    EVT_CLOSE( WinEDA_MainFrame::OnCloseWindow )
jerryjacobs's avatar
jerryjacobs committed
17 18

    /* Sash drag events */
19
    EVT_SASH_DRAGGED( ID_LEFT_FRAME, WinEDA_MainFrame::OnSashDrag )
jerryjacobs's avatar
jerryjacobs committed
20 21

    /* Toolbar events */
22 23 24 25
    EVT_TOOL( ID_NEW_PROJECT, WinEDA_MainFrame::OnLoadProject )
    EVT_TOOL( ID_LOAD_PROJECT, WinEDA_MainFrame::OnLoadProject )
    EVT_TOOL( ID_SAVE_PROJECT, WinEDA_MainFrame::OnSaveProject )
    EVT_TOOL( ID_SAVE_AND_ZIP_FILES, WinEDA_MainFrame::OnArchiveFiles )
26

jerryjacobs's avatar
jerryjacobs committed
27
    /* Menu events */
28
    EVT_MENU( ID_SAVE_PROJECT, WinEDA_MainFrame::OnSaveProject )
29
    EVT_MENU( wxID_EXIT, WinEDA_MainFrame::OnExit )
30
    EVT_MENU( ID_TO_EDITOR, WinEDA_MainFrame::OnOpenTextEditor )
31
    EVT_MENU( ID_BROWSE_AN_SELECT_FILE,
32
              WinEDA_MainFrame::OnOpenFileInTextEditor )
33
    EVT_MENU( ID_SELECT_PREFERED_EDITOR,
34
              WinEDA_MainFrame::OnSelectPreferredEditor )
35
    EVT_MENU( ID_SELECT_DEFAULT_PDF_BROWSER,
36
              WinEDA_MainFrame::OnSelectDefaultPdfBrowser )
37
    EVT_MENU( ID_SELECT_PREFERED_PDF_BROWSER,
38
              WinEDA_MainFrame::OnSelectPreferredPdfBrowser )
39
    EVT_MENU( ID_SELECT_PREFERED_PDF_BROWSER_NAME,
40 41 42 43 44 45
              WinEDA_MainFrame::OnSelectPreferredPdfBrowser )
    EVT_MENU( ID_SAVE_AND_ZIP_FILES, WinEDA_MainFrame::OnArchiveFiles )
    EVT_MENU( ID_READ_ZIP_ARCHIVE, WinEDA_MainFrame::OnUnarchiveFiles )
    EVT_MENU( ID_PROJECT_TREE_REFRESH, WinEDA_MainFrame::OnRefresh )
    EVT_MENU( ID_GENERAL_HELP, WinEDA_MainFrame::GetKicadHelp )
    EVT_MENU( ID_KICAD_ABOUT, WinEDA_MainFrame::GetKicadAbout )
46

jerryjacobs's avatar
jerryjacobs committed
47
    /* Range menu events */
48
    EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END,
49 50
                    WinEDA_MainFrame::SetLanguage )

51
    EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, WinEDA_MainFrame::OnFileHistory )
52

jerryjacobs's avatar
jerryjacobs committed
53
    /* Button events */
54 55 56 57
    EVT_BUTTON( ID_TO_PCB, WinEDA_MainFrame::OnRunPcbNew )
    EVT_BUTTON( ID_TO_CVPCB, WinEDA_MainFrame::OnRunCvpcb )
    EVT_BUTTON( ID_TO_EESCHEMA, WinEDA_MainFrame::OnRunEeschema )
    EVT_BUTTON( ID_TO_GERBVIEW, WinEDA_MainFrame::OnRunGerbview )
58
    EVT_BUTTON( ID_TO_BITMAP_CONVERTER, WinEDA_MainFrame::OnRunBitmapConverter )
59

60 61 62 63
    EVT_UPDATE_UI( ID_SELECT_DEFAULT_PDF_BROWSER,
                   WinEDA_MainFrame::OnUpdateDefaultPdfBrowser )
    EVT_UPDATE_UI( ID_SELECT_PREFERED_PDF_BROWSER,
                   WinEDA_MainFrame::OnUpdatePreferredPdfBrowser )
64

65
END_EVENT_TABLE()
66 67


68
/**
jerryjacobs's avatar
jerryjacobs committed
69
 * @brief (Re)Create the menubar
70 71 72
 */
void WinEDA_MainFrame::ReCreateMenuBar()
{
73 74
    wxMenuItem *item;
    wxMenuBar  *menuBar = GetMenuBar();
75

76 77
    if( ! menuBar )
        menuBar = new wxMenuBar();
78

79 80 81 82 83 84 85 86 87
    // Delete all existing menus so they can be rebuilt.
    // This allows language changes of the menu text on the fly.
    menuBar->Freeze();
    while( menuBar->GetMenuCount() )
        delete menuBar->Remove(0);

    // Recreate all menus:

    // Files menu
88 89
    wxMenu* filesMenu = new wxMenu;

jean-pierre charras's avatar
jean-pierre charras committed
90
    // Open
91
    item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT, _( "&Open\tCtrl+O" ),
92
                           _( "Open an existing project" ) );
93 94

#if !defined( __WXMAC__ )
95
    item->SetBitmap( open_project_xpm );
96 97
#endif /* !defined( __WXMAC__ ) */

98 99
    filesMenu->Append( item );

jean-pierre charras's avatar
jean-pierre charras committed
100
    // Open Recent submenu
jerryjacobs's avatar
jerryjacobs committed
101 102 103 104 105 106 107
    wxMenu* openRecentMenu = new wxMenu();
    wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu );
    ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu,
                                        -1, _( "Open &Recent" ),
                                        _("Open a recent opened schematic project" ),
                                        open_project_xpm );

jean-pierre charras's avatar
jean-pierre charras committed
108
    // New
109
    item = new wxMenuItem( filesMenu, ID_NEW_PROJECT, _( "&New\tCtrl+N" ),
110
                           _( "Start a new project" ) );
111 112

#if !defined( __WXMAC__ )
113
    item->SetBitmap( new_project_xpm );
114 115
#endif /* !defined( __WXMAC__ ) */

116 117
    filesMenu->Append( item );

jerryjacobs's avatar
jerryjacobs committed
118
    /* Save */
119
    item = new wxMenuItem( filesMenu, ID_SAVE_PROJECT, _( "&Save\tCtrl+S" ),
120
                           _( "Save current project" ) );
121 122

#if !defined( __WXMAC__ )
123
    item->SetBitmap( save_project_xpm );
124 125
#endif /* !defined( __WXMAC__ ) */

126 127
    filesMenu->Append( item );

jean-pierre charras's avatar
jean-pierre charras committed
128
    // Archive
129
    filesMenu->AppendSeparator();
130
    item = new wxMenuItem( filesMenu, ID_SAVE_AND_ZIP_FILES, _( "&Archive" ),
131
                           _( "Archive project files in zip archive" ) );
132 133

#if !defined( __WXMAC__ )
134
    item->SetBitmap( zip_xpm );
135 136
#endif /* !defined( __WXMAC__ ) */

137 138
    filesMenu->Append( item );

jean-pierre charras's avatar
jean-pierre charras committed
139
    // Unarchive
140
    item = new wxMenuItem( filesMenu, ID_READ_ZIP_ARCHIVE, _( "&Unarchive" ),
141
                           _( "Unarchive project files from zip file" ) );
142 143

#if !defined( __WXMAC__ )
144
    item->SetBitmap( unzip_xpm );
145 146
#endif /* !defined( __WXMAC__ ) */

147 148
    filesMenu->Append( item );

149 150 151 152 153 154
    /* Quit on all platforms except WXMAC */
#if !defined( __WXMAC__ )

    filesMenu->AppendSeparator();
    item = new wxMenuItem( filesMenu, wxID_EXIT, _( "&Quit" ),
                          _( "Quit KiCad" ) );
155 156 157
    item->SetBitmap( exit_xpm );
    filesMenu->Append( item );

158 159
#endif /* !defined( __WXMAC__ ) */

160

jerryjacobs's avatar
jerryjacobs committed
161

jean-pierre charras's avatar
jean-pierre charras committed
162
    // Browse menu
163 164
    wxMenu* browseMenu = new wxMenu();

jean-pierre charras's avatar
jean-pierre charras committed
165
    // Text editor
166
    item = new wxMenuItem( browseMenu, ID_TO_EDITOR, _( "Text E&ditor" ),
167
                           _( "Open preferred text editor" ) );
168
#if !defined( __WXMAC__ )
169
    item->SetBitmap( editor_xpm );
170 171
#endif /* !defined( __WXMAC__ ) */

172 173
    browseMenu->Append( item );

jerryjacobs's avatar
jerryjacobs committed
174
    /* Browse files */
175
    item = new wxMenuItem( browseMenu, ID_BROWSE_AN_SELECT_FILE,
jerryjacobs's avatar
jerryjacobs committed
176 177
                           _( "&View File" ),
                           _( "View, read or edit file with a text editor" ) );
178
#if !defined( __WXMAC__ )
179
    item->SetBitmap( browse_files_xpm );
180 181
#endif /* !defined( __WXMAC__ ) */

182 183
    browseMenu->Append( item );

jerryjacobs's avatar
jerryjacobs committed
184 185


jean-pierre charras's avatar
jean-pierre charras committed
186
    // Preferences menu
187 188
    wxMenu* PreferencesMenu = new wxMenu;

jean-pierre charras's avatar
jean-pierre charras committed
189
    // Text editor
190 191
    item = new wxMenuItem( PreferencesMenu, ID_SELECT_PREFERED_EDITOR,
                           _( "&Text Editor" ),
192
                           _( "Select your preferred text editor" ) );
193
#if !defined( __WXMAC__ )
194
    item->SetBitmap( editor_xpm );
195 196
#endif /* !defined( __WXMAC__ ) */

197 198
    PreferencesMenu->Append( item );

jean-pierre charras's avatar
jean-pierre charras committed
199
    // PDF Viewer submenu:System browser or user defined checkbox
200 201
    wxMenu* SubMenuPdfBrowserChoice = new wxMenu;

jean-pierre charras's avatar
jean-pierre charras committed
202
    // Default
203 204
    item = new wxMenuItem( SubMenuPdfBrowserChoice,
                           ID_SELECT_DEFAULT_PDF_BROWSER,
jerryjacobs's avatar
jerryjacobs committed
205 206
                           _( "Default" ),
                           _( "Use system default PDF viewer used to browse datasheets" ),
207
                           wxITEM_CHECK );
208 209

#if !defined( __WXMAC__ )
210
    SETBITMAPS( datasheet_xpm );
211 212
#endif /* !defined( __WXMAC__ ) */

213 214 215 216
    SubMenuPdfBrowserChoice->Append( item );
    SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER,
                                    wxGetApp().m_PdfBrowserIsDefault );

jean-pierre charras's avatar
jean-pierre charras committed
217
    // Favourite viewer
218 219
    item = new wxMenuItem( SubMenuPdfBrowserChoice,
                           ID_SELECT_PREFERED_PDF_BROWSER,
jerryjacobs's avatar
jerryjacobs committed
220
                           _( "Favourite" ),
221 222
                           _( "Use your favourite PDF viewer used to browse datasheets" ),
                           wxITEM_CHECK );
223
#if !defined( __WXMAC__ )
224
    SETBITMAPS( preference_xpm );
225 226
#endif /* !defined( __WXMAC__ ) */

227 228 229 230 231
    SubMenuPdfBrowserChoice->Append( item );
    SubMenuPdfBrowserChoice->AppendSeparator();
    SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER,
                                    !wxGetApp().m_PdfBrowserIsDefault );

232
    // Append PDF Viewer submenu to preferences
233 234
    item = new wxMenuItem( SubMenuPdfBrowserChoice,
                           ID_SELECT_PREFERED_PDF_BROWSER_NAME,
jerryjacobs's avatar
jerryjacobs committed
235
                           _( "PDF Viewer" ),
236
                           _( "Select your favourite PDF viewer used to browse datasheets" ) );
237
#if !defined( __WXMAC__ )
238
    item->SetBitmap( datasheet_xpm );
239 240
#endif /* !defined( __WXMAC__ ) */

241 242 243 244
    SubMenuPdfBrowserChoice->Append( item );

    ADD_MENUITEM_WITH_HELP_AND_SUBMENU( PreferencesMenu,
                                        SubMenuPdfBrowserChoice,
jerryjacobs's avatar
jerryjacobs committed
245 246
                                        -1, _( "PDF Viewer" ),
                                        _( "PDF viewer preferences" ),
247 248
                                        datasheet_xpm );

249
    // Add languages list:
250
    PreferencesMenu->AppendSeparator();
251
    wxGetApp().AddMenuLanguageList( PreferencesMenu );
252

jean-pierre charras's avatar
jean-pierre charras committed
253
    // Help menu
254 255
    wxMenu* helpMenu = new wxMenu;

256 257
    AddHelpVersionInfoMenuEntry( helpMenu );

jerryjacobs's avatar
jerryjacobs committed
258
    /* Contents */
259 260
    item = new wxMenuItem( helpMenu, ID_GENERAL_HELP, _( "&Contents" ),
                           _( "Open the kicad manual" ) );
261

262
#if !defined( __WXMAC__ )
jp's avatar
jp committed
263
    item->SetBitmap( online_help_xpm );
264 265
#endif /* !defined( __WXMAC__ ) */

266 267
    helpMenu->Append( item );

jean-pierre charras's avatar
jean-pierre charras committed
268
    // About
269
    helpMenu->AppendSeparator();
270 271 272 273 274
    item = new wxMenuItem( helpMenu, ID_KICAD_ABOUT, _( "&About" ),
                           _( "About kicad project manager" ) );
    item->SetBitmap( info_xpm );
    helpMenu->Append( item );

jean-pierre charras's avatar
jean-pierre charras committed
275
    // Create the menubar and append all submenus
276 277 278 279 280
    menuBar->Append( filesMenu, _( "&File" ) );
    menuBar->Append( browseMenu, _( "&Browse" ) );
    menuBar->Append( PreferencesMenu, _( "&Preferences" ) );
    menuBar->Append( helpMenu, _( "&Help" ) );

281 282 283 284 285 286 287
    menuBar->Thaw();

    // Associate the menu bar with the frame, if no previous menubar
    if( GetMenuBar() == NULL )
        SetMenuBar( menuBar );
    else
        menuBar->Refresh();
288 289 290
}


291
/**
jerryjacobs's avatar
jerryjacobs committed
292
 * @brief (Re)Create the horizontal toolbar
293
 */
294
void WinEDA_MainFrame::RecreateBaseHToolbar()
295
{
jerryjacobs's avatar
jerryjacobs committed
296
    /* Check if toolbar is not already created */
297 298
    if( m_HToolBar != NULL )
        return;
299

jerryjacobs's avatar
jerryjacobs committed
300
    /* Allocate memory for m_HToolBar */
301
    m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE );
302

jerryjacobs's avatar
jerryjacobs committed
303
    /* New */
304 305
    m_HToolBar->AddTool( ID_NEW_PROJECT, wxEmptyString,
                         wxBitmap( new_project_xpm ),
306
                         _( "Start a new project" ) );
307

jerryjacobs's avatar
jerryjacobs committed
308
    /* Load */
309 310
    m_HToolBar->AddTool( ID_LOAD_PROJECT, wxEmptyString,
                         wxBitmap( open_project_xpm ),
311
                         _( "Load existing project" ) );
312

jerryjacobs's avatar
jerryjacobs committed
313
    /* Save */
314 315
    m_HToolBar->AddTool( ID_SAVE_PROJECT, wxEmptyString,
                         wxBitmap( save_project_xpm ),
316
                         _( "Save current project" ) );
317

jerryjacobs's avatar
jerryjacobs committed
318
    /* Separator */
319
    m_HToolBar->AddSeparator();
320

jerryjacobs's avatar
jerryjacobs committed
321
    /* Archive */
322 323
    m_HToolBar->AddTool( ID_SAVE_AND_ZIP_FILES, wxEmptyString,
                         wxBitmap( zip_xpm ),
jerryjacobs's avatar
jerryjacobs committed
324
                         _( "Archive all project files" ) );
325

jerryjacobs's avatar
jerryjacobs committed
326
    /* Separator */
327
    m_HToolBar->AddSeparator();
328

jerryjacobs's avatar
jerryjacobs committed
329
    /* Refresh project tree */
330 331
    m_HToolBar->AddTool( ID_PROJECT_TREE_REFRESH, wxEmptyString,
                         wxBitmap( reload_xpm ),
332
                         _( "Refresh project tree" ) );
333

jerryjacobs's avatar
jerryjacobs committed
334 335
    /* Create m_HToolBar */
    m_HToolBar->Realize();
336
}