[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3565 - in trunk/pingus: data/images/core/menu src src/gui
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3565 - in trunk/pingus: data/images/core/menu src src/gui |
Date: |
Mon, 24 Mar 2008 19:59:24 +0100 |
Author: grumbel
Date: 2008-03-24 19:59:23 +0100 (Mon, 24 Mar 2008)
New Revision: 3565
Modified:
trunk/pingus/data/images/core/menu/marker2.png
trunk/pingus/data/images/core/menu/marker_locked.png
trunk/pingus/src/gui/gui_manager.cpp
trunk/pingus/src/level_menu.cpp
trunk/pingus/src/level_menu.hpp
Log:
- added scrolling to levelset menu
Modified: trunk/pingus/data/images/core/menu/marker2.png
===================================================================
(Binary files differ)
Modified: trunk/pingus/data/images/core/menu/marker_locked.png
===================================================================
(Binary files differ)
Modified: trunk/pingus/src/gui/gui_manager.cpp
===================================================================
--- trunk/pingus/src/gui/gui_manager.cpp 2008-03-24 18:55:48 UTC (rev
3564)
+++ trunk/pingus/src/gui/gui_manager.cpp 2008-03-24 18:59:23 UTC (rev
3565)
@@ -86,7 +86,7 @@
case Input::AXIS_EVENT_TYPE:
// AxisEvents can be ignored in the GUI, they are handled elsewhere
- pout (PINGUS_DEBUG_GUI) << "GUIManager: AxisEvent: " <<
i->axis.dir << std::endl;
+ pout(PINGUS_DEBUG_GUI) << "GUIManager: AxisEvent: " << i->axis.dir
<< std::endl;
break;
case Input::KEYBOARD_EVENT_TYPE:
Modified: trunk/pingus/src/level_menu.cpp
===================================================================
--- trunk/pingus/src/level_menu.cpp 2008-03-24 18:55:48 UTC (rev 3564)
+++ trunk/pingus/src/level_menu.cpp 2008-03-24 18:59:23 UTC (rev 3565)
@@ -18,6 +18,8 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <boost/format.hpp>
+#include <boost/function.hpp>
+#include <boost/bind.hpp>
#include "gettext.h"
#include "resource.hpp"
#include "screen/screen_manager.hpp"
@@ -68,7 +70,32 @@
}
};
+class LevelScrollButton
+ : public GUI::SurfaceButton
+{
+private:
+ boost::function<void(void)> callback;
+public:
+ LevelScrollButton(int x, int y, const std::string& str, boost::function<void
(void)> callback_)
+ : GUI::SurfaceButton(x, y,
+ ResDescriptor(str),
+ ResDescriptor(str),
+ ResDescriptor(str)),
+ callback(callback_)
+ {
+ }
+
+ void on_click() {
+ callback();
+ }
+
+ void on_pointer_enter()
+ {
+ SurfaceButton::on_pointer_enter();
+ Sound::PingusSound::play_sound("tick");
+ }
+};
class LevelsetSelector : public GUI::RectComponent
{
@@ -78,9 +105,6 @@
Levelsets levelsets;
Levelset* current_levelset;
Sprite marker;
-
- Sprite arrow_left;
- Sprite arrow_right;
int page;
public:
@@ -89,11 +113,8 @@
level_menu(level_menu_), current_levelset(NULL),
page(0)
{
- marker = Resource::load_sprite("core/menu/marker");
-
- arrow_left = Resource::load_sprite("core/menu/arrow_left");
- arrow_right = Resource::load_sprite("core/menu/arrow_right");
-
+ marker = Resource::load_sprite("core/menu/marker");
+
std::string path = Pathname("levelsets",
Pathname::DATA_PATH).get_sys_path();
System::Directory directory = System::opendir(path, "*.levelset");
for(System::Directory::iterator i = directory.begin(); i !=
directory.end(); ++i)
@@ -141,17 +162,28 @@
y += 95;
}
- int total_pages = levelsets.size()/3 + ((levelsets.size()%3) != 0 ? 1 : 0);
+ int total_pages = (int(levelsets.size())+2)/3;
gc.print_center(Fonts::chalk_normal, rect.get_width()/2, 453 - rect.top,
(boost::format("%1% %2%/%3%") % _("Page") % (page+1) %
total_pages).str());
- gc.draw(arrow_left, Vector2i(570 - rect.left, 445 - rect.top));
- gc.draw(arrow_right, Vector2i(630 - rect.left, 445 - rect.top));
-
gc.pop_modelview();
}
+ void next_page()
+ {
+ page += 1;
+ if (page >= ((int)levelsets.size()+2)/3)
+ page = ((int)levelsets.size()+2)/3 - 1;
+ }
+
+ void prev_page()
+ {
+ page -= 1;
+ if (page < 0)
+ page = 0;
+ }
+
void on_pointer_move(int x, int y)
{
x -= rect.left;
@@ -187,21 +219,17 @@
Sprite marker_locked;
Levelset* levelset;
int current_level;
- Sprite arrow_up;
- Sprite arrow_down;
-
+ int page;
public:
LevelSelector(LevelMenu* level_menu_, const Rect& rect_)
: RectComponent(rect_),
level_menu(level_menu_),
levelset(0),
- current_level(-1)
+ current_level(-1),
+ page(0)
{
marker = Resource::load_sprite("core/menu/marker2");
marker_locked = Resource::load_sprite("core/menu/marker_locked");
-
- arrow_up = Resource::load_sprite("core/menu/arrow_up");
- arrow_down = Resource::load_sprite("core/menu/arrow_down");
}
void draw(DrawingContext& gc)
@@ -219,10 +247,10 @@
// Color(255, 255, 0, 100));
gc.print_left(Fonts::chalk_normal, 30, -32, _("Title"));
- gc.print_right(Fonts::chalk_normal, rect.get_width() - 30 - 40, - 32,
_("Status"));
+ gc.print_right(Fonts::chalk_normal, rect.get_width() - 30, -32,
_("Status"));
int y = 0;
- for(int i = 0; i < levelset->get_level_count(); ++i)
+ for(int i = page*8; i < (page+1)*8 && i < levelset->get_level_count();
++i)
{
if (!levelset->get_level(i)->accessible)
gc.draw(marker_locked, Vector2i(0, y));
@@ -235,20 +263,34 @@
gc.print_left(Fonts::chalk_small, 30, y+4,
_(levelset->get_level(i)->plf.get_levelname()));
if (levelset->get_level(i)->finished)
- gc.print_right(Fonts::chalk_small, rect.get_width() -30 - 40,
y+4, _("solved"));
+ gc.print_right(Fonts::chalk_small, rect.get_width() -30, y+4,
_("solved"));
else
- gc.print_right(Fonts::chalk_small, rect.get_width() -30 - 40,
y+4, _("unsolved"));
+ gc.print_right(Fonts::chalk_small, rect.get_width() -30, y+4,
_("unsolved"));
y += 32;
}
}
- gc.draw(arrow_up, Vector2i(rect.get_width() - 26 - 20, 0));
- gc.draw(arrow_down, Vector2i(rect.get_width() - 26 - 20, 32 * 8 - 48 - 4));
-
+ gc.print_center(Fonts::chalk_normal, rect.get_width()/2, 453 - rect.top,
+ (boost::format("%1% %2%/%3%") % _("Page") % (page+1) %
((levelset->get_level_count()+7)/8)).str());
+
gc.pop_modelview();
}
+ void prev_page()
+ {
+ page -= 1;
+ if (page < 0)
+ page = 0;
+ }
+
+ void next_page()
+ {
+ page += 1;
+ if (page >= (levelset->get_level_count()+7)/8)
+ page = (levelset->get_level_count()+7)/8 - 1;
+ }
+
void set_levelset(Levelset* levelset_)
{
levelset = levelset_;
@@ -278,7 +320,7 @@
void update_layout() {}
};
-
+
LevelMenu::LevelMenu()
: x_pos((Display::get_width() - default_screen_width)/2),
y_pos((Display::get_height() - default_screen_height)/2)
@@ -289,9 +331,21 @@
ok_button = Resource::load_sprite("core/start/ok");
- levelset_selector = new LevelsetSelector(this, Rect(Vector2i(x_pos + 100,
y_pos + 140), Size(600, 300)));
- level_selector = new LevelSelector(this, Rect(Vector2i(x_pos + 100, y_pos
+ 160), Size(600, 300)));
+ levelset_selector = new LevelsetSelector(this, Rect(Vector2i(x_pos + 100,
y_pos + 140), Size(600, 285)));
+ level_selector = new LevelSelector(this, Rect(Vector2i(x_pos + 100, y_pos
+ 160), Size(600, 256)));
+ gui_manager->add(new LevelScrollButton(Display::get_width()/2 + 160,
+ Display::get_height()/2 + 145,
+ "core/menu/arrow_left",
+ boost::bind(&LevelMenu::prev_page,
this)),
+ true);
+
+ gui_manager->add(new LevelScrollButton(Display::get_width()/2 + 230,
+ Display::get_height()/2 + 145,
+ "core/menu/arrow_right",
+ boost::bind(&LevelMenu::next_page,
this)),
+ true);
+
gui_manager->add(levelset_selector, true);
gui_manager->add(level_selector, true);
gui_manager->add(new LevelMenuAbortButton(this), true);
@@ -325,6 +379,24 @@
}
void
+LevelMenu::next_page()
+{
+ if (level_selector->is_visible())
+ level_selector->next_page();
+ else
+ levelset_selector->next_page();
+}
+
+void
+LevelMenu::prev_page()
+{
+ if (level_selector->is_visible())
+ level_selector->prev_page();
+ else
+ levelset_selector->prev_page();
+}
+
+void
LevelMenu::set_levelset(Levelset* levelset)
{
if (levelset)
@@ -339,5 +411,5 @@
level_selector->hide();
}
}
-
+
/* EOF */
Modified: trunk/pingus/src/level_menu.hpp
===================================================================
--- trunk/pingus/src/level_menu.hpp 2008-03-24 18:55:48 UTC (rev 3564)
+++ trunk/pingus/src/level_menu.hpp 2008-03-24 18:59:23 UTC (rev 3565)
@@ -49,6 +49,9 @@
void set_levelset(Levelset* levelset);
+ void next_page();
+ void prev_page();
+
private:
LevelMenu (const LevelMenu&);
LevelMenu& operator= (const LevelMenu&);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3565 - in trunk/pingus: data/images/core/menu src src/gui,
grumbel at BerliOS <=