]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/bombs/bombs.cpp
Make it possible to use svn-find-native-eols script without svn checkout.
[wxWidgets.git] / demos / bombs / bombs.cpp
index 53de513670ace9215525212e48818f8886f7c1d8..2c756fcff3fb8847a1e4eaf66ada5350bab634d8 100644 (file)
@@ -2,17 +2,13 @@
 // Name:        bombs.cpp
 // Purpose:     Bombs game
 // Author:      P. Foggia 1996
 // Name:        bombs.cpp
 // Purpose:     Bombs game
 // Author:      P. Foggia 1996
-// Modified by: Wlodzimierz Skiba (ABX) 2003
+// Modified by: Wlodzimierz Skiba (ABX) since 2003
 // Created:     1996
 // RCS-ID:      $Id$
 // Copyright:   (c) 1996 P. Foggia
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // Created:     1996
 // RCS-ID:      $Id$
 // Copyright:   (c) 1996 P. Foggia
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#   pragma implementation
-#endif
-
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
@@ -33,8 +29,7 @@
 #   include <time.h>
 #endif
 
 #   include <time.h>
 #endif
 
-#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) \
-    || defined(__WXMAC__) || defined(__WXMGL__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
 #   include "bombs.xpm"
 #endif
 
 #   include "bombs.xpm"
 #endif
 
@@ -61,11 +56,13 @@ bool BombsApp::OnInit()
 }
 
 BEGIN_EVENT_TABLE(BombsFrame, wxFrame)
 }
 
 BEGIN_EVENT_TABLE(BombsFrame, wxFrame)
-    EVT_MENU(bombsID_EASY, BombsFrame::OnNewEasyGame)
-    EVT_MENU(bombsID_MEDIUM, BombsFrame::OnNewMediumGame)
-    EVT_MENU(bombsID_HARD, BombsFrame::OnNewHardGame)
-    EVT_MENU(wxID_EXIT, BombsFrame::OnExit)
-    EVT_MENU(wxID_ABOUT, BombsFrame::OnAbout)
+    EVT_MENU(wxID_NEW,           BombsFrame::OnNewGame)
+    EVT_MENU(bombsID_EASY,       BombsFrame::OnEasyGame)
+    EVT_MENU(bombsID_MEDIUM,     BombsFrame::OnMediumGame)
+    EVT_MENU(bombsID_HARD,       BombsFrame::OnHardGame)
+    EVT_MENU(bombsID_EASYCORNER, BombsFrame::OnEasyCorner)
+    EVT_MENU(wxID_EXIT,          BombsFrame::OnExit)
+    EVT_MENU(wxID_ABOUT,         BombsFrame::OnAbout)
 END_EVENT_TABLE()
 
 BombsFrame::BombsFrame(BombsGame *game)
 END_EVENT_TABLE()
 
 BombsFrame::BombsFrame(BombsGame *game)
@@ -73,6 +70,8 @@ BombsFrame::BombsFrame(BombsGame *game)
         wxSize(300, 300), wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX)
 {
     m_game = game;
         wxSize(300, 300), wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX)
 {
     m_game = game;
+    m_easyCorner = false;
+    m_lastLevel = bombsID_EASY;
 
     SetIcon(wxICON(bombs));
 
 
     SetIcon(wxICON(bombs));
 
@@ -88,8 +87,9 @@ BombsFrame::BombsFrame(BombsGame *game)
     menuLevel->AppendRadioItem(bombsID_MEDIUM, wxT("&Medium (15x15)\tCtrl-2"));
     menuLevel->AppendRadioItem(bombsID_HARD, wxT("&Hard (25x20)\tCtrl-3"));
 
     menuLevel->AppendRadioItem(bombsID_MEDIUM, wxT("&Medium (15x15)\tCtrl-2"));
     menuLevel->AppendRadioItem(bombsID_HARD, wxT("&Hard (25x20)\tCtrl-3"));
 
-    menuFile->Append(bombsID_NEWGAME, wxT("&New Game"),
-        menuLevel, wxT("Starts a new game"));
+    menuFile->Append(wxID_NEW, wxT("&New game\tCtrl-N"));
+    menuFile->Append(bombsID_LEVEL, wxT("&Level"),menuLevel, wxT("Starts a new game"));
+    menuFile->AppendCheckItem(bombsID_EASYCORNER, wxT("&Easy corner"));
 
     menuFile->AppendSeparator();
     menuFile->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT), wxT("Quits the application"));
 
     menuFile->AppendSeparator();
     menuFile->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT), wxT("Quits the application"));
