CppEditor: Cleanup settings in InsertVirtualMethods

Change-Id: Ic1fbd8a68e9022ef4250585448542b5e65508d92
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2015-06-17 22:54:49 +03:00
committed by Orgad Shaneh
parent 5e035bd740
commit 08cf5f5b36

View File

@@ -79,6 +79,7 @@ namespace CppEditor {
namespace Internal {
class InsertVirtualMethodsModel;
class VirtualMethodsSettings;
class InsertVirtualMethodsDialog : public QDialog
{
@@ -96,22 +97,17 @@ public:
};
InsertVirtualMethodsDialog(QWidget *parent = 0);
~InsertVirtualMethodsDialog();
void initGui();
void initData();
virtual ImplementationMode implementationMode() const;
virtual bool insertKeywordVirtual() const;
virtual bool insertOverrideReplacement() const;
virtual QString overrideReplacement() const;
int overrideReplacementIndex() const;
bool hideReimplementedFunctions() const;
virtual void saveSettings();
const VirtualMethodsSettings *settings() const;
void setHasImplementationFile(bool file);
void setHasReimplementedFunctions(bool functions);
virtual bool gather();
QStringList userAddedOverrideReplacements() const;
protected:
void setInsertOverrideReplacement(bool insert);
void setOverrideReplacement(const QString &replacements);
@@ -137,6 +133,9 @@ private:
bool m_hasImplementationFile;
bool m_hasReimplementedFunctions;
protected:
VirtualMethodsSettings *m_settings;
void saveExpansionState();
void restoreExpansionState();
@@ -308,91 +307,54 @@ QStringList sortedAndTrimmedStringListWithoutEmptyElements(const QStringList &li
namespace CppEditor {
namespace Internal {
class Settings
class VirtualMethodsSettings
{
public:
static bool insertVirtualKeyword()
void read()
{
return settings()->value(insertVirtualKeywordKey(), false).toBool();
QSettings *s = Core::ICore::settings();
s->beginGroup(group());
insertVirtualKeyword = s->value(insertVirtualKeywordKey(), false).toBool();
hideReimplementedFunctions = s->value(hideReimplementedFunctionsKey(), false).toBool();
insertOverrideReplacement = s->value(insertOverrideReplacementKey(), false).toBool();
overrideReplacementIndex = s->value(overrideReplacementIndexKey(), 0).toInt();
userAddedOverrideReplacements = s->value(userAddedOverrideReplacementsKey()).toStringList();
implementationMode = static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
s->value(implementationModeKey(), 1).toInt());
s->endGroup();
}
static void writeInsertVirtualKeyword(bool insert)
void write() const
{
settings()->setValue(insertVirtualKeywordKey(), insert);
QSettings *s = Core::ICore::settings();
s->beginGroup(group());
s->setValue(insertVirtualKeywordKey(), insertVirtualKeyword);
s->setValue(hideReimplementedFunctionsKey(), hideReimplementedFunctions);
s->setValue(insertOverrideReplacementKey(), insertOverrideReplacement);
s->setValue(overrideReplacementIndexKey(), overrideReplacementIndex);
s->setValue(userAddedOverrideReplacementsKey(), userAddedOverrideReplacements);
s->setValue(implementationModeKey(), implementationMode);
s->endGroup();
}
static bool insertOverrideReplacement()
{
return settings()->value(insertOverrideReplacementKey(), false).toBool();
}
static void writeInsertOverrideReplacement(bool insert)
{
settings()->setValue(insertOverrideReplacementKey(), insert);
}
static int overrideReplacementIndex()
{
return settings()->value(overrideReplacementIndexKey(), 0).toInt();
}
static void writeOverrideReplacementIndex(int index)
{
settings()->setValue(overrideReplacementIndexKey(), index);
}
static QStringList userAddedOverrideReplacements()
{
return settings()->value(userAddedOverrideReplacementsKey()).toStringList();
}
static void writeUserAddedOverrideReplacements(const QStringList &additionals)
{
return settings()->setValue(userAddedOverrideReplacementsKey(), additionals);
}
static InsertVirtualMethodsDialog::ImplementationMode implementationMode()
{
return static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
settings()->value(implementationModeKey(), 1).toInt());
}
static void writeImplementationMode(InsertVirtualMethodsDialog::ImplementationMode mode)
{
settings()->setValue(implementationModeKey(), mode);
}
static bool hideReimplementedFunctions()
{
return settings()->value(hideReimplementedFunctionsKey(), false).toBool();
}
static void writeHideReimplementedFunctions(bool hide)
{
settings()->setValue(hideReimplementedFunctionsKey(), hide);
}
QString overrideReplacement; // internal
QStringList userAddedOverrideReplacements;
InsertVirtualMethodsDialog::ImplementationMode implementationMode =
InsertVirtualMethodsDialog::ModeOnlyDeclarations;
int overrideReplacementIndex = 0;
bool insertVirtualKeyword = false;
bool hideReimplementedFunctions = false;
bool insertOverrideReplacement = false;
private:
static QSettings *settings()
{ return Core::ICore::settings(); }
static QString insertVirtualKeywordKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertKeywordVirtual"); }
static QString insertOverrideReplacementKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertOverrideReplacement"); }
static QString overrideReplacementIndexKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/overrideReplacementIndex"); }
static QString userAddedOverrideReplacementsKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/userAddedOverrideReplacements"); }
static QString implementationModeKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/implementationMode"); }
static QString hideReimplementedFunctionsKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/hideReimplementedFunctions"); }
typedef QLatin1String _;
static QString group() { return _("QuickFix/InsertVirtualMethods"); }
static QString insertVirtualKeywordKey() { return _("insertKeywordVirtual"); }
static QString insertOverrideReplacementKey() { return _("insertOverrideReplacement"); }
static QString overrideReplacementIndexKey() { return _("overrideReplacementIndex"); }
static QString userAddedOverrideReplacementsKey() { return _("userAddedOverrideReplacements"); }
static QString implementationModeKey() { return _("implementationMode"); }
static QString hideReimplementedFunctionsKey() { return _("hideReimplementedFunctions"); }
};
class InsertVirtualMethodsModel : public QAbstractItemModel
@@ -790,12 +752,7 @@ public:
if (!m_factory->gather())
return;
Settings::writeInsertVirtualKeyword(m_factory->insertKeywordVirtual());
Settings::writeImplementationMode(m_factory->implementationMode());
Settings::writeHideReimplementedFunctions(m_factory->hideReimplementedFunctions());
Settings::writeInsertOverrideReplacement(m_factory->insertOverrideReplacement());
Settings::writeOverrideReplacementIndex(m_factory->overrideReplacementIndex());
Settings::writeUserAddedOverrideReplacements(m_factory->userAddedOverrideReplacements());
m_factory->saveSettings();
// Insert declarations (and definition if Inside-/OutsideClass)
Overview printer = CppCodeStyleSettings::currentProjectCodeStyleOverview();
@@ -844,17 +801,19 @@ public:
const FullySpecifiedType tn = rewriteType(funcItem->function->type(), &env, control);
declaration += printer.prettyType(tn, funcItem->function->unqualifiedName());
if (m_factory->insertKeywordVirtual())
if (m_factory->settings()->insertVirtualKeyword)
declaration = QLatin1String("virtual ") + declaration;
if (m_factory->insertOverrideReplacement()) {
const QString overrideReplacement = m_factory->overrideReplacement();
if (m_factory->settings()->insertOverrideReplacement) {
const QString overrideReplacement = m_factory->settings()->overrideReplacement;
if (!overrideReplacement.isEmpty())
declaration += QLatin1Char(' ') + overrideReplacement;
}
if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeInsideClass)
if (m_factory->settings()->implementationMode
& InsertVirtualMethodsDialog::ModeInsideClass) {
declaration += QLatin1String("\n{\n}\n");
else
} else {
declaration += QLatin1String(";\n");
}
const QString accessSpecString =
InsertionPointLocator::accessSpecToString(funcItem->accessSpec);
@@ -867,7 +826,8 @@ public:
headerChangeSet.insert(m_insertPosDecl, declaration);
// Insert definition outside class
if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeOutsideClass) {
if (m_factory->settings()->implementationMode
& InsertVirtualMethodsDialog::ModeOutsideClass) {
const QString name = printer.prettyName(targetClass->name()) +
QLatin1String("::") + printer.prettyName(funcItem->function->name());
const QString defText = printer.prettyType(tn, name) + QLatin1String("\n{\n}");
@@ -883,7 +843,8 @@ public:
headerFile->apply();
// Insert in implementation file
if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeImplementationFile) {
if (m_factory->settings()->implementationMode
& InsertVirtualMethodsDialog::ModeImplementationFile) {
const Symbol *symbol = headerFile->cppDocument()->lastVisibleSymbolAt(
targetClass->line(), targetClass->column());
if (!symbol)
@@ -1006,12 +967,18 @@ InsertVirtualMethodsDialog::InsertVirtualMethodsDialog(QWidget *parent)
, m_buttons(0)
, m_hasImplementationFile(false)
, m_hasReimplementedFunctions(false)
, m_settings(new VirtualMethodsSettings)
, classFunctionModel(new InsertVirtualMethodsModel(this))
, classFunctionFilterModel(new InsertVirtualMethodsFilterModel(this))
{
classFunctionFilterModel->setSourceModel(classFunctionModel);
}
InsertVirtualMethodsDialog::~InsertVirtualMethodsDialog()
{
delete m_settings;
}
void InsertVirtualMethodsDialog::initGui()
{
if (m_view)
@@ -1092,23 +1059,24 @@ void InsertVirtualMethodsDialog::initGui()
void InsertVirtualMethodsDialog::initData()
{
m_hideReimplementedFunctions->setChecked(Settings::hideReimplementedFunctions());
m_settings->read();
m_hideReimplementedFunctions->setChecked(m_settings->hideReimplementedFunctions);
const QStringList alwaysPresentReplacements = defaultOverrideReplacements();
m_availableOverrideReplacements = alwaysPresentReplacements;
m_availableOverrideReplacements += Settings::userAddedOverrideReplacements();
m_availableOverrideReplacements += m_settings->userAddedOverrideReplacements;
m_view->setModel(classFunctionFilterModel);
m_expansionStateNormal.clear();
m_expansionStateReimp.clear();
m_hideReimplementedFunctions->setEnabled(m_hasReimplementedFunctions);
m_virtualKeyword->setChecked(Settings::insertVirtualKeyword());
m_insertMode->setCurrentIndex(m_insertMode->findData(Settings::implementationMode()));
m_virtualKeyword->setChecked(m_settings->insertVirtualKeyword);
m_insertMode->setCurrentIndex(m_insertMode->findData(m_settings->implementationMode));
m_overrideReplacementCheckBox->setChecked(Settings::insertOverrideReplacement());
m_overrideReplacementCheckBox->setChecked(m_settings->insertOverrideReplacement);
updateOverrideReplacementsComboBox();
const bool canClear = m_availableOverrideReplacements.size() > alwaysPresentReplacements.size();
m_clearUserAddedReplacementsButton->setEnabled(canClear);
int overrideReplacementIndex = Settings::overrideReplacementIndex();
int overrideReplacementIndex = m_settings->overrideReplacementIndex;
if (overrideReplacementIndex >= m_overrideReplacementComboBox->count())
overrideReplacementIndex = 0;
m_overrideReplacementComboBox->setCurrentIndex(overrideReplacementIndex);
@@ -1126,6 +1094,29 @@ void InsertVirtualMethodsDialog::initData()
}
}
void InsertVirtualMethodsDialog::saveSettings()
{
m_settings->insertVirtualKeyword = m_virtualKeyword->isChecked();
m_settings->implementationMode = static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
m_insertMode->itemData(m_insertMode->currentIndex()).toInt());
m_settings->hideReimplementedFunctions = m_hideReimplementedFunctions->isChecked();
m_settings->insertOverrideReplacement = m_overrideReplacementCheckBox->isChecked();
m_settings->overrideReplacementIndex = m_overrideReplacementComboBox->currentIndex();
if (m_overrideReplacementComboBox && m_overrideReplacementComboBox->isEnabled())
m_settings->overrideReplacement = m_overrideReplacementComboBox->currentText().trimmed();
QSet<QString> addedReplacements = m_availableOverrideReplacements.toSet();
addedReplacements.insert(m_settings->overrideReplacement);
addedReplacements.subtract(defaultOverrideReplacements().toSet());
m_settings->userAddedOverrideReplacements =
sortedAndTrimmedStringListWithoutEmptyElements(addedReplacements.toList());
m_settings->write();
}
const VirtualMethodsSettings *InsertVirtualMethodsDialog::settings() const
{
return m_settings;
}
bool InsertVirtualMethodsDialog::gather()
{
initGui();
@@ -1143,39 +1134,6 @@ bool InsertVirtualMethodsDialog::gather()
return (ret == QDialog::Accepted);
}
InsertVirtualMethodsDialog::ImplementationMode
InsertVirtualMethodsDialog::implementationMode() const
{
return static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
m_insertMode->itemData(m_insertMode->currentIndex()).toInt());
}
bool InsertVirtualMethodsDialog::insertKeywordVirtual() const
{
return m_virtualKeyword->isChecked();
}
bool InsertVirtualMethodsDialog::insertOverrideReplacement() const
{
return m_overrideReplacementCheckBox->isChecked();
}
QString InsertVirtualMethodsDialog::overrideReplacement() const
{
if (m_overrideReplacementComboBox && m_overrideReplacementComboBox->isEnabled())
return m_overrideReplacementComboBox->currentText().trimmed();
return QString();
}
int InsertVirtualMethodsDialog::overrideReplacementIndex() const
{
const QStringList all = defaultOverrideReplacements() + userAddedOverrideReplacements();
const int replacementPosition = all.indexOf(overrideReplacement());
if (replacementPosition >= 0)
return replacementPosition;
return 0;
}
void InsertVirtualMethodsDialog::setHasImplementationFile(bool file)
{
m_hasImplementationFile = file;
@@ -1186,20 +1144,6 @@ void InsertVirtualMethodsDialog::setHasReimplementedFunctions(bool functions)
m_hasReimplementedFunctions = functions;
}
bool InsertVirtualMethodsDialog::hideReimplementedFunctions() const
{
// Safty check necessary because of testing class
return (m_hideReimplementedFunctions && m_hideReimplementedFunctions->isChecked());
}
QStringList InsertVirtualMethodsDialog::userAddedOverrideReplacements() const
{
QSet<QString> addedReplacements = m_availableOverrideReplacements.toSet();
addedReplacements.insert(overrideReplacement());
addedReplacements.subtract(defaultOverrideReplacements().toSet());
return sortedAndTrimmedStringListWithoutEmptyElements(addedReplacements.toList());
}
void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide)
{
InsertVirtualMethodsFilterModel *model =
@@ -1293,22 +1237,15 @@ public:
bool insertOverrideKeyword,
QWidget *parent = 0)
: InsertVirtualMethodsDialog(parent)
, m_implementationMode(mode)
, m_insertKeywordVirtual(insertVirtualKeyword)
, m_insertOverrideReplacement(insertOverrideKeyword)
{
m_settings->implementationMode = mode;
m_settings->insertVirtualKeyword = insertVirtualKeyword;
m_settings->insertOverrideReplacement = insertOverrideKeyword;
m_settings->overrideReplacement = QLatin1String("override");
}
bool gather() { return true; }
ImplementationMode implementationMode() const { return m_implementationMode; }
bool insertKeywordVirtual() const { return m_insertKeywordVirtual; }
bool insertOverrideReplacement() const { return m_insertOverrideReplacement; }
QString overrideReplacement() const { return QLatin1String("override"); }
private:
ImplementationMode m_implementationMode;
bool m_insertKeywordVirtual;
bool m_insertOverrideReplacement;
void saveSettings() { }
};
} // namespace Tests