diff options
Diffstat (limited to 'interfaces/tdetexteditor/editorchooser.cpp')
-rw-r--r-- | interfaces/tdetexteditor/editorchooser.cpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/interfaces/tdetexteditor/editorchooser.cpp b/interfaces/tdetexteditor/editorchooser.cpp new file mode 100644 index 000000000..1eddfb8d6 --- /dev/null +++ b/interfaces/tdetexteditor/editorchooser.cpp @@ -0,0 +1,162 @@ +#include <editorchooser.h> +#include <editorchooser.moc> + +#include <tqcombobox.h> +#include <ktrader.h> +#include <tdeconfig.h> +#include <tqstringlist.h> +#include <kservice.h> +#include <tdelocale.h> +#include <tqlabel.h> +#include <tdeapplication.h> +#include <tqlayout.h> + +#include "editorchooser_ui.h" + +using namespace KTextEditor; + +namespace KTextEditor +{ + class PrivateEditorChooser + { + public: + PrivateEditorChooser() + { + } + ~PrivateEditorChooser(){} + // Data Members + EditorChooser_UI *chooser; + TQStringList ElementNames; + TQStringList elements; + }; + +} + +EditorChooser::EditorChooser(TQWidget *parent,const char *name) : + TQWidget (parent,name) + { + d = new PrivateEditorChooser (); + + // sizemanagment + TQGridLayout *grid = new TQGridLayout( this, 1, 1 ); + + + d->chooser = new EditorChooser_UI (this, name); + + grid->addWidget( d->chooser, 0, 0); + + + TDETrader::OfferList offers = TDETrader::self()->query("text/plain", "'KTextEditor/Document' in ServiceTypes"); + TDEConfig *config=new TDEConfig("default_components"); + config->setGroup("KTextEditor"); + TQString editor = config->readPathEntry("embeddedEditor"); + + if (editor.isEmpty()) editor="katepart"; + + for (TDETrader::OfferList::Iterator it = offers.begin(); it != offers.end(); ++it) + { + if ((*it)->desktopEntryName().contains(editor)) + { + d->chooser->editorCombo->insertItem(TQString(i18n("System Default (%1)").arg((*it)->name()))); + break; + } + } + + for (TDETrader::OfferList::Iterator it = offers.begin(); it != offers.end(); ++it) + { + d->chooser->editorCombo->insertItem((*it)->name()); + d->elements.append((*it)->desktopEntryName()); + } + d->chooser->editorCombo->setCurrentItem(0); +} + +EditorChooser:: ~EditorChooser(){ + delete d; +} + +void EditorChooser::readAppSetting(const TQString& postfix){ + TDEConfig *cfg=kapp->config(); + TQString previousGroup=cfg->group(); + cfg->setGroup("KTEXTEDITOR:"+postfix); + TQString editor=cfg->readPathEntry("editor"); + if (editor.isEmpty()) d->chooser->editorCombo->setCurrentItem(0); + else + { + int idx=d->elements.findIndex(editor); + idx=idx+1; + d->chooser->editorCombo->setCurrentItem(idx); + } + cfg->setGroup(previousGroup); +} + +void EditorChooser::writeAppSetting(const TQString& postfix){ + TDEConfig *cfg=kapp->config(); + TQString previousGroup=cfg->group(); + cfg->setGroup("KTEXTEDITOR:"+postfix); + cfg->writeEntry("DEVELOPER_INFO","NEVER TRY TO USE VALUES FROM THAT GROUP, THEY ARE SUBJECT TO CHANGES"); + cfg->writePathEntry("editor", (d->chooser->editorCombo->currentItem()==0) ? + TQString::null : (*d->elements.at(d->chooser->editorCombo->currentItem()-1))); + cfg->sync(); + cfg->setGroup(previousGroup); + +} + +KTextEditor::Document *EditorChooser::createDocument(TQObject *parent,const char* name, const TQString& postfix,bool fallBackToKatePart){ + + KTextEditor::Document *tmpDoc=0; + + TDEConfig *cfg=kapp->config(); + TQString previousGroup=cfg->group(); + cfg->setGroup("KTEXTEDITOR:"+postfix); + TQString editor=cfg->readPathEntry("editor"); + cfg->setGroup(previousGroup); + if (editor.isEmpty()) + { + TDEConfig *config=new TDEConfig("default_components"); + config->setGroup("KTextEditor"); + editor = config->readPathEntry("embeddedEditor", "katepart"); + delete config; + } + + KService::Ptr serv=KService::serviceByDesktopName(editor); + if (serv) + { + tmpDoc=KTextEditor::createDocument(serv->library().latin1(),parent,name); + if (tmpDoc) return tmpDoc; + } + if (fallBackToKatePart) + return KTextEditor::createDocument("libkatepart",parent,name); + + return 0; +} + +KTextEditor::Editor *EditorChooser::createEditor(TQWidget *parentWidget,TQObject *parent,const char* widgetName, + const char* name,const TQString& postfix,bool fallBackToKatePart){ + + KTextEditor::Editor *tmpEd=0; + + TDEConfig *cfg=kapp->config(); + TQString previousGroup=cfg->group(); + cfg->setGroup("KTEXTEDITOR:"+postfix); + TQString editor=cfg->readPathEntry("editor"); + cfg->setGroup(previousGroup); + if (editor.isEmpty()) + { + TDEConfig *config=new TDEConfig("default_components"); + config->setGroup("KTextEditor"); + editor = config->readPathEntry("embeddedEditor", "katepart"); + delete config; + } + + KService::Ptr serv=KService::serviceByDesktopName(editor); + if (serv) + { + tmpEd=KTextEditor::createEditor(serv->library().latin1(),parentWidget,widgetName,parent,name); + if (tmpEd) return tmpEd; + } + if (fallBackToKatePart) + return KTextEditor::createEditor("libkatepart",parentWidget,widgetName,parent,name); + + return 0; +} + |