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.
386 lines
13 KiB
386 lines
13 KiB
/*
|
|
* Copyright (C) 1999-2002 Bernd Gehrmann
|
|
* bernd@mail.berlios.de
|
|
* Copyright (c) 2002-2004 Christian Loose <christian.loose@kdemail.net>
|
|
*
|
|
* 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.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "settingsdlg.h"
|
|
|
|
#include <qapplication.h>
|
|
#include <qcheckbox.h>
|
|
#include <qgrid.h>
|
|
#include <qgroupbox.h>
|
|
#include <qlabel.h>
|
|
#include <qlayout.h>
|
|
#include <qvbox.h>
|
|
#include <qwidgetlist.h>
|
|
#include <qhbuttongroup.h>
|
|
#include <qradiobutton.h>
|
|
#include <kbuttonbox.h>
|
|
#include <kcolorbutton.h>
|
|
#include <kconfig.h>
|
|
#include <kfontdialog.h>
|
|
#include <kglobal.h>
|
|
#include <kiconloader.h>
|
|
#include <klineedit.h>
|
|
#include <klocale.h>
|
|
#include <knuminput.h>
|
|
#include <kurlrequester.h>
|
|
|
|
#include "misc.h"
|
|
#include "cervisiasettings.h"
|
|
#include "settingsdlg_advanced.h"
|
|
|
|
|
|
namespace
|
|
{
|
|
// helper method to load icons for configuration pages
|
|
inline QPixmap LoadIcon(const char* iconName)
|
|
{
|
|
KIconLoader* loader = KGlobal::instance()->iconLoader();
|
|
return loader->loadIcon(QString::fromLatin1(iconName), KIcon::NoGroup,
|
|
KIcon::SizeMedium);
|
|
}
|
|
}
|
|
|
|
|
|
FontButton::FontButton( const QString &text, QWidget *parent, const char *name )
|
|
: QPushButton(text, parent, name)
|
|
{
|
|
connect( this, SIGNAL(clicked()), this, SLOT(chooseFont()) );
|
|
}
|
|
|
|
|
|
void FontButton::chooseFont()
|
|
{
|
|
QFont newFont(font());
|
|
|
|
if (KFontDialog::getFont(newFont, false, this) == QDialog::Rejected)
|
|
return;
|
|
|
|
setFont(newFont);
|
|
repaint(false);
|
|
}
|
|
|
|
|
|
SettingsDialog::SettingsDialog( KConfig *conf, QWidget *parent, const char *name )
|
|
: KDialogBase(KDialogBase::IconList, i18n("Configure Cervisia"),
|
|
KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Help,
|
|
KDialogBase::Ok,
|
|
parent, name, true)
|
|
{
|
|
config = conf;
|
|
|
|
// open cvs DCOP service configuration file
|
|
serviceConfig = new KConfig("cvsservicerc");
|
|
|
|
//
|
|
// General Options
|
|
//
|
|
addGeneralPage();
|
|
|
|
//
|
|
// Diff Options
|
|
//
|
|
addDiffPage();
|
|
|
|
//
|
|
// Status Options
|
|
//
|
|
addStatusPage();
|
|
|
|
//
|
|
// Advanced Options
|
|
//
|
|
addAdvancedPage();
|
|
|
|
//
|
|
// Look and Feel Options
|
|
//
|
|
addLookAndFeelPage();
|
|
|
|
readSettings();
|
|
|
|
setHelp("customization", "cervisia");
|
|
}
|
|
|
|
SettingsDialog::~SettingsDialog()
|
|
{
|
|
delete serviceConfig;
|
|
}
|
|
|
|
void SettingsDialog::readSettings()
|
|
{
|
|
// read entries from cvs DCOP service configuration
|
|
serviceConfig->setGroup("General");
|
|
cvspathedit->setURL(serviceConfig->readPathEntry("CVSPath", "cvs"));
|
|
m_advancedPage->kcfg_Compression->setValue(serviceConfig->readNumEntry(
|
|
"Compression", 0));
|
|
m_advancedPage->kcfg_UseSshAgent->setChecked(serviceConfig->readBoolEntry(
|
|
"UseSshAgent", false));
|
|
|
|
config->setGroup("General");
|
|
m_advancedPage->kcfg_Timeout->setValue(CervisiaSettings::timeout());
|
|
usernameedit->setText(config->readEntry("Username", Cervisia::UserName()));
|
|
|
|
contextedit->setValue((int)config->readUnsignedNumEntry("ContextLines", 65535));
|
|
tabwidthedit->setValue((int)config->readUnsignedNumEntry("TabWidth", 8));
|
|
diffoptedit->setText(config->readEntry("DiffOptions"));
|
|
extdiffedit->setURL(config->readPathEntry("ExternalDiff"));
|
|
remotestatusbox->setChecked(config->readBoolEntry("StatusForRemoteRepos", false));
|
|
localstatusbox->setChecked(config->readBoolEntry("StatusForLocalRepos", false));
|
|
|
|
// read configuration for look and feel page
|
|
config->setGroup("LookAndFeel");
|
|
m_protocolFontBox->setFont(config->readFontEntry("ProtocolFont"));
|
|
m_annotateFontBox->setFont(config->readFontEntry("AnnotateFont"));
|
|
m_diffFontBox->setFont(config->readFontEntry("DiffFont"));
|
|
m_changelogFontBox->setFont(config->readFontEntry("ChangeLogFont"));
|
|
m_splitterBox->setChecked(config->readBoolEntry("SplitHorizontally",true));
|
|
|
|
m_conflictButton->setColor(CervisiaSettings::conflictColor());
|
|
m_localChangeButton->setColor(CervisiaSettings::localChangeColor());
|
|
m_remoteChangeButton->setColor(CervisiaSettings::remoteChangeColor());
|
|
m_notInCvsButton->setColor(CervisiaSettings::notInCvsColor());
|
|
|
|
m_diffChangeButton->setColor(CervisiaSettings::diffChangeColor());
|
|
m_diffInsertButton->setColor(CervisiaSettings::diffInsertColor());
|
|
m_diffDeleteButton->setColor(CervisiaSettings::diffDeleteColor());
|
|
}
|
|
|
|
|
|
void SettingsDialog::writeSettings()
|
|
{
|
|
// write entries to cvs DCOP service configuration
|
|
serviceConfig->setGroup("General");
|
|
serviceConfig->writePathEntry("CVSPath", cvspathedit->url());
|
|
serviceConfig->writeEntry("Compression",
|
|
m_advancedPage->kcfg_Compression->value());
|
|
serviceConfig->writeEntry("UseSshAgent",
|
|
m_advancedPage->kcfg_UseSshAgent->isChecked());
|
|
|
|
// write to disk so other services can reparse the configuration
|
|
serviceConfig->sync();
|
|
|
|
config->setGroup("General");
|
|
CervisiaSettings::setTimeout(m_advancedPage->kcfg_Timeout->value());
|
|
config->writeEntry("Username", usernameedit->text());
|
|
|
|
config->writePathEntry("ExternalDiff", extdiffedit->url());
|
|
|
|
config->writeEntry("ContextLines", (unsigned)contextedit->value());
|
|
config->writeEntry("TabWidth", tabwidthedit->value());
|
|
config->writeEntry("DiffOptions", diffoptedit->text());
|
|
config->writeEntry("StatusForRemoteRepos", remotestatusbox->isChecked());
|
|
config->writeEntry("StatusForLocalRepos", localstatusbox->isChecked());
|
|
|
|
config->setGroup("LookAndFeel");
|
|
config->writeEntry("ProtocolFont", m_protocolFontBox->font());
|
|
config->writeEntry("AnnotateFont", m_annotateFontBox->font());
|
|
config->writeEntry("DiffFont", m_diffFontBox->font());
|
|
config->writeEntry("ChangeLogFont", m_changelogFontBox->font());
|
|
config->writeEntry("SplitHorizontally", m_splitterBox->isChecked());
|
|
|
|
CervisiaSettings::setConflictColor(m_conflictButton->color());
|
|
CervisiaSettings::setLocalChangeColor(m_localChangeButton->color());
|
|
CervisiaSettings::setRemoteChangeColor(m_remoteChangeButton->color());
|
|
CervisiaSettings::setNotInCvsColor(m_notInCvsButton->color());
|
|
CervisiaSettings::setDiffChangeColor(m_diffChangeButton->color());
|
|
CervisiaSettings::setDiffInsertColor(m_diffInsertButton->color());
|
|
CervisiaSettings::setDiffDeleteColor(m_diffDeleteButton->color());
|
|
|
|
// I'm not yet sure whether this is a hack or not :-)
|
|
QWidgetListIt it(*QApplication::allWidgets());
|
|
for (; it.current(); ++it)
|
|
{
|
|
QWidget *w = it.current();
|
|
if (w->inherits("ProtocolView"))
|
|
w->setFont(m_protocolFontBox->font());
|
|
if (w->inherits("AnnotateView"))
|
|
w->setFont(m_annotateFontBox->font());
|
|
if (w->inherits("DiffView"))
|
|
w->setFont(m_diffFontBox->font());
|
|
}
|
|
config->sync();
|
|
|
|
CervisiaSettings::writeConfig();
|
|
}
|
|
|
|
void SettingsDialog::done(int res)
|
|
{
|
|
if (res == Accepted)
|
|
writeSettings();
|
|
KDialogBase::done(res);
|
|
delete this;
|
|
}
|
|
|
|
|
|
/*
|
|
* Create a page for the general options
|
|
*/
|
|
void SettingsDialog::addGeneralPage()
|
|
{
|
|
QFrame* generalPage = addPage(i18n("General"), QString::null,
|
|
LoadIcon("misc"));
|
|
QVBoxLayout* layout = new QVBoxLayout(generalPage, 0, KDialog::spacingHint());
|
|
|
|
QLabel *usernamelabel = new QLabel( i18n("&User name for the change log editor:"), generalPage );
|
|
usernameedit = new KLineEdit(generalPage);
|
|
usernameedit->setFocus();
|
|
usernamelabel->setBuddy(usernameedit);
|
|
|
|
layout->addWidget(usernamelabel);
|
|
layout->addWidget(usernameedit);
|
|
|
|
QLabel *cvspathlabel = new QLabel( i18n("&Path to CVS executable, or 'cvs':"), generalPage );
|
|
cvspathedit = new KURLRequester(generalPage);
|
|
cvspathlabel->setBuddy(cvspathedit);
|
|
|
|
layout->addWidget(cvspathlabel);
|
|
layout->addWidget(cvspathedit);
|
|
|
|
layout->addStretch();
|
|
}
|
|
|
|
|
|
/*
|
|
* Create a page for the diff optionsw
|
|
*/
|
|
void SettingsDialog::addDiffPage()
|
|
{
|
|
QGrid *diffPage = addGridPage(2, QGrid::Horizontal, i18n("Diff Viewer"),
|
|
QString::null, LoadIcon("vcs_diff"));
|
|
|
|
QLabel *contextlabel = new QLabel( i18n("&Number of context lines in diff dialog:"), diffPage );
|
|
contextedit = new KIntNumInput( 0, diffPage );
|
|
contextedit->setRange(0, 65535, 1, false);
|
|
contextlabel->setBuddy(contextedit);
|
|
|
|
QLabel *diffoptlabel = new QLabel(i18n("Additional &options for cvs diff:"), diffPage);
|
|
diffoptedit = new KLineEdit(diffPage);
|
|
diffoptlabel->setBuddy(diffoptedit);
|
|
|
|
QLabel *tabwidthlabel = new QLabel(i18n("Tab &width in diff dialog:"), diffPage);
|
|
tabwidthedit = new KIntNumInput(0, diffPage);
|
|
tabwidthedit->setRange(1, 16, 1, false);
|
|
tabwidthlabel->setBuddy(tabwidthedit);
|
|
|
|
QLabel *extdifflabel = new QLabel(i18n("External diff &frontend:"), diffPage);
|
|
extdiffedit = new KURLRequester(diffPage);
|
|
extdifflabel->setBuddy(extdiffedit);
|
|
|
|
// dummy widget to take up the vertical space
|
|
new QWidget(diffPage);
|
|
}
|
|
|
|
|
|
/*
|
|
* Create a page for the status options
|
|
*/
|
|
void SettingsDialog::addStatusPage()
|
|
{
|
|
QVBox* statusPage = addVBoxPage(i18n("Status"), QString::null,
|
|
LoadIcon("fork"));
|
|
|
|
remotestatusbox = new QCheckBox(i18n("When opening a sandbox from a &remote repository,\n"
|
|
"start a File->Status command automatically"), statusPage);
|
|
localstatusbox = new QCheckBox(i18n("When opening a sandbox from a &local repository,\n"
|
|
"start a File->Status command automatically"), statusPage);
|
|
|
|
// dummy widget to take up the vertical space
|
|
new QWidget(statusPage);
|
|
}
|
|
|
|
|
|
/*
|
|
* Create a page for the advanced options
|
|
*/
|
|
void SettingsDialog::addAdvancedPage()
|
|
{
|
|
QVBox* frame = addVBoxPage(i18n("Advanced"), QString::null,
|
|
LoadIcon("configure"));
|
|
|
|
m_advancedPage = new AdvancedPage(frame);
|
|
m_advancedPage->kcfg_Timeout->setRange(0, 50000, 100, false);
|
|
m_advancedPage->kcfg_Compression->setRange(0, 9, 1, false);
|
|
}
|
|
|
|
|
|
/*
|
|
* Create a page for the look & feel options
|
|
*/
|
|
void SettingsDialog::addLookAndFeelPage()
|
|
{
|
|
QVBox* lookPage = addVBoxPage(i18n("Appearance"), QString::null,
|
|
LoadIcon("looknfeel"));
|
|
|
|
QGroupBox* fontGroupBox = new QGroupBox(4, Qt::Vertical, i18n("Fonts"),
|
|
lookPage);
|
|
fontGroupBox->setInsideSpacing(KDialog::spacingHint());
|
|
|
|
m_protocolFontBox = new FontButton(i18n("Font for &Protocol Window..."),
|
|
fontGroupBox);
|
|
m_annotateFontBox = new FontButton(i18n("Font for A&nnotate View..."),
|
|
fontGroupBox);
|
|
m_diffFontBox = new FontButton(i18n("Font for D&iff View..."),
|
|
fontGroupBox);
|
|
m_changelogFontBox = new FontButton(i18n("Font for ChangeLog View..."),
|
|
fontGroupBox);
|
|
|
|
QGroupBox* colorGroupBox = new QGroupBox(4, Qt::Horizontal,
|
|
i18n("Colors"), lookPage);
|
|
colorGroupBox->setColumns(4);
|
|
colorGroupBox->setInsideSpacing(KDialog::spacingHint());
|
|
|
|
QLabel* conflictLabel = new QLabel(i18n("Conflict:"), colorGroupBox);
|
|
m_conflictButton = new KColorButton(colorGroupBox);
|
|
conflictLabel->setBuddy(m_conflictButton);
|
|
|
|
QLabel* diffChangeLabel = new QLabel(i18n("Diff change:"), colorGroupBox);
|
|
m_diffChangeButton = new KColorButton(colorGroupBox);
|
|
diffChangeLabel->setBuddy(m_diffChangeButton);
|
|
|
|
QLabel* localChangeLabel = new QLabel(i18n("Local change:"), colorGroupBox);
|
|
m_localChangeButton = new KColorButton(colorGroupBox);
|
|
localChangeLabel->setBuddy(m_localChangeButton);
|
|
|
|
QLabel* diffInsertLabel = new QLabel(i18n("Diff insertion:"), colorGroupBox);
|
|
m_diffInsertButton = new KColorButton(colorGroupBox);
|
|
diffInsertLabel->setBuddy(m_diffInsertButton);
|
|
|
|
QLabel* remoteChangeLabel = new QLabel(i18n("Remote change:"), colorGroupBox);
|
|
m_remoteChangeButton = new KColorButton(colorGroupBox);
|
|
remoteChangeLabel->setBuddy( m_remoteChangeButton );
|
|
|
|
QLabel* diffDeleteLabel = new QLabel(i18n("Diff deletion:"), colorGroupBox);
|
|
m_diffDeleteButton = new KColorButton(colorGroupBox);
|
|
diffDeleteLabel->setBuddy(m_diffDeleteButton);
|
|
|
|
QLabel* notInCvsLabel = new QLabel(i18n("Not in cvs:"), colorGroupBox);
|
|
m_notInCvsButton = new KColorButton(colorGroupBox);
|
|
notInCvsLabel->setBuddy(m_notInCvsButton);
|
|
|
|
m_splitterBox = new QCheckBox(i18n("Split main window &horizontally"), lookPage);
|
|
}
|
|
|
|
#include "settingsdlg.moc"
|
|
|
|
|
|
// Local Variables:
|
|
// c-basic-offset: 4
|
|
// End:
|