editorchooser.cpp
00001 #include <editorchooser.h>
00002 #include <editorchooser.moc>
00003
00004 #include <qcombobox.h>
00005 #include <ktrader.h>
00006 #include <kconfig.h>
00007 #include <qstringlist.h>
00008 #include <kservice.h>
00009 #include <klocale.h>
00010 #include <qlabel.h>
00011 #include <kapplication.h>
00012 #include <qlayout.h>
00013
00014 #include "editorchooser_ui.h"
00015
00016 using namespace KTextEditor;
00017
00018 namespace KTextEditor
00019 {
00020 class PrivateEditorChooser
00021 {
00022 public:
00023 PrivateEditorChooser()
00024 {
00025 }
00026 ~PrivateEditorChooser(){}
00027
00028 EditorChooser_UI *chooser;
00029 QStringList ElementNames;
00030 QStringList elements;
00031 };
00032
00033 };
00034
00035 EditorChooser::EditorChooser(QWidget *parent,const char *name) :
00036 QWidget (parent,name)
00037 {
00038 d = new PrivateEditorChooser ();
00039
00040
00041 QGridLayout *grid = new QGridLayout( this, 1, 1 );
00042
00043
00044 d->chooser = new EditorChooser_UI (this, name);
00045
00046 grid->addWidget( d->chooser, 0, 0);
00047
00048
00049 KTrader::OfferList offers = KTrader::self()->query("text/plain", "'KTextEditor/Document' in ServiceTypes");
00050 KConfig *config=new KConfig("default_components");
00051 config->setGroup("KTextEditor");
00052 QString editor = config->readEntry("embeddedEditor", "");
00053
00054 if (editor.isEmpty()) editor="katepart";
00055
00056 for (KTrader::OfferList::Iterator it = offers.begin(); it != offers.end(); ++it)
00057 {
00058 if ((*it)->desktopEntryName().contains(editor))
00059 {
00060 d->chooser->editorCombo->insertItem(i18n("System default (%1)").arg((*it)->name()));
00061 break;
00062 }
00063 }
00064
00065 for (KTrader::OfferList::Iterator it = offers.begin(); it != offers.end(); ++it)
00066 {
00067 d->chooser->editorCombo->insertItem((*it)->name());
00068 d->elements.append((*it)->desktopEntryName());
00069 }
00070 d->chooser->editorCombo->setCurrentItem(0);
00071 }
00072
00073 EditorChooser:: ~EditorChooser(){
00074 delete d;
00075 }
00076
00077 void EditorChooser::readAppSetting(const QString& postfix){
00078 KConfig *cfg=kapp->config();
00079 QString previousGroup=cfg->group();
00080 cfg->setGroup("KTEXTEDITOR:"+postfix);
00081 QString editor=cfg->readEntry("editor","");
00082 if (editor.isEmpty()) d->chooser->editorCombo->setCurrentItem(0);
00083 else
00084 {
00085 int idx=d->elements.findIndex(editor);
00086 idx=idx+1;
00087 d->chooser->editorCombo->setCurrentItem(idx);
00088 }
00089 cfg->setGroup(previousGroup);
00090 }
00091
00092 void EditorChooser::writeAppSetting(const QString& postfix){
00093 KConfig *cfg=kapp->config();
00094 QString previousGroup=cfg->group();
00095 cfg->setGroup("KTEXTEDITOR:"+postfix);
00096 cfg->writeEntry("DEVELOPER_INFO","NEVER TRY TO USE VALUES FROM THAT GROUP, THEY ARE SUBJECT TO CHANGES");
00097 cfg->writeEntry("editor",d->chooser->editorCombo->currentItem()==0?"":(*d->elements.at(d->chooser->editorCombo->currentItem()-1)));
00098 cfg->sync();
00099 cfg->setGroup(previousGroup);
00100
00101 }
00102
00103 KTextEditor::Document *EditorChooser::createDocument(QObject *parent,const char* name, const QString& postfix,bool fallBackToKatePart){
00104
00105 KTextEditor::Document *tmpDoc=0;
00106
00107 KConfig *cfg=kapp->config();
00108 QString previousGroup=cfg->group();
00109 cfg->setGroup("KTEXTEDITOR:"+postfix);
00110 QString editor=cfg->readEntry("editor","");
00111 cfg->setGroup(previousGroup);
00112 if (editor.isEmpty())
00113 {
00114 KConfig *config=new KConfig("default_components");
00115 config->setGroup("KTextEditor");
00116 editor = config->readEntry("embeddedEditor", "katepart");
00117 delete config;
00118 }
00119
00120 KService::Ptr serv=KService::serviceByDesktopName(editor);
00121 if (serv)
00122 {
00123 tmpDoc=KTextEditor::createDocument(serv->library().latin1(),parent,name);
00124 if (tmpDoc) return tmpDoc;
00125 }
00126 if (fallBackToKatePart)
00127 return KTextEditor::createDocument("libkatepart",parent,name);
00128
00129 return 0;
00130 }
00131
00132 KTextEditor::Editor *EditorChooser::createEditor(QWidget *parentWidget,QObject *parent,const char* widgetName,
00133 const char* name,const QString& postfix,bool fallBackToKatePart){
00134
00135 KTextEditor::Editor *tmpEd=0;
00136
00137 KConfig *cfg=kapp->config();
00138 QString previousGroup=cfg->group();
00139 cfg->setGroup("KTEXTEDITOR:"+postfix);
00140 QString editor=cfg->readEntry("editor","");
00141 cfg->setGroup(previousGroup);
00142 if (editor.isEmpty())
00143 {
00144 KConfig *config=new KConfig("default_components");
00145 config->setGroup("KTextEditor");
00146 editor = config->readEntry("embeddedEditor", "katepart");
00147 delete config;
00148 }
00149
00150 KService::Ptr serv=KService::serviceByDesktopName(editor);
00151 if (serv)
00152 {
00153 tmpEd=KTextEditor::createEditor(serv->library().latin1(),parentWidget,widgetName,parent,name);
00154 if (tmpEd) return tmpEd;
00155 }
00156 if (fallBackToKatePart)
00157 return KTextEditor::createEditor("libkatepart",parentWidget,widgetName,parent,name);
00158
00159 return 0;
00160 }
00161
This file is part of the documentation for kdelibs Version 3.1.0.