summaryrefslogtreecommitdiffstats
path: root/noatun/modules/kjofol-skin/kjbutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'noatun/modules/kjofol-skin/kjbutton.cpp')
-rw-r--r--noatun/modules/kjofol-skin/kjbutton.cpp301
1 files changed, 301 insertions, 0 deletions
diff --git a/noatun/modules/kjofol-skin/kjbutton.cpp b/noatun/modules/kjofol-skin/kjbutton.cpp
new file mode 100644
index 00000000..403ea61e
--- /dev/null
+++ b/noatun/modules/kjofol-skin/kjbutton.cpp
@@ -0,0 +1,301 @@
+/***************************************************************************
+ kjbutton.cpp
+ --------------------------------------
+ Handles all ordinary Buttons like stop, play, pause, etc.
+ --------------------------------------
+ Maintainer: Stefan Gehn <[email protected]>
+
+ ***************************************************************************/
+
+#include "kjbutton.h"
+#include "kjbutton.moc"
+#include "kjloader.h"
+#include "kjprefs.h"
+
+#include <noatun/pref.h>
+#include <noatun/player.h>
+#include <noatun/vequalizer.h>
+
+#include <qcursor.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kpixmap.h>
+#include <kpixmapeffect.h>
+#include <kurl.h>
+#include <kfiledialog.h>
+#include <khelpmenu.h>
+#include <kpopupmenu.h>
+
+/*******************************************
+ * KJButton
+ *******************************************/
+
+KJButton::KJButton(const QStringList &i, KJLoader *parent)
+ : QObject(0), KJWidget(parent), mTitle(i[0]), mShowPressed(false)
+{
+// kdDebug(66666) << k_funcinfo << "new button: " << i[0].latin1() << endl;
+ mPushedPixmap = (i.count() >= 7);
+
+ // get the rectangle
+ int x, y, xs, ys;
+ x=i[1].toInt();
+ y=i[2].toInt();
+ xs=i[3].toInt()-x; // width
+ ys=i[4].toInt()-y; // height
+ setRect ( x, y, xs, ys );
+
+ QStringList temp = i;
+
+ // search for selected button-type
+ // can be either BMPx where x is a number representing one
+ // of the background-images
+ // or darken which means just darken the button on click
+ bool gotBack = false; // in case any of these keys is duplicated
+ for(QStringList::Iterator it = temp.begin(); it != temp.end(); ++it)
+ {
+ if((*it).contains("bmp"))
+ {
+ QString pressedTmp = backgroundPressed((*it));
+ if(!pressedTmp.isEmpty())
+ {
+ mPressed = parent->pixmap(pressedTmp);
+ gotBack = true;
+ }
+ }
+ else if((*it) == "darken")
+ {
+ // take background and darken the buttons rectangle
+ // FIXME: what KPixmapEffect causes the desired effect?
+ // intensity is the wrong one
+ KPixmap temp = parent->pixmap(parser()["backgroundimage"][1]);
+ mPressed = (QPixmap)KPixmapEffect::intensity ( temp, 1.2f );
+ gotBack = true;
+ }
+ if(gotBack)
+ break;
+ }
+
+ if(!gotBack)
+ {
+ kdDebug(66666) << k_funcinfo << "Couldn't find valid background for button '" <<
+ mTitle << "', dafulting to backgroundimage" << endl;
+ mPressed = parent->pixmap(parser()["backgroundimage"][1]);
+ }
+
+ // playlistbutton has to show if playlistwindow is open
+ // right after the button appears on screen
+ if (mTitle=="playlistbutton")
+ {
+ mShowPressed = napp->playlist()->listVisible();
+ connect( napp->player(), SIGNAL(playlistShown()), this, SLOT(slotPlaylistShown()) );
+ connect( napp->player(), SIGNAL(playlistHidden()), this, SLOT(slotPlaylistHidden()) );
+ }
+ else if ( mTitle=="equalizeroffbutton") // same goes for EQ buttons
+ {
+ mShowPressed = (!napp->vequalizer()->isEnabled());
+ connect( napp->vequalizer(), SIGNAL(enabled(bool)), SLOT(slotEqEnabled(bool)));
+ }
+ else if (mTitle=="equalizeronbutton")
+ {
+ mShowPressed = napp->vequalizer()->isEnabled();
+ connect( napp->vequalizer(), SIGNAL(enabled(bool)), SLOT(slotEqEnabled(bool)));
+ }
+}
+
+QString KJButton::tip()
+{
+ QString str;
+ if (mTitle=="closebutton")
+ str=i18n("Close");
+ else if (mTitle=="minimizebutton")
+ str=i18n("Minimize");
+ else if (mTitle=="aboutbutton")
+ str=i18n("About");
+ else if (mTitle=="stopbutton")
+ str=i18n("Stop");
+ else if (mTitle=="playbutton")
+ str=i18n("Play");
+ else if (mTitle=="pausebutton")
+ str=i18n("Pause");
+ else if (mTitle=="openfilebutton")
+ str=i18n("Open");
+ else if (mTitle=="playlistbutton")
+ str=i18n("Playlist");
+ else if (mTitle=="repeatbutton")
+ str=i18n("Loop");
+ else if (mTitle=="equalizerbutton")
+ str=i18n("Show Equalizer Window");
+ else if (mTitle=="equalizeronbutton")
+ str=i18n("Turn on Equalizer");
+ else if (mTitle=="equalizeroffbutton")
+ str=i18n("Turn off Equalizer");
+ else if (mTitle=="equalizerresetbutton")
+ str=i18n("Reset Equalizer");
+ else if (mTitle=="nextsongbutton")
+ str=i18n("Next");
+ else if (mTitle=="previoussongbutton")
+ str=i18n("Previous");
+ else if (mTitle=="forwardbutton")
+ str=i18n("Forward");
+ else if (mTitle=="rewindbutton")
+ str=i18n("Rewind");
+ else if (mTitle=="preferencesbutton")
+ str=i18n("K-Jöfol Preferences");
+ else if (mTitle=="dockmodebutton")
+ str=i18n("Switch to dockmode");
+ else if (mTitle=="undockmodebutton")
+ str=i18n("Return from dockmode");
+
+ return str;
+}
+
+void KJButton::paint(QPainter *, const QRect &)
+{
+ if (mShowPressed)
+ bitBlt(KJWidget::parent(), rect().topLeft(), &mPressed, rect(), Qt::CopyROP);
+}
+
+bool KJButton::mousePress(const QPoint &)
+{
+ bitBlt(KJWidget::parent(), rect().topLeft(), &mPressed, rect(), Qt::CopyROP);
+ return true;
+}
+
+void KJButton::showPressed(bool b)
+{
+ mShowPressed = b;
+ if ( mShowPressed )
+ repaint(true); // repaint with selected image
+ else
+ repaint(false); // repaint with default image (player-background)
+}
+
+void KJButton::slotPlaylistShown(void)
+{
+// kdDebug(66666) << "KJButton::slotPlaylistShown()" << endl;
+ showPressed(true);
+}
+
+void KJButton::slotPlaylistHidden(void)
+{
+// kdDebug(66666) << "KJButton::slotPlaylistHidden()" << endl;
+ showPressed(false);
+}
+
+void KJButton::slotEqEnabled(bool on)
+{
+// kdDebug(66666) << "KJButton::slotEqEnabled(" << on << ") for " << mTitle << endl;
+ if (mTitle=="equalizeronbutton")
+ showPressed(on);
+ else if (mTitle=="equalizeroffbutton")
+ showPressed(!on);
+}
+
+void KJButton::mouseRelease(const QPoint &, bool in)
+{
+ // repaint with default image (player-background)
+ repaint(false);
+
+ if (!in) // only do something if users is still inside the button
+ return;
+
+ // now, find what widget I am and do the proper action
+ if (mTitle=="closebutton")
+ KJWidget::parent()->close();
+ else if (mTitle=="minimizebutton")
+ KJWidget::parent()->minimize();
+ else if (mTitle=="aboutbutton")
+ KJWidget::parent()->helpMenu()->aboutApplication();
+ else if (mTitle=="stopbutton")
+ napp->player()->stop();
+ else if (mTitle=="playbutton")
+ napp->player()->play();
+ else if (mTitle=="pausebutton")
+ napp->player()->playpause();
+ else if (mTitle=="openfilebutton")
+ {
+ KURL file(KFileDialog::getOpenURL(0, napp->mimeTypes(), KJWidget::parent(), i18n("Select File to Play")));
+ if (file.isValid())
+ napp->player()->openFile(file);
+ }
+ else if (mTitle=="playlistbutton")
+ napp->player()->toggleListView();
+ else if (mTitle=="repeatbutton")
+ {
+ KPopupMenu *loopMenu = new KPopupMenu(KJWidget::parent(),"loopMenu");
+ int selectedItem = 0;
+
+ loopMenu->setCheckable(true);
+ loopMenu->insertTitle(i18n("Loop Style"));
+ loopMenu->insertItem(i18n("&None"), static_cast<int>(Player::None));
+ loopMenu->insertItem(i18n("&Song"), static_cast<int>(Player::Song));
+ loopMenu->insertItem(i18n("&Playlist"), static_cast<int>(Player::Playlist));
+ loopMenu->insertItem(i18n("&Random"), static_cast<int>(Player::Random));
+
+ loopMenu->setItemChecked(static_cast<int>(napp->player()->loopStyle()), true); // select current loopstyle in menu
+ selectedItem = loopMenu->exec(QCursor::pos());
+ if (selectedItem != -1)
+ napp->player()->loop(selectedItem); // set new loopstyle
+
+ delete loopMenu;
+
+/*
+ if ( napp->player()->loopStyle() == 1)
+ {
+// kdDebug(66666) << "loop song is OFF" << endl;
+
+// bah, xlib.h already defined None
+#undef None
+ napp->player()->loop( Player::None );
+ showPressed( false );
+ }
+ else
+ {
+// kdDebug(66666) << "loop song is ON" << endl;
+ napp->player()->loop( Player::Song );
+ showPressed ( true );
+ }
+*/
+ }
+ else if (mTitle=="equalizerbutton")
+ {
+ napp->equalizerView();
+ }
+ else if (mTitle=="equalizeronbutton")
+ {
+ if (!napp->vequalizer()->isEnabled())
+ napp->vequalizer()->enable();
+ }
+ else if (mTitle=="equalizeroffbutton")
+ {
+ if (napp->vequalizer()->isEnabled())
+ napp->vequalizer()->disable();
+ }
+ else if (mTitle=="equalizerresetbutton")
+ {
+ for (int band=0; band<napp->vequalizer()->bands(); band++)
+ napp->vequalizer()->band(band).setLevel(0);
+ /*
+ // That preset resets to 6 bands, that's not what we want
+ VPreset set = napp->vequalizer()->presetByName("Zero");
+ if (set) // tests if that preset is valid
+ set.load();
+ */
+ }
+ else if (mTitle=="nextsongbutton")
+ napp->player()->forward();
+ else if (mTitle=="previoussongbutton")
+ napp->player()->back();
+ else if (mTitle=="forwardbutton")
+ napp->player()->skipTo(napp->player()->getTime()+10000); // TODO: make +- 10 secs configurable
+ else if (mTitle=="rewindbutton")
+ napp->player()->skipTo(napp->player()->getTime()-10000);
+ else if (mTitle=="preferencesbutton")
+ napp->preferencesBox()->show(static_cast<CModule *>(KJWidget::parent()->prefs()));
+ else if (mTitle=="dockmodebutton")
+ KJWidget::parent()->switchToDockmode();
+ else if (mTitle=="undockmodebutton")
+ KJWidget::parent()->returnFromDockmode();
+ else
+ kdDebug(66666) << "unknown buttontype: " << mTitle.latin1() << endl;
+}