diff options
author | Thomas Günther <tom@toms-cafe.de> | 2008-03-16 21:12:52 +0100 |
---|---|---|
committer | Thomas Günther <tom@toms-cafe.de> | 2008-03-16 21:12:52 +0100 |
commit | 7aaa70fa39a1e9968ff08ffab4462231e80fbb67 (patch) | |
tree | 425f5c5f5eb55a99fb5733e31d4ebf00aa65bec9 /menu.cpp | |
parent | baa63378b3de16c365255f29a3431488cf6656b3 (diff) | |
download | vdr-plugin-sudoku-7aaa70fa39a1e9968ff08ffab4462231e80fbb67.tar.gz vdr-plugin-sudoku-7aaa70fa39a1e9968ff08ffab4462231e80fbb67.tar.bz2 |
Added commands menu
Diffstat (limited to 'menu.cpp')
-rw-r--r-- | menu.cpp | 64 |
1 files changed, 52 insertions, 12 deletions
@@ -17,13 +17,14 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * $Id: menu.cpp 112 2008-03-16 17:56:36Z tom $ + * $Id: menu.cpp 113 2008-03-16 20:12:52Z tom $ */ #include "menu.h" #include "puzzle.h" #include "setup.h" #include "bitmap.h" +#include "commands.h" #include "i18n.h" #include <vdr/config.h> #include <vdr/osdbase.h> @@ -77,11 +78,13 @@ Menu::Menu(const SetupData& setup, Puzzle& puzzle, Pos& curr) : maxi_font = cFont::GetFont(fontFix); mini_font = NULL; #endif + command_menu = NULL; } /** Destructor */ Menu::~Menu() { + delete command_menu; #if VDRVERSNUM >= 10504 delete maxi_font; delete mini_font; @@ -108,18 +111,39 @@ void Menu::Show() /** Process user events. */ eOSState Menu::ProcessKey(eKeys key) { + if (command_menu) + { + eOSState state = command_menu->ProcessKey(key); + if (state == osBack) + { + state = osContinue; + CommandType command = command_menu->get_selected_command(); + DELETENULL(command_menu); + if (command) + state = (this->*command)(); + if (state == osContinue) + Show(); + } + return state; + } + eOSState state = cOsdObject::ProcessKey(key); if (state == osUnknown) { if (key == kBack) - return osEnd; + return exit(); + if (key == kBlue) + { + osd->Flush(); + DELETENULL(osd); + command_menu = new CommandMenu(); + command_menu->Display(); + return osContinue; + } if (new_puzzle_request) { if (key == kOk) - { - new_puzzle_request = false; - puzzle.generate(setup.givens_count, setup.symmetric); - } + generate(); } else { @@ -163,12 +187,6 @@ eOSState Menu::ProcessKey(eKeys key) if (puzzle.next_free(curr) <= Pos::last()) curr = puzzle.next_free(curr); break; - case kBlue: - if (puzzle.untouched()) - puzzle.generate(setup.givens_count, setup.symmetric); - else - puzzle.reset(setup.clear_marks); - break; default: return osContinue; } @@ -184,6 +202,26 @@ eOSState Menu::ProcessKey(eKeys key) return state; } +/** Generate a new puzzle. */ +eOSState Menu::generate() +{ + puzzle.generate(setup.givens_count, setup.symmetric); + return osContinue; +} + +/** Reset the puzzle. */ +eOSState Menu::reset() +{ + puzzle.reset(setup.clear_marks); + return osContinue; +} + +/** Exit plugin menu. */ +eOSState Menu::exit() +{ + return osEnd; +} + /** Paint all pieces of the menu. */ void Menu::paint() { @@ -273,6 +311,8 @@ void Menu::paint() osd->DrawBitmap(xPos + 10, yPos + 10, *info); infoText = NULL; } + else + new_puzzle_request = false; osd->Flush(); } |