X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/70d26c3f4ffb24d50457d405c9595fd23f9e5b7c..d5e7ffcf7af0e444cc8b3d3cfc2e2ca263f411d5:/demos/forty/canvas.cpp diff --git a/demos/forty/canvas.cpp b/demos/forty/canvas.cpp index 384d2bebbe..4fd11dc2fa 100644 --- a/demos/forty/canvas.cpp +++ b/demos/forty/canvas.cpp @@ -6,16 +6,11 @@ // Created: 21/07/97 // RCS-ID: $Id$ // Copyright: (c) 1993-1998 Chris Breeze -// Licence: wxWindows licence +// Licence: wxWindows licence //--------------------------------------------------------------------------- -// Last modified: 22nd July 1998 - ported to wxWindows 2.0 +// Last modified: 22nd July 1998 - ported to wxWidgets 2.0 ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation -#pragma interface -#endif - // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" @@ -38,36 +33,40 @@ BEGIN_EVENT_TABLE(FortyCanvas, wxScrolledWindow) EVT_MOUSE_EVENTS(FortyCanvas::OnMouseEvent) END_EVENT_TABLE() -FortyCanvas::FortyCanvas(wxWindow* parent, int x, int y, int w, int h) : - wxScrolledWindow(parent, -1, wxPoint(x, y), wxSize(w, h)), - m_helpingHand(TRUE), - m_rightBtnUndo(TRUE), - m_playerDialog(0), - m_leftBtnDown(FALSE) +FortyCanvas::FortyCanvas(wxWindow* parent, const wxPoint& pos, const wxSize& size) : + wxScrolledWindow(parent, wxID_ANY, pos, size, 0), + m_helpingHand(true), + m_rightBtnUndo(true), + m_playerDialog(0), + m_leftBtnDown(false) { + SetScrollbars(0, 0, 0, 0); + #ifdef __WXGTK__ - m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL); + m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL); #else - m_font = wxTheFontList->FindOrCreateFont(10, wxSWISS, wxNORMAL, wxNORMAL); + m_font = wxTheFontList->FindOrCreateFont(10, wxSWISS, wxNORMAL, wxNORMAL); #endif - SetBackgroundColour(FortyApp::BackgroundColour()); + SetBackgroundColour(FortyApp::BackgroundColour()); - m_handCursor = new wxCursor(wxCURSOR_HAND); - m_arrowCursor = new wxCursor(wxCURSOR_ARROW); + m_handCursor = new wxCursor(wxCURSOR_HAND); + m_arrowCursor = new wxCursor(wxCURSOR_ARROW); - wxString name = wxTheApp->GetAppName(); - if (name.Length() <= 0) name = "forty"; - m_scoreFile = new ScoreFile(name); - m_game = new Game(0, 0, 0); - m_game->Deal(); + wxString name = wxTheApp->GetAppName(); + if (name.Length() <= 0) name = wxT("forty"); + m_scoreFile = new ScoreFile(name); + m_game = new Game(0, 0, 0); + m_game->Deal(); } FortyCanvas::~FortyCanvas() { - UpdateScores(); - delete m_game; - delete m_scoreFile; + UpdateScores(); + delete m_game; + delete m_scoreFile; + delete m_handCursor; + delete m_arrowCursor; } @@ -76,47 +75,79 @@ Write the current player's score back to the score file */ void FortyCanvas::UpdateScores() { - if (m_player.Length() > 0 && m_scoreFile && m_game) - { - m_scoreFile->WritePlayersScore( - m_player, - m_game->GetNumWins(), - m_game->GetNumGames(), - m_game->GetScore() - ); - } + if (m_player.Length() > 0 && m_scoreFile && m_game) + { + m_scoreFile->WritePlayersScore( + m_player, + m_game->GetNumWins(), + m_game->GetNumGames(), + m_game->GetScore() + ); + } } void FortyCanvas::OnDraw(wxDC& dc) { - dc.SetFont(* m_font); - m_game->Redraw(dc); - - // if player name not set (and selection dialog is not displayed) - // then ask the player for their name - if (m_player.Length() == 0 && !m_playerDialog) - { - m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile); - m_playerDialog->ShowModal(); - m_player = m_playerDialog->GetPlayersName(); - if (m_player.Length() > 0) - { - // user entered a name - lookup their score - int wins, games, score; - m_scoreFile->ReadPlayersScore(m_player, wins, games, score); - m_game->NewPlayer(wins, games, score); - m_game->DisplayScore(dc); - m_playerDialog->Destroy(); - m_playerDialog = 0; - Refresh(); - } - else - { - // user cancelled the dialog - exit the app - ((wxFrame*)GetParent())->Close(TRUE); - } - } + dc.SetFont(* m_font); + m_game->Redraw(dc); +#if 0 + // if player name not set (and selection dialog is not displayed) + // then ask the player for their name + if (m_player.Length() == 0 && !m_playerDialog) + { + m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile); + m_playerDialog->ShowModal(); + m_player = m_playerDialog->GetPlayersName(); + if (m_player.Length() > 0) + { + // user entered a name - lookup their score + int wins, games, score; + m_scoreFile->ReadPlayersScore(m_player, wins, games, score); + m_game->NewPlayer(wins, games, score); + m_game->DisplayScore(dc); + m_playerDialog->Destroy(); + m_playerDialog = 0; + Refresh(false); + } + else + { + // user cancelled the dialog - exit the app + ((wxFrame*)GetParent())->Close(true); + } + } +#endif +} + +void FortyCanvas::ShowPlayerDialog() +{ + // if player name not set (and selection dialog is not displayed) + // then ask the player for their name + if (m_player.Length() == 0 && !m_playerDialog) + { + m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile); + m_playerDialog->ShowModal(); + m_player = m_playerDialog->GetPlayersName(); + if (m_player.Length() > 0) + { + // user entered a name - lookup their score + int wins, games, score; + m_scoreFile->ReadPlayersScore(m_player, wins, games, score); + m_game->NewPlayer(wins, games, score); + + wxClientDC dc(this); + dc.SetFont(* m_font); + m_game->DisplayScore(dc); + m_playerDialog->Destroy(); + m_playerDialog = 0; + Refresh(false); + } + else + { + // user cancelled the dialog - exit the app + ((wxFrame*)GetParent())->Close(true); + } + } } /* @@ -124,130 +155,116 @@ Called when the main frame is closed */ bool FortyCanvas::OnCloseCanvas() { - if (m_game->InPlay() && - wxMessageBox("Are you sure you want to\nabandon the current game?", - "Warning", wxYES_NO | wxICON_QUESTION) == wxNO) - { - return FALSE; - } - return TRUE; + if (m_game->InPlay() && + wxMessageBox(wxT("Are you sure you want to\nabandon the current game?"), + wxT("Warning"), wxYES_NO | wxICON_QUESTION) == wxNO) + { + return false; + } + return true; } void FortyCanvas::OnMouseEvent(wxMouseEvent& event) { - int mouseX = (int)event.GetX(); - int mouseY = (int)event.GetY(); - - wxClientDC dc(this); - PrepareDC(dc); - dc.SetFont(* m_font); - - if (event.LeftDClick()) - { - if (m_leftBtnDown) - { - m_leftBtnDown = FALSE; - ReleaseMouse(); - m_game->LButtonUp(dc, mouseX, mouseY); - } - m_game->LButtonDblClk(dc, mouseX, mouseY); - } - else if (event.LeftDown()) - { - if (!m_leftBtnDown) - { - m_leftBtnDown = TRUE; - CaptureMouse(); - m_game->LButtonDown(dc, mouseX, mouseY); - } - } - else if (event.LeftUp()) - { - if (m_leftBtnDown) - { - m_leftBtnDown = FALSE; - ReleaseMouse(); - m_game->LButtonUp(dc, mouseX, mouseY); - } - } - else if (event.RightDown() && !event.LeftIsDown()) - { - // only allow right button undo if m_rightBtnUndo is TRUE - if (m_rightBtnUndo) - { - if (event.ControlDown() || event.ShiftDown()) - { - m_game->Redo(dc); - } - else - { - m_game->Undo(dc); - } - } - } - else if (event.Dragging()) - { - m_game->MouseMove(dc, mouseX, mouseY); - } - - if (!event.LeftIsDown()) - { - SetCursorStyle(mouseX, mouseY); - } + int mouseX = (int)event.GetX(); + int mouseY = (int)event.GetY(); + + wxClientDC dc(this); + PrepareDC(dc); + dc.SetFont(* m_font); + + if (event.LeftDClick()) + { + if (m_leftBtnDown) + { + m_leftBtnDown = false; + ReleaseMouse(); + m_game->LButtonUp(dc, mouseX, mouseY); + } + m_game->LButtonDblClk(dc, mouseX, mouseY); + } + else if (event.LeftDown()) + { + if (!m_leftBtnDown) + { + m_leftBtnDown = true; + CaptureMouse(); + m_game->LButtonDown(dc, mouseX, mouseY); + } + } + else if (event.LeftUp()) + { + if (m_leftBtnDown) + { + m_leftBtnDown = false; + ReleaseMouse(); + m_game->LButtonUp(dc, mouseX, mouseY); + } + } + else if (event.RightDown() && !event.LeftIsDown()) + { + // only allow right button undo if m_rightBtnUndo is true + if (m_rightBtnUndo) + { + if (event.ControlDown() || event.ShiftDown()) + { + m_game->Redo(dc); + } + else + { + m_game->Undo(dc); + } + } + } + else if (event.Dragging()) + { + m_game->MouseMove(dc, mouseX, mouseY); + } + + if (!event.LeftIsDown()) + { + SetCursorStyle(mouseX, mouseY); + } } void FortyCanvas::SetCursorStyle(int x, int y) { - if (m_game->HaveYouWon()) - { - if (wxMessageBox("Do you wish to play again?", - "Well Done, You have won!", wxYES_NO | wxICON_QUESTION) == wxYES) - { - m_game->Deal(); - - wxClientDC dc(this); - PrepareDC(dc); - dc.SetFont(* m_font); - m_game->Redraw(dc); - } - else - { - // user cancelled the dialog - exit the app - ((wxFrame*)GetParent())->Close(TRUE); - } - } - - // Only set cursor to a hand if 'helping hand' is enabled and - // the card under the cursor can go somewhere - if (m_game->CanYouGo(x, y) && m_helpingHand) - { - SetCursor(* m_handCursor); - } - else - { - SetCursor(* m_arrowCursor); - } + // Only set cursor to a hand if 'helping hand' is enabled and + // the card under the cursor can go somewhere + if (m_game->CanYouGo(x, y) && m_helpingHand) + { + SetCursor(* m_handCursor); + } + else + { + SetCursor(* m_arrowCursor); + } } void FortyCanvas::NewGame() { - m_game->Deal(); - Refresh(); + m_game->Deal(); + Refresh(); } void FortyCanvas::Undo() { - wxClientDC dc(this); - PrepareDC(dc); - dc.SetFont(* m_font); - m_game->Undo(dc); + wxClientDC dc(this); + PrepareDC(dc); + dc.SetFont(* m_font); + m_game->Undo(dc); } void FortyCanvas::Redo() { - wxClientDC dc(this); - PrepareDC(dc); - dc.SetFont(* m_font); - m_game->Redo(dc); + wxClientDC dc(this); + PrepareDC(dc); + dc.SetFont(* m_font); + m_game->Redo(dc); +} + +void FortyCanvas::LayoutGame() +{ + m_game->Layout(); }