From 14b2372f1a74198ec4f485f9665ef0acc27ae5e3 Mon Sep 17 00:00:00 2001
From: Stijn Buys <ingar@osirion.org>
Date: Sun, 28 Aug 2011 09:49:23 +0000
Subject: New base classes for cient menus.

---
 src/client/Makefile.am   |  4 ++++
 src/client/mainmenu.cc   | 53 +++++++++++++++++++++++++++++++++++++++++++++
 src/client/mainmenu.h    | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/client/menuwindow.cc | 32 +++++++++++++++++++++++++++
 src/client/menuwindow.h  | 34 +++++++++++++++++++++++++++++
 5 files changed, 179 insertions(+)
 create mode 100644 src/client/mainmenu.cc
 create mode 100644 src/client/mainmenu.h
 create mode 100644 src/client/menuwindow.cc
 create mode 100644 src/client/menuwindow.h

(limited to 'src')

diff --git a/src/client/Makefile.am b/src/client/Makefile.am
index 49ac08a..71cfc7d 100644
--- a/src/client/Makefile.am
+++ b/src/client/Makefile.am
@@ -24,9 +24,11 @@ noinst_HEADERS = \
 	joystick.h \
 	key.h \
 	keyboard.h \
+	mainmenu.h \
 	mainwindow.h \
 	mapwidget.h \
 	mapwindow.h \
+	menuwindow.h \
 	notifications.h \
 	soundext.h \
 	targeticonbutton.h \
@@ -51,9 +53,11 @@ libclient_la_SOURCES = \
 	joystick.cc \
 	key.cc \
 	keyboard.cc \
+	mainmenu.cc \
 	mainwindow.cc \
 	mapwidget.cc \
 	mapwindow.cc \
+	menuwindow.h \
 	notifications.cc \
 	soundext.cc \
 	targeticonbutton.cc \
diff --git a/src/client/mainmenu.cc b/src/client/mainmenu.cc
new file mode 100644
index 0000000..5d1706d
--- /dev/null
+++ b/src/client/mainmenu.cc
@@ -0,0 +1,53 @@
+/*
+   client/mainmenu.cc
+   This file is part of the Osirion project and is distributed under
+   the terms and conditions of the GNU General Public License version 2
+*/
+
+#include "client/mainmenu.h"
+#include "ui/paint.h"
+
+namespace client
+{
+
+MainMenu::MainMenu(ui::Widget *parent) : ui::Window(parent)
+{
+	// default main menus 
+	mainmenu_mainmenu  = 0;
+	mainmenu_gamemenu  = 0;
+	mainmenu_joinmenu  = 0;
+	
+	// default extra menus
+	mainmenu_optionsmenu = 0;
+	mainmenu_loadmenu = 0;
+	mainmenu_savemenu = 0;
+	mainmenu_connectmenu = 0;
+	
+	set_background(true);
+	set_label("mainmenu");
+}
+
+MainMenu::~MainMenu()
+{
+}
+
+void MainMenu::show()
+{
+	ui::Widget::show();
+}
+
+void MainMenu::hide()
+{
+	ui::Widget::hide();
+}
+
+void MainMenu::draw_background()
+{
+	// we override draw_background instead of adding a ui::Bitmap child
+	// this simplifies child window managment
+	if (mainmenu_background.size()) {
+		ui::Paint::draw_bitmap(global_location(), size(), math::Color(), mainmenu_background);
+	}
+}
+
+} // namespace client
diff --git a/src/client/mainmenu.h b/src/client/mainmenu.h
new file mode 100644
index 0000000..cadd019
--- /dev/null
+++ b/src/client/mainmenu.h
@@ -0,0 +1,56 @@
+/*
+   client/mainmenu.h
+   This file is part of the Osirion project and is distributed under
+   the terms and conditions of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_CLIENT_MAINMENU_H__
+#define __INCLUDED_CLIENT_MAINMENU_H__
+
+#include "ui/window.h"
+#include "ui/bitmap.h"
+
+namespace client
+{
+
+/**
+ * @brief the client's main menu window
+ * The MainMenu contains a number of child menu windows,
+ * of which only one at a time will be visible
+ * */
+class MainMenu : public ui::Window
+{
+public:
+	MainMenu(ui::Widget *parent = 0);
+	virtual ~MainMenu();
+	
+protected:
+	virtual void show();
+	
+	virtual void hide();
+	
+	virtual void draw_background();
+
+private:
+	/// the menu to show if the application is not connected
+	ui::Window	*mainmenu_mainmenu;
+	/// the menu to show if the application is connected but the player has not joined yet
+	ui::Window	*mainmenu_joinmenu;
+	/// the menu the show if the application is connected and the player has joined
+	ui::Window	*mainmenu_gamemenu;
+	/// the options menu
+	ui::Window	*mainmenu_optionsmenu;
+	/// the load game menu
+	ui::Window	*mainmenu_loadmenu;
+	/// the save game menu
+	ui::Window	*mainmenu_savemenu;
+	/// the connect to server menu
+	ui::Window	*mainmenu_connectmenu;
+	
+	std::string	mainmenu_background;
+};
+
+}
+
+#endif // __INCLUDED_CLIENT_MAINMENU_H__
+
diff --git a/src/client/menuwindow.cc b/src/client/menuwindow.cc
new file mode 100644
index 0000000..8ebd0cb
--- /dev/null
+++ b/src/client/menuwindow.cc
@@ -0,0 +1,32 @@
+/*
+   client/menuwindow.cc
+   This file is part of the Osirion project and is distributed under
+   the terms and conditions of the GNU General Public License version 2
+*/
+
+#include "client/menuwindow.h"
+
+namespace client 
+{
+
+MenuWindow::MenuWindow(ui::Widget *parent) : ui::Widget(parent)
+{
+	set_border(true);
+	set_background(true);
+}
+
+MenuWindow::~MenuWindow()
+{
+}
+
+void MenuWindow::resize()
+{
+}
+
+void MainWindow::draw_background()
+{
+
+	
+}
+
+}
diff --git a/src/client/menuwindow.h b/src/client/menuwindow.h
new file mode 100644
index 0000000..82aaf8b
--- /dev/null
+++ b/src/client/menuwindow.h
@@ -0,0 +1,34 @@
+/*
+   client/menuwindow.h
+   This file is part of the Osirion project and is distributed under
+   the terms and conditions of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_CLIENT_MENUWINDOW_H__
+#define __INCLUDED_CLIENT_MENUWINDOW_H__
+
+#include "ui/window.h"
+
+namespace client
+{
+
+/**
+ * @brief generic base class for client windows
+ * This class implements the default layout for most client
+ * windows
+ **/
+class MenuWindow : public ui::Window
+{
+public:
+	MenuWindow(ui::Widget *parent = 0);
+	virtual ~MenuWindow();
+	
+protected:
+	
+	virtual void resize();
+};
+
+}
+
+#endif // __INCLUDED_CLIENT_MENUWINDOW_H__
+
-- 
cgit v1.2.3