From 14b2372f1a74198ec4f485f9665ef0acc27ae5e3 Mon Sep 17 00:00:00 2001 From: Stijn Buys 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 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