You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/interfaces/ktexteditor/editorchooser.cpp

163 lines
4.5 KiB

#include <editorchooser.h>
#include <editorchooser.moc>
#include <qcombobox.h>
#include <ktrader.h>
#include <kconfig.h>
#include <qstringlist.h>
#include <kservice.h>
#include <klocale.h>
#include <qlabel.h>
#include <kapplication.h>
#include <qlayout.h>
#include "editorchooser_ui.h"
using namespace KTextEditor;
namespace KTextEditor
{
class PrivateEditorChooser
{
public:
PrivateEditorChooser()
{
}
~PrivateEditorChooser(){}
// Data Members
EditorChooser_UI *chooser;
QStringList ElementNames;
QStringList elements;
};
}
EditorChooser::EditorChooser(QWidget *parent,const char *name) :
QWidget (parent,name)
{
d = new PrivateEditorChooser ();
// sizemanagment
QGridLayout *grid = new QGridLayout( this, 1, 1 );
d->chooser = new EditorChooser_UI (this, name);
grid->addWidget( d->chooser, 0, 0);
KTrader::OfferList offers = KTrader::self()->query("text/plain", "'KTextEditor/Document' in ServiceTypes");
KConfig *config=new KConfig("default_components");
config->setGroup("KTextEditor");
QString editor = config->readPathEntry("embeddedEditor");
if (editor.isEmpty()) editor="katepart";
for (KTrader::OfferList::Iterator it = offers.begin(); it != offers.end(); ++it)
{
if ((*it)->desktopEntryName().contains(editor))
{
d->chooser->editorCombo->insertItem(i18n("System Default (%1)").arg((*it)->name()));
break;
}
}
for (KTrader::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 QString& postfix){
KConfig *cfg=kapp->config();
QString previousGroup=cfg->group();
cfg->setGroup("KTEXTEDITOR:"+postfix);
QString 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 QString& postfix){
KConfig *cfg=kapp->config();
QString 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) ?
QString::null : (*d->elements.at(d->chooser->editorCombo->currentItem()-1)));
cfg->sync();
cfg->setGroup(previousGroup);
}
KTextEditor::Document *EditorChooser::createDocument(QObject *parent,const char* name, const QString& postfix,bool fallBackToKatePart){
KTextEditor::Document *tmpDoc=0;
KConfig *cfg=kapp->config();
QString previousGroup=cfg->group();
cfg->setGroup("KTEXTEDITOR:"+postfix);
QString editor=cfg->readPathEntry("editor");
cfg->setGroup(previousGroup);
if (editor.isEmpty())
{
KConfig *config=new KConfig("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(QWidget *parentWidget,QObject *parent,const char* widgetName,
const char* name,const QString& postfix,bool fallBackToKatePart){
KTextEditor::Editor *tmpEd=0;
KConfig *cfg=kapp->config();
QString previousGroup=cfg->group();
cfg->setGroup("KTEXTEDITOR:"+postfix);
QString editor=cfg->readPathEntry("editor");
cfg->setGroup(previousGroup);
if (editor.isEmpty())
{
KConfig *config=new KConfig("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;
}