You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
4.9 KiB
199 lines
4.9 KiB
/*
|
|
|
|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
#include "audiomanager.h"
|
|
#include "choosebusdlg.h"
|
|
|
|
#include <tqtimer.h>
|
|
#include <tqlayout.h>
|
|
|
|
#include <klocale.h>
|
|
#include <tdelistview.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( TQWidget* 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();
|
|
|
|
TQTimer *updatetimer = new TQTimer(this);
|
|
updatetimer->start(500);
|
|
TQObject::connect(updatetimer,TQT_SIGNAL(timeout()),this,TQT_SLOT(tick()));
|
|
}
|
|
|
|
Gui_AUDIO_MANAGER::~Gui_AUDIO_MANAGER()
|
|
{
|
|
if(listview) delete listview;
|
|
delete proxy;
|
|
}
|
|
|
|
#if 0
|
|
void Gui_AUDIO_MANAGER::widgetDestroyed(TQWidget *widget)
|
|
{
|
|
assert(widget == listview);
|
|
listview = 0;
|
|
}
|
|
#endif
|
|
|
|
void Gui_AUDIO_MANAGER::setParent(TQWidget *parent, TQBoxLayout * /*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
|
|
************************************************************************/
|
|
|
|
TQVBoxLayout *mainlayout = new TQVBoxLayout(parent);
|
|
/*TQHBoxLayout *contentslayout = new TQHBoxLayout;*/
|
|
|
|
// list
|
|
|
|
listview = new TDEListView(parent);
|
|
|
|
listview->addColumn(i18n("Title"),175);
|
|
listview->addColumn(i18n("Type"),50);
|
|
listview->addColumn(i18n("Bus"),75);
|
|
|
|
listview->setMinimumSize(300,100);
|
|
|
|
TQObject::connect(listview,TQT_SIGNAL(executed(TQListViewItem *)),proxy,
|
|
TQT_SLOT(edit(TQListViewItem *)));
|
|
|
|
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"};
|
|
TQString description = TQString::fromUtf8( (*acs)[c].title.c_str() );
|
|
TQString type;
|
|
if((*acs)[c].direction == Arts::amPlay)
|
|
type = i18n("play");
|
|
else
|
|
type = i18n("record");
|
|
TQString destination = TQString::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(TQListViewItem *item)
|
|
{
|
|
AudioManagerItem *ai = (AudioManagerItem *)item;
|
|
ChooseBusDlg *cd = new ChooseBusDlg(0);
|
|
assert(cd);
|
|
|
|
inDialog = true;
|
|
int accept = cd->exec();
|
|
inDialog = false;
|
|
|
|
if( accept == TQDialog::Accepted )
|
|
{
|
|
TQString 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(TQListViewItem *item)
|
|
{
|
|
gim->edit(item);
|
|
}
|
|
|
|
AudioManagerItem::AudioManagerItem(TQListView *parent, TQString a,
|
|
TQString b, TQString c, long ID) :TQListViewItem(parent,a,b,c)
|
|
{
|
|
_ID = ID;
|
|
}
|
|
|
|
long AudioManagerItem::ID()
|
|
{
|
|
return _ID;
|
|
}
|
|
|
|
AudioManagerItem::~AudioManagerItem()
|
|
{
|
|
//
|
|
}
|
|
#include "audiomanager.moc"
|
|
|
|
// vim: sw=4 ts=4
|