interfaces
editorchooser.cpp
Go to the documentation of this file.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->readPathEntry("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->readPathEntry("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->writePathEntry("editor", (d->chooser->editorCombo->currentItem()==0) ?
00098 QString::null : (*d->elements.at(d->chooser->editorCombo->currentItem()-1)));
00099 cfg->sync();
00100 cfg->setGroup(previousGroup);
00101
00102 }
00103
00104 KTextEditor::Document *EditorChooser::createDocument(QObject *parent,const char* name, const QString& postfix,bool fallBackToKatePart){
00105
00106 KTextEditor::Document *tmpDoc=0;
00107
00108 KConfig *cfg=kapp->config();
00109 QString previousGroup=cfg->group();
00110 cfg->setGroup("KTEXTEDITOR:"+postfix);
00111 QString editor=cfg->readPathEntry("editor");
00112 cfg->setGroup(previousGroup);
00113 if (editor.isEmpty())
00114 {
00115 KConfig *config=new KConfig("default_components");
00116 config->setGroup("KTextEditor");
00117 editor = config->readPathEntry("embeddedEditor", "katepart");
00118 delete config;
00119 }
00120
00121 KService::Ptr serv=KService::serviceByDesktopName(editor);
00122 if (serv)
00123 {
00124 tmpDoc=KTextEditor::createDocument(serv->library().latin1(),parent,name);
00125 if (tmpDoc) return tmpDoc;
00126 }
00127 if (fallBackToKatePart)
00128 return KTextEditor::createDocument("libkatepart",parent,name);
00129
00130 return 0;
00131 }
00132
00133 KTextEditor::Editor *EditorChooser::createEditor(QWidget *parentWidget,QObject *parent,const char* widgetName,
00134 const char* name,const QString& postfix,bool fallBackToKatePart){
00135
00136 KTextEditor::Editor *tmpEd=0;
00137
00138 KConfig *cfg=kapp->config();
00139 QString previousGroup=cfg->group();
00140 cfg->setGroup("KTEXTEDITOR:"+postfix);
00141 QString editor=cfg->readPathEntry("editor");
00142 cfg->setGroup(previousGroup);
00143 if (editor.isEmpty())
00144 {
00145 KConfig *config=new KConfig("default_components");
00146 config->setGroup("KTextEditor");
00147 editor = config->readPathEntry("embeddedEditor", "katepart");
00148 delete config;
00149 }
00150
00151 KService::Ptr serv=KService::serviceByDesktopName(editor);
00152 if (serv)
00153 {
00154 tmpEd=KTextEditor::createEditor(serv->library().latin1(),parentWidget,widgetName,parent,name);
00155 if (tmpEd) return tmpEd;
00156 }
00157 if (fallBackToKatePart)
00158 return KTextEditor::createEditor("libkatepart",parentWidget,widgetName,parent,name);
00159
00160 return 0;
00161 }
00162