From e2de64d6f1beb9e492daf5b886e19933c1fa41dd Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmix/mdwenum.cpp | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 kmix/mdwenum.cpp (limited to 'kmix/mdwenum.cpp') diff --git a/kmix/mdwenum.cpp b/kmix/mdwenum.cpp new file mode 100644 index 00000000..91220902 --- /dev/null +++ b/kmix/mdwenum.cpp @@ -0,0 +1,206 @@ +/* + * KMix -- KDE's full featured mini mixer + * + * + * Copyright (C) 2004 Christian Esken + * + * 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 +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "mdwenum.h" +#include "mixer.h" +#include "viewbase.h" + +/** + * Class that represents an Enum element (a select one-from-many selector) + * The orientation (horizontal, vertical) is ignored + */ +MDWEnum::MDWEnum(Mixer *mixer, MixDevice* md, + Qt::Orientation orientation, + QWidget* parent, ViewBase* mw, const char* name) : + MixDeviceWidget(mixer,md,false,orientation,parent,mw,name), + _label(0), _enumCombo(0), _layout(0) +{ + // create actions (on _mdwActions, see MixDeviceWidget) + + // KStdAction::showMenubar() is in MixDeviceWidget now + new KToggleAction( i18n("&Hide"), 0, this, SLOT(setDisabled()), _mdwActions, "hide" ); + new KAction( i18n("C&onfigure Shortcuts..."), 0, this, SLOT(defineKeys()), _mdwActions, "keys" ); + + // create widgets + createWidgets(); + + /* !!! remove this for production version */ + m_keys->insert( "Next Value", i18n( "Next Value" ), QString::null, + KShortcut(), KShortcut(), this, SLOT( nextEnumId() ) ); + + installEventFilter( this ); // filter for popup +} + +MDWEnum::~MDWEnum() +{ +} + + +void MDWEnum::createWidgets() +{ + if ( _orientation == Qt::Vertical ) { + _layout = new QVBoxLayout( this ); + _layout->setAlignment(Qt::AlignHCenter); + } + else { + _layout = new QHBoxLayout( this ); + _layout->setAlignment(Qt::AlignVCenter); + } + QToolTip::add( this, m_mixdevice->name() ); + + //this->setStretchFactor( _layout, 0 ); + //QSizePolicy qsp( QSizePolicy::Ignored, QSizePolicy::Maximum); + //_layout->setSizePolicy(qsp); + //_layout->setSpacing(KDialog::spacingHint()); + _label = new QLabel( m_mixdevice->name(), this); + _layout->addWidget(_label); + _label->setFixedHeight(_label->sizeHint().height()); + _enumCombo = new KComboBox( FALSE, this, "mixerCombo" ); + // ------------ fill ComboBox start ------------ + int maxEnumId= m_mixdevice->enumValues().count(); + for (int i=0; iinsertItem( *(m_mixdevice->enumValues().at(i)),i); + } + // ------------ fill ComboBox end -------------- + _layout->addWidget(_enumCombo); + _enumCombo->setFixedHeight(_enumCombo->sizeHint().height()); + connect( _enumCombo, SIGNAL( activated( int ) ), this, SLOT( setEnumId( int ) ) ); + QToolTip::add( _enumCombo, m_mixdevice->name() ); + + //_layout->addSpacing( 4 ); +} + +void MDWEnum::update() +{ + if ( m_mixdevice->isEnum() ) { + //kdDebug(67100) << "MDWEnum::update() enumID=" << m_mixdevice->enumId() << endl; + _enumCombo->setCurrentItem( m_mixdevice->enumId() ); + } + else { + // !!! print warning message + } +} + +void MDWEnum::showContextMenu() +{ + if( m_mixerwidget == NULL ) + return; + + KPopupMenu *menu = m_mixerwidget->getPopup(); + + QPoint pos = QCursor::pos(); + menu->popup( pos ); +} + +QSize MDWEnum::sizeHint() const { + if ( _layout != 0 ) { + return _layout->sizeHint(); + } + else { + // layout not (yet) created + return QWidget::sizeHint(); + } +} + + +/** + This slot is called, when a user has clicked the mute button. Also it is called by any other + associated KAction like the context menu. +*/ +void MDWEnum::nextEnumId() { + if( m_mixdevice->isEnum() ) { + int curEnum = enumId(); + if ( (unsigned int)curEnum < m_mixdevice->enumValues().count() ) { + // next enum value + setEnumId(curEnum+1); + } + else { + // wrap around + setEnumId(0); + } + } // isEnum +} + +void MDWEnum::setEnumId(int value) +{ + if ( m_mixdevice->isEnum() ) { + m_mixdevice->setEnumId( value ); + m_mixer->commitVolumeChange( m_mixdevice ); + } +} + +int MDWEnum::enumId() +{ + if ( m_mixdevice->isEnum() ) { + return m_mixdevice->enumId(); + } + else { + return 0; + } +} + +void MDWEnum::setDisabled() +{ + setDisabled( true ); +} + +void MDWEnum::setDisabled( bool value ) { + if ( m_disabled!=value) + { + value ? hide() : show(); + m_disabled = value; + } +} + +/** + * An event filter for the various QWidgets. We watch for Mouse press Events, so + * that we can popup the context menu. + */ +bool MDWEnum::eventFilter( QObject* obj, QEvent* e ) +{ + if (e->type() == QEvent::MouseButtonPress) { + QMouseEvent *qme = static_cast(e); + if (qme->button() == Qt::RightButton) { + showContextMenu(); + return true; + } + } + return QWidget::eventFilter(obj,e); +} + +#include "mdwenum.moc" -- cgit v1.2.3