Commit Graph

31 Commits

Author SHA1 Message Date
Oliver Eftevaag 90b049ba26 texteditor: Change the HTML to use unordered lists for links
The text layout in this example has annoyed me for a while.
I liked it better when each link was a list item, which used to be the
case before a96871eac8.

Pick-to: 6.10
Change-Id: I68a6570dbc6c30e63b9d5b8b8079c9a58ab4e728
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2025-09-03 15:23:49 +00:00
Shawn Rutledge 17a225f09a TextEditor example: allow setting multiple font attributes
When a user activates the boldAction for example, the code was replacing
QTextCharFormat's font with a default-constructed font that has the bold
attribute set, which meant that it could not be bold, italic, underlined
struck out, and with a custom size and color at the same time. On the
other hand, when we do it the current way:
  textArea.cursorSelection.font.bold = checked
we call QQuickTextSelection::font(), QFont::setBold(), and then
QQuickTextSelection::setFont(). (QFont is a QML value type, so it's the
only way.) Perhaps at some point, something was going wrong with that,
but it seems to work now.

Amends 045f9ce192

Fixes: QTBUG-136250
Pick-to: 6.8 6.9
Change-Id: I268e5814e7aa52aeb5aaec2d1a8fbfbc0d670236
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2025-04-29 21:08:27 +02:00
Shawn Rutledge 5e8fba7715 TextEditor example: Add font and color dialog actions to Format menu
Task-number: QTBUG-136251
Pick-to: 6.8 6.9
Change-Id: I64d7a406d4acff5395cfc18c201888c17a44e10f
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2025-04-28 17:33:19 +00:00
Shawn Rutledge 9cd4e29afd Improve QML in Controls TextEditor example
Pick-to: 6.8 6.9
Task-number: QTBUG-119988
Change-Id: Iffc7df85f25024301efef591eb3fbfb1cfbe2f17
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2025-04-28 19:33:13 +02:00
Shawn Rutledge 64063946db TextEditor example: add actions to built-in context menu, remove custom menu
Since 3b598b6f75 TextArea comes with a built-in
context menu. Here we demonstrate how to add extra menu items to the end.

Pick-to: 6.9
Task-number: QTBUG-35598
Task-number: QTBUG-134903
Change-Id: I1e3d8c044939521aaa076486630e3b879130dfd1
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2025-04-08 12:37:00 +08:00
Fabian Kosmale 15a49ef0c1 Examples: use qt_standard_project_setup in more places
And remove the redundant AUTOMOC lines.
This also avoids a few policy related warnings.

Task-number: QTBUG-126201
Pick-to: 6.8
Change-Id: Idaa58d7fbc0236aa2091ead43d5a0e6f396647e1
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
2024-07-03 08:44:01 +02:00
Andreas Eliasson a7bd27f17d Doc: Fix qsTr() link
Fixes qdoc warning:
qtquickcontrols-texteditor.qdoc:128: Can't link to 'qsTr'

Pick-to: 6.8 6.7
Change-Id: Ib2543779cc97052fd754b417468cb315313503a9
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2024-07-01 05:21:46 +00:00
Alexandru Croitor a6bd1dc3e0 CMake: Add deployment API to our examples
Projects were modified using the tool at:
https://git.qt.io/alcroito/cmake_refactor

A few examples had to be adapted manually, mostly those that build
additional qml modules / plugins.

The INSTALL_EXAMPLESDIR and INSTALL_EXAMPLEDIR assignments were
removed, these are not needed anymore because example directory
selection is handled by the qt_internal_add_example calls.

The install(TARGETS) calls were modified according to our
documentation snippets for qt_generate_deploy_qml_app_script.

A qt_generate_deploy_qml_app_script call was added for each
executable target.

Note that the deployment step will be skipped in the CI for now,
because:
- we enable QT_DEPLOY_MINIMAL_EXAMPLES in the CI instructions and thus
  set QT_INTERNAL_SKIP_DEPLOYMENT to true
- standalone examples feature is not yet enabled in the CI, which
  means we continue to build examples in-tree, and deployment is
  disabled for in-tree prefix builds.
A small list of examples to deploy in the CI will be chosen in the
future, to ensure deployment coverage, without slowing down overall CI
times due to all the *deployqt invocations.

Even if deployment is disabled in the CI, the install(TARGETS) calls
for each example will still run, installing into an
'installed_examples' directory, which will not be archived by the CI.

The QtBundleQmlModuleForMacOS and bundle_shared code was removed,
because we can now depend on the MACOS_BUNDLE_POST_BUILD option of the
deployment api, to ensure macOS bundle examples run properly in the
build dir. This works even in prefix in-tree builds, when installation
deployment is disabled.

Finally, for all examples that build additional qml module libraries or
plugins, the libraries / plugins must be installed into the bin dir of
each project, along with a qmldir file.

