Merge branch 'master' of git.openprivacy.ca:cwtch.im/ui
the build was successful Details

This commit is contained in:
Dan Ballard 2020-05-20 14:49:07 -07:00
commit 8dacea29bb
79 changed files with 270 additions and 3712 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "qml/opaque"]
path = qml/opaque
url = https://git.openprivacy.ca/openprivacy/opaque

5
go.mod
View File

@ -7,6 +7,7 @@ require (
git.openprivacy.ca/openprivacy/connectivity v1.1.4
git.openprivacy.ca/openprivacy/log v1.0.0
github.com/gopherjs/gopherjs v0.0.0-20200209183636-89e6cbcd0b6d // indirect
github.com/therecipe/qt v0.0.0-20191101232336-18864661ae4f
github.com/therecipe/qt/internal/binding/files/docs/5.13.0 v0.0.0-20191002095216-73192f6811d0 // indirect; Required - do not delete or `go tidy` away
github.com/therecipe/qt v0.0.0-20200126204426-5074eb6d8c41
github.com/therecipe/qt/internal/binding/files/docs/5.12.0 v0.0.0-20200126204426-5074eb6d8c41 // indirect
github.com/therecipe/qt/internal/binding/files/docs/5.13.0 v0.0.0-20200126204426-5074eb6d8c41 // indirect
)

View File

