summaryrefslogtreecommitdiffstats
path: root/kmix/viewbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmix/viewbase.cpp')
-rw-r--r--kmix/viewbase.cpp187
1 files changed, 187 insertions, 0 deletions
diff --git a/kmix/viewbase.cpp b/kmix/viewbase.cpp
new file mode 100644
index 00000000..af4a9aa5
--- /dev/null
+++ b/kmix/viewbase.cpp
@@ -0,0 +1,187 @@
+/*
+ * KMix -- KDE's full featured mini mixer
+ *
+ *
+ * Copyright (C) 1996-2004 Christian Esken <esken@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "viewbase.h"
+
+// QT
+#include <qlabel.h>
+#include <qcursor.h>
+
+// KDE
+#include <kaction.h>
+#include <kpopupmenu.h>
+#include <klocale.h>
+#include <kiconloader.h>
+
+// KMix
+#include "dialogviewconfiguration.h"
+#include "mixdevicewidget.h"
+#include "mixer.h"
+
+
+ViewBase::ViewBase(QWidget* parent, const char* name, const QString & caption, Mixer* mixer, WFlags f, ViewBase::ViewFlags vflags)
+ : QWidget(parent, name, f), _vflags(vflags), _caption(caption)
+{
+ _mixer = mixer;
+ _mixSet = new MixSet();
+
+ /* Can't use the following construct:
+ setMixSet( & mixer->getMixSet());
+ C++ does not use overloaded methods like getMixSet() as long as the constructor has not completed :-(((
+ */
+ _actions = new KActionCollection( this );
+
+ // Plug in the "showMenubar" action, if the caller wants it. Typically this is only neccesary for views in the KMix main window.
+ if ( vflags & ViewBase::HasMenuBar ) {
+ KToggleAction *m = static_cast<KToggleAction*>(KStdAction::showMenubar( this, SLOT(toggleMenuBarSlot()), _actions ));
+ if ( vflags & ViewBase::MenuBarVisible ) {
+ m->setChecked(true);
+ }
+ else {
+ m->setChecked(false);
+ }
+ }
+ new KAction(i18n("&Channels"), 0, this, SLOT(configureView()), _actions, "toggle_channels");
+ connect ( _mixer, SIGNAL(newVolumeLevels()), this, SLOT(refreshVolumeLevels()) );
+}
+
+ViewBase::~ViewBase() {
+ delete _mixSet;
+}
+
+void ViewBase::init() {
+ const MixSet& mixset = _mixer->getMixSet();
+ setMixSet( const_cast<MixSet*>(&mixset)); // const_cast<>
+}
+
+void ViewBase::setMixSet(MixSet *)
+{
+ // do nothing. Subclasses can do something if they feel like it
+}
+
+/**
+ * Dummy implementation for add().
+ */
+QWidget* ViewBase::add(MixDevice* mdw) {
+ QWidget* label = new QLabel( mdw->name(), this, mdw->name().latin1());
+ label->move(0, mdw->num()*12);
+ return label;
+}
+
+void ViewBase::configurationUpdate() {
+}
+
+/**
+ * Create all widgets.
+ * This is a loop over all supported devices of the corresponding view.
+ * On each device add() is called - the derived class must implement add() for creating and placing
+ * the real MixDeviceWidget.
+ * The added MixDeviceWidget is appended to the _mdws list.
+ */
+void ViewBase::createDeviceWidgets()
+{
+ // create devices
+ MixDevice *mixDevice;
+ for ( mixDevice = _mixSet->first(); mixDevice != 0; mixDevice = _mixSet->next())
+ {
+ QWidget* mdw = add(mixDevice);
+ _mdws.append(mdw);
+ }
+ // allow view to "polish" itself
+ constructionFinished();
+}
+
+// ---------- Popup stuff START ---------------------
+void ViewBase::mousePressEvent( QMouseEvent *e )
+{
+ if ( e->button()==RightButton )
+ showContextMenu();
+}
+
+/**
+ * Return a popup menu. This contains basic entries.
+ * More can be added by the caller.
+ */
+KPopupMenu* ViewBase::getPopup()
+{
+ popupReset();
+ return _popMenu;
+}
+
+void ViewBase::popupReset()
+{
+ KAction *a;
+
+ _popMenu = new KPopupMenu( this );
+ _popMenu->insertTitle( SmallIcon( "kmix" ), i18n("Device Settings") );
+
+ a = _actions->action( "toggle_channels" );
+ if ( a ) a->plug( _popMenu );
+
+ a = _actions->action( "options_show_menubar" );
+ if ( a ) a->plug( _popMenu );
+}
+
+
+/**
+ This will only get executed, when the user has removed all items from the view.
+ Don't remove this method, because then the user cannot get a menu for getting his
+ channels back
+*/
+void ViewBase::showContextMenu()
+{
+ //kdDebug(67100) << "ViewBase::showContextMenu()" << endl;
+ popupReset();
+
+ QPoint pos = QCursor::pos();
+ _popMenu->popup( pos );
+}
+
+
+void ViewBase::refreshVolumeLevels()
+{
+ // is virtual
+}
+
+Mixer* ViewBase::getMixer() {
+ return _mixer;
+}
+
+/**
+ * Open the View configuration dialog. The user can select which channels he wants
+ * to see and which not.
+ */
+void ViewBase::configureView() {
+
+ DialogViewConfiguration* dvc = new DialogViewConfiguration(0, *this);
+ dvc->show();
+ // !! The dialog is modal. Does it delete itself?
+}
+
+void ViewBase::toggleMenuBarSlot() {
+ //kdDebug(67100) << "ViewBase::toggleMenuBarSlot() start\n";
+ emit toggleMenuBar();
+ //kdDebug(67100) << "ViewBase::toggleMenuBarSlot() done\n";
+}
+
+// ---------- Popup stuff END ---------------------
+
+#include "viewbase.moc"