00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "a2dprec.h"
00012
00013 #ifdef __BORLANDC__
00014 #pragma hdrstop
00015 #endif
00016
00017 #ifndef WX_PRECOMP
00018 #include "wx/wx.h"
00019 #endif
00020
00021
00022 #include "wx/editor/doccancom.h"
00023
00024 #include "wx/editor/tooldlg.h"
00025
00026 BEGIN_EVENT_TABLE( ToolDlg, wxMiniFrame )
00027
00028 EVT_CLOSE( ToolDlg::OnCloseWindow )
00029
00030 END_EVENT_TABLE()
00031
00032
00033 wxBitmap* GetBitmap( const wxString& name )
00034 {
00035 wxImage image(32,32);
00036 bool loaded = false;
00037 wxString file;
00038 do {
00039 #if wxUSE_LIBPNG
00040 file = a2dGlobals->GetIconPathList().FindValidPath(name + _T(".png") );
00041 if ( !file.IsEmpty() && image.LoadFile( file ,wxBITMAP_TYPE_PNG) ) {
00042 loaded = true;
00043 break;
00044 }
00045 #endif
00046 file = a2dGlobals->GetIconPathList().FindValidPath(name + _T(".ico") );
00047 if ( !file.IsEmpty() && image.LoadFile( file ) )
00048 {
00049 loaded = true;
00050 break;
00051 }
00052 file = a2dGlobals->GetIconPathList().FindValidPath(name + _T(".bmp") );
00053 if ( !file.IsEmpty() && image.LoadFile( file ,wxBITMAP_TYPE_BMP) ) {
00054 loaded = true;
00055 break;
00056 }
00057 } while(false);
00058
00059 if (!loaded) {
00060 a2dDocviewGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _("invalid bitmap %s"), name.c_str());
00061 }
00062 return new wxBitmap( image );
00063 }
00064
00065 ToolDlg::ToolDlg( wxFrame* parent ):
00066 wxMiniFrame(parent,-1,_T("Tools"),wxDefaultPosition, wxDefaultSize, wxSTAY_ON_TOP | wxDEFAULT_DIALOG_STYLE | wxDIALOG_NO_PARENT )
00067 {
00068 a2dDocviewGlobals->GetEventDistributer()->Register( this );
00069
00070
00071
00072 m_sizer = new wxGridSizer(2);
00073
00074 m_panel = new wxPanel(this,-1,wxDefaultPosition,wxDefaultSize,0,_T("panel"));
00075 m_panel->SetSizer( m_sizer );
00076
00077 Populate();
00078
00079 m_panel->SetAutoLayout( true );
00080 m_sizer->SetSizeHints( this );
00081 m_sizer->Fit( this );
00082
00083 if (parent) {
00084
00085 wxPoint pt = parent->GetPosition();
00086 wxSize dim = GetSize();
00087 Move(pt.x-dim.x,pt.y);
00088 }
00089 else {
00090 Centre(wxBOTH);
00091 }
00092 }
00093
00094 ToolDlg::~ToolDlg()
00095 {
00096 a2dDocviewGlobals->GetEventDistributer()->Unregister( this );
00097 }
00098
00099 void ToolDlg::Populate()
00100 {
00101 wxBitmap* toolbitmap = GetBitmap( _T("zoom"));
00102 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Zoom );
00103 delete toolbitmap;
00104
00105 toolbitmap = GetBitmap( _T("polygon") );
00106 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawPolygonL );
00107 delete toolbitmap;
00108
00109 toolbitmap = GetBitmap( _T("polygon2") );
00110 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawPolygonL_Splined );
00111 delete toolbitmap;
00112
00113 toolbitmap = GetBitmap( _T("polyline") );
00114 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawPolylineL );
00115 delete toolbitmap;
00116
00117 toolbitmap = GetBitmap( _T("polyline2") );
00118 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawPolylineL_Splined );
00119 delete toolbitmap;
00120
00121 toolbitmap = GetBitmap( _T("rectangle") );
00122 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawRectangle );
00123 delete toolbitmap;
00124
00125 toolbitmap = GetBitmap( _T("circle") );
00126 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawCircle );
00127 delete toolbitmap;
00128
00129 toolbitmap = GetBitmap( _T("ellipse") );
00130 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawEllipse );
00131 delete toolbitmap;
00132
00133 toolbitmap = GetBitmap( _T("ellipticarc") );
00134 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawEllipticArc );
00135 delete toolbitmap;
00136
00137 toolbitmap = GetBitmap( _T("ellipticarcchord") );
00138 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawEllipticArc_Chord );
00139 delete toolbitmap;
00140
00141 toolbitmap = GetBitmap( _T("arc") );
00142 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawArc );
00143 delete toolbitmap;
00144
00145 toolbitmap = GetBitmap( _T("arcchord") );
00146 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawArc_Chord );
00147 delete toolbitmap;
00148
00149 toolbitmap = GetBitmap( _T("text") );
00150 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_DrawText );
00151 delete toolbitmap;
00152
00153 toolbitmap = GetBitmap( _T("image") );
00154 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Image );
00155 delete toolbitmap;
00156
00157 toolbitmap = GetBitmap( _T("rotate") );
00158 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Rotate );
00159 delete toolbitmap;
00160
00161 toolbitmap = GetBitmap( _T("move") );
00162 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Drag );
00163 delete toolbitmap;
00164
00165 toolbitmap = GetBitmap( _T("copy") );
00166 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Copy );
00167 delete toolbitmap;
00168
00169 toolbitmap = GetBitmap( _T("delete") );
00170 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Delete );
00171 delete toolbitmap;
00172
00173 toolbitmap = GetBitmap( _T("edit_tool") );
00174 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_RecursiveEdit );
00175 delete toolbitmap;
00176
00177 toolbitmap = GetBitmap( _T("select_tool") );
00178 AddCmdMenu( *toolbitmap, CmdMenu_PushTool_Select );
00179 delete toolbitmap;
00180 }
00181
00182 void ToolDlg::RemoveCmdMenu( const a2dMenuIdItem& cmdId )
00183 {
00184 Disconnect( cmdId.GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ToolDlg::OnCmdMenuId ) );
00185
00186 }
00187
00188 void ToolDlg::AddCmdMenu( wxBitmap& bitmap, const a2dMenuIdItem& cmdId )
00189 {
00190 Connect( cmdId.GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ToolDlg::OnCmdMenuId ) );
00191 wxBitmapButton* tool = new wxBitmapButton( m_panel, cmdId.GetId(), bitmap );
00192 tool->SetToolTip( cmdId.GetHelp() );
00193 m_sizer->Add( tool, 0, wxALL, 1 );
00194 }
00195
00196 void ToolDlg::OnCmdMenuId(wxCommandEvent &event)
00197 {
00198
00199 wxMenuEvent eventMenu( wxEVT_COMMAND_MENU_SELECTED, event.GetId() );
00200 a2dGetCmdh()->ProcessEvent( eventMenu );
00201
00202
00203 }
00204
00205 void ToolDlg::OnCloseWindow(wxCloseEvent& WXUNUSED(event) )
00206 {
00207 Show( false );
00208 }
00209