@@ -137,6 +137,7 @@ void BombsFrame::NewGame(int level, bool query)
     }
 
     int numHorzCells = 20, numVertCells = 20;
     }
 
     int numHorzCells = 20, numVertCells = 20;
+    m_lastLevel = level;
 
     switch(level)
     {
 
     switch(level)
     {
@@ -157,7 +158,7 @@ void BombsFrame::NewGame(int level, bool query)
         break;
     }
 
         break;
     }
 
-    m_game->Init(numHorzCells, numVertCells);
+    m_game->Init(numHorzCells, numVertCells, m_easyCorner);
 
     GetMenuBar()->Check(level, true);
 
 
     GetMenuBar()->Check(level, true);
 
@@ -172,21 +173,50 @@ void BombsFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
         wxT("About wxBombs") );
 }
 
         wxT("About wxBombs") );
 }
 
-void BombsFrame::OnNewEasyGame(wxCommandEvent& WXUNUSED(event))
+void BombsFrame::OnNewGame(wxCommandEvent& WXUNUSED(event))
+{
+    NewGame(m_lastLevel, true);
+}
+
+void BombsFrame::OnEasyGame(wxCommandEvent& WXUNUSED(event))
 {
     NewGame(bombsID_EASY, true);
 }
 
 {
     NewGame(bombsID_EASY, true);
 }
 
-void BombsFrame::OnNewMediumGame(wxCommandEvent& WXUNUSED(event))
+void BombsFrame::OnMediumGame(wxCommandEvent& WXUNUSED(event))
 {
     NewGame(bombsID_MEDIUM, true);
 }
 
 {
     NewGame(bombsID_MEDIUM, true);
 }
 
-void BombsFrame::OnNewHardGame(wxCommandEvent& WXUNUSED(event))
+void BombsFrame::OnHardGame(wxCommandEvent& WXUNUSED(event))
 {
     NewGame(bombsID_HARD, true);
 }
 
 {
     NewGame(bombsID_HARD, true);
 }
 
+void BombsFrame::OnEasyCorner(wxCommandEvent& WXUNUSED(event))
+{
+    wxString msg;
+    if(m_easyCorner)
+        msg = wxT("enable");
+    else
+        msg = wxT("disable");
+
+    msg = wxT("Do you really want to ") + msg + wxT(" having\ntop left corner always empty for easier start?");
+
+    int ok = wxMessageBox(
+               msg,
+               wxT("Confirm"),
+               wxYES_NO | wxICON_QUESTION,
+               this
+             );
+
+    if(ok!=wxYES)return;
+
+    m_easyCorner = !m_easyCorner;
+
+    NewGame(m_lastLevel, true);
+}
+
 BEGIN_EVENT_TABLE(BombsCanvas, wxPanel)
     EVT_PAINT(BombsCanvas::OnPaint)
     EVT_MOUSE_EVENTS(BombsCanvas::OnMouseEvent)
 BEGIN_EVENT_TABLE(BombsCanvas, wxPanel)
     EVT_PAINT(BombsCanvas::OnPaint)
     EVT_MOUSE_EVENTS(BombsCanvas::OnMouseEvent)
@@ -202,7 +232,7 @@ BombsCanvas::BombsCanvas(wxFrame *parent, BombsGame *game)
     wxFont font= BOMBS_FONT;
     dc.SetFont(font);
 
     wxFont font= BOMBS_FONT;
     dc.SetFont(font);
 
-    long chw, chh;
+    wxCoord chw, chh;
     wxString buf = wxT("M");
 
     dc.GetTextExtent(buf, &chw, &chh);
     wxString buf = wxT("M");
 
     dc.GetTextExtent(buf, &chw, &chh);
@@ -284,7 +314,7 @@ void BombsCanvas::UpdateGridSize()
         delete m_bmp;
         m_bmp = NULL;
     }
         delete m_bmp;
         m_bmp = NULL;
     }
-
+    SetSize(GetGridSizeInPixels());
     Refresh();
 }
 
     Refresh();
 }