]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/forty/canvas.cpp
ActiveX events should be sent to the window, not it's parent.
[wxWidgets.git] / demos / forty / canvas.cpp
index 705e949612a971894c43ac598a35b4b0d4885466..8a5257d54c7bf98b57ff1c34f29911838af2cd77 100644 (file)
@@ -38,12 +38,12 @@ 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),
+FortyCanvas::FortyCanvas(wxWindow* parent, const wxPoint& pos, const wxSize& size) :
+       wxScrolledWindow(parent, wxID_ANY, pos, size),
+       m_helpingHand(true),
+       m_rightBtnUndo(true),
        m_playerDialog(0),
-       m_leftBtnDown(FALSE)
+       m_leftBtnDown(false)
 {
 #ifdef __WXGTK__
        m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL);
@@ -56,7 +56,7 @@ FortyCanvas::FortyCanvas(wxWindow* parent, int x, int y, int w, int h) :
        m_arrowCursor = new wxCursor(wxCURSOR_ARROW);
 
        wxString name = wxTheApp->GetAppName();
-       if (name.Length() <= 0) name = "forty";
+       if (name.Length() <= 0) name = _T("forty");
        m_scoreFile = new ScoreFile(name);
        m_game = new Game(0, 0, 0);
        m_game->Deal();
@@ -68,6 +68,8 @@ FortyCanvas::~FortyCanvas()
        UpdateScores();
        delete m_game;
        delete m_scoreFile;
+    delete m_handCursor;
+    delete m_arrowCursor;
 }
 
 
@@ -92,7 +94,7 @@ void FortyCanvas::OnDraw(wxDC& dc)
 {
        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)
@@ -114,23 +116,55 @@ void FortyCanvas::OnDraw(wxDC& dc)
                else
                {
                        // user cancelled the dialog - exit the app
-                       ((wxFrame*)GetParent())->Close(TRUE);
+                       ((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);
+               }
+        }
+}
+        
 /*
 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)
+               wxMessageBox(_T("Are you sure you want to\nabandon the current game?"),
+                       _T("Warning"), wxYES_NO | wxICON_QUESTION) == wxNO)
        {
-        return FALSE;
+        return false;
        }
-       return TRUE;
+       return true;
 }
 
 void FortyCanvas::OnMouseEvent(wxMouseEvent& event)
@@ -146,7 +180,7 @@ void FortyCanvas::OnMouseEvent(wxMouseEvent& event)
        {
                if (m_leftBtnDown)
                {
-                       m_leftBtnDown = FALSE;
+                       m_leftBtnDown = false;
                        ReleaseMouse();
                        m_game->LButtonUp(dc, mouseX, mouseY);
                }
@@ -156,7 +190,7 @@ void FortyCanvas::OnMouseEvent(wxMouseEvent& event)
        {
                if (!m_leftBtnDown)
                {
-                       m_leftBtnDown = TRUE;
+                       m_leftBtnDown = true;
                        CaptureMouse();
                        m_game->LButtonDown(dc, mouseX, mouseY);
                }
@@ -165,14 +199,14 @@ void FortyCanvas::OnMouseEvent(wxMouseEvent& event)
        {
                if (m_leftBtnDown)
                {
-                       m_leftBtnDown = FALSE;
+                       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
+               // only allow right button undo if m_rightBtnUndo is true
                if (m_rightBtnUndo)
                {
                        if (event.ControlDown() || event.ShiftDown())