KDevelop API Documentation

parts/tools/toolsconfigwidget.cpp

Go to the documentation of this file.
00001 /*************************************************************************** 00002 * Copyright (C) 2002 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 "toolsconfigwidget.h" 00013 00014 #include <qcheckbox.h> 00015 #include <qlineedit.h> 00016 #include <qlistbox.h> 00017 #include <qtimer.h> 00018 00019 #include <kconfig.h> 00020 #include <kdeversion.h> 00021 #include <kdebug.h> 00022 #include <kdesktopfile.h> 00023 #include <kiconloader.h> 00024 #include <kmessagebox.h> 00025 #include <kurl.h> 00026 #include <kurldrag.h> 00027 00028 #include "addtooldlg.h" 00029 #include "kapplicationtree.h" 00030 00031 00032 struct ToolsConfigEntry 00033 { 00034 QString menutext; 00035 QString cmdline; 00036 bool isdesktopfile; 00037 bool captured; 00038 bool isEmpty() const { 00039 return ( menutext.isEmpty() && cmdline.isEmpty() ); 00040 } 00041 }; 00042 00043 00044 ToolsConfigWidget::ToolsConfigWidget(QWidget *parent, const char *name) 00045 : ToolsConfigWidgetBase(parent, name) 00046 { 00047 m_toolsmenuEntries.setAutoDelete(true); 00048 m_filecontextEntries.setAutoDelete(true); 00049 m_dircontextEntries.setAutoDelete(true); 00050 00051 toolsmenuBox->setAcceptDrops(true); 00052 toolsmenuBox->installEventFilter(this); 00053 toolsmenuBox->viewport()->setAcceptDrops(true); 00054 toolsmenuBox->viewport()->installEventFilter(this); 00055 00056 readConfig(); 00057 } 00058 00059 00060 ToolsConfigWidget::~ToolsConfigWidget() 00061 {} 00062 00063 00064 void ToolsConfigWidget::readGroup(const QString &group, QDict<ToolsConfigEntry> *entryDict) 00065 { 00066 KConfig *config = ToolsFactory::instance()->config(); 00067 config->setGroup("External Tools"); 00068 QStringList list = config->readListEntry(group); 00069 00070 QStringList::ConstIterator it; 00071 for (it = list.begin(); it != list.end(); ++it) { 00072 config->setGroup(group + " " + (*it)); 00073 QString cmdline = config->readPathEntry("CommandLine"); 00074 bool isdesktopfile = config->readBoolEntry("DesktopFile"); 00075 bool captured = config->readBoolEntry("Captured"); 00076 ToolsConfigEntry *entry = new ToolsConfigEntry; 00077 entry->menutext = (*it); 00078 entry->cmdline = cmdline; 00079 entry->isdesktopfile = isdesktopfile; 00080 entry->captured = captured; 00081 entryDict->insert(*it, entry); 00082 } 00083 } 00084 00085 00086 void ToolsConfigWidget::storeGroup(const QString &group, const QDict<ToolsConfigEntry> &entryDict) 00087 { 00088 KConfig *config = ToolsFactory::instance()->config(); 00089 00090 QStringList list; 00091 00092 QDictIterator<ToolsConfigEntry> it(entryDict); 00093 for (; it.current(); ++it) { 00094 ToolsConfigEntry *entry = it.current(); 00095 list << entry->menutext; 00096 config->setGroup(group + " " + entry->menutext); 00097 #if defined(KDE_IS_VERSION) 00098 # if KDE_IS_VERSION(3,1,3) 00099 # ifndef _KDE_3_1_3_ 00100 # define _KDE_3_1_3_ 00101 # endif 00102 # endif 00103 #endif 00104 #if defined(_KDE_3_1_3_) 00105 config->writePathEntry("CommandLine", entry->cmdline); 00106 #else 00107 config->writeEntry("CommandLine", entry->cmdline); 00108 #endif 00109 config->writeEntry("DesktopFile", entry->isdesktopfile); 00110 config->writeEntry("Captured", entry->captured); 00111 } 00112 00113 config->setGroup("External Tools"); 00114 config->writeEntry(group, list); 00115 } 00116 00117 00118 00119 void ToolsConfigWidget::fillListBox(QListBox *lb, const QDict<ToolsConfigEntry> &entryDict) 00120 { 00121 lb->clear(); 00122 00123 QDictIterator<ToolsConfigEntry> it(entryDict); 00124 for (; it.current(); ++it) { 00125 ToolsConfigEntry *entry = it.current(); 00126 if (entry->isdesktopfile) { 00127 KDesktopFile df(entry->cmdline); 00128 lb->insertItem(SmallIcon(df.readIcon()), entry->menutext); 00129 } else { 00130 lb->insertItem(entry->menutext); 00131 } 00132 } 00133 } 00134 00135 00136 bool ToolsConfigWidget::addEntry(ToolsConfigEntry *entry, QDict<ToolsConfigEntry> *entryDict) 00137 { 00138 QString menutext = entry->menutext; 00139 if (entryDict->find(menutext)) { 00140 delete entry; 00141 KMessageBox::sorry(this, i18n("An entry with this title exists already.")); 00142 return false; 00143 } 00144 00145 entryDict->insert(menutext, entry); 00146 00147 updateListBoxes(); 00148 return true; 00149 } 00150 00151 00152 void ToolsConfigWidget::readConfig() 00153 { 00154 readGroup("Tool Menu", &m_toolsmenuEntries); 00155 readGroup("File Context", &m_filecontextEntries); 00156 readGroup("Dir Context", &m_dircontextEntries); 00157 00158 updateListBoxes(); 00159 } 00160 00161 00162 void ToolsConfigWidget::storeConfig() 00163 { 00164 storeGroup("Tool Menu", m_toolsmenuEntries); 00165 storeGroup("File Context", m_filecontextEntries); 00166 storeGroup("Dir Context", m_dircontextEntries); 00167 } 00168 00169 00170 void ToolsConfigWidget::updateListBoxes() 00171 { 00172 fillListBox(toolsmenuBox, m_toolsmenuEntries); 00173 fillListBox(filecontextBox, m_filecontextEntries); 00174 fillListBox(dircontextBox, m_dircontextEntries); 00175 } 00176 00177 00178 void ToolsConfigWidget::toolsmenuaddClicked() 00179 { 00180 AddToolDialog dlg(this); 00181 dlg.setCaption(i18n("Add to Tools Menu")); 00182 dlg.tree->setFocus(); 00183 while (dlg.exec()) { 00184 ToolsConfigEntry *entry = new ToolsConfigEntry; 00185 entry->menutext = dlg.menutextEdit->text(); 00186 entry->cmdline = dlg.getApp().stripWhiteSpace(); 00187 entry->isdesktopfile = false; 00188 entry->captured = dlg.capturedBox->isChecked(); 00189 if ( entry->isEmpty() ) 00190 delete entry; 00191 else if (addEntry(entry, &m_toolsmenuEntries)) 00192 return; 00193 } 00194 } 00195 00196 00197 void ToolsConfigWidget::toolsmenuremoveClicked() 00198 { 00199 QString menutext = toolsmenuBox->currentText(); 00200 m_toolsmenuEntries.remove(menutext); 00201 updateListBoxes(); 00202 } 00203 00204 00205 void ToolsConfigWidget::filecontextaddClicked() 00206 { 00207 AddToolDialog dlg(this); 00208 dlg.setCaption(i18n("Add to File Context Menus")); 00209 dlg.tree->setFocus(); 00210 while (dlg.exec()) { 00211 ToolsConfigEntry *entry = new ToolsConfigEntry; 00212 entry->menutext = dlg.menutextEdit->text(); 00213 entry->cmdline = dlg.getApp().stripWhiteSpace(); 00214 entry->isdesktopfile = false; 00215 entry->captured = dlg.capturedBox->isChecked(); 00216 if ( entry->isEmpty() ) 00217 delete entry; 00218 00219 else if (addEntry(entry, &m_filecontextEntries)) 00220 return; 00221 } 00222 } 00223 00224 00225 void ToolsConfigWidget::filecontextremoveClicked() 00226 { 00227 QString menutext = filecontextBox->currentText(); 00228 m_filecontextEntries.remove(menutext); 00229 updateListBoxes(); 00230 } 00231 00232 00233 void ToolsConfigWidget::dircontextaddClicked() 00234 { 00235 AddToolDialog dlg(this); 00236 dlg.setCaption(i18n("Add to Directory Context Menus")); 00237 dlg.tree->setFocus(); 00238 if (dlg.exec()) { 00239 ToolsConfigEntry *entry = new ToolsConfigEntry; 00240 entry->menutext = dlg.menutextEdit->text(); 00241 entry->cmdline = dlg.getApp().stripWhiteSpace(); 00242 entry->isdesktopfile = false; 00243 entry->captured = dlg.capturedBox->isChecked(); 00244 if ( entry->isEmpty() ) 00245 delete entry; 00246 else if (addEntry(entry, &m_dircontextEntries)) 00247 return; 00248 } 00249 } 00250 00251 00252 void ToolsConfigWidget::dircontextremoveClicked() 00253 { 00254 QString menutext = dircontextBox->currentText(); 00255 m_dircontextEntries.remove(menutext); 00256 updateListBoxes(); 00257 } 00258 00259 00260 bool ToolsConfigWidget::eventFilter(QObject *o, QEvent *e) 00261 { 00262 if (e->type() == QEvent::DragEnter || e->type() == QEvent::DragMove) { 00263 QDragMoveEvent *dme = static_cast<QDragMoveEvent*>(e); 00264 if (KURLDrag::canDecode(dme)) 00265 dme->accept(); 00266 return true; 00267 } else if (e->type() == QEvent::Drop) { 00268 QDropEvent *de = static_cast<QDropEvent*>(e); 00269 KURL::List fileList; 00270 if (KURLDrag::decode(de, fileList)) { 00271 KURL::List::ConstIterator it; 00272 for (it = fileList.begin(); it != fileList.end(); ++it) { 00273 if ((*it).isLocalFile() && KDesktopFile::isDesktopFile((*it).path())) { 00274 KDesktopFile df((*it).path()); 00275 ToolsConfigEntry *entry = new ToolsConfigEntry; 00276 entry->menutext = df.readName(); 00277 entry->cmdline = (*it).path(); 00278 entry->isdesktopfile = true; 00279 entry->captured = false; 00280 addEntry(entry, &m_toolsmenuEntries); 00281 } 00282 } 00283 } 00284 return true; 00285 } 00286 00287 return ToolsConfigWidgetBase::eventFilter(o, e); 00288 } 00289 00290 00291 void ToolsConfigWidget::accept() 00292 { 00293 storeConfig(); 00294 } 00295 #include "toolsconfigwidget.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:52 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003