@ -21,7 +21,7 @@ type GrandCentralDispatcher struct {
core.QObject
QMLEngine *qml.QQmlApplicationEngine
Translator *core.QTranslator
Translator, OpaqueTranslator *core.QTranslator
uIManagers map[string]Manager // profile-onion : Manager

View File

@ -55,111 +55,12 @@
<context>
<name>ContactList</name>
<message>
<location filename="../qml/widgets/ContactList.qml" line="42"/>
<location filename="../qml/widgets/ContactList.qml" line="41"/>
<source>paste-address-to-add-contact</source>
<extracomment>ex: &quot;... paste an address here to add a contact ...&quot;</extracomment>
<translation type="unfinished">Adresse hier hinzufügen, um einen Kontakt aufzunehmen</translation>
</message>
</context>
<context>
<name>EmojiDrawer</name>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="63"/>
<source>search</source>
<extracomment>Search...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="75"/>
<source>emojicat-expressions</source>
<extracomment>Expressions</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="83"/>
<source>emojicat-activities</source>
<extracomment>Activities</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="91"/>
<source>emojicat-food</source>
<extracomment>Food, drink &amp; herbs</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="99"/>
<source>emojicat-gender</source>
<extracomment>Gender, relationships &amp; sexuality</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="107"/>
<source>emojicat-nature</source>
<extracomment>Nature and effects</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="115"/>
<source>emojicat-objects</source>
<extracomment>Objects</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="123"/>
<source>emojicat-people</source>
<extracomment>People and animals</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="131"/>
<source>emojicat-symbols</source>
<extracomment>Symbols</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="139"/>
<source>emojicat-travel</source>
<extracomment>Travel &amp; places</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="147"/>
<source>emojicat-misc</source>
<extracomment>Miscellaneous</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GroupSettingsPane</name>
<message>
@ -205,14 +106,6 @@
<translation>Löschen</translation>
</message>
</context>
<context>
<name>InplaceEditText</name>
<message>
<location filename="../qml/widgets/InplaceEditText.qml" line="87"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListOverlay</name>
<message>
@ -237,7 +130,7 @@
<context>
<name>MembershipOverlay</name>
<message>
<location filename="../qml/overlays/MembershipOverlay.qml" line="21"/>
<location filename="../qml/overlays/MembershipOverlay.qml" line="22"/>
<source>membership-description</source>
<extracomment>Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.</extracomment>
<translation>Unten steht eine Liste der Benutzer, die Nachrichten an die Gruppe gesendet haben. Möglicherweise enthält diese Benutzerzliste nicht alle, die Zugang zur Gruppe haben.</translation>
@ -246,24 +139,24 @@
<context>
<name>Message</name>
<message>
<location filename="../qml/widgets/Message.qml" line="56"/>
<location filename="../qml/widgets/Message.qml" line="57"/>
<source>dm-tooltip</source>
<extracomment>Click to DM</extracomment>
<translation>Klicken, um DM zu senden</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>could-not-send-msg-error</source>
<extracomment>Could not send this message</extracomment>
<translation>Nachricht konnte nicht gesendet werden</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>acknowledged-label</source>
<translation>bestätigt</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>pending-label</source>
<translation>Bestätigung ausstehend</translation>
</message>
@ -294,35 +187,35 @@
<context>
<name>OverlayPane</name>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="23"/>
<location filename="../qml/panes/OverlayPane.qml" line="24"/>
<source>accept-group-invite-label</source>
<extracomment>Do you want to accept the invitation to $GROUP</extracomment>
<translation>Möchtest Du die Einladung annehmen</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="28"/>
<location filename="../qml/panes/OverlayPane.qml" line="29"/>
<source>accept-group-btn</source>
<extracomment>Accept group invite button</extracomment>
<translation>Annehmen</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="38"/>
<location filename="../qml/panes/OverlayPane.qml" line="39"/>
<source>reject-group-btn</source>
<extracomment>Reject Group invite button</extracomment>
<translation>Ablehnen</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="52"/>
<location filename="../qml/panes/OverlayPane.qml" line="53"/>
<source>chat-btn</source>
<translation>Chat</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="59"/>
<location filename="../qml/panes/OverlayPane.qml" line="60"/>
<source>lists-btn</source>
<translation>Listen</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="66"/>
<location filename="../qml/panes/OverlayPane.qml" line="67"/>
<source>bulletins-btn</source>
<translation>Meldungen</translation>
</message>
@ -344,28 +237,28 @@
<translation>Kopieren</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="51"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="52"/>
<source>copied-to-clipboard-notification</source>
<extracomment>notification: copied to clipboard</extracomment>
<translation>in die Zwischenablage kopiert</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="67"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="68"/>
<source>display-name-label</source>
<translation>Angezeigter Name</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="77"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="78"/>
<source>save-btn</source>
<translation>speichern</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="124"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="126"/>
<source>delete-btn</source>
<translation>löschen</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="96"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="98"/>
<source>block-btn</source>
<translation type="unfinished"></translation>
</message>
@ -478,7 +371,7 @@
<context>
<name>ProfileList</name>
<message>
<location filename="../qml/widgets/ProfileList.qml" line="106"/>
<location filename="../qml/widgets/ProfileList.qml" line="108"/>
<source>add-new-profile-btn</source>
<translation type="unfinished"></translation>
</message>
@ -486,24 +379,24 @@
<context>
<name>ProfileManagerPane</name>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="27"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="29"/>
<source>enter-profile-password</source>
<extracomment>Please enter password:</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="36"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="38"/>
<source>password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="46"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="48"/>
<source>error-0-profiles-loaded-for-password</source>
<extracomment>0 profiles loaded with that password</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="56"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="58"/>
<source>unlock</source>
<extracomment>Unlock</extracomment>
<translation type="unfinished"></translation>
@ -550,31 +443,4 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Statusbar</name>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="70"/>
<source>network-status-disconnected</source>
<extracomment>Disconnected from the internet, check your connection</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="80"/>
<source>network-status-attempting-tor</source>
<extracomment>Attempting to connect to Tor network</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="90"/>
<source>network-status-connecting</source>
<extracomment>Connecting...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="100"/>
<source>network-status-online</source>
<extracomment>Online</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View File

@ -55,7 +55,7 @@
<context>
<name>ContactList</name>
<message>
<location filename="../qml/widgets/ContactList.qml" line="42"/>
<location filename="../qml/widgets/ContactList.qml" line="41"/>
<source>paste-address-to-add-contact</source>
<extracomment>ex: &quot;... paste an address here to add a contact ...&quot;</extracomment>
<translation>... paste an address here to add a contact...</translation>
@ -64,106 +64,89 @@
<context>
<name>EmojiDrawer</name>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-android</source>
<translation>Click to cycle category.
<translation type="vanished">Click to cycle category.
Long-press to reset.</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-desktop</source>
<translation>Click to cycle category.
<translation type="vanished">Click to cycle category.
Right-click to reset.</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-android</source>
<translation>Click to cycle morphs.
<translation type="vanished">Click to cycle morphs.
Long-press to reset.</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-desktop</source>
<translation>Click to cycle morphs.
<translation type="vanished">Click to cycle morphs.
Right-click to reset.</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-android</source>
<translation>Click to cycle colours.
<translation type="vanished">Click to cycle colours.
Long-press to reset.</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-desktop</source>
<translation>Click to cycle colours.
<translation type="vanished">Click to cycle colours.
Right-click to reset.</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="63"/>
<source>search</source>
<extracomment>Search...</extracomment>
<translation>Search...</translation>
<translation type="vanished">Search...</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="75"/>
<source>emojicat-expressions</source>
<extracomment>Expressions</extracomment>
<translation>Expressions</translation>
<translation type="vanished">Expressions</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="83"/>
<source>emojicat-activities</source>
<extracomment>Activities</extracomment>
<translation>Activities</translation>
<translation type="vanished">Activities</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="91"/>
<source>emojicat-food</source>
<extracomment>Food, drink &amp; herbs</extracomment>
<translation>Food, drink &amp; herbs</translation>
<translation type="vanished">Food, drink &amp; herbs</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="99"/>
<source>emojicat-gender</source>
<extracomment>Gender, relationships &amp; sexuality</extracomment>
<translation>Gender, relationships &amp; sexuality</translation>
<translation type="vanished">Gender, relationships &amp; sexuality</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="107"/>
<source>emojicat-nature</source>
<extracomment>Nature and effects</extracomment>
<translation>Nature and effects</translation>
<translation type="vanished">Nature and effects</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="115"/>
<source>emojicat-objects</source>
<extracomment>Objects</extracomment>
<translation>Objects</translation>
<translation type="vanished">Objects</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="123"/>
<source>emojicat-people</source>
<extracomment>People and animals</extracomment>
<translation>People and animals</translation>
<translation type="vanished">People and animals</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="131"/>
<source>emojicat-symbols</source>
<extracomment>Symbols</extracomment>
<translation>Symbols</translation>
<translation type="vanished">Symbols</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="139"/>
<source>emojicat-travel</source>
<extracomment>Travel &amp; places</extracomment>
<translation>Travel &amp; places</translation>
<translation type="vanished">Travel &amp; places</translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="147"/>
<source>emojicat-misc</source>
<extracomment>Miscellaneous</extracomment>
<translation>Miscellaneous</translation>
<translation type="vanished">Miscellaneous</translation>
</message>
</context>
<context>
@ -214,9 +197,8 @@ Right-click to reset.</translation>
<context>
<name>InplaceEditText</name>
<message>
<location filename="../qml/widgets/InplaceEditText.qml" line="87"/>
<source>Update</source>
<translation>Update</translation>
<translation type="vanished">Update</translation>
</message>
</context>
<context>
@ -243,7 +225,7 @@ Right-click to reset.</translation>
<context>
<name>MembershipOverlay</name>
<message>
<location filename="../qml/overlays/MembershipOverlay.qml" line="21"/>
<location filename="../qml/overlays/MembershipOverlay.qml" line="22"/>
<source>membership-description</source>
<extracomment>Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.</extracomment>
<translation>Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.</translation>
@ -252,24 +234,24 @@ Right-click to reset.</translation>
<context>
<name>Message</name>
<message>
<location filename="../qml/widgets/Message.qml" line="56"/>
<location filename="../qml/widgets/Message.qml" line="57"/>
<source>dm-tooltip</source>
<extracomment>Click to DM</extracomment>
<translation>Click to DM</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>could-not-send-msg-error</source>
<extracomment>Could not send this message</extracomment>
<translation>Could not send this message</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>acknowledged-label</source>
<translation>Acknowledged</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>pending-label</source>
<translation>Pending</translation>
</message>
@ -300,35 +282,35 @@ Right-click to reset.</translation>
<context>
<name>OverlayPane</name>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="23"/>
<location filename="../qml/panes/OverlayPane.qml" line="24"/>
<source>accept-group-invite-label</source>
<extracomment>Do you want to accept the invitation to $GROUP</extracomment>
<translation>Do you want to accept the invitation to</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="28"/>
<location filename="../qml/panes/OverlayPane.qml" line="29"/>
<source>accept-group-btn</source>
<extracomment>Accept group invite button</extracomment>
<translation>Accept</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="38"/>
<location filename="../qml/panes/OverlayPane.qml" line="39"/>
<source>reject-group-btn</source>
<extracomment>Reject Group invite button</extracomment>
<translation>Reject</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="52"/>
<location filename="../qml/panes/OverlayPane.qml" line="53"/>
<source>chat-btn</source>
<translation>Chat</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="59"/>
<location filename="../qml/panes/OverlayPane.qml" line="60"/>
<source>lists-btn</source>
<translation>Lists</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="66"/>
<location filename="../qml/panes/OverlayPane.qml" line="67"/>
<source>bulletins-btn</source>
<translation>Bulletins</translation>
</message>
@ -350,23 +332,23 @@ Right-click to reset.</translation>
<translation>Copy</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="51"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="52"/>
<source>copied-to-clipboard-notification</source>
<extracomment>notification: copied to clipboard</extracomment>
<translation>Copied to Clipboard</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="67"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="68"/>
<source>display-name-label</source>
<translation>Display Name</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="77"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="78"/>
<source>save-btn</source>
<translation>Save</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="96"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="98"/>
<source>block-btn</source>
<translation>Block Peer</translation>
</message>
@ -375,7 +357,7 @@ Right-click to reset.</translation>
<translation type="vanished">Unblock Peer</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="124"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="126"/>
<source>delete-btn</source>
<translation>Delete</translation>
</message>
@ -496,7 +478,7 @@ Right-click to reset.</translation>
<context>
<name>ProfileList</name>
<message>
<location filename="../qml/widgets/ProfileList.qml" line="106"/>
<location filename="../qml/widgets/ProfileList.qml" line="108"/>
<source>add-new-profile-btn</source>
<translation>Add new profile</translation>
</message>
@ -504,24 +486,24 @@ Right-click to reset.</translation>
<context>
<name>ProfileManagerPane</name>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="27"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="29"/>
<source>enter-profile-password</source>
<extracomment>Please enter password:</extracomment>
<translation>Please enter password</translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="36"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="38"/>
<source>password</source>
<translation>Password</translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="46"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="48"/>
<source>error-0-profiles-loaded-for-password</source>
<extracomment>0 profiles loaded with that password</extracomment>
<translation>0 profiles loaded with that password</translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="56"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="58"/>
<source>unlock</source>
<extracomment>Unlock</extracomment>
<translation>Unlock</translation>
@ -579,28 +561,24 @@ Right-click to reset.</translation>
<context>
<name>Statusbar</name>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="70"/>
<source>network-status-disconnected</source>
<extracomment>Disconnected from the internet, check your connection</extracomment>
<translation>Disconnected from the internet, check your connection</translation>
<translation type="vanished">Disconnected from the internet, check your connection</translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="80"/>
<source>network-status-attempting-tor</source>
<extracomment>Attempting to connect to Tor network</extracomment>
<translation>Attempting to connect to Tor network</translation>
<translation type="vanished">Attempting to connect to Tor network</translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="90"/>
<source>network-status-connecting</source>
<extracomment>Connecting...</extracomment>
<translation>Connecting to network and peers...</translation>
<translation type="vanished">Connecting to network and peers...</translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="100"/>
<source>network-status-online</source>
<extracomment>Online</extracomment>
<translation>Online</translation>
<translation type="vanished">Online</translation>
</message>
</context>
</TS>

View File

@ -55,111 +55,12 @@
<context>
<name>ContactList</name>
<message>
<location filename="../qml/widgets/ContactList.qml" line="42"/>
<location filename="../qml/widgets/ContactList.qml" line="41"/>
<source>paste-address-to-add-contact</source>
<extracomment>ex: &quot;... paste an address here to add a contact ...&quot;</extracomment>
<translation type="unfinished">... coller une adresse ici pour ajouter un contact...</translation>
</message>
</context>
<context>
<name>EmojiDrawer</name>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="63"/>
<source>search</source>
<extracomment>Search...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="75"/>
<source>emojicat-expressions</source>
<extracomment>Expressions</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="83"/>
<source>emojicat-activities</source>
<extracomment>Activities</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="91"/>
<source>emojicat-food</source>
<extracomment>Food, drink &amp; herbs</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="99"/>
<source>emojicat-gender</source>
<extracomment>Gender, relationships &amp; sexuality</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="107"/>
<source>emojicat-nature</source>
<extracomment>Nature and effects</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="115"/>
<source>emojicat-objects</source>
<extracomment>Objects</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="123"/>
<source>emojicat-people</source>
<extracomment>People and animals</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="131"/>
<source>emojicat-symbols</source>
<extracomment>Symbols</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="139"/>
<source>emojicat-travel</source>
<extracomment>Travel &amp; places</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="147"/>
<source>emojicat-misc</source>
<extracomment>Miscellaneous</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GroupSettingsPane</name>
<message>
@ -205,14 +106,6 @@
<translation>Effacer</translation>
</message>
</context>
<context>
<name>InplaceEditText</name>
<message>
<location filename="../qml/widgets/InplaceEditText.qml" line="87"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListOverlay</name>
<message>
@ -237,7 +130,7 @@
<context>
<name>MembershipOverlay</name>
<message>
<location filename="../qml/overlays/MembershipOverlay.qml" line="21"/>
<location filename="../qml/overlays/MembershipOverlay.qml" line="22"/>
<source>membership-description</source>
<extracomment>Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.</extracomment>
<translation>Liste des utilisateurs ayant envoyés un ou plusieurs messages au groupe. Cette liste peut ne pas être representatives de l&apos;ensemble des membres du groupe.</translation>
@ -246,24 +139,24 @@
<context>
<name>Message</name>
<message>
<location filename="../qml/widgets/Message.qml" line="56"/>
<location filename="../qml/widgets/Message.qml" line="57"/>
<source>dm-tooltip</source>
<extracomment>Click to DM</extracomment>
<translation>Envoyer un message privé</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>could-not-send-msg-error</source>
<extracomment>Could not send this message</extracomment>
<translation>Impossible d&apos;envoyer ce message</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>acknowledged-label</source>
<translation>Confirmé</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>pending-label</source>
<translation>En attente</translation>
</message>
@ -294,35 +187,35 @@
<context>
<name>OverlayPane</name>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="23"/>
<location filename="../qml/panes/OverlayPane.qml" line="24"/>
<source>accept-group-invite-label</source>
<extracomment>Do you want to accept the invitation to $GROUP</extracomment>
<translation>Voulez-vous accepter l&apos;invitation au groupe</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="28"/>
<location filename="../qml/panes/OverlayPane.qml" line="29"/>
<source>accept-group-btn</source>
<extracomment>Accept group invite button</extracomment>
<translation>Accepter</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="38"/>
<location filename="../qml/panes/OverlayPane.qml" line="39"/>
<source>reject-group-btn</source>
<extracomment>Reject Group invite button</extracomment>
<translation>Refuser</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="52"/>
<location filename="../qml/panes/OverlayPane.qml" line="53"/>
<source>chat-btn</source>
<translation>Discuter</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="59"/>
<location filename="../qml/panes/OverlayPane.qml" line="60"/>
<source>lists-btn</source>
<translation>Listes</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="66"/>
<location filename="../qml/panes/OverlayPane.qml" line="67"/>
<source>bulletins-btn</source>
<translation>Bulletins</translation>
</message>
@ -344,28 +237,28 @@
<translation>Copier</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="51"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="52"/>
<source>copied-to-clipboard-notification</source>
<extracomment>notification: copied to clipboard</extracomment>
<translation>Copié dans le presse-papier</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="67"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="68"/>
<source>display-name-label</source>
<translation>Pseudo</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="77"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="78"/>
<source>save-btn</source>
<translation>Sauvegarder</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="124"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="126"/>
<source>delete-btn</source>
<translation>Effacer</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="96"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="98"/>
<source>block-btn</source>
<translation type="unfinished"></translation>
</message>
@ -478,7 +371,7 @@
<context>
<name>ProfileList</name>
<message>
<location filename="../qml/widgets/ProfileList.qml" line="106"/>
<location filename="../qml/widgets/ProfileList.qml" line="108"/>
<source>add-new-profile-btn</source>
<translation type="unfinished"></translation>
</message>
@ -486,24 +379,24 @@
<context>
<name>ProfileManagerPane</name>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="27"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="29"/>
<source>enter-profile-password</source>
<extracomment>Please enter password:</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="36"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="38"/>
<source>password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="46"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="48"/>
<source>error-0-profiles-loaded-for-password</source>
<extracomment>0 profiles loaded with that password</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="56"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="58"/>
<source>unlock</source>
<extracomment>Unlock</extracomment>
<translation type="unfinished"></translation>
@ -550,31 +443,4 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Statusbar</name>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="70"/>
<source>network-status-disconnected</source>
<extracomment>Disconnected from the internet, check your connection</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="80"/>
<source>network-status-attempting-tor</source>
<extracomment>Attempting to connect to Tor network</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="90"/>
<source>network-status-connecting</source>
<extracomment>Connecting...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="100"/>
<source>network-status-online</source>
<extracomment>Online</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -55,111 +55,12 @@
<context>
<name>ContactList</name>
<message>
<location filename="../qml/widgets/ContactList.qml" line="42"/>
<location filename="../qml/widgets/ContactList.qml" line="41"/>
<source>paste-address-to-add-contact</source>
<extracomment>ex: &quot;... paste an address here to add a contact ...&quot;</extracomment>
<translation type="unfinished"> cole um endereço aqui para adicionar um contato</translation>
</message>
</context>
<context>
<name>EmojiDrawer</name>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="189"/>
<source>cycle-cats-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="224"/>
<source>cycle-morphs-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-android</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="257"/>
<source>cycle-colours-desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="63"/>
<source>search</source>
<extracomment>Search...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="75"/>
<source>emojicat-expressions</source>
<extracomment>Expressions</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="83"/>
<source>emojicat-activities</source>
<extracomment>Activities</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="91"/>
<source>emojicat-food</source>
<extracomment>Food, drink &amp; herbs</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="99"/>
<source>emojicat-gender</source>
<extracomment>Gender, relationships &amp; sexuality</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="107"/>
<source>emojicat-nature</source>
<extracomment>Nature and effects</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="115"/>
<source>emojicat-objects</source>
<extracomment>Objects</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="123"/>
<source>emojicat-people</source>
<extracomment>People and animals</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="131"/>
<source>emojicat-symbols</source>
<extracomment>Symbols</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="139"/>
<source>emojicat-travel</source>
<extracomment>Travel &amp; places</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/EmojiDrawer.qml" line="147"/>
<source>emojicat-misc</source>
<extracomment>Miscellaneous</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GroupSettingsPane</name>
<message>
@ -205,14 +106,6 @@
<translation>Deletar</translation>
</message>
</context>
<context>
<name>InplaceEditText</name>
<message>
<location filename="../qml/widgets/InplaceEditText.qml" line="87"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListOverlay</name>
<message>
@ -237,7 +130,7 @@
<context>
<name>MembershipOverlay</name>
<message>
<location filename="../qml/overlays/MembershipOverlay.qml" line="21"/>
<location filename="../qml/overlays/MembershipOverlay.qml" line="22"/>
<source>membership-description</source>
<extracomment>Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.</extracomment>
<translation>A lista abaixo é de usuários que enviaram mensagens ao grupo. Essa lista pode não refletir todos os usuários que têm acesso ao grupo.</translation>
@ -246,24 +139,24 @@
<context>
<name>Message</name>
<message>
<location filename="../qml/widgets/Message.qml" line="56"/>
<location filename="../qml/widgets/Message.qml" line="57"/>
<source>dm-tooltip</source>
<extracomment>Click to DM</extracomment>
<translation>Clique para DM</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>could-not-send-msg-error</source>
<extracomment>Could not send this message</extracomment>
<translation>Não deu para enviar esta mensagem</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>acknowledged-label</source>
<translation>Confirmada</translation>
</message>
<message>
<location filename="../qml/widgets/Message.qml" line="163"/>
<location filename="../qml/widgets/Message.qml" line="164"/>
<source>pending-label</source>
<translation>Pendente</translation>
</message>
@ -294,35 +187,35 @@
<context>
<name>OverlayPane</name>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="23"/>
<location filename="../qml/panes/OverlayPane.qml" line="24"/>
<source>accept-group-invite-label</source>
<extracomment>Do you want to accept the invitation to $GROUP</extracomment>
<translation>Você quer aceitar o convite para</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="28"/>
<location filename="../qml/panes/OverlayPane.qml" line="29"/>
<source>accept-group-btn</source>
<extracomment>Accept group invite button</extracomment>
<translation>Aceitar</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="38"/>
<location filename="../qml/panes/OverlayPane.qml" line="39"/>
<source>reject-group-btn</source>
<extracomment>Reject Group invite button</extracomment>
<translation>Recusar</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="52"/>
<location filename="../qml/panes/OverlayPane.qml" line="53"/>
<source>chat-btn</source>
<translation>Chat</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="59"/>
<location filename="../qml/panes/OverlayPane.qml" line="60"/>
<source>lists-btn</source>
<translation>Listas</translation>
</message>
<message>
<location filename="../qml/panes/OverlayPane.qml" line="66"/>
<location filename="../qml/panes/OverlayPane.qml" line="67"/>
<source>bulletins-btn</source>
<translation>Boletins</translation>
</message>
@ -344,28 +237,28 @@
<translation>Copiar</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="51"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="52"/>
<source>copied-to-clipboard-notification</source>
<extracomment>notification: copied to clipboard</extracomment>
<translation>Copiado</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="67"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="68"/>
<source>display-name-label</source>
<translation>Nome de Exibição</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="77"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="78"/>
<source>save-btn</source>
<translation>Salvar</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="124"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="126"/>
<source>delete-btn</source>
<translation>Deletar</translation>
</message>
<message>
<location filename="../qml/panes/PeerSettingsPane.qml" line="96"/>
<location filename="../qml/panes/PeerSettingsPane.qml" line="98"/>
<source>block-btn</source>
<translation type="unfinished"></translation>
</message>
@ -478,7 +371,7 @@
<context>
<name>ProfileList</name>
<message>
<location filename="../qml/widgets/ProfileList.qml" line="106"/>
<location filename="../qml/widgets/ProfileList.qml" line="108"/>
<source>add-new-profile-btn</source>
<translation type="unfinished"></translation>
</message>
@ -486,24 +379,24 @@
<context>
<name>ProfileManagerPane</name>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="27"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="29"/>
<source>enter-profile-password</source>
<extracomment>Please enter password:</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="36"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="38"/>
<source>password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="46"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="48"/>
<source>error-0-profiles-loaded-for-password</source>
<extracomment>0 profiles loaded with that password</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/panes/ProfileManagerPane.qml" line="56"/>
<location filename="../qml/panes/ProfileManagerPane.qml" line="58"/>
<source>unlock</source>
<extracomment>Unlock</extracomment>
<translation type="unfinished"></translation>
@ -550,31 +443,4 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Statusbar</name>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="70"/>
<source>network-status-disconnected</source>
<extracomment>Disconnected from the internet, check your connection</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="80"/>
<source>network-status-attempting-tor</source>
<extracomment>Attempting to connect to Tor network</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="90"/>
<source>network-status-connecting</source>
<extracomment>Connecting...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/widgets/Statusbar.qml" line="100"/>
<source>network-status-online</source>
<extracomment>Online</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -171,10 +171,16 @@ func mainUi(flagLocal bool, flagClientUI bool) {
translator := core.NewQTranslator(nil)
translator.Load("translation_en", ":/i18n/", "", "")
core.QCoreApplication_InstallTranslator(translator)
opaqueTranslator := core.NewQTranslator(nil)
opaqueTranslator.Load("translation_en", ":/qml/opaque/i18n/", "", "")
core.QCoreApplication_InstallTranslator(opaqueTranslator)
gcd.Translator = core.NewQTranslator(nil)
gcd.Translator.Load("translation_"+core.QLocale_System().Name(), ":/i18n/", "", "")
core.QCoreApplication_InstallTranslator(gcd.Translator)
gcd.OpaqueTranslator = core.NewQTranslator(nil)
gcd.OpaqueTranslator.Load("translation_"+core.QLocale_System().Name(), ":/qml/opaque/i18n/", "", "")
core.QCoreApplication_InstallTranslator(gcd.OpaqueTranslator)
core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)
quickcontrols2.QQuickStyle_SetStyle("Universe")

34
qml.qrc
View File

@ -13,38 +13,16 @@
<file>qml/panes/SplashPane.qml</file>
<file>qml/panes/ProfileManagerPane.qml</file>
<file>qml/panes/ProfileAddEditPane.qml</file>
<file>qml/styles/CwtchComboBoxStyle.qml</file>
<file>qml/styles/CwtchExpandingButton.qml</file>
<file>qml/styles/CwtchTextAreaStyle.qml</file>
<file>qml/styles/CwtchTextFieldStyle.qml</file>
<file>qml/widgets/ContactList.qml</file>
<file>qml/widgets/Portrait.qml</file>
<file>qml/widgets/Badge.qml</file>
<file>qml/widgets/PortraitRow.qml</file>
<file>qml/widgets/ProfileRow.qml</file>
<file>qml/widgets/ContactRow.qml</file>
<file>qml/widgets/EmojiDrawer.qml</file>
<file>qml/widgets/FontAwesome.qml</file>
<file>qml/widgets/IconTextField.qml</file>
<file>qml/widgets/InplaceEditText.qml</file>
<file>qml/widgets/Message.qml</file>
<file>qml/widgets/ScalingLabel.qml</file>
<file>qml/widgets/EllipsisLabel.qml</file>
<file>qml/widgets/MyProfile.qml</file>
<file>qml/widgets/ProfileList.qml</file>
<file>qml/widgets/RadioButton.qml</file>
<file>qml/widgets/Button.qml</file>
<file>qml/widgets/TextField.qml</file>
<file>qml/widgets/Toolbar.qml</file>
<file>qml/widgets/Statusbar.qml</file>
<file>qml/widgets/UnderlineTextField.qml</file>
<file>qml/widgets/controls/Loader.qml</file>
<file>qml/widgets/controls/Variables.qml</file>
<file>qml/widgets/ContactList.qml</file>
<file>qml/widgets/ContactRow.qml</file>
<file>qml/widgets/Message.qml</file>
<file>qml/widgets/MyProfile.qml</file>
<file>qml/widgets/ProfileList.qml</file>
<file>qml/widgets/ProfileRow.qml</file>
<file>i18n/translation_de.qm</file>
<file>i18n/translation_en.qm</file>
<file>i18n/translation_fr.qm</file>
<file>i18n/translation_pt.qm</file>
<file>qml/images/cwtch_logo.png</file>
<file>qml/styles/CwtchProgress.qml</file>
</qresource>
</RCC>

Binary file not shown.

View File

@ -1,27 +0,0 @@
pragma Singleton
import QtQuick 2.5
QtObject {
property FontLoader applicationFontBold: FontLoader {
id: opensansBold
source: "qrc:/qml/fonts/opensans/OpenSans-Bold.ttf"
}
property FontLoader applicationFontExtrBold: FontLoader {
id: opensansExtraBold
source: "qrc:/qml/fonts/opensans/OpenSans-ExtraBold.ttf"
}
property FontLoader applicationFontRegular: FontLoader {
id: opensansRegular
source: "qrc:/qml/fonts/opensans/OpenSans-Regular.ttf"
}
property FontLoader applicationFontLight: FontLoader {
id: opensansLight
source: "qrc:/qml/fonts/opensans/OpenSans-Light.ttf"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
singleton Fonts Fonts.qml

View File

@ -5,13 +5,15 @@ import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import "fonts"
import "fonts/Twemoji.js" as T
import "fonts/MutantStandard.js" as Mutant
import "opaque"
import "opaque/fonts"
import "opaque/fonts/Twemoji.js" as T
import "opaque/fonts/MutantStandard.js" as Mutant
import "opaque/theme"
import "overlays"
import "panes"
import "widgets"
import "theme"
import "utils.js" as Utils
@ -29,17 +31,13 @@ ApplicationWindow {
readonly property real ratio: height / width
readonly property string cwtch_background_color: '#FF0000'
readonly property string cwtch_color: '#00FF00'
readonly property string cwtch_dark_color: '#0000FF'
FontAwesome { // PRETTY BUTTON ICONS
id: awesome
resource: "qrc:/qml/fonts/fontawesome.ttf"
resource: "qrc:/qml/opaque/fonts/fontawesome.ttf"
}
FontLoader {
source: "qrc:/qml/fonts/AdobeBlank.ttf"
source: "qrc:/qml/opaque/fonts/AdobeBlank.ttf"
}
@ -161,7 +159,7 @@ ApplicationWindow {
visible: (windowItem.width >= Theme.doublePaneMinSize && !Qt.inputMethod.visible) || theStack.pane == theStack.emptyPane
ContactList{
ContactList {
anchors.fill: parent
dualPane: theStack.pane != theStack.emptyPane || theStack.pane == undefined
}

1
qml/opaque Submodule

@ -0,0 +1 @@
Subproject commit db305895e70fbb599d2600a7e1f2245a56380217

View File

@ -6,10 +6,10 @@ import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
import "../widgets" as Widgets
import "../fonts/Twemoji.js" as T
import "../opaque" as Opaque
import "../opaque/fonts/Twemoji.js" as T
import "../opaque/styles"
import "../utils.js" as Utils
import "../styles"
ColumnLayout {
Layout.fillWidth: true
@ -175,7 +175,7 @@ ColumnLayout {
width: parent.width - 50
}
Widgets.Button {
Opaque.Button {
id: replybtn
visible: selected
text: "reply"
@ -230,7 +230,7 @@ ColumnLayout {
}
Widgets.Button { // SEND MESSAGE BUTTON
Opaque.Button { // SEND MESSAGE BUTTON
id: btnSend
icon: "regular/paper-plane"
text: "post"

View File

@ -4,10 +4,11 @@ import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../widgets" as Widgets
import "../widgets/controls" as Awesome
import "../fonts/Twemoji.js" as T
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../utils.js" as Utils
import "../widgets"
Item {
width: parent.width
@ -29,7 +30,7 @@ Item {
ScrollBar.vertical: ScrollBar {}
maximumFlickVelocity: 1250
delegate: Widgets.Message {
delegate: Message {
handle: _handle
from: _from
displayName: _displayName
@ -128,7 +129,7 @@ Item {
}
}
Widgets.EmojiDrawer {
Opaque.EmojiDrawer {
id: emojiDrawer
anchors.left: parent.left
anchors.right: parent.right
@ -265,7 +266,7 @@ Item {
spacing: 1
Widgets.Button { // SEND MESSAGE BUTTON
Opaque.Button { // SEND MESSAGE BUTTON
id: btnSend
icon: "regular/paper-plane"
text: "send"
@ -301,7 +302,7 @@ Item {
spacing: 1
Widgets.Button { // EMOJI DRAWER BUTTON
Opaque.Button { // EMOJI DRAWER BUTTON
id: btnEmoji
icon: "regular/smile"
anchors.right: btnAttach.left
@ -310,7 +311,7 @@ Item {
onClicked: emojiDrawer.visible ? emojiDrawer.slideclosed() : emojiDrawer.slideopen()
}
Widgets.Button {
Opaque.Button {
id: btnAttach
icon: "solid/paperclip"
anchors.right: parent.right

View File

@ -5,11 +5,11 @@ import QtQuick.Controls.Material 2.0
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
import "../widgets" as Widgets
import "../widgets/controls" as Awesome
import "../fonts/Twemoji.js" as T
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../utils.js" as Utils
import "../styles"
import "../opaque/styles"
ColumnLayout {
Layout.fillWidth: true
@ -204,7 +204,7 @@ ColumnLayout {
style: CwtchTextFieldStyle{}
}
Widgets.Button { // SEND MESSAGE BUTTON
Opaque.Button { // SEND MESSAGE BUTTON
id: btnSend
icon: "regular/paper-plane"
text: "add"

View File

@ -5,11 +5,12 @@ import QtQuick.Controls.Material 2.0
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
import "../widgets"
import "../widgets/controls" as Awesome
import "../fonts/Twemoji.js" as T
import "../opaque"
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../opaque/styles"
import "../utils.js" as Utils
import "../styles"
import "../widgets"
ColumnLayout {
Text {

View File

@ -6,8 +6,8 @@ import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import "../widgets" as Widgets
import "../styles"
import "../opaque" as Opaque
import "../opaque/styles"
ColumnLayout { // settingsPane
id: root
@ -26,7 +26,7 @@ ColumnLayout { // settingsPane
spacing: 5
width: root.width
Widgets.ScalingLabel {
Opaque.ScalingLabel {
//: Server label
text: qsTr("server-label") + ":"
}
@ -37,7 +37,7 @@ ColumnLayout { // settingsPane
text: "2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd"
}
Widgets.ScalingLabel{
Opaque.ScalingLabel{
//: Group name label
text: qsTr("group-name-label") + ":"
}
@ -49,7 +49,7 @@ ColumnLayout { // settingsPane
text: qsTr("default-group-name")
}
Widgets.Button {
Opaque.Button {
//: create group button
text: qsTr("create-group-btn")

View File

@ -6,8 +6,8 @@ import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import "../widgets" as Widgets
import "../styles"
import "../opaque" as Opaque
import "../opaque/styles"
import "../utils.js" as Utils
ColumnLayout { // groupSettingsPane
@ -29,7 +29,7 @@ ColumnLayout { // groupSettingsPane
leftPadding: 10
spacing: 5
Widgets.ScalingLabel {
Opaque.ScalingLabel {
text: qsTr("server-label") + ":"
}
@ -39,7 +39,7 @@ ColumnLayout { // groupSettingsPane
readOnly: true
}
Widgets.Button {
Opaque.Button {
icon: "regular/clipboard"
text: qsTr("copy-btn")
@ -50,7 +50,7 @@ ColumnLayout { // groupSettingsPane
}
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
text: qsTr("invitation-label") + ":"
}
@ -60,7 +60,7 @@ ColumnLayout { // groupSettingsPane
readOnly: true
}
Widgets.Button {
Opaque.Button {
icon: "regular/clipboard"
text: qsTr("copy-btn")
@ -71,7 +71,7 @@ ColumnLayout { // groupSettingsPane
}
}
Widgets.ScalingLabel{
Opaque.ScalingLabel{
text: qsTr("group-name-label") + ":"
}
@ -80,7 +80,7 @@ ColumnLayout { // groupSettingsPane
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
}
Widgets.Button {
Opaque.Button {
text: qsTr("save-btn")
onClicked: {
@ -91,7 +91,7 @@ ColumnLayout { // groupSettingsPane
}
//: Invite someone to the group
Widgets.ScalingLabel { text: qsTr("invite-to-group-label") }
Opaque.ScalingLabel { text: qsTr("invite-to-group-label") }
ComboBox {
id: cbInvite
@ -101,7 +101,7 @@ ColumnLayout { // groupSettingsPane
style: CwtchComboBoxStyle{}
}
Widgets.Button {
Opaque.Button {
text: qsTr("invite-btn")
onClicked: {
@ -109,7 +109,7 @@ ColumnLayout { // groupSettingsPane
}
}
Widgets.Button {
Opaque.Button {
icon: "regular/trash-alt"
text: qsTr("delete-btn")

View File

@ -4,7 +4,8 @@ import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../widgets" as Widgets
import "../opaque" as Opaque
import "../opaque/styles"
import "../overlays"
ColumnLayout {
@ -23,7 +24,7 @@ ColumnLayout {
text: qsTr("accept-group-invite-label") + " " + overlay.name + "?"
}
Widgets.Button {
Opaque.Button {
//: Accept group invite button
text: qsTr("accept-group-btn")
icon: "regular/heart"
@ -33,7 +34,7 @@ ColumnLayout {
}
}
Widgets.Button {
Opaque.Button {
//: Reject Group invite button
text: qsTr("reject-group-btn")
icon: "regular/trash-alt"
@ -48,21 +49,21 @@ ColumnLayout {
id: switcher
Widgets.Button {
Opaque.Button {
text: qsTr("chat-btn")
onClicked: overlayStack.overlay = overlayStack.chatOverlay
}
Widgets.Button {
Opaque.Button {
text: qsTr("lists-btn")
onClicked: overlayStack.overlay = overlayStack.listOverlay
}
Widgets.Button {
Opaque.Button {
text: qsTr("bulletins-btn")

View File

@ -7,9 +7,9 @@ import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import "../widgets" as Widgets
import "../styles"
import "../theme"
import "../opaque" as Opaque
import "../opaque/styles"
import "../opaque/theme"
ColumnLayout { // peerSettingsPane
id: root
@ -32,7 +32,7 @@ ColumnLayout { // peerSettingsPane
columns: 1
width:parent.width * 0.95
anchors.horizontalCenter: parent.horizontalCenter
Widgets.EllipsisLabel {
Opaque.EllipsisLabel {
anchors.left:parent.left
color: Theme.mainTextColor
text: qsTr("address-label")
@ -40,7 +40,7 @@ ColumnLayout { // peerSettingsPane
font.pointSize: 15 * gcd.themeScale
}
Widgets.ButtonTextField {
Opaque.ButtonTextField {
id: txtOnion
anchors.left:parent.left
anchors.right:parent.right
@ -56,13 +56,13 @@ ColumnLayout { // peerSettingsPane
}
}
Widgets.HLine{}
Opaque.HLine{}
GridLayout {
columns: 1
width:parent.width * 0.95
anchors.horizontalCenter: parent.horizontalCenter
Widgets.EllipsisLabel {
Opaque.EllipsisLabel {
anchors.left:parent.left
color: Theme.mainTextColor
text: qsTr("display-name-label")
@ -71,7 +71,7 @@ ColumnLayout { // peerSettingsPane
}
Widgets.ButtonTextField {
Opaque.ButtonTextField {
id: txtDisplayName
anchors.left:parent.left
anchors.right:parent.right
@ -86,21 +86,21 @@ ColumnLayout { // peerSettingsPane
}
Widgets.HLine{}
Opaque.HLine{}
GridLayout {
columns: 2
width:parent.width * 0.95
anchors.horizontalCenter: parent.horizontalCenter
Widgets.EllipsisLabel {
Opaque.EllipsisLabel {
color: Theme.mainTextColor
text: qsTr("block-btn")
font.styleName: "ExtraBold"
font.pointSize: 15 * gcd.themeScale
}
Widgets.ToggleSwitch {
Opaque.ToggleSwitch {
isToggled: root.blocked // ? qsTr("unblock-btn") : qsTr("block-btn")
anchors.right: parent.right
onToggled: function() {
@ -117,11 +117,11 @@ ColumnLayout { // peerSettingsPane
}
Widgets.HLine{}
Opaque.HLine{}
Column {
width:parent.width * 0.95
anchors.horizontalCenter: parent.horizontalCenter
Widgets.Button {
Opaque.Button {
icon: "regular/trash-alt"
text: qsTr("delete-btn")
anchors.right: parent.right

View File

@ -6,7 +6,7 @@ import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import "../widgets" as Widgets
import "../opaque" as Opaque
// import "../styles"
ColumnLayout { // Add Profile Pane
@ -71,23 +71,23 @@ ColumnLayout { // Add Profile Pane
spacing: 5
width: profileAddEditPane.width
Widgets.ScalingLabel {
Opaque.ScalingLabel {
//: Onion
text: qsTr("profile-onion-label") + ":"
visible: mode == "edit"
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: onionLabel
visible: mode == "edit"
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
//: Display name
text: qsTr("profile-name") + ":"
}
Widgets.TextField {
Opaque.TextField {
id: txtProfileName
Layout.fillWidth: true
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
@ -100,7 +100,7 @@ ColumnLayout { // Add Profile Pane
RowLayout {
//id: radioButtons
Widgets.RadioButton {
Opaque.RadioButton {
id: radioUsePassword
checked: true
//: Password
@ -111,7 +111,7 @@ ColumnLayout { // Add Profile Pane
}
}
Widgets.RadioButton {
Opaque.RadioButton {
id: radioNoPassword
//: Unencrypted (No password)
text: qsTr("radio-no-password")
@ -122,35 +122,35 @@ ColumnLayout { // Add Profile Pane
}
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: noPasswordLabel
//: Not using a password on this account means that all data stored locally will not be encrypted
text: qsTr("no-password-warning")
visible: radioNoPassword.checked
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: currentPasswordLabel
//: Current Password
text: qsTr("current-password-label") + ":"
visible: radioUsePassword.checked && mode == "edit" && tag != "v1-defaultPassword"
}
Widgets.TextField {
Opaque.TextField {
id: txtCurrentPassword
Layout.fillWidth: true
echoMode: TextInput.Password
visible: radioUsePassword.checked && mode == "edit" && tag != "v1-defaultPassword"
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: passwordLabel
//: Password
text: qsTr("password1-label") + ":"
visible: radioUsePassword.checked
}
Widgets.TextField {
Opaque.TextField {
id: txtPassword1
Layout.fillWidth: true
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
@ -163,14 +163,14 @@ ColumnLayout { // Add Profile Pane
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: passwordReLabel
//: Reenter password
text: qsTr("password2-label") + ":"
visible: radioUsePassword.checked
}
Widgets.TextField {
Opaque.TextField {
id: txtPassword2
Layout.fillWidth: true
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
@ -178,7 +178,7 @@ ColumnLayout { // Add Profile Pane
visible: radioUsePassword.checked
}
Widgets.Button { // ADD or SAVE button
Opaque.Button { // ADD or SAVE button
//: Create Profile || Save Profile
text: mode == "add" ? qsTr("create-profile-btn") : qsTr("save-profile-btn")
@ -209,7 +209,7 @@ ColumnLayout { // Add Profile Pane
}
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: passwordErrorLabel
//: Passwords do not match
text: qsTr("password-error-match")
@ -217,7 +217,7 @@ ColumnLayout { // Add Profile Pane
color: "red"
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: passwordChangeErrorLabel
//: Error changing password: Supplied password rejected
text: qsTr("password-change-error")
@ -227,7 +227,7 @@ ColumnLayout { // Add Profile Pane
// ***** Delete button and confirm flow *****
Widgets.Button {
Opaque.Button {
//: Delete Profile
text: qsTr("delete-profile-btn")
icon: "regular/trash-alt"
@ -239,21 +239,21 @@ ColumnLayout { // Add Profile Pane
}
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: deleteConfirmLabel
//: Type DELETE to confirm
text: qsTr("delete-confirm-label")+ ":"
visible: deleting
}
Widgets.TextField {
Opaque.TextField {
id: confirmDeleteTxt
Layout.fillWidth: true
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
visible: deleting
}
Widgets.Button {
Opaque.Button {
id: confirmDeleteBtn
icon: "regular/trash-alt"

View File

@ -8,10 +8,12 @@ import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import "../widgets" as Widgets
import "../widgets/controls"
import "../styles"
import "../theme"
import "../widgets"
import "../opaque" as Opaque
import "../opaque/controls"
import "../opaque/styles"
import "../opaque/theme"
ColumnLayout {
@ -20,14 +22,14 @@ ColumnLayout {
//leftPadding: 10
//spacing: 5
Widgets.ScalingLabel {
Opaque.ScalingLabel {
anchors.horizontalCenter: parent.horizontalCenter
wrapMode: TextEdit.Wrap
//: Please enter password:
text: qsTr("enter-profile-password")+":"
}
Widgets.UnderlineTextField {
Opaque.UnderlineTextField {
id: txtPassword
anchors.horizontalCenter: parent.horizontalCenter
Layout.fillWidth: true
@ -38,7 +40,7 @@ ColumnLayout {
onAccepted: button.clicked()
}
Widgets.ScalingLabel {
Opaque.ScalingLabel {
id: error
anchors.horizontalCenter: parent.horizontalCenter
color: "red"
@ -47,7 +49,7 @@ ColumnLayout {
visible: false
}
Widgets.Button {
Opaque.Button {
id: "button"
anchors.horizontalCenter: parent.horizontalCenter
@ -80,7 +82,7 @@ ColumnLayout {
Layout.minimumWidth: Layout.maximumWidth
//Layout.maximumWidth: theStack.pane == theStack.emptyPane ? parent.width : 450
Widgets.ProfileList {
ProfileList {
anchors.fill: parent
}
}

View File

@ -7,8 +7,8 @@ import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import "../widgets"
import "../widgets/controls"
import "../opaque" as Opaque
import "../opaque/controls"
ColumnLayout { // settingsPane
id: root
@ -28,14 +28,14 @@ ColumnLayout { // settingsPane
spacing: 5
width: root.width
ScalingLabel {
Opaque.ScalingLabel {
width: parent.width
wrapMode: TextEdit.Wrap
//: Version: %1 Built on: %2
text: qsTr("version %1 builddate %2").arg(gcd.version).arg(gcd.buildDate)
}
ScalingLabel {
Opaque.ScalingLabel {
width: parent.width
wrapMode: TextEdit.Wrap
//: Interface zoom (mostly affects text and button sizes)
@ -67,26 +67,26 @@ ColumnLayout { // settingsPane
}
}
style: CheckBoxStyle {
label: ScalingLabel {
label: Opaque.ScalingLabel {
text: qsTr("block-unknown-label")
}
}
}
ScalingLabel {
Opaque.ScalingLabel {
wrapMode: TextEdit.Wrap
text: qsTr("large-text-label")
size: 20
}
ScalingLabel{
Opaque.ScalingLabel{
width: parent.width
wrapMode: TextEdit.Wrap
//: "Default size text (scale factor: "
text: qsTr("default-scaling-text") + " " + Math.round(zoomSlider.value * 100) / 100 + ")"
}
ScalingLabel {
Opaque.ScalingLabel {
text: qsTr("small-text-label")
size: 8
}

View File

@ -5,7 +5,7 @@ import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import "../styles"
import "../opaque/styles"
Item {
id: sp

View File

@ -1,7 +0,0 @@
import QtQuick.Controls.Styles 1.4
import QtQuick 2.7
ComboBoxStyle {
textColor: "#000"
}

View File

@ -1,21 +0,0 @@
import QtQuick.Controls.Styles 1.4
import QtQuick 2.7
ButtonStyle {
background: Rectangle {
width:25
height:25
color: windowItem.cwtch_dark_color
border.color: windowItem.cwtch_color
}
label: Text {
renderType: Text.NativeRendering
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.family: "Monospace"
font.pointSize: 8
color: windowItem.cwtch_background_color
text: control.text
}
}

View File

@ -1,39 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
Rectangle {
id: pb
border.color: "#FFFFFF"
border.width: 1
color: "#D2C0DD"
property bool running
// Indeterminate animation by animating alternating stripes:
Item {
anchors.fill: parent
anchors.margins: 1
visible: control.indeterminate
clip: true
Row {
Repeater {
Rectangle {
color: index % 2 ? "#D2C0DD" : "#b29dbe"
width: 20 ; height: control.height
}
model: control.width / 20 + 2
}
XAnimator on x {
from: 0 ; to: -40
loops: Animation.Infinite
running: pb.running
}
}
}
}

View File

@ -1,8 +0,0 @@
import QtQuick.Controls.Styles 1.4
import QtQuick 2.7
TextAreaStyle {
textColor: "black"
backgroundColor: windowItem.cwtch_background_color
}

View File

@ -1,15 +0,0 @@
import QtQuick.Controls.Styles 1.4
import QtQuick 2.7
TextFieldStyle {
id: root
textColor: "black"
font.pointSize: 10 * gcd.themeScale
property int width: parent.width
background: Rectangle {
radius: 2
color: windowItem.cwtch_background_color
border.color: windowItem.cwtch_color
}
}

View File

@ -1,51 +0,0 @@
ThemeType {
readonly property color darkGrayPurple: "#281831"
readonly property color deepPurple: "#422850"
readonly property color mauvePurple: "#8E64A5"
readonly property color purple: "#DFB9DE"
readonly property color whitePurple: "#FFFDFF"
readonly property color softPurple: "#FDF3FC"
readonly property color pink: "#E85DA1"
readonly property color hotPink: "#D01972"
backgroundMainColor: darkGrayPurple
backgroundPaneColor: deepPurple
mainTextColor: purple
altTextColor: mauvePurple
defaultButtonColor: mauvePurple
defaultButtonActiveColor: pink
defaultButtonTextColor: whitePurple
portraitOnlineBorderColor: whitePurple
portraitOnlineBackgroundColor: darkGrayPurple
portraitOnlineTextColor: whitePurple
portraitConnectingBorderColor: mauvePurple
portraitConnectingBackgroundColor: darkGrayPurple
portraitConnectingTextColor: whitePurple
portraitOfflineBorderColor: deepPurple
portraitOfflineBackgroundColor: darkGrayPurple
portraitOfflineTextColor: softPurple
portraitContactBadgeColor: hotPink
portraitContactBadgeTextColor: whitePurple
portraitProfileBadgeColor: mauvePurple
dropShadowColor: mauvePurple
dropShadowPaneColor: darkGrayPurple
toggleColor: darkGrayPurple
toggleOnColor: whitePurple
toggleOffColor: mauvePurple
toolbarIconColor: whitePurple
statusbarDisconnectedInternetColor: whitePurple
statusbarDisconnectedInternetFontColor: deepPurple
statusbarDisconnectedTorColor: darkGrayPurple
statusbarDisconnectedTorFontColor: whitePurple
statusbarConnectingColor: deepPurple
statusbarConnectingFontColor: whitePurple
statusbarOnlineColor: mauvePurple
statusbarOnlineFontColor: whitePurple
}

View File

@ -1,51 +0,0 @@
ThemeType {
readonly property color whitePurple: "#FFFDFF"
readonly property color softPurple: "#FDF3FC"
readonly property color purple: "#DFB9DE"
readonly property color brightPurple: "#760388"
readonly property color darkPurple: "#350052"
readonly property color greyPurple: "#775F84"
readonly property color pink: "#E85DA1"
readonly property color hotPink: "#D01972"
backgroundMainColor: whitePurple
backgroundPaneColor: softPurple
mainTextColor: darkPurple
altTextColor: purple
defaultButtonColor: hotPink
defaultButtonActiveColor: pink
defaultButtonTextColor: whitePurple
portraitOnlineBorderColor: darkPurple
portraitOnlineBackgroundColor: darkPurple
portraitOnlineTextColor: darkPurple
portraitConnectingBorderColor: greyPurple
portraitConnectingBackgroundColor: greyPurple
portraitConnectingTextColor: greyPurple
portraitOfflineBorderColor: purple
portraitOfflineBackgroundColor: purple
portraitOfflineTextColor: purple
portraitContactBadgeColor: hotPink
portraitContactBadgeTextColor: whitePurple
portraitProfileBadgeColor: brightPurple
dropShadowColor: purple
dropShadowPaneColor: purple
toggleColor: whitePurple
toggleOnColor: hotPink
toggleOffColor: purple
toolbarIconColor: darkPurple
statusbarDisconnectedInternetColor: softPurple
statusbarDisconnectedInternetFontColor: darkPurple
statusbarDisconnectedTorColor: purple
statusbarDisconnectedTorFontColor: darkPurple
statusbarConnectingColor: greyPurple
statusbarConnectingFontColor: whitePurple
statusbarOnlineColor: darkPurple
statusbarOnlineFontColor: whitePurple
}

View File

@ -1,61 +0,0 @@
pragma Singleton
import QtQuick 2.0
Item {
readonly property color backgroundMainColor: theme.backgroundMainColor
readonly property color backgroundPaneColor: theme.backgroundPaneColor
readonly property color mainTextColor: theme.mainTextColor
readonly property color altTextColor: theme.altTextColor
readonly property color defaultButtonColor: theme.defaultButtonColor
readonly property color defaultButtonActiveColor: theme.defaultButtonActiveColor
readonly property color defaultButtonTextColor: theme.defaultButtonTextColor
readonly property color dropShadowColor: theme.dropShadowColor
readonly property color dropShadowPaneColor: theme.dropShadowPaneColor
readonly property color portraitOnlineBorderColor: theme.portraitOnlineBorderColor
readonly property color portraitOnlineBackgroundColor: theme.portraitOnlineBackgroundColor
readonly property color portraitOnlineTextColor: theme.portraitOnlineTextColor
readonly property color portraitConnectingBorderColor: theme.portraitConnectingBorderColor
readonly property color portraitConnectingBackgroundColor: theme.portraitConnectingBackgroundColor
readonly property color portraitConnectingTextColor: theme.portraitConnectingTextColor
readonly property color portraitOfflineBorderColor: theme.portraitOfflineBorderColor
readonly property color portraitOfflineBackgroundColor: theme.portraitOfflineBackgroundColor
readonly property color portraitOfflineTextColor: theme.portraitOfflineTextColor
readonly property color portraitContactBadgeColor: theme.portraitContactBadgeColor
readonly property color portraitContactBadgeTextColor: theme.portraitContactBadgeTextColor
readonly property color portraitProfileBadgeColor: theme.portraitProfileBadgeColor
readonly property color toggleColor: theme.toggleColor
readonly property color toggleOffColor: theme.toggleOffColor
readonly property color toggleOnColor: theme.toggleOnColor
readonly property color toolbarIconColor: theme.toolbarIconColor
readonly property color statusbarDisconnectedInternetColor: theme.statusbarDisconnectedInternetColor
readonly property color statusbarDisconnectedInternetFontColor: theme.statusbarDisconnectedInternetFontColor
readonly property color statusbarDisconnectedTorFontColor: theme.statusbarDisconnectedTorFontColor
readonly property color statusbarDisconnectedTorColor: theme.statusbarDisconnectedTorColor
readonly property color statusbarConnectingColor: theme.statusbarConnectingColor
readonly property color statusbarConnectingFontColor: theme.statusbarConnectingFontColor
readonly property color statusbarOnlineColor: theme.statusbarOnlineColor
readonly property color statusbarOnlineFontColor: theme.statusbarOnlineFontColor
readonly property int headerSize: 50
readonly property int usernameSize: 30
readonly property int tabSize: 25
readonly property int chatSize: 20
readonly property int secondaryTextSize: 20 // address
readonly property int chatMetaTextSize: 15
readonly property int badgeTextSize: 12
readonly property int statusTextSize: 12
readonly property int sidePaneMinSize: 700
readonly property int doublePaneMinSize: 1000
property ThemeType theme: CwtchLight { }
}

View File

@ -1,46 +0,0 @@
import QtQuick 2.0
QtObject {
property color backgroundMainColor: "red"
property color backgroundPaneColor: "red"
property color mainTextColor: "red"
property color altTextColor: "red"
property color defaultButtonColor: "red"
property color defaultButtonActiveColor: "red"
property color defaultButtonTextColor: "red"
property color portraitOnlineBorderColor: "red"
property color portraitOnlineBackgroundColor: "red"
property color portraitOnlineTextColor: "red"
property color portraitConnectingBorderColor: "red"
property color portraitConnectingBackgroundColor: "red"
property color portraitConnectingTextColor: "red"
property color portraitOfflineBorderColor: "red"
property color portraitOfflineBackgroundColor: "red"
property color portraitOfflineTextColor: "red"
property color portraitContactBadgeColor: "red"
property color portraitContactBadgeTextColor: "red"
property color portraitProfileBadgeColor: "red"
property color dropShadowColor: "black"
property color dropShadowPaneColor: "black"
property color toggleColor: "black"
property color toggleOnColor: "black"
property color toggleOffColor: "black"
property color toolbarIconColor: "red"
property color statusbarDisconnectedInternetColor: "red"
property color statusbarDisconnectedInternetFontColor: "red"
property color statusbarDisconnectedTorFontColor: "red"
property color statusbarDisconnectedTorColor: "red"
property color statusbarConnectingColor: "red"
property color statusbarConnectingFontColor: "red"
property color statusbarOnlineColor: "red"
property color statusbarOnlineFontColor: "red"
// ... more to come
}

View File

@ -1 +0,0 @@
singleton Theme 1.0 Theme.qml

View File

@ -1,24 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import CustomQmlTypes 1.0
import "../theme"
Rectangle {
width: parent.width * 0.25
height: width
radius: width/2
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.margins: parent.width * 0.09
property alias content: container.children
Column {
id: container
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
}
}

View File

@ -1,79 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../fonts/Twemoji.js" as T
import "../theme"
import "../fonts"
Rectangle {
id: button
width: (text == undefined || text == "" ? 0 : buttonText.width) + (icon == undefined || icon == "" ? 0 : ico.width) + 24 * gcd.themeScale
Layout.minimumWidth: width
Layout.maximumWidth: width
height: 20 * gcd.themeScale
Layout.minimumHeight: height
Layout.maximumHeight: height
color: mousedown ? Theme.defaultButtonActiveColor : Theme.defaultButtonColor
border.color: mousedown ? Theme.defaultButtonActiveColor : Theme.defaultButtonColor
border.width: 1
radius: override_radius
antialiasing: true
property bool checked: false
property double override_radius: (height / 2.0)
property alias text: buttonText.text
property alias font: buttonText.font.family
property string icon
property bool mousedown
property string tooltip
signal clicked
RowLayout {
anchors.centerIn: parent
Image {
anchors.left: parent.left
id: ico
source: icon!="" ? gcd.assetPath + "fontawesome/"+icon+".svg" : "";
height: button.height / 2
sourceSize.height: button.height / 2
}
Label {
id: buttonText
font.family: Fonts.applicationFontRegular.name
font.styleName: "ExtraBold"
font.pixelSize: button.height / 2
color: Theme.defaultButtonTextColor
anchors.left: ico.right
anchors.leftMargin: 6
visible: button.text != "" && button.text != undefined
}
ToolTip.visible: tooltip != "" && mouseArea.containsMouse
ToolTip.text: tooltip
}
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: {
parent.focus = true
parent.clicked()
}
onPressed: mousedown = true
onReleased: mousedown = false
hoverEnabled: true
}
Keys.onSpacePressed: clicked()
}

View File

@ -1,49 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.13
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.12
import "." as Widgets
import "../theme"
// ButtonTextField integrates a text field and a button
TextField {
id: tf
color: Theme.mainTextColor
font.pixelSize: Theme.secondaryTextSize * gcd.themeScale
width: parent.width - 20
property string icon
property string button_text
signal clicked
smooth: true
property color dropShadowColor: Theme.dropShadowColor
background: Rectangle {
radius: 10
color: Theme.backgroundMainColor
border.color: Theme.backgroundMainColor
layer.enabled: true
layer.effect: DropShadow {
transparentBorder: true
horizontalOffset: 4
verticalOffset: 4
samples:10
color: tf.dropShadowColor
}
}
Widgets.Button {
icon: ""
text: button_text
anchors { top: parent.top; right: parent.right }
override_radius: 10
height: parent.height; width: parent.height * 4
onClicked: {
parent.focus = true;
parent.clicked();
}
}
}

View File

@ -3,7 +3,9 @@ import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../theme"
import "../opaque" as Opaque
import "../opaque/theme"
ColumnLayout {
id: root
@ -25,7 +27,7 @@ ColumnLayout {
}
IconTextField {
Opaque.IconTextField {
id: searchAddText
anchors.horizontalCenter: parent.horizontalCenter

View File

@ -4,14 +4,14 @@ import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import CustomQmlTypes 1.0
import "../styles"
import "../widgets" as Widgets
import "../theme"
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
PortraitRow {
import "../opaque" as Opaque
import "../opaque/styles"
import "../opaque/theme"
Opaque.PortraitRow {
property int status: 0
property int badge
property bool loading

View File

@ -1,59 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import CustomQmlTypes 1.0
import "../widgets" as Widgets
import "../theme"
// Needs the parent to have an onWidthChanged that calls .textResize()
Item {
anchors.right: parent.right
anchors.left: parent.left
property string text
property alias color: label.color
property alias pixelSize: label.font.pixelSize
property alias weight: label.font.weight
property alias strikeout: label.font.strikeout
property alias font: label.font
property int extraPadding: 0
property Item container: parent
height: textMetric.height
width: textMetric.width + 10
anchors.leftMargin: 10
Label {
id: label
textFormat: Text.PlainText
elide: Text.ElideRight
text: textMetric.text
}
TextMetrics {
id: textMetric
text: text
font: label.font
}
onTextChanged: {
textResize()
}
function textResize() {
textMetric.text = text
var i = 2
var containerWidth = container != null ? container.width : 50
// - 30 for padding
while (textMetric.width > containerWidth - ((30 + extraPadding) * gcd.themeScale) && containerWidth > 50) {
textMetric.text = text.slice(0, text.length - (i * 3)) + "..."
i++
}
}
}

View File

@ -1,400 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.13
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import Qt.labs.folderlistmodel 2.13
import QtQml.Models 2.13
import "../fonts/MutantStandard.js" as Mutant
import "controls"
Item {
id: root
height: 0
property int size: 24
property int requestedHeight: size * 8
property string morph: "clw"
property string color: "v1"
property bool narrowMode: width < (txtSearch.width + root.size * 14 + btnX.width)
signal picked(string shortcode)
signal slideopen()
signal slideclosed()
visible: height != 0
Rectangle {
color: windowItem.cwtch_dark_color
anchors.fill: parent
}
PropertyAnimation {
id: animClose;
target: root;
properties: "height";
to: 0;
duration: 400;
}
PropertyAnimation {
id: animOpen;
target: root;
properties: "height";
to: requestedHeight;
duration: 400;
}
Button {
id: btnX
anchors.top: parent.top
anchors.right: parent.right
text: "x"
onClicked: animClose.start()
}
ColumnLayout {
anchors.fill: parent
RowLayout {
TextField {
id: txtSearch
//: Search...
placeholderText: qsTr("search")
onTextChanged: {
if (text == "") emojiModel.model = folder_expressions
else emojiModel.model = folder_search
emojiModel.updatefilters()
}
}
ImageButton {
id: btnEmojiExpressionsGroup
visible: !root.narrowMode
//: Expressions
tooltip: qsTr("emojicat-expressions")
source: gcd.assetPath + "mutstd/smile.webp"
size: root.size
onClicked: emojiModel.model = folder_expressions
}
ImageButton {
visible: !root.narrowMode
//: Activities
tooltip: qsTr("emojicat-activities")
source: gcd.assetPath + "mutstd/artist_r1.webp"
size: root.size
onClicked: emojiModel.model = folder_activities_clothing
}
ImageButton {
visible: !root.narrowMode
//: Food, drink & herbs
tooltip: qsTr("emojicat-food")
source: gcd.assetPath + "mutstd/red_apple.webp"
size: root.size
onClicked: emojiModel.model = folder_food_drink_herbs
}
ImageButton {
visible: !root.narrowMode
//: Gender, relationships & sexuality
tooltip: qsTr("emojicat-gender")
size: root.size
source: gcd.assetPath + "mutstd/pride_100.webp"
onClicked: emojiModel.model = folder_gsr
}
ImageButton {
visible: !root.narrowMode
//: Nature and effects
tooltip: qsTr("emojicat-nature")
source: gcd.assetPath + "mutstd/sun_behind_small_cloud.webp"
size: root.size
onClicked: emojiModel.model = folder_nature
}
ImageButton {
visible: !root.narrowMode
//: Objects
tooltip: qsTr("emojicat-objects")
source: gcd.assetPath + "mutstd/crystal_ball.webp"
size: root.size
onClicked: emojiModel.model = folder_objects
}
ImageButton {
visible: !root.narrowMode
//: People and animals
tooltip: qsTr("emojicat-people")
source: gcd.assetPath + "mutstd/crow.webp"
size: root.size
onClicked: emojiModel.model = folder_people
}
ImageButton {
visible: !root.narrowMode
//: Symbols
tooltip: qsTr("emojicat-symbols")
source: gcd.assetPath + "mutstd/purple_heart.webp"
size: root.size
onClicked: emojiModel.model = folder_symbols
}
ImageButton {
visible: !root.narrowMode
//: Travel & places
tooltip: qsTr("emojicat-travel")
source: gcd.assetPath + "mutstd/airplane.webp"
size: root.size
onClicked: emojiModel.model = folder_travel_places
}
ImageButton {
visible: !root.narrowMode
//: Miscellaneous
tooltip: qsTr("emojicat-misc")
source: gcd.assetPath + "mutstd/hash_char.webp"
size: root.size
onClicked: emojiModel.model = folder_utils
}
ImageButton {
visible: !root.narrowMode
id: btnUndefinedGroup
// (no tooltip; this is a catchall group meant to detect unclassified emoji during development)
//TODO: remove this category upon finalizing the Emoji Drawer
source: gcd.assetPath + "mutstd/undefined_character.webp"
size: root.size
onClicked: emojiModel.model = folder_other
}
Item {
visible: root.narrowMode
height: root.size
width: root.size
Image {
id: imgCatRot
anchors.centerIn: parent
source: cats[index].source
property int index: 0
property var cats: [
{source: gcd.assetPath + "mutstd/smile.webp", model: folder_expressions},
{source: gcd.assetPath + "mutstd/artist_r1.webp", model: folder_activities_clothing},
{source: gcd.assetPath + "mutstd/red_apple.webp", model: folder_food_drink_herbs},
{source: gcd.assetPath + "mutstd/pride_100.webp", model: folder_gsr},
{source: gcd.assetPath + "mutstd/sun_behind_small_cloud.webp", model: folder_nature},
{source: gcd.assetPath + "mutstd/crystal_ball.webp", model: folder_objects},
{source: gcd.assetPath + "mutstd/crow.webp", model: folder_people},
{source: gcd.assetPath + "mutstd/purple_heart.webp", model: folder_symbols},
{source: gcd.assetPath + "mutstd/airplane.webp", model: folder_travel_places},
{source: gcd.assetPath + "mutstd/hash_char.webp", model: folder_utils},
{source: gcd.assetPath + "mutstd/undefined_character.webp", model: folder_other}
]
height: root.size * (maCatRot.pressed ? 0.8 : 1.0)
width: root.size * (maCatRot.pressed ? 0.8 : 1.0)
ToolTip.visible: maCatRot.containsMouse
ToolTip.text: gcd.os == "android" ? qsTr("cycle-cats-android") : qsTr("cycle-cats-desktop")
MouseArea {
id: maCatRot
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
anchors.fill: parent;
onClicked: {
if (mouse.button == Qt.RightButton) {//todo: long press on android
imgCatRot.index = 0
} else {
imgCatRot.index = (imgCatRot.index + 1) % imgCatRot.cats.length
}
emojiModel.model = imgCatRot.cats[imgCatRot.index].model
//root.morph = Mutant.standard.morphs[imgMorph.index]
//emojiModel.updatefilters()
}
}
}
}
Item {
height: root.size
width: root.size
Image {
id: imgMorph
anchors.centerIn: parent
source: gcd.assetPath + "mutstd/hand_"+Mutant.standard.morphs[index]+"_"+root.color+".webp"
property int index: 0
height: root.size
width: root.size
ToolTip.visible: maMorph.containsMouse
ToolTip.text: gcd.os == "android" ? qsTr("cycle-morphs-android") : qsTr("cycle-morphs-desktop")
MouseArea {
id: maMorph
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
anchors.fill: parent;
onClicked: {
if (mouse.button == Qt.RightButton) {//todo: long press on android
imgMorph.index = 0//TODO: saved morph
} else {
imgMorph.index = (imgMorph.index + 1) % Mutant.standard.morphs.length
}
root.morph = Mutant.standard.morphs[imgMorph.index]
emojiModel.updatefilters()
}
}
}
}
Item {
height: root.size
width: root.size
Image {
id: imgColor
anchors.centerIn: parent
source: gcd.assetPath + "mutstd/color_modifier_"+Mutant.standard.colorByIndex(index, root.morph)+".webp"
property int index: 0
height: root.size
width: root.size
ToolTip.visible: ma.containsMouse
ToolTip.text: gcd.os == "android" ? qsTr("cycle-colours-android") : qsTr("cycle-colours-desktop")
MouseArea {
id: ma
anchors.fill: parent;
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: function(mouse){
if (mouse.button == Qt.RightButton) {//todo: long press on android
imgColor.index = 0//todo: saved color
} else {
imgColor.index = (imgColor.index + 1) % Mutant.standard.numColors(root.morph)
}
root.color = Mutant.standard.colorByIndex(imgColor.index, root.morph)
emojiModel.updatefilters()
}
}
}
}
}
GridView {
Layout.fillWidth: true
Layout.fillHeight: true
height: root.size * 3
cellWidth: root.size
cellHeight: root.size
clip: true
ScrollBar.vertical: ScrollBar {}
maximumFlickVelocity: 1250
boundsBehavior: GridView.StopAtBounds
model: emojiModel
}
}
ListModel { id: folder_activities_clothing }
ListModel { id: folder_expressions }
ListModel { id: folder_food_drink_herbs }
ListModel { id: folder_gsr }
ListModel { id: folder_nature }
ListModel { id: folder_objects }
ListModel { id: folder_people }
ListModel { id: folder_symbols }
ListModel { id: folder_travel_places }
ListModel { id: folder_utils }
ListModel { id: folder_other }
ListModel { id: folder_search }
DelegateModel {
id: emojiModel
model: folder_expressions
delegate: Item {
width: root.size
height: root.size
Image {
id: img
//source: "file://" + gcd.binaryPath + "/assets/mutstd/" + code + ".webp"
source: gcd.assetPath + "mutstd/" + code + ".webp"
width: root.size * (mouseArea.pressed ? 0.7 : 0.8)
height: width
anchors.centerIn: parent
property string shortcode: code
ToolTip.visible: mouseArea.containsMouse
ToolTip.text: desc + "\n:" + shortcode + ":"
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: root.picked(img.shortcode)
}
}
}
Component.onCompleted: updatefilters()
function clearall() {
folder_activities_clothing.clear()
folder_expressions.clear()
folder_food_drink_herbs.clear()
folder_gsr.clear()
folder_nature.clear()
folder_objects.clear()
folder_people.clear()
folder_symbols.clear()
folder_travel_places.clear()
folder_utils.clear()
folder_other.clear()
folder_search.clear()
}
function updatefilters() {
clearall()
for (var i in Mutant.standard.manifest) {
if (typeof Mutant.standard.manifest[i].morph !== "undefined" && Mutant.standard.manifest[i].morph != root.morph)
continue;
if (typeof Mutant.standard.manifest[i].color !== "undefined" && Mutant.standard.manifest[i].color != root.color)
continue;
if (txtSearch.text != "" && !(Mutant.standard.manifest[i].code.includes(txtSearch.text) || Mutant.standard.manifest[i].desc.includes(txtSearch.text))) {
continue;
}
var model = folder_other
if (txtSearch.text == "") {
switch(Mutant.standard.manifest[i].cat) {
case "activities_clothing": model = folder_activities_clothing; break;
case "expressions": model = folder_expressions; break;
case "symbols": model = folder_symbols; break;
case "food_drink_herbs": model = folder_food_drink_herbs; break;
case "gsr": model = folder_gsr; break;
case "nature": model = folder_nature; break;
case "objects": model = folder_objects; break;
case "people": model = folder_people; break;
case "travel_places": model = folder_travel_places; break;
case "utils": model = folder_utils; break;
}
} else {
model = folder_search
}
model.append({
cat: Mutant.standard.manifest[i].cat,
code: Mutant.standard.manifest[i].code,
color: Mutant.standard.manifest[i].color,
morph: Mutant.standard.manifest[i].morph,
desc: Mutant.standard.manifest[i].desc
})
}
}
}
onSlideopen: animOpen.start()
onSlideclosed: animClose.start()
}

View File

@ -1,50 +0,0 @@
/****************************************************************************
**
** The MIT License (MIT)
**
** Copyright (c) 2014 Ricardo do Valle Flores de Oliveira
**
** $BEGIN_LICENSE:MIT$
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and associated documentation files (the "Software"), to deal
** in the Software without restriction, including without limitation the rights
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
** copies of the Software, and to permit persons to whom the Software is
** furnished to do so, subject to the following conditions:
**
** The above copyright notice and this permission notice shall be included in
** all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
** SOFTWARE.
**
** $END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
import "controls" as Awesome
Item {
id: awesome
property alias icons: variables
property alias loaded: loader.loaded
property alias resource: loader.resource
readonly property string family: "FontAwesome"
Awesome.Loader {
id: loader
}
Awesome.Variables {
id: variables
}
}

View File

@ -1,28 +0,0 @@
import QtQuick 2.12
import "../theme"
Column {
width: parent.width
anchors.horizontalCenter: parent.horizontalCenter
Rectangle {
height: 10
color:"transparent"
width: parent.width
}
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
height: 1
width: parent.width * 0.95
color: Theme.dropShadowColor
}
Rectangle {
height: 10
color:"transparent"
width: parent.width
}
}

View File

@ -1,63 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../fonts/Twemoji.js" as T
import "." as Widgets
import "../theme"
Rectangle {
id: root
property color backgroundColor: parent.color
property color hilightBackgroundColor: backgroundColor
property bool isHover: false
color: isHover ? backgroundColor : hilightBackgroundColor
property alias iconColor: iconColorOverlay.color
property alias source: srcImg.source
signal clicked()
Image {
id: srcImg
anchors.fill: parent
antialiasing: true
smooth: true
visible: false
// Apparently qml can now only DOWN-SCALE/SHRINK the SVG, so with this hack it which won't cause blurriness/pixelation
sourceSize.width: root.width*2
sourceSize.height: root.height*2
}
ColorOverlay{
id: iconColorOverlay
anchors.fill: srcImg
source: srcImg
antialiasing: true
smooth: true
}
MouseArea { // Full row mouse area triggering onClick
id: ma
anchors.fill: parent
hoverEnabled: true
onClicked: { root.clicked() }
onEntered: {
isHover = true
}
onExited: {
isHover = false
}
}
}

View File

@ -1,49 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.13
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.12
import "." as Widgets
import "../theme"
// IconTextField integrates a text field and an icon
TextField {
color: Theme.mainTextColor
font.pixelSize: Theme.secondaryTextSize * gcd.themeScale * gcd.themeScale
width: parent.width - 20
property alias icon: icon_.source
signal clicked
smooth: true
placeholderTextColor: Theme.altTextColor
background: Rectangle {
radius: 10
color: Theme.backgroundMainColor
border.color: Theme.backgroundMainColor
layer.enabled: true
layer.effect: DropShadow {
transparentBorder: true
horizontalOffset: 0
verticalOffset: 0
samples: 10
radius: 8
color: Theme.dropShadowColor
}
}
Widgets.Icon {
id: icon_
anchors.right: parent.right
anchors.rightMargin: 4
anchors.verticalCenter: parent.verticalCenter
height: parent.height-4;
width: parent.height-4;
iconColor: Theme.altTextColor
backgroundColor: Theme.backgroundMainColor
}
}

View File

@ -1,92 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../widgets" as Widgets
Item {
id: root
height: lbl.visible ? lbl.height : txt.height + (gcd.os == "android" ? btn.height + 3 : 0) //lbl.height
implicitHeight: height //lbl.height
property alias text: lbl.text
signal updated
Text { // DISPLAY THE TEXT IN READONLY MODE
id: lbl
fontSizeMode: Text.HorizontalFit
font.pixelSize: 36
minimumPixelSize: 8
horizontalAlignment: Text.AlignHCenter
textFormat: Text.PlainText
anchors.horizontalCenter: parent.horizontalCenter
}
Image {
id: img
anchors.left: lbl.right
anchors.leftMargin: 3
source: gcd.assetPath + "fontawesome/solid/edit.svg"
height: 16
sourceSize.height: 16
}
MouseArea {
anchors.fill: lbl
onClicked: {
lbl.visible = img.visible = false
txt.visible = true
if (gcd.os == "android") btn.visible = true
txt.text = lbl.text
txt.selectAll()
txt.focus = true
}
}
TextEdit { // MAKE IT AN EDITOR WHEN EDITING
id: txt
text: root.text
visible: false
selectByMouse: true
font.pixelSize: lbl.font.pixelSize
anchors.horizontalCenter: parent.horizontalCenter
onActiveFocusChanged: {
if (!activeFocus) {
save()
}
}
Keys.onReturnPressed: {
if (event.modifiers == Qt.NoModifier) {
save()
}
}
function save() {
root.text = txt.text
txt.visible = btn.visible = false
lbl.visible = img.visible = true
root.updated(txt.text)
}
}
Widgets.Button {
id: btn
anchors.top: txt.bottom
anchors.topMargin: 3
anchors.horizontalCenter: parent.horizontalCenter
visible: false
text: qsTr("Update")
onClicked: txt.save()
}
}

View File

@ -4,7 +4,8 @@ import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "controls" as Awesome
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
Item {
id: root
@ -42,7 +43,7 @@ Item {
}
Portrait {
Opaque.Portrait {
id: imgProfile
anchors.left: parent.left
// TODO: currently unused?

View File

@ -7,9 +7,9 @@ import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import QtQuick.Controls 1.4
import "." as Widgets
import "../styles"
import "../theme"
import "../opaque" as Opaque
import "../opaque/styles"
import "../opaque/theme"
Item {
id: root
@ -78,7 +78,7 @@ Item {
id: profile
color: Theme.backgroundMainColor
Portrait {
Opaque.Portrait {
id: portrait
source: root.image
@ -105,7 +105,7 @@ Item {
id: nameCenter
width: name.width + addBtn.width
EllipsisLabel {
Opaque.EllipsisLabel {
id: name
anchors.right: undefined
@ -119,7 +119,7 @@ Item {
container: nameRow
}
Widgets.Button { // Add Button
Opaque.Button { // Add Button
id: addBtn
anchors.left: name.right

View File

@ -1,71 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import CustomQmlTypes 1.0
import "../theme"
Item {
id: imgProfile
implicitWidth: baseWidth
implicitHeight: baseWidth
property string source
property alias badgeColor: badge.color
property real logscale: 4 * Math.log10(gcd.themeScale + 1)
property int baseWidth: 78 * logscale
height: 78 * logscale
property alias portraitBorderColor: mainImage.color
property alias portraitColor: imageInner.color
property alias badgeVisible: badge.visible
property alias badgeContent: badge.content
Rectangle {
id: mainImage
//anchors.leftMargin: baseWidth * 0.1
anchors.horizontalCenter: parent.horizontalCenter
width: baseWidth * 0.8
height: width
anchors.verticalCenter: parent.verticalCenter
color: Theme.portraitOfflineBorderColor
radius: width / 2
Rectangle {
id: imageInner
width: parent.width - 4
height: width
color: Theme.portraitOfflineBorderColor
radius: width / 2
anchors.centerIn:parent
Image { // PROFILE IMAGE
id: img
source: gcd.assetPath + imgProfile.source
anchors.fill: parent
fillMode: Image.PreserveAspectFit
visible: false
}
Image { // CIRCLE MASK
id: mask
fillMode: Image.PreserveAspectFit
visible: false
source: "qrc:/qml/images/extra/clipcircle.png"
}
OpacityMask {
anchors.fill: img
source: img
maskSource: mask
}
}
}
Badge {
id: badge
}
}

View File

@ -1,141 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import CustomQmlTypes 1.0
import "../styles"
import "../widgets" as Widgets
import "../theme"
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
Item { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
id: crItem
anchors.left: parent.left
anchors.right: parent.right
height: 78 * logscale + 3
implicitHeight: 78 * logscale + 3 //height
property real logscale: 4 * Math.log10(gcd.themeScale + 1)
property string displayName
property alias image: portrait.source
property string handle
property bool isActive
property bool isHover
property string tag // profile version/type
property alias badgeColor: portrait.badgeColor
property alias portraitBorderColor: portrait.portraitBorderColor
property alias portraitColor: portrait.portraitColor
property alias nameColor: cn.color
property alias onionColor: onion.color
property alias onionVisible: onion.visible
property alias badgeVisible: portrait.badgeVisible
property alias badgeContent: portrait.badgeContent
property alias hoverEnabled: buttonMA.hoverEnabled
property alias content: extraMeta.children
// TODO: should be in ContactRow
property bool blocked
signal clicked(string handle)
Rectangle { // CONTACT ENTRY BACKGROUND COLOR
id: crRect
anchors.left: parent.left
anchors.right: parent.right
height: crItem.height
width: parent.width
color: isHover ? Theme.backgroundPaneColor : (isActive ? Theme.backgroundPaneColor : Theme.backgroundMainColor)
Portrait {
id: portrait
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 25 * logscale
}
ColumnLayout {
id: portraitMeta
anchors.left: portrait.right
anchors.right: parent.right
anchors.leftMargin: 4 * logscale
anchors.verticalCenter: parent.verticalCenter
spacing: 2 * gcd.themeScale
EllipsisLabel { // CONTACT NAME
id: cn
pixelSize: Theme.usernameSize * gcd.themeScale
weight: Font.Bold
strikeout: blocked
text: displayName
}
EllipsisLabel { // Onion
id: onion
text: handle
pixelSize: Theme.secondaryTextSize * gcd.themeScale
strikeout: blocked
}
onWidthChanged: {
cn.textResize()
onion.textResize()
}
}
Column {
id: extraMeta
anchors.left: portraitMeta.right
anchors.verticalCenter: parent.verticalCenter
}
}
MouseArea { // Full row mouse area triggering onClick
id: buttonMA
anchors.fill: parent
hoverEnabled: true
onClicked: { crItem.clicked(crItem.handle) }
onEntered: {
isHover = true
}
onExited: {
isHover = false
}
}
Connections { // UPDATE UNREAD MESSAGES COUNTER
target: gcd
onResetMessagePane: function() {
isActive = false
}
onUpdateContactBlocked: function(_handle, _blocked) {
if (handle == _handle) {
blocked = _blocked
}
}
onUpdateContactDisplayName: function(_handle, _displayName) {
if (handle == _handle) {
displayName = _displayName + (blocked == true ? " (blocked)" : "")
}
}
onUpdateContactPicture: function(_handle, _image) {
if (handle == _handle) {
image = _image
}
}
}
}

View File

@ -3,7 +3,9 @@ import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../theme"
import "../opaque" as Opaque
import "../opaque/theme"
ColumnLayout {
id: root
@ -101,7 +103,7 @@ ColumnLayout {
}
}
PortraitRow {
Opaque.PortraitRow {
handle: ""
displayName: qsTr("add-new-profile-btn")
nameColor: Theme.mainTextColor

View File

@ -4,14 +4,14 @@ import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import CustomQmlTypes 1.0
import "../styles"
import "../widgets" as Widgets
import "../theme"
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
PortraitRow {
import "../opaque" as Opaque
import "../opaque/styles"
import "../opaque/theme"
Opaque.PortraitRow {
badgeColor: Theme.portraitProfileBadgeColor
portraitBorderColor: Theme.portraitOnlineBorderColor
@ -26,7 +26,7 @@ PortraitRow {
width: height
}
Widgets.Button {// Edit BUTTON
Opaque.Button {// Edit BUTTON
id: btnEdit
icon: "solid/user-edit"

View File

@ -1,27 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.13
RadioButton {
id: control
property real size: 12
spacing: 0
indicator: Rectangle {
width: 16 * gcd.themeScale
height: 16 * gcd.themeScale
anchors.verticalCenter: parent.verticalCenter
radius: 9
border.width: 1
Rectangle {
anchors.fill: parent
visible: control.checked
color: "black"
radius: 9
anchors.margins: 4
}
}
}

View File

@ -1,15 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
Label {
font.pixelSize: gcd.themeScale * size
wrapMode: Text.WordWrap
color: "#000000"
textFormat: Text.PlainText
property real size: 12
}

View File

@ -1,8 +1,8 @@
import QtQuick 2.7
import QtQuick.Controls 2.4
import "." as Widgets
import "../theme"
import "../opaque" as Opaque
import "../opaque/theme"
// Statusbar is a app wide 10-25 tall bar that should be place at the bottom of the app that gives network health information
// it changes color and text/icon message based on network health. when netowrk is not healthy it is always in fullsized mode
@ -37,7 +37,7 @@ Rectangle {
font.pixelSize: Theme.statusTextSize * gcd.themeScale
}
Icon {
Opaque.Icon {
id: networkStatus
opacity: 0
anchors.right: connectionStatus.left
@ -48,7 +48,7 @@ Rectangle {
}
Icon {
Opaque.Icon {
id: connectionStatus
opacity: 0
anchors.right: parent.right

View File

@ -1,16 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.13
TextField {
color: "black"
font.pointSize: 10 * gcd.themeScale
width: 100
background: Rectangle {
radius: 2
color: windowItem.cwtch_background_color
border.color: windowItem.cwtch_color
}
}

View File

@ -1,32 +0,0 @@
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick 2.12
import "../theme"
// ToggleSwtch implements a stylized toggle switch. It requires the user create a function called onToggled to
// perform any additional operations needed to define the behavior of the toggle switch
Switch {
property bool isToggled
property var onToggled: function () { console.log("In Superclass") };
style: SwitchStyle {
handle: Rectangle {
implicitWidth: 25
implicitHeight: 25
radius: width*0.5
color: Theme.toggleColor
border.color: isToggled ? Theme.toggleOnColor :Theme.toggleOffColor
border.width:5
}
groove: Rectangle {
implicitWidth: 50
implicitHeight: 25
radius: 25*0.5
color: isToggled ? Theme.toggleOnColor :Theme.toggleOffColor
}
}
onClicked: function() {isToggled = !isToggled; onToggled()}
}

View File

@ -1,123 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../fonts/Twemoji.js" as T
import "." as Widgets
import "../theme"
Rectangle { // Global Toolbar
id: toolbar
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
height: 35 * gcd.themeScale
Layout.minimumHeight: height
Layout.maximumHeight: height
color: Theme.backgroundMainColor
property alias leftMenuVisible: btnLeftMenu.visible
property alias backVisible: btnLeftBack.visible
property alias rightMenuVisible: btnRightMenu.visible
property alias titleWidth: paneArea.width
signal leftMenu()
signal back()
signal rightMenu()
Icon {
id: btnLeftMenu
iconColor: Theme.toolbarIconColor
source: gcd.assetPath + "core/menu-24px.svg"
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
width: 30
height: 30
onClicked: { leftMenu() }
}
Icon {
id: btnLeftBack
iconColor: Theme.toolbarIconColor
source: gcd.assetPath + "core/chevron_left-24px.svg"
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
width: 30
height: 30
onClicked: { back() }
}
Rectangle {
id: paneArea
anchors.right: parent.right
EllipsisLabel {
id: paneTitle
visible: true
anchors.left: undefined
anchors.right: undefined
anchors.horizontalCenter: parent.horizontalCenter
color: Theme.mainTextColor
pixelSize: Theme.tabSize * gcd.themeScale
weight: Font.Bold
text: "global toolbar"
//extraPadding: btnRightMenu.width + 10
}
onWidthChanged: { paneTitle.textResize() }
}
Icon {
id: btnRightMenu
iconColor: Theme.toolbarIconColor
source: gcd.assetPath + "core/more_vert-24px.svg"
visible: false
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
width: 30
height: 30
onClicked: { rightMenu() }
}
function setTitle(text, width) {
paneTitle.text = text
paneArea.width = width
paneTitle.textResize()
paneTitle.visible = true
}
function hideTitle() {
paneTitle.visible = false
}
Connections {
target: gcd
onSetToolbarTitle: function(handle) {
setTitle(handle, theStack.width)
btnRightMenu.visible = true
}
}
}

View File

@ -1,34 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.13
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.12
import "." as Widgets
import "../theme"
// UnderlineTextField is a textfield styled as just an underline
TextField {
property alias backgroundColor: bg.color
color: Theme.mainTextColor
font.pixelSize: Theme.secondaryTextSize * gcd.themeScale * gcd.themeScale
signal clicked
smooth: true
placeholderTextColor: Theme.altTextColor
background: Rectangle {
id: bg
anchors.fill: parent
color: Theme.backgroundMainColor
border.color: color
}
Rectangle {
id: bottomBar
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
height: 2
color: Theme.mainTextColor
}
}

View File

@ -1,43 +0,0 @@
import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import QtQuick.Controls 1.4
Rectangle {
width: img.width + 10
height: img.height + 5
property string emoji
color: selected ? windowItem.cwtch_color : windowItem.cwtch_background_color
property bool selected
property string locale
Image {
id: img
anchors.centerIn:parent
opacity: 1.0
source: gcd.assetPath + "twemoji/72x72/" + emoji + ".png"
MouseArea {
anchors.fill: parent
onClicked: {
gcd.setLocale(locale)
}
}
}
Connections {
target: gcd
onSupplySettings: function(zoom, newLocale) {
selected = newLocale == locale
}
}
}

View File

@ -1,33 +0,0 @@
import QtQuick 2.4
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
Item {
id: root
property alias source: img.source
property int size: 24
property string tooltip: ""
width: size
height: size
signal clicked()
ToolTip.visible: tooltip != "" && ma.containsMouse
ToolTip.text: tooltip
Image {
id: img
width: root.size * (ma.pressed ? 0.5 : 0.8)
height: root.size * (ma.pressed ? 0.5 : 0.8)
anchors.topMargin: ma.pressed ? 2 : 0
anchors.leftMargin: anchors.topMargin
anchors.centerIn: parent
}
MouseArea {
id: ma
anchors.fill: root
onClicked: root.clicked()
hoverEnabled: tooltip != ""
}
}

View File

@ -1,38 +0,0 @@
/****************************************************************************
**
** The MIT License (MIT)
**
** Copyright (c) 2014 Ricardo do Valle Flores de Oliveira
**
** $BEGIN_LICENSE:MIT$
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and associated documentation files (the "Software"), to deal
** in the Software without restriction, including without limitation the rights
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
** copies of the Software, and to permit persons to whom the Software is
** furnished to do so, subject to the following conditions:
**
** The above copyright notice and this permission notice shall be included in
** all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
** SOFTWARE.
**
** $END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
FontLoader {
property string resource
property bool loaded: false
source: resource
onStatusChanged: (status === FontLoader.Ready) ? loaded = true : loaded = false
}

View File

@ -1,580 +0,0 @@
/****************************************************************************
**
** The MIT License (MIT)
**
** Copyright (c) 2014 Ricardo do Valle Flores de Oliveira
**
** $BEGIN_LICENSE:MIT$
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and associated documentation files (the "Software"), to deal
** in the Software without restriction, including without limitation the rights
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
** copies of the Software, and to permit persons to whom the Software is
** furnished to do so, subject to the following conditions:
**
** The above copyright notice and this permission notice shall be included in
** all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
** SOFTWARE.
**
** $END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
QtObject {
readonly property string fa_adjust : "\uf042"
readonly property string fa_adn : "\uf170"
readonly property string fa_align_center : "\uf037"
readonly property string fa_align_justify : "\uf039"
readonly property string fa_align_left : "\uf036"
readonly property string fa_align_right : "\uf038"
readonly property string fa_ambulance : "\uf0f9"
readonly property string fa_anchor : "\uf13d"
readonly property string fa_android : "\uf17b"
readonly property string fa_angellist : "\uf209"
readonly property string fa_angle_double_down : "\uf103"
readonly property string fa_angle_double_left : "\uf100"
readonly property string fa_angle_double_right : "\uf101"
readonly property string fa_angle_double_up : "\uf102"
readonly property string fa_angle_down : "\uf107"
readonly property string fa_angle_left : "\uf104"
readonly property string fa_angle_right : "\uf105"
readonly property string fa_angle_up : "\uf106"
readonly property string fa_apple : "\uf179"
readonly property string fa_archive : "\uf187"
readonly property string fa_area_chart : "\uf1fe"
readonly property string fa_arrow_circle_down : "\uf0ab"
readonly property string fa_arrow_circle_left : "\uf0a8"
readonly property string fa_arrow_circle_o_down : "\uf01a"
readonly property string fa_arrow_circle_o_left : "\uf190"
readonly property string fa_arrow_circle_o_right : "\uf18e"
readonly property string fa_arrow_circle_o_up : "\uf01b"
readonly property string fa_arrow_circle_right : "\uf0a9"
readonly property string fa_arrow_circle_up : "\uf0aa"
readonly property string fa_arrow_down : "\uf063"
readonly property string fa_arrow_left : "\uf060"
readonly property string fa_arrow_right : "\uf061"
readonly property string fa_arrow_up : "\uf062"
readonly property string fa_arrows : "\uf047"
readonly property string fa_arrows_alt : "\uf0b2"
readonly property string fa_arrows_h : "\uf07e"
readonly property string fa_arrows_v : "\uf07d"
readonly property string fa_asterisk : "\uf069"
readonly property string fa_at : "\uf1fa"
readonly property string fa_automobile : "\uf1b9"
readonly property string fa_backward : "\uf04a"
readonly property string fa_ban : "\uf05e"
readonly property string fa_bank : "\uf19c"
readonly property string fa_bar_chart_o : "\uf080"
readonly property string fa_barcode : "\uf02a"
readonly property string fa_bars : "\uf0c9"
readonly property string fa_beer : "\uf0fc"
readonly property string fa_behance : "\uf1b4"
readonly property string fa_behance_square : "\uf1b5"
readonly property string fa_bell : "\uf0f3"
readonly property string fa_bell_o : "\uf0a2"
readonly property string fa_bell_slash : "\uf1f6"
readonly property string fa_bell_slash_o : "\uf1f7"
readonly property string fa_bicycle : "\uf206"
readonly property string fa_binoculars : "\uf1e5"
readonly property string fa_birthday_cake : "\uf1fd"
readonly property string fa_bitbucket : "\uf171"
readonly property string fa_bitbucket_square : "\uf172"
readonly property string fa_bitcoin : "\uf15a"
readonly property string fa_bold : "\uf032"
readonly property string fa_bolt : "\uf0e7"
readonly property string fa_bomb : "\uf1e2"
readonly property string fa_book : "\uf02d"
readonly property string fa_bookmark : "\uf02e"
readonly property string fa_bookmark_o : "\uf097"
readonly property string fa_briefcase : "\uf0b1"
readonly property string fa_btc : "\uf15a"
readonly property string fa_bug : "\uf188"
readonly property string fa_building : "\uf1ad"
readonly property string fa_building_o : "\uf0f7"
readonly property string fa_bullhorn : "\uf0a1"
readonly property string fa_bullseye : "\uf140"
readonly property string $fa_bus : "\uf207"
readonly property string fa_cab : "\uf1ba"
readonly property string $fa_calculator : "\uf1ec"
readonly property string fa_calendar : "\uf073"
readonly property string fa_calendar_o : "\uf133"
readonly property string fa_camera : "\uf030"
readonly property string fa_camera_retro : "\uf083"
readonly property string fa_car : "\uf1b9"
readonly property string fa_caret_down : "\uf0d7"
readonly property string fa_caret_left : "\uf0d9"
readonly property string fa_caret_right : "\uf0da"
readonly property string fa_caret_square_o_down : "\uf150"
readonly property string fa_caret_square_o_left : "\uf191"
readonly property string fa_caret_square_o_right : "\uf152"
readonly property string fa_caret_square_o_up : "\uf151"
readonly property string fa_caret_up : "\uf0d8"
readonly property string fa_cc : "\uf20a"
readonly property string fa_cc_amex : "\uf1f3"
readonly property string fa_cc_discover : "\uf1f2"
readonly property string fa_cc_mastercard : "\uf1f1"
readonly property string fa_cc_paypal : "\uf1f4"
readonly property string fa_cc_stripe : "\uf1f5"
readonly property string fa_cc_visa : "\uf1f0"
readonly property string fa_certificate : "\uf0a3"
readonly property string fa_chain : "\uf0c1"
readonly property string fa_chain_broken : "\uf127"
readonly property string fa_check : "\uf00c"
readonly property string fa_check_circle : "\uf058"
readonly property string fa_check_circle_o : "\uf05d"
readonly property string fa_check_square : "\uf14a"
readonly property string fa_check_square_o : "\uf046"
readonly property string fa_chevron_circle_down : "\uf13a"
readonly property string fa_chevron_circle_left : "\uf137"
readonly property string fa_chevron_circle_right : "\uf138"
readonly property string fa_chevron_circle_up : "\uf139"
readonly property string fa_chevron_down : "\uf078"
readonly property string fa_chevron_left : "\uf053"
readonly property string fa_chevron_right : "\uf054"
readonly property string fa_chevron_up : "\uf077"
readonly property string fa_child : "\uf1ae"
readonly property string fa_circle : "\uf111"
readonly property string fa_circle_o : "\uf10c"
readonly property string fa_circle_o_notch : "\uf1ce"
readonly property string fa_circle_thin : "\uf1db"
readonly property string fa_clipboard : "\uf0ea"
readonly property string fa_clock_o : "\uf017"
readonly property string fa_cloud : "\uf0c2"
readonly property string fa_cloud_download : "\uf0ed"
readonly property string fa_cloud_upload : "\uf0ee"
readonly property string fa_cny : "\uf157"
readonly property string fa_code : "\uf121"
readonly property string fa_code_fork : "\uf126"
readonly property string fa_codepen : "\uf1cb"
readonly property string fa_coffee : "\uf0f4"
readonly property string fa_cog : "\uf013"
readonly property string fa_cogs : "\uf085"
readonly property string fa_columns : "\uf0db"
readonly property string fa_comment : "\uf075"
readonly property string fa_comment_o : "\uf0e5"
readonly property string fa_comments : "\uf086"
readonly property string fa_comments_o : "\uf0e6"
readonly property string fa_compass : "\uf14e"
readonly property string fa_compress : "\uf066"
readonly property string fa_copy : "\uf0c5"
readonly property string fa_copyright : "\uf1f9"
readonly property string fa_credit_card : "\uf09d"
readonly property string fa_crop : "\uf125"
readonly property string fa_crosshairs : "\uf05b"
readonly property string fa_css3 : "\uf13c"
readonly property string fa_cube : "\uf1b2"
readonly property string fa_cubes : "\uf1b3"
readonly property string fa_cut : "\uf0c4"
readonly property string fa_cutlery : "\uf0f5"
readonly property string fa_dashboard : "\uf0e4"
readonly property string fa_database : "\uf1c0"
readonly property string fa_dedent : "\uf03b"
readonly property string fa_delicious : "\uf1a5"
readonly property string fa_desktop : "\uf108"
readonly property string fa_deviantart : "\uf1bd"
readonly property string fa_digg : "\uf1a6"
readonly property string fa_dollar : "\uf155"
readonly property string fa_dot_circle_o : "\uf192"
readonly property string fa_download : "\uf019"
readonly property string fa_dribbble : "\uf17d"
readonly property string fa_dropbox : "\uf16b"
readonly property string fa_drupal : "\uf1a9"
readonly property string fa_edit : "\uf044"
readonly property string fa_eject : "\uf052"
readonly property string fa_ellipsis_h : "\uf141"
readonly property string fa_ellipsis_v : "\uf142"
readonly property string fa_empire : "\uf1d1"
readonly property string fa_envelope : "\uf0e0"
readonly property string fa_envelope_o : "\uf003"
readonly property string fa_envelope_square : "\uf199"
readonly property string fa_eraser : "\uf12d"
readonly property string fa_eur : "\uf153"
readonly property string fa_euro : "\uf153"
readonly property string fa_exchange : "\uf0ec"
readonly property string fa_exclamation : "\uf12a"
readonly property string fa_exclamation_circle : "\uf06a"
readonly property string fa_exclamation_triangle : "\uf071"
readonly property string fa_expand : "\uf065"
readonly property string fa_external_link : "\uf08e"
readonly property string fa_external_link_square : "\uf14c"
readonly property string fa_eye : "\uf06e"
readonly property string fa_eye_slash : "\uf070"
readonly property string fa_eyedropper : "\uf1fb"
readonly property string fa_facebook : "\uf09a"
readonly property string fa_facebook_square : "\uf082"
readonly property string fa_fast_backward : "\uf049"
readonly property string fa_fast_forward : "\uf050"
readonly property string fa_fax : "\uf1ac"
readonly property string fa_female : "\uf182"
readonly property string fa_fighter_jet : "\uf0fb"
readonly property string fa_file : "\uf15b"
readonly property string fa_file_archive_o : "\uf1c6"
readonly property string fa_file_audio_o : "\uf1c7"
readonly property string fa_file_code_o : "\uf1c9"
readonly property string fa_file_excel_o : "\uf1c3"
readonly property string fa_file_image_o : "\uf1c5"
readonly property string fa_file_movie_o : "\uf1c8"
readonly property string fa_file_o : "\uf016"
readonly property string fa_file_pdf_o : "\uf1c1"
readonly property string fa_file_photo_o : "\uf1c5"
readonly property string fa_file_picture_o : "\uf1c5"
readonly property string fa_file_powerpoint_o : "\uf1c4"
readonly property string fa_file_sound_o : "\uf1c7"
readonly property string fa_file_text : "\uf15c"
readonly property string fa_file_text_o : "\uf0f6"
readonly property string fa_file_video_o : "\uf1c8"
readonly property string fa_file_word_o : "\uf1c2"
readonly property string fa_file_zip_o : "\uf1c6"
readonly property string fa_files_o : "\uf0c5"
readonly property string fa_film : "\uf008"
readonly property string fa_filter : "\uf0b0"
readonly property string fa_fire : "\uf06d"
readonly property string fa_fire_extinguisher : "\uf134"
readonly property string fa_flag : "\uf024"
readonly property string fa_flag_checkered : "\uf11e"
readonly property string fa_flag_o : "\uf11d"
readonly property string fa_flash : "\uf0e7"
readonly property string fa_flask : "\uf0c3"
readonly property string fa_flickr : "\uf16e"
readonly property string fa_floppy_o : "\uf0c7"
readonly property string fa_folder : "\uf07b"
readonly property string fa_folder_o : "\uf114"
readonly property string fa_folder_open : "\uf07c"
readonly property string fa_folder_open_o : "\uf115"
readonly property string fa_font : "\uf031"
readonly property string fa_forward : "\uf04e"
readonly property string fa_foursquare : "\uf180"
readonly property string fa_frown_o : "\uf119"
readonly property string fa_futbol_o : "\uf1e3"
readonly property string fa_gamepad : "\uf11b"
readonly property string fa_gavel : "\uf0e3"
readonly property string fa_gbp : "\uf154"
readonly property string fa_ge : "\uf1d1"
readonly property string fa_gear : "\uf013"
readonly property string fa_gears : "\uf085"
readonly property string fa_gift : "\uf06b"
readonly property string fa_git : "\uf1d3"
readonly property string fa_git_square : "\uf1d2"
readonly property string fa_github : "\uf09b"
readonly property string fa_github_alt : "\uf113"
readonly property string fa_github_square : "\uf092"
readonly property string fa_gittip : "\uf184"
readonly property string fa_glass : "\uf000"
readonly property string fa_globe : "\uf0ac"
readonly property string fa_google : "\uf1a0"
readonly property string fa_google_plus : "\uf0d5"
readonly property string fa_google_plus_square : "\uf0d4"
readonly property string fa_google_wallet : "\uf1ee"
readonly property string fa_graduation_cap : "\uf19d"
readonly property string fa_group : "\uf0c0"
readonly property string fa_h_square : "\uf0fd"
readonly property string fa_hacker_news : "\uf1d4"
readonly property string fa_hand_o_down : "\uf0a7"
readonly property string fa_hand_o_left : "\uf0a5"
readonly property string fa_hand_o_right : "\uf0a4"
readonly property string fa_hand_o_up : "\uf0a6"
readonly property string fa_hdd_o : "\uf0a0"
readonly property string fa_header : "\uf1dc"
readonly property string fa_headphones : "\uf025"
readonly property string fa_heart : "\uf004"
readonly property string fa_heart_o : "\uf08a"
readonly property string fa_history : "\uf1da"
readonly property string fa_home : "\uf015"
readonly property string fa_hospital_o : "\uf0f8"
readonly property string fa_html5 : "\uf13b"
readonly property string fa_ils : "\uf20b"
readonly property string fa_image : "\uf03e"
readonly property string fa_inbox : "\uf01c"
readonly property string fa_indent : "\uf03c"
readonly property string fa_info : "\uf129"
readonly property string fa_info_circle : "\uf05a"
readonly property string fa_inr : "\uf156"
readonly property string fa_instagram : "\uf16d"
readonly property string fa_institution : "\uf19c"
readonly property string fa_ioxhost : "\uf208"
readonly property string fa_italic : "\uf033"
readonly property string fa_joomla : "\uf1aa"
readonly property string fa_jpy : "\uf157"
readonly property string fa_jsfiddle : "\uf1cc"
readonly property string fa_key : "\uf084"
readonly property string fa_keyboard_o : "\uf11c"
readonly property string fa_krw : "\uf159"
readonly property string fa_language : "\uf1ab"
readonly property string fa_laptop : "\uf109"
readonly property string fa_lastfm : "\uf202"
readonly property string fa_lastfm_square : "\uf203"
readonly property string fa_leaf : "\uf06c"
readonly property string fa_legal : "\uf0e3"
readonly property string fa_lemon_o : "\uf094"
readonly property string fa_level_down : "\uf149"
readonly property string fa_level_up : "\uf148"
readonly property string fa_life_bouy : "\uf1cd"
readonly property string fa_life_buoy : "\uf1cd"
readonly property string fa_life_ring : "\uf1cd"
readonly property string fa_life_saver : "\uf1cd"
readonly property string fa_lightbulb_o : "\uf0eb"
readonly property string fa_line_chart : "\uf201"
readonly property string fa_link : "\uf0c1"
readonly property string fa_linkedin : "\uf0e1"
readonly property string fa_linkedin_square : "\uf08c"
readonly property string fa_linux : "\uf17c"
readonly property string fa_list : "\uf03a"
readonly property string fa_list_alt : "\uf022"
readonly property string fa_list_ol : "\uf0cb"
readonly property string fa_list_ul : "\uf0ca"
readonly property string fa_location_arrow : "\uf124"
readonly property string fa_lock : "\uf023"
readonly property string fa_long_arrow_down : "\uf175"
readonly property string fa_long_arrow_left : "\uf177"
readonly property string fa_long_arrow_right : "\uf178"
readonly property string fa_long_arrow_up : "\uf176"
readonly property string fa_magic : "\uf0d0"
readonly property string fa_magnet : "\uf076"
readonly property string fa_mail_forward : "\uf064"
readonly property string fa_mail_reply : "\uf112"
readonly property string fa_mail_reply_all : "\uf122"
readonly property string fa_male : "\uf183"
readonly property string fa_map_marker : "\uf041"
readonly property string fa_maxcdn : "\uf136"
readonly property string fa_meanpath : "\uf20c"
readonly property string fa_medkit : "\uf0fa"
readonly property string fa_meh_o : "\uf11a"
readonly property string fa_microphone : "\uf130"
readonly property string fa_microphone_slash : "\uf131"
readonly property string fa_minus : "\uf068"
readonly property string fa_minus_circle : "\uf056"
readonly property string fa_minus_square : "\uf146"
readonly property string fa_minus_square_o : "\uf147"
readonly property string fa_mobile : "\uf10b"
readonly property string fa_mobile_phone : "\uf10b"
readonly property string fa_money : "\uf0d6"
readonly property string fa_moon_o : "\uf186"
readonly property string fa_mortar_board : "\uf19d"
readonly property string fa_music : "\uf001"
readonly property string fa_navicon : "\uf0c9"
readonly property string fa_newspaper_o : "\uf1ea"
readonly property string fa_openid : "\uf19b"
readonly property string fa_outdent : "\uf03b"
readonly property string fa_pagelines : "\uf18c"
readonly property string fa_paint_brush : "\uf1fc"
readonly property string fa_paper_plane : "\uf1d8"
readonly property string fa_paper_plane_o : "\uf1d9"
readonly property string fa_paperclip : "\uf0c6"
readonly property string fa_paragraph : "\uf1dd"
readonly property string fa_paste : "\uf0ea"
readonly property string fa_pause : "\uf04c"
readonly property string fa_paw : "\uf1b0"
readonly property string fa_paypal : "\uf1ed"
readonly property string fa_pencil : "\uf040"
readonly property string fa_pencil_square : "\uf14b"
readonly property string fa_pencil_square_o : "\uf044"
readonly property string fa_phone : "\uf095"
readonly property string fa_phone_square : "\uf098"
readonly property string fa_photo : "\uf03e"
readonly property string fa_picture_o : "\uf03e"
readonly property string fa_pie_chart : "\uf200"
readonly property string fa_pied_piper : "\uf1a7"
readonly property string fa_pied_piper_alt : "\uf1a8"
readonly property string fa_pinterest : "\uf0d2"
readonly property string fa_pinterest_square : "\uf0d3"
readonly property string fa_plane : "\uf072"
readonly property string fa_play : "\uf04b"
readonly property string fa_play_circle : "\uf144"
readonly property string fa_play_circle_o : "\uf01d"
readonly property string fa_plug : "\uf1e6"
readonly property string fa_plus : "\uf067"
readonly property string fa_plus_circle : "\uf055"
readonly property string fa_plus_square : "\uf0fe"
readonly property string fa_plus_square_o : "\uf196"
readonly property string fa_power_off : "\uf011"
readonly property string fa_print : "\uf02f"
readonly property string fa_puzzle_piece : "\uf12e"
readonly property string fa_qq : "\uf1d6"
readonly property string fa_qrcode : "\uf029"
readonly property string fa_question : "\uf128"
readonly property string fa_question_circle : "\uf059"
readonly property string fa_quote_left : "\uf10d"
readonly property string fa_quote_right : "\uf10e"
readonly property string fa_ra : "\uf1d0"
readonly property string fa_random : "\uf074"
readonly property string fa_rebel : "\uf1d0"
readonly property string fa_recycle : "\uf1b8"
readonly property string fa_reddit : "\uf1a1"
readonly property string fa_reddit_square : "\uf1a2"
readonly property string fa_refresh : "\uf021"
readonly property string fa_remove : "\uf00d"
readonly property string fa_renren : "\uf18b"
readonly property string fa_reorder : "\uf0c9"
readonly property string fa_repeat : "\uf01e"
readonly property string fa_reply : "\uf112"
readonly property string fa_reply_all : "\uf122"
readonly property string fa_retweet : "\uf079"
readonly property string fa_rmb : "\uf157"
readonly property string fa_road : "\uf018"
readonly property string fa_rocket : "\uf135"
readonly property string fa_rotate_left : "\uf0e2"
readonly property string fa_rotate_right : "\uf01e"
readonly property string fa_rouble : "\uf158"
readonly property string fa_rss : "\uf09e"
readonly property string fa_rss_square : "\uf143"
readonly property string fa_rub : "\uf158"
readonly property string fa_ruble : "\uf158"
readonly property string fa_rupee : "\uf156"
readonly property string fa_save : "\uf0c7"
readonly property string fa_scissors : "\uf0c4"
readonly property string fa_search : "\uf002"
readonly property string fa_search_minus : "\uf010"
readonly property string fa_search_plus : "\uf00e"
readonly property string fa_send : "\uf1d8"
readonly property string fa_send_o : "\uf1d9"
readonly property string fa_share : "\uf064"
readonly property string fa_share_alt : "\uf1e0"
readonly property string fa_share_alt_square : "\uf1e1"
readonly property string fa_share_square : "\uf14d"
readonly property string fa_share_square_o : "\uf045"
readonly property string fa_shekel : "\uf20b"
readonly property string fa_sheqel : "\uf20b"
readonly property string fa_shield : "\uf132"
readonly property string fa_shopping_cart : "\uf07a"
readonly property string fa_sign_in : "\uf090"
readonly property string fa_sign_out : "\uf08b"
readonly property string fa_signal : "\uf012"
readonly property string fa_sitemap : "\uf0e8"
readonly property string fa_skype : "\uf17e"
readonly property string fa_slack : "\uf198"
readonly property string fa_sliders : "\uf1de"
readonly property string fa_slideshare : "\uf1e7"
readonly property string fa_smile_o : "\uf118"
readonly property string fa_soccer_ball_o : "\uf1e3"
readonly property string fa_sort : "\uf0dc"
readonly property string fa_sort_alpha_asc : "\uf15d"
readonly property string fa_sort_alpha_desc : "\uf15e"
readonly property string fa_sort_amount_asc : "\uf160"
readonly property string fa_sort_amount_desc : "\uf161"
readonly property string fa_sort_asc : "\uf0de"
readonly property string fa_sort_desc : "\uf0dd"
readonly property string fa_sort_down : "\uf0dd"
readonly property string fa_sort_numeric_asc : "\uf162"
readonly property string fa_sort_numeric_desc : "\uf163"
readonly property string fa_sort_up : "\uf0de"
readonly property string fa_soundcloud : "\uf1be"
readonly property string fa_space_shuttle : "\uf197"
readonly property string fa_spinner : "\uf110"
readonly property string fa_spoon : "\uf1b1"
readonly property string fa_spotify : "\uf1bc"
readonly property string fa_square : "\uf0c8"
readonly property string fa_square_o : "\uf096"
readonly property string fa_stack_exchange : "\uf18d"
readonly property string fa_stack_overflow : "\uf16c"
readonly property string fa_star : "\uf005"
readonly property string fa_star_half : "\uf089"
readonly property string fa_star_half_empty : "\uf123"
readonly property string fa_star_half_full : "\uf123"
readonly property string fa_star_half_o : "\uf123"
readonly property string fa_star_o : "\uf006"
readonly property string fa_steam : "\uf1b6"
readonly property string fa_steam_square : "\uf1b7"
readonly property string fa_step_backward : "\uf048"
readonly property string fa_step_forward : "\uf051"
readonly property string fa_stethoscope : "\uf0f1"
readonly property string fa_stop : "\uf04d"
readonly property string fa_strikethrough : "\uf0cc"
readonly property string fa_stumbleupon : "\uf1a4"
readonly property string fa_stumbleupon_circle : "\uf1a3"
readonly property string fa_subscript : "\uf12c"
readonly property string fa_suitcase : "\uf0f2"
readonly property string fa_sun_o : "\uf185"
readonly property string fa_superscript : "\uf12b"
readonly property string fa_support : "\uf1cd"
readonly property string fa_table : "\uf0ce"
readonly property string fa_tablet : "\uf10a"
readonly property string fa_tachometer : "\uf0e4"
readonly property string fa_tag : "\uf02b"
readonly property string fa_tags : "\uf02c"
readonly property string fa_tasks : "\uf0ae"
readonly property string fa_taxi : "\uf1ba"
readonly property string fa_tencent_weibo : "\uf1d5"
readonly property string fa_terminal : "\uf120"
readonly property string fa_text_height : "\uf034"
readonly property string fa_text_width : "\uf035"
readonly property string fa_th : "\uf00a"
readonly property string fa_th_large : "\uf009"
readonly property string fa_th_list : "\uf00b"
readonly property string fa_thumb_tack : "\uf08d"
readonly property string fa_thumbs_down : "\uf165"
readonly property string fa_thumbs_o_down : "\uf088"
readonly property string fa_thumbs_o_up : "\uf087"
readonly property string fa_thumbs_up : "\uf164"
readonly property string fa_ticket : "\uf145"
readonly property string fa_times : "\uf00d"
readonly property string fa_times_circle : "\uf057"
readonly property string fa_times_circle_o : "\uf05c"
readonly property string fa_tint : "\uf043"
readonly property string fa_toggle_down : "\uf150"
readonly property string fa_toggle_left : "\uf191"
readonly property string fa_toggle_off : "\uf204"
readonly property string fa_toggle_on : "\uf205"
readonly property string fa_toggle_right : "\uf152"
readonly property string fa_toggle_up : "\uf151"
readonly property string fa_trash : "\uf1f8"
readonly property string fa_trash_o : "\uf014"
readonly property string fa_tree : "\uf1bb"
readonly property string fa_trello : "\uf181"
readonly property string fa_trophy : "\uf091"
readonly property string fa_truck : "\uf0d1"
readonly property string fa_try : "\uf195"
readonly property string fa_tty : "\uf1e4"
readonly property string fa_tumblr : "\uf173"
readonly property string fa_tumblr_square : "\uf174"
readonly property string fa_turkish_lira : "\uf195"
readonly property string fa_twitch : "\uf1e8"
readonly property string fa_twitter : "\uf099"
readonly property string fa_twitter_square : "\uf081"
readonly property string fa_umbrella : "\uf0e9"
readonly property string fa_underline : "\uf0cd"
readonly property string fa_undo : "\uf0e2"
readonly property string fa_university : "\uf19c"
readonly property string fa_unlink : "\uf127"
readonly property string fa_unlock : "\uf09c"
readonly property string fa_unlock_alt : "\uf13e"
readonly property string fa_unsorted : "\uf0dc"
readonly property string fa_upload : "\uf093"
readonly property string fa_usd : "\uf155"
readonly property string fa_user : "\uf007"
readonly property string fa_user_md : "\uf0f0"
readonly property string fa_users : "\uf0c0"
readonly property string fa_video_camera : "\uf03d"
readonly property string fa_vimeo_square : "\uf194"
readonly property string fa_vine : "\uf1ca"
readonly property string fa_vk : "\uf189"
readonly property string fa_volume_down : "\uf027"
readonly property string fa_volume_off : "\uf026"
readonly property string fa_volume_up : "\uf028"
readonly property string fa_warning : "\uf071"
readonly property string fa_wechat : "\uf1d7"
readonly property string fa_weibo : "\uf18a"
readonly property string fa_weixin : "\uf1d7"
readonly property string fa_wheelchair : "\uf193"
readonly property string fa_wifi : "\uf1eb"
readonly property string fa_windows : "\uf17a"
readonly property string fa_won : "\uf159"
readonly property string fa_wordpress : "\uf19a"
readonly property string fa_wrench : "\uf0ad"
readonly property string fa_xing : "\uf168"
readonly property string fa_xing_square : "\uf169"
readonly property string fa_yahoo : "\uf19e"
readonly property string fa_yelp : "\uf1e9"
readonly property string fa_yen : "\uf157"
readonly property string fa_youtube : "\uf167"
readonly property string fa_youtube_play : "\uf16a"
readonly property string fa_youtube_square : "\uf166"
}