[madman-discuss] passive popup now not so passive anymore
Brought to you by:
inducer
From: Guido S. <amy...@co...> - 2004-09-29 00:45:16
|
And another one, cause this is fun! I like the pop up notification that juK has, where you can click on Skip and Previous buttons to change the song that just started. This comes in handy, when you don't like the new song for whatever reason. I think this is easier than right-clicking the systray or finding XMMS. What do you think? While I was in there, I also added a feature requested by Steve Borho (sborho). His problem was that the notification would be split in half in a multi head environment and he requested a configurable position for the pop up dialog. I added a preference for this. If you'd like to have this feature in madman, you will need to patch these files: designer/prefs.ui ui/mainwin.cpp ui/passive_popup.h ui/passive_popup.cpp ui/prefsdialog.cpp utility/prefs.h utiltiy/prefs.cpp Here are the diffs: =================================================================== RCS file: /cvsroot/madman/madman2/designer/prefs.ui,v retrieving revision 1.29 diff -u -3 -p -r1.29 prefs.ui --- designer/prefs.ui 25 May 2004 01:06:36 -0000 1.29 +++ designer/prefs.ui 29 Sep 2004 00:30:31 -0000 @@ -232,6 +232,85 @@ <string></string> </property> </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layoutLocation</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <spacer> + <property name="name"> + <cstring>spacerLocation</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Fixed</enum> + </property> + <property name="sizeHint"> + <size> + <width>25</width> + <height>16</height> + </size> + </property> + </spacer> + <widget class="QComboBox"> + <item> + <property name="text"> + <string>Top Left Corner</string> + </property> + </item> + <item> + <property name="text"> + <string>Top Center</string> + </property> + </item> + <item> + <property name="text"> + <string>Top Right Corner</string> + </property> + </item> + <item> + <property name="text"> + <string>Bottom Left Corner</string> + </property> + </item> + <item> + <property name="text"> + <string>Bottom Center</string> + </property> + </item> + <item> + <property name="text"> + <string>Bottom Right Corner</string> + </property> + </item> + <property name="name"> + <cstring>comboLocation</cstring> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>spacerLocation</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Fixed</enum> + </property> + <property name="sizeHint"> + <size> + <width>310</width> + <height>16</height> + </size> + </property> + </spacer> + </hbox> + </widget> <widget class="QLabel"> <property name="name"> <cstring>textLabel1_5</cstring> =================================================================== RCS file: /cvsroot/madman/madman2/ui/mainwin.cpp,v retrieving revision 1.55 diff -u -3 -p -r1.55 mainwin.cpp --- ui/mainwin.cpp 22 Aug 2004 12:00:15 -0000 1.55 +++ ui/mainwin.cpp 29 Sep 2004 00:32:18 -0000 @@ -1853,7 +1853,7 @@ void tMainWindow::showSongPopup() return; new tPassivePopup(substituteSongFields(ProgramBase.preferences().PassivePopupFormat, - current, true), 3000); + current, true), 3000, this, ProgramBase.preferences().PassivePopupLocation); } =================================================================== RCS file: /cvsroot/madman/madman2/ui/mainwin.cpp,v retrieving revision 1.55 diff -u -3 -p -r1.55 mainwin.cpp --- ui/mainwin.cpp 22 Aug 2004 12:00:15 -0000 1.55 +++ ui/mainwin.cpp 29 Sep 2004 00:32:18 -0000 @@ -1853,7 +1853,7 @@ void tMainWindow::showSongPopup() return; new tPassivePopup(substituteSongFields(ProgramBase.preferences().PassivePopupFormat, - current, true), 3000); + current, true), 3000, this, ProgramBase.preferences().PassivePopupLocation); } Index: ui/passive_popup.cpp =================================================================== RCS file: /cvsroot/madman/madman2/ui/passive_popup.cpp,v retrieving revision 1.7 diff -u -3 -p -r1.7 passive_popup.cpp --- ui/passive_popup.cpp 5 Jul 2004 20:56:30 -0000 1.7 +++ ui/passive_popup.cpp 29 Sep 2004 00:34:30 -0000 @@ -28,31 +28,32 @@ Foundation, Inc., 59 Temple Place, Suite #include <qapplication.h> #include "ui/passive_popup.h" - +#include "ui/mainwin.h" tPassivePopup *tPassivePopup::CurrentPopup = NULL; - - -tPassivePopup::tPassivePopup(const QString &text, unsigned msec) - : ShownMilliseconds(msec) +tPassivePopup::tPassivePopup(const QString &text, unsigned msec, tMainWindow *mw, int location ) + : ShownMilliseconds(msec), MainWindow(mw), Location(location), xPos(0), yPos(0), yEnd(0) { if (CurrentPopup) delete CurrentPopup; CurrentPopup = this; - QVBox *vbox = new QVBox(NULL, "passive_popup", Qt::WStyle_NoBorder | Qt::WX11BypassWM | Qt::WStyle_StaysOnTop); - Widget = vbox; - vbox->setFrameShape(QFrame::Panel); - vbox->setFrameShadow(QFrame::Raised); - vbox->setMargin(5); - vbox->setSpacing(9); - - QPushButton *button = new QPushButton(tr("Hide"), Widget); - connect(button, SIGNAL(clicked()), this, SLOT(deleteLater())); - + QHBox *box = new QHBox(NULL, "passive_popup", Qt::WStyle_NoBorder | Qt::WX11BypassWM | Qt::WStyle_StaysOnTop); + Widget = box; + box->setFrameShape(QFrame::Panel); + box->setFrameShadow(QFrame::Raised); + box->setMargin(5); + box->setSpacing(9); + + QPushButton *buttonBack = new QPushButton(tr("<"), Widget); + connect(buttonBack, SIGNAL(clicked()), this, SLOT(skipBack())); + + QPushButton *buttonHideLeft = new QPushButton(tr("Hide"), Widget); + connect(buttonHideLeft, SIGNAL(clicked()), this, SLOT(deleteLater())); + QLabel *label = new QLabel(text, Widget); QFont my_font = label->font(); if (my_font.pixelSize() < 0) @@ -62,16 +63,49 @@ tPassivePopup::tPassivePopup(const QStri my_font.setBold(true); label->setFont(my_font); label->setAlignment(Qt::AlignHCenter); + + QPushButton *buttonHideRight = new QPushButton(tr("Hide"), Widget); + connect(buttonHideRight, SIGNAL(clicked()), this, SLOT(deleteLater())); + + QPushButton *buttonNext = new QPushButton(tr(">"), Widget); + connect(buttonNext, SIGNAL(clicked()), this, SLOT(skipForward())); + QDesktopWidget *d = QApplication::desktop(); QSize sizehint = Widget->sizeHint(); - Widget->move(QPoint( - (d->width() - sizehint.width()) / 2, - sizehint.height())); + + // normalize Location setting + if (Location < 0 || Location > 5) + Location = 1; + + // calculate start and end positions for y + if ( Location <= 2 ) + { + yPos =- sizehint.height(); + yEnd = 0; + } + else + { + yPos = d->height() + sizehint.height(); + yEnd = d->height() - sizehint.height(); + } + + // calculate x position + if ( Location == 0 || Location == 3 ) + xPos = 0; // left + else if ( Location == 2 || Location == 5 ) //right + xPos = (d->width() - sizehint.width()); + else // center + xPos = (d->width() - sizehint.width()) / 2; + + + Widget->move(QPoint(xPos, yPos)); + StateMilliseconds = 0; TotalStateMilliseconds = 300; State = APPEARING; Widget->show(); - + connect(&MyTimer, SIGNAL(timeout()), this, SLOT(timer())); MyTimer.start(20, false); } @@ -90,9 +124,7 @@ tPassivePopup::~tPassivePopup() void tPassivePopup::timer() { - QDesktopWidget *d = QApplication::desktop(); - QSize sizehint = Widget->sizeHint(); - + StateMilliseconds += 10; if (StateMilliseconds > TotalStateMilliseconds) { @@ -100,8 +132,8 @@ void tPassivePopup::timer() switch (State) { case APPEARING: - State = SHOWING; - Widget->move(QPoint((d->width() - sizehint.width()) / 2, 0)); + State = SHOWING; + Widget->move(QPoint(xPos, yEnd)); TotalStateMilliseconds = ShownMilliseconds; break; case SHOWING: @@ -114,14 +146,14 @@ void tPassivePopup::timer() } } switch (State) - { + { case APPEARING: - Widget->move(QPoint((d->width() - sizehint.width()) / 2, - - sizehint.height() * (TotalStateMilliseconds-StateMilliseconds) / TotalStateMilliseconds)); + Widget->move(QPoint(xPos, + (yPos - yEnd) * (TotalStateMilliseconds-StateMilliseconds) / TotalStateMilliseconds + yEnd)); break; case DISAPPEARING: - Widget->move(QPoint((d->width() - sizehint.width()) / 2, - - sizehint.height() * StateMilliseconds / TotalStateMilliseconds)); + Widget->move(QPoint(xPos, + (yPos - yEnd) * StateMilliseconds / TotalStateMilliseconds + yEnd)); break; default: break; @@ -129,6 +161,17 @@ void tPassivePopup::timer() } +void tPassivePopup::skipForward() +{ + MainWindow->skipForward(); +} + +void tPassivePopup::skipBack() +{ + MainWindow->skipBack(); +} + + // EMACS-FORMAT-TAG Index: ui/prefs_dialog.cpp =================================================================== RCS file: /cvsroot/madman/madman2/ui/prefs_dialog.cpp,v retrieving revision 1.22 diff -u -3 -p -r1.22 prefs_dialog.cpp --- ui/prefs_dialog.cpp 5 Jul 2004 20:56:30 -0000 1.22 +++ ui/prefs_dialog.cpp 29 Sep 2004 00:35:07 -0000 @@ -559,6 +559,7 @@ pair<bool,bool> editPreferences(tMainWin GET_BOOL(MinimizeToSystemTray); GET_BOOL(EnablePassivePopupSongAnnouncements); + prefs.PassivePopupLocation = prefsdialog.comboLocation->currentItem(); prefs.BackupCount = prefsdialog.spinBackupCount->value(); GET_BOOL(HttpDaemonEnabled); Index: ui/prefs_dialog.cpp =================================================================== RCS file: /cvsroot/madman/madman2/ui/prefs_dialog.cpp,v retrieving revision 1.22 diff -u -3 -p -r1.22 prefs_dialog.cpp --- ui/prefs_dialog.cpp 5 Jul 2004 20:56:30 -0000 1.22 +++ ui/prefs_dialog.cpp 29 Sep 2004 00:35:07 -0000 @@ -559,6 +559,7 @@ pair<bool,bool> editPreferences(tMainWin GET_BOOL(MinimizeToSystemTray); GET_BOOL(EnablePassivePopupSongAnnouncements); + prefs.PassivePopupLocation = prefsdialog.comboLocation->currentItem(); prefs.BackupCount = prefsdialog.spinBackupCount->value(); GET_BOOL(HttpDaemonEnabled); Index: ui/prefs_dialog.cpp =================================================================== RCS file: /cvsroot/madman/madman2/ui/prefs_dialog.cpp,v retrieving revision 1.22 diff -u -3 -p -r1.22 prefs_dialog.cpp --- ui/prefs_dialog.cpp 5 Jul 2004 20:56:30 -0000 1.22 +++ ui/prefs_dialog.cpp 29 Sep 2004 00:35:07 -0000 @@ -559,6 +559,7 @@ pair<bool,bool> editPreferences(tMainWin GET_BOOL(MinimizeToSystemTray); GET_BOOL(EnablePassivePopupSongAnnouncements); + prefs.PassivePopupLocation = prefsdialog.comboLocation->currentItem(); prefs.BackupCount = prefsdialog.spinBackupCount->value(); GET_BOOL(HttpDaemonEnabled); =================================================================== That's all. Like last time, I'd be interested in any comments. Guido. |