using menu as observer, cleaning in menu theme

This commit is contained in:
fluxgen 2003-12-17 00:43:22 +00:00
parent 90ff80f89b
commit 8294b04f5e
5 changed files with 18 additions and 34 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Menu.cc,v 1.49 2003/12/16 17:06:51 fluxgen Exp $
// $Id: Menu.cc,v 1.50 2003/12/17 00:43:22 fluxgen Exp $
//use GNU extensions
#ifndef _GNU_SOURCE
@ -63,7 +63,6 @@ Menu::Menu(MenuTheme &tm, ImageControl &imgctrl):
m_screen_height(DisplayHeight(FbTk::App::instance()->display(), tm.screenNum())),
m_alignment(ALIGNDONTCARE),
m_border_width(0),
m_themeobserver(*this),
m_need_update(true) {
// setup timers
@ -78,7 +77,7 @@ Menu::Menu(MenuTheme &tm, ImageControl &imgctrl):
m_hide_timer.fireOnce(true);
// make sure we get updated when the theme is reloaded
tm.addListener(m_themeobserver);
tm.reconfigSig().attach(this);
title_vis =
movable =
@ -1188,7 +1187,7 @@ void Menu::motionNotifyEvent(XMotionEvent &me) {
// setup show menu timer
timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = theme().delayOpen();
timeout.tv_usec = theme().delayOpen() * 1000; // transformed to usec
m_submenu_timer.setTimeout(timeout);
m_submenu_timer.start();
@ -1400,7 +1399,7 @@ void Menu::closeMenu() {
void Menu::startHide() {
timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = theme().delayClose();
timeout.tv_usec = theme().delayClose() * 1000; // transformed to usec
m_hide_timer.setTimeout(timeout);
m_hide_timer.start();
}

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Menu.hh,v 1.27 2003/12/16 17:06:52 fluxgen Exp $
// $Id: Menu.hh,v 1.28 2003/12/17 00:43:22 fluxgen Exp $
#ifndef FBTK_MENU_HH
#define FBTK_MENU_HH
@ -48,7 +48,7 @@ class ImageControl;
class Transparent;
/// Base class for menus
class Menu: public FbTk::EventHandler {
class Menu: public FbTk::EventHandler, protected FbTk::Observer {
public:
enum Alignment{ ALIGNDONTCARE = 1, ALIGNTOP, ALIGNBOTTOM };
enum { RIGHT = 1, LEFT };
@ -174,7 +174,10 @@ protected:
inline Menu *parent() { return m_parent; }
inline const Menu *parent() const { return m_parent; }
void update(FbTk::Subject *) { reconfigure(); }
private:
void openSubmenu();
void closeMenu();
void startHide();
@ -206,17 +209,6 @@ private:
bevel_h;
} menu;
class ThemeObserver:public Observer {
public:
ThemeObserver(FbTk::Menu &menu):m_menu(menu) { }
void update(FbTk::Subject *subj) {
m_menu.reconfigure();
}
private:
Menu &m_menu;
};
ThemeObserver m_themeobserver;
Drawable m_root_pm;
static Menu *s_focused; ///< holds current input focused menu, so one can determine if a menu is focused
FbPixmap m_frame_pm;

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: MenuTheme.cc,v 1.12 2003/12/12 18:18:49 fluxgen Exp $
// $Id: MenuTheme.cc,v 1.13 2003/12/17 00:43:22 fluxgen Exp $
#include "MenuTheme.hh"
@ -100,9 +100,6 @@ void MenuTheme::reconfigTheme() {
h_text_gc.setForeground(*h_text);
d_text_gc.setForeground(*d_text);
hilite_gc.setForeground(hilite->color());
// notify any listeners
m_theme_change_sig.notify();
}
bool MenuTheme::fallback(ThemeItem_base &item) {

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: MenuTheme.hh,v 1.12 2003/12/16 17:06:52 fluxgen Exp $
// $Id: MenuTheme.hh,v 1.13 2003/12/17 00:43:22 fluxgen Exp $
#ifndef FBTK_MENUTHEME_HH
#define FBTK_MENUTHEME_HH
@ -112,17 +112,13 @@ public:
// get resources into menu
void setMenuMode(MenuMode mode) { m_menumode = mode; }
MenuMode menuMode() const { return m_menumode; }
void setDelayOpen(int usec) { m_delayopen = usec; }
void setDelayClose(int usec) { m_delayclose = usec; }
void setDelayOpen(int msec) { m_delayopen = msec; }
void setDelayClose(int msec) { m_delayclose = msec; }
int delayOpen() const { return m_delayopen; }
int delayClose() const { return m_delayclose; }
const FbTk::Color &borderColor() const { return *m_border_color; }
FbTk::Subject &themeChangeSig() { return m_theme_change_sig; }
/// attach observer
void addListener(FbTk::Observer &obs) { m_theme_change_sig.attach(&obs); }
/// detach observer
void removeListener(FbTk::Observer &obs) { m_theme_change_sig.detach(&obs); }
private:
FbTk::ThemeItem<FbTk::Color> t_text, f_text, h_text, d_text;
FbTk::ThemeItem<FbTk::Texture> title, frame, hilite;
@ -137,12 +133,11 @@ private:
Display *m_display;
FbTk::GContext t_text_gc, f_text_gc, h_text_gc, d_text_gc, hilite_gc;
FbTk::Subject m_theme_change_sig;
unsigned char m_alpha;
MenuMode m_menumode;
unsigned int m_delayopen; ///< in usec
unsigned int m_delayclose; ///< in usec
unsigned int m_delayopen; ///< in msec
unsigned int m_delayclose; ///< in msec
};

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Theme.hh,v 1.12 2003/12/16 17:06:52 fluxgen Exp $
// $Id: Theme.hh,v 1.13 2003/12/17 00:43:22 fluxgen Exp $
/**
@file holds ThemeItem<T>, Theme and ThemeManager which is the base for any theme
@ -106,6 +106,7 @@ public:
void remove(ThemeItem<T> &item);
virtual bool fallback(ThemeItem_base &) { return false; }
FbTk::Subject &reconfigSig() { return m_reconfig_sig; }
const FbTk::Subject &reconfigSig() const { return m_reconfig_sig; }
private: