KDevelop API Documentation

languageselectwidget.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Harald Fernengel                                *
00003  *   harry@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 <kapplication.h>
00029 #include <kdevplugin.h>
00030 #include "domutil.h"
00031 
00032 #include "languageselectwidget.h"
00033 #include "plugincontroller.h"
00034 
00035 class LangPluginItem : public QCheckListItem
00036 {
00037 public:
00038     // name - "Name", label - "GenericName", info - "Comment"
00039     LangPluginItem( QListView * parent, QString const & name, QString const & label,
00040                 QString const & info )
00041         : QCheckListItem( parent, label, QCheckListItem::CheckBox),
00042         _name( name ), _info( info )
00043     {}
00044 
00045     QString info() { return _info; }
00046     QString name() { return _name; }
00047 
00048 private:
00049     QString _name;
00050     QString _info;
00051 };
00052 
00053 
00054 LanguageSelectWidget::LanguageSelectWidget(QDomDocument &projectDom,
00055                                    QWidget *parent, const char *name)
00056     : QWidget(parent, name), m_projectDom(projectDom)
00057 {
00058     init();
00059 }
00060 
00061 void LanguageSelectWidget::init()
00062 {
00063     QVBoxLayout *layout = new QVBoxLayout(this);
00064 
00065     QGroupBox * groupBox1 = new QGroupBox( i18n("Additional Language Support"), this );
00066     groupBox1->setColumnLayout(0, Qt::Vertical );
00067     groupBox1->layout()->setSpacing( 6 );
00068     groupBox1->layout()->setMargin( 11 );
00069     QVBoxLayout * groupBox1Layout = new QVBoxLayout( groupBox1->layout() );
00070     groupBox1Layout->setAlignment( Qt::AlignTop );
00071 
00072     _currentLanguage = new QLabel( "", groupBox1 );
00073 
00074     _pluginList = new QListView( groupBox1 );
00075     _pluginList->setResizeMode( QListView::LastColumn );
00076     _pluginList->addColumn("");
00077     _pluginList->header()->hide();
00078 
00079     groupBox1Layout->addWidget(_currentLanguage);
00080     groupBox1Layout->addWidget( _pluginList );
00081     layout->addWidget( groupBox1 );
00082 
00083     QGroupBox * groupBox2 = new QGroupBox( i18n("Description"), this );
00084     groupBox2->setColumnLayout(0, Qt::Vertical );
00085     groupBox2->layout()->setSpacing( 6 );
00086     groupBox2->layout()->setMargin( 11 );
00087     QVBoxLayout * groupBox2Layout = new QVBoxLayout( groupBox2->layout() );
00088     groupBox2Layout->setAlignment( Qt::AlignTop );
00089 
00090     _pluginDescription = new QLabel( groupBox2 );
00091     _pluginDescription->setAlignment( int( QLabel::WordBreak | QLabel::AlignVCenter ) );
00092 
00093     groupBox2Layout->addWidget( _pluginDescription );
00094 
00095     layout->addWidget( groupBox2 );
00096 
00097     connect( _pluginList, SIGNAL( selectionChanged( QListViewItem * ) ), this, SLOT( itemSelected( QListViewItem * ) ) );
00098 
00099     readProjectConfig();
00100 }
00101 
00102 
00103 LanguageSelectWidget::~LanguageSelectWidget()
00104 {}
00105 
00106 void LanguageSelectWidget::readProjectConfig()
00107 {
00108     KTrader::OfferList languageSupportOffers =
00109         KTrader::self()->query(QString::fromLatin1("KDevelop/LanguageSupport"),
00110                                QString::fromLatin1("[X-KDevelop-Version] == %1"
00111                                ).arg( KDEVELOP_PLUGIN_VERSION ));
00112 
00113     QStringList languages = DomUtil::readListEntry(m_projectDom, "/general/secondaryLanguages", "language");
00114     QString language = DomUtil::readEntry(m_projectDom, "/general/primarylanguage");
00115     _currentLanguage->setText(i18n("Primary language is '%1'. Please select additional languages the project might contain.").arg(language));
00116 
00117     for (KTrader::OfferList::ConstIterator it = languageSupportOffers.begin(); it != languageSupportOffers.end(); ++it)
00118     {
00119         QString la = (*it)->property("X-KDevelop-Language").toString();
00120         if (la == language)
00121             continue;
00122         LangPluginItem *item = new LangPluginItem( _pluginList, (*it)->property("X-KDevelop-Language").toString(), (*it)->genericName(), (*it)->comment() );
00123         item->setOn(languages.contains(la));
00124     }
00125 
00126     QListViewItem * first = _pluginList->firstChild();
00127     if ( first ) {
00128         _pluginList->setSelected( first, true );
00129     }
00130 }
00131 
00132 void LanguageSelectWidget::itemSelected( QListViewItem * item )
00133 {
00134     if ( !item ) return;
00135 
00136     LangPluginItem * pitem = static_cast<LangPluginItem*>( item );
00137     _pluginDescription->setText( pitem->info() );
00138 }
00139 
00140 void LanguageSelectWidget::saveProjectConfig()
00141 {
00142     QStringList languages;
00143 
00144     QListViewItemIterator it( _pluginList );
00145     while ( it.current() )
00146     {
00147         LangPluginItem * item = static_cast<LangPluginItem*>( it.current() );
00148         if (item->isOn())
00149         {
00150             languages.append( item->name() );
00151         }
00152         ++it;
00153     }
00154 
00155     DomUtil::writeListEntry(m_projectDom, "/general/secondaryLanguages", "language", languages);
00156 }
00157 
00158 
00159 void LanguageSelectWidget::accept()
00160 {
00161     saveProjectConfig();
00162     emit accepted();
00163 }
00164 
00165 #include "languageselectwidget.moc"
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:58 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003