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.
kile/src/kile/kileconfigdialog.cpp

358 lines
10 KiB

/***************************************************************************
begin : Wed Jun 6 2001
copyright : (C) 2003 by Jeroen Wijnhout
(C) 2005-2007 by Holger Danielsson
email : Jeroen.Wijnhout@kdemail.net
holger.danielsson@versanet.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
// 2005-12-02 dani
// - put configuration of Kile and Kate together in one dialog
// - items are shown as a tree list
// - encoding config page and spelling page are removed,
// because settings are also avaiblable with Kate
// - tqgeometry of the dialog are saved and restored, because
// the initial values may be bad in some languages
// 2007-03-17 dani
// - add support for auto insert $
// - move graphics config to a separate page
#include "kileconfigdialog.h"
#include <tqvbox.h>
#include <tqlayout.h>
#include <tqtextcodec.h>
#include <tdeversion.h>
#include <klocale.h>
#include <ksconfig.h>
#include <kiconloader.h>
#include "kiletoolmanager.h"
#include "kiletoolconfigwidget.h"
#include "kileviewmanager.h"
#include "helpconfigwidget.h"
#include "latexconfigwidget.h"
#include "generalconfigwidget.h"
#include "previewconfigwidget.h"
#include "scriptingconfigwidget.h"
#include "kileconfig.h"
#include "kileinfo.h"
#include "kileedit.h"
#include "kiledebug.h"
namespace KileDialog
{
Config::Config(KConfig *config, KileInfo *ki, TQWidget* parent)
: KDialogBase( KDialogBase::TreeList, TQt::WStyle_DialogBorder,
parent, "kileconfiguration", true, i18n("Configure"), Ok|Cancel, Ok ),
m_config(config),
m_ki(ki)
{
m_config->sync();
// we need a dialog manager
m_manager = new KConfigDialogManager(this,KileConfig::self());
setShowIconsInTreeList(true);
addConfigFolder(i18n("Kile"),"kile");
addConfigFolder(i18n("LaTeX"),"tex");
addConfigFolder(i18n("Tools"),"gear");
addConfigFolder(i18n("Editor"),"edit");
// setup all configuration pages
setupGeneralOptions();
setupCodeCompletion(); // complete configuration (dani)
setupHelp();
setupScripting();
setupLatex();
setupEnvironment();
setupGraphics();
setupStructure();
setupSymbolView();
setupTools();
setupQuickPreview(); // QuickPreview (dani)
setupEditor();
enableButtonSeparator(true);
// calculate size for opening
if ( ! m_config->hasGroup("KileConfigDialog") )
incInitialSize(TQSize(50,0));
else
setInitialSize( configDialogSize("KileConfigDialog") );
// setup connections
//connect(m_manager, TQT_SIGNAL(widgetModified()), this, TQT_SLOT(slotWidgetModified()));
connect(this, TQT_SIGNAL(okClicked()), m_manager, TQT_SLOT(updateSettings()));
}
Config::~Config()
{
saveDialogSize("KileConfigDialog");
delete m_manager;
}
void Config::show()
{
if ( KileConfig::unfoldConfigTree() )
unfoldTreeList();
m_manager->updateWidgets();
KDialogBase::show();
}
//////////////////// add a new folder ////////////////////
void Config::addConfigFolder(const TQString &section,const TQString &icon)
{
TQStringList path;
path << section;
#if TDE_VERSION >= KDE_MAKE_VERSION(3,3,0)
setFolderIcon(path, SmallIcon(icon, KIcon::SizeSmallMedium));
#else
setFolderIcon(path, SmallIcon(icon));
#endif
}
//////////////////// add a new page ////////////////////
void Config::addConfigPage(TQWidget *page,
const TQString &sectionName,const TQString &itemName,
const TQString &pixmapName, const TQString &header,
bool addSpacer)
{
KILE_DEBUG() << "slot: add config page item=" << itemName << endl;
// add page
TQStringList path;
path << sectionName << itemName;
TQVBox *vbox = addVBoxPage(path, header,
#if TDE_VERSION >= KDE_MAKE_VERSION(3,3,0)
SmallIcon(pixmapName,KIcon::SizeSmallMedium)
#else
SmallIcon(pixmapName)
#endif
);
vbox->setSpacing(0);
vbox->setMargin(0);
page->reparent(((TQWidget*)vbox),0,TQPoint());
if ( addSpacer )
{
TQFrame *spacer = new TQFrame(vbox);
vbox->setStretchFactor(spacer,1);
}
// add to the dialog manager
m_manager->addWidget(page);
}
//////////////////// General Options ////////////////////
void Config::setupGeneralOptions()
{
generalPage = new KileWidgetGeneralConfig(0, "LaTeX");
addConfigPage(generalPage,i18n("Kile"),i18n("General"),"configure",i18n("General Settings"));
}
//////////////////// Tools Configuration ////////////////////
void Config::setupTools()
{
toolPage = new KileWidget::ToolConfig(m_ki->toolManager(), 0);
addConfigPage(toolPage,i18n("Tools"),i18n("Build"),"launch",i18n("Build"),false);
}
//////////////////// Scripting ////////////////////
void Config::setupScripting()
{
scriptingPage = new KileWidgetScriptingConfig(this, "Scripting");
addConfigPage(scriptingPage,i18n("Kile"),i18n("Scripting"),"exec",i18n("Scripting Support"));
}
//////////////////// LaTeX specific editing options ////////////////////
//////////////////// Complete configuration (dani) ////////////////////
void Config::setupCodeCompletion()
{
completePage = new ConfigCodeCompletion(m_config,m_ki->logWidget());
completePage->readConfig();
addConfigPage(completePage,i18n("Kile"),i18n("Complete"),"source",i18n("Code Completion"));
}
//////////////////// QuickPreview (dani) ////////////////////
void Config::setupQuickPreview()
{
previewPage = new KileWidgetPreviewConfig(m_config,m_ki->quickPreview(),0);
previewPage->readConfig();
addConfigPage(previewPage,i18n("Tools"),i18n("Preview"),"preview",i18n("Quick Preview"));
}
void Config::setupHelp()
{
helpPage = new KileWidgetHelpConfig(0);
helpPage->setHelp(m_ki->help());
addConfigPage(helpPage,i18n("Kile"),i18n("Help"),"help");
}
//////////////////// LaTeX environments ////////////////////
void Config::setupLatex()
{
latexPage = new KileWidgetLatexConfig(0, "LaTeX");
latexPage->kcfg_DoubleQuotes->insertStringList( m_ki->editorExtension()->doubleQuotesList() );
latexPage->setLatexCommands(m_config,m_ki->latexCommands());
addConfigPage(latexPage,i18n("LaTeX"),i18n("General"),"configure");
}
void Config::setupEnvironment()
{
envPage = new KileWidgetEnvironmentConfig(0, "LaTeX");
addConfigPage(envPage,i18n("LaTeX"),i18n("Environments"),"environment");
}
void Config::setupGraphics()
{
graphicsPage = new KileWidgetGraphicsConfig(0, "Graphics");
graphicsPage->m_lbImagemagick->setText( ( KileConfig::imagemagick() ) ? i18n("installed") : i18n("not installed") );
addConfigPage(graphicsPage,i18n("LaTeX"),i18n("Graphics"),"graphicspage");
}
void Config::setupStructure()
{
structurePage = new KileWidgetStructureViewConfig(0, "StructureView");
addConfigPage(structurePage,i18n("LaTeX"),i18n("Structure View"),"view_tree");
}
void Config::setupSymbolView()
{
symbolViewPage = new KileWidgetSymbolViewConfig(0, "SymbolView");
addConfigPage(symbolViewPage,i18n("LaTeX"),i18n("Symbol View"),"math0");
}
//////////////////// Editor ////////////////////
void Config::setupEditor()
{
Kate::View *view = m_ki->viewManager()->currentTextView();
m_editorOpened = ( view != 0L );
m_editorSettingsChanged = false;
if ( ! m_editorOpened )
return;
editorPages.setAutoDelete(false);
editorPages.clear();
KTextEditor::ConfigInterfaceExtension *iface;
iface = dynamic_cast<KTextEditor::ConfigInterfaceExtension *>( view->getDoc() );
TQStringList path;
for (uint i=0; i<iface->configPages(); i++)
{
path.clear();
path << i18n("Editor") << iface->configPageName(i);
// create a new vbox page and add the config page
#if TDE_VERSION >= KDE_MAKE_VERSION(3,3,0)
TQVBox *page = addVBoxPage(path,iface->configPageFullName(i), iface->configPagePixmap(i,KIcon::SizeSmallMedium) );
#else
TQVBox *page = addVBoxPage(path,iface->configPageFullName(i), iface->configPagePixmap(i) );
#endif
KTextEditor::ConfigPage *configPage = iface->configPage(i,page);
connect( configPage, TQT_SIGNAL(changed()), this, TQT_SLOT(slotChanged()) );
editorPages.append(configPage);
}
}
//////////////////// encoding ////////////////////
TQString Config::readKateEncoding()
{
m_config->setGroup("Kate Document Defaults");
return m_config->readEntry("Encoding",TQString());
}
void Config::syncKileEncoding()
{
TQString enc = readKateEncoding();
if ( enc.isEmpty() )
enc = TQString::tqfromLatin1(TQTextCodec::codecForLocale()->name());
KileConfig::setDefaultEncoding( enc );
}
//////////////////// slots ////////////////////
void Config::slotOk()
{
KILE_DEBUG() << " slot ok (" << m_manager->hasChanged() << "," << m_editorSettingsChanged << ")" << endl;
// editor settings are only available, when at least one document is opened
if ( m_editorOpened && m_editorSettingsChanged )
{
for (uint i=0; i<editorPages.count(); i++)
editorPages.at(i)->apply();
m_ki->viewManager()->currentTextView()->getDoc()->writeConfig();
// take Kate's encoding for Kile
syncKileEncoding();
}
// Kile settings
toolPage->writeConfig(); // config all tools
completePage->writeConfig(); // Complete configuration (dani)
previewPage->writeConfig(); // Quick Preview (dani)
m_config->sync();
emit okClicked(); // Otherwise, the KConfigXT machine doesn't start...
// oder m_manager->updateSettings();
accept();
}
void Config::slotCancel()
{
KILE_DEBUG() << " slot cancel" << endl;
m_config->rollback();
accept();
}
void Config::slotChanged()
{
KILE_DEBUG() << " slot changed" << endl;
m_editorSettingsChanged = true;
}
/*
void Config::slotWidgetModified()
{
KILE_DEBUG() << "slot: widget modified --> " << m_manager->hasChanged() << endl;
//emit widgetModified();
}
*/
}
#include "kileconfigdialog.moc"