dialog behaviour; added dummy menubar constructors; corrected wxMSW wxRegion bug git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1684 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			268 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        forty.cpp
 | 
						|
// Purpose:     Forty Thieves patience game
 | 
						|
// Author:      Chris Breeze
 | 
						|
// Modified by:
 | 
						|
// Created:     21/07/97
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Copyright:   (c) 1993-1998 Chris Breeze
 | 
						|
// Licence:   	wxWindows licence
 | 
						|
//---------------------------------------------------------------------------
 | 
						|
// Last modified: 22nd July 1998 - ported to wxWindows 2.0
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifdef __GNUG__
 | 
						|
#pragma implementation
 | 
						|
#pragma interface
 | 
						|
#endif
 | 
						|
 | 
						|
// For compilers that support precompilation, includes "wx/wx.h".
 | 
						|
#include "wx/wxprec.h"
 | 
						|
 | 
						|
#ifdef __BORLANDC__
 | 
						|
#pragma hdrstop
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef WX_PRECOMP
 | 
						|
#include "wx/wx.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#include "canvas.h"
 | 
						|
#include "forty.h"
 | 
						|
#include "scoredg.h"
 | 
						|
#ifdef wx_x
 | 
						|
#include "cards.xbm"
 | 
						|
#endif
 | 
						|
 | 
						|
class FortyFrame: public wxFrame
 | 
						|
{
 | 
						|
public:
 | 
						|
	FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h);
 | 
						|
	virtual ~FortyFrame();
 | 
						|
 | 
						|
	void OnCloseWindow(wxCloseEvent& event);
 | 
						|
 | 
						|
	// Menu callbacks
 | 
						|
	void NewGame(wxCommandEvent& event);
 | 
						|
	void Exit(wxCommandEvent& event);
 | 
						|
	void About(wxCommandEvent& event);
 | 
						|
	void Undo(wxCommandEvent& event);
 | 
						|
	void Redo(wxCommandEvent& event);
 | 
						|
	void Scores(wxCommandEvent& event);
 | 
						|
	void ToggleRightButtonUndo(wxCommandEvent& event);
 | 
						|
	void ToggleHelpingHand(wxCommandEvent& event);
 | 
						|
 | 
						|
	DECLARE_EVENT_TABLE()
 | 
						|
 | 
						|
private:
 | 
						|
	enum MenuCommands { NEW_GAME = 10, SCORES, EXIT,
 | 
						|
						UNDO, REDO,
 | 
						|
						RIGHT_BUTTON_UNDO, HELPING_HAND,
 | 
						|
						ABOUT };
 | 
						|
 | 
						|
	wxMenuBar*		m_menuBar;
 | 
						|
	FortyCanvas*	m_canvas;
 | 
						|
};
 | 
						|
 | 
						|
BEGIN_EVENT_TABLE(FortyFrame, wxFrame)
 | 
						|
	EVT_MENU(NEW_GAME, FortyFrame::NewGame)
 | 
						|
	EVT_MENU(EXIT, FortyFrame::Exit)
 | 
						|
	EVT_MENU(ABOUT, FortyFrame::About)
 | 
						|
	EVT_MENU(UNDO, FortyFrame::Undo)
 | 
						|
	EVT_MENU(REDO, FortyFrame::Redo)
 | 
						|
	EVT_MENU(SCORES, FortyFrame::Scores)
 | 
						|
	EVT_MENU(RIGHT_BUTTON_UNDO, FortyFrame::ToggleRightButtonUndo)
 | 
						|
	EVT_MENU(HELPING_HAND, FortyFrame::ToggleHelpingHand)
 | 
						|
    EVT_CLOSE(FortyFrame::OnCloseWindow)
 | 
						|
END_EVENT_TABLE()
 | 
						|
 | 
						|
// Create a new application object
 | 
						|
IMPLEMENT_APP	(FortyApp)
 | 
						|
 | 
						|
wxColour* FortyApp::m_backgroundColour = 0;
 | 
						|
wxColour* FortyApp::m_textColour = 0;
 | 
						|
wxBrush*  FortyApp::m_backgroundBrush = 0;
 | 
						|
 | 
						|
