diff options
Diffstat (limited to 'arts/tools/audiomanager.cpp')
-rw-r--r-- | arts/tools/audiomanager.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/arts/tools/audiomanager.cpp b/arts/tools/audiomanager.cpp new file mode 100644 index 00000000..d250e37f --- /dev/null +++ b/arts/tools/audiomanager.cpp @@ -0,0 +1,198 @@ +/* + + Copyright (C) 1999 Stefan Westerfeld + stefan@space.twc.de + 2003 Arnold Krille + arnold@arnoldarts.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU 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 "audiomanager.h" +#include "choosebusdlg.h" + +#include <qtimer.h> +#include <qlayout.h> + +#include <klocale.h> +#include <klistview.h> +#include <kiconloader.h> + +using namespace std; + +/* + * as this is an 1:1 port of an old arts-0.3.4.1 artsbuilable visual widget, + * you'll see some porting artefacts, and it's not elegance itself ;) + */ +Gui_AUDIO_MANAGER::Gui_AUDIO_MANAGER( QWidget* parent, const char* name ) : Template_ArtsView( parent,name ) +{ + this->setCaption( i18n( "Audio Manager" ) ); + this->setIcon( MainBarIcon( "artsaudiomanager", 32 ) ); + //printf("constructor\n"); + ParentWidget = 0; + listview = 0; + inDialog = false; + proxy = new GuiAudioManagerProxy(this); + + AudioManager = Arts::Reference("global:Arts_AudioManager"); + changes = AudioManager.changes()-1; + setParent(this,0); + tick(); + show(); + + QTimer *updatetimer = new QTimer(this); + updatetimer->start(500); + QObject::connect(updatetimer,SIGNAL(timeout()),this,SLOT(tick())); +} + +Gui_AUDIO_MANAGER::~Gui_AUDIO_MANAGER() +{ + if(listview) delete listview; + delete proxy; +} + +#if 0 +void Gui_AUDIO_MANAGER::widgetDestroyed(QWidget *widget) +{ + assert(widget == listview); + listview = 0; +} +#endif + +void Gui_AUDIO_MANAGER::setParent(QWidget *parent, QBoxLayout * /*layout*/) +{ +/************************************************************************ + * From Gui_INSTRUMENT_MAPPER: + * + * I am still not sure wether this kind of putting yourself into a parent + * widget (with own layout etc.) is a good idea (there may not even be + * a singe call to setParent, because there is no parent). + * + * But the "how to write aRts widgets"-stuff will need some experiments, + * so lets try that method... + * + * ---- + * + * But perhaps here (since only one widget Listview is used) something + * else would be appropriate. Check that. FIXME + ************************************************************************/ + + QVBoxLayout *mainlayout = new QVBoxLayout(parent); + /*QHBoxLayout *contentslayout = new QHBoxLayout;*/ + +// list + + listview = new KListView(parent); + + listview->addColumn(i18n("Title"),175); + listview->addColumn(i18n("Type"),50); + listview->addColumn(i18n("Bus"),75); + + listview->setMinimumSize(300,100); + + QObject::connect(listview,SIGNAL(executed(QListViewItem *)),proxy, + SLOT(edit(QListViewItem *))); + + mainlayout->addWidget(listview); + + mainlayout->activate(); + //mainlayout->freeze(); + ParentWidget = parent; +} + +void Gui_AUDIO_MANAGER::tick() +{ + unsigned long newChanges = AudioManager.changes(); + if(inDialog) return; + if(changes == newChanges) return; + + changes = newChanges; + + listview->clear(); + vector<Arts::AudioManagerInfo> *acs = AudioManager.clients(); + + unsigned long c; + for(c=0;c<acs->size();c++) + { + //char status[2][10] = {"init","running"}; + QString description = QString::fromUtf8( (*acs)[c].title.c_str() ); + QString type; + if((*acs)[c].direction == Arts::amPlay) + type = i18n("play"); + else + type = i18n("record"); + QString destination = QString::fromUtf8( (*acs)[c].destination.c_str() ); + long ID = (*acs)[c].ID; + + (void)new AudioManagerItem(listview, description, type, destination, ID); + } + delete acs; + //Widget->show(); +} + +void Gui_AUDIO_MANAGER::edit(QListViewItem *item) +{ + AudioManagerItem *ai = (AudioManagerItem *)item; + ChooseBusDlg *cd = new ChooseBusDlg(0); + assert(cd); + + inDialog = true; + int accept = cd->exec(); + inDialog = false; + + if( accept == QDialog::Accepted ) + { + QString result = cd->result(); + if(!result.isNull()) + { + //lukas: I hope UTF-8 is OK here... + AudioManager.setDestination(ai->ID(),result.utf8().data()); + // refresh: + changes = 0; + tick(); + } + } + delete cd; +} + +GuiAudioManagerProxy::GuiAudioManagerProxy(Gui_AUDIO_MANAGER *gim) +{ + this->gim = gim; +} + +void GuiAudioManagerProxy::edit(QListViewItem *item) +{ + gim->edit(item); +} + +AudioManagerItem::AudioManagerItem(QListView *parent, QString a, + QString b, QString c, long ID) :QListViewItem(parent,a,b,c) +{ + _ID = ID; +} + +long AudioManagerItem::ID() +{ + return _ID; +} + +AudioManagerItem::~AudioManagerItem() +{ + // +} +#include "audiomanager.moc" + +// vim: sw=4 ts=4 |