kicad/eeschema/menubar.cpp

413 lines
12 KiB
C++

/*************************************************************/
/* menubar.cpp - create the menubar for the schematic frame */
/*************************************************************/
#ifdef __GNUG__
#pragma implementation
#endif
#include "fctsys.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "bitmaps.h"
#include "protos.h"
#include "id.h"
#include "hotkeys.h"
/* Specific bitmaps */
#include "Add_Power.xpm"
#include "add_bus.xpm"
#include "Add_Line2Bus.xpm"
#include "Add_Bus2Bus.xpm"
#include "add_hierar_symbol.xpm"
#include "add_hierar_pin.xpm"
#include "Import_GLabel.xpm"
/************************************************/
void WinEDA_SchematicFrame::ReCreateMenuBar()
/************************************************/
/* create or update the menubar for the schematic frame
*/
{
int ii;
wxMenuBar * menuBar = GetMenuBar();
wxString msg;
if( menuBar == NULL )
{
menuBar = new wxMenuBar();
m_FilesMenu = new wxMenu;
// Menu File:
wxMenuItem *item = new wxMenuItem(m_FilesMenu, ID_NEW_PROJECT,
_("&New"),
_("New schematic") );
item->SetBitmap(new_xpm);
m_FilesMenu->Append(item);
item = new wxMenuItem(m_FilesMenu, ID_LOAD_PROJECT,
_("&Open"),
_("Open a schematic") );
item->SetBitmap(open_xpm);
m_FilesMenu->Append(item);
item = new wxMenuItem(m_FilesMenu, ID_LOAD_ONE_SHEET,
_("&Reload the current sheet"),
_("Load or reload a schematic file from file into the current sheet") );
item->SetBitmap(import_xpm);
m_FilesMenu->Append(item);
m_FilesMenu->AppendSeparator();
item = new wxMenuItem(m_FilesMenu,ID_SAVE_PROJECT,
_("&Save"),
_("Save schematic project") );
item->SetBitmap(save_project_xpm);
m_FilesMenu->Append(item);
m_FilesMenu->AppendSeparator();
item = new wxMenuItem(m_FilesMenu, ID_SAVE_ONE_SHEET,
_("Save &Current sheet"),
_("Save current sheet only") );
item->SetBitmap(save_xpm);
m_FilesMenu->Append(item);
item = new wxMenuItem(m_FilesMenu, ID_SAVE_ONE_SHEET_AS,
_("Save Current sheet &as.."),
_("Save current sheet as..") );
item->SetBitmap(save_as_xpm);
m_FilesMenu->Append(item);
item = new wxMenuItem(m_FilesMenu, ID_GEN_PRINT,
_("P&rint"), _("Print on current printer") );
item->SetBitmap(print_button);
m_FilesMenu->Append(item);
/* Plot Submenu */
wxMenu *choice_plot_fmt = new wxMenu;
item = new wxMenuItem(choice_plot_fmt, ID_GEN_PLOT_PS,
_("Plot PostScript"), _("Plotting in PostScript format") );
item->SetBitmap(plot_PS_xpm);
choice_plot_fmt->Append(item);
item = new wxMenuItem(choice_plot_fmt, ID_GEN_PLOT_HPGL,
_("Plot HPGL"), _("Plotting in HPGL format") );
item->SetBitmap(plot_HPG_xpm);
choice_plot_fmt->Append(item);
item = new wxMenuItem(choice_plot_fmt, ID_GEN_PLOT_SVG,
_("Plot SVG"), _("Plotting in SVG format") );
item->SetBitmap(plot_xpm);
choice_plot_fmt->Append(item);
#ifdef __WINDOWS__
/* Under windows, one can draw to the clipboard */
item = new wxMenuItem(choice_plot_fmt, ID_GEN_COPY_SHEET_TO_CLIPBOARD,
_("Plot to Clipboard"), _("Export drawings to clipboard") );
item->SetBitmap(copy_button);
choice_plot_fmt->Append(item);
#endif
m_FilesMenu->AppendSeparator();
ADD_MENUITEM_WITH_HELP_AND_SUBMENU(m_FilesMenu, choice_plot_fmt,
ID_GEN_PLOT, _("&Plot"), _("Plot HPGL, PostScript, SVG"), plot_xpm);
m_FilesMenu->AppendSeparator();
item = new wxMenuItem(m_FilesMenu, ID_EXIT, _("E&xit"), _("Quit Eeschema") );
item->SetBitmap(exit_xpm);
m_FilesMenu->Append(item);
// Create the list of last edited schematic files
m_FilesMenu->AppendSeparator();
int max_file = m_Parent->m_LastProjectMaxCount;
for ( ii = 0; ii < max_file; ii++ )
{
if ( GetLastProject(ii).IsEmpty() ) break;
item = new wxMenuItem(m_FilesMenu, ID_LOAD_FILE_1 + ii,
GetLastProject(ii));
m_FilesMenu->Append(item);
}
// Menu Edit:
wxMenu * editMenu = new wxMenu;
msg = AddHotkeyName( _( "&Undo\t" ), s_Schematic_Hokeys_Descr, HK_UNDO );
item = new wxMenuItem(editMenu, ID_SCHEMATIC_UNDO,
msg,
_("Undo last edition") );
item->SetBitmap(undo_xpm);
editMenu->Append(item);
msg = AddHotkeyName( _( "&Redo\t" ), s_Schematic_Hokeys_Descr, HK_REDO );
item = new wxMenuItem(editMenu, ID_SCHEMATIC_REDO,
msg,
_("Redo the last undo command") );
item->SetBitmap(redo_xpm);
editMenu->Append(item);
editMenu->AppendSeparator();
item = new wxMenuItem(
editMenu,
ID_SCHEMATIC_DELETE_ITEM_BUTT,
_("Delete"),
_("Delete items"),
wxITEM_NORMAL
);
item->SetBitmap(delete_body_xpm);
editMenu->Append(item);
// Place Menu
//TODO: Unify the ID names!
wxMenu *placeMenu = new wxMenu;
item = new wxMenuItem(
placeMenu,
ID_COMPONENT_BUTT,
_("&Component"),
_("Place the component")
);
item->SetBitmap(add_component_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_PLACE_POWER_BUTT,
_("&Power port"),
_("Place the power port"),
wxITEM_NORMAL
);
item->SetBitmap(add_power_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_WIRE_BUTT,
_("&Wire"),
_("Place the wire"),
wxITEM_NORMAL
);
item->SetBitmap(add_line_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_BUS_BUTT,
_("&Bus"),
_("Place the bus"),
wxITEM_NORMAL
);
item->SetBitmap(add_bus_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_WIRETOBUS_ENTRY_BUTT,
_("W&ire to bus entry"),
_("Place the wire to bus entry"),
wxITEM_NORMAL
);
item->SetBitmap(add_line2bus_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_BUSTOBUS_ENTRY_BUTT,
_("B&us to bus entry"),
_("Place the bus to bus entry"),
wxITEM_NORMAL
);
item->SetBitmap(add_bus2bus_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_NOCONN_BUTT,
_("No connect flag"),
_("Place the no connect flag"),
wxITEM_NORMAL
);
item->SetBitmap(noconn_button);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_LABEL_BUTT,
_("Net name"),
_("Place the Net name"),
wxITEM_NORMAL
);
item->SetBitmap(add_line_label_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_GLABEL_BUTT,
_("Global label"),
_("Place the global label"),
wxITEM_NORMAL
);
item->SetBitmap(add_glabel_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_HIERLABEL_BUTT,
_("Hierarchical label"),
_("Place the hierarchical label"),
wxITEM_NORMAL
);
item->SetBitmap(add_glabel_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_JUNCTION_BUTT,
_("Junction"),
_("Place the junction"),
wxITEM_NORMAL
);
item->SetBitmap(add_junction_xpm);
placeMenu->Append(item);
placeMenu->AppendSeparator();
item = new wxMenuItem(
placeMenu,
ID_SHEET_SYMBOL_BUTT,
_("Hierarchical sheet"),
_("Place the hierarchical sheet"),
wxITEM_NORMAL
);
item->SetBitmap(add_hierar_symbol_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_IMPORT_GLABEL_BUTT,
_("Imported hierarchical label"),
_("Place the pinsheet (imported hierarchical label from sheet)"),
wxITEM_NORMAL
);
item->SetBitmap(import_glabel_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_SHEET_LABEL_BUTT,
_("Hierarchical pin to sheet"),
_("Place the hierarchical pin to sheet"),
wxITEM_NORMAL
);
item->SetBitmap(add_hierar_pin_xpm);
placeMenu->Append(item);
placeMenu->AppendSeparator();
item = new wxMenuItem(
placeMenu,
ID_LINE_COMMENT_BUTT,
_("Graphic line or poligon"),
_("Place the Graphic line or poligon"),
wxITEM_NORMAL
);
item->SetBitmap(add_dashed_line_xpm);
placeMenu->Append(item);
item = new wxMenuItem(
placeMenu,
ID_TEXT_COMMENT_BUTT,
_("Graphic text (comment)"),
_("Place the Graphic text (comment)"),
wxITEM_NORMAL
);
item->SetBitmap(add_text_xpm);
placeMenu->Append(item);
// Menu Configuration:
wxMenu * configmenu = new wxMenu;
item = new wxMenuItem(configmenu, ID_CONFIG_REQ,
_("&Libs and Dir"),
_("Setting Libraries, Directories and others...") );
item->SetBitmap(library_xpm);
configmenu->Append(item);
item = new wxMenuItem(configmenu, ID_COLORS_SETUP,
_("&Colors"),
_("Setting colors...") );
item->SetBitmap(palette_xpm);
configmenu->Append(item);
// ADD_MENUITEM(configmenu, ID_OPTIONS_SETUP, _("&Options"), preference_xpm);
item = new wxMenuItem(configmenu, ID_OPTIONS_SETUP,
_("&Options"),
_("Select general options...") );
item->SetBitmap(preference_xpm);
configmenu->Append(item);
// Font selection and setup
AddFontSelectionMenu(configmenu);
m_Parent->SetLanguageList(configmenu);
configmenu->AppendSeparator();
item = new wxMenuItem(configmenu, ID_CONFIG_SAVE, _("&Save preferences"),
_("Save application preferences") );
item->SetBitmap(save_setup_xpm);
configmenu->Append(item);
item = new wxMenuItem(configmenu, ID_CONFIG_READ, _("&Read preferences"),
_("Read application preferences"));
item->SetBitmap(read_setup_xpm);
configmenu->Append(item);
configmenu->AppendSeparator();
AddHotkeyConfigMenu( configmenu );
// Menu Help:
wxMenu *helpMenu = new wxMenu;
item = new wxMenuItem(helpMenu , ID_GENERAL_HELP,
_("&Contents"), _("Open the eeschema manual"));
item->SetBitmap(help_xpm);
helpMenu->Append(item);
item = new wxMenuItem(helpMenu , ID_KICAD_ABOUT,
_("&About"), _("About this application"));
item->SetBitmap(info_xpm);
helpMenu->Append(item);
menuBar->Append(m_FilesMenu, _("&File") );
menuBar->Append(editMenu, _("&Edit") );
menuBar->Append(placeMenu, _("&Place") );
menuBar->Append(configmenu, _("&Preferences") );
menuBar->Append(helpMenu, _("&Help") );
// Associate the menu bar with the frame
SetMenuBar(menuBar);
}
else // Update the list of last edited schematic files
{
wxMenuItem * item;
int max_file = m_Parent->m_LastProjectMaxCount;
for ( ii = max_file-1; ii >=0 ; ii-- )
{
if( m_FilesMenu->FindItem(ID_LOAD_FILE_1 + ii) )
{
item = m_FilesMenu->Remove(ID_LOAD_FILE_1 + ii);
if ( item ){ SAFE_DELETE( item );}
}
}
for ( ii = 0; ii < max_file; ii++ )
{
if ( GetLastProject(ii).IsEmpty() ) break;
item = new wxMenuItem(m_FilesMenu, ID_LOAD_FILE_1 + ii,
GetLastProject(ii));
m_FilesMenu->Append(item);
}
}
}