diff options
Diffstat (limited to 'src/designer/src/components/taskmenu/itemlisteditor.cpp')
-rw-r--r-- | src/designer/src/components/taskmenu/itemlisteditor.cpp | 135 |
1 files changed, 77 insertions, 58 deletions
diff --git a/src/designer/src/components/taskmenu/itemlisteditor.cpp b/src/designer/src/components/taskmenu/itemlisteditor.cpp index ffa793c17..893716565 100644 --- a/src/designer/src/components/taskmenu/itemlisteditor.cpp +++ b/src/designer/src/components/taskmenu/itemlisteditor.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Designer of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "itemlisteditor.h" #include <abstractformbuilder.h> @@ -41,6 +16,8 @@ QT_BEGIN_NAMESPACE +using namespace Qt::StringLiterals; + namespace qdesigner_internal { class ItemPropertyBrowser : public QtTreePropertyBrowser @@ -53,7 +30,7 @@ public: const QString widthSampleString = QCoreApplication::translate("ItemPropertyBrowser", "XX Icon Selected off"); m_width = fontMetrics().horizontalAdvance(widthSampleString); setSplitterPosition(m_width); - m_width += fontMetrics().horizontalAdvance(QStringLiteral("/this/is/some/random/path")); + m_width += fontMetrics().horizontalAdvance(u"/this/is/some/random/path"_s); } QSize sizeHint() const override @@ -70,7 +47,6 @@ AbstractItemEditor::AbstractItemEditor(QDesignerFormWindowInterface *form, QWidg : QWidget(parent), m_iconCache(qobject_cast<FormWindowBase *>(form)->iconCache()) { - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); m_propertyManager = new DesignerPropertyManager(form->core(), this); m_editorFactory = new DesignerEditorFactory(form->core(), this); m_editorFactory->setSpacing(0); @@ -116,24 +92,29 @@ static QStringList c2qStringList(const char * const in[]) return out; } -void AbstractItemEditor::setupProperties(PropertyDefinition *propList) +void AbstractItemEditor::setupProperties(const PropertyDefinition *propList, + Qt::Alignment alignDefault) { for (int i = 0; propList[i].name; i++) { int type = propList[i].typeFunc ? propList[i].typeFunc() : propList[i].type; int role = propList[i].role; - QtVariantProperty *prop = m_propertyManager->addProperty(type, QLatin1String(propList[i].name)); + QtVariantProperty *prop = m_propertyManager->addProperty(type, QLatin1StringView(propList[i].name)); + if (role == Qt::TextAlignmentRole) { + prop->setAttribute(DesignerPropertyManager::alignDefaultAttribute(), + QVariant(uint(alignDefault))); + } Q_ASSERT(prop); if (role == Qt::ToolTipPropertyRole || role == Qt::WhatsThisPropertyRole) - prop->setAttribute(QStringLiteral("validationMode"), ValidationRichText); + prop->setAttribute(u"validationMode"_s, ValidationRichText); else if (role == Qt::DisplayPropertyRole) - prop->setAttribute(QStringLiteral("validationMode"), ValidationMultiLine); + prop->setAttribute(u"validationMode"_s, ValidationMultiLine); else if (role == Qt::StatusTipPropertyRole) - prop->setAttribute(QStringLiteral("validationMode"), ValidationSingleLine); + prop->setAttribute(u"validationMode"_s, ValidationSingleLine); else if (role == ItemFlagsShadowRole) - prop->setAttribute(QStringLiteral("flagNames"), c2qStringList(itemFlagNames)); + prop->setAttribute(u"flagNames"_s, c2qStringList(itemFlagNames)); else if (role == Qt::CheckStateRole) - prop->setAttribute(QStringLiteral("enumNames"), c2qStringList(checkStateNames)); - prop->setAttribute(QStringLiteral("resettable"), true); + prop->setAttribute(u"enumNames"_s, c2qStringList(checkStateNames)); + prop->setAttribute(u"resettable"_s, true); m_properties.append(prop); m_rootProperties.append(prop); m_propertyToRole.insert(prop, role); @@ -148,9 +129,11 @@ void AbstractItemEditor::setupObject(QWidget *object) m_editorFactory->setFormWindowBase(fwb); } -void AbstractItemEditor::setupEditor(QWidget *object, PropertyDefinition *propList) +void AbstractItemEditor::setupEditor(QWidget *object, + const PropertyDefinition *propList, + Qt::Alignment alignDefault) { - setupProperties(propList); + setupProperties(propList, alignDefault); setupObject(object); } @@ -208,6 +191,9 @@ void AbstractItemEditor::resetProperty(QtProperty *property) if (m_propertyManager->resetIconSubProperty(property)) return; + if (m_propertyManager->resetTextAlignmentProperty(property)) + return; + BoolBlocker block(m_updatingBrowser); QtVariantProperty *prop = m_propertyManager->variantProperty(property); @@ -240,23 +226,26 @@ void AbstractItemEditor::cacheReloaded() void AbstractItemEditor::updateBrowser() { BoolBlocker block(m_updatingBrowser); - for (QtVariantProperty *prop : qAsConst(m_properties)) { + for (QtVariantProperty *prop : std::as_const(m_properties)) { int role = m_propertyToRole.value(prop); QVariant val = getItemData(role); + + bool modified = false; if (!val.isValid()) { if (role == ItemFlagsShadowRole) val = QVariant::fromValue(defaultItemFlags()); else val = QVariant(QMetaType(prop->value().userType()), nullptr); - prop->setModified(false); } else { - prop->setModified(true); + modified = role != Qt::TextAlignmentRole + || val.toUInt() != DesignerPropertyManager::alignDefault(prop); } + prop->setModified(modified); prop->setValue(val); } if (m_propertyBrowser->topLevelItems().isEmpty()) { - for (QtVariantProperty *prop : qAsConst(m_rootProperties)) + for (QtVariantProperty *prop : std::as_const(m_rootProperties)) m_propertyBrowser->addProperty(prop); } } @@ -282,12 +271,26 @@ ItemListEditor::ItemListEditor(QDesignerFormWindowInterface *form, QWidget *pare injectPropertyBrowser(this, ui.widget); connect(ui.showPropertiesButton, &QAbstractButton::clicked, this, &ItemListEditor::togglePropertyBrowser); + + connect(ui.newListItemButton, &QAbstractButton::clicked, + this, &ItemListEditor::newListItemButtonClicked); + connect(ui.deleteListItemButton, &QAbstractButton::clicked, + this, &ItemListEditor::deleteListItemButtonClicked); + connect(ui.moveListItemUpButton, &QAbstractButton::clicked, + this, &ItemListEditor::moveListItemUpButtonClicked); + connect(ui.moveListItemDownButton, &QAbstractButton::clicked, + this, &ItemListEditor::moveListItemDownButtonClicked); + connect(ui.listWidget, &QListWidget::currentRowChanged, + this, &ItemListEditor::listWidgetCurrentRowChanged); + connect(ui.listWidget, &QListWidget::itemChanged, + this, &ItemListEditor::listWidgetItemChanged); + setPropertyBrowserVisible(false); - QIcon upIcon = createIconSet(QString::fromUtf8("up.png")); - QIcon downIcon = createIconSet(QString::fromUtf8("down.png")); - QIcon minusIcon = createIconSet(QString::fromUtf8("minus.png")); - QIcon plusIcon = createIconSet(QString::fromUtf8("plus.png")); + QIcon upIcon = createIconSet("up.png"_L1); + QIcon downIcon = createIconSet("down.png"_L1); + QIcon minusIcon = createIconSet("minus.png"_L1); + QIcon plusIcon = createIconSet("plus.png"_L1); ui.moveListItemUpButton->setIcon(upIcon); ui.moveListItemDownButton->setIcon(downIcon); ui.newListItemButton->setIcon(plusIcon); @@ -296,9 +299,11 @@ ItemListEditor::ItemListEditor(QDesignerFormWindowInterface *form, QWidget *pare connect(iconCache(), &DesignerIconCache::reloaded, this, &AbstractItemEditor::cacheReloaded); } -void ItemListEditor::setupEditor(QWidget *object, PropertyDefinition *propList) +void ItemListEditor::setupEditor(QWidget *object, + const PropertyDefinition *propList, + Qt::Alignment alignDefault) { - AbstractItemEditor::setupEditor(object, propList); + AbstractItemEditor::setupEditor(object, propList, alignDefault); if (ui.listWidget->count() > 0) ui.listWidget->setCurrentRow(0); @@ -313,12 +318,14 @@ void ItemListEditor::setCurrentIndex(int idx) m_updating = false; } -void ItemListEditor::on_newListItemButton_clicked() +void ItemListEditor::newListItemButtonClicked() { int row = ui.listWidget->currentRow() + 1; QListWidgetItem *item = new QListWidgetItem(m_newItemText); item->setData(Qt::DisplayPropertyRole, QVariant::fromValue(PropertySheetStringValue(m_newItemText))); + if (m_alignDefault != 0) + item->setTextAlignment(Qt::Alignment(m_alignDefault)); item->setFlags(item->flags() | Qt::ItemIsEditable); if (row < ui.listWidget->count()) ui.listWidget->insertItem(row, item); @@ -330,7 +337,7 @@ void ItemListEditor::on_newListItemButton_clicked() ui.listWidget->editItem(item); } -void ItemListEditor::on_deleteListItemButton_clicked() +void ItemListEditor::deleteListItemButtonClicked() { int row = ui.listWidget->currentRow(); @@ -347,7 +354,7 @@ void ItemListEditor::on_deleteListItemButton_clicked() ui.listWidget->setCurrentRow(row); } -void ItemListEditor::on_moveListItemUpButton_clicked() +void ItemListEditor::moveListItemUpButtonClicked() { int row = ui.listWidget->currentRow(); if (row <= 0) @@ -358,7 +365,7 @@ void ItemListEditor::on_moveListItemUpButton_clicked() emit itemMovedUp(row); } -void ItemListEditor::on_moveListItemDownButton_clicked() +void ItemListEditor::moveListItemDownButtonClicked() { int row = ui.listWidget->currentRow(); if (row == -1 || row == ui.listWidget->count() - 1) @@ -369,14 +376,14 @@ void ItemListEditor::on_moveListItemDownButton_clicked() emit itemMovedDown(row); } -void ItemListEditor::on_listWidget_currentRowChanged() +void ItemListEditor::listWidgetCurrentRowChanged() { updateEditor(); if (!m_updating) emit indexChanged(ui.listWidget->currentRow()); } -void ItemListEditor::on_listWidget_itemChanged(QListWidgetItem *item) +void ItemListEditor::listWidgetItemChanged(QListWidgetItem *item) { if (m_updatingBrowser) return; @@ -408,11 +415,13 @@ void ItemListEditor::setItemData(int role, const QVariant &v) { QListWidgetItem *item = ui.listWidget->currentItem(); bool reLayout = false; - if ((role == Qt::EditRole && (v.toString().count(QLatin1Char('\n')) != item->data(role).toString().count(QLatin1Char('\n')))) - || role == Qt::FontRole) + if ((role == Qt::EditRole + && (v.toString().count(u'\n') != item->data(role).toString().count(u'\n'))) + || role == Qt::FontRole) { reLayout = true; + } QVariant newValue = v; - if (role == Qt::FontRole && newValue.type() == QVariant::Font) { + if (role == Qt::FontRole && newValue.metaType().id() == QMetaType::QFont) { QFont oldFont = ui.listWidget->font(); QFont newFont = qvariant_cast<QFont>(newValue).resolve(oldFont); newValue = QVariant::fromValue(newFont); @@ -466,6 +475,16 @@ void ItemListEditor::updateEditor() else m_propertyBrowser->clear(); } + +uint ItemListEditor::alignDefault() const +{ + return m_alignDefault; +} + +void ItemListEditor::setAlignDefault(uint newAlignDefault) +{ + m_alignDefault = newAlignDefault; +} } // namespace qdesigner_internal QT_END_NAMESPACE |