fixed indentation and added theme listener object

This commit is contained in:
fluxgen 2003-02-15 02:00:29 +00:00
parent f25cf733d6
commit 0a01f73b51
2 changed files with 90 additions and 70 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Toolbar.cc,v 1.55 2003/01/12 18:53:16 fluxgen Exp $ // $Id: Toolbar.cc,v 1.56 2003/02/15 02:00:29 fluxgen Exp $
#include "Toolbar.hh" #include "Toolbar.hh"
@ -181,7 +181,11 @@ Toolbar::Toolbar(BScreen *scrn, size_t width):
hide_timer(&hide_handler), hide_timer(&hide_handler),
m_toolbarmenu(*scrn->menuTheme(), scrn->getScreenNumber(), *scrn->getImageControl()), m_toolbarmenu(*scrn->menuTheme(), scrn->getScreenNumber(), *scrn->getImageControl()),
m_theme(scrn->getScreenNumber()), m_theme(scrn->getScreenNumber()),
m_place(BOTTOMCENTER) { m_place(BOTTOMCENTER),
m_themelistener(*this) {
// we need to get notified when the theme is reloaded
m_theme.addListener(m_themelistener);
setupMenus(*this); setupMenus(*this);
@ -412,7 +416,8 @@ void Toolbar::reconfigure() {
frame.base = None; frame.base = None;
frame.window.setBackgroundColor(texture->color()); frame.window.setBackgroundColor(texture->color());
} else { } else {
frame.base = image_ctrl.renderImage(frame.window.width(), frame.window.height(), *texture); frame.base = image_ctrl.renderImage(frame.window.width(),
frame.window.height(), *texture);
frame.window.setBackgroundPixmap(frame.base); frame.window.setBackgroundPixmap(frame.base);
} }
if (tmp) image_ctrl.removeImage(tmp); if (tmp) image_ctrl.removeImage(tmp);
@ -424,7 +429,8 @@ void Toolbar::reconfigure() {
frame.window_label.setBackgroundColor(texture->color()); frame.window_label.setBackgroundColor(texture->color());
} else { } else {
frame.label = frame.label =
image_ctrl.renderImage(frame.window_label.width(), frame.window_label.height(), *texture); image_ctrl.renderImage(frame.window_label.width(),
frame.window_label.height(), *texture);
frame.window_label.setBackgroundPixmap(frame.label); frame.window_label.setBackgroundPixmap(frame.label);
} }
if (tmp) image_ctrl.removeImage(tmp); if (tmp) image_ctrl.removeImage(tmp);
@ -562,75 +568,77 @@ void Toolbar::checkClock(bool redraw, bool date) {
cerr<<__FILE__<<"("<<__LINE__<<"): time(null)<0"<<endl; cerr<<__FILE__<<"("<<__LINE__<<"): time(null)<0"<<endl;
if (redraw) { if (!redraw)
frame.clock.clear(); return;
frame.clock.clear();
#ifdef HAVE_STRFTIME #ifdef HAVE_STRFTIME
char t[1024]; char t[1024];
if (! strftime(t, 1024, screen()->getStrftimeFormat(), tt)) if (! strftime(t, 1024, screen()->getStrftimeFormat(), tt))
return; return;
#else // !HAVE_STRFTIME #else // !HAVE_STRFTIME
char t[9]; char t[9];
if (date) { if (date) {
// format the date... with special consideration for y2k ;) // format the date... with special consideration for y2k ;)
if (screen()->getDateFormat() == Blackbox::B_EuropeanDate) { if (screen()->getDateFormat() == Blackbox::B_EuropeanDate) {
sprintf(t, sprintf(t,
i18n->getMessage( i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeDateFormatEu, ToolbarSet, ToolbarNoStrftimeDateFormatEu,
"%02d.%02d.%02d"), "%02d.%02d.%02d"),
tt->tm_mday, tt->tm_mon + 1, tt->tm_mday, tt->tm_mon + 1,
(tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year); (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
} else {
sprintf(t,
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeDateFormat,
"%02d/%02d/%02d"),
tt->tm_mon + 1, tt->tm_mday,
(tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
}
} else { } else {
if (screen()->isClock24Hour()) { sprintf(t,
sprintf(t, i18n->getMessage(
i18n->getMessage( ToolbarSet, ToolbarNoStrftimeDateFormat,
ToolbarSet, ToolbarNoStrftimeTimeFormat24, "%02d/%02d/%02d"),
" %02d:%02d "), tt->tm_mon + 1, tt->tm_mday,
frame.hour, frame.minute); (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
} else {
sprintf(t,
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormat12,
"%02d:%02d %sm"),
((frame.hour > 12) ? frame.hour - 12 :
((frame.hour == 0) ? 12 : frame.hour)), frame.minute,
((frame.hour >= 12) ?
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormatP,
"p") :
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormatA,
"a")));
}
} }
} else {
if (screen()->isClock24Hour()) {
sprintf(t,
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormat24,
" %02d:%02d "),
frame.hour, frame.minute);
} else {
sprintf(t,
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormat12,
"%02d:%02d %sm"),
((frame.hour > 12) ? frame.hour - 12 :
((frame.hour == 0) ? 12 : frame.hour)), frame.minute,
((frame.hour >= 12) ?
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormatP,
"p") :
i18n->getMessage(
ToolbarSet, ToolbarNoStrftimeTimeFormatA,
"a")));
}
}
#endif // HAVE_STRFTIME #endif // HAVE_STRFTIME
size_t newlen = strlen(t); size_t newlen = strlen(t);
int dx = FbTk::doAlignment(frame.clock_w, int dx = FbTk::doAlignment(frame.clock_w,
frame.bevel_w*2, frame.bevel_w*2,
m_theme.justify(), m_theme.justify(),
m_theme.font(), m_theme.font(),
t, strlen(t), newlen); t, strlen(t), newlen);
int dy = 1 + m_theme.font().ascent(); int dy = 1 + m_theme.font().ascent();
if (m_theme.font().isRotated()) { if (m_theme.font().isRotated()) {
int tmp = dy; int tmp = dy;
dy = frame.clock.height() - dx; dy = frame.clock.height() - dx;
dx = tmp; dx = tmp;
} }
m_theme.font().drawText( m_theme.font().drawText(
frame.clock.window(), frame.clock.window(),
screen()->getScreenNumber(), screen()->getScreenNumber(),
m_theme.clockTextGC(), m_theme.clockTextGC(),
t, newlen, t, newlen,
dx, dy); dx, dy);
}
} }

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Toolbar.hh,v 1.21 2003/01/12 18:52:35 fluxgen Exp $ // $Id: Toolbar.hh,v 1.22 2003/02/15 02:00:29 fluxgen Exp $
#ifndef TOOLBAR_HH #ifndef TOOLBAR_HH
#define TOOLBAR_HH #define TOOLBAR_HH
@ -33,6 +33,7 @@
#include "EventHandler.hh" #include "EventHandler.hh"
#include "FbWindow.hh" #include "FbWindow.hh"
#include "ArrowButton.hh" #include "ArrowButton.hh"
#include "Observer.hh"
#include <memory> #include <memory>
@ -144,6 +145,7 @@ private:
virtual void timeout(); virtual void timeout();
} hide_handler; } hide_handler;
friend class HideHandler;
BScreen *m_screen; BScreen *m_screen;
FbTk::ImageControl &image_ctrl; FbTk::ImageControl &image_ctrl;
@ -156,8 +158,18 @@ private:
ToolbarTheme m_theme; ToolbarTheme m_theme;
Placement m_place; Placement m_place;
//!! TODO this is just temporary
friend class HideHandler; class ThemeListener: public FbTk::Observer {
public:
ThemeListener(Toolbar &tb):m_tb(tb) { }
void update(FbTk::Subject *subj) {
m_tb.reconfigure();
}
private:
Toolbar &m_tb;
};
ThemeListener m_themelistener;
}; };