From d356989d5ecc9bcdfe3db665146b33990b9237e4 Mon Sep 17 00:00:00 2001 From: Tobias Rundstrom Date: Tue, 21 Feb 2006 00:29:28 -0300 Subject: [PATCH] Lot of fixes for everything. --- Button.cpp | 10 +++++++ Button.h | 1 + Display.h | 9 +++---- MainDisplay.cpp | 8 ------ MainDisplay.h | 5 +--- MainWindow.cpp | 59 +++++++++++++++++++++++++++++++++++++++--- MainWindow.h | 16 +++++++++++- ShadedDisplay.cpp | 56 +++++++++++++++++++++++++++++++++++++++ ShadedDisplay.h | 32 +++++++++++++++++++++++ Slider.cpp | 2 +- SmallNumberDisplay.cpp | 2 +- SmallNumberDisplay.h | 4 +++ TextBar.cpp | 15 ++++++----- TextBar.h | 4 +++ TitleBar.cpp | 39 +++++++++++++++++++++------- TitleBar.h | 7 +++++ XMMSHandler.cpp | 25 ++++++++++++++---- promoe.pro | 6 +++-- 18 files changed, 253 insertions(+), 47 deletions(-) create mode 100644 ShadedDisplay.cpp create mode 100644 ShadedDisplay.h diff --git a/Button.cpp b/Button.cpp index 4e7524a..94bb2b3 100644 --- a/Button.cpp +++ b/Button.cpp @@ -2,6 +2,11 @@ #include "MainWindow.h" #include "Button.h" +Button::Button (QWidget *parent) : PixWidget (parent) +{ + m_name_normal = 0; + m_name_pressed = 0; +} Button::Button (QWidget *parent, uint normal, uint pressed) : PixWidget (parent) { @@ -9,6 +14,7 @@ Button::Button (QWidget *parent, uint normal, uint pressed) : PixWidget (parent) m_name_pressed = pressed; m_diffx = 0; m_diffy = 0; + m_nodrag = false; } Button::~Button () @@ -18,6 +24,10 @@ Button::~Button () void Button::setPixmaps(Skin *skin) { + if (!m_name_normal && !m_name_pressed) { + return; + } + m_pixmap_normal = skin->getItem (m_name_normal); m_pixmap_pressed = skin->getItem (m_name_pressed); m_pixmap = m_pixmap_normal; diff --git a/Button.h b/Button.h index 53dcb63..1e6b83f 100644 --- a/Button.h +++ b/Button.h @@ -10,6 +10,7 @@ class Button : public PixWidget Q_OBJECT public: Button (QWidget *parent, uint btn1, uint btn2); + Button (QWidget *parent); ~Button (); bool noDrag (void) { return m_nodrag; } diff --git a/Display.h b/Display.h index 3a13596..212d30b 100644 --- a/Display.h +++ b/Display.h @@ -12,18 +12,17 @@ #include "Skin.h" -using namespace std; - class SkinDisplay : public QWidget { Q_OBJECT public: SkinDisplay (QWidget *parent); - bool getNoDrag() const { return m_noDrag; } - void setNoDrag(bool d) { m_noDrag = d; } + bool getNoDrag () const { return m_noDrag; } + void setNoDrag (bool d) { m_noDrag = d; } + + QWidget *getMW () const { return m_mw; } - QWidget *getMW() const { return m_mw; } public slots: virtual void setPixmaps(Skin *skin); diff --git a/MainDisplay.cpp b/MainDisplay.cpp index 8be3e2f..90e1574 100644 --- a/MainDisplay.cpp +++ b/MainDisplay.cpp @@ -107,14 +107,6 @@ MainDisplay::SetupPushButtons (void) m_eject = new Button (this, Skin::BTN_EJECT_0, Skin::BTN_EJECT_1); m_eject->move(136, 89); - m_menubtn = new Button (this, Skin::MENUBUTTON_0, Skin::MENUBUTTON_1); - m_menubtn->move(6, 3); - m_minimize = new Button (this, Skin::MINIMIZE_0, Skin::MINIMIZE_1); - m_minimize->move(244, 3); - m_shadebtn = new Button (this, Skin::SHADE_1_0, Skin::SHADE_1_1); - m_shadebtn->move(254, 3); - m_closebtn = new Button (this, Skin::CLOSE_0, Skin::CLOSE_1); - m_closebtn->move(264, 3); } MainDisplay::~MainDisplay (void) diff --git a/MainDisplay.h b/MainDisplay.h index 56abc6f..713acc3 100644 --- a/MainDisplay.h +++ b/MainDisplay.h @@ -47,6 +47,7 @@ class MainDisplay : public SkinDisplay public slots: void setPixmaps(Skin *skin); + protected: void SetupPushButtons (void); void SetupToggleButtons (void); @@ -57,10 +58,6 @@ class MainDisplay : public SkinDisplay Button *m_stop; Button *m_next; Button *m_eject; - Button *m_shadebtn; - Button *m_menubtn; - Button *m_closebtn; - Button *m_minimize; ToggleButton *m_pls; ToggleButton *m_eq; diff --git a/MainWindow.cpp b/MainWindow.cpp index 2da4374..ac94690 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -6,16 +6,44 @@ MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent) setWindowFlags(Qt::FramelessWindowHint); setGeometry(100, 100, 275, 116); + /* + * Initialize the Handler that will + * update the display and the buttons + */ m_handler = new XMMSHandler (this); + /* + * Initialize skin, but don't open one + */ skin = new Skin (); - m_display = new MainDisplay(this); + /* + * The MainDisplay is the mainwindow non-shaded mode + */ + m_display = new MainDisplay (this); setCentralWidget (m_display); - - skin->setSkin ("./CleanAMP/"); m_display->show (); + /* + * MainDisplay's shaded mode + */ + m_shaded = new ShadedDisplay (this); + m_shaded->hide (); + + /* + * Per default not shaded. Change this to a + * config value later. + */ + m_isshaded = false; + + /* + * Now that everything is initialized + * open the skin and send the + * SkinChanged signal that will cause + * all widgets to get their pixmaps + */ + skin->setSkin ("./CleanAMP/"); + } MainWindow::~MainWindow () @@ -26,7 +54,30 @@ MainWindow::~MainWindow () void MainWindow::setNoDrag (bool b) { - m_display->setNoDrag (b); + if (m_isshaded) { + m_shaded->setNoDrag (b); + } else { + m_display->setNoDrag (b); + } +} + +void +MainWindow::switchDisplay () +{ + if (m_isshaded) { + m_shaded->hide (); + m_display->show (); + resize (275, 116); + m_isshaded = false; + } else { + m_display->hide (); + m_shaded->show (); + resize (275, 14); + m_isshaded = true; + } + + update (); + } Skin *MainWindow::getSkin(void) diff --git a/MainWindow.h b/MainWindow.h index 08dacb5..ece0ca9 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -16,6 +16,7 @@ class MainWindow; #include "Skin.h" #include "XmmsQT4.h" #include "MainDisplay.h" +#include "ShadedDisplay.h" using namespace std; @@ -25,14 +26,27 @@ class MainWindow : public QMainWindow public: MainWindow (QWidget *parent); ~MainWindow (void); + Skin *getSkin (void); + void setNoDrag (bool b); + XMMSHandler *getHandler () { return m_handler; } MainDisplay *getMD () { return m_display; } - void setNoDrag (bool b); + ShadedDisplay *getSD () { return m_shaded; } + + bool getShaded (void) { return m_isshaded; } + + public slots: + void switchDisplay (); + private: + bool m_isshaded; Skin *skin; + XMMSHandler *m_handler; MainDisplay *m_display; + ShadedDisplay *m_shaded; }; + #endif diff --git a/ShadedDisplay.cpp b/ShadedDisplay.cpp new file mode 100644 index 0000000..c05ce43 --- /dev/null +++ b/ShadedDisplay.cpp @@ -0,0 +1,56 @@ +#include "ShadedDisplay.h" + +ShadedDisplay::ShadedDisplay (QWidget *parent) : SkinDisplay (parent) +{ + MainWindow *mw = dynamic_cast(parent); + m_mw = parent; + + setMinimumSize (275, 14); + setMaximumSize (275, 14); + + m_tbar = new TitleBar(this, true); + m_tbar->move (0, 0); + + m_number = new SmallNumberDisplay (this, 10); + m_number->move (135, 4); + m_number->setNumber (0, 2); + + m_number2 = new SmallNumberDisplay (this, 10); + m_number2->move (147, 4); + m_number2->setNumber (0, 2); + + m_title = new TextScroller (this, 48, 7); + m_title->move (79, 4); + m_title->setText ("Promoe 0.1"); + + m_prev = new Button (this); + m_prev->move(169, 4); + m_prev->resize (8, 7); + connect (m_prev, SIGNAL(clicked()), mw->getHandler (), SLOT(prev())); + + m_play = new Button (this); + m_play->move(177, 4); + m_play->resize (10, 7); + connect (m_play, SIGNAL(clicked()), mw->getHandler (), SLOT(play())); + + m_pause = new Button (this); + m_pause->move(187, 4); + m_pause->resize (10, 7); + connect (m_pause, SIGNAL(clicked()), mw->getHandler (), SLOT(pause())); + + m_stop = new Button (this); + m_stop->move(197, 4); + m_stop->resize (9, 7); + connect (m_stop, SIGNAL(clicked()), mw->getHandler (), SLOT(stop())); + + m_next = new Button (this); + m_next->move(206, 4); + m_next->resize (8, 7); + connect (m_next, SIGNAL(clicked()), mw->getHandler (), SLOT(next())); + + m_eject = new Button (this); + m_eject->move(216, 4); + m_eject->resize (9, 7); + +} + diff --git a/ShadedDisplay.h b/ShadedDisplay.h new file mode 100644 index 0000000..5cc22ec --- /dev/null +++ b/ShadedDisplay.h @@ -0,0 +1,32 @@ +#ifndef __SHADEDDISPLAY_H__ +#define __SHADEDDISPLAY_H__ + +class ShadedDisplay; + +#include "MainWindow.h" +#include "Display.h" +#include "SmallNumberDisplay.h" +#include "TextBar.h" +#include "Button.h" + +class ShadedDisplay : public SkinDisplay +{ + public: + ShadedDisplay (QWidget *parent); + ~ShadedDisplay () { } + + SmallNumberDisplay *m_number; + SmallNumberDisplay *m_number2; + TextScroller *m_title; + + private: + Button *m_prev; + Button *m_play; + Button *m_pause; + Button *m_stop; + Button *m_next; + Button *m_eject; + +}; + +#endif diff --git a/Slider.cpp b/Slider.cpp index a89d44d..ce5d8be 100644 --- a/Slider.cpp +++ b/Slider.cpp @@ -119,7 +119,7 @@ Slider::setPos (uint p) } uint x = m_pix * p / m_max; - if (x != m_pos) { + if (x < m_pix - m_button->rect().width() && x != m_pos) { m_button->move (x , 0); m_pos = x; update (); diff --git a/SmallNumberDisplay.cpp b/SmallNumberDisplay.cpp index 444ae28..2de452c 100644 --- a/SmallNumberDisplay.cpp +++ b/SmallNumberDisplay.cpp @@ -18,7 +18,7 @@ SmallNumberDisplay::setPixmaps (Skin *skin) void SmallNumberDisplay::setNumber (int num, int len) { - snprintf (m_nums, len+1, "%d", num); + snprintf (m_nums, len+1, "%02d", num); m_num = len; drawNumber (); diff --git a/SmallNumberDisplay.h b/SmallNumberDisplay.h index 2032ad0..e3a271f 100644 --- a/SmallNumberDisplay.h +++ b/SmallNumberDisplay.h @@ -1,3 +1,6 @@ +#ifndef __SMALLNUMBERDISPLAY_H__ +#define __SMALLNUMBERDISPLAY_H__ + #include "PixWidget.h" #include @@ -25,3 +28,4 @@ class SmallNumberDisplay : public PixWidget Skin *m_skin; }; +#endif diff --git a/TextBar.cpp b/TextBar.cpp index c3a152b..b56fa92 100644 --- a/TextBar.cpp +++ b/TextBar.cpp @@ -14,6 +14,8 @@ TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent) m_w = w; m_x_off = 0; m_x2_off = 0; + m_fontsize = 8; /* default */ + m_ttf = true; setMinimumSize(m_w + 2, m_h); setMaximumSize(m_w + 2, m_h); @@ -27,11 +29,6 @@ TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent) m_timer = new QTimer (this); connect (m_timer, SIGNAL (timeout()), this, SLOT (addOffset ())); - setAutoFillBackground (true); - - - //setText (QString::fromUtf8 ("Okerueu etuoduå öästö åntöå dS !! !¤ ¤ % % & & ¤")); - } void @@ -65,7 +62,11 @@ TextScroller::addOffset () void TextScroller::setText (const QString &text) { - drawQtFont (text); + if (m_ttf) { + drawQtFont (text); + } else { + drawBitmapFont (text); + } m_x_off = 1; m_x2_off = 0; update (); @@ -110,7 +111,7 @@ void TextScroller::drawQtFont (const QString &text) { QFont font(m_skin->getPLeditValue ("font")); - font.setPixelSize (9); + font.setPixelSize (m_fontsize); QFontMetrics fM(font); QRect rect = fM.boundingRect (text); diff --git a/TextBar.h b/TextBar.h index 38554e8..535d110 100644 --- a/TextBar.h +++ b/TextBar.h @@ -23,6 +23,8 @@ class TextScroller : public QWidget ~TextScroller (); void setText(const QString &text); + void setFontSize (int i) { m_fontsize = i; } + void setTTF (bool b) { m_ttf = b; } public slots: void addOffset (); @@ -38,6 +40,8 @@ class TextScroller : public QWidget int m_y; int m_x_off; int m_x2_off; + int m_fontsize; + bool m_ttf; QTimer *m_timer; diff --git a/TitleBar.cpp b/TitleBar.cpp index 56f8969..c49526a 100644 --- a/TitleBar.cpp +++ b/TitleBar.cpp @@ -1,23 +1,41 @@ +#include "MainWindow.h" #include "TitleBar.h" #include "Display.h" TitleBar::TitleBar (QWidget *parent, bool shaded) : PixWidget (parent) { + MainWindow *mw = dynamic_cast(window ()); m_shaded = shaded; - setMinimumSize(QSize(275, 14)); - setMaximumSize(QSize(275, 14)); + setMinimumSize (275, 14); + setMaximumSize (275, 14); + + m_menubtn = new Button (this, Skin::MENUBUTTON_0, Skin::MENUBUTTON_1); + m_menubtn->move(6, 3); + + m_minimize = new Button (this, Skin::MINIMIZE_0, Skin::MINIMIZE_1); + connect (m_minimize, SIGNAL (clicked ()), mw, SLOT (showMinimized ())); + m_minimize->move(244, 3); + + m_shadebtn = new Button (this, Skin::SHADE_1_0, Skin::SHADE_1_1); + connect (m_shadebtn, SIGNAL (clicked()), mw, SLOT (switchDisplay ())); + m_shadebtn->move(254, 3); + + m_closebtn = new Button (this, Skin::CLOSE_0, Skin::CLOSE_1); + connect (m_closebtn, SIGNAL (clicked()), qApp, SLOT (quit ())); + m_closebtn->move(264, 3); + } void TitleBar::setPixmaps (Skin *skin) { if (m_shaded) { - m_pixmap_active = skin->getItem(Skin::STATUSBAR_0); - m_pixmap_inactive = skin->getItem(Skin::STATUSBAR_1); - } else { - m_pixmap_active = skin->getItem(Skin::TITLEBAR_0); - m_pixmap_inactive = skin->getItem(Skin::TITLEBAR_1); + m_pixmap_active = skin->getItem (Skin::STATUSBAR_0); + m_pixmap_inactive = skin->getItem (Skin::STATUSBAR_1); + } else { + m_pixmap_active = skin->getItem (Skin::TITLEBAR_0); + m_pixmap_inactive = skin->getItem (Skin::TITLEBAR_1); } if (underMouse()) { @@ -38,14 +56,17 @@ TitleBar::setActive (bool active) { if (active) { m_pixmap = m_pixmap_active; - update(); + update (); } else { m_pixmap = m_pixmap_inactive; - update(); + update (); } } void TitleBar::mouseDoubleClickEvent (QMouseEvent *event) { + MainWindow *mw = dynamic_cast(window ()); + mw->switchDisplay (); } + diff --git a/TitleBar.h b/TitleBar.h index a4bca68..9f1b388 100644 --- a/TitleBar.h +++ b/TitleBar.h @@ -4,6 +4,7 @@ class TitleBar; #include "PixWidget.h" +#include "Button.h" using namespace std; @@ -24,6 +25,12 @@ class TitleBar : public PixWidget private: QPixmap m_pixmap_active; QPixmap m_pixmap_inactive; + + Button *m_shadebtn; + Button *m_menubtn; + Button *m_closebtn; + Button *m_minimize; + bool m_shaded; }; diff --git a/XMMSHandler.cpp b/XMMSHandler.cpp index 3a2584f..59bedb5 100644 --- a/XMMSHandler.cpp +++ b/XMMSHandler.cpp @@ -36,6 +36,15 @@ XMMSHandler::playback_status (XMMSResult *res) uint i; res->getValue (&i); m_mw->getMD ()->m_playstatus->setStatus (i); + + if (i == XMMS_PLAYBACK_STATUS_STOP) { + m_mw->getSD ()->m_number->setNumber (0, 2); + m_mw->getSD ()->m_number2->setNumber (0, 2); + m_mw->getMD ()->m_number->setNumber (0, 0); + m_mw->getMD ()->m_number2->setNumber (0, 0); + m_mw->getMD ()->m_slider->setPos (0); + } + } void @@ -46,11 +55,17 @@ XMMSHandler::playback_playtime (XMMSResult *res) sec = (i / 1000) % 60; min = (i / 1000) / 60; - m_mw->getMD ()->m_number->setNumber (min / 10, min % 10); - m_mw->getMD ()->m_number2->setNumber (sec / 10, sec % 10); - /* update slider */ - m_mw->getMD ()->m_slider->setPos (i); + if (m_mw->getShaded ()) { + m_mw->getSD ()->m_number->setNumber (min, 2); + m_mw->getSD ()->m_number2->setNumber (sec, 2); + } else { + m_mw->getMD ()->m_number->setNumber (min / 10, min % 10); + m_mw->getMD ()->m_number2->setNumber (sec / 10, sec % 10); + + /* update slider */ + m_mw->getMD ()->m_slider->setPos (i); + } res->restart (); } @@ -84,8 +99,8 @@ XMMSHandler::medialib_info (XMMSResult *res) /* Make this NICER! */ res->entryFormat (str, 4096, "${artist} - ${album} - ${title}"); - qDebug ("%s", str); m_mw->getMD ()->m_text->setText (QString::fromUtf8 (str)); + m_mw->getSD ()->m_title->setText (QString::fromUtf8 (str)); if (res->getDictValue ("bitrate", &b)) { m_mw->getMD ()->m_kbps->setNumber (b/1000, 3); diff --git a/promoe.pro b/promoe.pro index e7ad340..6fed2e0 100644 --- a/promoe.pro +++ b/promoe.pro @@ -12,7 +12,8 @@ SOURCES += XmmsQT4.cpp \ SmallNumberDisplay.cpp \ StereoMono.cpp \ Slider.cpp \ - PlayStatus.cpp + PlayStatus.cpp \ + ShadedDisplay.cpp HEADERS += XmmsQT4.h \ PixWidget.h \ @@ -28,7 +29,8 @@ HEADERS += XmmsQT4.h \ SmallNumberDisplay.h \ StereoMono.h \ Slider.h \ - PlayStatus.h + PlayStatus.h \ + ShadedDisplay.h CONFIG += link_pkgconfig PKGCONFIG += xmms2-client xmms2-client-cpp sigc++-2.0