/*************************************************************************** * Copyright (C) 2006 by Jens Dagerbo * * jens.dagerbo@swipnet.se * * * * 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. * * * ***************************************************************************/ #include #include #include #include #include #include #include #include "kdevplugin.h" #include "projectmanager.h" #include "plugincontroller.h" #include "pluginselectdialog.h" class PluginItem : public TQCheckListItem { public: // name - "Name", label - "GenericName", info - "Comment" PluginItem( TQListView * parent, TQString const & name, TQString const & label, TQString const & info, TQString const url = TQString() ) : TQCheckListItem( parent, label, TQCheckListItem::CheckBox), _name( name ), _info( info ), _url( url ) {} TQString info() { return _info; } TQString name() { return _name; } TQString url() { return _url; } private: TQString _name; TQString _info; TQString _url; }; PluginSelectDialog::PluginSelectDialog(TQWidget* parent, const char* name, bool modal, WFlags fl ) : PluginSelectDialogBase( parent,name, modal,fl ) { plugin_list->setResizeMode( TQListView::LastColumn ); plugin_list->addColumn(""); plugin_list->header()->hide(); connect( plugin_list, TQ_SIGNAL( selectionChanged( TQListViewItem * ) ), this, TQ_SLOT( itemSelected( TQListViewItem * ) ) ); connect( urllabel, TQ_SIGNAL( leftClickedURL( const TQString & ) ), this, TQ_SLOT( openURL( const TQString & ) ) ); init(); } PluginSelectDialog::~PluginSelectDialog() { } void PluginSelectDialog::saveAsDefault() { kdDebug(9000) << k_funcinfo << endl; ProfileEngine & engine = PluginController::getInstance()->engine(); Profile * profile = engine.findProfile( PluginController::getInstance()->currentProfile() ); profile->clearList( Profile::ExplicitDisable ); TQListViewItemIterator it( plugin_list ); while ( it.current() ) { PluginItem * item = static_cast( it.current() ); if ( !item->isOn() ) { profile->addEntry( Profile::ExplicitDisable, item->name() ); } ++it; } profile->save(); } void PluginSelectDialog::openURL( const TQString & url ) { kapp->invokeBrowser( url ); } void PluginSelectDialog::itemSelected( TQListViewItem * item ) { if ( ! item ) return; PluginItem * pitem = static_cast( item ); plugin_description_label->setText( pitem->info() ); if ( pitem->url().isEmpty() ) { urllabel->clear(); } else { urllabel->setURL( pitem->url() ); urllabel->setText( pitem->url() ); } } void PluginSelectDialog::init( ) { const TQValueList loadedPlugins = PluginController::getInstance()->loadedPlugins(); TQStringList loadedPluginDesktopNames; TQValueList::ConstIterator it = loadedPlugins.begin(); while( it != loadedPlugins.end() ) { loadedPluginDesktopNames << (*it)->instance()->instanceName(); ++it; } kdDebug(9000) << " *** loadedPluginDesktopNames: " << loadedPluginDesktopNames << endl; TDETrader::OfferList localOffers; if ( ProjectManager::getInstance()->projectLoaded() ) { localOffers = PluginController::getInstance()->engine().offers( PluginController::getInstance()->currentProfile(), ProfileEngine::Project ); } TDETrader::OfferList globalOffers = PluginController::getInstance()->engine().offers( PluginController::getInstance()->currentProfile(), ProfileEngine::Global); TDETrader::OfferList offers = localOffers + globalOffers; for (TDETrader::OfferList::ConstIterator it = offers.begin(); it != offers.end(); ++it) { // parse out any existing url to make it clickable TQString Comment = (*it)->comment(); TQRegExp re("\\bhttp://[\\S]*"); re.search( Comment ); Comment.replace( re, "" ); TQString url; if ( re.pos() > -1 ) { url = re.cap(); } PluginItem *item = new PluginItem( plugin_list, (*it)->desktopEntryName(), (*it)->genericName(), Comment, url ); item->setOn( loadedPluginDesktopNames.contains( (*it)->desktopEntryName() ) ); kdDebug(9000) << (*it)->desktopEntryName() << " : " << (loadedPluginDesktopNames.contains( (*it)->desktopEntryName() ) ? "YES" : "NO" ) << endl; } TQListViewItem * first = plugin_list->firstChild(); if ( first ) { plugin_list->setSelected( first, true ); } } TQStringList PluginSelectDialog::unselectedPluginNames( ) { TQStringList unselectedPlugins; TQListViewItem * item = plugin_list->firstChild(); while ( item ) { PluginItem * pluginItem = static_cast( item ); if ( !pluginItem->isOn() ) { unselectedPlugins << pluginItem->name(); } item = item->nextSibling(); } return unselectedPlugins; } #include "pluginselectdialog.moc"