diff options
Diffstat (limited to 'noatun/modules/excellent')
-rw-r--r-- | noatun/modules/excellent/Makefile.am | 18 | ||||
-rw-r--r-- | noatun/modules/excellent/excellent.plugin | 120 | ||||
-rw-r--r-- | noatun/modules/excellent/excellentui.rc | 45 | ||||
-rw-r--r-- | noatun/modules/excellent/noatunui.cpp | 32 | ||||
-rw-r--r-- | noatun/modules/excellent/userinterface.cpp | 394 | ||||
-rw-r--r-- | noatun/modules/excellent/userinterface.h | 101 |
6 files changed, 710 insertions, 0 deletions
diff --git a/noatun/modules/excellent/Makefile.am b/noatun/modules/excellent/Makefile.am new file mode 100644 index 00000000..a2558676 --- /dev/null +++ b/noatun/modules/excellent/Makefile.am @@ -0,0 +1,18 @@ +INCLUDES= -I$(top_srcdir)/noatun/library $(all_includes) +kde_module_LTLIBRARIES = noatun_excellent.la + +noatun_excellent_la_SOURCES = noatunui.cpp\ + userinterface.cpp + +noatun_excellent_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +noatun_excellent_la_LIBADD = $(LIB_KFILE) \ + $(top_builddir)/noatun/library/libnoatun.la \ + $(top_builddir)/noatun/library/libnoatuncontrols.la \ + -lqtmcop -lkmedia2_idl -lsoundserver_idl + +noatun_excellent_la_METASOURCES = AUTO + +noinst_HEADERS = userinterface.h + +noatun_modules_excellent_DATA = excellent.plugin excellentui.rc +noatun_modules_excellentdir = $(kde_datadir)/noatun diff --git a/noatun/modules/excellent/excellent.plugin b/noatun/modules/excellent/excellent.plugin new file mode 100644 index 00000000..89f747c0 --- /dev/null +++ b/noatun/modules/excellent/excellent.plugin @@ -0,0 +1,120 @@ +Filename=noatun_excellent.la +Author=Neil Stevens +Site=http://noatun.kde.org/plugins/excellent/ +Email=neil@qualityassistant.com +Type=userinterface +License=X11-like +Name=Excellent +Name[af]=Uitstekende +Name[ar]=ممتاز +Name[az]=Mükəmməl +Name[ca]=Excel·lent +Name[cs]=Vynikající +Name[cy]=Ardderchog +Name[de]=Hervorragend +Name[el]=Έξοχο +Name[eo]=Brila +Name[es]=Excelente +Name[et]=Suurepärane +Name[eu]=Aparta +Name[fa]=عالی +Name[fi]=Erinomainen +Name[ga]=Sármhaith +Name[gl]=Excelente +Name[he]=מעולה +Name[hi]=एक्सेलेंट +Name[hr]=Odlično +Name[is]=Frábært +Name[it]=Eccellente +Name[ja]=エクセレント +Name[km]=ល្អឥតខ្ចោះ +Name[lt]=Puikus +Name[lv]=Lielisks +Name[mk]=Одличен +Name[mt]=Eċċellenti +Name[nb]=Fantastisk +Name[nds]=Goot +Name[ne]=दक्ष +Name[nn]=Fantastisk +Name[pa]=ਸਰਵੋਤਮ +Name[pl]=Doskonały +Name[pt]=Excelente +Name[pt_BR]=Excelente +Name[ro]=Excelent +Name[ru]=Превосходный +Name[sk]=Fantastický +Name[sv]=Utmärkt +Name[ta]=அற்புதம் +Name[tg]=Олиҷаноб +Name[th]=ยอดเยี่ยม +Name[tr]=Mükemmel +Name[uk]=Чудовий +Name[ven]=Zwavhudi +Name[xh]=Hle kwaphela +Name[zh_CN]=优秀的 +Name[zh_HK]=極佳的 +Name[zh_TW]=完美的 +Name[zu]=Kuhle kakhulu +Comment=A very ordinary, and therefore very usable, interface +Comment[af]='n baie gewone, en daarom baie bruikbaar, koppelvlak +Comment[ar]=واجهة استخدام عادية ، و بالتالي ممتازة +Comment[az]=Olduqca bəsit və istifadəli bir axtar üz +Comment[bg]=Обикновен и поради това много полезен интерфейс +Comment[bs]=Vrlo uobičajen i zato vrlo upotrebljiv interfejs +Comment[ca]=Una interfície molt normal, i per tant, molt usable +Comment[cs]=Velmi obvyklé, and proto velmi použitelné rozhraní +Comment[cy]=Rhyngwyneb Cyffredin iawn, ac felly defnyddiol iawn +Comment[da]=En meget ordinær, og derfor meget nyttig, grænseflade +Comment[de]=Eine ganz normale und folglich sehr brauchbare Oberfläche +Comment[el]=Ένα πολύ συνηθισμένο, και έτσι πολύ εύχρηστο περιβάλλον +Comment[eo]=Ordinara kaj do tre uzebla interfaco +Comment[es]=Una interfaz muy común y por tanto muy fácil de usar +Comment[et]=Väga tavaline ja lihtsasti kasutatav kasutajaliides +Comment[eu]=Interfaze arrunta eta oso erabilgarria +Comment[fa]=یک واسط معمولی، و بنابراین بسیار مفید +Comment[fi]=Hyvin tavallinen ja käyttökelpoinen käyttöliittymä +Comment[fr]=Une interface très ordinaire et donc très utilisable +Comment[ga]=Comhéadan an-choitianta, agus dá bharr sin, an-inúsáidte +Comment[gl]=Unha interface moi usual e polo tanto moi usábel +Comment[he]=ממשק מאוד פשוט, ועל כן מאוד שימושי +Comment[hi]=एक बहुत साधारण, अतः बहुत उपयोगी इंटरफेस +Comment[hr]=Vrlo obično, i prema tome vrlo upotrebljivo, sučelje +Comment[hu]=Egy jól ismert, ezért jól használható felület +Comment[is]=Mjög venjulegt og notanlegt viðmót +Comment[it]=Un'interfaccia molto ordinaria e molto usabile +Comment[ja]=非常にありふれているが、だからこそ使いやすいインターフェース +Comment[kk]=Ең кәдімгі, сондықтан жиі қолданылатын интерфейс +Comment[km]=ចំណុចប្រទាក់សាមញ្ញបំផុត ហើយក៏ងាយស្រួលប្រើដែរ +Comment[ko]=아주 평범하고 쓸만한 인터페이스 +Comment[lt]=Labai paprasta ir dėlto labai naudinga sąsaja +Comment[lv]=Ļoti vienkārša, un tādēļ ļoti izmantojama, starpseja +Comment[mk]=Мошне обичен, и според тоа мошне корисен интерфејс +Comment[ms]=Antaramuka yang sangat biasa tetapi berguna +Comment[mt]=Interfaċċja ordijarja ħafna u għalhekk utli ħafna +Comment[nb]=Et svært vanlig og brukervennlig grensesnitt +Comment[nds]=En bannig normaal un dorüm bannig eenfach to bruken Böversiet +Comment[ne]=साधारण भएकोले धेरै उपयोगि इन्टरफेस +Comment[nl]=Een heel gewone, en daarom erg bruikbare, interface +Comment[nn]=Eit svært normalt og difor lettbruka grensesnitt +Comment[pl]=Bardzo zwyczajny, ale przez to bardzo użyteczny motyw +Comment[pt]=Uma interface básica e, por isso, muito fácil de usar +Comment[pt_BR]=Uma interface bem ordinária e portanto muito utilizável +Comment[ro]=O interfaţă foarte simplă şi foarte utilă +Comment[ru]=Самый обычный, а потому и очень полезный интерфейс +Comment[se]=Hui dábálaš ja dannege geavahahtti lakta +Comment[sk]=Veľmi obyčajné, a preto použiteľné, rozhranie +Comment[sl]=Zelo običajen in zato zelo uporaben vmesnik +Comment[sr]=Веома обичан, стога и веома лак за коришћење, интерфејс +Comment[sr@Latn]=Veoma običan, stoga i veoma lak za korišćenje, interfejs +Comment[sv]=Ett väldigt vanligt och därför väldigt användbart gränssnitt +Comment[ta]=மிக எளிய, பயனுள்ள இடைமுகம் +Comment[tg]=Интерфейси хеле содда ва бинобар бисёр фоиданок +Comment[th]=ส่วนติดต่อแบบง่ายๆ และด้วยเหตุนั้นก็เลยมีประโยชน์อย่างมาก +Comment[tr]=Oldukça basit ve kullanışlı bir arayüz +Comment[uk]=Дуже звичний, і тому дуже зручний, інтерфейс +Comment[ven]=Zwithu zwazwo, zwo ralo zwa vhuthogwa, interface +Comment[xh]=Eqheleke kakhulu, neluncedo kakhulu, injongano +Comment[zh_CN]=非常普通,因而也非常有用的接口 +Comment[zh_HK]=非常普通但是很實用的介面 +Comment[zh_TW]=非常普通但是很實用的介面 +Comment[zu]=Ejwayelekile ngakhoke esebenzisekayo,uxhumano olubhekeneyo diff --git a/noatun/modules/excellent/excellentui.rc b/noatun/modules/excellent/excellentui.rc new file mode 100644 index 00000000..f9c43c70 --- /dev/null +++ b/noatun/modules/excellent/excellentui.rc @@ -0,0 +1,45 @@ +<!DOCTYPE kpartgui> +<!-- +vim: syntax=xml +--> +<kpartgui name="noatunexcellent" version="4"> +<MenuBar> + <Menu name="file" noMerge="1"><text>&File</text> + <Action name="file_open"/> + <Separator lineSeparator="true"/> + <Action name="file_quit"/> + </Menu> + <Menu name="go_music" noMerge="1"><text>&Go</text> + <Action name="back"/> + <Action name="stop"/> + <Action name="play"/> + <Action name="pause"/> + <Action name="forward"/> + </Menu> + <Menu name="settings" noMerge="1"><text>&Settings</text> + <Merge name="StandardToolBarMenuHandler" /> + <Action name="options_show_toolbar"/> + <Action name="options_show_menubar"/> + <Action name="show_playlist"/> + <Action name="show_volumecontrol"/> + <Separator lineSeparator="true"/> + <Action name="effects"/> + <Action name="equalizer"/> + <Action name="loop_style"/> + <Separator lineSeparator="true"/> + <Action name="options_configure"/> + </Menu> +</MenuBar> +<Toolbar name="main"><text>Main Toolbar</text> + <Action name="back"/> + <Action name="stop"/> + <Action name="play"/> + <Action name="pause"/> + <Action name="forward"/> + <Separator lineSeparator="true"/> + <Action name="file_open"/> + <Action name="show_playlist"/> + <Separator lineSeparator="true"/> + <Action name="loop_style"/> +</Toolbar> +</kpartgui> diff --git a/noatun/modules/excellent/noatunui.cpp b/noatun/modules/excellent/noatunui.cpp new file mode 100644 index 00000000..a103268d --- /dev/null +++ b/noatun/modules/excellent/noatunui.cpp @@ -0,0 +1,32 @@ +// noatunui.cpp +// +// Copyright (C) 2000 Neil Stevens <multivac@fcmail.com> +// Copyright (C) 1999 Charles Samuels <charles@kde.org> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Except as contained in this notice, the name(s) of the author(s) shall not be +// used in advertising or otherwise to promote the sale, use or other dealings +// in this Software without prior written authorization from the author(s). + +#include "userinterface.h" + +extern "C" KDE_EXPORT Plugin *create_plugin() +{ + return new Excellent(); +} diff --git a/noatun/modules/excellent/userinterface.cpp b/noatun/modules/excellent/userinterface.cpp new file mode 100644 index 00000000..7f218e98 --- /dev/null +++ b/noatun/modules/excellent/userinterface.cpp @@ -0,0 +1,394 @@ +// userinterface.cpp +// +// Copyright (C) 2001 Neil Stevens <neil@qualityassistant.com> +// Copyright (C) 1999 Charles Samuels <charles@kde.org> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Except as contained in this notice, the name(s) of the author(s) shall not be +// used in advertising or otherwise to promote the sale, use or other dealings +// in this Software without prior written authorization from the author(s). + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <noatun/effects.h> +#include <noatun/app.h> +#include <noatun/controls.h> +#include <noatun/pref.h> +#include <noatun/player.h> + +#include "userinterface.h" + +#include <kbuttonbox.h> +#include <kconfig.h> +#include <kfiledialog.h> +#include <kglobal.h> +#include <kiconloader.h> +#include <klocale.h> +#include <kmenubar.h> +#include <kmessagebox.h> +#include <kpixmapeffect.h> +#include <kpopupmenu.h> +#include <kstatusbar.h> +#include <kstdaction.h> +#include <kwin.h> +#include <kurldrag.h> + +#include <qbitmap.h> +#include <qdragobject.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qobjectlist.h> +#include <qobjectdict.h> +#include <qpushbutton.h> +#include <qtooltip.h> +#include <qvbox.h> + +Excellent::Excellent() + : KMainWindow(0, "NoatunExcellent") + , UserInterface() +{ + setAcceptDrops(true); + + KStdAction::quit(napp, SLOT(quit()), actionCollection()); + KStdAction::open(napp, SLOT(fileOpen()), actionCollection()); + setStandardToolBarMenuEnabled(true); + + menubarAction = KStdAction::showMenubar(this, SLOT(showMenubar()), actionCollection()); + KStdAction::preferences(napp, SLOT(preferences()), actionCollection()); + + // buttons + NoatunStdAction::back(actionCollection(), "back"); + NoatunStdAction::stop(actionCollection(), "stop"); + NoatunStdAction::play(actionCollection(), "play"); + NoatunStdAction::pause(actionCollection(), "pause"); + NoatunStdAction::forward(actionCollection(), "forward"); + NoatunStdAction::playlist(actionCollection(), "show_playlist"); + + volumeAction = new KToggleAction(i18n("Show &Volume Control"), 0, this, SLOT(showVolumeControl()), actionCollection(), "show_volumecontrol"); + volumeAction->setCheckedState(i18n("Hide &Volume Control")); + NoatunStdAction::effects(actionCollection(), "effects"); + NoatunStdAction::equalizer(actionCollection(), "equalizer"); + + NoatunStdAction::loop(actionCollection(), "loop_style"); + + createGUI("excellentui.rc"); + + napp->pluginActionMenu()->plug(menuBar(),3); + toolBar("mainToolBar")->hide(); + + // Who needs Qt Designer? + mainFrame = new QHBox(this); + mainFrame->setSpacing(KDialog::spacingHint()); + mainFrame->setMargin(0); + slider = new L33tSlider(0, 1000, 10, 0, L33tSlider::Horizontal, mainFrame); + slider->setTickmarks(QSlider::NoMarks); + + elapsed = new QLabel(mainFrame); + QFont labelFont = elapsed->font(); + labelFont.setPointSize(24); + labelFont.setBold(true); + QFontMetrics labelFontMetrics = labelFont; + elapsed->setFont(labelFont); + elapsed->setAlignment(AlignCenter | AlignVCenter | ExpandTabs); + elapsed->setText("--:--"); + elapsed->setFixedHeight(labelFontMetrics.height()); + elapsed->setMinimumWidth(elapsed->sizeHint().width()); + + // Doing this makes the slider the same heigh as the font. This is just plain wrong... + //slider->setFixedHeight(labelFontMetrics.height()); + + setCentralWidget(mainFrame); + + total = new QLabel(statusBar()); + labelFont = total->font(); + labelFont.setBold(true); + total->setFont(labelFont); + total->setAlignment(AlignCenter | AlignVCenter | ExpandTabs); + total->setText("--:--"); + total->setMinimumWidth(total->sizeHint().width()); + total->setText(""); + + statusBar()->addWidget(total, 0, true); + statusBar()->show(); + + connect( napp, SIGNAL(hideYourself()), this, SLOT(hide()) ); + connect( napp, SIGNAL(showYourself()), this, SLOT(show()) ); + + connect(napp->player(), SIGNAL(playing()), this, SLOT(slotPlaying())); + connect(napp->player(), SIGNAL(stopped()), this, SLOT(slotStopped())); + connect(napp->player(), SIGNAL(paused()), this, SLOT(slotPaused())); + napp->player()->handleButtons(); + + connect(napp->player(), SIGNAL(timeout()), this, SLOT(slotTimeout())); + connect(napp->player(), SIGNAL(loopTypeChange(int)), this, SLOT(slotLoopTypeChanged(int))); + + /* This skipToWrapper is needed to pass milliseconds to Player() as everybody + * below the GUI is based on milliseconds instead of some unprecise thingy + * like seconds or mille */ + connect(slider, SIGNAL(userChanged(int)), this, SLOT(skipToWrapper(int))); + connect(this, SIGNAL(skipTo(int)), napp->player(), SLOT(skipTo(int))); + + connect(slider, SIGNAL(sliderMoved(int)), SLOT(sliderMoved(int))); + + setCaption("Noatun"); + setIcon(SmallIcon("noatun")); + //slotLoopTypeChanged(Player::None); + changeStatusbar(); + handleLengthString("--:--/--:--"); + + setMinimumWidth(250); + resize(300, 75); + + KConfig &config = *KGlobal::config(); + + toolBar("main")->applySettings(&config, "Excellent main"); + + config.setGroup("excellent"); + + volumeSlider = 0; + volumeAction->setChecked( config.readBoolEntry("volumeShown", false) ); + showVolumeControl(); + + menubarAction->setChecked( config.readBoolEntry("menuShown", true) ); + showMenubar(); + + applyMainWindowSettings(&config, "excellent"); + + switch((NET::MappingState)config.readNumEntry("mappingState", (int)NET::Visible)) + { + case NET::Visible: + showNormal(); + break; + case NET::Withdrawn: + if (napp->libraryLoader()->isLoaded("systray.plugin")) + hide(); + break; + case NET::Iconic: + showMinimized(); + break; + } + + for (QPtrListIterator<QObject> i(*children()); i.current(); ++i) + (*i)->installEventFilter(this); +} + +Excellent::~Excellent() +{ + KConfig &config = *KGlobal::config(); + saveMainWindowSettings(&config, "excellent"); + toolBar("main")->saveSettings(&config, "Excellent main"); + config.setGroup("excellent"); + config.writeEntry("volumeShown", volumeAction->isChecked()); + config.writeEntry("menuShown", menubarAction->isChecked()); + config.writeEntry("width", width()); + config.writeEntry("height", height()); + config.sync(); +} + +void Excellent::showEvent(QShowEvent *e) +{ + KConfig *config = KGlobal::config(); + config->setGroup("excellent"); + config->writeEntry("mappingState", NET::Visible); + config->sync(); + + KMainWindow::showEvent(e); +} + +void Excellent::hideEvent(QHideEvent *e) +{ + KConfig *config = KGlobal::config(); + config->setGroup("excellent"); + config->writeEntry("mappingState", NET::Withdrawn); + config->sync(); + + KMainWindow::hideEvent(e); +} + +void Excellent::closeEvent(QCloseEvent *) +{ + unload(); +} + +void Excellent::dragEnterEvent(QDragEnterEvent *event) +{ + // accept uri drops only + event->accept(KURLDrag::canDecode(event)); +} + +void Excellent::dropEvent(QDropEvent *event) +{ + KURL::List uri; + if (KURLDrag::decode(event, uri)) + { + for (KURL::List::Iterator i = uri.begin(); i != uri.end(); ++i) + napp->player()->openFile(*i, false); + } +} + +bool Excellent::eventFilter(QObject *o, QEvent *e) +{ + if (e->type() == QEvent::Wheel) + { + wheelEvent(static_cast<QWheelEvent*>(e)); + return true; + } + return QWidget::eventFilter(o, e); +} + +void Excellent::wheelEvent(QWheelEvent *e) +{ + int delta=e->delta(); + napp->player()->setVolume(napp->player()->volume() + delta/120*2); +} + +void Excellent::slotPlaying() +{ + slider->setEnabled(true); + changeStatusbar(); +} + +void Excellent::slotStopped() +{ + slider->setEnabled(false); + if(!napp->player()->current()) return; + changeStatusbar(); + slider->setValue(0); + handleLengthString("--:--/--:--"); +} + +void Excellent::slotPaused() +{ + slider->setEnabled(true); + changeStatusbar(); +} + +void Excellent::slotTimeout() +{ + if(volumeSlider) volumeSlider->setValue(100 - napp->player()->volume()); + + if (!slider->currentlyPressed()) + handleLengthString(napp->player()->lengthString()); + + if(!napp->player()->current()) return; + if(slider->currentlyPressed()) return; + + slider->setRange(0, (int)napp->player()->getLength() / 1000 ); + slider->setValue((int)napp->player()->getTime() / 1000 ); + + changeStatusbar(); +} + +void Excellent::sliderMoved(int seconds) +{ + if(napp->player()->current()) + handleLengthString(napp->player()->lengthString(seconds * 1000)); +} + +void Excellent::skipToWrapper(int second) // wrap int to int _and_ seconds to mseconds +{ + emit skipTo((int)(second*1000)); +} + +void Excellent::slotLoopTypeChanged(int type) +{ + static const int time = 2000; + switch (type) + { + case Player::None: + statusBar()->message(i18n("No looping"), time); + break; + case Player::Song: + statusBar()->message(i18n("Song looping"), time); + break; + case Player::Playlist: + statusBar()->message(i18n("Playlist looping"), time); + break; + case Player::Random: + statusBar()->message(i18n("Random play"), time); + } +} + +void Excellent::showMenubar(void) +{ + if(menubarAction->isChecked()) + { + menuBar()->show(); + } + else + { + KMessageBox::information(this, i18n("<qt>Press %1 to show the menubar.</qt>").arg(menubarAction->shortcut().toString()), QString::null, "Hide Menu warning"); + menuBar()->hide(); + } +} + +void Excellent::showVolumeControl(void) +{ + if(volumeAction->isChecked()) + growVolumeControl(); + else + shrinkVolumeControl(); +} + +void Excellent::changeStatusbar(void) +{ + if(!napp->player()->current().isNull()) + statusBar()->message(napp->player()->current().title()); +} + +void Excellent::handleLengthString(const QString &text) +{ + if(text.right(5) == "00:00" && text.left(5) == "00:00") + { + elapsed->setText("--:--"); + total->setText("--:--"); + } + else + { + // Split the length string in to "current" and "elapsed" + QStringList tokens = QStringList::split("/", text); + + elapsed->setText(tokens[0]); + total->setText(tokens[1]); + } +} + +void Excellent::growVolumeControl(void) +{ + volumeSlider = new L33tSlider(0, 100, 10, 0, Vertical, mainFrame); + volumeSlider->setValue(100 - napp->player()->volume()); + volumeSlider->show(); + connect(volumeSlider, SIGNAL(sliderMoved(int)), SLOT(changeVolume(int))); + connect(volumeSlider, SIGNAL(userChanged(int)), SLOT(changeVolume(int))); +} + +void Excellent::shrinkVolumeControl(void) +{ + delete volumeSlider; + volumeSlider = 0; +} + +void Excellent::changeVolume(int slider) +{ + napp->player()->setVolume(100 - slider); +} + +#include "userinterface.moc" diff --git a/noatun/modules/excellent/userinterface.h b/noatun/modules/excellent/userinterface.h new file mode 100644 index 00000000..588db6e4 --- /dev/null +++ b/noatun/modules/excellent/userinterface.h @@ -0,0 +1,101 @@ +// userinterface.h +// +// Copyright (C) 2000, 2001 Neil Stevens <multivac@fcmail.com> +// Copyright (C) 1999 Charles Samuels <charles@kde.org> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Except as contained in this notice, the name(s) of the author(s) shall not be +// used in advertising or otherwise to promote the sale, use or other dealings +// in this Software without prior written authorization from the author(s). + +#ifndef USERINTERFACE_H +#define USERINTERFACE_H + +#include <noatun/plugin.h> +#include <noatun/app.h> +#include <noatun/stdaction.h> +#include <kmainwindow.h> + +class KAction; +class KPopupMenu; +class KStatusBar; +class Player; +class QHBox; +class QLabel; +class QSlider; +class L33tSlider; +class KToggleAction; + +/** + * @short Main window class + * @author Neil Stevens <multivac@fcmail.com> + * @author Charles Samuels <charles@kde.org> + */ +class Excellent : public KMainWindow, public UserInterface +{ +Q_OBJECT + +public: + Excellent(); + virtual ~Excellent(); + void load(const QString& url); + +protected: + virtual void showEvent(QShowEvent *); + virtual void hideEvent(QHideEvent *); + virtual void closeEvent(QCloseEvent *); + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dropEvent(QDropEvent *); + void wheelEvent(QWheelEvent *e); + bool eventFilter(QObject *o, QEvent *e); + +public slots: + void slotPlaying(); + void slotStopped(); + void slotPaused(); + + void slotTimeout(); + void sliderMoved(int seconds); + void slotLoopTypeChanged(int type); + void skipToWrapper(int second); + +signals: + // emitted by skipToWrapper() + void skipTo(int); + +private slots: + void showVolumeControl(void); + void showMenubar(void); + void changeStatusbar(void); + void changeVolume(int); + + void handleLengthString(const QString &text); + +private: + void growVolumeControl(void); + void shrinkVolumeControl(void); + + QHBox *mainFrame; + + KToggleAction *volumeAction, *menubarAction; + L33tSlider *volumeSlider, *slider; + QLabel *elapsed, *total; +}; + +#endif |