Commit c9ea9ad5 authored by Jarek Kobus's avatar Jarek Kobus Committed by Christian Kamm

Code style selector improvements

Change layout in code style selector.
Make it possible to see the values
of built-in code style without a need to copy it.
Built-in code style can be also modified after
being copied inside code style editor.

Task-number: QTCREATORBUG-6341
Change-Id: Ifcbf807d5730ccf9026e86572710d0cc0ccf9f1a
Reviewed-by: default avatarLeandro T. C. Melo <leandro.melo@nokia.com>
Reviewed-by: default avatarChristian Kamm <christian.d.kamm@nokia.com>
parent 69e02f4f
......@@ -69,6 +69,9 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory,
tr("Edit preview contents to see how the current settings "
"are applied to custom code snippets. Changes in the preview "
"do not affect the current settings."), this);
QFont font = label->font();
font.setItalic(true);
label->setFont(font);
label->setWordWrap(true);
m_layout->addWidget(selector);
m_layout->addWidget(m_preview);
......
......@@ -31,6 +31,7 @@
**************************************************************************/
#include "codestyleselectorwidget.h"
#include "ui_codestyleselectorwidget.h"
#include "icodestylepreferences.h"
#include "icodestylepreferencesfactory.h"
#include "codestylepool.h"
......@@ -67,15 +68,23 @@ public:
ICodeStylePreferences *codeStyle, QWidget *parent = 0);
~CodeStyleDialog();
ICodeStylePreferences *codeStyle() const;
QString displayName() const;
private slots:
void slotCopyClicked();
void slotDisplayNameChanged();
private:
ICodeStylePreferences *m_codeStyle;
QLineEdit *m_lineEdit;
QDialogButtonBox *m_buttons;
QLabel *m_warningLabel;
QPushButton *m_copyButton;
QString m_originalDisplayName;
};
CodeStyleDialog::CodeStyleDialog(ICodeStylePreferencesFactory *factory,
ICodeStylePreferences *codeStyle, QWidget *parent)
: QDialog(parent)
: QDialog(parent),
m_warningLabel(0),
m_copyButton(0)
{
setWindowTitle(tr("Edit Code Style"));
QVBoxLayout *layout = new QVBoxLayout(this);
......@@ -85,17 +94,46 @@ CodeStyleDialog::CodeStyleDialog(ICodeStylePreferencesFactory *factory,
nameLayout->addWidget(label);
nameLayout->addWidget(m_lineEdit);
layout->addLayout(nameLayout);
if (codeStyle->isReadOnly()) {
QHBoxLayout *warningLayout = new QHBoxLayout();
m_warningLabel = new QLabel(
tr("You cannot save changes to a built-in code style. "
"Copy it first to create your own version."), this);
QFont font = m_warningLabel->font();
font.setItalic(true);
m_warningLabel->setFont(font);
m_warningLabel->setWordWrap(true);
m_copyButton = new QPushButton(tr("Copy Built-in Code Style"), this);
m_copyButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
connect(m_copyButton, SIGNAL(clicked()),
this, SLOT(slotCopyClicked()));
warningLayout->addWidget(m_warningLabel);
warningLayout->addWidget(m_copyButton);
layout->addLayout(warningLayout);
}
m_originalDisplayName = codeStyle->displayName();
m_codeStyle = factory->createCodeStyle();
m_codeStyle->setTabSettings(codeStyle->tabSettings());
m_codeStyle->setValue(codeStyle->value());
m_codeStyle->setDisplayName(m_originalDisplayName);
QWidget *editor = factory->createEditor(m_codeStyle, this);
QDialogButtonBox *buttons = new QDialogButtonBox(
m_buttons = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
if (codeStyle->isReadOnly()) {
QPushButton *okButton = m_buttons->button(QDialogButtonBox::Ok);
okButton->setEnabled(false);
}
if (editor)
layout->addWidget(editor);
layout->addWidget(buttons);
connect(buttons, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttons, SIGNAL(rejected()), this, SLOT(reject()));
layout->addWidget(m_buttons);
connect(m_lineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotDisplayNameChanged()));
connect(m_buttons, SIGNAL(accepted()), this, SLOT(accept()));
connect(m_buttons, SIGNAL(rejected()), this, SLOT(reject()));
}
ICodeStylePreferences *CodeStyleDialog::codeStyle() const
......@@ -103,9 +141,22 @@ ICodeStylePreferences *CodeStyleDialog::codeStyle() const
return m_codeStyle;
}
QString CodeStyleDialog::displayName() const
void CodeStyleDialog::slotCopyClicked()
{
if (m_warningLabel)
m_warningLabel->hide();
if (m_copyButton)
m_copyButton->hide();
QPushButton *okButton = m_buttons->button(QDialogButtonBox::Ok);
okButton->setEnabled(true);
if (m_lineEdit->text() == m_originalDisplayName)
m_lineEdit->setText(tr("%1 (Copy)").arg(m_lineEdit->text()));
m_lineEdit->selectAll();
}
void CodeStyleDialog::slotDisplayNameChanged()
{
return m_lineEdit->text();
m_codeStyle->setDisplayName(m_lineEdit->text());
}
CodeStyleDialog::~CodeStyleDialog()
......@@ -120,48 +171,32 @@ CodeStyleSelectorWidget::CodeStyleSelectorWidget(ICodeStylePreferencesFactory *f
QWidget(parent),
m_factory(factory),
m_codeStyle(0),
m_layout(0),
m_comboBox(0),
m_comboBoxLabel(0),
m_ui(new Ui::CodeStyleSelectorWidget),
m_ignoreGuiSignals(false)
{
m_layout = new QHBoxLayout(this);
m_layout->setContentsMargins(QMargins());
m_copyButton = new QPushButton(tr("Copy..."), this);
m_editButton = new QPushButton(tr("Edit..."), this);
m_removeButton = new QPushButton(tr("Remove"), this);
m_importButton = new QPushButton(tr("Import..."), this);
m_exportButton = new QPushButton(tr("Export..."), this);
m_importButton->setEnabled(false);
m_exportButton->setEnabled(false);
m_comboBoxLabel = new QLabel(tr("Current settings:"), this);
m_comboBoxLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
m_layout->addWidget(m_comboBoxLabel);
m_comboBox = new QComboBox(this);
m_comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_layout->addWidget(m_comboBox);
connect(m_comboBox, SIGNAL(activated(int)),
this, SLOT(slotComboBoxActivated(int)));
m_layout->addWidget(m_copyButton);
m_layout->addWidget(m_editButton);
m_layout->addWidget(m_removeButton);
m_layout->addWidget(m_importButton);
m_layout->addWidget(m_exportButton);
m_ui->setupUi(this);
m_ui->importButton->setEnabled(false);
m_ui->exportButton->setEnabled(false);
connect(m_copyButton, SIGNAL(clicked()),
connect(m_ui->delegateComboBox, SIGNAL(activated(int)),
this, SLOT(slotComboBoxActivated(int)));
connect(m_ui->copyButton, SIGNAL(clicked()),
this, SLOT(slotCopyClicked()));
connect(m_editButton, SIGNAL(clicked()),
connect(m_ui->editButton, SIGNAL(clicked()),
this, SLOT(slotEditClicked()));
connect(m_removeButton, SIGNAL(clicked()),
connect(m_ui->removeButton, SIGNAL(clicked()),
this, SLOT(slotRemoveClicked()));
connect(m_importButton, SIGNAL(clicked()),
connect(m_ui->importButton, SIGNAL(clicked()),
this, SLOT(slotImportClicked()));
connect(m_exportButton, SIGNAL(clicked()),
connect(m_ui->exportButton, SIGNAL(clicked()),
this, SLOT(slotExportClicked()));
}
CodeStyleSelectorWidget::~CodeStyleSelectorWidget()
{
delete m_ui;
}
void CodeStyleSelectorWidget::setCodeStyle(TextEditor::ICodeStylePreferences *codeStyle)
{
if (m_codeStyle == codeStyle)
......@@ -179,9 +214,9 @@ void CodeStyleSelectorWidget::setCodeStyle(TextEditor::ICodeStylePreferences *co
disconnect(m_codeStyle, SIGNAL(currentDelegateChanged(ICodeStylePreferences*)),
this, SLOT(slotCurrentDelegateChanged(ICodeStylePreferences*)));
m_exportButton->setEnabled(false);
m_importButton->setEnabled(false);
m_comboBox->clear();
m_ui->exportButton->setEnabled(false);
m_ui->importButton->setEnabled(false);
m_ui->delegateComboBox->clear();
}
m_codeStyle = codeStyle;
// fillup new
......@@ -195,8 +230,8 @@ void CodeStyleSelectorWidget::setCodeStyle(TextEditor::ICodeStylePreferences *co
this, SLOT(slotCodeStyleAdded(ICodeStylePreferences*)));
connect(codeStylePool, SIGNAL(codeStyleRemoved(ICodeStylePreferences*)),
this, SLOT(slotCodeStyleRemoved(ICodeStylePreferences*)));
m_exportButton->setEnabled(true);
m_importButton->setEnabled(true);
m_ui->exportButton->setEnabled(true);
m_ui->importButton->setEnabled(true);
}
for (int i = 0; i < delegates.count(); i++)
......@@ -214,10 +249,10 @@ void CodeStyleSelectorWidget::slotComboBoxActivated(int index)
if (m_ignoreGuiSignals)
return;
if (!m_comboBox || index < 0 || index >= m_comboBox->count())
if (index < 0 || index >= m_ui->delegateComboBox->count())
return;
TextEditor::ICodeStylePreferences *delegate =
m_comboBox->itemData(index).value<TextEditor::ICodeStylePreferences *>();
m_ui->delegateComboBox->itemData(index).value<TextEditor::ICodeStylePreferences *>();
const bool wasBlocked = blockSignals(true);
m_codeStyle->setCurrentDelegate(delegate);
......@@ -227,15 +262,12 @@ void CodeStyleSelectorWidget::slotComboBoxActivated(int index)
void CodeStyleSelectorWidget::slotCurrentDelegateChanged(TextEditor::ICodeStylePreferences *delegate)
{
m_ignoreGuiSignals = true;
if (m_comboBox) {
m_comboBox->setCurrentIndex(m_comboBox->findData(QVariant::fromValue(delegate)));
m_comboBox->setToolTip(m_comboBox->currentText());
}
m_ui->delegateComboBox->setCurrentIndex(m_ui->delegateComboBox->findData(QVariant::fromValue(delegate)));
m_ui->delegateComboBox->setToolTip(m_ui->delegateComboBox->currentText());
m_ignoreGuiSignals = false;
const bool enableEdit = delegate && !delegate->isReadOnly() && !delegate->currentDelegate();
m_editButton->setEnabled(enableEdit);
m_removeButton->setEnabled(enableEdit);
const bool removeEnabled = delegate && !delegate->isReadOnly() && !delegate->currentDelegate();
m_ui->removeButton->setEnabled(removeEnabled);
}
void CodeStyleSelectorWidget::slotCopyClicked()
......@@ -271,9 +303,16 @@ void CodeStyleSelectorWidget::slotEditClicked()
Internal::CodeStyleDialog dialog(m_factory, codeStyle, this);
if (dialog.exec() == QDialog::Accepted) {
ICodeStylePreferences *dialogCodeStyle = dialog.codeStyle();
if (codeStyle->isReadOnly()) {
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
codeStyle = codeStylePool->cloneCodeStyle(dialogCodeStyle);
if (codeStyle)
m_codeStyle->setCurrentDelegate(codeStyle);
return;
}
codeStyle->setTabSettings(dialogCodeStyle->tabSettings());
codeStyle->setValue(dialogCodeStyle->value());
codeStyle->setDisplayName(dialog.displayName());
codeStyle->setDisplayName(dialogCodeStyle->displayName());
}
}
......@@ -337,8 +376,8 @@ void CodeStyleSelectorWidget::slotCodeStyleAdded(ICodeStylePreferences *codeStyl
const QVariant data = QVariant::fromValue(codeStylePreferences);
const QString name = displayName(codeStylePreferences);
m_comboBox->addItem(name, data);
m_comboBox->setItemData(m_comboBox->count() - 1, name, Qt::ToolTipRole);
m_ui->delegateComboBox->addItem(name, data);
m_ui->delegateComboBox->setItemData(m_ui->delegateComboBox->count() - 1, name, Qt::ToolTipRole);
connect(codeStylePreferences, SIGNAL(displayNameChanged(QString)),
this, SLOT(slotUpdateName()));
if (codeStylePreferences->delegatingPool()) {
......@@ -350,7 +389,7 @@ void CodeStyleSelectorWidget::slotCodeStyleAdded(ICodeStylePreferences *codeStyl
void CodeStyleSelectorWidget::slotCodeStyleRemoved(ICodeStylePreferences *codeStylePreferences)
{
m_ignoreGuiSignals = true;
m_comboBox->removeItem(m_comboBox->findData(QVariant::fromValue(codeStylePreferences)));
m_ui->delegateComboBox->removeItem(m_ui->delegateComboBox->findData(QVariant::fromValue(codeStylePreferences)));
disconnect(codeStylePreferences, SIGNAL(displayNameChanged(QString)),
this, SLOT(slotUpdateName()));
if (codeStylePreferences->delegatingPool()) {
......@@ -375,18 +414,18 @@ void CodeStyleSelectorWidget::slotUpdateName()
updateName(codeStyle);
}
m_comboBox->setToolTip(m_comboBox->currentText());
m_ui->delegateComboBox->setToolTip(m_ui->delegateComboBox->currentText());
}
void CodeStyleSelectorWidget::updateName(ICodeStylePreferences *codeStyle)
{
const int idx = m_comboBox->findData(QVariant::fromValue(codeStyle));
const int idx = m_ui->delegateComboBox->findData(QVariant::fromValue(codeStyle));
if (idx < 0)
return;
const QString name = displayName(codeStyle);
m_comboBox->setItemText(idx, name);
m_comboBox->setItemData(idx, name, Qt::ToolTipRole);
m_ui->delegateComboBox->setItemText(idx, name);
m_ui->delegateComboBox->setItemData(idx, name, Qt::ToolTipRole);
}
QString CodeStyleSelectorWidget::displayName(ICodeStylePreferences *codeStyle) const
......
......@@ -50,11 +50,16 @@ namespace TextEditor {
class ICodeStylePreferences;
class ICodeStylePreferencesFactory;
namespace Ui {
class CodeStyleSelectorWidget;
}
class TEXTEDITOR_EXPORT CodeStyleSelectorWidget : public QWidget
{
Q_OBJECT
public:
explicit CodeStyleSelectorWidget(ICodeStylePreferencesFactory *factory, QWidget *parent = 0);
~CodeStyleSelectorWidget();
void setCodeStyle(TextEditor::ICodeStylePreferences *codeStyle);
QString searchKeywords() const;
......@@ -80,15 +85,7 @@ private:
QString displayName(ICodeStylePreferences *codeStyle) const;
QHBoxLayout *m_layout;
QComboBox *m_comboBox;
QLabel *m_comboBoxLabel;
QPushButton *m_copyButton;
QPushButton *m_editButton;
QPushButton *m_removeButton;
QPushButton *m_importButton;
QPushButton *m_exportButton;
Ui::CodeStyleSelectorWidget *m_ui;
bool m_ignoreGuiSignals;
};
......
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TextEditor::CodeStyleSelectorWidget</class>
<widget class="QWidget" name="TextEditor::CodeStyleSelectorWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>523</width>
<height>58</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Current settings:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="delegateComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="copyButton">
<property name="text">
<string>Copy...</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="editButton">
<property name="text">
<string>Edit...</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="removeButton">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="exportButton">
<property name="text">
<string>Export...</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="importButton">
<property name="text">
<string>Import...</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>delegateComboBox</tabstop>
<tabstop>copyButton</tabstop>
<tabstop>editButton</tabstop>
<tabstop>removeButton</tabstop>
<tabstop>exportButton</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
......@@ -234,7 +234,8 @@ FORMS += \
snippets/snippetssettingspage.ui \
behaviorsettingswidget.ui \
behaviorsettingspage.ui \
tabsettingswidget.ui
tabsettingswidget.ui \
codestyleselectorwidget.ui
RESOURCES += texteditor.qrc
OTHER_FILES += TextEditor.mimetypes.xml
......@@ -246,3 +247,4 @@ OTHER_FILES += TextEditor.mimetypes.xml
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment