aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Toolbar.cc142
-rw-r--r--src/Toolbar.hh18
2 files changed, 90 insertions, 70 deletions
diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index b88abf2..856c8e6 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Toolbar.cc,v 1.55 2003/01/12 18:53:16 fluxgen Exp $ 25// $Id: Toolbar.cc,v 1.56 2003/02/15 02:00:29 fluxgen Exp $
26 26
27#include "Toolbar.hh" 27#include "Toolbar.hh"
28 28
@@ -181,7 +181,11 @@ Toolbar::Toolbar(BScreen *scrn, size_t width):
181 hide_timer(&hide_handler), 181 hide_timer(&hide_handler),
182 m_toolbarmenu(*scrn->menuTheme(), scrn->getScreenNumber(), *scrn->getImageControl()), 182 m_toolbarmenu(*scrn->menuTheme(), scrn->getScreenNumber(), *scrn->getImageControl()),
183 m_theme(scrn->getScreenNumber()), 183 m_theme(scrn->getScreenNumber()),
184 m_place(BOTTOMCENTER) { 184 m_place(BOTTOMCENTER),
185 m_themelistener(*this) {
186
187 // we need to get notified when the theme is reloaded
188 m_theme.addListener(m_themelistener);
185 189
186 setupMenus(*this); 190 setupMenus(*this);
187 191
@@ -412,7 +416,8 @@ void Toolbar::reconfigure() {
412 frame.base = None; 416 frame.base = None;
413 frame.window.setBackgroundColor(texture->color()); 417 frame.window.setBackgroundColor(texture->color());
414 } else { 418 } else {
415 frame.base = image_ctrl.renderImage(frame.window.width(), frame.window.height(), *texture); 419 frame.base = image_ctrl.renderImage(frame.window.width(),
420 frame.window.height(), *texture);
416 frame.window.setBackgroundPixmap(frame.base); 421 frame.window.setBackgroundPixmap(frame.base);
417 } 422 }
418 if (tmp) image_ctrl.removeImage(tmp); 423 if (tmp) image_ctrl.removeImage(tmp);
@@ -424,7 +429,8 @@ void Toolbar::reconfigure() {
424 frame.window_label.setBackgroundColor(texture->color()); 429 frame.window_label.setBackgroundColor(texture->color());
425 } else { 430 } else {
426 frame.label = 431 frame.label =
427 image_ctrl.renderImage(frame.window_label.width(), frame.window_label.height(), *texture); 432 image_ctrl.renderImage(frame.window_label.width(),
433 frame.window_label.height(), *texture);
428 frame.window_label.setBackgroundPixmap(frame.label); 434 frame.window_label.setBackgroundPixmap(frame.label);
429 } 435 }
430 if (tmp) image_ctrl.removeImage(tmp); 436 if (tmp) image_ctrl.removeImage(tmp);
@@ -562,75 +568,77 @@ void Toolbar::checkClock(bool redraw, bool date) {
562 cerr<<__FILE__<<"("<<__LINE__<<"): time(null)<0"<<endl; 568 cerr<<__FILE__<<"("<<__LINE__<<"): time(null)<0"<<endl;
563 569
564 570
565 if (redraw) { 571 if (!redraw)
566 frame.clock.clear(); 572 return;
573
574 frame.clock.clear();
567#ifdef HAVE_STRFTIME 575#ifdef HAVE_STRFTIME
568 char t[1024]; 576 char t[1024];
569 if (! strftime(t, 1024, screen()->getStrftimeFormat(), tt)) 577 if (! strftime(t, 1024, screen()->getStrftimeFormat(), tt))
570 return; 578 return;
571#else // !HAVE_STRFTIME 579#else // !HAVE_STRFTIME
572 char t[9]; 580 char t[9];
573 if (date) { 581 if (date) {
574 // format the date... with special consideration for y2k ;) 582 // format the date... with special consideration for y2k ;)
575 if (screen()->getDateFormat() == Blackbox::B_EuropeanDate) { 583 if (screen()->getDateFormat() == Blackbox::B_EuropeanDate) {
576 sprintf(t, 584 sprintf(t,
577 i18n->getMessage( 585 i18n->getMessage(
578 ToolbarSet, ToolbarNoStrftimeDateFormatEu, 586 ToolbarSet, ToolbarNoStrftimeDateFormatEu,
579 "%02d.%02d.%02d"), 587 "%02d.%02d.%02d"),
580 tt->tm_mday, tt->tm_mon + 1, 588 tt->tm_mday, tt->tm_mon + 1,
581 (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year); 589 (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
582 } else {
583 sprintf(t,
584 i18n->getMessage(
585 ToolbarSet, ToolbarNoStrftimeDateFormat,
586 "%02d/%02d/%02d"),
587 tt->tm_mon + 1, tt->tm_mday,
588 (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
589 }
590 } else { 590 } else {
591 if (screen()->isClock24Hour()) { 591 sprintf(t,
592 sprintf(t, 592 i18n->getMessage(
593 i18n->getMessage( 593 ToolbarSet, ToolbarNoStrftimeDateFormat,
594 ToolbarSet, ToolbarNoStrftimeTimeFormat24, 594 "%02d/%02d/%02d"),
595 " %02d:%02d "), 595 tt->tm_mon + 1, tt->tm_mday,
596 frame.hour, frame.minute); 596 (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
597 } else { 597 }
598 sprintf(t, 598 } else {
599 i18n->getMessage( 599 if (screen()->isClock24Hour()) {
600 ToolbarSet, ToolbarNoStrftimeTimeFormat12, 600 sprintf(t,
601 "%02d:%02d %sm"), 601 i18n->getMessage(
602 ((frame.hour > 12) ? frame.hour - 12 : 602 ToolbarSet, ToolbarNoStrftimeTimeFormat24,
603 ((frame.hour == 0) ? 12 : frame.hour)), frame.minute, 603 " %02d:%02d "),
604 ((frame.hour >= 12) ? 604 frame.hour, frame.minute);
605 i18n->getMessage( 605 } else {
606 ToolbarSet, ToolbarNoStrftimeTimeFormatP, 606 sprintf(t,
607 "p") : 607 i18n->getMessage(
608 i18n->getMessage( 608 ToolbarSet, ToolbarNoStrftimeTimeFormat12,
609 ToolbarSet, ToolbarNoStrftimeTimeFormatA, 609 "%02d:%02d %sm"),
610 "a"))); 610 ((frame.hour > 12) ? frame.hour - 12 :
611 } 611 ((frame.hour == 0) ? 12 : frame.hour)), frame.minute,
612 ((frame.hour >= 12) ?
613 i18n->getMessage(
614 ToolbarSet, ToolbarNoStrftimeTimeFormatP,
615 "p") :
616 i18n->getMessage(
617 ToolbarSet, ToolbarNoStrftimeTimeFormatA,
618 "a")));
612 } 619 }
620 }
613#endif // HAVE_STRFTIME 621#endif // HAVE_STRFTIME
614 622
615 size_t newlen = strlen(t); 623 size_t newlen = strlen(t);
616 int dx = FbTk::doAlignment(frame.clock_w, 624 int dx = FbTk::doAlignment(frame.clock_w,
617 frame.bevel_w*2, 625 frame.bevel_w*2,
618 m_theme.justify(), 626 m_theme.justify(),
619 m_theme.font(), 627 m_theme.font(),
620 t, strlen(t), newlen); 628 t, strlen(t), newlen);
621 int dy = 1 + m_theme.font().ascent(); 629 int dy = 1 + m_theme.font().ascent();
622 if (m_theme.font().isRotated()) { 630 if (m_theme.font().isRotated()) {
623 int tmp = dy; 631 int tmp = dy;
624 dy = frame.clock.height() - dx; 632 dy = frame.clock.height() - dx;
625 dx = tmp; 633 dx = tmp;
626 } 634 }
627 m_theme.font().drawText( 635 m_theme.font().drawText(
628 frame.clock.window(), 636 frame.clock.window(),
629 screen()->getScreenNumber(), 637 screen()->getScreenNumber(),
630 m_theme.clockTextGC(), 638 m_theme.clockTextGC(),
631 t, newlen, 639 t, newlen,
632 dx, dy); 640 dx, dy);
633 } 641
634} 642}
635 643
636 644
diff --git a/src/Toolbar.hh b/src/Toolbar.hh
index 9accc20..eb7af70 100644
--- a/src/Toolbar.hh
+++ b/src/Toolbar.hh
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Toolbar.hh,v 1.21 2003/01/12 18:52:35 fluxgen Exp $ 25// $Id: Toolbar.hh,v 1.22 2003/02/15 02:00:29 fluxgen Exp $
26 26
27#ifndef TOOLBAR_HH 27#ifndef TOOLBAR_HH
28#define TOOLBAR_HH 28#define TOOLBAR_HH
@@ -33,6 +33,7 @@
33#include "EventHandler.hh" 33#include "EventHandler.hh"
34#include "FbWindow.hh" 34#include "FbWindow.hh"
35#include "ArrowButton.hh" 35#include "ArrowButton.hh"
36#include "Observer.hh"
36 37
37#include <memory> 38#include <memory>
38 39
@@ -144,6 +145,7 @@ private:
144 145
145 virtual void timeout(); 146 virtual void timeout();
146 } hide_handler; 147 } hide_handler;
148 friend class HideHandler;
147 149
148 BScreen *m_screen; 150 BScreen *m_screen;
149 FbTk::ImageControl &image_ctrl; 151 FbTk::ImageControl &image_ctrl;
@@ -156,8 +158,18 @@ private:
156 158
157 ToolbarTheme m_theme; 159 ToolbarTheme m_theme;
158 Placement m_place; 160 Placement m_place;
159 161 //!! TODO this is just temporary
160 friend class HideHandler; 162 class ThemeListener: public FbTk::Observer {
163 public:
164 ThemeListener(Toolbar &tb):m_tb(tb) { }
165 void update(FbTk::Subject *subj) {
166 m_tb.reconfigure();
167 }
168 private:
169 Toolbar &m_tb;
170 };
171
172 ThemeListener m_themelistener;
161}; 173};
162 174
163 175