KDevelop API Documentation

src/partselectwidget.cpp

Go to the documentation of this file.
00001 /*************************************************************************** 00002 * Copyright (C) 1999-2001 by Bernd Gehrmann * 00003 * bernd@kdevelop.org * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU General Public License as published by * 00007 * the Free Software Foundation; either version 2 of the License, or * 00008 * (at your option) any later version. * 00009 * * 00010 ***************************************************************************/ 00011 00012 #include <qstring.h> 00013 #include <qvariant.h> 00014 #include <qheader.h> 00015 #include <qlabel.h> 00016 #include <qlayout.h> 00017 #include <qlistview.h> 00018 #include <qgroupbox.h> 00019 #include <qhbox.h> 00020 #include <qregexp.h> 00021 00022 #include <kconfig.h> 00023 #include <kdebug.h> 00024 #include <kglobal.h> 00025 #include <klocale.h> 00026 #include <kservice.h> 00027 #include <ktrader.h> 00028 #include <kurllabel.h> 00029 #include <kapplication.h> 00030 #include "domutil.h" 00031 00032 #include "partselectwidget.h" 00033 #include "plugincontroller.h" 00034 00035 class PluginItem : public QCheckListItem 00036 { 00037 public: 00038 // name - "Name", label - "GenericName", info - "Comment" 00039 PluginItem( QListView * parent, QString const & name, QString const & label, 00040 QString const & info, QString const url = QString::null ) 00041 : QCheckListItem( parent, label, QCheckListItem::CheckBox), 00042 _name( name ), _info( info ), _url( url ) 00043 {} 00044 00045 QString info() { return _info; } 00046 QString name() { return _name; } 00047 QString url() { return _url; } 00048 00049 private: 00050 00051 QString _name; 00052 QString _info; 00053 QString _url; 00054 }; 00055 00056 00057 PartSelectWidget::PartSelectWidget(QDomDocument &projectDom, 00058 QWidget *parent, const char *name) 00059 : QWidget(parent, name), m_projectDom(projectDom), _scope(Project) 00060 { 00061 init(); 00062 } 00063 00064 00065 PartSelectWidget::PartSelectWidget(QWidget *parent, const char *name) 00066 : QWidget(parent, name), m_projectDom(QDomDocument()), _scope(Global) 00067 { 00068 init(); 00069 } 00070 00071 00072 void PartSelectWidget::init() 00073 { 00074 QVBoxLayout *layout = new QVBoxLayout(this); 00075 00076 QString text = (_scope==Global)? 00077 i18n("Plugins to Load at Startup") : 00078 i18n("Plugins to Load for This Project"); 00079 00080 QGroupBox * groupBox1 = new QGroupBox( text, this ); 00081 groupBox1->setColumnLayout(0, Qt::Vertical ); 00082 groupBox1->layout()->setSpacing( 6 ); 00083 groupBox1->layout()->setMargin( 11 ); 00084 QHBoxLayout * groupBox1Layout = new QHBoxLayout( groupBox1->layout() ); 00085 groupBox1Layout->setAlignment( Qt::AlignTop ); 00086 00087 _pluginList = new QListView( groupBox1 ); 00088 _pluginList->setResizeMode( QListView::LastColumn ); 00089 _pluginList->addColumn(""); 00090 _pluginList->header()->hide(); 00091 00092 groupBox1Layout->addWidget( _pluginList ); 00093 layout->addWidget( groupBox1 ); 00094 00095 QGroupBox * groupBox2 = new QGroupBox( i18n("Description"), this ); 00096 groupBox2->setColumnLayout(0, Qt::Vertical ); 00097 groupBox2->layout()->setSpacing( 6 ); 00098 groupBox2->layout()->setMargin( 11 ); 00099 QVBoxLayout * groupBox2Layout = new QVBoxLayout( groupBox2->layout() ); 00100 groupBox2Layout->setAlignment( Qt::AlignTop ); 00101 00102 _pluginDescription = new QLabel( groupBox2 ); 00103 _pluginDescription->setAlignment( int( QLabel::WordBreak | QLabel::AlignVCenter ) ); 00104 00105 _urlLabel = new KURLLabel( groupBox2 ); 00106 00107 groupBox2Layout->addWidget( _pluginDescription ); 00108 groupBox2Layout->addWidget( _urlLabel ); 00109 00110 layout->addWidget( groupBox2 ); 00111 00112 connect( _pluginList, SIGNAL( selectionChanged( QListViewItem * ) ), this, SLOT( itemSelected( QListViewItem * ) ) ); 00113 connect( _urlLabel, SIGNAL( leftClickedURL( const QString & ) ), this, SLOT( openURL( const QString & ) ) ); 00114 00115 if (_scope == Global) 00116 readGlobalConfig(); 00117 else 00118 readProjectConfig(); 00119 } 00120 00121 00122 PartSelectWidget::~PartSelectWidget() 00123 {} 00124 00125 00126 void PartSelectWidget::readGlobalConfig() 00127 { 00128 KTrader::OfferList globalOffers = PluginController::pluginServices( "Global" ); 00129 KConfig config( PluginController::getInstance()->currentProfilePath() ); 00130 config.setGroup("Plugins"); 00131 00132 for (KTrader::OfferList::ConstIterator it = globalOffers.begin(); it != globalOffers.end(); ++it) 00133 { 00134 // parse out any existing url to make it clickable 00135 QString Comment = (*it)->comment(); 00136 QRegExp re("\\bhttp://[\\S]*"); 00137 re.search( Comment ); 00138 Comment.replace( re, "" ); 00139 00140 QString url; 00141 if ( re.pos() > -1 ) 00142 { 00143 url = re.cap(); 00144 } 00145 00146 PluginItem *item = new PluginItem( _pluginList, (*it)->name(), (*it)->genericName(), Comment, url ); 00147 item->setOn(config.readBoolEntry((*it)->name(), true)); 00148 } 00149 00150 QListViewItem * first = _pluginList->firstChild(); 00151 if ( first ) 00152 { 00153 _pluginList->setSelected( first, true ); 00154 } 00155 } 00156 00157 00158 void PartSelectWidget::saveGlobalConfig() 00159 { 00160 KConfig config( PluginController::getInstance()->currentProfilePath() ); 00161 config.setGroup("Plugins"); 00162 00163 QListViewItemIterator it( _pluginList ); 00164 while ( it.current() ) 00165 { 00166 PluginItem * item = static_cast<PluginItem*>( it.current() ); 00167 config.writeEntry( item->name(), item->isOn() ); 00168 ++it; 00169 } 00170 } 00171 00172 00173 void PartSelectWidget::readProjectConfig() 00174 { 00175 QStringList ignoreparts = DomUtil::readListEntry(m_projectDom, "/general/ignoreparts", "part"); 00176 00177 KTrader::OfferList localOffers = PluginController::pluginServices( "Project" ); 00178 for (KTrader::OfferList::ConstIterator it = localOffers.begin(); it != localOffers.end(); ++it) 00179 { 00180 // parse out any existing url to make it clickable 00181 QString Comment = (*it)->comment(); 00182 QRegExp re("\\bhttp://[\\S]*"); 00183 re.search( Comment ); 00184 Comment.replace( re, "" ); 00185 00186 QString url; 00187 if ( re.pos() > -1 ) 00188 { 00189 url = re.cap(); 00190 } 00191 00192 PluginItem *item = new PluginItem( _pluginList, (*it)->name(), (*it)->genericName(), Comment, url ); 00193 item->setOn(!ignoreparts.contains((*it)->name())); 00194 } 00195 00196 QListViewItem * first = _pluginList->firstChild(); 00197 if ( first ) 00198 { 00199 _pluginList->setSelected( first, true ); 00200 } 00201 } 00202 00203 void PartSelectWidget::itemSelected( QListViewItem * item ) 00204 { 00205 if ( ! item ) return; 00206 00207 PluginItem * pitem = static_cast<PluginItem*>( item ); 00208 _pluginDescription->setText( pitem->info() ); 00209 00210 if ( pitem->url().isEmpty() ) 00211 { 00212 _urlLabel->hide(); 00213 } 00214 else 00215 { 00216 _urlLabel->show(); 00217 _urlLabel->setURL( pitem->url() ); 00218 _urlLabel->setText( pitem->url() ); 00219 } 00220 } 00221 00222 void PartSelectWidget::openURL( const QString & url ) 00223 { 00224 kapp->invokeBrowser( url ); 00225 } 00226 00227 void PartSelectWidget::saveProjectConfig() 00228 { 00229 QStringList ignoreparts; 00230 00231 QListViewItemIterator it( _pluginList ); 00232 while ( it.current() ) 00233 { 00234 PluginItem * item = static_cast<PluginItem*>( it.current() ); 00235 if ( ! item->isOn() ) 00236 { 00237 ignoreparts.append( item->name() ); 00238 } 00239 ++it; 00240 } 00241 00242 DomUtil::writeListEntry(m_projectDom, "/general/ignoreparts", "part", ignoreparts); 00243 kdDebug(9000) << "xml:" << m_projectDom.toString() << endl; 00244 } 00245 00246 00247 void PartSelectWidget::accept() 00248 { 00249 if (_scope == Global) 00250 saveGlobalConfig(); 00251 else 00252 saveProjectConfig(); 00253 emit accepted(); 00254 } 00255 00256 #include "partselectwidget.moc"
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:53 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003