#include <wx/wx.h>
#include <wx/toolbar.h>
#include "wxg.h"
#include "gplane.h"
#include "../include/leonardo.h"
#include "../include/rectangle.h"
#include "shapefactory.h"
#include "graphicscontext.h"
using namespace goeland_wx;
BEGIN_EVENT_TABLE( wxGFrame, wxFrame )
EVT_MENU( Menu_File_Quit, wxGFrame::OnQuit )
EVT_MENU( Menu_File_About, wxGFrame::OnAbout )
EVT_TOOL( IDT_TOOL_ARROW, wxGFrame::OnToolArrow )
EVT_TOOL( IDT_TOOL_RECT, wxGFrame::OnToolRect )
EVT_TOOL( IDT_TOOL_IMG, wxGFrame::OnToolImg )
END_EVENT_TABLE()
IMPLEMENT_APP(wxGapp)
bool
wxGapp::OnInit()
{
wxGFrame *frame = new wxGFrame( wxT( "Goeland Example" ), wxPoint(50,50), wxSize(450,340) );
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
wxGFrame::wxGFrame( const wxString& title, const wxPoint& pos, const wxSize& size )
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append( Menu_File_About, wxT( "&About..." ) );
menuFile->AppendSeparator();
menuFile->Append( Menu_File_Quit, wxT( "E&xit" ) );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, wxT( "&File" ) );
SetMenuBar( menuBar );
SetAutoLayout( TRUE );
toolbar = new wxToolBar( this, -1,
wxDefaultPosition,
wxDefaultSize,
wxTB_FLAT | wxTB_3DBUTTONS );
wxLayoutConstraints *lc = new wxLayoutConstraints;
lc->left.SameAs ( this, wxLeft );
lc->top.SameAs ( this, wxTop );
lc->width.SameAs ( this, wxWidth );
lc->height.Absolute( 30 );
toolbar->SetConstraints( lc );
plane = new gPlane( this, -1, wxPoint(0,0), GetSize( ));
lc = new wxLayoutConstraints;
lc->left.SameAs ( this, wxLeft );
lc->top.Below ( toolbar );
lc->width.SameAs ( this, wxWidth );
lc->bottom.SameAs ( this, wxBottom );
plane->SetConstraints( lc );
wxImage::AddHandler( new wxPNGHandler );
toolbar->AddTool( IDT_TOOL_ARROW,
wxBitmap( new wxImage( "/usr/share/goeland/images/arrow.png" )),
wxNullBitmap,
TRUE,
-1, // xPos
-1, // yPos
NULL,
wxString( _T( "Arrow" )),
"" );
toolbar->AddTool( IDT_TOOL_RECT,
wxBitmap( new wxImage( "/usr/share/goeland/images/rectangle.png" )),
wxNullBitmap,
TRUE,
-1, // xPos
-1, // yPos
NULL,
wxString( _T( "Rectangle" )),
"" );
toolbar->AddTool( IDT_TOOL_IMG,
wxBitmap( new wxImage( "/usr/share/goeland/images/rectangle.png" )),
wxNullBitmap,
TRUE,
-1, // xPos
-1, // yPos
NULL,
wxString( _T( "Image" )),
"" );
CreateStatusBar();
SetStatusText( wxT( "Welcome to the Goeland Example !" ) );
// Initialize Goeland
using namespace goeland_base;
leonardo = Leonardo::getInstance( );
leonardo->setShapeFactory( new goeland_wx::ShapeFactory( ));
leonardo->setGraphicsContext( new goeland_wx::GraphicsContext( plane ));
}
void
wxGFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) )
{
Close(TRUE);
}
wxGFrame::~wxGFrame( )
{
delete leonardo->getGraphicsContext();
delete leonardo;
}
void
wxGFrame::OnAbout( wxCommandEvent& WXUNUSED( event ) )
{
wxMessageBox( wxT( "This is the Goeland Example" ),
wxT( "About Goeland Example" ), wxOK | wxICON_INFORMATION, this );
}
void wxGFrame::OnToolArrow( wxCommandEvent &event )
{
printf( "Arrow\n" );
toolbar->ToggleTool(IDT_TOOL_RECT, false);
leonardo->selectTool( goeland_base::Leonardo::TOOL_ARROW );
}
void wxGFrame::OnToolRect( wxCommandEvent &event )
{
printf( "Rect\n" );
toolbar->ToggleTool(IDT_TOOL_ARROW, false);
leonardo->selectTool( goeland_base::Leonardo::TOOL_RECTANGLE );
}
void wxGFrame::OnToolImg( wxCommandEvent &event )
{
printf( "Rect\n" );
toolbar->ToggleTool(IDT_TOOL_ARROW, false);
leonardo->selectTool( goeland_base::Leonardo::TOOL_IMAGE );
}