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.
150 lines
5.3 KiB
150 lines
5.3 KiB
/***************************************************** vim:set ts=4 sw=4 sts=4:
|
|
Dialog to allow user to select a KNotify application and event.
|
|
-------------------
|
|
Copyright:
|
|
(C) 2005 by Gary Cramblitt <garycramblitt@comcast.net>
|
|
-------------------
|
|
Original author: Gary Cramblitt <garycramblitt@comcast.net>
|
|
|
|
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.
|
|
******************************************************************************/
|
|
|
|
// TQt includes.
|
|
#include <tqcombobox.h>
|
|
|
|
// KDE includes
|
|
#include <kstandarddirs.h>
|
|
#include <kconfig.h>
|
|
#include <klocale.h>
|
|
#include <kdebug.h>
|
|
#include <klistview.h>
|
|
#include <kiconloader.h>
|
|
|
|
// KTTS includes
|
|
#include "utils.h"
|
|
#include "selectevent.h"
|
|
|
|
SelectEvent::SelectEvent(TQWidget* tqparent, const char* name, WFlags fl, const TQString& initEventSrc)
|
|
: SelectEventWidget(tqparent,name,fl)
|
|
{
|
|
// Load list of event sources (applications).
|
|
TQStringList fullpaths =
|
|
KGlobal::dirs()->findAllResources("data", "*/eventsrc", false, true );
|
|
TQStringList::ConstIterator it = fullpaths.begin();
|
|
TQStringList relativePaths;
|
|
for ( ; it != fullpaths.end(); ++it)
|
|
{
|
|
TQString relativePath = *it;
|
|
if ( relativePath.at(0) == '/' && KStandardDirs::exists( relativePath ) )
|
|
{
|
|
relativePath = makeRelative( relativePath );
|
|
relativePaths.append(relativePath);
|
|
}
|
|
}
|
|
relativePaths.sort();
|
|
it = relativePaths.begin();
|
|
for ( ; it != relativePaths.end(); ++it)
|
|
{
|
|
TQString relativePath = *it;
|
|
if ( !relativePath.isEmpty() )
|
|
{
|
|
KConfig* config = new KConfig(relativePath, true, false, "data");
|
|
config->setGroup( TQString::tqfromLatin1("!Global!") );
|
|
TQString icon = config->readEntry(TQString::tqfromLatin1("IconName"),
|
|
TQString::tqfromLatin1("misc"));
|
|
TQString description = config->readEntry( TQString::tqfromLatin1("Comment"),
|
|
i18n("No description available") );
|
|
delete config;
|
|
int index = relativePath.tqfind( '/' );
|
|
TQString appname;
|
|
if ( index >= 0 )
|
|
appname = relativePath.left( index );
|
|
else
|
|
kdDebug() << "Cannot determine application name from path: " << relativePath << endl;
|
|
eventSrcComboBox->insertItem( SmallIcon( icon ), description );
|
|
m_eventSrcNames.append( appname );
|
|
if ( appname == initEventSrc ) KttsUtils::setCbItemFromText(eventSrcComboBox, description);
|
|
}
|
|
}
|
|
slotEventSrcComboBox_activated(eventSrcComboBox->currentItem());
|
|
connect (eventSrcComboBox, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotEventSrcComboBox_activated(int)));
|
|
}
|
|
|
|
SelectEvent::~SelectEvent() { }
|
|
|
|
void SelectEvent::slotEventSrcComboBox_activated(int index)
|
|
{
|
|
eventsListView->clear();
|
|
TQListViewItem* item = 0;
|
|
TQString eventSrc = m_eventSrcNames[index];
|
|
TQString configFilename = eventSrc + TQString::tqfromLatin1( "/eventsrc" );
|
|
KConfig* config = new KConfig( configFilename, true, false, "data" );
|
|
TQStringList eventNames = config->groupList();
|
|
uint eventNamesCount = eventNames.count();
|
|
for (uint ndx = 0; ndx < eventNamesCount; ++ndx)
|
|
{
|
|
TQString eventName = eventNames[ndx];
|
|
if ( eventName != "!Global!" )
|
|
{
|
|
config->setGroup( eventName );
|
|
TQString eventDesc = config->readEntry( TQString::tqfromLatin1( "Comment" ),
|
|
config->readEntry( TQString::tqfromLatin1( "Name" )));
|
|
if ( !item )
|
|
item = new KListViewItem( eventsListView, eventDesc, eventName );
|
|
else
|
|
item = new KListViewItem( eventsListView, item, eventDesc, eventName );
|
|
}
|
|
}
|
|
delete config;
|
|
eventsListView->sort();
|
|
item = eventsListView->lastChild();
|
|
TQString eventDesc = i18n("All other %1 events").tqarg(eventSrcComboBox->currentText());
|
|
if ( !item )
|
|
item = new KListViewItem( eventsListView, eventDesc, "default" );
|
|
else
|
|
item = new KListViewItem( eventsListView, item, eventDesc, "default" );
|
|
|
|
}
|
|
|
|
TQString SelectEvent::getEventSrc()
|
|
{
|
|
return m_eventSrcNames[eventSrcComboBox->currentItem()];
|
|
}
|
|
|
|
TQString SelectEvent::getEvent()
|
|
{
|
|
TQListViewItem* item = eventsListView->currentItem();
|
|
if ( item )
|
|
return item->text(1);
|
|
else
|
|
return TQString();
|
|
}
|
|
|
|
// returns e.g. "kwin/eventsrc" from a given path
|
|
// "/opt/kde3/share/apps/kwin/eventsrc"
|
|
TQString SelectEvent::makeRelative( const TQString& fullPath )
|
|
{
|
|
int slash = fullPath.tqfindRev( '/' ) - 1;
|
|
slash = fullPath.tqfindRev( '/', slash );
|
|
|
|
if ( slash < 0 )
|
|
return TQString();
|
|
|
|
return fullPath.mid( slash+1 );
|
|
}
|
|
|
|
|
|
#include "selectevent.moc"
|