This is to support running the installed project for platforms that
don't have deployment api yet, like boot2qt / yocto.

If we want to have super clean install / deployment rules in the
future, we won't be able to avoid adding ugly per-platform conditions.
The current status quo is deemed an improvement over what we had
before.

Pick-to: 6.7
Task-number: QTBUG-101340
Task-number: QTBUG-102056
Task-number: QTBUG-102057
Change-Id: I843d934668c25dbcd1abca52495b393579633fc5
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-03-27 18:57:34 +01:00
Lucie Gérard 53295d9102 Correct license for examples files
Example takes precedent over build system file type.
According to QUIP-18 [1], all examples file should be
LicenseRef-Qt-Commercial OR BSD-3-Clause

[1]: https://contribute.qt-project.org/quips/18

Pick-to: 6.7 6.7.0
Task-number: QTBUG-121787
Change-Id: Ie8c2539e7659f53a1fd6b48f99ee883ee9aeb0a7
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
2024-03-21 10:41:29 +01:00
Shawn Rutledge a96871eac8 Adjust Controls Text Editor example and docs further
- text formatting includes alignment, not just font properties
- update links in example.md
- update texteditor.html: don't mention Qt Labs Platform, but
  link to some recent new stuff
- if ToolButton.action is bound, enabled is redundant (the Action
  already has it)
- don't include QApplication

Amends 6217408799 and
21b3c4741e

Change-Id: Ie4565829f02d8ee1541ba4af9d64bd044739179f
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2024-03-18 22:02:01 -07:00
Shawn Rutledge 6217408799 doc: Update Controls Text Editor example docs
We also move ScrollBar to make explanation easier.

Pick-to: 6.7 6.7.0
Change-Id: If65de335f840382b5e236d8a04db382b0b7aee6a
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2024-03-12 14:24:26 -07:00
Shawn Rutledge a27b75c89d TextEditor example: use Actions in a DRY way; TapHandler
I'm not sure why the example was written with so much repetition,
but there must have been limitations back then. It's better to have
Action as the encapsulation for an operation, and simply bind it to
all the places where it's used (menubar, toolbar and context menu).
It would be even better if an Action could be added directly to a
Menu or ToolBar, but so far there's not a declarative way to do that
(only by using addAction(), which is only in Menu, not ToolBar).

We now use TapHandler instead of MouseArea to open the context menu.
It works fine either way, but at least we don't need anchors.fill.

Pick-to: 6.7 6.7.0
Change-Id: I74900ec49b57b616ffacddcf81c5aea12d4fefe6
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2024-03-12 17:56:34 +00:00
Shawn Rutledge 93a18268f9 doc: Update TextEdit.textFormat, text and TextDocument.source
Update docs after b46d6a75ac,
fdbacf2d5c etc.

Pick-to: 6.7
Change-Id: Ieb49d6876f0a86031fb0ffe970f695e5acbe4c43
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2024-03-06 20:40:19 -07:00
Santhosh Kumar 8d3ed392bb Update manual tests and examples for change in default size policy
The size policy of item updated as part of task QTBUG-117597. This
patch update existing examples and manual tests that depends on quick
layout to embrace size policy change.

Task-number: QTBUG-117597
Pick-to: 6.7
Change-Id: I68469a3bba3c4d3e5ed4b6eae0fd765b5206efc0
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2024-02-21 14:27:54 +01:00
Shawn Rutledge 5cba3f5a8d Text editor example: fix up the touch-specific UI
Catch up with recent changes in the default texteditor.qml file:

- TextDocument.status is new; the error signal is gone. Update as in
  bec8df96b7 and
  1e6cb2462e
- 3bae41faac changed the mapping of the
  "OK" checkmark in fontello.ttf
- use Actions to show and change cursorSelection styling, as in
  045f9ce192
- set a default window size; it doesn't matter on a mobile device that
  runs everything fullscreen, but it's easier to test on desktop with
  the -touch flag

Fixes: QTBUG-121840
Task-number: QTBUG-121946
Pick-to: 6.7
Change-Id: If678b92efe4e1824022fa0ee9106c0c3b0b9f194
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2024-02-15 10:26:05 -07:00
Shawn Rutledge 1e6cb2462e Use lookup table to show TextDocument status in texteditor example
Computed properties make it possible to use scoped enum values as
object property names. Amends bec8df96b7

Also remove semicolons for consistency.

Pick-to: 6.7
Task-number: QTBUG-121946
Change-Id: I1ee354722d9f0e065637731d1b535389a9cb0032
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2024-02-12 20:18:56 +00:00
Shawn Rutledge bec8df96b7 texteditor example: use TextDocument status rather than error signal
Amends 5647b6900b in which the error
signal was removed and replaced with a status property.

