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