X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/281b0186b81a35b3eff658635b083b04a3cfa23c..77c5e9230e558873be25c8a5472b9b9038b03466:/demos/forty/forty.cpp?ds=inline diff --git a/demos/forty/forty.cpp b/demos/forty/forty.cpp index 7d65694a9f..582cb08f3d 100644 --- a/demos/forty/forty.cpp +++ b/demos/forty/forty.cpp @@ -29,40 +29,13 @@ #include "canvas.h" #include "forty.h" +#include "card.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; -}; +#if wxUSE_HTML +#include "wx/file.h" +#include "wx/html/htmlwin.h" +#endif BEGIN_EVENT_TABLE(FortyFrame, wxFrame) EVT_MENU(NEW_GAME, FortyFrame::NewGame) @@ -73,6 +46,7 @@ BEGIN_EVENT_TABLE(FortyFrame, wxFrame) EVT_MENU(SCORES, FortyFrame::Scores) EVT_MENU(RIGHT_BUTTON_UNDO, FortyFrame::ToggleRightButtonUndo) EVT_MENU(HELPING_HAND, FortyFrame::ToggleHelpingHand) + EVT_MENU(LARGE_CARDS, FortyFrame::ToggleCardSize) EVT_CLOSE(FortyFrame::OnCloseWindow) END_EVENT_TABLE() @@ -83,17 +57,42 @@ wxColour* FortyApp::m_backgroundColour = 0; wxColour* FortyApp::m_textColour = 0; wxBrush* FortyApp::m_backgroundBrush = 0; +FortyApp::FortyApp() +{ +} + +FortyApp::~FortyApp() +{ + delete m_backgroundColour; + delete m_textColour; + delete m_backgroundBrush; + delete Card::m_symbolBmap; + delete Card::m_pictureBmap; + +} + bool FortyApp::OnInit() { + bool largecards = FALSE; + wxSize size(668,510); + + if ((argc > 1) && (!wxStrcmp(argv[1],_T("-L")))) + { + largecards = TRUE; + size = wxSize(1000,750); + } + FortyFrame* frame = new FortyFrame( 0, - "Forty Thieves", - -1, -1, 668, 510 + _T("Forty Thieves"), + -1, -1, size.x, size.y,largecards ); // Show the frame frame->Show(TRUE); + frame->GetCanvas()->ShowPlayerDialog(); + return TRUE; } @@ -121,14 +120,14 @@ const wxColour& FortyApp::TextColour() { if (!m_textColour) { - m_textColour = new wxColour("BLACK"); + m_textColour = new wxColour(_T("BLACK")); } return *m_textColour; } // My frame constructor -FortyFrame::FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h): +FortyFrame::FortyFrame(wxFrame* frame, const wxString& title, int x, int y, int w, int h,bool largecards): wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h)) { #ifdef __WXMAC__ @@ -137,7 +136,7 @@ FortyFrame::FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h): #endif // set the icon #ifdef __WXMSW__ - SetIcon(wxIcon("CardsIcon")); + SetIcon(wxIcon(_T("CardsIcon"))); #else #ifdef GTK_TBD SetIcon(wxIcon(Cards_bits, Cards_width, Cards_height)); @@ -146,39 +145,48 @@ FortyFrame::FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h): // 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"); + gameMenu->Append(NEW_GAME, _T("&New"), _T("Start a new game")); + gameMenu->Append(SCORES, _T("&Scores..."), _T("Displays scores")); + gameMenu->Append(EXIT, _T("E&xit"), _T("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"); + editMenu->Append(UNDO, _T("&Undo"), _T("Undo the last move")); + editMenu->Append(REDO, _T("&Redo"), _T("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", + _T("&Right button undo"), + _T("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", + _T("&Helping hand"), + _T("Enables/disables hand cursor when a card can be moved"), TRUE ); + optionsMenu->Append(LARGE_CARDS, + _T("&Large cards"), + _T("Enables/disables large cards for high resolution displays"), + TRUE + ); optionsMenu->Check(HELPING_HAND, TRUE); optionsMenu->Check(RIGHT_BUTTON_UNDO, TRUE); + optionsMenu->Check(LARGE_CARDS, largecards ? TRUE : FALSE); wxMenu* helpMenu = new wxMenu; - helpMenu->Append(ABOUT, "&About", "Displays program version information"); + helpMenu->Append(ABOUT, _T("&About..."), _T("Displays information about the game")); m_menuBar = new wxMenuBar; - m_menuBar->Append(gameMenu, "&Game"); - m_menuBar->Append(editMenu, "&Edit"); - m_menuBar->Append(optionsMenu, "&Options"); - m_menuBar->Append(helpMenu, "&Help"); + m_menuBar->Append(gameMenu, _T("&Game")); + m_menuBar->Append(editMenu, _T("&Edit")); + m_menuBar->Append(optionsMenu, _T("&Options")); + m_menuBar->Append(helpMenu, _T("&Help")); SetMenuBar(m_menuBar); + if (largecards) + Card::SetScale(1.3); + m_canvas = new FortyCanvas(this, 0, 0, 400, 400); wxLayoutConstraints* constr = new wxLayoutConstraints; constr->left.SameAs(this, wxLeft); @@ -223,17 +231,29 @@ FortyFrame::Exit(wxCommandEvent&) void FortyFrame::About(wxCommandEvent&) { - wxMessageBox( - "Forty Thieves\n\n" - "A freeware program using the wxWindows\n" - "portable C++ GUI toolkit.\n" - "http://www.wxwindows.org\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 - ); +#if wxUSE_HTML + if (wxFileExists(wxT("about.htm"))) + { + FortyAboutDialog dialog(this, -1, wxT("About Forty Thieves")); + if (dialog.ShowModal() == wxID_OK) + { + } + } + else +#endif + { + wxMessageBox( + _T("Forty Thieves\n\n") + _T("A freeware program using the wxWindows\n") + _T("portable C++ GUI toolkit.\n") + _T("http://www.wxwindows.org\n") + _T("http://www.freiburg.linux.de/~wxxt\n\n") + _T("Author: Chris Breeze (c) 1992-1998\n") + _T("email: chris.breeze@iname.com"), + _T("About Forty Thieves"), + wxOK, this + ); + } } void @@ -269,3 +289,103 @@ FortyFrame::ToggleHelpingHand(wxCommandEvent& event) bool checked = m_menuBar->IsChecked(event.GetId()); m_canvas->EnableHelpingHand(checked); } + +void +FortyFrame::ToggleCardSize(wxCommandEvent& event) +{ + bool checked = m_menuBar->IsChecked(event.GetId()); + Card::SetScale(checked ? 1.3 : 1); + m_canvas->LayoutGame(); + m_canvas->Refresh(); +} + +//---------------------------------------------------------------------------- +// stAboutDialog +//---------------------------------------------------------------------------- + +BEGIN_EVENT_TABLE(FortyAboutDialog,wxDialog) +END_EVENT_TABLE() + +FortyAboutDialog::FortyAboutDialog( wxWindow *parent, wxWindowID id, const wxString &title, + const wxPoint &position, const wxSize& size, long style ) : + wxDialog( parent, id, title, position, size, style ) +{ + AddControls(this); + + Centre(wxBOTH); +} + +bool FortyAboutDialog::AddControls(wxWindow* parent) +{ +#if wxUSE_HTML + wxString htmlText; + wxString htmlFile(wxT("about.htm")); + + //if (!wxGetApp().GetMemoryTextResource(wxT("about.htm"), htmlText)) + { +// wxSetWorkingDirectory(wxGetApp().GetAppDir()); +// wxString htmlFile(wxGetApp().GetFullAppPath(wxT("about.htm"))); + + if (wxFileExists(htmlFile)) + { + wxFile file; + file.Open(htmlFile, wxFile::read); + long len = file.Length(); + wxChar* buf = htmlText.GetWriteBuf(len + 1); + file.Read(buf, len); + buf[len] = 0; + htmlText.UngetWriteBuf(); + } + } + + if (htmlText.IsEmpty()) + { + htmlText.Printf(wxT("Warning

