]>
git.saurik.com Git - wxWidgets.git/blob - samples/forty/forty.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Forty Thieves patience game
4 // Author: Chris Breeze
8 // Copyright: (c) 1993-1998 Chris Breeze
9 // Licence: wxWindows licence
10 //---------------------------------------------------------------------------
11 // Last modified: 22nd July 1998 - ported to wxWindows 2.0
12 /////////////////////////////////////////////////////////////////////////////
15 #pragma implementation
19 // For compilers that support precompilation, includes "wx/wx.h".
20 #include "wx/wxprec.h"
37 class FortyFrame
: public wxFrame
40 FortyFrame(wxFrame
* frame
, char* title
, int x
, int y
, int w
, int h
);
41 virtual ~FortyFrame();
46 void NewGame(wxCommandEvent
& event
);
47 void Exit(wxCommandEvent
& event
);
48 void About(wxCommandEvent
& event
);
49 void Undo(wxCommandEvent
& event
);
50 void Redo(wxCommandEvent
& event
);
51 void Scores(wxCommandEvent
& event
);
52 void ToggleRightButtonUndo(wxCommandEvent
& event
);
53 void ToggleHelpingHand(wxCommandEvent
& event
);
58 enum MenuCommands
{ NEW_GAME
= 10, SCORES
, EXIT
,
60 RIGHT_BUTTON_UNDO
, HELPING_HAND
,
64 FortyCanvas
* m_canvas
;
67 BEGIN_EVENT_TABLE(FortyFrame
, wxFrame
)
68 EVT_MENU(NEW_GAME
, FortyFrame::NewGame
)
69 EVT_MENU(EXIT
, FortyFrame::Exit
)
70 EVT_MENU(ABOUT
, FortyFrame::About
)
71 EVT_MENU(UNDO
, FortyFrame::Undo
)
72 EVT_MENU(REDO
, FortyFrame::Redo
)
73 EVT_MENU(SCORES
, FortyFrame::Scores
)
74 EVT_MENU(RIGHT_BUTTON_UNDO
, FortyFrame::ToggleRightButtonUndo
)
75 EVT_MENU(HELPING_HAND
, FortyFrame::ToggleHelpingHand
)
78 // Create a new application object
79 IMPLEMENT_APP (FortyApp
)
81 wxColour
* FortyApp::m_backgroundColour
= 0;
82 wxColour
* FortyApp::m_textColour
= 0;
83 wxBrush
* FortyApp::m_backgroundBrush
= 0;
85 bool FortyApp::OnInit()
87 FortyFrame
* frame
= new FortyFrame(
99 wxColour
* FortyApp::BackgroundColour()
101 if (!m_backgroundColour
)
103 m_backgroundColour
= new wxColour(0, 128, 0);
105 return m_backgroundColour
;
108 wxBrush
* FortyApp::BackgroundBrush()
110 if (!m_backgroundBrush
)
112 m_backgroundBrush
= new wxBrush(*BackgroundColour(), wxSOLID
);
114 return m_backgroundBrush
;
117 wxColour
* FortyApp::TextColour()
121 m_textColour
= new wxColour("BLACK");
126 // My frame constructor
127 FortyFrame::FortyFrame(wxFrame
* frame
, char* title
, int x
, int y
, int w
, int h
):
128 wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
132 SetIcon(new wxIcon("CardsIcon"));
135 SetIcon(new wxIcon(Cards_bits
, Cards_width
, Cards_height
));
140 wxMenu
* gameMenu
= new wxMenu
;
141 gameMenu
->Append(NEW_GAME
, "&New", "Start a new game");
142 gameMenu
->Append(SCORES
, "&Scores...", "Displays scores");
143 gameMenu
->Append(EXIT
, "E&xit", "Exits Forty Thieves");
145 wxMenu
* editMenu
= new wxMenu
;
146 editMenu
->Append(UNDO
, "&Undo", "Undo the last move");
147 editMenu
->Append(REDO
, "&Redo", "Redo a move that has been undone");
149 wxMenu
* optionsMenu
= new wxMenu
;
150 optionsMenu
->Append(RIGHT_BUTTON_UNDO
,
151 "&Right button undo",
152 "Enables/disables right mouse button undo and redo",
155 optionsMenu
->Append(HELPING_HAND
,
157 "Enables/disables hand cursor when a card can be moved",
160 optionsMenu
->Check(HELPING_HAND
, TRUE
);
161 optionsMenu
->Check(RIGHT_BUTTON_UNDO
, TRUE
);
163 wxMenu
* helpMenu
= new wxMenu
;
164 helpMenu
->Append(ABOUT
, "&About", "Displays program version information");
166 m_menuBar
= new wxMenuBar
;
167 m_menuBar
->Append(gameMenu
, "&Game");
168 m_menuBar
->Append(editMenu
, "&Edit");
169 m_menuBar
->Append(optionsMenu
, "&Options");
170 m_menuBar
->Append(helpMenu
, "&Help");
172 SetMenuBar(m_menuBar
);
174 m_canvas
= new FortyCanvas(this, 0, 0, 400, 400);
175 wxLayoutConstraints
* constr
= new wxLayoutConstraints
;
176 constr
->left
.SameAs(this, wxLeft
);
177 constr
->top
.SameAs(this, wxTop
);
178 constr
->right
.SameAs(this, wxRight
);
179 constr
->height
.SameAs(this, wxHeight
);
180 m_canvas
->SetConstraints(constr
);
185 FortyFrame::~FortyFrame()
189 bool FortyFrame::OnClose()
191 return m_canvas
->OnClose();
195 FortyFrame::NewGame(wxCommandEvent
&)
201 FortyFrame::Exit(wxCommandEvent
&)
204 // wxGTK doesn't call OnClose() so we do it here
211 FortyFrame::About(wxCommandEvent
&)
215 "A freeware program using the wxWindows\n"
216 "portable C++ GUI toolkit.\n"
217 "http://web.ukonline.co.uk/julian.smart/wxwin\n"
218 "http://www.freiburg.linux.de/~wxxt\n\n"
219 "Author: Chris Breeze (c) 1992-1998\n"
220 "email: chris.breeze@iname.com",
221 "About Forty Thieves",
227 FortyFrame::Undo(wxCommandEvent
&)
233 FortyFrame::Redo(wxCommandEvent
&)
239 FortyFrame::Scores(wxCommandEvent
&)
241 m_canvas
->UpdateScores();
242 ScoreDialog
scores(this, m_canvas
->GetScoreFile());
247 FortyFrame::ToggleRightButtonUndo(wxCommandEvent
& event
)
249 bool checked
= m_menuBar
->IsChecked(event
.GetId());
250 m_canvas
->EnableRightButtonUndo(checked
);
254 FortyFrame::ToggleHelpingHand(wxCommandEvent
& event
)
256 bool checked
= m_menuBar
->IsChecked(event
.GetId());
257 m_canvas
->EnableHelpingHand(checked
);