Pick-to: 6.7
Change-Id: I433987fe4c480c910c98c8fd3714c2e426e49c0f
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2024-02-05 15:07:44 -07:00
Jaishree Vyas 486cc33ce5 Doc: Create separate Graphics and Multimedia example categories
Fixes: QTBUG-117884
Pick-to: 6.6 6.7
Change-Id: Ib0bb6217c29795fe50efdf827aa9902bbd572032
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2024-01-17 15:36:27 +01:00
Shawn Rutledge 21b3c4741e Controls TextEditor example: remove Qt.labs and the widget dependency
This depends on the plan to have the Controls MenuBar and context Menu
"go native" on platforms that support it.

Task-number: QTBUG-119988
Task-number: QTBUG-106782
Change-Id: Ib8354b44bde385717431534d0260182715d66f16
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2023-12-15 02:28:09 -07:00
Shawn Rutledge 98d409a66e Get rid of DocumentHandler in the Text Editor example
...and fix a couple of minor issues that remained.

Fixes: QTBUG-81022
Change-Id: I5fc1547fb09caef5a9e24d95c2ca7b8d78ee104a
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-12-09 01:52:31 -07:00
Shawn Rutledge 045f9ce192 Add TextSelection (Tech Preview)
In the Controls text editor example, DocumentHandler always sounded like
a hack, just by its name.