Sorry, could not find resource for About dialog

")); + } + + // Customize the HTML +#if 0 + wxString verString; + verString.Printf("%.2f", stVERSION_NUMBER); + htmlText.Replace(wxT("$VERSION$"), verString); +#endif + htmlText.Replace(wxT("$DATE$"), _T(__DATE__)); + + wxSize htmlSize(400, 290); + + // Note: in later versions of wxWin this will be fixed so wxRAISED_BORDER + // does the right thing. Meanwhile, this is a workaround. +#ifdef __WXMSW__ + long borderStyle = wxDOUBLE_BORDER; +#else + long borderStyle = wxRAISED_BORDER; +#endif + + wxHtmlWindow* html = new wxHtmlWindow(this, ID_ABOUT_HTML_WINDOW, wxDefaultPosition, htmlSize, borderStyle); + html -> SetBorders(10); + html -> SetPage(htmlText); + + //// Start of sizer-based control creation + + wxSizer *item0 = new wxBoxSizer( wxVERTICAL ); + + wxWindow *item1 = parent->FindWindow( ID_ABOUT_HTML_WINDOW ); + wxASSERT( item1 ); + item0->Add( item1, 0, wxALIGN_CENTRE|wxALL, 5 ); + + wxButton *item2 = new wxButton( parent, wxID_CANCEL, _T("&Close"), wxDefaultPosition, wxDefaultSize, 0 ); + item2->SetDefault(); + item2->SetFocus(); + + item0->Add( item2, 0, wxALIGN_RIGHT|wxALL, 5 ); + + parent->SetAutoLayout( TRUE ); + parent->SetSizer( item0 ); + parent->Layout(); + item0->Fit( parent ); + item0->SetSizeHints( parent ); +#endif + + return TRUE; +} +