kicad/eeschema/tool_sch.cpp

328 lines
9.6 KiB
C++

/*****************************************************/
/* toolsch.cpp; vreate toolbars for schematic frame */
/*****************************************************/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "protos.h"
#define BITMAP wxBitmap
#include "bitmaps.h" /* general bitmaps */
/* Specific bitmaps */
#include "cvpcb.xpm"
#include "Hierarchy_Nav.xpm"
#include "Hierarchy_cursor.xpm"
#include "Add_Power.xpm"
#include "Lines90.xpm"
#include "Hidden_Pin.xpm"
#include "Add_Bus2Bus.xpm"
#include "Add_Line2Bus.xpm"
#include "add_bus.xpm"
#include "library_browse.xpm"
#include "libedit.xpm"
#include "add_hierar_pin.xpm"
#include "add_hierar_symbol.xpm"
#include "Import_GLabel.xpm"
#include "id.h"
/**************************************************************/
void WinEDA_SchematicFrame::ReCreateHToolbar(void)
/**************************************************************/
/* Create Horizontal (main) Toolbar
*/
{
if ( m_HToolBar != NULL ) return;
m_HToolBar = new WinEDA_Toolbar(TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE);
SetToolBar(m_HToolBar);
// Set up toolbar
m_HToolBar->AddTool(ID_NEW_PROJECT, wxEmptyString, BITMAP(new_xpm),
_("New schematic project"));
m_HToolBar->AddTool(ID_LOAD_PROJECT, wxEmptyString, BITMAP(open_xpm),
_("Open schematic project"));
m_HToolBar->AddTool(ID_SAVE_PROJECT, wxEmptyString, BITMAP(save_project_xpm),
_("Save schematic project"));
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_SHEET_SET, wxEmptyString, BITMAP(sheetset_xpm),
_("page settings (size, texts)") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_TO_LIBRARY, wxEmptyString, BITMAP(libedit_xpm),
_("go to library editor") );
m_HToolBar->AddTool(ID_TO_LIBVIEW, wxEmptyString, BITMAP(library_browse_xpm),
_("go to library browse") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_HIERARCHY, wxEmptyString, BITMAP(hierarchy_nav_xpm),
_("Schematic Hierarchy Navigator") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(wxID_CUT, wxEmptyString, BITMAP(cut_button),
_("Cut selected item") );
m_HToolBar->AddTool(wxID_COPY, wxEmptyString, BITMAP(copy_button),
_("Copy selected item") );
m_HToolBar->AddTool(wxID_PASTE, wxEmptyString, BITMAP(paste_xpm),
_("Paste") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_SCHEMATIC_UNDO, wxEmptyString, BITMAP(undo_xpm),
_("Undo last edition"));
m_HToolBar->AddTool(ID_SCHEMATIC_REDO, wxEmptyString, BITMAP(redo_xpm),
_("Redo the last undo command"));
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_GEN_PRINT, wxEmptyString, BITMAP(print_button),
_("Print schematic") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_TO_CVPCB, wxEmptyString, BITMAP(cvpcb_xpm),
_("Run Cvpcb") );
m_HToolBar->AddTool(ID_TO_PCB, wxEmptyString, BITMAP(pcbnew_xpm),
_("Run Pcbnew") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP(zoom_in_xpm),
_("zoom + (F1)"));
m_HToolBar->AddTool(ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP(zoom_out_xpm),
_("zoom - (F2)"));
m_HToolBar->AddTool(ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP(repaint_xpm),
_("redraw (F3)") );
m_HToolBar->AddTool(ID_ZOOM_PAGE_BUTT, wxEmptyString, BITMAP(zoom_optimal_xpm),
_("auto zoom") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_FIND_ITEMS, wxEmptyString, BITMAP(find_xpm),
_("Find components and texts") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_GET_NETLIST, wxEmptyString, BITMAP(netlist_xpm),
_("Netlist generation") );
m_HToolBar->AddTool(ID_GET_ANNOTATE, wxEmptyString, BITMAP(annotate_xpm),
_("Schematic Annotation") );
m_HToolBar->AddTool(ID_GET_ERC, wxEmptyString, BITMAP(erc_xpm),
_("Schematic Electric Rules Check") );
m_HToolBar->AddTool(ID_GET_TOOLS, wxEmptyString, BITMAP(tools_xpm),
_("Bill of material and/or Crossreferences") );
// after adding the buttons to the toolbar, must call Realize() to reflect
// the changes
m_HToolBar->Realize();
SetToolbars();
}
/*************************************************/
void WinEDA_SchematicFrame::ReCreateVToolbar(void)
/*************************************************/
/* Create Vertical Right Toolbar
*/
{
if( m_VToolBar ) return;
m_VToolBar = new WinEDA_Toolbar(TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE);
// Set up toolbar
m_VToolBar->AddTool(ID_NO_SELECT_BUTT, wxEmptyString,
BITMAP(cursor_xpm), wxEmptyString, wxITEM_CHECK );
m_VToolBar->ToggleTool(ID_NO_SELECT_BUTT, TRUE);
m_VToolBar->AddTool(ID_HIERARCHY_PUSH_POP_BUTT, wxEmptyString,
BITMAP(hierarchy_cursor_xpm),
_("Hierarchy Push/Pop"), wxITEM_CHECK );
m_VToolBar->AddSeparator();
m_VToolBar->AddTool(ID_COMPONENT_BUTT, wxEmptyString,
BITMAP(add_component_xpm),
_("Add components"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_PLACE_POWER_BUTT, wxEmptyString,
BITMAP(add_power_xpm),
_("Add powers"), wxITEM_CHECK );
m_VToolBar->AddSeparator();
m_VToolBar->AddTool(ID_WIRE_BUTT, wxEmptyString,
BITMAP(add_line_xpm),
_("Add wires"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_BUS_BUTT, wxEmptyString,
BITMAP(add_bus_xpm),
_("Add bus"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_WIRETOBUS_ENTRY_BUTT, wxEmptyString,
BITMAP(add_line2bus_xpm),
_("Add wire to bus entry"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_BUSTOBUS_ENTRY_BUTT, wxEmptyString,
BITMAP(add_bus2bus_xpm),
_("Add bus to bus entry"), wxITEM_CHECK );
m_VToolBar->AddSeparator();
m_VToolBar->AddTool(ID_NOCONN_BUTT, wxEmptyString,
BITMAP(noconn_button),
_("Add no connect flag"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_LABEL_BUTT, wxEmptyString,
BITMAP(add_line_label_xpm),
_("Add wire or bus label"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_GLABEL_BUTT, wxEmptyString,
BITMAP(add_glabel_xpm),
_("Add global label"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_JUNCTION_BUTT, wxEmptyString,
BITMAP(add_junction_xpm),
_("Add junction"), wxITEM_CHECK );
m_VToolBar->AddSeparator();
m_VToolBar->AddTool(ID_SHEET_SYMBOL_BUTT, wxEmptyString,
BITMAP(add_hierar_symbol_xpm),
_("Add hierarchical symbol (sheet)") , wxITEM_CHECK);
m_VToolBar->AddTool(ID_IMPORT_GLABEL_BUTT, wxEmptyString,
BITMAP(import_glabel_xpm),
_("import glabel from sheet & create pinsheet"), wxITEM_CHECK );
m_VToolBar->AddTool(ID_SHEET_LABEL_BUTT, wxEmptyString,
BITMAP(add_hierar_pin_xpm),
_("Add hierachical pin to sheet"), wxITEM_CHECK );
m_VToolBar->AddSeparator();
m_VToolBar->AddTool(ID_LINE_COMMENT_BUTT, wxEmptyString,
BITMAP(add_dashed_line_xpm),
_("Add graphic line or polygon") , wxITEM_CHECK);
m_VToolBar->AddTool(ID_TEXT_COMMENT_BUTT, wxEmptyString,
BITMAP(add_text_xpm),
_("Add graphic text (comment)"), wxITEM_CHECK );
m_VToolBar->AddSeparator();
m_VToolBar->AddTool(ID_SCHEMATIC_DELETE_ITEM_BUTT, wxEmptyString,
BITMAP(delete_body_xpm),
_("Delete items"), wxITEM_CHECK );
m_VToolBar->Realize();
SetToolbars();
}
/****************************************************************/
void WinEDA_SchematicFrame::ReCreateOptToolbar(void)
/****************************************************************/
/* Create Vertical Left Toolbar (Option Toolbar)
*/
{
if ( m_OptionsToolBar ) return;
// creation du tool bar options
m_OptionsToolBar = new WinEDA_Toolbar(TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE);
m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_GRID, wxEmptyString,
BITMAP(grid_xpm),
_("Display Grid OFF"), wxITEM_CHECK );
m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_UNIT_INCH, wxEmptyString,
BITMAP(unit_inch_xpm),
_("Units = Inch"), wxITEM_CHECK );
m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_UNIT_MM, wxEmptyString,
BITMAP(unit_mm_xpm),
_("Units = mm"), wxITEM_CHECK );
m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_CURSOR, wxEmptyString,
BITMAP(cursor_shape_xpm),
_("Change Cursor Shape"), wxITEM_CHECK );
m_OptionsToolBar->AddSeparator();
m_OptionsToolBar->AddTool(ID_TB_OPTIONS_HIDDEN_PINS, wxEmptyString,
BITMAP(hidden_pin_xpm),
_("Show Hidden Pins"), wxITEM_CHECK );
m_OptionsToolBar->AddSeparator();
m_OptionsToolBar->AddTool(ID_TB_OPTIONS_BUS_WIRES_ORIENT, wxEmptyString,
BITMAP(lines90_xpm),
_("HV orientation for Wires and Bus"), wxITEM_CHECK );
m_OptionsToolBar->Realize();
SetToolbars();
}
/*******************************************************************************************/
void WinEDA_SchematicFrame::OnSelectOptionToolbar(wxCommandEvent& event)
/*******************************************************************************************/
{
if ( DrawPanel == NULL ) return;
int id = event.GetId();
wxClientDC dc(DrawPanel);
DrawPanel->PrepareGraphicContext(&dc);
switch ( id )
{
case ID_TB_OPTIONS_SHOW_GRID:
g_ShowGrid = m_Draw_Grid = m_OptionsToolBar->GetToolState(id);
ReDrawPanel();
break;
case ID_TB_OPTIONS_SELECT_UNIT_MM:
g_UnitMetric = MILLIMETRE;
Affiche_Status_Box(); /* Reaffichage des coord curseur */
break;
case ID_TB_OPTIONS_SELECT_UNIT_INCH:
g_UnitMetric = INCHES;
Affiche_Status_Box(); /* Reaffichage des coord curseur */
break;
case ID_TB_OPTIONS_SELECT_CURSOR:
DrawPanel->CursorOff(&dc);
g_CursorShape = m_OptionsToolBar->GetToolState(id);
DrawPanel->CursorOn(&dc);
break;
case ID_TB_OPTIONS_HIDDEN_PINS:
g_ShowAllPins = m_OptionsToolBar->GetToolState(id);
DrawPanel->ReDraw(&dc, TRUE);
break;
case ID_TB_OPTIONS_BUS_WIRES_ORIENT:
g_HVLines = m_OptionsToolBar->GetToolState(id);
break;
default:
DisplayError(this, wxT("OnSelectOptionToolbar() error") );
break;
}
SetToolbars();
}