We don't expect to be able to handle multiple selections anytime soon;
but if we realistically expect to have multi-seat support in Qt some
day, then probably the multi-user experience should include support for
multiple text cursors and selections. So we shouldn't paint ourselves
into a corner. QQuickTextControl works with only one QTextCursor most
of the time (but it's private, thus modifiable); and TextEdit has
properties like selectionStart, selectionEnd, selectedText, etc. which
seem to assume that there is only one selection.  So probably if we
needed to support multiple selections, we could add
Q_PROPERTY(QQmlListProperty<QQuickTextSelection> selections ...),
document that those legacy properties just work with the first
selection, and/or deprecate them.

So with that in mind, let's get started with a QQuickTextSelection
object. We add TextEdit.cursorSelection which holds the single selection
near the text cursor. It provides API needed for tracking and
manipulating often-used properties of selected rich text (such as
QTextCharFormat properties) so that DocumentHandler can be removed.

The example now uses TextArea.cursorSelection to manipulate the selected
text's format. It's not possible to be fully declarative with this API
though; we need to call setFont (by assigning a font), but QFont is a
value type, and is not as mergeable as QTextCharFormat is, for example.
If we used a binding rather than Action.onTriggered, it would trigger
reading the font for an entire span of selected text (which may have had
multiple fonts), setting one attribute (like bold), then applying the
font to the whole span. What we do now is almost like that; but instead
of reading the font first, we start with a default-constructed QFont,
set one attribute, and call QTextCursor::mergeCharFormat(), in the hope
that it can merge only the features of QFont that have actually been
set. Unfortunately this is not quite true either: if you toggle the
bold button, it might change the font size too, and so on; so maybe we
really need QTextCharFormat in QML (as a value type, presumably) to
implement those feature-toggling toolbar buttons correctly.

This API is in tech preview, because of such issues as described above;
because we're just scratching the surface of what might be possible;
because we should perhaps compare popular JavaScript text-editing APIs
that might be found elsewhere, in the meantime get feedback from users
during the tech preview phase, and keep iterating.

[ChangeLog][QtQuick][TextEdit] TextEdit.cursorSelection is a
TextSelection object, which provides properties to inspect and modify
the formatting of the single selection that is currently supported.
This API is in Tech Preview.

[ChangeLog][Controls][TextArea] TextArea.cursorSelection is a
TextSelection object, which provides properties to inspect and modify
the formatting of the single selection that is currently supported.
This API is in Tech Preview.

Task-number: QTBUG-36521
Task-number: QTBUG-38830
Task-number: QTBUG-81022
Change-Id: Icea99f633694aa712d0b4730b77369077288540f
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2023-12-08 20:11:28 +01:00
Shawn Rutledge b46d6a75ac Add load/save functionality to QQuickTextDocument (Tech Preview)
Since QTBUG-92155 is not done, we need an easy way to load and save text
into and out of a QTextDocument in QML. This patch follows the pattern
from Image and other types: add a `source` property, a URL from which
the file is to be loaded.

When it comes to saving, the pattern is not set: so far the only file
writing that has been available from QML is ItemGrabResult.saveToFile().
Since we need to save in specific formats, it makes sense to continue
that pattern: the text document knows how to do its own serialization,
so this is not suitable for generic data file I/O, even if we did have a
QML API for that. We add invokable functions save() and saveAs() for the
usual use cases in word processors and such. The URL extension
determines the file format.

Setting QQuickTextDocument's source is not allowed if the document has
unsaved changes. The user (app author) needs to call save() or override
modified to false first.

[ChangeLog][QtQuick][TextEdit] TextEdit.textDocument now has a source
property for loading files; save() and saveAs() functions for writing;
a modified property which tracks QTextDocument::modified; and an error
signal in case any of these operations fail. Setting the source
property is allowed only if the document is in unmodified state.
This API is in Tech Preview.

[ChangeLog][Controls][TextArea] TextArea.textDocument now has a source
property for loading files; save() and saveAs() functions for writing;
a modified property which tracks QTextDocument::modified; and an error
signal in case any of these operations fail. Setting the source
property is allowed only if the document is in unmodified state.
This API is in Tech Preview.

Change-Id: I687318523c7a520e02244e47224d067da55318b5
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-12-08 05:02:04 -07:00
Shawn Rutledge 3bae41faac TextEdit example: Add more FontAwesome icons to fontello.ttf
We'll soon be adding functionality to this example.

Change-Id: If084ce88b3008bfccc96e9ae059b32a99df9cfdf
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-12-08 05:01:46 -07:00
Sami Shalayel 743065d7fe TextEditor example: open file as text
The texteditor is made to open text, and in this case it makes sense to
pass the Text flag to the QFile::open call in the example code.

Pick-to: 6.5 6.6
Task-number: QTBUG-118636
Change-Id: I936610945aa6e2f67b29ce6f5c559a2b942fc718
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
2023-11-10 18:42:31 +01:00
Venugopal Shivashankar 2983a38c1d Doc: Add \examplecategory for Qt Quick Controls
Also, changed one of the example pages to a tutorial
page.

Task-number: QTBUG-115297
Pick-to: 6.5 6.6
Change-Id: Ife1b740523039b9287008a1c5243edfc4c1349d1
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
2023-07-21 13:01:41 +02:00
Kai Köhne 2e6403f8bf Examples: Use versioned CMake targets for Qt modules
Use e.g. Qt6::Core instead of Qt::Core. This is better matching the
find_package(Qt6 ...) call, and also avoids issues that the versionless
targets have.

Pick-to: 6.5
Task-number: QTBUG-113277
Change-Id: Ib80f885e9f73fb9ad54b9e9b22cae2318877dc07
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-05-02 12:12:35 +02:00
Friedemann Kleint a841da2c75 Gallery/Text editor: Update example logos
Pick-to: 6.5
Change-Id: I552edf074958be3af8c72042e65c6586308f434f
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2023-03-27 08:22:16 +01:00
Ulf Hermann 2d44365f69 CMake: Allow omitting the version of QML modules
Also, drop all the VERSION 1.0 lines from the examples and tests. 1.0 is
actually a bad default version since it's before all the Qt versions.

[ChangeLog][QML] You can now omit the VERSION argument to
qt_add_qml_module(). This will automatically generate the highest
possible version.

Pick-to: 6.5
Task-number: QTBUG-99146
Change-Id: Ic10ec69b87c224e0e94e1785f65653815d4c778c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
2023-01-27 19:16:39 +01:00
Ulf Hermann 34331019c2 TextEditor example: Avoid deprecation warning
What we want there is intercept the URL through the QML engine. No need
to dig out the specific QQmlFileSelector for that.

Pick-to: 6.5
Fixes: QTBUG-102777
Change-Id: I5ca59316a2434013f91afdf92d3e397ea2711128
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
2023-01-11 10:14:00 +01:00
Mitch Curtis 8b100bed52 Doc: remove "2" from Qt Quick Controls files
Work on this was already started for the documentation in
1abdfe5d5a.

The CMake target (docs_QuickControls2) probably can't be renamed
until we rename the library, which won't happen until Qt 7.

Task-number: QTBUG-95413
Change-Id: Ied20805a91286436606577c3de39671a447f27dd
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-12-01 10:26:28 +08:00
Mitch Curtis 4bd87b903b Remove "2" from Qt Quick Controls directories
Qt Quick Controls 2 was named that way because it was a follow-up to
Qt Quick Controls 1.x. Now that Qt Quick Controls 1 is no longer
supported, we don't need to have "2" in the name. Work on this was
already started for the documentation in
1abdfe5d5a.

By doing this renaming a few weeks before feature freeze, it won't
affect the release but still results in as little time possible spent
manually fixing conflicts in cherry-picks from non-LTS releases as a
result of the renaming.

This patch does the following:

- Renames directories.
- Adapts CMakeLists.txt and other files to account for the new paths.

A follow-up patch will handle documentation.

It does not touch library names or other user-facing stuff, as that
will have to be done in Qt 7.

Task-number: QTBUG-95413
Change-Id: I170d8db19033ee71e495ff0c5c1a517a41ed7634
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2022-12-01 10:26:20 +08:00