bool FortyApp::OnInit()
 | 
						|
{
 | 
						|
	FortyFrame* frame = new FortyFrame(
 | 
						|
			0,
 | 
						|
			"Forty Thieves",
 | 
						|
			-1, -1, 668, 510
 | 
						|
			);
 | 
						|
 | 
						|
 	// Show the frame
 | 
						|
	frame->Show(TRUE);
 | 
						|
 | 
						|
	return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
const wxColour& FortyApp::BackgroundColour()
 | 
						|
{
 | 
						|
	if (!m_backgroundColour)
 | 
						|
	{
 | 
						|
		m_backgroundColour = new wxColour(0, 128, 0);
 | 
						|
	}
 | 
						|
 | 
						|
	return *m_backgroundColour;
 | 
						|
}
 | 
						|
 | 
						|
const wxBrush& FortyApp::BackgroundBrush()
 | 
						|
{
 | 
						|
	if (!m_backgroundBrush)
 | 
						|
	{
 | 
						|
		m_backgroundBrush = new wxBrush(BackgroundColour(), wxSOLID);
 | 
						|
	}
 | 
						|
 | 
						|
	return *m_backgroundBrush;
 | 
						|
}
 | 
						|
 | 
						|
const wxColour& FortyApp::TextColour()
 | 
						|
{
 | 
						|
	if (!m_textColour)
 | 
						|
	{
 | 
						|
		m_textColour = new wxColour("BLACK");
 | 
						|
	}
 | 
						|
 | 
						|
	return *m_textColour;
 | 
						|
}
 | 
						|
 | 
						|
// My frame constructor
 | 
						|
FortyFrame::FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h):
 | 
						|
	wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
 | 
						|
{
 | 
						|
	// set the icon
 | 
						|
#ifdef __WXMSW__
 | 
						|
	SetIcon(wxIcon("CardsIcon"));
 | 
						|
#else
 | 
						|
#ifdef GTK_TBD
 | 
						|
	SetIcon(wxIcon(Cards_bits, Cards_width, Cards_height));
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
	// Make a menu bar
 | 
						|
	wxMenu* gameMenu = new wxMenu;
 | 
						|
	gameMenu->Append(NEW_GAME, "&New", "Start a new game");
 | 
						|
	gameMenu->Append(SCORES, "&Scores...", "Displays scores");
 | 
						|
	gameMenu->Append(EXIT, "E&xit", "Exits Forty Thieves");
 | 
						|
 | 
						|
	wxMenu* editMenu = new wxMenu;
 | 
						|
	editMenu->Append(UNDO, "&Undo", "Undo the last move");
 | 
						|
	editMenu->Append(REDO, "&Redo", "Redo a move that has been undone");
 | 
						|
 | 
						|
	wxMenu*	optionsMenu = new wxMenu;
 | 
						|
	optionsMenu->Append(RIGHT_BUTTON_UNDO,
 | 
						|
			"&Right button undo",
 | 
						|
			"Enables/disables right mouse button undo and redo",
 | 
						|
			TRUE
 | 
						|
			);
 | 
						|
	optionsMenu->Append(HELPING_HAND,
 | 
						|
			"&Helping hand",
 | 
						|
			"Enables/disables hand cursor when a card can be moved",
 | 
						|
			TRUE
 | 
						|
			);
 | 
						|
	optionsMenu->Check(HELPING_HAND, TRUE);
 | 
						|
	optionsMenu->Check(RIGHT_BUTTON_UNDO, TRUE);
 | 
						|
 | 
						|
	wxMenu* helpMenu = new wxMenu;
 | 
						|
	helpMenu->Append(ABOUT, "&About", "Displays program version information");
 | 
						|
 | 
						|
	m_menuBar = new wxMenuBar;
 | 
						|
	m_menuBar->Append(gameMenu,    "&Game");
 | 
						|
	m_menuBar->Append(editMenu,    "&Edit");
 | 
						|
	m_menuBar->Append(optionsMenu, "&Options");
 | 
						|
	m_menuBar->Append(helpMenu,    "&Help");
 | 
						|
 | 
						|
	SetMenuBar(m_menuBar);
 | 
						|
 | 
						|
	m_canvas = new FortyCanvas(this, 0, 0, 400, 400);
 | 
						|
	wxLayoutConstraints* constr = new wxLayoutConstraints;
 | 
						|
	constr->left.SameAs(this, wxLeft);
 | 
						|
	constr->top.SameAs(this, wxTop);
 | 
						|
	constr->right.SameAs(this, wxRight);
 | 
						|
	constr->height.SameAs(this, wxHeight);
 | 
						|
	m_canvas->SetConstraints(constr);
 | 
						|
 | 
						|
	CreateStatusBar();
 | 
						|
}
 | 
						|
 | 
						|
FortyFrame::~FortyFrame()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
void FortyFrame::OnCloseWindow(wxCloseEvent& event)
 | 
						|
{
 | 
						|
    if (m_canvas->OnCloseCanvas() )
 | 
						|
    {
 | 
						|
        this->Destroy();
 | 
						|
    }
 | 
						|
    else
 | 
						|
        event.Veto();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::NewGame(wxCommandEvent&)
 | 
						|
{
 | 
						|
	m_canvas->NewGame();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::Exit(wxCommandEvent&)
 | 
						|
{
 | 
						|
#ifdef __WXGTK__
 | 
						|
	// wxGTK doesn't call OnClose() so we do it here
 | 
						|
//	if (OnClose())
 | 
						|
#endif
 | 
						|
	Close(TRUE);
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::About(wxCommandEvent&)
 | 
						|
{
 | 
						|
	wxMessageBox(
 | 
						|
		"Forty Thieves\n\n"
 | 
						|
		"A freeware program using the wxWindows\n"
 | 
						|
		"portable C++ GUI toolkit.\n"
 | 
						|
		"http://web.ukonline.co.uk/julian.smart/wxwin\n"
 | 
						|
		"http://www.freiburg.linux.de/~wxxt\n\n"
 | 
						|
		"Author: Chris Breeze (c) 1992-1998\n"
 | 
						|
		"email: chris.breeze@iname.com",
 | 
						|
		"About Forty Thieves",
 | 
						|
		wxOK, this
 | 
						|
		);
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::Undo(wxCommandEvent&)
 | 
						|
{
 | 
						|
	m_canvas->Undo();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::Redo(wxCommandEvent&)
 | 
						|
{
 | 
						|
	m_canvas->Redo();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::Scores(wxCommandEvent&)
 | 
						|
{
 | 
						|
	m_canvas->UpdateScores();
 | 
						|
	ScoreDialog scores(this, m_canvas->GetScoreFile());
 | 
						|
	scores.Display();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::ToggleRightButtonUndo(wxCommandEvent& event)
 | 
						|
{
 | 
						|
	bool checked = m_menuBar->IsChecked(event.GetId());
 | 
						|
	m_canvas->EnableRightButtonUndo(checked);
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
FortyFrame::ToggleHelpingHand(wxCommandEvent& event)
 | 
						|
{
 | 
						|
	bool checked = m_menuBar->IsChecked(event.GetId());
 | 
						|
	m_canvas->EnableHelpingHand(checked);
 | 
						|
}
 |