Add option to wrap commit message at 72 chars and make it default.

Reorganize the settings model in the VCS base plugin, store model in the plugin for better delayed initialization/update.
This commit is contained in:
Friedemann Kleint
2009-03-20 14:20:28 +01:00
parent 361a70ab0e
commit 0ada412ee6
10 changed files with 178 additions and 59 deletions

View File

@@ -44,6 +44,7 @@
#include <QtGui/QSpacerItem> #include <QtGui/QSpacerItem>
enum { debug = 0 }; enum { debug = 0 };
enum { defaultLineWidth = 72 };
namespace Core { namespace Core {
namespace Utils { namespace Utils {
@@ -131,6 +132,7 @@ struct SubmitEditorWidgetPrivate
typedef QPair<QString, QLineEdit*> FieldEntry; typedef QPair<QString, QLineEdit*> FieldEntry;
QList<FieldEntry> m_fieldEntries; QList<FieldEntry> m_fieldEntries;
QSignalMapper *m_fieldSignalMapper; QSignalMapper *m_fieldSignalMapper;
int m_lineWidth;
}; };
SubmitEditorWidgetPrivate::SubmitEditorWidgetPrivate() : SubmitEditorWidgetPrivate::SubmitEditorWidgetPrivate() :
@@ -139,7 +141,8 @@ SubmitEditorWidgetPrivate::SubmitEditorWidgetPrivate() :
m_fileNameColumn(1), m_fileNameColumn(1),
m_activatedRow(-1), m_activatedRow(-1),
m_fieldLayout(0), m_fieldLayout(0),
m_fieldSignalMapper(0) m_fieldSignalMapper(0),
m_lineWidth(defaultLineWidth)
{ {
} }
@@ -149,6 +152,7 @@ SubmitEditorWidget::SubmitEditorWidget(QWidget *parent) :
{ {
m_d->m_ui.setupUi(this); m_d->m_ui.setupUi(this);
m_d->m_ui.description->setContextMenuPolicy(Qt::CustomContextMenu); m_d->m_ui.description->setContextMenuPolicy(Qt::CustomContextMenu);
m_d->m_ui.description->setLineWrapMode(QTextEdit::NoWrap);
connect(m_d->m_ui.description, SIGNAL(customContextMenuRequested(QPoint)), connect(m_d->m_ui.description, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(editorCustomContextMenuRequested(QPoint))); this, SLOT(editorCustomContextMenuRequested(QPoint)));
@@ -189,7 +193,7 @@ void SubmitEditorWidget::registerActions(QAction *editorUndoAction, QAction *ed
int count = 0; int count = 0;
if (const QAbstractItemModel *model = m_d->m_ui.fileView->model()) if (const QAbstractItemModel *model = m_d->m_ui.fileView->model())
count = model->rowCount(); count = model->rowCount();
qDebug() << submitAction << count << "items" << m_d->m_filesChecked; qDebug() << Q_FUNC_INFO << submitAction << count << "items" << m_d->m_filesChecked;
} }
submitAction->setEnabled(m_d->m_filesChecked); submitAction->setEnabled(m_d->m_filesChecked);
connect(this, SIGNAL(fileCheckStateChanged(bool)), submitAction, SLOT(setEnabled(bool))); connect(this, SIGNAL(fileCheckStateChanged(bool)), submitAction, SLOT(setEnabled(bool)));
@@ -255,6 +259,39 @@ void SubmitEditorWidget::setDescriptionText(const QString &text)
m_d->m_ui.description->setPlainText(text); m_d->m_ui.description->setPlainText(text);
} }
bool SubmitEditorWidget::lineWrap() const
{
return m_d->m_ui.description->lineWrapMode() != QTextEdit::NoWrap;
}
void SubmitEditorWidget::setLineWrap(bool v)
{
if (debug)
qDebug() << Q_FUNC_INFO << v;
if (v) {
m_d->m_ui.description->setLineWrapColumnOrWidth(m_d->m_lineWidth);
m_d->m_ui.description->setLineWrapMode(QTextEdit::FixedColumnWidth);
} else {
m_d->m_ui.description->setLineWrapMode(QTextEdit::NoWrap);
}
}
int SubmitEditorWidget::lineWrapWidth() const
{
return m_d->m_lineWidth;
}
void SubmitEditorWidget::setLineWrapWidth(int v)
{
if (debug)
qDebug() << Q_FUNC_INFO << v << lineWrap();
if (m_d->m_lineWidth == v)
return;
m_d->m_lineWidth = v;
if (lineWrap())
m_d->m_ui.description->setLineWrapColumnOrWidth(v);
}
int SubmitEditorWidget::fileNameColumn() const int SubmitEditorWidget::fileNameColumn() const
{ {
return m_d->m_fileNameColumn; return m_d->m_fileNameColumn;
@@ -332,7 +369,7 @@ QStringList SubmitEditorWidget::checkedFiles() const
return rc; return rc;
} }
QPlainTextEdit *SubmitEditorWidget::descriptionEdit() const QTextEdit *SubmitEditorWidget::descriptionEdit() const
{ {
return m_d->m_ui.description; return m_d->m_ui.description;
} }

View File

@@ -36,7 +36,7 @@
#include <QtGui/QAbstractItemView> #include <QtGui/QAbstractItemView>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QPlainTextEdit; class QTextEdit;
class QListWidgetItem; class QListWidgetItem;
class QAction; class QAction;
class QAbstractItemModel; class QAbstractItemModel;
@@ -74,6 +74,8 @@ class QWORKBENCH_UTILS_EXPORT SubmitEditorWidget : public QWidget
Q_PROPERTY(QString descriptionText READ descriptionText WRITE setDescriptionText DESIGNABLE true) Q_PROPERTY(QString descriptionText READ descriptionText WRITE setDescriptionText DESIGNABLE true)
Q_PROPERTY(int fileNameColumn READ fileNameColumn WRITE setFileNameColumn DESIGNABLE false) Q_PROPERTY(int fileNameColumn READ fileNameColumn WRITE setFileNameColumn DESIGNABLE false)
Q_PROPERTY(QAbstractItemView::SelectionMode fileListSelectionMode READ fileListSelectionMode WRITE setFileListSelectionMode DESIGNABLE true) Q_PROPERTY(QAbstractItemView::SelectionMode fileListSelectionMode READ fileListSelectionMode WRITE setFileListSelectionMode DESIGNABLE true)
Q_PROPERTY(bool lineWrap READ lineWrap WRITE setLineWrap DESIGNABLE true)
Q_PROPERTY(int lineWrapWidth READ lineWrapWidth WRITE setLineWrapWidth DESIGNABLE true)
public: public:
explicit SubmitEditorWidget(QWidget *parent = 0); explicit SubmitEditorWidget(QWidget *parent = 0);
virtual ~SubmitEditorWidget(); virtual ~SubmitEditorWidget();
@@ -91,6 +93,12 @@ public:
int fileNameColumn() const; int fileNameColumn() const;
void setFileNameColumn(int c); void setFileNameColumn(int c);
bool lineWrap() const;
void setLineWrap(bool);
int lineWrapWidth() const;
void setLineWrapWidth(int);
QAbstractItemView::SelectionMode fileListSelectionMode() const; QAbstractItemView::SelectionMode fileListSelectionMode() const;
void setFileListSelectionMode(QAbstractItemView::SelectionMode sm); void setFileListSelectionMode(QAbstractItemView::SelectionMode sm);
@@ -103,7 +111,7 @@ public:
// Selected files for diff // Selected files for diff
QStringList selectedFiles() const; QStringList selectedFiles() const;
QPlainTextEdit *descriptionEdit() const; QTextEdit *descriptionEdit() const;
void addDescriptionEditContextMenuAction(QAction *a); void addDescriptionEditContextMenuAction(QAction *a);
void insertDescriptionEditContextMenuAction(int pos, QAction *a); void insertDescriptionEditContextMenuAction(int pos, QAction *a);

View File

@@ -24,7 +24,11 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
<widget class="QPlainTextEdit" name="description"/> <widget class="QTextEdit" name="description">
<property name="acceptRichText">
<bool>false</bool>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@@ -28,7 +28,6 @@
**************************************************************************/ **************************************************************************/
#include "nicknamedialog.h" #include "nicknamedialog.h"
#include "vcsbaseplugin.h"
#include "ui_nicknamedialog.h" #include "ui_nicknamedialog.h"
#include <QtCore/QDebug> #include <QtCore/QDebug>
@@ -120,13 +119,18 @@ QString NickNameEntry::nickName() const
QList<QStandardItem *> NickNameEntry::toModelRow() const QList<QStandardItem *> NickNameEntry::toModelRow() const
{ {
const QVariant nickNameData = nickName(); const QVariant nickNameData = nickName();
const Qt::ItemFlags flags = Qt::ItemIsSelectable|Qt::ItemIsEnabled;
QStandardItem *i1 = new QStandardItem(name); QStandardItem *i1 = new QStandardItem(name);
i1->setFlags(flags);
i1->setData(nickNameData, NickNameRole); i1->setData(nickNameData, NickNameRole);
QStandardItem *i2 = new QStandardItem(email); QStandardItem *i2 = new QStandardItem(email);
i1->setFlags(flags);
i2->setData(nickNameData, NickNameRole); i2->setData(nickNameData, NickNameRole);
QStandardItem *i3 = new QStandardItem(aliasName); QStandardItem *i3 = new QStandardItem(aliasName);
i3->setFlags(flags);
i3->setData(nickNameData, NickNameRole); i3->setData(nickNameData, NickNameRole);
QStandardItem *i4 = new QStandardItem(aliasEmail); QStandardItem *i4 = new QStandardItem(aliasEmail);
i4->setFlags(flags);
i4->setData(nickNameData, NickNameRole); i4->setData(nickNameData, NickNameRole);
QList<QStandardItem *> row; QList<QStandardItem *> row;
row << i1 << i2 << i3 << i4; row << i1 << i2 << i3 << i4;
@@ -145,31 +149,10 @@ QDebug operator<<(QDebug d, const NickNameEntry &e)
return d; return d;
} }
// Globally cached model tacked onto the plugin. NickNameDialog::NickNameDialog(QStandardItemModel *model, QWidget *parent) :
static QStandardItemModel *nickModel()
{
static QStandardItemModel *model = 0;
if (!model) {
model = new QStandardItemModel(VCSBasePlugin::instance());
QStringList headers;
headers << NickNameDialog::tr("Name")
<< NickNameDialog::tr("E-mail")
<< NickNameDialog::tr("Alias")
<< NickNameDialog::tr("Alias e-mail");
model->setHorizontalHeaderLabels(headers);
}
return model;
}
static inline void clearModel(QStandardItemModel *model)
{
if (const int rowCount = model->rowCount())
model->removeRows(0, rowCount);
}
NickNameDialog::NickNameDialog(QWidget *parent) :
QDialog(parent), QDialog(parent),
m_ui(new Ui::NickNameDialog), m_ui(new Ui::NickNameDialog),
m_model(model),
m_filterModel(new QSortFilterProxyModel(this)) m_filterModel(new QSortFilterProxyModel(this))
{ {
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
@@ -177,7 +160,7 @@ NickNameDialog::NickNameDialog(QWidget *parent) :
okButton()->setEnabled(false); okButton()->setEnabled(false);
// Populate model and grow tree to accommodate it // Populate model and grow tree to accommodate it
m_filterModel->setSourceModel(nickModel()); m_filterModel->setSourceModel(model);
m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
m_ui->filterTreeView->setModel(m_filterModel); m_ui->filterTreeView->setModel(m_filterModel);
const int columnCount = m_filterModel->columnCount(); const int columnCount = m_filterModel->columnCount();
@@ -221,26 +204,35 @@ QString NickNameDialog::nickName() const
const QModelIndex index = m_ui->filterTreeView->selectionModel()->currentIndex(); const QModelIndex index = m_ui->filterTreeView->selectionModel()->currentIndex();
if (index.isValid()) { if (index.isValid()) {
const QModelIndex sourceIndex = m_filterModel->mapToSource(index); const QModelIndex sourceIndex = m_filterModel->mapToSource(index);
if (const QStandardItem *item = nickModel()->itemFromIndex(sourceIndex)) if (const QStandardItem *item = m_model->itemFromIndex(sourceIndex))
return NickNameEntry::nickNameOf(item); return NickNameEntry::nickNameOf(item);
} }
return QString(); return QString();
} }
void NickNameDialog::clearNickNames() QStandardItemModel *NickNameDialog::createModel(QObject *parent)
{ {
clearModel(nickModel()); QStandardItemModel *model = new QStandardItemModel(parent);
QStringList headers;
headers << tr("Name") << tr("E-mail")
<< tr("Alias") << tr("Alias e-mail");
model->setHorizontalHeaderLabels(headers);
return model;
} }
bool NickNameDialog::readNickNamesFromMailCapFile(const QString &fileName, QString *errorMessage) bool NickNameDialog::populateModelFromMailCapFile(const QString &fileName,
QStandardItemModel *model,
QString *errorMessage)
{ {
if (const int rowCount = model->rowCount())
model->removeRows(0, rowCount);
if (fileName.isEmpty())
return true;
QFile file(fileName); QFile file(fileName);
if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) { if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) {
*errorMessage = tr("Cannot open '%1': %2").arg(fileName, file.errorString()); *errorMessage = tr("Cannot open '%1': %2").arg(fileName, file.errorString());
return false; return false;
} }
QStandardItemModel *model = nickModel();
clearModel(model);
// Split into lines and read // Split into lines and read
NickNameEntry entry; NickNameEntry entry;
const QStringList lines = QString::fromUtf8(file.readAll()).trimmed().split(QLatin1Char('\n')); const QStringList lines = QString::fromUtf8(file.readAll()).trimmed().split(QLatin1Char('\n'));
@@ -256,10 +248,9 @@ bool NickNameDialog::readNickNamesFromMailCapFile(const QString &fileName, QStri
return true; return true;
} }
QStringList NickNameDialog::nickNameList() QStringList NickNameDialog::nickNameList(const QStandardItemModel *model)
{ {
QStringList rc; QStringList rc;
const QStandardItemModel *model = nickModel();
const int rowCount = model->rowCount(); const int rowCount = model->rowCount();
for (int r = 0; r < rowCount; r++) for (int r = 0; r < rowCount; r++)
rc.push_back(NickNameEntry::nickNameOf(model->item(r, 0))); rc.push_back(NickNameEntry::nickNameOf(model->item(r, 0)));

View File

@@ -37,6 +37,7 @@ namespace Ui {
class NickNameDialog; class NickNameDialog;
} }
class QSortFilterProxyModel; class QSortFilterProxyModel;
class QStandardItemModel;
class QModelIndex; class QModelIndex;
class QPushButton; class QPushButton;
QT_END_NAMESPACE QT_END_NAMESPACE
@@ -48,23 +49,24 @@ namespace Internal {
* mail cap file, consisting of 4 columns: * mail cap file, consisting of 4 columns:
* "Name Mail [AliasName [AliasMail]]". * "Name Mail [AliasName [AliasMail]]".
* The names can be used for insertion into "RevBy:" fields; aliases will * The names can be used for insertion into "RevBy:" fields; aliases will
* be preferred. The static functions to read/clear the mail map * be preferred. */
* files access a global model which is shared by all instances of the
* dialog to achieve updating. */
class NickNameDialog : public QDialog { class NickNameDialog : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
explicit NickNameDialog(QWidget *parent = 0); explicit NickNameDialog(QStandardItemModel *model, QWidget *parent = 0);
virtual ~NickNameDialog(); virtual ~NickNameDialog();
QString nickName() const; QString nickName() const;
// Fill/clear the global nick name cache // Utilities to initialize/populate the model
static bool readNickNamesFromMailCapFile(const QString &file, QString *errorMessage); static QStandardItemModel *createModel(QObject *parent);
static void clearNickNames(); static bool populateModelFromMailCapFile(const QString &file,
QStandardItemModel *model,
QString *errorMessage);
// Return a list for a completer on the field line edits // Return a list for a completer on the field line edits
static QStringList nickNameList(); static QStringList nickNameList(const QStandardItemModel *model);
private slots: private slots:
void slotCurrentItemChanged(const QModelIndex &); void slotCurrentItemChanged(const QModelIndex &);
@@ -74,7 +76,9 @@ private:
QPushButton *okButton() const; QPushButton *okButton() const;
Ui::NickNameDialog *m_ui; Ui::NickNameDialog *m_ui;
QStandardItemModel *m_model;
QSortFilterProxyModel *m_filterModel; QSortFilterProxyModel *m_filterModel;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -30,6 +30,7 @@
#include "vcsbaseplugin.h" #include "vcsbaseplugin.h"
#include "diffhighlighter.h" #include "diffhighlighter.h"
#include "vcsbasesettingspage.h" #include "vcsbasesettingspage.h"
#include "nicknamedialog.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/coreconstants.h> #include <coreplugin/coreconstants.h>
@@ -37,6 +38,7 @@
#include <coreplugin/mimedatabase.h> #include <coreplugin/mimedatabase.h>
#include <QtCore/QtPlugin> #include <QtCore/QtPlugin>
#include <QtCore/QDebug>
namespace VCSBase { namespace VCSBase {
namespace Internal { namespace Internal {
@@ -44,7 +46,8 @@ namespace Internal {
VCSBasePlugin *VCSBasePlugin::m_instance = 0; VCSBasePlugin *VCSBasePlugin::m_instance = 0;
VCSBasePlugin::VCSBasePlugin() : VCSBasePlugin::VCSBasePlugin() :
m_settingsPage(0) m_settingsPage(0),
m_nickNameModel(0)
{ {
m_instance = this; m_instance = this;
} }
@@ -65,6 +68,11 @@ bool VCSBasePlugin::initialize(const QStringList &arguments, QString *errorMessa
m_settingsPage = new VCSBaseSettingsPage; m_settingsPage = new VCSBaseSettingsPage;
addAutoReleasedObject(m_settingsPage); addAutoReleasedObject(m_settingsPage);
connect(m_settingsPage, SIGNAL(settingsChanged(VCSBase::Internal::VCSBaseSettings)),
this, SIGNAL(settingsChanged(VCSBase::Internal::VCSBaseSettings)));
connect(m_settingsPage, SIGNAL(settingsChanged(VCSBase::Internal::VCSBaseSettings)),
this, SLOT(slotSettingsChanged()));
slotSettingsChanged();
return true; return true;
} }
@@ -82,6 +90,32 @@ VCSBaseSettings VCSBasePlugin::settings() const
return m_settingsPage->settings(); return m_settingsPage->settings();
} }
/* Delayed creation/update of the nick name model. */
QStandardItemModel *VCSBasePlugin::nickNameModel()
{
if (!m_nickNameModel) {
m_nickNameModel = NickNameDialog::createModel(this);
populateNickNameModel();
}
return m_nickNameModel;
}
void VCSBasePlugin::populateNickNameModel()
{
QString errorMessage;
if (!NickNameDialog::populateModelFromMailCapFile(settings().nickNameMailMap,
m_nickNameModel,
&errorMessage)) {
qWarning("%s", qPrintable(errorMessage));
}
}
void VCSBasePlugin::slotSettingsChanged()
{
if (m_nickNameModel)
populateNickNameModel();
}
} // namespace Internal } // namespace Internal
} // namespace VCSBase } // namespace VCSBase

View File

@@ -34,6 +34,10 @@
#include <QtCore/QObject> #include <QtCore/QObject>
QT_BEGIN_NAMESPACE
class QStandardItemModel;
QT_END_NAMESPACE
namespace VCSBase { namespace VCSBase {
namespace Internal { namespace Internal {
@@ -56,9 +60,23 @@ public:
VCSBaseSettings settings() const; VCSBaseSettings settings() const;
// Model of user nick names used for the submit
// editor. Stored centrally here to achieve delayed
// initialization and updating on settings change.
QStandardItemModel *nickNameModel();
signals:
void settingsChanged(const VCSBase::Internal::VCSBaseSettings& s);
private slots:
void slotSettingsChanged();
private: private:
void populateNickNameModel();
static VCSBasePlugin *m_instance; static VCSBasePlugin *m_instance;
VCSBaseSettingsPage *m_settingsPage; VCSBaseSettingsPage *m_settingsPage;
QStandardItemModel *m_nickNameModel;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -37,12 +37,19 @@ static const char *nickNameMailMapKeyC = "NickNameMailMap";
static const char *nickNameFieldListFileKeyC = "NickNameFieldListFile"; static const char *nickNameFieldListFileKeyC = "NickNameFieldListFile";
static const char *promptForSubmitKeyC = "PromptForSubmit"; static const char *promptForSubmitKeyC = "PromptForSubmit";
static const char *submitMessageCheckScriptKeyC = "SubmitMessageCheckScript"; static const char *submitMessageCheckScriptKeyC = "SubmitMessageCheckScript";
static const char *lineWrapKeyC = "LineWrap";
static const char *lineWrapWidthKeyC = "LineWrapWidth";
static const int lineWrapWidthDefault = 72;
static const bool lineWrapDefault = true;
namespace VCSBase { namespace VCSBase {
namespace Internal { namespace Internal {
VCSBaseSettings::VCSBaseSettings() : VCSBaseSettings::VCSBaseSettings() :
promptForSubmit(true) promptForSubmit(true),
lineWrap(lineWrapDefault),
lineWrapWidth(lineWrapWidthDefault)
{ {
} }
@@ -53,6 +60,8 @@ void VCSBaseSettings::toSettings(QSettings *s) const
s->setValue(QLatin1String(nickNameFieldListFileKeyC), nickNameFieldListFile); s->setValue(QLatin1String(nickNameFieldListFileKeyC), nickNameFieldListFile);
s->setValue(QLatin1String(submitMessageCheckScriptKeyC), submitMessageCheckScript); s->setValue(QLatin1String(submitMessageCheckScriptKeyC), submitMessageCheckScript);
s->setValue(QLatin1String(promptForSubmitKeyC), promptForSubmit); s->setValue(QLatin1String(promptForSubmitKeyC), promptForSubmit);
s->setValue(QLatin1String(lineWrapKeyC), lineWrap);
s->setValue(QLatin1String(lineWrapWidthKeyC), lineWrapWidth);
s->endGroup(); s->endGroup();
} }
@@ -63,16 +72,30 @@ void VCSBaseSettings::fromSettings(QSettings *s)
nickNameFieldListFile = s->value(QLatin1String(nickNameFieldListFileKeyC), QString()).toString(); nickNameFieldListFile = s->value(QLatin1String(nickNameFieldListFileKeyC), QString()).toString();
submitMessageCheckScript = s->value(QLatin1String(submitMessageCheckScriptKeyC), QString()).toString(); submitMessageCheckScript = s->value(QLatin1String(submitMessageCheckScriptKeyC), QString()).toString();
promptForSubmit = s->value(QLatin1String(promptForSubmitKeyC), QVariant(true)).toBool(); promptForSubmit = s->value(QLatin1String(promptForSubmitKeyC), QVariant(true)).toBool();
lineWrap = s->value(QLatin1String(lineWrapKeyC), lineWrapDefault).toBool();
lineWrapWidth = s->value(QLatin1String(lineWrapWidthKeyC), lineWrapWidthDefault).toInt();
s->endGroup(); s->endGroup();
} }
bool VCSBaseSettings::equals(const VCSBaseSettings &rhs) const bool VCSBaseSettings::equals(const VCSBaseSettings &rhs) const
{ {
return promptForSubmit == rhs.promptForSubmit return promptForSubmit == rhs.promptForSubmit
&& lineWrap == rhs.lineWrap
&& lineWrapWidth == rhs.lineWrapWidth
&& nickNameMailMap == rhs.nickNameMailMap && nickNameMailMap == rhs.nickNameMailMap
&& nickNameFieldListFile == rhs.nickNameFieldListFile && nickNameFieldListFile == rhs.nickNameFieldListFile
&& submitMessageCheckScript == rhs.submitMessageCheckScript; && submitMessageCheckScript == rhs.submitMessageCheckScript;
} }
QDebug operator<<(QDebug d,const VCSBaseSettings& s)
{
d.nospace() << "promptForSubmit=" << s.promptForSubmit
<< " lineWrap=" << s.lineWrap
<< " lineWrapWidth=" << s.lineWrapWidth
<< " nickNameMailMap='" << s.nickNameMailMap
<< "' nickNameFieldListFile='" << s.nickNameFieldListFile
<< "'submitMessageCheckScript='" << s.submitMessageCheckScript << "'\n";
return d;
}
} }
} }

View File

@@ -35,6 +35,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QSettings; class QSettings;
class QDebug;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace VCSBase { namespace VCSBase {
@@ -51,6 +52,9 @@ struct VCSBaseSettings {
QString submitMessageCheckScript; QString submitMessageCheckScript;
bool lineWrap;
int lineWrapWidth;
void toSettings(QSettings *) const; void toSettings(QSettings *) const;
void fromSettings(QSettings *); void fromSettings(QSettings *);
@@ -60,6 +64,7 @@ struct VCSBaseSettings {
inline bool operator==(const VCSBaseSettings &s1, const VCSBaseSettings &s2) { return s1.equals(s2); } inline bool operator==(const VCSBaseSettings &s1, const VCSBaseSettings &s2) { return s1.equals(s2); }
inline bool operator!=(const VCSBaseSettings &s1, const VCSBaseSettings &s2) { return !s1.equals(s2); } inline bool operator!=(const VCSBaseSettings &s1, const VCSBaseSettings &s2) { return !s1.equals(s2); }
QDebug operator<<(QDebug,const VCSBaseSettings& );
} // namespace Internal } // namespace Internal
} // namespace VCSBase } // namespace VCSBase

View File

@@ -67,16 +67,19 @@ VCSBaseSettings VCSBaseSettingsWidget::settings() const
rc.nickNameFieldListFile = m_ui->nickNameFieldsFileChooser->path(); rc.nickNameFieldListFile = m_ui->nickNameFieldsFileChooser->path();
rc.submitMessageCheckScript = m_ui->submitMessageCheckScriptChooser->path(); rc.submitMessageCheckScript = m_ui->submitMessageCheckScriptChooser->path();
rc.promptForSubmit = m_ui->promptForSubmitCheckBox->isChecked(); rc.promptForSubmit = m_ui->promptForSubmitCheckBox->isChecked();
rc.lineWrap= m_ui->lineWrapCheckBox->isChecked();
rc.lineWrapWidth = m_ui->lineWrapSpinBox->value();
return rc; return rc;
} }
void VCSBaseSettingsWidget::setSettings(const VCSBaseSettings &s) void VCSBaseSettingsWidget::setSettings(const VCSBaseSettings &s)
{ {
m_ui->nickNameMailMapChooser->setPath(s.nickNameMailMap); m_ui->nickNameMailMapChooser->setPath(s.nickNameMailMap);
m_ui->nickNameFieldsFileChooser->setPath(s.nickNameFieldListFile); m_ui->nickNameFieldsFileChooser->setPath(s.nickNameFieldListFile);
m_ui->submitMessageCheckScriptChooser->setPath(s.submitMessageCheckScript); m_ui->submitMessageCheckScriptChooser->setPath(s.submitMessageCheckScript);
m_ui->promptForSubmitCheckBox->setChecked(s.promptForSubmit); m_ui->promptForSubmitCheckBox->setChecked(s.promptForSubmit);
m_ui->lineWrapCheckBox->setChecked(s.lineWrap);
m_ui->lineWrapSpinBox->setValue(s.lineWrapWidth);
} }
// --------------- VCSBaseSettingsPage // --------------- VCSBaseSettingsPage
@@ -84,18 +87,10 @@ VCSBaseSettingsPage::VCSBaseSettingsPage(QObject *parent) :
Core::IOptionsPage(parent) Core::IOptionsPage(parent)
{ {
m_settings.fromSettings(Core::ICore::instance()->settings()); m_settings.fromSettings(Core::ICore::instance()->settings());
updateNickNames();
} }
void VCSBaseSettingsPage::updateNickNames() void VCSBaseSettingsPage::updateNickNames()
{ {
if (m_settings.nickNameMailMap.isEmpty()) {
NickNameDialog::clearNickNames();
} else {
QString errorMessage;
if (!NickNameDialog::readNickNamesFromMailCapFile(m_settings.nickNameMailMap, &errorMessage))
qWarning("%s", qPrintable(errorMessage));
}
} }
VCSBaseSettingsPage::~VCSBaseSettingsPage() VCSBaseSettingsPage::~VCSBaseSettingsPage()
@@ -136,7 +131,7 @@ void VCSBaseSettingsPage::apply()
if (newSettings != m_settings) { if (newSettings != m_settings) {
m_settings = newSettings; m_settings = newSettings;
m_settings.toSettings(Core::ICore::instance()->settings()); m_settings.toSettings(Core::ICore::instance()->settings());
updateNickNames(); emit settingsChanged(m_settings);
} }
} }
} }