	/*****************************************************/
	/*	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();
}



