This was added to Kirigami in
https://invent.kde.org/frameworks/kirigami/-/merge_requests/314
and simplifies and standardizes the creation of simple text-based
headers in OverlaySheet. This commit ports the Translations KCM's
OverlaySheet header to use it. This is the only place in
plasma-workspace where such a port is appropriate.
in the hopes of increasing code clarity.
previously we had three distinct models. the model of languages, the
subset model of available languages (!selected), and the inverse model
of selected languages (!available).
this does make a lot of sense conceptually but also complicated the code
a whole lot because data needs to be shuffled and shared between the
three models. this lead to partial duplication in the data() function,
as well as the need for excess book keeping of the lists.
the new design takes a different approach: there is a single model of
all translations now. in the UI it gets filtered into the visual
incarnations: available and selected - these simply sort and filter as
necessary.
the actual languages are now objects to encapsulate their newly found
statefulness with the new languagecompleter tech. this also allows us to
move the actual mutation logic into the language itself. to on-demand
complete a language by installing missing packages one now calls
complete() on the language which in turn internally defers to the
various abstraction systems.
one unfortunate aspect is that the requirements for selected languages
is kind of divergent from available languages. for selected languages
their *configured* order matters. to enable this there is a secondary
list of languages purely for establishing the selection and selection
preference (i.e. order of use). this is a bit awkward but considering
this very minor divergent in requirements I didn't see justification to
make selected languages a completely separate model.
the refactor also, rather by accident, repairs the handling of missing
languages which probably broke at some point because of the excessive
book keeping work (the missing languages never showed up in the model)
the visualization of missing languages is also streamlined now by not
treating them as part of the model but rather a secondary list of codes
that are configured but not actually available on the system. this
reduces the visual presentation a bit (not that it was particularly
useful since you can't do anything with a missing language anyway) but
has the advantage that it means we can consider the base model of
languages const (Language instance are loaded at startup only) and also
removes some cruft from the qml code that purely existed to visualize
missing languages.
to be clear: the languages are still listed in a warning, but no longer
displayed in the listview.
the desktop style forces a bit of padding onto the indicator which
combined with implicit small sizing in a layout means the indicator
comes out waaaaaay too small as half the available space is padding.
disable padding entirely, we don't really need it here
this caused an unnecessary warning. when the list is empty the join
results in "" which is considered invalid for the reference of %2
leading to ki18n warning that not enough arguments were supplied. simply
return an empty string when the message is not visible
the recycler did not really serve a purpose here. the delegates are
fairly cheap and there's a very finite amount of them and the amount
isn't going to be in the thousands either
it did however cause spurious warnings because there is a space of time
where model and index isn't available to the delegate and so trying to
get a role out of the model would cause warnings because model is null
initially.
removing the recycler gets rid of the warnings.
I've also changed parent.width to refer to the view explicitly as parent
isn't necessarily defined right out the gate causing excess warnings.
this is also typically what we do in other places.
To be consistent with what we generally do in other places, use the
trashcan icon for the remove button, and only show it when the list has
more than one item in it.
BUG: 437567
BUG: 437566
FIXED-IN: 5.22
Removing the only item makes no conceptual sense, so let's not permit
it. Likewise, when there's only one item, it can't be moved to the top
since it's already at the top, so let's not show that one either.
BUG: 397978
FIXED-IN: 5.21
Qt 5.15 introduced new syntax for defining Connections. Fix warnings like this one:
QML Connections: Implicitly defined onFoo properties in Connections are deprecated. Use this syntax instead: function onFoo(<arguments>) { ... }
Summary:
This way the text doesn't get cut off the screen on at least the
PinePhone
Test Plan:
1. Open the Language KCM on a small screen without this patch
2. Open the Language KCM on a small screen with this patch
Reviewers: davidedmundson
Reviewed By: davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D27781
Summary:
This is not really needed here due to the size of the delegates and of
the list which is generally short. I ended up getting rid of it because
it makes this config module crash somewhere in the QML runtime when the
user clicks reset. I couldn't track down why DelegateRecycler does this
so far.
Reviewers: #plasma, mart, davidedmundson, crossi, bport
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D26241