aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/languageserverprotocol/icontent.h4
-rw-r--r--src/libs/languageserverprotocol/jsonrpcmessages.cpp4
-rw-r--r--src/libs/languageserverprotocol/jsonrpcmessages.h4
-rw-r--r--src/libs/utils/stringutils.cpp7
-rw-r--r--src/plugins/cppeditor/cppquickfix_test.cpp33
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp54
-rw-r--r--src/plugins/cppeditor/cppquickfixes.h5
-rw-r--r--src/plugins/cpptools/cpprefactoringchanges.cpp2
-rw-r--r--src/plugins/cpptools/cpprefactoringchanges.h2
-rw-r--r--src/plugins/fakevim/fakevimplugin.cpp2
-rw-r--r--src/plugins/languageclient/client.cpp6
-rw-r--r--src/plugins/languageclient/client.h2
-rw-r--r--src/plugins/projectexplorer/sessionmodel.cpp14
-rw-r--r--src/plugins/qmldesigner/CMakeLists.txt2
-rw-r--r--src/plugins/qmldesigner/components/annotationeditor/annotationeditor.pri2
-rw-r--r--src/plugins/qmldesigner/components/annotationeditor/annotationtool.cpp259
-rw-r--r--src/plugins/qmldesigner/components/annotationeditor/annotationtool.h93
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp6
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditormodel.h2
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h11
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp10
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp27
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h4
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp2
-rw-r--r--src/plugins/qmldesigner/designmodewidget.cpp1
-rw-r--r--src/plugins/qmldesigner/designmodewidget.h3
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.pri2
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.qbs4
-rw-r--r--src/plugins/qmldesigner/switchsplittabwidget.cpp212
-rw-r--r--src/plugins/qmldesigner/switchsplittabwidget.h63
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp5
-rw-r--r--src/plugins/texteditor/fontsettings.cpp80
-rw-r--r--src/plugins/texteditor/fontsettings.h7
-rw-r--r--src/plugins/texteditor/fontsettingspage.cpp16
-rw-r--r--src/plugins/texteditor/fontsettingspage.ui125
-rw-r--r--src/plugins/texteditor/textdocumentlayout.cpp8
-rw-r--r--src/plugins/texteditor/texteditor.cpp59
m---------src/shared/qbs0
-rw-r--r--src/tools/clangrefactoringbackend/source/sourcelocationsutils.h1
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolsvisitorbase.h1
-rw-r--r--src/tools/qml2puppet/CMakeLists.txt8
-rw-r--r--src/tools/qml2puppet/qml2puppet.qbs16
45 files changed, 287 insertions, 891 deletions
diff --git a/src/libs/languageserverprotocol/icontent.h b/src/libs/languageserverprotocol/icontent.h
index 33ef876510..e689f50072 100644
--- a/src/libs/languageserverprotocol/icontent.h
+++ b/src/libs/languageserverprotocol/icontent.h
@@ -90,8 +90,8 @@ public:
};
using ResponseHandler = std::function<void(const QByteArray &, QTextCodec *)>;
-using ResponseHandlers = std::function<void(MessageId, const QByteArray &, QTextCodec *)>;
-using MethodHandler = std::function<void(const QString, MessageId, const IContent *)>;
+using ResponseHandlers = std::function<void(const MessageId &, const QByteArray &, QTextCodec *)>;
+using MethodHandler = std::function<void(const QString &, const MessageId &, const IContent *)>;
inline uint qHash(const LanguageServerProtocol::MessageId &id)
{
diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.cpp b/src/libs/languageserverprotocol/jsonrpcmessages.cpp
index 466477d740..e7285b8da9 100644
--- a/src/libs/languageserverprotocol/jsonrpcmessages.cpp
+++ b/src/libs/languageserverprotocol/jsonrpcmessages.cpp
@@ -85,8 +85,8 @@ void JsonRpcMessageHandler::registerMessageProvider(
void JsonRpcMessageHandler::parseContent(const QByteArray &content,
QTextCodec *codec,
QString &parseError,
- ResponseHandlers responseHandlers,
- MethodHandler methodHandler)
+ const ResponseHandlers &responseHandlers,
+ const MethodHandler &methodHandler)
{
const QJsonObject &jsonObject = toJsonObject(content, codec, parseError);
if (jsonObject.isEmpty())
diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h
index f97ed803fc..00caab62f6 100644
--- a/src/libs/languageserverprotocol/jsonrpcmessages.h
+++ b/src/libs/languageserverprotocol/jsonrpcmessages.h
@@ -76,8 +76,8 @@ public:
}
static QByteArray jsonRpcMimeType();
static void parseContent(const QByteArray &content, QTextCodec *codec, QString &errorMessage,
- ResponseHandlers responseHandlers,
- MethodHandler methodHandler);
+ const ResponseHandlers &responseHandlers,
+ const MethodHandler &methodHandler);
static QJsonObject toJsonObject(const QByteArray &content, QTextCodec *codec, QString &parseError);
private:
diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp
index d8483df552..9d179a9abd 100644
--- a/src/libs/utils/stringutils.cpp
+++ b/src/libs/utils/stringutils.cpp
@@ -399,6 +399,9 @@ QString formatElapsedTime(qint64 elapsed)
*/
QString wildcardToRegularExpression(const QString &original)
{
+#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0)
+ using qsizetype = int;
+#endif
const qsizetype wclen = original.size();
QString rx;
rx.reserve(wclen + wclen / 16);
@@ -455,6 +458,10 @@ QString wildcardToRegularExpression(const QString &original)
}
}
+#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
return QRegularExpression::anchoredPattern(rx);
+#else
+ return "\\A" + rx + "\\z";
+#endif
}
} // namespace Utils
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index fc026a6c25..c362ff1ee0 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -1414,6 +1414,39 @@ void CppEditorPlugin::test_quickfix_data()
<< CppQuickFixFactoryPtr(new InsertQtPropertyMembers)
<< _("class C { @Q_PROPERTY(typeid foo READ foo) };\n")
<< _();
+
+ QTest::newRow("convert to camel case: normal")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @lower_case_function();\n")
+ << _("void lowerCaseFunction();\n");
+ QTest::newRow("convert to camel case: already camel case")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @camelCaseFunction();\n")
+ << _();
+ QTest::newRow("convert to camel case: no underscores (lower case)")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @lowercasefunction();\n")
+ << _();
+ QTest::newRow("convert to camel case: no underscores (upper case)")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @UPPERCASEFUNCTION();\n")
+ << _();
+ QTest::newRow("convert to camel case: non-applicable underscore")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @m_a_member;\n")
+ << _("void m_aMember;\n");
+ QTest::newRow("convert to camel case: upper case")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @UPPER_CASE_FUNCTION();\n")
+ << _("void upperCaseFunction();\n");
+ QTest::newRow("convert to camel case: partially camel case already")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void mixed@_andCamelCase();\n")
+ << _("void mixedAndCamelCase();\n");
+ QTest::newRow("convert to camel case: wild mix")
+ << CppQuickFixFactoryPtr(new ConvertToCamelCase(true))
+ << _("void @WhAt_TODO_hErE();\n")
+ << _("void WhAtTODOHErE();\n");
}
void CppEditorPlugin::test_quickfix()
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index 47a0575994..10e99470ac 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -2010,9 +2010,13 @@ namespace {
class ConvertToCamelCaseOp: public CppQuickFixOperation
{
public:
- ConvertToCamelCaseOp(const CppQuickFixInterface &interface, const QString &newName)
+ ConvertToCamelCaseOp(const CppQuickFixInterface &interface, const QString &name,
+ const AST *nameAst, bool test)
: CppQuickFixOperation(interface, -1)
- , m_name(newName)
+ , m_name(name)
+ , m_nameAst(nameAst)
+ , m_isAllUpper(name.isUpper())
+ , m_test(test)
{
setDescription(QApplication::translate("CppTools::QuickFix", "Convert to Camel Case"));
}
@@ -2022,17 +2026,24 @@ public:
CppRefactoringChanges refactoring(snapshot());
CppRefactoringFilePtr currentFile = refactoring.file(filePath().toString());
- for (int i = 1; i < m_name.length(); ++i) {
- const QChar c = m_name.at(i);
- if (c.isUpper()) {
- m_name[i] = c.toLower();
- } else if (i < m_name.length() - 1
- && isConvertibleUnderscore(m_name, i)) {
- m_name.remove(i, 1);
- m_name[i] = m_name.at(i).toUpper();
+ QString newName = m_isAllUpper ? m_name.toLower() : m_name;
+ for (int i = 1; i < newName.length(); ++i) {
+ const QChar c = newName.at(i);
+ if (c.isUpper() && m_isAllUpper) {
+ newName[i] = c.toLower();
+ } else if (i < newName.length() - 1 && isConvertibleUnderscore(newName, i)) {
+ newName.remove(i, 1);
+ newName[i] = newName.at(i).toUpper();
}
}
- editor()->renameUsages(m_name);
+ if (m_test) {
+ ChangeSet changeSet;
+ changeSet.replace(currentFile->range(m_nameAst), newName);
+ currentFile->setChangeSet(changeSet);
+ currentFile->apply();
+ } else {
+ editor()->renameUsages(newName);
+ }
}
static bool isConvertibleUnderscore(const QString &name, int pos)
@@ -2042,7 +2053,10 @@ public:
}
private:
- QString m_name;
+ const QString m_name;
+ const AST * const m_nameAst;
+ const bool m_isAllUpper;
+ const bool m_test;
};
} // anonymous namespace
@@ -2056,22 +2070,26 @@ void ConvertToCamelCase::match(const CppQuickFixInterface &interface, QuickFixOp
AST * const ast = path.last();
const Name *name = nullptr;
+ const AST *astForName = nullptr;
if (const NameAST * const nameAst = ast->asName()) {
- if (nameAst->name && nameAst->name->asNameId())
+ if (nameAst->name && nameAst->name->asNameId()) {
+ astForName = nameAst;
name = nameAst->name;
+ }
} else if (const NamespaceAST * const namespaceAst = ast->asNamespace()) {
+ astForName = namespaceAst;
name = namespaceAst->symbol->name();
}
if (!name)
return;
- QString newName = QString::fromUtf8(name->identifier()->chars());
- if (newName.length() < 3)
+ QString nameString = QString::fromUtf8(name->identifier()->chars());
+ if (nameString.length() < 3)
return;
- for (int i = 1; i < newName.length() - 1; ++i) {
- if (ConvertToCamelCaseOp::isConvertibleUnderscore(newName, i)) {
- result << new ConvertToCamelCaseOp(interface, newName);
+ for (int i = 1; i < nameString.length() - 1; ++i) {
+ if (ConvertToCamelCaseOp::isConvertibleUnderscore(nameString, i)) {
+ result << new ConvertToCamelCaseOp(interface, nameString, astForName, m_test);
return;
}
}
diff --git a/src/plugins/cppeditor/cppquickfixes.h b/src/plugins/cppeditor/cppquickfixes.h
index 91bd8c9a62..4a9d1ab357 100644
--- a/src/plugins/cppeditor/cppquickfixes.h
+++ b/src/plugins/cppeditor/cppquickfixes.h
@@ -221,7 +221,12 @@ public:
class ConvertToCamelCase : public CppQuickFixFactory
{
public:
+ ConvertToCamelCase(bool test = false) : CppQuickFixFactory(), m_test(test) {}
+
void match(const CppQuickFixInterface &interface, QuickFixOperations &result) override;
+
+private:
+ const bool m_test;
};
/*!
diff --git a/src/plugins/cpptools/cpprefactoringchanges.cpp b/src/plugins/cpptools/cpprefactoringchanges.cpp
index 509506d5a1..a86dd6451b 100644
--- a/src/plugins/cpptools/cpprefactoringchanges.cpp
+++ b/src/plugins/cpptools/cpprefactoringchanges.cpp
@@ -213,7 +213,7 @@ Utils::ChangeSet::Range CppRefactoringFile::range(unsigned tokenIndex) const
return {start, start + token.utf16chars()};
}
-Utils::ChangeSet::Range CppRefactoringFile::range(AST *ast) const
+Utils::ChangeSet::Range CppRefactoringFile::range(const AST *ast) const
{
return {startOf(ast), endOf(ast)};
}
diff --git a/src/plugins/cpptools/cpprefactoringchanges.h b/src/plugins/cpptools/cpprefactoringchanges.h
index 3a547a90c5..58fbf39eee 100644
--- a/src/plugins/cpptools/cpprefactoringchanges.h
+++ b/src/plugins/cpptools/cpprefactoringchanges.h
@@ -52,7 +52,7 @@ public:
Range range(int start, int end) const;
Range range(unsigned tokenIndex) const;
- Range range(CPlusPlus::AST *ast) const;
+ Range range(const CPlusPlus::AST *ast) const;
const CPlusPlus::Token &tokenAt(unsigned index) const;
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index aa0976c524..e349919372 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -324,7 +324,7 @@ private:
{
QTextCursor tc = m_editor->textCursor();
m_currentPos = tc.position();
- m_lineSpacing = m_editor->document()->documentLayout()->blockBoundingRect(tc.block()).height();
+ m_lineSpacing = m_editor->cursorRect(tc).height();
setFont(m_editor->extraArea()->font());
// Follow geometry of normal line numbers if visible,
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index c238ba454a..9f237ea807 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -938,10 +938,10 @@ void Client::handleMessage(const BaseMessage &message)
if (auto handler = m_contentHandler[message.mimeType]) {
QString parseError;
handler(message.content, message.codec, parseError,
- [this](MessageId id, const QByteArray &content, QTextCodec *codec){
+ [this](const MessageId &id, const QByteArray &content, QTextCodec *codec){
this->handleResponse(id, content, codec);
},
- [this](const QString &method, MessageId id, const IContent *content){
+ [this](const QString &method, const MessageId &id, const IContent *content){
this->handleMethod(method, id, content);
});
if (!parseError.isEmpty())
@@ -1072,7 +1072,7 @@ void Client::handleResponse(const MessageId &id, const QByteArray &content, QTex
handler(content, codec);
}
-void Client::handleMethod(const QString &method, MessageId id, const IContent *content)
+void Client::handleMethod(const QString &method, const MessageId &id, const IContent *content)
{
ErrorHierarchy error;
auto logError = [&](const JsonObject &content) {
diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h
index d264898474..9d8d8487ce 100644
--- a/src/plugins/languageclient/client.h
+++ b/src/plugins/languageclient/client.h
@@ -189,7 +189,7 @@ protected:
private:
void handleResponse(const LanguageServerProtocol::MessageId &id, const QByteArray &content,
QTextCodec *codec);
- void handleMethod(const QString &method, LanguageServerProtocol::MessageId id,
+ void handleMethod(const QString &method, const LanguageServerProtocol::MessageId &id,
const LanguageServerProtocol::IContent *content);
void handleDiagnostics(const LanguageServerProtocol::PublishDiagnosticsParams &params);
diff --git a/src/plugins/projectexplorer/sessionmodel.cpp b/src/plugins/projectexplorer/sessionmodel.cpp
index b0d847e7df..4cfa95eea5 100644
--- a/src/plugins/projectexplorer/sessionmodel.cpp
+++ b/src/plugins/projectexplorer/sessionmodel.cpp
@@ -183,10 +183,18 @@ void SessionModel::sort(int column, Qt::SortOrder order)
beginResetModel();
const auto cmp = [column, order](const QString &s1, const QString &s2) {
bool isLess;
- if (column == 0)
+ if (column == 0) {
+ if (s1 == s2)
+ return false;
isLess = s1 < s2;
- else
- isLess = SessionManager::sessionDateTime(s1) < SessionManager::sessionDateTime(s2);
+ }
+ else {
+ const auto s1time = SessionManager::sessionDateTime(s1);
+ const auto s2time = SessionManager::sessionDateTime(s2);
+ if (s1time == s2time)
+ return false;
+ isLess = s1time < s2time;
+ }
if (order == Qt::DescendingOrder)
isLess = !isLess;
return isLess;
diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt
index ca98f2c424..21b1c9cf64 100644
--- a/src/plugins/qmldesigner/CMakeLists.txt
+++ b/src/plugins/qmldesigner/CMakeLists.txt
@@ -29,7 +29,6 @@ add_qtc_plugin(QmlDesigner
qmldesignerplugin.cpp qmldesignerplugin.h
settingspage.cpp settingspage.h settingspage.ui
shortcutmanager.cpp shortcutmanager.h
- switchsplittabwidget.cpp switchsplittabwidget.h
designermcumanager.cpp designermcumanager.h
EXPLICIT_MOC
components/propertyeditor/propertyeditorvalue.h
@@ -627,7 +626,6 @@ extend_qtc_plugin(QmlDesigner
annotationeditordialog.cpp annotationeditordialog.h annotationeditordialog.ui
globalannotationeditordialog.cpp globalannotationeditordialog.h globalannotationeditordialog.ui
annotationeditor.cpp annotationeditor.h
- annotationtool.cpp annotationtool.h
globalannotationeditor.cpp globalannotationeditor.h
)
diff --git a/src/plugins/qmldesigner/components/annotationeditor/annotationeditor.pri b/src/plugins/qmldesigner/components/annotationeditor/annotationeditor.pri
index e597e6862c..b1773c2dcf 100644
--- a/src/plugins/qmldesigner/components/annotationeditor/annotationeditor.pri
+++ b/src/plugins/qmldesigner/components/annotationeditor/annotationeditor.pri
@@ -1,11 +1,9 @@
-HEADERS += $$PWD/annotationtool.h
HEADERS += $$PWD/annotationcommenttab.h
HEADERS += $$PWD/annotationeditordialog.h
HEADERS += $$PWD/annotationeditor.h
HEADERS += $$PWD/globalannotationeditor.h
HEADERS += $$PWD/globalannotationeditordialog.h
-SOURCES += $$PWD/annotationtool.cpp
SOURCES += $$PWD/annotationcommenttab.cpp
SOURCES += $$PWD/annotationeditordialog.cpp
SOURCES += $$PWD/annotationeditor.cpp
diff --git a/src/plugins/qmldesigner/components/annotationeditor/annotationtool.cpp b/src/plugins/qmldesigner/components/annotationeditor/annotationtool.cpp
deleted file mode 100644
index 9db5d0d81c..0000000000
--- a/src/plugins/qmldesigner/components/annotationeditor/annotationtool.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** 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.
-**
-****************************************************************************/
-
-#include "annotationtool.h"
-
-#include "formeditorscene.h"
-#include "formeditorview.h"
-#include "formeditorwidget.h"
-#include "itemutilfunctions.h"
-#include "formeditoritem.h"
-
-#include "nodemetainfo.h"
-#include "qmlitemnode.h"
-#include <qmldesignerplugin.h>
-#include <abstractaction.h>
-#include <designeractionmanager.h>
-
-#include <QApplication>
-#include <QGraphicsSceneMouseEvent>
-#include <QAction>
-#include <QDebug>
-#include <QPair>
-#include <QUrl>
-#include <QMetaType>
-
-namespace QmlDesigner {
-
-class AnnotationToolAction : public AbstractAction
-{
-public:
- AnnotationToolAction() : AbstractAction(QCoreApplication::translate("AnnotationToolAction","Edit Annotation"))
- {
- }
-
- QByteArray category() const override
- {
- return QByteArray();
- }
-
- QByteArray menuId() const override
- {
- return "AnnotationTool";
- }
-
- int priority() const override
- {
- return CustomActionsPriority + 5;
- }
-
- Type type() const override
- {
- return FormEditorAction;
- }
-
-protected:
- bool isVisible(const SelectionContext &selectionContext) const override
- {
- return selectionContext.singleNodeIsSelected();
- }
-
- bool isEnabled(const SelectionContext &selectionContext) const override
- {
- return isVisible(selectionContext);
- }
-};
-
-AnnotationTool::AnnotationTool()
-{
- auto annotationToolAction = new AnnotationToolAction;
- QmlDesignerPlugin::instance()->designerActionManager().addDesignerAction(annotationToolAction);
- connect(annotationToolAction->action(), &QAction::triggered, [=]() {
- view()->changeCurrentToolTo(this);
- });
-}
-
-AnnotationTool::~AnnotationTool() = default;
-
-void AnnotationTool::clear()
-{
- if (m_annotationEditor)
- m_annotationEditor->deleteLater();
-
- AbstractFormEditorTool::clear();
-}
-
-void AnnotationTool::mousePressEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event)
-{
- AbstractFormEditorTool::mousePressEvent(itemList, event);
-}
-
-void AnnotationTool::mouseMoveEvent(const QList<QGraphicsItem*> & /*itemList*/,
- QGraphicsSceneMouseEvent * /*event*/)
-{
-}
-
-void AnnotationTool::hoverMoveEvent(const QList<QGraphicsItem*> & /*itemList*/,
- QGraphicsSceneMouseEvent * /*event*/)
-{
-}
-
-void AnnotationTool::keyPressEvent(QKeyEvent * /*keyEvent*/)
-{
-}
-
-void AnnotationTool::keyReleaseEvent(QKeyEvent * /*keyEvent*/)
-{
-}
-
-void AnnotationTool::dragLeaveEvent(const QList<QGraphicsItem*> &/*itemList*/, QGraphicsSceneDragDropEvent * /*event*/)
-{
-}
-
-void AnnotationTool::dragMoveEvent(const QList<QGraphicsItem*> &/*itemList*/, QGraphicsSceneDragDropEvent * /*event*/)
-{
-}
-
-void AnnotationTool::mouseReleaseEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event)
-{
- AbstractFormEditorTool::mouseReleaseEvent(itemList, event);
-}
-
-
-void AnnotationTool::mouseDoubleClickEvent(const QList<QGraphicsItem*> &itemList, QGraphicsSceneMouseEvent *event)
-{
- AbstractFormEditorTool::mouseDoubleClickEvent(itemList, event);
-}
-
-void AnnotationTool::itemsAboutToRemoved(const QList<FormEditorItem*> &removedItemList)
-{
- if (m_annotationEditor.isNull())
- return;
-
- if (removedItemList.contains(m_formEditorItem))
- view()->changeToSelectionTool();
-}
-
-void AnnotationTool::selectedItemsChanged(const QList<FormEditorItem*> &itemList)
-{
- if (!itemList.isEmpty()) {
- m_formEditorItem = itemList.constFirst();
-
- ModelNode itemModelNode = m_formEditorItem->qmlItemNode().modelNode();
- m_oldCustomId = itemModelNode.customId();
- m_oldAnnotation = itemModelNode.annotation();
-
- if (m_annotationEditor.isNull()) {
- m_annotationEditor = new AnnotationEditorDialog(view()->formEditorWidget()->parentWidget(),
- itemModelNode.displayName(),
- m_oldCustomId, m_oldAnnotation);
-
- connect(m_annotationEditor, &AnnotationEditorDialog::accepted, this, &AnnotationTool::annotationDialogAccepted);
- connect(m_annotationEditor, &QDialog::rejected, this, &AnnotationTool::annotationDialogRejected);
-
- m_annotationEditor->show();
- m_annotationEditor->raise();
- }
- } else {
- view()->changeToSelectionTool();
- }
-}
-
-void AnnotationTool::instancesCompleted(const QList<FormEditorItem*> & /*itemList*/)
-{
-}
-
-void AnnotationTool::instancesParentChanged(const QList<FormEditorItem *> & /*itemList*/)
-{
-}
-
-void AnnotationTool::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > & /*propertyList*/)
-{
-}
-
-void AnnotationTool::formEditorItemsChanged(const QList<FormEditorItem*> & /*itemList*/)
-{
-}
-
-int AnnotationTool::wantHandleItem(const ModelNode & /*modelNode*/) const
-{
- return 5;
-}
-
-QString AnnotationTool::name() const
-{
- return tr("Annotation Tool");
-}
-
-void AnnotationTool::annotationDialogAccepted()
-{
- if (m_annotationEditor) {
- saveNewCustomId(m_annotationEditor->customId());
- saveNewAnnotation(m_annotationEditor->annotation());
-
- m_annotationEditor->close();
- m_annotationEditor->deleteLater();
- }
-
- m_annotationEditor = nullptr;
-
- view()->changeToSelectionTool();
-}
-
-void AnnotationTool::saveNewCustomId(const QString &customId)
-{
- if (m_formEditorItem) {
- m_oldCustomId = customId;
- m_formEditorItem->qmlItemNode().modelNode().setCustomId(customId);
- }
-}
-
-void AnnotationTool::saveNewAnnotation(const Annotation &annotation)
-{
- if (m_formEditorItem) {
- if (annotation.comments().isEmpty())
- m_formEditorItem->qmlItemNode().modelNode().removeAnnotation();
- else
- m_formEditorItem->qmlItemNode().modelNode().setAnnotation(annotation);
-
- m_oldAnnotation = annotation;
- }
-}
-
-void AnnotationTool::annotationDialogRejected()
-{
- if (m_annotationEditor) {
- m_annotationEditor->close();
- m_annotationEditor->deleteLater();
- }
-
- m_annotationEditor = nullptr;
-
- view()->changeToSelectionTool();
-}
-
-}
diff --git a/src/plugins/qmldesigner/components/annotationeditor/annotationtool.h b/src/plugins/qmldesigner/components/annotationeditor/annotationtool.h
deleted file mode 100644
index 0073286dd6..0000000000
--- a/src/plugins/qmldesigner/components/annotationeditor/annotationtool.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** 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.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "annotation.h"
-#include "annotationeditordialog.h"
-#include "abstractcustomtool.h"
-#include "selectionindicator.h"
-
-#include <QHash>
-#include <QPointer>
-#include <QDialog>
-
-namespace QmlDesigner {
-
-class AnnotationTool : public QObject, public AbstractCustomTool
-{
- Q_OBJECT
-public:
- AnnotationTool();
- ~AnnotationTool() override;
-
- void mousePressEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event) override;
- void mouseMoveEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event) override;
- void mouseReleaseEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event) override;
- void mouseDoubleClickEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event) override;
- void hoverMoveEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneMouseEvent *event) override;
- void keyPressEvent(QKeyEvent *event) override;
- void keyReleaseEvent(QKeyEvent *keyEvent) override;
-
- void dragLeaveEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneDragDropEvent * event) override;
- void dragMoveEvent(const QList<QGraphicsItem*> &itemList,
- QGraphicsSceneDragDropEvent * event) override;
-
- void itemsAboutToRemoved(const QList<FormEditorItem*> &itemList) override;
-
- void selectedItemsChanged(const QList<FormEditorItem*> &itemList) override; //impl needed
-
- void instancesCompleted(const QList<FormEditorItem*> &itemList) override;
- void instancesParentChanged(const QList<FormEditorItem *> &itemList) override;
- void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList) override;
-
- void clear() override;
-
- void formEditorItemsChanged(const QList<FormEditorItem*> &itemList) override;
-
- int wantHandleItem(const ModelNode &modelNode) const override;
-
- QString name() const override;
-
-private:
- void annotationDialogAccepted();
- void annotationDialogRejected();
- void saveNewCustomId(const QString &customId);
- void saveNewAnnotation(const Annotation &annotation);
-
-private:
- FormEditorItem *m_formEditorItem = nullptr;
- QString m_oldCustomId;
- Annotation m_oldAnnotation;
- QPointer<AnnotationEditorDialog> m_annotationEditor;
-};
-
-}
diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp
index db58ce4dbb..56b91d0af6 100644
--- a/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp
@@ -39,10 +39,10 @@
namespace DesignTools {
-CurveEditorModel::CurveEditorModel(double minTime, double maxTime, QObject *parent)
+CurveEditorModel::CurveEditorModel(QObject *parent)
: TreeModel(parent)
- , m_minTime(minTime)
- , m_maxTime(maxTime)
+ , m_minTime(CurveEditorStyle::defaultTimeMin)
+ , m_maxTime(CurveEditorStyle::defaultTimeMax)
{}
CurveEditorModel::~CurveEditorModel() {}
diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.h b/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.h
index 952dc46c63..cf7575ca5c 100644
--- a/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.h
+++ b/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.h
@@ -57,7 +57,7 @@ signals:
void curveChanged(PropertyTreeItem *item);
public:
- CurveEditorModel(double minTime, double maxTime, QObject *parent = nullptr);
+ CurveEditorModel(QObject *parent = nullptr);
~CurveEditorModel() override;
diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h b/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h
index 6d6acebc51..f6c6c378c5 100644
--- a/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h
+++ b/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h
@@ -36,6 +36,8 @@
#include <QIcon>
#include <QKeySequence>
+#include <cmath>
+
namespace DesignTools {
struct TreeItemStyleOption
@@ -105,6 +107,13 @@ struct Shortcuts
struct CurveEditorStyle
{
+ static constexpr double defaultTimeMin = 0.0;
+ static constexpr double defaultTimeMax = 100.0;
+ static constexpr double defaultValueMin = -1.0;
+ static constexpr double defaultValueMax = 1.0;
+
+ static double defaultValueRange() { return std::fabs(defaultValueMin - defaultValueMax); }
+
Shortcuts shortcuts;
QBrush backgroundBrush = QBrush(QColor(5, 0, 100));
@@ -124,7 +133,7 @@ struct CurveEditorStyle
double valueAxisWidth = 60.0;
double valueOffsetTop = 10.0;
double valueOffsetBottom = 10.0;
- double labelDensityY = 1.5;
+ double labelDensityY = 2.0;
HandleItemStyleOption handleStyle;
KeyframeItemStyleOption keyframeStyle;
diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp
index 9d858d684c..b84d386f8e 100644
--- a/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp
@@ -42,7 +42,7 @@ namespace QmlDesigner {
CurveEditorView::CurveEditorView(QObject *parent)
: AbstractView(parent)
, m_block(false)
- , m_model(new DesignTools::CurveEditorModel(0., 500.))
+ , m_model(new DesignTools::CurveEditorModel())
, m_editor(new DesignTools::CurveEditor(m_model))
{
Q_UNUSED(parent);
@@ -267,7 +267,7 @@ ModelNode getTargetNode1(DesignTools::PropertyTreeItem *item, const QmlTimeline
QString targetId = nodeItem->name();
if (timeline.isValid()) {
for (auto &&target : timeline.allTargets()) {
- if (target.displayName() == targetId)
+ if (target.isValid() && target.displayName() == targetId)
return target;
}
}
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp
index 86aae0b2cc..90818be74b 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp
@@ -87,6 +87,16 @@ QRectF CurveItem::boundingRect() const
for (auto *item : m_keyframes)
bbox(bounds, item->keyframe());
+ if (auto *s = qobject_cast<GraphicsScene *>(scene())) {
+ bounds.setLeft(s->animationRangeMin());
+ bounds.setRight(s->animationRangeMax());
+ }
+
+ if (qFuzzyCompare(bounds.height(), 0.0)) {
+ auto tmp = CurveEditorStyle::defaultValueRange() / 2.0;
+ bounds.adjust(0.0, -tmp, 0.0, tmp);
+ }
+
return m_transform.mapRect(bounds);
}
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp
index aca41b4d6d..e9f9050f62 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp
@@ -114,9 +114,29 @@ double GraphicsScene::maximumValue() const
return limits().top();
}
+double GraphicsScene::animationRangeMin() const
+{
+ if (GraphicsView *gview = graphicsView())
+ return gview->minimumTime();
+
+ return minimumTime();
+}
+
+double GraphicsScene::animationRangeMax() const
+{
+ if (GraphicsView *gview = graphicsView())
+ return gview->maximumTime();
+
+ return maximumTime();
+}
+
QRectF GraphicsScene::rect() const
{
- return sceneRect();
+ QRectF rect;
+ for (auto *curve : curves())
+ rect |= curve->boundingRect();
+
+ return rect;
}
QVector<CurveItem *> GraphicsScene::curves() const
@@ -410,6 +430,11 @@ QRectF GraphicsScene::limits() const
}
m_limits = QRectF(QPointF(min.x(), max.y()), QPointF(max.x(), min.y()));
+ if (qFuzzyCompare(m_limits.height(), 0.0)) {
+ auto tmp = CurveEditorStyle::defaultValueRange() / 2.0;
+ m_limits.adjust(0.0, tmp, 0.0, -tmp);
+ }
+
m_dirty = false;
}
return m_limits;
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h
index 9443130b3e..c19f72b130 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h
@@ -67,6 +67,10 @@ public:
double maximumValue() const;
+ double animationRangeMin() const;
+
+ double animationRangeMax() const;
+
QRectF rect() const;
QVector<CurveItem *> curves() const;
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
index 9fec8b2fc5..c162b5fd90 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
@@ -126,12 +126,12 @@ double GraphicsView::maximumTime() const
double GraphicsView::minimumValue() const
{
- return m_scene->empty() ? -1.0 : m_scene->minimumValue();
+ return m_scene->empty() ? CurveEditorStyle::defaultValueMin : m_scene->minimumValue();
}
double GraphicsView::maximumValue() const
{
- return m_scene->empty() ? 1.0 : m_scene->maximumValue();
+ return m_scene->empty() ? CurveEditorStyle::defaultValueMax : m_scene->maximumValue();
}
double GraphicsView::zoomX() const
diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp
index 91aa006299..de3757e68c 100644
--- a/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp
+++ b/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp
@@ -92,7 +92,7 @@ void Edit3DCanvas::paintEvent(QPaintEvent *e)
QPainter painter(this);
- painter.drawImage(rect(), m_image, rect());
+ painter.drawImage(rect(), m_image, QRect(0, 0, m_image.width(), m_image.height()));
}
void Edit3DCanvas::resizeEvent(QResizeEvent *e)
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 5b75ea7241..2bb61467a9 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -24,7 +24,6 @@
****************************************************************************/
#include "designmodewidget.h"
-#include "switchsplittabwidget.h"
#include <designeractionmanager.h>
diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h
index 67f8f3d554..bf348d3300 100644
--- a/src/plugins/qmldesigner/designmodewidget.h
+++ b/src/plugins/qmldesigner/designmodewidget.h
@@ -50,7 +50,6 @@ namespace QmlDesigner {
class ItemLibraryWidget;
class CrumbleBar;
class DocumentWarningWidget;
-class SwitchSplitTabWidget;
namespace Internal {
@@ -103,8 +102,6 @@ private: // functions
void aboutToShowWorkspaces();
private: // variables
- SwitchSplitTabWidget* m_centralTabWidget = nullptr;
-
QPointer<QWidget> m_bottomSideBar;
Core::EditorToolBar *m_toolBar;
CrumbleBar *m_crumbleBar;
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 3022bd80be..938a718d7c 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -37,7 +37,6 @@
#include <connectionview.h>
#include <sourcetool/sourcetool.h>
#include <colortool/colortool.h>
-#include <annotationeditor/annotationtool.h>
#include <curveeditor/curveeditorview.h>
#include <formeditor/transitiontool.h>
#include <texttool/texttool.h>
@@ -250,7 +249,6 @@ bool QmlDesignerPlugin::delayedInitialize()
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::SourceTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::ColorTool);
- d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::AnnotationTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TransitionTool);
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.pri b/src/plugins/qmldesigner/qmldesignerplugin.pri
index 8c99395c58..b11ff7a53b 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.pri
+++ b/src/plugins/qmldesigner/qmldesignerplugin.pri
@@ -2,7 +2,6 @@ HEADERS += $$PWD/qmldesignerconstants.h \
$$PWD/shortcutmanager.h \
$$PWD/qmldesignerplugin.h \
$$PWD/designmodewidget.h \
- $$PWD/switchsplittabwidget.h \
$$PWD/designersettings.h \
$$PWD/generateresource.h \
$$PWD/settingspage.h \
@@ -16,7 +15,6 @@ HEADERS += $$PWD/qmldesignerconstants.h \
SOURCES += $$PWD/qmldesignerplugin.cpp \
$$PWD/shortcutmanager.cpp \
$$PWD/designmodewidget.cpp \
- $$PWD/switchsplittabwidget.cpp \
$$PWD/designersettings.cpp \
$$PWD/generateresource.cpp \
$$PWD/settingspage.cpp \
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs
index 8dc0933903..93cf6587ca 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.qbs
+++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs
@@ -712,8 +712,6 @@ Project {
"annotationeditor/globalannotationeditordialog.cpp",
"annotationeditor/globalannotationeditordialog.h",
"annotationeditor/globalannotationeditordialog.ui",
- "annotationeditor/annotationtool.cpp",
- "annotationeditor/annotationtool.h",
"bindingeditor/bindingeditor.cpp",
"bindingeditor/bindingeditor.h",
"bindingeditor/actioneditor.cpp",
@@ -935,8 +933,6 @@ Project {
"designmodecontext.h",
"designmodewidget.cpp",
"designmodewidget.h",
- "switchsplittabwidget.cpp",
- "switchsplittabwidget.h",
"documentmanager.cpp",
"documentmanager.h",
"documentwarningwidget.cpp",
diff --git a/src/plugins/qmldesigner/switchsplittabwidget.cpp b/src/plugins/qmldesigner/switchsplittabwidget.cpp
deleted file mode 100644
index e30f4180cf..0000000000
--- a/src/plugins/qmldesigner/switchsplittabwidget.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** 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.
-**
-****************************************************************************/
-
-#include "switchsplittabwidget.h"
-#include <theme.h>
-
-#include <utils/utilsicons.h>
-#include <utils/fileutils.h>
-
-#include <QVector>
-#include <QBoxLayout>
-#include <QTabBar>
-#include <QToolButton>
-#include <QSplitter>
-#include <QLayoutItem>
-#include <QEvent>
-
-namespace QmlDesigner {
-SwitchSplitTabWidget::SwitchSplitTabWidget(QWidget *parent)
- : QWidget(parent)
- , m_splitter(new QSplitter)
- , m_tabBar(new QTabBar)
- , m_tabBarBackground(new QWidget)
-{
- // setting object names for css
- setObjectName("backgroundWidget");
- m_splitter->setObjectName("centralTabWidget");
- m_splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- m_splitter->setHandleWidth(0);
-
- QString sheet = QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/centerwidget.css"));
- m_tabBarBackground->setStyleSheet(Theme::replaceCssColors(sheet));
-
- m_tabBar->setObjectName("centralTabBar");
- m_tabBar->setShape(QTabBar::RoundedEast);
- m_tabBar->setDocumentMode(false);
- // add a faketab to have the possibility to unselect all tabs
- m_tabBar->addTab(QString());
- selectFakeTab();
-
- m_tabBarBackground->setObjectName("tabBarBackground");
-
- connect(m_tabBar, &QTabBar::tabBarClicked, [this] (int index) {
- if (index != -1)
- updateSplitterSizes(index - fakeTab);
- });
-
- setLayout(new QHBoxLayout);
- layout()->setContentsMargins(0, 0, 0, 0);
- layout()->setSpacing(0);
- layout()->addWidget(m_splitter);
-
- m_tabBarBackground->setLayout(new QVBoxLayout);
- m_tabBarBackground->layout()->setContentsMargins(0, 0, 0, 0);
- m_tabBarBackground->layout()->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
- m_tabBarBackground->layout()->addWidget(m_tabBar);
-
- auto horizontalButton = new QToolButton;
- horizontalButton->setObjectName("centralTabBar");
- horizontalButton->setIcon(Utils::Icon({{QLatin1String(":/qmldesigner/images/spliteditorvertically.png"),
- Utils::Theme::IconsBaseColor}}).icon());
- horizontalButton->setIconSize(QSize(8, 16));
- connect(horizontalButton, &QToolButton::clicked, [this] () {
- m_splitter->setOrientation(Qt::Vertical);
- updateSplitterSizes();
- selectFakeTab();
- });
- auto verticalButton = new QToolButton;
- verticalButton->setObjectName("centralTabBar");
- verticalButton->setIcon(Utils::Icon({{QLatin1String(":/qmldesigner/images/spliteditorhorizontally.png"),
- Utils::Theme::IconsBaseColor}}).icon());
- verticalButton->setIconSize(QSize(8, 16));
- connect(verticalButton, &QToolButton::clicked, [this] () {
- m_splitter->setOrientation(Qt::Horizontal);
- updateSplitterSizes();
- selectFakeTab();
- });
-
- m_tabBarBackground->layout()->addWidget(horizontalButton);
- m_tabBarBackground->layout()->addWidget(verticalButton);
- layout()->addWidget(m_tabBarBackground);
- updateSplitButtons();
-}
-
-int SwitchSplitTabWidget::count() const
-{
- return m_splitter->count();
-}
-
-QWidget *SwitchSplitTabWidget::currentWidget() const
-{
- QList<int> sizes = m_splitter->sizes();
- for (int i = 0; i < count(); ++i) {
- if (sizes.at(i) > 0 && m_splitter->widget(i)->hasFocus())
- return m_splitter->widget(i);
- }
- return nullptr;
-}
-
-void SwitchSplitTabWidget::updateSplitterSizes(int index)
-{
- QVector<int> splitterSizes(m_splitter->count());
- int splitterFullSize = 0;
- bool isHorizontal = m_splitter->orientation() == Qt::Horizontal;
- for (int i = 0; i < m_splitter->count(); ++i) {
- auto widget = m_splitter->widget(i);
- splitterFullSize += isHorizontal ? widget->width() : widget->height();
- }
-
- if (index > -1) {
- // collapse all but the one at index
- splitterSizes.fill(0);
- splitterSizes.replace(index, splitterFullSize);
- } else {
- // distribute full size among enabled tabs
- int divisor = splitterSizes.count();
- for (int i = 0; i < m_splitter->count(); ++i) {
- if (!m_tabBar->isTabEnabled(i + fakeTab))
- --divisor;
- }
-
- int splitSize = splitterFullSize / divisor;
- for (int i = 0; i < m_splitter->count(); ++i)
- splitterSizes.replace(i, m_tabBar->isTabEnabled(i + fakeTab) ? splitSize : 0);
- }
-
- m_splitter->setSizes(splitterSizes.toList());
-}
-
-int SwitchSplitTabWidget::addTab(QWidget *w, const QString &label)
-{
- m_splitter->addWidget(w);
- const int newIndex = m_tabBar->addTab(label);
- if (mode() == TabMode) {
- m_tabBar->setCurrentIndex(newIndex);
- updateSplitterSizes(newIndex - fakeTab);
- }
- if (mode() == SplitMode)
- updateSplitterSizes();
- updateSplitButtons();
- return newIndex;
-}
-
-QWidget *SwitchSplitTabWidget::takeTabWidget(const int index)
-{
- if (index == -1 || index > count() - 1)
- return nullptr;
- QWidget *widget = m_splitter->widget(index);
- widget->setParent(nullptr);
- m_tabBar->removeTab(index + fakeTab);
- // TODO: set which mode and tab is the current one
- updateSplitButtons();
- return widget;
-}
-
-void SwitchSplitTabWidget::switchTo(QWidget *widget)
-{
- if (widget == nullptr || currentWidget() == widget)
- return;
- const int widgetIndex = m_splitter->indexOf(widget);
- Q_ASSERT(widgetIndex != -1);
- if (mode() == TabMode) {
- updateSplitterSizes(widgetIndex);
- m_tabBar->setCurrentIndex(widgetIndex + fakeTab);
- }
-
- widget->setFocus();
-}
-
-void SwitchSplitTabWidget::updateSplitButtons()
-{
- const bool isTabBarNecessary = count() > 1;
- m_tabBarBackground->setVisible(isTabBarNecessary);
-}
-
-void SwitchSplitTabWidget::selectFakeTab()
-{
- m_tabBar->setCurrentIndex(0);
-}
-
-SwitchSplitTabWidget::Mode SwitchSplitTabWidget::mode() const
-{
- const bool isTabBarNecessary = count() > 1;
- const int fakeTabPosition = 0;
- const int hasSelectedTab = m_tabBar->currentIndex() > fakeTabPosition;
- // Note: When splitting the view by dragging from the side of the view, SplitMode is not detected
- return (isTabBarNecessary && !hasSelectedTab) ? SplitMode : TabMode;
-}
-
-} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/switchsplittabwidget.h b/src/plugins/qmldesigner/switchsplittabwidget.h
deleted file mode 100644
index 72c5cc3e5e..0000000000
--- a/src/plugins/qmldesigner/switchsplittabwidget.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** 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.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <QWidget>
-
-QT_BEGIN_NAMESPACE
-class QTabBar;
-class QSplitter;
-class QPushButton;
-QT_END_NAMESPACE
-
-namespace QmlDesigner {
-class SwitchSplitTabWidget : public QWidget
-{
- Q_OBJECT
-
- enum Mode { SplitMode, TabMode };
-
-public:
- explicit SwitchSplitTabWidget(QWidget *parent = nullptr);
- int count() const;
- QWidget *currentWidget() const;
-
- int addTab(QWidget *widget, const QString &label);
- QWidget *takeTabWidget(const int index);
- void switchTo(QWidget *widget);
-
-private:
- void updateSplitterSizes(int index = -1);
- void updateSplitButtons();
- void selectFakeTab();
- Mode mode() const;
-
- QSplitter *m_splitter = nullptr;
- QTabBar *m_tabBar = nullptr;
- QWidget *m_tabBarBackground = nullptr;
- const int fakeTab = 1;
-};
-} // namespace QmlDesigner
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 815be89bba..05f3c8ae17 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -485,9 +485,10 @@ void CodeAssistantPrivate::destroyContext()
if (isWaitingForProposal()) {
cancelCurrentRequest();
- } else if (isDisplayingProposal()) {
+ } else if (m_proposalWidget) {
m_editorWidget->keepAutoCompletionHighlight(false);
- m_proposalWidget->closeProposal();
+ if (m_proposalWidget->isVisible())
+ m_proposalWidget->closeProposal();
disconnect(m_proposalWidget, &QObject::destroyed,
this, &CodeAssistantPrivate::finalizeProposal);
finalizeProposal();
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index 26d3d04194..d74a13b2cc 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -45,7 +45,6 @@
static const char fontFamilyKey[] = "FontFamily";
static const char fontSizeKey[] = "FontSize";
static const char fontZoomKey[] = "FontZoom";
-static const char lineSpacingKey[] = "LineSpacing";
static const char antialiasKey[] = "FontAntialias";
static const char schemeFileNamesKey[] = "ColorSchemes";
@@ -57,13 +56,11 @@ static const bool DEFAULT_ANTIALIAS = true;
namespace TextEditor {
// -- FontSettings
-FontSettings::FontSettings()
- : m_family(defaultFixedFontFamily())
- , m_fontSize(defaultFontSize())
- , m_fontZoom(100)
- , m_lineSpacing(100)
- , m_antialias(DEFAULT_ANTIALIAS)
- , m_lineSpacingCache(0)
+FontSettings::FontSettings() :
+ m_family(defaultFixedFontFamily()),
+ m_fontSize(defaultFontSize()),
+ m_fontZoom(100),
+ m_antialias(DEFAULT_ANTIALIAS)
{
}
@@ -72,10 +69,10 @@ void FontSettings::clear()
m_family = defaultFixedFontFamily();
m_fontSize = defaultFontSize();
m_fontZoom = 100;
- m_lineSpacing = 100;
m_antialias = DEFAULT_ANTIALIAS;
m_scheme.clear();
- clearCaches();
+ m_formatCache.clear();
+ m_textCharFormatCache.clear();
}
static QString settingsGroup()
@@ -92,12 +89,9 @@ void FontSettings::toSettings(QSettings *s) const
if (m_fontSize != defaultFontSize() || s->contains(QLatin1String(fontSizeKey)))
s->setValue(QLatin1String(fontSizeKey), m_fontSize);
- if (m_fontZoom != 100 || s->contains(QLatin1String(fontZoomKey)))
+ if (m_fontZoom!= 100 || s->contains(QLatin1String(fontZoomKey)))
s->setValue(QLatin1String(fontZoomKey), m_fontZoom);
- if (m_lineSpacing != 100 || s->contains(QLatin1String(lineSpacingKey)))
- s->setValue(QLatin1String(lineSpacingKey), m_lineSpacing);
-
if (m_antialias != DEFAULT_ANTIALIAS || s->contains(QLatin1String(antialiasKey)))
s->setValue(QLatin1String(antialiasKey), m_antialias);
@@ -122,8 +116,7 @@ bool FontSettings::fromSettings(const FormatDescriptions &descriptions, const QS
m_family = s->value(group + QLatin1String(fontFamilyKey), defaultFixedFontFamily()).toString();
m_fontSize = s->value(group + QLatin1String(fontSizeKey), m_fontSize).toInt();
- m_fontZoom = s->value(group + QLatin1String(fontZoomKey), m_fontZoom).toInt();
- m_lineSpacing = s->value(group + QLatin1String(lineSpacingKey), m_lineSpacing).toInt();
+ m_fontZoom= s->value(group + QLatin1String(fontZoomKey), m_fontZoom).toInt();
m_antialias = s->value(group + QLatin1String(antialiasKey), DEFAULT_ANTIALIAS).toBool();
if (s->contains(group + QLatin1String(schemeFileNamesKey))) {
@@ -141,12 +134,11 @@ bool FontSettings::fromSettings(const FormatDescriptions &descriptions, const QS
bool FontSettings::equals(const FontSettings &f) const
{
return m_family == f.m_family
- && m_schemeFileName == f.m_schemeFileName
- && m_fontSize == f.m_fontSize
- && m_lineSpacing == f.m_lineSpacing
- && m_fontZoom == f.m_fontZoom
- && m_antialias == f.m_antialias
- && m_scheme == f.m_scheme;
+ && m_schemeFileName == f.m_schemeFileName
+ && m_fontSize == f.m_fontSize
+ && m_fontZoom == f.m_fontZoom
+ && m_antialias == f.m_antialias
+ && m_scheme == f.m_scheme;
}
uint qHash(const TextStyle &textStyle)
@@ -280,13 +272,6 @@ void FontSettings::addMixinStyle(QTextCharFormat &textCharFormat,
};
}
-void FontSettings::clearCaches()
-{
- m_formatCache.clear();
- m_textCharFormatCache.clear();
- m_lineSpacingCache = 0;
-}
-
QTextCharFormat FontSettings::toTextCharFormat(TextStyles textStyles) const
{
auto textCharFormatIterator = m_textCharFormatCache.find(textStyles);
@@ -327,7 +312,8 @@ QString FontSettings::family() const
void FontSettings::setFamily(const QString &family)
{
m_family = family;
- clearCaches();
+ m_formatCache.clear();
+ m_textCharFormatCache.clear();
}
/**
@@ -341,7 +327,8 @@ int FontSettings::fontSize() const
void FontSettings::setFontSize(int size)
{
m_fontSize = size;
- clearCaches();
+ m_formatCache.clear();
+ m_textCharFormatCache.clear();
}
/**
@@ -357,28 +344,6 @@ void FontSettings::setFontZoom(int zoom)
m_fontZoom = zoom;
m_formatCache.clear();
m_textCharFormatCache.clear();
- m_lineSpacingCache = 0;
-}
-
-qreal FontSettings::lineSpacing() const
-{
- if (qFuzzyIsNull(m_lineSpacingCache)) {
- auto currentFont = font();
- currentFont.setPointSize(m_fontSize * m_fontZoom / 100);
- m_lineSpacingCache = QFontMetricsF(currentFont).lineSpacing() / 100 * m_lineSpacing;
- }
- return m_lineSpacingCache;
-}
-
-int FontSettings::relativeLineSpacing() const
-{
- return m_lineSpacing;
-}
-
-void FontSettings::setRelativeLineSpacing(int relativeLineSpacing)
-{
- m_lineSpacing = relativeLineSpacing;
- m_lineSpacingCache = 0;
}
QFont FontSettings::font() const
@@ -399,7 +364,8 @@ bool FontSettings::antialias() const
void FontSettings::setAntialias(bool antialias)
{
m_antialias = antialias;
- clearCaches();
+ m_formatCache.clear();
+ m_textCharFormatCache.clear();
}
/**
@@ -436,7 +402,8 @@ void FontSettings::setColorSchemeFileName(const QString &fileName)
bool FontSettings::loadColorScheme(const QString &fileName,
const FormatDescriptions &descriptions)
{
- clearCaches();
+ m_formatCache.clear();
+ m_textCharFormatCache.clear();
bool loaded = true;
m_schemeFileName = fileName;
@@ -492,7 +459,8 @@ const ColorScheme &FontSettings::colorScheme() const
void FontSettings::setColorScheme(const ColorScheme &scheme)
{
m_scheme = scheme;
- clearCaches();
+ m_formatCache.clear();
+ m_textCharFormatCache.clear();
}
static QString defaultFontFamily()
diff --git a/src/plugins/texteditor/fontsettings.h b/src/plugins/texteditor/fontsettings.h
index 0fbc80e15d..9447141434 100644
--- a/src/plugins/texteditor/fontsettings.h
+++ b/src/plugins/texteditor/fontsettings.h
@@ -75,10 +75,6 @@ public:
int fontZoom() const;
void setFontZoom(int zoom);
- qreal lineSpacing() const;
- int relativeLineSpacing() const;
- void setRelativeLineSpacing(int relativeLineSpacing);
-
QFont font() const;
bool antialias() const;
@@ -104,19 +100,16 @@ public:
private:
void addMixinStyle(QTextCharFormat &textCharFormat, const MixinTextStyles &mixinStyles) const;
- void clearCaches();
private:
QString m_family;
QString m_schemeFileName;
int m_fontSize;
int m_fontZoom;
- int m_lineSpacing;
bool m_antialias;
ColorScheme m_scheme;
mutable QHash<TextStyle, QTextCharFormat> m_formatCache;
mutable QHash<TextStyles, QTextCharFormat> m_textCharFormatCache;
- mutable qreal m_lineSpacingCache;
};
inline bool operator==(const FontSettings &f1, const FontSettings &f2) { return f1.equals(f2); }
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index 41450ec8cf..0e35cade04 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -31,9 +31,9 @@
#include <coreplugin/icore.h>
#include <utils/fileutils.h>
+#include <utils/stringutils.h>
#include <utils/qtcassert.h>
#include <utils/theme/theme.h>
-#include <utils/utilsicons.h>
#include <QFileDialog>
#include <QFontDatabase>
@@ -128,11 +128,6 @@ public:
m_ui.antialias->setChecked(m_value.antialias());
m_ui.zoomSpinBox->setValue(m_value.fontZoom());
- m_ui.lineSpacingSpinBox->setValue(m_value.relativeLineSpacing());
- m_ui.lineSpacingWarningLabel->setPixmap(Utils::Icons::WARNING.pixmap());
- m_ui.lineSpacingWarningLabel->setToolTip(tr("A line spacing less than 100% can result in "
- "overlapping and misaligned graphics."));
- m_ui.lineSpacingWarningLabel->setVisible(m_value.relativeLineSpacing() < 100);
m_ui.schemeEdit->setFormatDescriptions(fd);
m_ui.schemeEdit->setBaseFont(m_value.font());
@@ -148,8 +143,6 @@ public:
this, &FontSettingsPageWidget::fontSizeSelected);
connect(m_ui.zoomSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
this, &FontSettingsPageWidget::fontZoomChanged);
- connect(m_ui.lineSpacingSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
- this, &FontSettingsPageWidget::lineSpacingChanged);
connect(m_ui.antialias, &QCheckBox::toggled,
this, &FontSettingsPageWidget::antialiasChanged);
connect(m_ui.schemeComboBox,
@@ -173,7 +166,6 @@ public:
void fontSelected(const QFont &font);
void fontSizeSelected(int index);
void fontZoomChanged();
- void lineSpacingChanged(const int &value);
void antialiasChanged();
void colorSchemeSelected(int index);
void openCopyColorSchemeDialog();
@@ -425,12 +417,6 @@ void FontSettingsPageWidget::fontZoomChanged()
m_value.setFontZoom(m_ui.zoomSpinBox->value());
}
-void FontSettingsPageWidget::lineSpacingChanged(const int &value)
-{
- m_value.setRelativeLineSpacing(value);
- m_ui.lineSpacingWarningLabel->setVisible(value < 100);
-}
-
void FontSettingsPageWidget::antialiasChanged()
{
m_value.setAntialias(m_ui.antialias->isChecked());
diff --git a/src/plugins/texteditor/fontsettingspage.ui b/src/plugins/texteditor/fontsettingspage.ui
index da8a9fa907..5c61c00738 100644
--- a/src/plugins/texteditor/fontsettingspage.ui
+++ b/src/plugins/texteditor/fontsettingspage.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>752</width>
+ <width>639</width>
<height>306</height>
</rect>
</property>
@@ -17,23 +17,40 @@
<string>Font</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="5">
- <widget class="QComboBox" name="sizeComboBox">
+ <item row="0" column="4">
+ <widget class="QLabel" name="sizeLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>1</horstretch>
+ <horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="editable">
- <bool>true</bool>
+ <property name="text">
+ <string>Size:</string>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QFontComboBox" name="fontComboBox"/>
- </item>
<item row="0" column="7">
+ <widget class="QLabel" name="zoomLabel">
+ <property name="text">
+ <string>Zoom:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="familyLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Family:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="6">
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -49,7 +66,7 @@
</property>
</spacer>
</item>
- <item row="0" column="14">
+ <item row="0" column="9">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -62,19 +79,6 @@
</property>
</spacer>
</item>
- <item row="0" column="4">
- <widget class="QLabel" name="sizeLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Size:</string>
- </property>
- </widget>
- </item>
<item row="1" column="0" colspan="3">
<widget class="QCheckBox" name="antialias">
<property name="text">
@@ -82,32 +86,6 @@
</property>
</widget>
</item>
- <item row="0" column="9">
- <widget class="QSpinBox" name="zoomSpinBox">
- <property name="suffix">
- <string>%</string>
- </property>
- <property name="minimum">
- <number>10</number>
- </property>
- <property name="maximum">
- <number>3000</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- <property name="value">
- <number>100</number>
- </property>
- </widget>
- </item>
- <item row="0" column="8">
- <widget class="QLabel" name="zoomLabel">
- <property name="text">
- <string>Zoom:</string>
- </property>
- </widget>
- </item>
<item row="0" column="3">
<spacer>
<property name="orientation">
@@ -124,61 +102,41 @@
</property>
</spacer>
</item>
- <item row="0" column="12">
- <widget class="QSpinBox" name="lineSpacingSpinBox">
+ <item row="0" column="8">
+ <widget class="QSpinBox" name="zoomSpinBox">
<property name="suffix">
<string>%</string>
</property>
<property name="minimum">
- <number>50</number>
+ <number>10</number>
</property>
<property name="maximum">
<number>3000</number>
</property>
+ <property name="singleStep">
+ <number>10</number>
+ </property>
<property name="value">
<number>100</number>
</property>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="familyLabel">
+ <item row="0" column="1">
+ <widget class="QFontComboBox" name="fontComboBox"/>
+ </item>
+ <item row="0" column="5">
+ <widget class="QComboBox" name="sizeComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
+ <horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text">
- <string>Family:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="11">
- <widget class="QLabel" name="lineSpacingLabel">
- <property name="text">
- <string>Line spacing:</string>
+ <property name="editable">
+ <bool>true</bool>
</property>
</widget>
</item>
- <item row="0" column="10">
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="13">
- <widget class="QLabel" name="lineSpacingWarningLabel"/>
- </item>
</layout>
</widget>
</item>
@@ -242,7 +200,6 @@
<tabstop>fontComboBox</tabstop>
<tabstop>sizeComboBox</tabstop>
<tabstop>zoomSpinBox</tabstop>
- <tabstop>lineSpacingSpinBox</tabstop>
<tabstop>antialias</tabstop>
<tabstop>schemeComboBox</tabstop>
<tabstop>copyButton</tabstop>
diff --git a/src/plugins/texteditor/textdocumentlayout.cpp b/src/plugins/texteditor/textdocumentlayout.cpp
index 70b63e0303..a2f292e9c7 100644
--- a/src/plugins/texteditor/textdocumentlayout.cpp
+++ b/src/plugins/texteditor/textdocumentlayout.cpp
@@ -24,13 +24,8 @@
****************************************************************************/
#include "textdocumentlayout.h"
-
-#include "fontsettings.h"
#include "textdocument.h"
-#include "texteditorsettings.h"
-
#include <utils/qtcassert.h>
-
#include <QDebug>
namespace TextEditor {
@@ -630,9 +625,6 @@ void TextDocumentLayout::updateMarksBlock(const QTextBlock &block)
QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
{
QRectF boundingRect = QPlainTextDocumentLayout::blockBoundingRect(block);
- if (boundingRect.isNull())
- return boundingRect;
- boundingRect.setHeight(TextEditorSettings::fontSettings().lineSpacing());
if (TextBlockUserData *userData = textUserData(block))
boundingRect.adjust(0, 0, 0, userData->additionalAnnotationHeight());
return boundingRect;
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 516b82ac72..6bd05f9b2c 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -1107,9 +1107,9 @@ void TextEditorWidget::print(QPrinter *printer)
delete dlg;
}
-static int foldBoxWidth()
+static int foldBoxWidth(const QFontMetrics &fm)
{
- const int lineSpacing = TextEditorSettings::fontSettings().lineSpacing();
+ const int lineSpacing = fm.lineSpacing();
return lineSpacing + lineSpacing % 2 + 1;
}
@@ -3606,9 +3606,9 @@ QRect TextEditorWidgetPrivate::foldBox()
QRectF br = q->blockBoundingGeometry(begin).translated(q->contentOffset());
QRectF er = q->blockBoundingGeometry(end).translated(q->contentOffset());
- return QRect(m_extraArea->width() - foldBoxWidth(),
+ return QRect(m_extraArea->width() - foldBoxWidth(q->fontMetrics()),
int(br.top()),
- foldBoxWidth(),
+ foldBoxWidth(q->fontMetrics()),
int(er.bottom() - br.top()));
}
@@ -4089,9 +4089,7 @@ bool TextEditorWidgetPrivate::updateAnnotationBounds(TextBlockUserData *blockUse
{
const bool additionalHeightNeeded = annotationsVisible
&& m_displaySettings.m_annotationAlignment == AnnotationAlignment::BetweenLines;
- const int additionalHeight = additionalHeightNeeded
- ? TextEditorSettings::fontSettings().lineSpacing()
- : 0;
+ const int additionalHeight = additionalHeightNeeded ? q->fontMetrics().lineSpacing() : 0;
if (blockUserData->additionalAnnotationHeight() == additionalHeight)
return false;
blockUserData->setAdditionalAnnotationHeight(additionalHeight);
@@ -4132,7 +4130,7 @@ void TextEditorWidgetPrivate::updateLineAnnotation(const PaintEventData &data,
return mark1->priority() > mark2->priority();
});
- const qreal itemOffset = blockData.boundingRect.height();
+ const qreal itemOffset = q->fontMetrics().lineSpacing();
const qreal initialOffset = m_displaySettings.m_annotationAlignment == AnnotationAlignment::BetweenLines ? itemOffset / 2 : itemOffset * 2;
const qreal minimalContentWidth = q->fontMetrics().horizontalAdvance('X')
* m_displaySettings.m_minimalAnnotationContent;
@@ -4177,6 +4175,13 @@ void TextEditorWidgetPrivate::updateLineAnnotation(const PaintEventData &data,
q->viewport()->update(updateRect);
}
+QColor blendRightMarginColor(const FontSettings &settings, bool areaColor)
+{
+ const QColor baseColor = settings.toTextCharFormat(C_TEXT).background().color();
+ const QColor col = (baseColor.value() > 128) ? Qt::black : Qt::white;
+ return blendColors(baseColor, col, areaColor ? 16 : 32);
+}
+
void TextEditorWidgetPrivate::paintRightMarginArea(PaintEventData &data, QPainter &painter) const
{
if (m_visibleWrapColumn <= 0)
@@ -4191,7 +4196,7 @@ void TextEditorWidgetPrivate::paintRightMarginArea(PaintEventData &data, QPainte
data.eventRect.top(),
data.viewportRect.width() - data.rightMargin,
data.eventRect.height());
- painter.fillRect(behindMargin, data.ifdefedOutFormat.background());
+ painter.fillRect(behindMargin, blendRightMarginColor(m_document->fontSettings(), true));
}
}
@@ -4201,11 +4206,8 @@ void TextEditorWidgetPrivate::paintRightMarginLine(const PaintEventData &data,
if (m_visibleWrapColumn <= 0 || data.rightMargin >= data.viewportRect.width())
return;
- const QBrush background = data.ifdefedOutFormat.background();
- const QColor baseColor = m_document->fontSettings().toTextCharFormat(C_TEXT).background().color();
- const QColor col = (baseColor.value() > 128) ? Qt::black : Qt::white;
const QPen pen = painter.pen();
- painter.setPen(blendColors(background.isOpaque() ? background.color() : baseColor, col, 32));
+ painter.setPen(blendRightMarginColor(m_document->fontSettings(), false));
painter.drawLine(QPointF(data.rightMargin, data.eventRect.top()),
QPointF(data.rightMargin, data.eventRect.bottom()));
painter.setPen(pen);
@@ -5027,7 +5029,7 @@ int TextEditorWidget::extraAreaWidth(int *markWidthPtr) const
int markWidth = 0;
if (d->m_marksVisible) {
- markWidth += documentLayout->maxMarkWidthFactor * TextEditorSettings::fontSettings().lineSpacing() + 2;
+ markWidth += documentLayout->maxMarkWidthFactor * fm.lineSpacing() + 2;
// if (documentLayout->doubleMarkCount)
// markWidth += fm.lineSpacing() / 3;
@@ -5042,7 +5044,7 @@ int TextEditorWidget::extraAreaWidth(int *markWidthPtr) const
space += 4;
if (d->m_codeFoldingVisible)
- space += foldBoxWidth();
+ space += foldBoxWidth(fm);
if (viewportMargins() != QMargins{isLeftToRight() ? space : 0, 0, isLeftToRight() ? 0 : space, 0})
d->slotUpdateExtraAreaWidth(space);
@@ -5068,9 +5070,9 @@ struct Internal::ExtraAreaPaintEventData
, selectionStart(editor->textCursor().selectionStart())
, selectionEnd(editor->textCursor().selectionEnd())
, fontMetrics(d->m_extraArea->font())
- , lineSpacing(TextEditorSettings::fontSettings().lineSpacing())
+ , lineSpacing(fontMetrics.lineSpacing())
, markWidth(d->m_marksVisible ? lineSpacing : 0)
- , collapseColumnWidth(d->m_codeFoldingVisible ? foldBoxWidth() : 0)
+ , collapseColumnWidth(d->m_codeFoldingVisible ? foldBoxWidth(fontMetrics) : 0)
, extraAreaWidth(d->m_extraArea->width() - collapseColumnWidth)
, currentLineNumberFormat(
editor->textDocument()->fontSettings().toTextCharFormat(C_CURRENT_LINE_NUMBER))
@@ -5194,7 +5196,7 @@ void TextEditorWidgetPrivate::paintCodeFolding(QPainter &painter,
bool hovered = blockNumber >= extraAreaHighlightFoldBlockNumber
&& blockNumber <= extraAreaHighlightFoldEndBlockNumber;
- int boxWidth = foldBoxWidth();
+ int boxWidth = foldBoxWidth(data.fontMetrics);
if (hovered) {
int itop = qRound(blockBoundingRect.top());
int ibottom = qRound(blockBoundingRect.bottom());
@@ -5567,10 +5569,8 @@ void TextEditorWidget::mouseMoveEvent(QMouseEvent *e)
if (cursor.positionInBlock() == cursor.block().length()-1)
column += (e->pos().x() - cursorRect().center().x()) / QFontMetricsF(font()).horizontalAdvance(QLatin1Char(' '));
int block = cursor.blockNumber();
- if (block == blockCount() - 1) {
- block += (e->pos().y() - cursorRect().center().y())
- / TextEditorSettings::fontSettings().lineSpacing();
- }
+ if (block == blockCount() - 1)
+ block += (e->pos().y() - cursorRect().center().y()) / QFontMetricsF(font()).lineSpacing();
d->enableBlockSelection(block, column, block, column);
}
} else {
@@ -5620,11 +5620,8 @@ void TextEditorWidget::mousePressEvent(QMouseEvent *e)
if (cursor.positionInBlock() == cursor.block().length()-1)
column += (e->pos().x() - cursorRect(cursor).center().x()) / QFontMetricsF(font()).horizontalAdvance(QLatin1Char(' '));
int block = cursor.blockNumber();
- if (block == blockCount() - 1) {
- block += (e->pos().y() - cursorRect(cursor).center().y())
- / TextEditorSettings::fontSettings().lineSpacing();
- }
-
+ if (block == blockCount() - 1)
+ block += (e->pos().y() - cursorRect(cursor).center().y()) / QFontMetricsF(font()).lineSpacing();
if (d->m_inBlockSelectionMode) {
d->m_blockSelection.positionBlock = block;
d->m_blockSelection.positionColumn = column;
@@ -5798,7 +5795,7 @@ void TextEditorWidget::updateFoldingHighlight(const QPoint &pos)
const int highlightBlockNumber = d->extraAreaHighlightFoldedBlockNumber;
d->extraAreaHighlightFoldedBlockNumber = -1;
- if (pos.x() > extraArea()->width() - foldBoxWidth()) {
+ if (pos.x() > extraArea()->width() - foldBoxWidth(fontMetrics())) {
d->extraAreaHighlightFoldedBlockNumber = cursor.blockNumber();
} else if (d->m_displaySettings.m_highlightBlocks) {
QTextCursor cursor = textCursor();
@@ -5841,7 +5838,7 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
int dist = (e->pos() - d->m_markDragStart).manhattanLength();
if (dist > QApplication::startDragDistance()) {
d->m_markDragging = true;
- const int height = TextEditorSettings::fontSettings().lineSpacing() - 1;
+ const int height = fontMetrics().lineSpacing() - 1;
const int width = int(.5 + height * d->m_dragMark->widthFactor());
d->m_markDragCursor = QCursor(d->m_dragMark->icon().pixmap({height, width}));
d->m_dragMark->setVisible(false);
@@ -5859,7 +5856,7 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonDblClick) {
if (e->button() == Qt::LeftButton) {
- int boxWidth = foldBoxWidth();
+ int boxWidth = foldBoxWidth(fontMetrics());
if (d->m_codeFoldingVisible && e->pos().x() > extraArea()->width() - boxWidth) {
if (!cursor.block().next().isVisible()) {
d->toggleBlockVisible(cursor.block());
@@ -6386,7 +6383,7 @@ void TextEditorWidgetPrivate::adjustScrollBarRanges()
{
if (!m_highlightScrollBarController)
return;
- const double lineSpacing = TextEditorSettings::fontSettings().lineSpacing();
+ const double lineSpacing = QFontMetricsF(q->font()).lineSpacing();
if (lineSpacing == 0)
return;
diff --git a/src/shared/qbs b/src/shared/qbs
-Subproject 0d5fdcee74b76175e0b03269b12d9bd4b6eee9c
+Subproject d870a7a4535e801e1161ececccd0d85dca0a340
diff --git a/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h b/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h
index 45bc71fdb4..c4fc1bf645 100644
--- a/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h
+++ b/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h
@@ -29,6 +29,7 @@
#include <sourcelocationscontainer.h>
#include <sourcerangescontainer.h>
+#include <clang/Basic/FileManager.h>
#include <clang/Basic/SourceManager.h>
#include <clang/Lex/Lexer.h>
#include <llvm/Support/FileSystem.h>
diff --git a/src/tools/clangrefactoringbackend/source/symbolsvisitorbase.h b/src/tools/clangrefactoringbackend/source/symbolsvisitorbase.h
index 7b63cb223e..d5a609315e 100644
--- a/src/tools/clangrefactoringbackend/source/symbolsvisitorbase.h
+++ b/src/tools/clangrefactoringbackend/source/symbolsvisitorbase.h
@@ -34,6 +34,7 @@
#include <utils/linecolumn.h>
#include <utils/optional.h>
+#include <clang/Basic/FileManager.h>
#include <clang/Basic/SourceLocation.h>
#include <clang/Basic/SourceManager.h>
#include <clang/Index/USRGeneration.h>
diff --git a/src/tools/qml2puppet/CMakeLists.txt b/src/tools/qml2puppet/CMakeLists.txt
index 85809020d8..1dbdd5b7fa 100644
--- a/src/tools/qml2puppet/CMakeLists.txt
+++ b/src/tools/qml2puppet/CMakeLists.txt
@@ -138,6 +138,14 @@ extend_qtc_executable(qml2puppet
)
extend_qtc_executable(qml2puppet
+ CONDITION Qt5_VERSION VERSION_GREATER_EQUAL 6.0.0
+
+ SOURCES_PREFIX "${SRCDIR}/qml2puppet/editor3d/qt5compat"
+ SOURCES
+ qquick3darealight.cpp qquick3darealight_p.h
+)
+
+extend_qtc_executable(qml2puppet
SOURCES_PREFIX "${SRCDIR}/qml2puppet/iconrenderer"
SOURCES
iconrenderer.cpp iconrenderer.h
diff --git a/src/tools/qml2puppet/qml2puppet.qbs b/src/tools/qml2puppet/qml2puppet.qbs
index 742c20406e..63341b5dc2 100644
--- a/src/tools/qml2puppet/qml2puppet.qbs
+++ b/src/tools/qml2puppet/qml2puppet.qbs
@@ -19,6 +19,8 @@ QtcTool {
property bool useQuick3d: Utilities.versionCompare(Qt.core.version, "5.15") >= 0
&& Qt["quick3d-private"].present
+ property bool useQt5Compat: Utilities.versionCompare(Qt.core.version, "6.0") >= 0
+
cpp.defines: {
var defines = base.filter(function(d) { return d != "QT_CREATOR"; });
if (useQuick3d)
@@ -258,6 +260,20 @@ QtcTool {
fileTags: product.useQuick3d ? [] : ["unmocable"]
overrideTags: false
}
+
+ Group {
+ name: "puppet2 Qt 5 compatibility sources"
+ condition: useQt5Compat
+ files: ["editor3d/qt5compat/qquick3darealight.cpp"]
+ }
+
+ Group {
+ name: "puppet2 Qt 5 compatibility headers"
+ condition: useQt5Compat
+ files: ["editor3d/qt5compat/qquick3darealight_p.h"]
+ fileTags: product.useQuick3d ? [] : ["unmocable"]
+ overrideTags: false
+ }
}
Group {