From 10db25fcc592c1c41ec696cc4066ed03bd825183 Mon Sep 17 00:00:00 2001
From: hwinter <hwinter@student.ethz.ch>
Date: Sat, 9 Nov 2024 18:40:33 +0100
Subject: [PATCH] buttons and popup window

---
 CMakeLists.txt                          |   6 +++-
 assets/error.png                        | Bin 0 -> 25808 bytes
 sockpp/.idea/misc.xml                   |   6 ++++
 src/client/GameController.cpp           |  13 ++++++-
 src/client/messageBoxes/ErrorDialog.cpp |  36 +++++++++++++++++++
 src/client/messageBoxes/ErrorDialog.h   |  21 +++++++++++
 src/client/windows/GameWindow.cpp       |  45 +++++++++++++++++++++---
 src/client/windows/GameWindow.h         |   4 +++
 8 files changed, 124 insertions(+), 7 deletions(-)
 create mode 100644 assets/error.png
 create mode 100644 src/client/messageBoxes/ErrorDialog.cpp
 create mode 100644 src/client/messageBoxes/ErrorDialog.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d19dc91..a98a8e5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,7 +48,9 @@ set(CLIENT_SOURCE_FILES
         src/common/serialization/serializable_value.h
         src/common/serialization/json_utils.h
         src/common/serialization/uuid_generator.h
-        src/common/serialization/unique_serializable.cpp src/common/serialization/unique_serializable.h)
+        src/common/serialization/unique_serializable.cpp src/common/serialization/unique_serializable.h
+        src/client/messageBoxes/ErrorDialog.cpp
+        src/client/messageBoxes/ErrorDialog.h)
 
 # define a variable SERVER_SOURCE_FILES that contains the paths to all source files required to compile the server executable
 set(SERVER_SOURCE_FILES
@@ -101,6 +103,8 @@ target_compile_definitions(Wizard-server PRIVATE WIZARD_SERVER=1 RAPIDJSON_HAS_S
 # Comment out if you don't want to print network-related messages into the console
 target_compile_definitions(Wizard-server PRIVATE PRINT_NETWORK_MESSAGES=1)
 
+# Copy all files from the assets folder to the binary directory
+file(COPY ${CMAKE_SOURCE_DIR}/assets/ DESTINATION ${CMAKE_BINARY_DIR}/assets/)
 
 # linking to sockpp
 if(WIN32)
diff --git a/assets/error.png b/assets/error.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8fcf98588f32c6c91d4def84739038c8686db2c
GIT binary patch
literal 25808
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
Mt0u^jD|X@k1HT^gxc~qF

literal 0
HcmV?d00001

diff --git a/sockpp/.idea/misc.xml b/sockpp/.idea/misc.xml
index 7c97963..6a6aa90 100644
--- a/sockpp/.idea/misc.xml
+++ b/sockpp/.idea/misc.xml
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="BackendCodeEditorMiscSettings">
+    <option name="/Default/RiderDebugger/RiderRestoreDecompile/RestoreDecompileSetting/@EntryValue" value="false" type="bool" />
+    <option name="/Default/Housekeeping/GlobalSettingsUpgraded/IsUpgraded/@EntryValue" value="true" type="bool" />
+    <option name="/Default/Housekeeping/FeatureSuggestion/FeatureSuggestionManager/DisabledSuggesters/=SwitchToGoToActionSuggester/@EntryIndexedValue" value="true" type="bool" />
+    <option name="/Default/Environment/Hierarchy/GeneratedFilesCacheKey/Timestamp/@EntryValue" value="4" type="long" />
+  </component>
   <component name="CMakePythonSetting">
     <option name="pythonIntegrationState" value="YES" />
   </component>
diff --git a/src/client/GameController.cpp b/src/client/GameController.cpp
index 651bcec..cc348ff 100644
--- a/src/client/GameController.cpp
+++ b/src/client/GameController.cpp
@@ -4,6 +4,7 @@
 #include "../common/network/requests/draw_card_request.h"
 #include "../common/network/requests/fold_request.h"
 #include "../common/network/requests/play_card_request.h"
+#include "../client/messageBoxes/ErrorDialog.h"
 #include "network/ClientNetworkManager.h"
 
 
@@ -143,8 +144,18 @@ wxEvtHandler* GameController::getMainThreadEventHandler() {
 }
 
 
+//void GameController::showError(const std::string& title, const std::string& message) {
+//   wxMessageBox(message, title, wxICON_ERROR);
+//}
+
 void GameController::showError(const std::string& title, const std::string& message) {
-    wxMessageBox(message, title, wxICON_ERROR);
+    // Load a custom image for the error dialog
+    wxString fullpath = "assets/error.png";
+
+    wxBitmap errorImage(fullpath, wxBITMAP_TYPE_ANY);
+    // Create and show the custom error dialog
+    ErrorDialog errorDialog(nullptr, title, message, errorImage);
+    errorDialog.ShowModal();
 }
 
 
diff --git a/src/client/messageBoxes/ErrorDialog.cpp b/src/client/messageBoxes/ErrorDialog.cpp
new file mode 100644
index 0000000..f272223
--- /dev/null
+++ b/src/client/messageBoxes/ErrorDialog.cpp
@@ -0,0 +1,36 @@
+//
+// Created by hannah on 11/9/24.
+//
+
+#include "ErrorDialog.h"
+
+ErrorDialog::ErrorDialog(wxWindow* parent, const std::string& title, const std::string& message, const wxBitmap& image)
+    : wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxSize(400, 250), wxDEFAULT_DIALOG_STYLE | wxSTAY_ON_TOP) {
+
+    // Set custom background color (for example, red for error dialogs)
+    SetBackgroundColour(*wxBLACK);
+
+    // Create a vertical sizer for layout
+    wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
+
+    // Display the custom image (if it’s valid)
+    if (image.IsOk()) {
+        wxImage resizedImage = image.ConvertToImage();
+        resizedImage.Rescale(100, 100);
+
+        imageCtrl = new wxStaticBitmap(this, wxID_ANY, wxBitmap(resizedImage));
+        sizer->Add(imageCtrl, 0, wxALIGN_CENTER | wxALL, 20);
+    }
+
+    // Display the error message
+    messageCtrl = new wxStaticText(this, wxID_ANY, message);
+    messageCtrl->SetForegroundColour(*wxWHITE);  // Set text color to white for better contrast
+    sizer->Add(messageCtrl, 0, wxALIGN_CENTER | wxALL, 10);
+
+    // Add an OK button to close the dialog
+    okButton = new wxButton(this, wxID_OK, "OK");
+    sizer->Add(okButton, 0, wxALIGN_CENTER | wxALL, 10);
+
+    SetSizerAndFit(sizer);
+    Centre();  // Center the dialog on the screen
+}
\ No newline at end of file
diff --git a/src/client/messageBoxes/ErrorDialog.h b/src/client/messageBoxes/ErrorDialog.h
new file mode 100644
index 0000000..b55a0ff
--- /dev/null
+++ b/src/client/messageBoxes/ErrorDialog.h
@@ -0,0 +1,21 @@
+//
+// Created by hannah on 11/9/24.
+//
+
+#ifndef ERRORDIALOG_H
+#define ERRORDIALOG_H
+
+#include <wx/wx.h>
+#include <wx/statbmp.h>
+
+class ErrorDialog : public wxDialog{
+    public: ErrorDialog(wxWindow* parent, const std::string& title, const std::string& message, const wxBitmap& image);
+
+    private:
+        wxStaticBitmap* imageCtrl;
+        wxStaticText* messageCtrl;
+        wxButton* okButton;
+
+};
+
+#endif //ERRORDIALOG_H
diff --git a/src/client/windows/GameWindow.cpp b/src/client/windows/GameWindow.cpp
index 2ae3559..53fff8e 100644
--- a/src/client/windows/GameWindow.cpp
+++ b/src/client/windows/GameWindow.cpp
@@ -4,7 +4,6 @@
 GameWindow::GameWindow(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(nullptr, wxID_ANY, title, pos, size)
 {
     // Set up layout that will contain and center all content
-
     this->_mainLayout = new wxBoxSizer(wxVERTICAL);
     wxBoxSizer* outerLayout = new wxBoxSizer(wxHORIZONTAL);
     outerLayout->Add(this->_mainLayout, 1, wxCENTER);
@@ -14,12 +13,34 @@ GameWindow::GameWindow(const wxString& title, const wxPoint& pos, const wxSize&
     // Set up status bar
     this->_statusBar = this->CreateStatusBar(1);
 
+    // Add "Rules" button directly to the status bar
+    _rulesButton = new wxButton(_statusBar, wxID_ANY, "Rules");
+    _settingsButton = new wxButton(_statusBar, wxID_ANY, "Settings");
+
+    // Set minimum height of status bar based on the button's height with padding
+    _statusBar->SetMinHeight(_rulesButton->GetSize().GetHeight() + 10);
+
+    // Create a horizontal sizer for the status bar and add the button to it
+    wxBoxSizer* statusSizer = new wxBoxSizer(wxHORIZONTAL);
+
+    // Add stretchable space to fill space in statusbar
+    statusSizer->AddStretchSpacer(1);
+
+    statusSizer->Add(_settingsButton, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL | wxALL, 5);
+    statusSizer->Add(_rulesButton, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL | wxALL, 5);
+    _statusBar->SetSizer(statusSizer);
+    _statusBar->Layout();
+
+    // Bind the button click event to showRules method
+    _rulesButton->Bind(wxEVT_BUTTON, &GameWindow::showRules, this);
+    _settingsButton->Bind(wxEVT_BUTTON, &GameWindow::show_settings, this);
+
     // Set background
-    wxColor lightBlue = wxColor(213, 231, 239);
-    this->SetBackgroundColour(lightBlue);
+    wxColor darkred = wxColor(102, 0, 51);
+    this->SetBackgroundColour(darkred);
 
     // Set the minimum size of the window. The user won't be able to resize the window to a size smaller than this
-    this->SetMinSize(wxSize(1000, 720));
+    this->SetMinSize(wxSize(50, 50));
 
 }
 
@@ -39,7 +60,7 @@ void GameWindow::showPanel(wxPanel* panel) {
     }
 
     // add new panel
-    this->_mainLayout->Add(panel, 0, wxALIGN_CENTER | wxALL, 20); // 20 pixel spacing
+    this->_mainLayout->Add(panel, 1, wxEXPAND | wxALL, 20); // 20 pixel spacing
     panel->Show(true);
     this->_currentPanel = panel;
 
@@ -55,3 +76,17 @@ void GameWindow::setStatus(const std::string& message) {
     this->_statusBar->SetStatusText(message, 0);
 }
 
+void GameWindow::showRules(wxCommandEvent& event){
+    wxString rules = "Game Rules:\n"
+                     "Do not cheat!";
+
+    wxMessageDialog rulesDialog(this, rules, "Game Rules", wxOK | wxICON_INFORMATION);
+    rulesDialog.ShowModal();
+}
+
+void GameWindow::show_settings(wxCommandEvent& event){
+    wxString settings = "Not implemented yet";
+
+    wxMessageDialog rulesDialog(this, settings, "Game Rules", wxOK | wxICON_INFORMATION);
+    rulesDialog.ShowModal();
+}
diff --git a/src/client/windows/GameWindow.h b/src/client/windows/GameWindow.h
index 2efbcfc..b02b19d 100644
--- a/src/client/windows/GameWindow.h
+++ b/src/client/windows/GameWindow.h
@@ -15,9 +15,13 @@ public:
 private:
     wxBoxSizer* _mainLayout;
     wxStatusBar* _statusBar;
+    wxButton* _rulesButton;
+    wxButton* _settingsButton;
 
     wxPanel* _currentPanel;
 
+    void showRules(wxCommandEvent& event);
+    void show_settings(wxCommandEvent& event);
 };
 
 
-- 
GitLab