diff --git a/Makefile b/Makefile index 42393d15..dc5d3716 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ clean: linux: date - qtdeploy -qt_version $(QT_BUILD_VERSION) build linux 2>&1 | tee qtdeploy.log | pv + qtdeploy -docker -qt_version $(QT_BUILD_VERSION) build linux 2>&1 | tee qtdeploy.log | pv date cp -R assets deploy/linux/ diff --git a/go/ui/gcd.go b/go/ui/gcd.go index 5d3fe715..2a55557e 100644 --- a/go/ui/gcd.go +++ b/go/ui/gcd.go @@ -42,7 +42,7 @@ type GrandCentralDispatcher struct { _ int `property:"torStatus"` _ string `property:"os"` _ bool `property:"firstTime"` - _ float32 `property:"themeScale,auto,changed"` + _ int `property:"scaleFactor,auto,changed"` _ string `property:"theme,auto,changed"` _ string `property:"locale,auto,changed"` _ string `property:"version"` @@ -98,7 +98,7 @@ type GrandCentralDispatcher struct { // settings helpers _ func(str string) `signal:"InvokePopup"` - _ func(locale string, zoom float32, theme string) `signal:"SupplySettings"` + _ func(locale string, scale int, theme string) `signal:"SupplySettings"` _ func(groupID, name, server, invitation string, accepted bool, addrbooknames, addrbookaddrs []string) `signal:"SupplyGroupSettings"` _ func(onion, nick string, authorization string, storage string) `signal:"SupplyPeerSettings"` _ func(server string, key_types []string, keys []string) `signal:"SupplyServerSettings"` @@ -106,8 +106,8 @@ type GrandCentralDispatcher struct { // signals emitted from the ui (and implemented in go, below) // ui _ func() `signal:"onActivate,auto"` - _ func(pane int) `signal:"setRootPaneState",auto` - _ func(pane int) `signal:"setProfilePaneState",auto` + _ func(pane int) `signal:"setRootPaneState,auto"` + _ func(pane int) `signal:"setProfilePaneState,auto"` // profile managemenet _ func(onion, nick string) `signal:"updateNick,auto"` _ func(handle string) `signal:"loadProfile,auto"` @@ -158,7 +158,7 @@ func (this *GrandCentralDispatcher) init() { firstTime := false this.GlobalSettings, firstTime = ReadGlobalSettings() this.SetFirstTime(firstTime) - this.SetThemeScale(this.GlobalSettings.Zoom) + this.SetScaleFactor(this.GlobalSettings.Scale) this.SetTheme(this.GlobalSettings.Theme) this.SetExperimentsEnabled(this.GlobalSettings.ExperimentsEnabled) this.SetExperiments(this.GlobalSettings.Experiments) @@ -454,7 +454,7 @@ func (this *GrandCentralDispatcher) legacyLoadOverlay_helper(handle string, over } func (this *GrandCentralDispatcher) requestSettings() { - this.SupplySettings(this.GlobalSettings.Locale, this.GlobalSettings.Zoom, this.GlobalSettings.Theme) + this.SupplySettings(this.GlobalSettings.Locale, this.GlobalSettings.Scale, this.GlobalSettings.Theme) } func (this *GrandCentralDispatcher) saveSettings(zoom, locale string) { @@ -774,8 +774,8 @@ func (this *GrandCentralDispatcher) setLocaleHelper(locale string) { this.QMLEngine.Retranslate() } -func (this *GrandCentralDispatcher) themeScaleChanged(newThemeScale float32) { - this.GlobalSettings.Zoom = newThemeScale +func (this *GrandCentralDispatcher) scaleFactorChanged(newScale int) { + this.GlobalSettings.Scale = newScale WriteGlobalSettings(this.GlobalSettings) } diff --git a/go/ui/settings.go b/go/ui/settings.go index 4e8b3530..dee873de 100644 --- a/go/ui/settings.go +++ b/go/ui/settings.go @@ -9,14 +9,13 @@ import ( "io/ioutil" "os" "path" - "runtime" ) const GlobalSettingsFilename = "ui.globals" const saltFile = "SALT" type GlobalSettings struct { - Zoom float32 + Scale int Locale string Theme string PreviousPid int64 @@ -26,7 +25,7 @@ type GlobalSettings struct { } var DefaultGlobalSettings = GlobalSettings{ - Zoom: 1.9, + Scale: 2, Locale: "en", Theme: "light", PreviousPid: -1, @@ -59,9 +58,6 @@ func InitGlobalSettingsFile(directory string, password string) error { func ReadGlobalSettings() (*GlobalSettings, bool) { settings := DefaultGlobalSettings - if runtime.GOOS == "android" { - settings.Zoom = 2.9 - } settings.Locale = core.QLocale_System().Name() settingsBytes, err := the.GlobalSettingsFile.Read() @@ -76,7 +72,7 @@ func ReadGlobalSettings() (*GlobalSettings, bool) { return &settings, true //firstTime = true } - log.Debugf("Settings: %v", settings) + log.Debugf("Settings: %#v", settings) return &settings, false } diff --git a/i18n/translation_de.qm b/i18n/translation_de.qm index 077e1a73..f5575a42 100644 Binary files a/i18n/translation_de.qm and b/i18n/translation_de.qm differ diff --git a/i18n/translation_de.ts b/i18n/translation_de.ts index 1c49f66a..3e8e1e77 100644 --- a/i18n/translation_de.ts +++ b/i18n/translation_de.ts @@ -31,69 +31,69 @@ AddPeerGroupPane - + profile-oniblon-label Send this address to peers you want to connect with - + copy-btn Kopieren - + copied-to-clipboard-notification notification: copied to clipboard in die Zwischenablage kopiert - + add-peer-tab - + create-group-tab - + join-group-tab - + peer-address Address - + peer-name Name - + group-name Group Name - + server Server - + invitation Invitation - + group-addr Address @@ -102,18 +102,18 @@ BulletinOverlay - + new-bulletin-label Neue Meldung - + post-new-bulletin-label Post a new Bulletin Post Neue Meldung veröffentlichen - + title-placeholder title place holder text Titel... @@ -148,7 +148,7 @@ Adresse hier hinzufügen, um einen Kontakt aufzunehmen - + blocked @@ -156,65 +156,65 @@ GroupSettingsPane - + server-label Server - - + + copy-btn Kopieren - - + + copied-to-clipboard-notification notification: copied to clipboard in die Zwischenablage kopiert - + invitation-label Einladung - + server-info - + server-connectivity-connected - + server-connectivity-disconnected - + server-synced - + server-not-synced - + view-server-info - + group-name-label Gruppenname - + save-btn Speichern @@ -228,7 +228,7 @@ Einladen - + delete-btn Löschen @@ -251,18 +251,18 @@ noch zu erledigen - + search-list ex: "Find..." - + peer-not-online - + add-list-item-btn @@ -279,24 +279,24 @@ Message - + dm-tooltip Click to DM Klicken, um DM zu senden - + could-not-send-msg-error Could not send this message Nachricht konnte nicht gesendet werden - + acknowledged-label bestätigt - + pending-label Bestätigung ausstehend @@ -379,55 +379,55 @@ PeerSettingsPane - + address-label Adresse - + copy-btn Kopieren - + copied-to-clipboard-notification notification: copied to clipboard in die Zwischenablage kopiert - + display-name-label Angezeigter Name - + save-btn speichern - - + + save-peer-history Save Peer History - + save-peer-history-description - + dont-save-peer-history - + delete-btn löschen - + block-btn @@ -435,30 +435,30 @@ ProfileAddEditPane - + copy-btn Kopieren - + copied-to-clipboard-notification notification: copied to clipboard in die Zwischenablage kopiert - + radio-use-password Password - + radio-no-password Unencrypted (No password) - + no-password-warning Not using a password on this account means that all data stored locally will not be encrypted @@ -475,84 +475,84 @@ - + profile-oniblon-label Send this address to peers you want to connect with - + your-display-name Your Display Name - + current-password-label Current Password - + password1-label Password - + password2-label Reenter password - + password-error-empty Passwords do not match - + create-profile-btn Create || Save - + save-profile-btn - + password-error-match - + password-change-error Error changing password: Supplied password rejected - + delete-profile-btn Delete Profile - - + + delete-confirm-label Type DELETE to confirm - + delete-profile-confirm-btn Really Delete Profile - + delete-confirm-text DELETE @@ -561,7 +561,7 @@ ProfileList - + add-new-profile-btn @@ -569,36 +569,36 @@ ProfileManagerPane - + enter-profile-password Enter a password to view your profiles - + password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password - + your-profiles Your Profiles - + your-servers Your Profiles - + unlock Unlock @@ -617,82 +617,111 @@ Benutzeroberflächen-Zoom (betriftt hauptsächlich Text- und Knopgrößen) - + setting-language Language - + locale-en - + locale-fr - + locale-pt - + locale-de - + locale-es - + locale-it - + setting-interface-zoom Interface Zoom + + + medium-text-label + medium text + + - large-text-label + + large text Groß - + + large-text-label + large text + + + + setting-theme Theme - + theme-light - + theme-dark - + experiments-enabled - Theme + Enable experiments - + + Text magnification reference + + + + + Acknowledgements + + + + + extra special thanks!!!! + don't translate yet... we should come up with something to write here as a team<3 + + + + version %1 tor %2 Version %1 with tor %2 - + builddate %2 Built on: %2 @@ -703,8 +732,9 @@ defaultmäßige Textgröße (Skalierungsfaktor: - + small-text-label + small text Klein @@ -747,7 +777,7 @@ main - + new-connection-pane-title New Connection diff --git a/i18n/translation_en.ts b/i18n/translation_en.ts index 7606e16f..e5c63ec9 100644 --- a/i18n/translation_en.ts +++ b/i18n/translation_en.ts @@ -31,69 +31,69 @@ AddPeerGroupPane - + profile-oniblon-label Send this address to peers you want to connect with Send this address to peers you want to connect with - + copy-btn Copy - + copied-to-clipboard-notification notification: copied to clipboard Copied to Clipboard - + add-peer-tab Add a peer - + create-group-tab Create a group - + join-group-tab Join a group - + peer-address Address Address - + peer-name Name Name - + group-name Group Name Group name - + server Server Server - + invitation Invitation Invitation - + group-addr Address Address @@ -115,18 +115,18 @@ BulletinOverlay - + new-bulletin-label New Bulletin - + post-new-bulletin-label Post a new Bulletin Post Post new bulletin - + title-placeholder title place holder text title... @@ -153,6 +153,17 @@ Message history is enabled. + + Collapser/Expander Widget + + collapser-show + Show + + + collapser-hide + Hide + + ContactList @@ -161,7 +172,7 @@ ... paste an address here to add a contact... - + blocked Blocked @@ -257,65 +268,65 @@ Right-click to reset. GroupSettingsPane - + server-label Server - - + + copy-btn Copy - - + + copied-to-clipboard-notification notification: copied to clipboard Copied to Clipboard - + invitation-label Invitation - + server-info Server Information - + server-connectivity-connected Server Connected - + server-connectivity-disconnected Server Disconnected - + server-synced Synced - + server-not-synced Out of Sync - + view-server-info Server Info - + group-name-label Group Name - + save-btn Save @@ -329,7 +340,7 @@ Right-click to reset. Invite - + delete-btn Delete @@ -344,18 +355,18 @@ Right-click to reset. ListOverlay - + search-list ex: "Find..." Search List - + peer-not-online Peer is Offline. Applications cannot be used right now. - + add-list-item-btn Add Item @@ -372,24 +383,24 @@ Right-click to reset. Message - + dm-tooltip Click to DM Click to DM - + could-not-send-msg-error Could not send this message Could not send this message - + acknowledged-label Acknowledged - + pending-label Pending @@ -472,50 +483,50 @@ Right-click to reset. PeerSettingsPane - + address-label Address - + copy-btn Copy - + copied-to-clipboard-notification notification: copied to clipboard Copied to Clipboard - + display-name-label Display Name - + save-btn Save - + block-btn Block Peer - - + + save-peer-history Save Peer History Save Peer History - + save-peer-history-description Determines whether or not to delete any history associated with the peer. - + dont-save-peer-history Delete Peer History @@ -524,7 +535,7 @@ Right-click to reset. Unblock Peer - + delete-btn Delete @@ -565,113 +576,113 @@ Right-click to reset. Send this address to peers you want to connect with - + copy-btn Copy - + copied-to-clipboard-notification notification: copied to clipboard Copied to Clipboard - + radio-use-password Password Password - + radio-no-password Unencrypted (No password) Unencrypted (No password) - + no-password-warning Not using a password on this account means that all data stored locally will not be encrypted Not using a password on this account means that all data stored locally will not be encrypted - + profile-oniblon-label Send this address to peers you want to connect with Send this address to peers you want to connect with - + your-display-name Your Display Name Your Display Name - + current-password-label Current Password Current Password - + password1-label Password Password - + password2-label Reenter password Reenter password - + password-error-empty Passwords do not match Password cannot be empty - + create-profile-btn Create || Save Create Profile - + save-profile-btn Save Profile - + password-error-match Passwords do not match - + password-change-error Error changing password: Supplied password rejected Error changing password: Supplied password rejected - + delete-profile-btn Delete Profile Delete Profile - - + + delete-confirm-label Type DELETE to confirm Type DELETE to confirm - + delete-profile-confirm-btn Really Delete Profile Really Delete Profile - + delete-confirm-text DELETE DELETE @@ -680,7 +691,7 @@ Right-click to reset. ProfileList - + add-new-profile-btn Add new profile @@ -688,36 +699,36 @@ Right-click to reset. ProfileManagerPane - + enter-profile-password Enter a password to view your profiles Enter a password to view your profiles - + password Password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password 0 profiles loaded with that password - + your-profiles Your Profiles Your Profiles - + your-servers Your Profiles Your Servers - + unlock Unlock Unlock @@ -745,76 +756,99 @@ Right-click to reset. Block Unknown Peers - + setting-language Language Language - + locale-en English - + locale-fr Frances - + locale-pt Portuguesa - + locale-de Deutsche - + locale-es Espanol - + locale-it Italiana - + setting-interface-zoom Interface Zoom Zoom level - + + medium-text-label + medium text + + + + large-text-label + large text Large - + setting-theme Theme Theme - + theme-light Light - + theme-dark Dark - + experiments-enabled - Theme + Enable experiments Experiments enabled - + + Text magnification reference + + + + + Acknowledgements + + + + + extra special thanks!!!! + don't translate yet... we should come up with something to write here as a team<3 + + + + version %1 tor %2 Version %1 with tor %2 Version %1 with tor %2 @@ -825,7 +859,7 @@ Right-click to reset. Version %1 - + builddate %2 Built on: %2 Built on: %2 @@ -836,8 +870,9 @@ Right-click to reset. Default size text (scale factor: - + small-text-label + small text Small @@ -888,7 +923,7 @@ Right-click to reset. main - + new-connection-pane-title New Connection New Connection diff --git a/i18n/translation_es.ts b/i18n/translation_es.ts index 5a4a52f9..1239d81c 100644 --- a/i18n/translation_es.ts +++ b/i18n/translation_es.ts @@ -621,6 +621,7 @@ large-text-label + large text Grande @@ -638,7 +639,7 @@ experiments-enabled - Theme + Enable experiments Experimentos habilitados @@ -661,6 +662,7 @@ small-text-label + small text Pequeño @@ -671,6 +673,24 @@ locale-it Italiano + + medium-text-label + medium text + + + + Text magnification reference + + + + Acknowledgements + + + + extra special thanks!!!! + don't translate yet... we should come up with something to write here as a team<3 + + SplashPane diff --git a/i18n/translation_fr.ts b/i18n/translation_fr.ts index 7d18891b..2b46f25e 100644 --- a/i18n/translation_fr.ts +++ b/i18n/translation_fr.ts @@ -31,69 +31,69 @@ AddPeerGroupPane - + profile-oniblon-label Send this address to peers you want to connect with - + copy-btn Copier - + copied-to-clipboard-notification notification: copied to clipboard Copié dans le presse-papier - + add-peer-tab - + create-group-tab - + join-group-tab - + peer-address Address - + peer-name Name - + group-name Group Name - + server Server - + invitation Invitation - + group-addr Address @@ -102,18 +102,18 @@ BulletinOverlay - + new-bulletin-label Nouveau bulletin - + post-new-bulletin-label Post a new Bulletin Post Envoyer un nouveau bulletin - + title-placeholder title place holder text titre... @@ -148,7 +148,7 @@ ... coller une adresse ici pour ajouter un contact... - + blocked @@ -156,65 +156,65 @@ GroupSettingsPane - + server-label Serveur - - + + copy-btn Copier - - + + copied-to-clipboard-notification notification: copied to clipboard Copié dans le presse-papier - + invitation-label Invitation - + server-info - + server-connectivity-connected - + server-connectivity-disconnected - + server-synced - + server-not-synced - + view-server-info - + group-name-label Nom du groupe - + save-btn Sauvegarder @@ -228,7 +228,7 @@ Invitation - + delete-btn Effacer @@ -251,18 +251,18 @@ A faire... - + search-list ex: "Find..." - + peer-not-online - + add-list-item-btn @@ -279,24 +279,24 @@ Message - + dm-tooltip Click to DM Envoyer un message privé - + could-not-send-msg-error Could not send this message Impossible d'envoyer ce message - + acknowledged-label Confirmé - + pending-label En attente @@ -379,55 +379,55 @@ PeerSettingsPane - + address-label Adresse - + copy-btn Copier - + copied-to-clipboard-notification notification: copied to clipboard Copié dans le presse-papier - + display-name-label Pseudo - + save-btn Sauvegarder - - + + save-peer-history Save Peer History - + save-peer-history-description - + dont-save-peer-history - + delete-btn Effacer - + block-btn @@ -435,30 +435,30 @@ ProfileAddEditPane - + copy-btn Copier - + copied-to-clipboard-notification notification: copied to clipboard Copié dans le presse-papier - + radio-use-password Password - + radio-no-password Unencrypted (No password) - + no-password-warning Not using a password on this account means that all data stored locally will not be encrypted @@ -475,84 +475,84 @@ - + profile-oniblon-label Send this address to peers you want to connect with - + your-display-name Your Display Name - + current-password-label Current Password - + password1-label Password - + password2-label Reenter password - + password-error-empty Passwords do not match - + create-profile-btn Create || Save - + save-profile-btn - + password-error-match - + password-change-error Error changing password: Supplied password rejected - + delete-profile-btn Delete Profile - - + + delete-confirm-label Type DELETE to confirm - + delete-profile-confirm-btn Really Delete Profile - + delete-confirm-text DELETE @@ -561,7 +561,7 @@ ProfileList - + add-new-profile-btn @@ -569,36 +569,36 @@ ProfileManagerPane - + enter-profile-password Enter a password to view your profiles - + password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password - + your-profiles Your Profiles - + your-servers Your Profiles - + unlock Unlock @@ -617,82 +617,105 @@ Interface zoom (essentiellement la taille du texte et des composants de l'interface) - + setting-language Language - + locale-en - + locale-fr - + locale-pt - + locale-de - + locale-es - + locale-it - + setting-interface-zoom Interface Zoom - + + medium-text-label + medium text + + + + large-text-label + large text Large - + setting-theme Theme - + theme-light - + theme-dark - + experiments-enabled - Theme + Enable experiments - + + Text magnification reference + + + + + Acknowledgements + + + + + extra special thanks!!!! + don't translate yet... we should come up with something to write here as a team<3 + + + + version %1 tor %2 Version %1 with tor %2 - + builddate %2 Built on: %2 @@ -703,8 +726,9 @@ Taille par défaut du texte (échelle: - + small-text-label + small text Petit @@ -747,7 +771,7 @@ main - + new-connection-pane-title New Connection diff --git a/i18n/translation_it.qm b/i18n/translation_it.qm index e23dfed4..4aa935c3 100644 Binary files a/i18n/translation_it.qm and b/i18n/translation_it.qm differ diff --git a/i18n/translation_it.ts b/i18n/translation_it.ts index 520b5821..b61d3de3 100644 --- a/i18n/translation_it.ts +++ b/i18n/translation_it.ts @@ -1,654 +1,747 @@ - + + + - AddGroupPane - - create-group-title - Crea un gruppo - - - server-label - Server - - - group-name-label - Nome del gruppo - - - default-group-name - Gruppo fantastico - - - create-group-btn - Crea - + AddGroupPane + + create-group-title + Crea un gruppo + + + server-label + Server + + + group-name-label + Nome del gruppo + + + default-group-name + Gruppo fantastico + + + create-group-btn + Crea + - AddPeerGroupPane - - profile-oniblon-label - Inviare questo indirizzo ai peer con cui si desidera connettersi - - - copy-btn - Copia - - - copied-to-clipboard-notification - Copiato negli Appunti - - - add-peer-tab - Aggiungi un peer - - - create-group-tab - Crea un gruppo - - - join-group-tab - Unisciti a un gruppo - - - peer-address - Indirizzo - - - peer-name - Nome - - - group-name - Nome del gruppo - - - server - Server - - - invitation - Invito - - - group-addr - Indirizzo - - - add-peer - Aggiungi peer - - - create-group - Crea un gruppo - - - join-group - Unisciti al gruppo - + AddPeerGroupPane + + profile-oniblon-label + Send this address to peers you want to connect with + Inviare questo indirizzo ai peer con cui si desidera connettersi + + + copy-btn + Copia + + + copied-to-clipboard-notification + notification: copied to clipboard + Copiato negli Appunti + + + add-peer-tab + Aggiungi un peer + + + create-group-tab + Crea un gruppo + + + join-group-tab + Unisciti a un gruppo + + + peer-address + Address + Indirizzo + + + peer-name + Name + Nome + + + group-name + Group Name + Nome del gruppo + + + server + Server + Server + + + invitation + Invitation + Invito + + + group-addr + Address + Indirizzo + + + add-peer + Aggiungi peer + + + create-group + Crea un gruppo + + + join-group + Unisciti al gruppo + - BulletinOverlay - - new-bulletin-label - Nuovo bollettino - - - post-new-bulletin-label - Pubblica un nuovo bollettino - - - title-placeholder - titolo... - + BulletinOverlay + + new-bulletin-label + Nuovo bollettino + + + post-new-bulletin-label + Post a new Bulletin Post + Pubblica un nuovo bollettino + + + title-placeholder + title place holder text + titolo... + - ContactList - - paste-address-to-add-contact - ... incolla qui un indirizzo per aggiungere un contatto... - - - blocked - Bloccato - + ChatOverlay + + chat-history-default + This conversation will be deleted when Cwtch is closed! Message history can be enabled per-conversation via the Settings menu in the upper right. + + + + chat-history-disabled + Message history is disabled. + + + + chat-history-enabled + Message history is enabled. + + - EmojiDrawer - - cycle-cats-android - Fare clic per scorrere le categorie. + ContactList + + paste-address-to-add-contact + ... incolla qui un indirizzo per aggiungere un contatto... + + + blocked + Bloccato + + + + EmojiDrawer + + cycle-cats-android + Fare clic per scorrere le categorie. Pressione lunga per resettare. - - - cycle-cats-desktop - Fare clic per scorrere le categorie. + + + cycle-cats-desktop + Fare clic per scorrere le categorie. Cliccare con il tasto destro per resettare. - - - cycle-morphs-android - Fare clic per scorrere i morph. + + + cycle-morphs-android + Fare clic per scorrere i morph. Pressione lunga per resettare. - - - cycle-morphs-desktop - Fare clic per scorrere i morph. + + + cycle-morphs-desktop + Fare clic per scorrere i morph. Cliccare con il tasto destro per resettare. - - - cycle-colours-android - Fare clic per scorrere i colori. + + + cycle-colours-android + Fare clic per scorrere i colori. Pressione lunga per resettare. - - - cycle-colours-desktop - Fare clic per scorrere i colori. + + + cycle-colours-desktop + Fare clic per scorrere i colori. Cliccare con il tasto destro per resettare. - - - search - Ricerca... - + + + search + Ricerca... + - GroupSettingsPane - - server-label - Server - - - copy-btn - Copia - - - copied-to-clipboard-notification - Copiato negli Appunti - - - invitation-label - Invito - - - server-info - Informazioni sul server - - - server-connectivity-connected - Server connesso - - - server-connectivity-disconnected - Server disconnesso - - - server-synced - Sincronizzato - - - server-not-synced - Non sincronizzato - - - view-server-info - Informazioni sul server - - - group-name-label - Nome del gruppo - - - save-btn - Salva - - - invite-to-group-label - Invitare nel gruppo - - - invite-btn - Invitare - - - delete-btn - Elimina - + GroupSettingsPane + + server-label + Server + + + copy-btn + Copia + + + copied-to-clipboard-notification + notification: copied to clipboard + Copiato negli Appunti + + + invitation-label + Invito + + + server-info + Informazioni sul server + + + server-connectivity-connected + Server connesso + + + server-connectivity-disconnected + Server disconnesso + + + server-synced + Sincronizzato + + + server-not-synced + Non sincronizzato + + + view-server-info + Informazioni sul server + + + group-name-label + Nome del gruppo + + + save-btn + Salva + + + invite-to-group-label + Invitare nel gruppo + + + invite-btn + Invitare + + + delete-btn + Elimina + - InplaceEditText - - Update - Aggiornamento - + InplaceEditText + + Update + Aggiornamento + - ListOverlay - - search-list - Cerca nella lista - - - peer-not-online - Il peer è offline. Le applicazioni non possono essere utilizzate in questo momento. - - - add-list-item-btn - Aggiungi elemento - - - add-list-item - Aggiungi un nuovo elemento alla lista - - - add-new-item - Aggiungi un nuovo elemento alla lista - - - todo-placeholder - Da fare... - + ListOverlay + + search-list + ex: "Find..." + Cerca nella lista + + + peer-not-online + Il peer è offline. Le applicazioni non possono essere utilizzate in questo momento. + + + add-list-item-btn + Aggiungi elemento + + + add-list-item + Aggiungi un nuovo elemento alla lista + + + add-new-item + Aggiungi un nuovo elemento alla lista + + + todo-placeholder + Da fare... + - MembershipOverlay - - membership-description - Di seguito è riportato un elenco di utenti che hanno inviato messaggi al gruppo. Questo elenco potrebbe non corrispondere a tutti gli utenti che hanno accesso al gruppo. - + MembershipOverlay + + membership-description + 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. + Di seguito è riportato un elenco di utenti che hanno inviato messaggi al gruppo. Questo elenco potrebbe non corrispondere a tutti gli utenti che hanno accesso al gruppo. + - Message - - dm-tooltip - Clicca per inviare un Messagio Diretto - - - could-not-send-msg-error - Impossibile inviare questo messaggio - - - acknowledged-label - Riconosciuto - - - pending-label - In corso - + Message + + dm-tooltip + Click to DM + Clicca per inviare un Messagio Diretto + + + could-not-send-msg-error + Could not send this message + Impossibile inviare questo messaggio + + + acknowledged-label + Riconosciuto + + + pending-label + In corso + - MessageEditor - - peer-blocked-message - Il peer è bloccato - - - peer-offline-message - Il peer è offline, i messaggi non possono essere recapitati in questo momento - + MessageEditor + + peer-blocked-message + Peer is blocked + Il peer è bloccato + + + peer-offline-message + Peer is offline, messages can't be delivered right now + Il peer è offline, i messaggi non possono essere recapitati in questo momento + - MyProfile - - copy-btn - Copia - - - copied-clipboard-notification - Copiato negli Appunti - - - new-group-btn - Crea un nuovo gruppo - - - paste-address-to-add-contact - ... incolla qui un indirizzo per aggiungere un contatto ... - + MyProfile + + copy-btn + Copia + + + copied-clipboard-notification + Copiato negli Appunti + + + new-group-btn + Crea un nuovo gruppo + + + paste-address-to-add-contact + ... incolla qui un indirizzo per aggiungere un contatto ... + - OverlayPane - - accept-group-invite-label - Vuoi accettare l'invito a - - - accept-group-btn - Accetta - - - reject-group-btn - Rifiuta - - - chat-btn - Chat - - - lists-btn - Liste - - - bulletins-btn - Bollettini - - - puzzle-game-btn - Gioco di puzzle - + OverlayPane + + accept-group-invite-label + Vuoi accettare l'invito a + + + accept-group-btn + Accetta + + + reject-group-btn + Rifiuta + + + chat-btn + Chat + + + lists-btn + Liste + + + bulletins-btn + Bollettini + + + puzzle-game-btn + Gioco di puzzle + - PeerSettingsPane - - address-label - Indirizzo - - - copy-btn - Copia - - - copied-to-clipboard-notification - Copiato negli Appunti - - - display-name-label - Nome visualizzato - - - save-btn - Salva - - - block-btn - Blocca il peer - - - save-peer-history - Salva cronologia peer - - - save-peer-history-description - Determina se eliminare o meno ogni cronologia eventualmente associata al peer. - - - dont-save-peer-history - Elimina cronologia dei peer - - - unblock-btn - Sblocca il peer - - - delete-btn - Elimina - + PeerSettingsPane + + address-label + Indirizzo + + + copy-btn + Copia + + + copied-to-clipboard-notification + notification: copied to clipboard + Copiato negli Appunti + + + display-name-label + Nome visualizzato + + + save-btn + Salva + + + block-btn + Blocca il peer + + + save-peer-history + Save Peer History + Salva cronologia peer + + + save-peer-history-description + Determina se eliminare o meno ogni cronologia eventualmente associata al peer. + + + dont-save-peer-history + Elimina cronologia dei peer + + + unblock-btn + Sblocca il peer + + + delete-btn + Elimina + - ProfileAddEditPane - - add-profile-title - Aggiungi nuovo profilo - - - edit-profile-title - Modifica profilo - - - profile-name - Nome visualizzato - - - default-profile-name - Alice - - - new-profile - Nuovo profilo - - - edit-profile - Modifica profilo - - - profile-onion-label - Inviare questo indirizzo ai peer con cui si desidera connettersi - - - copy-btn - Copia - - - copied-to-clipboard-notification - Copiato negli appunti - - - radio-use-password - Password - - - radio-no-password - Non criptato (senza password) - - - no-password-warning - Non utilizzare una password su questo account significa che tutti i dati archiviati localmente non verranno criptati - - - profile-oniblon-label - Inviare questo indirizzo ai peer con cui si desidera connettersi - - - your-display-name - Il tuo nome visualizzato - - - current-password-label - Password corrente - - - password1-label - Password - - - password2-label - Reinserire la password - - - password-error-empty - La password non può essere vuota - - - create-profile-btn - Crea un profilo - - - save-profile-btn - Salva il profilo - - - password-error-match - Le password non corrispondono - - - password-change-error - Errore durante la modifica della password: password fornita rifiutata - - - delete-profile-btn - Elimina profilo - - - delete-confirm-label - Digita ELIMINA per confermare - - - delete-profile-confirm-btn - Elimina realmente il profilo - - - delete-confirm-text - ELIMINA - + ProfileAddEditPane + + add-profile-title + Aggiungi nuovo profilo + + + edit-profile-title + Modifica profilo + + + profile-name + Nome visualizzato + + + default-profile-name + Alice + + + new-profile + New Profile || Edit Profile + Nuovo profilo + + + edit-profile + Modifica profilo + + + profile-onion-label + Inviare questo indirizzo ai peer con cui si desidera connettersi + + + copy-btn + Copia + + + copied-to-clipboard-notification + notification: copied to clipboard + Copiato negli appunti + + + radio-use-password + Password + Password + + + radio-no-password + Unencrypted (No password) + Non criptato (senza password) + + + no-password-warning + Not using a password on this account means that all data stored locally will not be encrypted + Non utilizzare una password su questo account significa che tutti i dati archiviati localmente non verranno criptati + + + profile-oniblon-label + Send this address to peers you want to connect with + Inviare questo indirizzo ai peer con cui si desidera connettersi + + + your-display-name + Your Display Name + Il tuo nome visualizzato + + + current-password-label + Current Password + Password corrente + + + password1-label + Password + Password + + + password2-label + Reenter password + Reinserire la password + + + password-error-empty + Passwords do not match + La password non può essere vuota + + + create-profile-btn + Create || Save + Crea un profilo + + + save-profile-btn + Salva il profilo + + + password-error-match + Le password non corrispondono + + + password-change-error + Error changing password: Supplied password rejected + Errore durante la modifica della password: password fornita rifiutata + + + delete-profile-btn + Delete Profile + Elimina profilo + + + delete-confirm-label + Type DELETE to confirm + Digita ELIMINA per confermare + + + delete-profile-confirm-btn + Really Delete Profile + Elimina realmente il profilo + + + delete-confirm-text + DELETE + ELIMINA + - ProfileList - - add-new-profile-btn - Aggiungi nuovo profilo - + ProfileList + + add-new-profile-btn + Aggiungi nuovo profilo + - ProfileManagerPane - - enter-profile-password - Inserisci una password per visualizzare i tuoi profili - - - password - Password - - - error-0-profiles-loaded-for-password - 0 profili caricati con quella password - - - your-profiles - I tuoi profili - - - your-servers - I tuoi server - - - unlock - Sblocca - + ProfileManagerPane + + enter-profile-password + Enter a password to view your profiles + Inserisci una password per visualizzare i tuoi profili + + + password + Password + + + error-0-profiles-loaded-for-password + 0 profiles loaded with that password + 0 profili caricati con quella password + + + your-profiles + Your Profiles + I tuoi profili + + + your-servers + Your Profiles + I tuoi server + + + unlock + Unlock + Sblocca + - SettingsPane - - cwtch-settings-title - Impostazioni di Cwtch - - - version %1 builddate %2 - Versione: %1 Costruito il: %2 - - - zoom-label - Zoom dell'interfaccia (influisce principalmente sulle dimensioni del testo e dei pulsanti) - - - block-unknown-label - Blocca peer sconosciuti - - - setting-language - Lingua - - - locale-en - Inglese - - - locale-fr - Francese - - - locale-pt - Portoghese - - - locale-de - Tedesco - - - setting-interface-zoom - Livello di zoom - - - large-text-label - Grande - - - setting-theme - Tema - - - theme-light - Chiaro - - - theme-dark - Scuro - - - experiments-enabled - Esperimenti abilitati - - - version %1 tor %2 - Versione %1 con tor %2 - - - version %1 - Versione %1 - - - builddate %2 - Costruito il: %2 - - - default-scaling-text - Testo di dimensioni predefinite (fattore di scala: - - - small-text-label - Piccolo - - - locale-es - Spagnolo - - - locale-it - Italiano - + SettingsPane + + cwtch-settings-title + Impostazioni di Cwtch + + + version %1 builddate %2 + Versione: %1 Costruito il: %2 + + + zoom-label + Zoom dell'interfaccia (influisce principalmente sulle dimensioni del testo e dei pulsanti) + + + block-unknown-label + Blocca peer sconosciuti + + + setting-language + Language + Lingua + + + locale-en + Inglese + + + locale-fr + Francese + + + locale-pt + Portoghese + + + locale-de + Tedesco + + + setting-interface-zoom + Interface Zoom + Livello di zoom + + + large-text-label + large text + Grande + + + setting-theme + Theme + Tema + + + theme-light + Chiaro + + + theme-dark + Scuro + + + experiments-enabled + Enable experiments + Esperimenti abilitati + + + version %1 tor %2 + Version %1 with tor %2 + Versione %1 con tor %2 + + + version %1 + Versione %1 + + + builddate %2 + Built on: %2 + Costruito il: %2 + + + default-scaling-text + Testo di dimensioni predefinite (fattore di scala: + + + small-text-label + small text + Piccolo + + + locale-es + Spagnolo + + + locale-it + Italiano + + + medium-text-label + medium text + + + + Text magnification reference + + + + Acknowledgements + + + + extra special thanks!!!! + don't translate yet... we should come up with something to write here as a team<3 + + - SplashPane - - loading-tor - Caricamento di tor... - + SplashPane + + loading-tor + Loading tor... + Caricamento di tor... + - StackToolbar - - view-group-membership-tooltip - Visualizza i membri del gruppo - + StackToolbar + + view-group-membership-tooltip + Visualizza i membri del gruppo + - Statusbar - - network-status-disconnected - Disconnesso da Internet, controlla la tua connessione - - - network-status-attempting-tor - Tentativo di connessione alla rete Tor - - - network-status-connecting - Connessione alla rete e ai peer ... - - - network-status-online - Online - + Statusbar + + network-status-disconnected + Disconnected from the internet, check your connection + Disconnesso da Internet, controlla la tua connessione + + + network-status-attempting-tor + Attempting to connect to Tor network + Tentativo di connessione alla rete Tor + + + network-status-connecting + Connecting... + Connessione alla rete e ai peer ... + + + network-status-online + Online + Online + - main - - new-connection-pane-title - Nuova connessione - + main + + new-connection-pane-title + New Connection + Nuova connessione + diff --git a/i18n/translation_pt.ts b/i18n/translation_pt.ts index 2d52e119..7a7f63d5 100644 --- a/i18n/translation_pt.ts +++ b/i18n/translation_pt.ts @@ -31,69 +31,69 @@ AddPeerGroupPane - + profile-oniblon-label Send this address to peers you want to connect with - + copy-btn Copiar - + copied-to-clipboard-notification notification: copied to clipboard Copiado - + add-peer-tab - + create-group-tab - + join-group-tab - + peer-address Address - + peer-name Name - + group-name Group Name - + server Server - + invitation Invitation - + group-addr Address @@ -102,18 +102,18 @@ BulletinOverlay - + new-bulletin-label Novo Boletim - + post-new-bulletin-label Post a new Bulletin Post Postar novo boletim - + title-placeholder title place holder text título… @@ -148,7 +148,7 @@ … cole um endereço aqui para adicionar um contato… - + blocked @@ -156,65 +156,65 @@ GroupSettingsPane - + server-label Servidor - - + + copy-btn Copiar - - + + copied-to-clipboard-notification notification: copied to clipboard Copiado - + invitation-label Convite - + server-info - + server-connectivity-connected - + server-connectivity-disconnected - + server-synced - + server-not-synced - + view-server-info - + group-name-label Nome do Grupo - + save-btn Salvar @@ -228,7 +228,7 @@ Convidar - + delete-btn Deletar @@ -251,18 +251,18 @@ Afazer… - + search-list ex: "Find..." - + peer-not-online - + add-list-item-btn @@ -279,24 +279,24 @@ Message - + dm-tooltip Click to DM Clique para DM - + could-not-send-msg-error Could not send this message Não deu para enviar esta mensagem - + acknowledged-label Confirmada - + pending-label Pendente @@ -379,55 +379,55 @@ PeerSettingsPane - + address-label Endereço - + copy-btn Copiar - + copied-to-clipboard-notification notification: copied to clipboard Copiado - + display-name-label Nome de Exibição - + save-btn Salvar - - + + save-peer-history Save Peer History - + save-peer-history-description - + dont-save-peer-history - + delete-btn Deletar - + block-btn @@ -435,30 +435,30 @@ ProfileAddEditPane - + copy-btn Copiar - + copied-to-clipboard-notification notification: copied to clipboard Copiado - + radio-use-password Password - + radio-no-password Unencrypted (No password) - + no-password-warning Not using a password on this account means that all data stored locally will not be encrypted @@ -475,84 +475,84 @@ - + profile-oniblon-label Send this address to peers you want to connect with - + your-display-name Your Display Name - + current-password-label Current Password - + password1-label Password - + password2-label Reenter password - + password-error-empty Passwords do not match - + create-profile-btn Create || Save - + save-profile-btn - + password-error-match - + password-change-error Error changing password: Supplied password rejected - + delete-profile-btn Delete Profile - - + + delete-confirm-label Type DELETE to confirm - + delete-profile-confirm-btn Really Delete Profile - + delete-confirm-text DELETE @@ -561,7 +561,7 @@ ProfileList - + add-new-profile-btn @@ -569,36 +569,36 @@ ProfileManagerPane - + enter-profile-password Enter a password to view your profiles - + password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password - + your-profiles Your Profiles - + your-servers Your Profiles - + unlock Unlock @@ -617,82 +617,105 @@ Zoom da interface (afeta principalmente tamanho de texto e botões) - + setting-language Language - + locale-en - + locale-fr - + locale-pt - + locale-de - + locale-es - + locale-it - + setting-interface-zoom Interface Zoom - + + medium-text-label + medium text + + + + large-text-label + large text Grande - + setting-theme Theme - + theme-light - + theme-dark - + experiments-enabled - Theme + Enable experiments - + + Text magnification reference + + + + + Acknowledgements + + + + + extra special thanks!!!! + don't translate yet... we should come up with something to write here as a team<3 + + + + version %1 tor %2 Version %1 with tor %2 - + builddate %2 Built on: %2 @@ -703,8 +726,9 @@ Texto tamanho padrão (fator de escala: - + small-text-label + small text Pequeno @@ -747,7 +771,7 @@ main - + new-connection-pane-title New Connection diff --git a/qml/main.qml b/qml/main.qml index 5cde6080..8d735914 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -5,7 +5,7 @@ import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 -import "opaque" +import "opaque" as Opaque import "opaque/fonts" import "opaque/fonts/MutantStandard.js" as Mutant import "opaque/theme" @@ -17,7 +17,7 @@ import "utils.js" as Utils ApplicationWindow { id: windowItem - width: 1200 + width: 600 + Theme.scale * 200 height: 800 visible: true title: "cwtch" + "" @@ -26,7 +26,7 @@ ApplicationWindow { readonly property real ratio: height / width - FontAwesome { // PRETTY BUTTON ICONS + Opaque.FontAwesome { // PRETTY BUTTON ICONS id: awesome resource: "qrc:/qml/opaque/fonts/fontawesome.ttf" } @@ -40,17 +40,17 @@ ApplicationWindow { retText = retText.replace(/\n/g,"
").replace(/\s\s/g, "  ") // mutant standard stickers - if (isntEditable) retText = Mutant.standard.parse(retText, 1.5 * gcd.themeScale * Theme.chatSize) + if (isntEditable) retText = Mutant.standard.parse(retText, ptToPx(Theme.chatSize)) return retText } function ptToPx(pt) { - return Screen.pixelDensity * 25.4 * pt / 72 + return Math.floor(Screen.pixelDensity * 25.4 * pt / 72) } function pxToPt(px) { - return px * 72 / (Screen.pixelDensity * 25.4) + return Math.floor(px * 72 / (Screen.pixelDensity * 25.4)) } StackView { @@ -94,10 +94,13 @@ ApplicationWindow { // The actual app property Item mainLayout: Rectangle { + Layout.fillWidth: true + Layout.fillHeight: true color: Theme.backgroundMainColor - Toolbar { + Opaque.Toolbar { id: toolbar + rightPaneWidth: theStack.width onLeftMenu: { gcd.requestSettings() @@ -186,17 +189,16 @@ ApplicationWindow { Rectangle { // THE LEFT PANE WITH TOOLS AND CONTACTS color: Theme.backgroundMainColor Layout.fillHeight: true - Layout.minimumWidth: Theme.sidePaneMinSize * gcd.themeScale - Layout.maximumWidth: theStack.pane == theStack.emptyPane ? parent.width : (Theme.sidePaneMinSize * gcd.themeScale) + Layout.minimumWidth: Theme.sidePaneMinSize + Layout.maximumWidth: theStack.pane == theStack.emptyPane ? parent.width : Theme.sidePaneMinSize Layout.fillWidth: theStack.pane == theStack.emptyPane ? true : false - visible: (windowItem.width >= (Theme.doublePaneMinSize * gcd.themeScale) && !Qt.inputMethod.visible) || theStack.pane == theStack.emptyPane + visible: (windowItem.width >= Theme.doublePaneMinSize && !Qt.inputMethod.visible) || theStack.pane == theStack.emptyPane ContactList { anchors.top: parent.top anchors.left: parent.left anchors.bottom: parent.bottom anchors.right: (divider.visible ? divider.left : parent.right) - //anchors.topMargin: 10 * gcd.themeScale dualPane: theStack.pane != theStack.emptyPane || theStack.pane == undefined } @@ -204,7 +206,7 @@ ApplicationWindow { id: divider width: 2 anchors.right: parent.right - height: parent.height - (20 * gcd.themeScale) + height: parent.height - 2 * Theme.paddingStandard anchors.verticalCenter: parent.verticalCenter visible: theStack.pane != theStack.emptyPane //Layout.fillHeight: true @@ -230,7 +232,10 @@ ApplicationWindow { readonly property int addPeerGroupPane: 4 readonly property int serverInfoPane: 5 - Item { anchors.fill: parent } // empty + Item { // empty + Layout.fillWidth: true + Layout.fillHeight: true + } Rectangle { color: Theme.backgroundMainColor @@ -238,21 +243,32 @@ ApplicationWindow { Layout.fillHeight: true OverlayPane { // messagePane anchors.fill: parent - anchors.topMargin: 10// * gcd.themeScale + anchors.topMargin: Theme.paddingSmall } } - PeerSettingsPane { anchors.fill: parent } + PeerSettingsPane { + Layout.fillWidth: true + Layout.fillHeight: true + } - GroupSettingsPane{ anchors.fill: parent } + GroupSettingsPane{ + Layout.fillWidth: true + Layout.fillHeight: true + } AddPeerGroupPane { id: addPeerGroupPaneInstance - anchors.fill: parent + Layout.fillWidth: true + Layout.fillHeight: true + } - ServerInfoPane { anchors.fill: parent } + ServerInfoPane { + Layout.fillWidth: true + Layout.fillHeight: true + } onCurrentIndexChanged: { gcd.setProfilePaneState(theStack.currentIndex) @@ -267,8 +283,6 @@ ApplicationWindow { addPeerGroupPaneInstance.reset() } } - - onWidthChanged: {toolbar.titleWidth = width} } } } @@ -384,19 +398,18 @@ ApplicationWindow { anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter anchors.topMargin: 20 - width: lblPopup.width + 30 - height: lblPopup.height + 8 * gcd.themeScale + width: lblPopup.width + 2 * gcd.paddingStandard + height: lblPopup.height + 2 * gcd.paddingStandard color: "#000000" opacity: 0.5 radius: 15 visible: false - Label { + Opaque.Label { id: lblPopup anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter - font.pixelSize: 18 * gcd.themeScale color: "#FFFFFF" } } diff --git a/qml/opaque b/qml/opaque index ae63ff95..10123e56 160000 --- a/qml/opaque +++ b/qml/opaque @@ -1 +1 @@ -Subproject commit ae63ff95aff88938558ba7f2b3ec8152ab639e5a +Subproject commit 10123e56a6a6d251c0ff707e793de857250d7ad4 diff --git a/qml/overlays/BulletinOverlay.qml b/qml/overlays/BulletinOverlay.qml index a1230854..b14c4314 100644 --- a/qml/overlays/BulletinOverlay.qml +++ b/qml/overlays/BulletinOverlay.qml @@ -14,6 +14,7 @@ import "../utils.js" as Utils ColumnLayout { Layout.fillWidth: true width:parent.width + Layout.margins: Theme.paddingStandard Text { Layout.fillWidth: true @@ -26,10 +27,7 @@ ColumnLayout { style: CwtchTextFieldStyle{} - anchors.left: parent.left - anchors.right: parent.right - - anchors.margins: 10 + width: parent.width - 2 * parent.padding onTextChanged: { bulletinView.filter = text @@ -247,8 +245,7 @@ ColumnLayout { id: btnSend icon: "regular/paper-plane" text: "post" - anchors.right: parent.right - anchors.rightMargin: 2 + Layout.alignment: Qt.AlignRight property int nextMessageID: 1 diff --git a/qml/overlays/ChatOverlay.qml b/qml/overlays/ChatOverlay.qml index 76539d95..dd48c9a6 100644 --- a/qml/overlays/ChatOverlay.qml +++ b/qml/overlays/ChatOverlay.qml @@ -16,8 +16,6 @@ W.Overlay { property bool loading property string historyState: "DefaultDeleteHistory" - //horizontalPadding: 15 * gcd.themeScale - Connections { target: mm onRowsInserted: { @@ -137,7 +135,7 @@ W.Overlay { property string txt: section color: Theme.backgroundMainColor width: parent.width - height: texmet.height + 6 + 12// * gcd.themeScale + height: texmet.height + 6 + 2 * Theme.paddingSmall anchors.horizontalCenter: parent.horizontalCenter @@ -156,7 +154,7 @@ W.Overlay { // ... and this can be changed to // text: parent.parent.section text: parent.parent.txt - font.pixelSize: Theme.chatSize * gcd.themeScale + font.pointSize: Theme.textSmallPt color: Theme.messageFromOtherTextColor anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter @@ -165,7 +163,7 @@ W.Overlay { TextMetrics { id: texmet text: txtDate.text - font.pixelSize: Theme.chatSize * gcd.themeScale + font: txtDate.font } } } diff --git a/qml/overlays/ListOverlay.qml b/qml/overlays/ListOverlay.qml index 47334736..e0094cb5 100644 --- a/qml/overlays/ListOverlay.qml +++ b/qml/overlays/ListOverlay.qml @@ -11,72 +11,77 @@ import "../opaque/controls" as Awesome import "../utils.js" as Utils import "../opaque/styles" import "../opaque/theme" +import "../widgets" as W ColumnLayout { + id: listpanel Layout.fillWidth: true width:parent.width - id: listpanel + // todo: margins don't seem to be getting applied to search/additem textboxes? not sure why + Layout.margins: Theme.paddingStandard + property bool online: false - Text { - Layout.fillWidth: true - } - Opaque.IconTextField { - id: filter - visible:listpanel.online - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: 10 + Item { + width: 1 + height: Theme.paddingStandard + } - //: ex: "Find..." - placeholderText: qsTr("search-list") - horizontalAlignment: TextInput.AlignHCenter - icon: gcd.assetPath + "core/search-24px.webp" + Opaque.IconTextField { + id: filter + visible:listpanel.online + Layout.fillWidth: true + + //: ex: "Find..." + placeholderText: qsTr("search-list") + horizontalAlignment: TextInput.AlignHCenter + icon: gcd.assetPath + "core/search-24px.webp" - onTextChanged: { - listView.filter = text - if (listView.model.get(listView.currentIndex).title.indexOf(text) == -1) { - listView.currentIndex = -1 - } - } - } + onTextChanged: { + listView.filter = text + if (listView.model.get(listView.currentIndex).title.indexOf(text) == -1) { + listView.currentIndex = -1 + } + } + } - Opaque.Icon { - visible:!listpanel.online - source: gcd.assetPath + "core/negative_heart_24px.webp" - iconColor: Theme.mainTextColor - backgroundColor: Theme.backgroundPaneColor - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - height: 150 - width: 150 - } - Label { - visible:!listpanel.online - color: Theme.mainTextColor - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - elide: Text.ElideRight - font.pixelSize: 18 * gcd.themeScale - text: qsTr("peer-not-online") - } + Opaque.Icon { + visible:!listpanel.online + source: gcd.assetPath + "core/negative_heart_24px.webp" + iconColor: Theme.mainTextColor + backgroundColor: Theme.backgroundPaneColor + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + height: 150 + width: 150 + } + + Opaque.Label { + visible:!listpanel.online + horizontalAlignment: Text.AlignHCenter + Layout.fillWidth: true + elide: Text.ElideRight + size: Theme.textMediumPt + text: qsTr("peer-not-online") + } - Flickable { // THE MESSAGE LIST ITSELF - id: sv - clip: true - visible:listpanel.online - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.fillHeight: true - Layout.fillWidth: true - contentWidth: parent.width - contentHeight: parent.height - boundsBehavior: Flickable.StopAtBounds - maximumFlickVelocity: 800 + Flickable { // THE MESSAGE LIST ITSELF + id: sv + clip: true + visible:listpanel.online + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + Layout.fillHeight: true + Layout.fillWidth: true + contentWidth: parent.width + contentHeight: parent.height + boundsBehavior: Flickable.StopAtBounds + maximumFlickVelocity: 800 Connections { @@ -89,145 +94,138 @@ ColumnLayout { } } - Connections { - id: cnxns2 - target: gcd + Connections { + id: cnxns2 + target: gcd - onClearMessages: function() { - jsonModel4.clear() - } + onClearMessages: function() { + jsonModel4.clear() + } - onAppendMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) { - handler(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) - } + onAppendMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) { + handler(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) + } - onPrependMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) { - handler(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) - } + onPrependMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) { + handler(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) + } - function handler(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) { - var msg - try { - msg = JSON.parse(message) - } catch (e) { - return - } - if (msg.o != 4) return + function handler(handle, from, displayName, message, image, mid, fromMe, ts, ack, error) { + var msg + try { + msg = JSON.parse(message) + } catch (e) { + return + } + if (msg.o != 4) return - if (msg.t != undefined) { - jsonModel4.insert(0,{ - "title":msg.t, - "selected":false, - "from": from, - "displayName": displayName, - "timestamp": ts, - "complete": false - }) - } + if (msg.t != undefined) { + jsonModel4.insert(0,{ + "title":msg.t, + "selected":false, + "from": from, + "displayName": displayName, + "timestamp": ts, + "complete": false + }) + } - if(msg.c != undefined) { - jsonModel4.get(msg.c).complete = true - } - } + if(msg.c != undefined) { + jsonModel4.get(msg.c).complete = true + } + } - onUpdateContactStatus: function(_handle, _status, _loading) { - if (gcd.selectedConversation == _handle) { + onUpdateContactStatus: function(_handle, _status, _loading) { + if (gcd.selectedConversation == _handle) { - // Group is Synced OR p2p is Authenticated - if ( (_handle.length == 32 && _status == 4) || (_handle.length == 56 && _status == 3) ) { - newlistitem.readOnly = false - listpanel.online = true - } else { - newlistitem.readOnly = true - listpanel.online= false - } - } - } - } + // Group is Synced OR p2p is Authenticated + if ( (_handle.length == 32 && _status == 4) || (_handle.length == 56 && _status == 3) ) { + newlistitem.readOnly = false + listpanel.online = true + } else { + newlistitem.readOnly = true + listpanel.online= false + } + } + } + } - ScrollBar.vertical: ScrollBar{ - policy: ScrollBar.AlwaysOn - } + ScrollBar.vertical: ScrollBar{ + policy: ScrollBar.AlwaysOn + } - ListView { - id: listView - anchors.left: parent.left - anchors.leftMargin: 10 - anchors.topMargin: 10 + ListView { + id: listView + anchors.left: parent.left + anchors.leftMargin: 10 + anchors.topMargin: 10 - width: parent.width - 50 - height: parent.height - 20 - orientation: Qt.Vertical - spacing: 10 - model: jsonModel4 - property string filter: "" - delegate: + width: parent.width - 50 + height: parent.height - 20 + orientation: Qt.Vertical + spacing: 10 + model: jsonModel4 + property string filter: "" + delegate: - Item { - width: parent.width - height: title.indexOf(listView.filter) >= 0 ? texttitle.height : 0 - visible: title.indexOf(listView.filter) >= 0 + Item { + width: Listview.view.width + height: title.indexOf(listView.filter) >= 0 ? texttitle.height : 0 + visible: title.indexOf(listView.filter) >= 0 - Column { - width: parent.width + Column { + width: parent.width - RowLayout { - CheckBox { - checked: complete - onClicked: { - var msg = JSON.stringify({"o":4, "c":index}) - gcd.sendMessage(msg, newlistitem.nextMessageID++) - } - } + RowLayout { + CheckBox { + checked: complete + onClicked: { + var msg = JSON.stringify({"o":4, "c":index}) + gcd.sendMessage(msg, newlistitem.nextMessageID++) + } + } - RowLayout { - Text { - id: texttitle - text: '' + Utils.htmlEscaped(title) + ' by ' + displayName + "
" + Qt.formatDateTime(new Date(timestamp*1000), "MMMM d, h:mm ap") - leftPadding: 10 - topPadding: 5 - bottomPadding:5 - color: Theme.mainTextColor - } - } - } + RowLayout { + Text { + id: texttitle + text: '' + Utils.htmlEscaped(title) + ' by ' + displayName + "
" + Qt.formatDateTime(new Date(timestamp*1000), "MMMM d, h:mm ap") + leftPadding: 10 + topPadding: 5 + bottomPadding:5 + color: Theme.mainTextColor + } + } + } - Opaque.HLine{} - } + Opaque.HLine{} + } - } + } - focus: true - ListModel { - id: jsonModel4 - } - } - } - - Opaque.ButtonTextField { - id: newlistitem - visible:listpanel.online - readOnly: false - button_text: qsTr("add-list-item-btn") - dropShadowColor: Theme.dropShadowPaneColor - property int nextMessageID: 1 - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: 10 - - onClicked: { - if (newlistitem.text != "") { - var msg = JSON.stringify({"o":4, "t":newlistitem.text}) - gcd.sendMessage(msg, nextMessageID++) - } - newlistitem.text = "" - } - - } - - Opaque.HLine{} + focus: true + ListModel { + id: jsonModel4 + } + } + } + Opaque.ButtonTextField { + id: newlistitem + visible:listpanel.online + readOnly: false + button_text: qsTr("add-list-item-btn") + dropShadowColor: Theme.dropShadowPaneColor + property int nextMessageID: 1 + Layout.fillWidth: true + onClicked: { + if (newlistitem.text != "") { + var msg = JSON.stringify({"o":4, "t":newlistitem.text}) + gcd.sendMessage(msg, nextMessageID++) + } + newlistitem.text = "" + } + } } diff --git a/qml/panes/AddPeerGroupPane.qml b/qml/panes/AddPeerGroupPane.qml index d561bf0a..83f505f7 100644 --- a/qml/panes/AddPeerGroupPane.qml +++ b/qml/panes/AddPeerGroupPane.qml @@ -27,22 +27,24 @@ Rectangle { groupAddr.text = "" onionLabel.text = gcd.selectedProfile + gcd.requestPeeredServers() + } Column { anchors.fill: parent - spacing: 25 * gcd.themeScale - leftPadding: 20 * gcd.themeScale - rightPadding: 20 * gcd.themeScale + spacing: Theme.paddingSmall + leftPadding: Theme.paddingStandard + rightPadding: Theme.paddingStandard - Opaque.ScalingLabel { + Opaque.Label { id: shareLabel anchors { left: parent.left right: parent.right } horizontalAlignment:Text.AlignHCenter - size: Theme.secondaryTextSize + size: Theme.textSmallPt wrapMode: Text.Wrap //: Send this address to peers you want to connect with @@ -54,7 +56,7 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter readOnly: true - width: parent.width - (40*gcd.themeScale) + width: parent.width - (2 * Theme.paddingStandard) button_text: qsTr("copy-btn") dropShadowColor: Theme.dropShadowPaneColor @@ -68,7 +70,7 @@ Rectangle { Rectangle { // Spacer width: 1 - height: 25 * gcd.themeScale + height: Theme.paddingStandard color: root.color } @@ -89,16 +91,16 @@ Rectangle { Column { // Add a peer Layout.fillWidth: true - leftPadding: 20 * gcd.themeScale - rightPadding: 20 * gcd.themeScale - spacing: 25 * gcd.themeScale + leftPadding: Theme.paddingStandard + rightPadding: Theme.paddingStandard + spacing: Theme.paddingSmall Opaque.UnderlineTextField { id: peerAddr backgroundColor: Theme.backgroundPaneColor - width: parent.width - (40*gcd.themeScale) + width: parent.width - (2 * Theme.paddingStandard) anchors.horizontalCenter: parent.horizontalCenter //: Address @@ -110,7 +112,7 @@ Rectangle { id: peerName backgroundColor: Theme.backgroundPaneColor - width: parent.width - (40*gcd.themeScale) + width: parent.width - (2 * Theme.paddingStandard) anchors.horizontalCenter: parent.horizontalCenter //: Name @@ -121,9 +123,9 @@ Rectangle { Column { // Create a group Layout.fillWidth: true - leftPadding: 20 * gcd.themeScale - rightPadding: 20 * gcd.themeScale - spacing: 25 * gcd.themeScale + leftPadding: Theme.paddingStandard + rightPadding: Theme.paddingStandard + spacing: Theme.paddingSmall Opaque.UnderlineTextField { @@ -131,7 +133,7 @@ Rectangle { id: groupNameCreate backgroundColor: Theme.backgroundPaneColor - width: parent.width - (40*gcd.themeScale) + width: parent.width - (2 * Theme.paddingStandard) anchors.horizontalCenter: parent.horizontalCenter //: Group Name @@ -139,24 +141,18 @@ Rectangle { } - Row { - width: parent.width - (40*gcd.themeScale) - - Column { - visible: gcd.experimentsEnabled && Utils.checkMap(gcd.experiments, "tapir-groups-experiment") - width: parent.width / 2 - Opaque.ScalingLabel { - //: Server - text: qsTr("server") - } + Column { + width: parent.width - (2 * Theme.paddingStandard) + anchors.horizontalCenter: parent.horizontalCenter + visible: gcd.experimentsEnabled && Utils.checkMap(gcd.experiments, "tapir-groups-experiment") + Opaque.Label { + //: Server + text: qsTr("server") } - - Column { - visible: gcd.experimentsEnabled && Utils.checkMap(gcd.experiments, "tapir-groups-experiment") - width: parent.width / 2 - Opaque.ScalingLabel { - //: Invitation - text: qsTr("invitation") + Opaque.ComboBox { + width:parent.width + model: ListModel { + id: cbServerList } } } @@ -164,9 +160,9 @@ Rectangle { Column { // Join a group Layout.fillWidth: true - leftPadding: 20 * gcd.themeScale - rightPadding: 20 * gcd.themeScale - spacing: 25 * gcd.themeScale + leftPadding: Theme.paddingStandard + rightPadding: Theme.paddingStandard + spacing: Theme.paddingSmall Opaque.UnderlineTextField { @@ -174,7 +170,7 @@ Rectangle { id: groupAddr backgroundColor: Theme.backgroundPaneColor - width: parent.width - (40*gcd.themeScale) + width: parent.width - (2 * Theme.paddingStandard) anchors.horizontalCenter: parent.horizontalCenter //: Address @@ -187,7 +183,7 @@ Rectangle { Rectangle { // Spacer width: 1 - height: 25 * gcd.themeScale + height: Theme.paddingStandard color: root.color } @@ -195,8 +191,6 @@ Rectangle { Opaque.Button { anchors.horizontalCenter: parent.horizontalCenter - height: 40 * gcd.themeScale - //: Add Peer | Create Group | Join Group text: tabBar.currentItem.text @@ -204,6 +198,9 @@ Rectangle { if (tabBar.currentIndex == 0) { gcd.addPeer(peerName.text, peerAddr.text) theStack.currentIndex = theStack.emptyPane + } else if (tabBar.currentIndex == 1) { + gcd.createGroup(cbServerList.get(cbServerList.selectedIndex).text, groupNameCreate.text); + theStack.currentIndex = theStack.emptyPane } else if (tabBar.currentIndex == 2) { gcd.addGroup(groupAddr.text) theStack.currentIndex = theStack.emptyPane @@ -213,4 +210,16 @@ Rectangle { } + Connections { + target: gcd + + onSupplyPeeredServers: function(servers) { + console.log("Servers are here:!" + servers); + cbServerList.clear(); + for (var i=0;i 99 ? "99+" : badge } @@ -71,16 +71,16 @@ Opaque.PortraitRow { visible: authorization == Const.auth_unknown anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: 1 * gcd.themeScale - anchors.rightMargin: 25 * gcd.themeScale - spacing: 16 * gcd.themeScale + anchors.leftMargin: Theme.paddingMinimal + anchors.rightMargin: Theme.paddingStandard + spacing: Theme.paddingSmall Opaque.Icon { source: gcd.assetPath + "core/favorite-24px.webp" iconColor: Theme.toolbarIconColor backgroundColor: rowColor - height: 18 * gcd.themeScale - width: 18 * gcd.themeScale + height: Theme.uiIconSizeS + width: Theme.uiIconSizeS onClicked: { gcd.setPeerAuthorization(handle, Const.auth_approved)} } @@ -89,10 +89,10 @@ Opaque.PortraitRow { source: gcd.assetPath + "core/delete-24px.webp" iconColor: Theme.toolbarIconColor backgroundColor: rowColor - height: 18 * gcd.themeScale - width: 18 * gcd.themeScale + height: Theme.uiIconSizeS + width: Theme.uiIconSizeS - onClicked: { console.log("approve"); gcd.setPeerAuthorization(handle, Const.auth_blocked)} + onClicked: gcd.setPeerAuthorization(handle, Const.auth_blocked) } } diff --git a/qml/widgets/ExperimentToggle.qml b/qml/widgets/ExperimentToggle.qml index a5188d64..e03ca7e2 100644 --- a/qml/widgets/ExperimentToggle.qml +++ b/qml/widgets/ExperimentToggle.qml @@ -4,21 +4,21 @@ import "../opaque/theme" import "../utils.js" as Utils Opaque.Setting { - //: Theme id: experiment - property string name; - property string experiment_id; + property string name + property string experiment_id visible: gcd.experimentsEnabled + //: [todo] label: qsTr(name) field: Opaque.ToggleSwitch { anchors.right: parent.right id: expToggle - isToggled: Utils.checkMap(gcd.experiments, experiment.experiment_id) - onToggled: function() { - let experimentsMap = Utils.buildMap(gcd.experiments); - experimentsMap[experiment.experiment_id] = expToggle.isToggled ? false : true; - gcd.experiments = experimentsMap; + checked: Utils.checkMap(gcd.experiments, experiment.experiment_id) + onCheckedChanged: function() { + let experimentsMap = Utils.buildMap(gcd.experiments) + experimentsMap[experiment.experiment_id] = checked + gcd.experiments = experimentsMap } } } diff --git a/qml/widgets/Message.qml b/qml/widgets/Message.qml index 030fb13c..441609a3 100644 --- a/qml/widgets/Message.qml +++ b/qml/widgets/Message.qml @@ -29,8 +29,6 @@ Rectangle { property string error property bool calendarEvent - property real logscale: 4 * Math.log10(gcd.themeScale + 1) - Connections { target: gcd @@ -55,7 +53,8 @@ Rectangle { visible: !fromMe && !calendarEvent - size: fromMe || calendarEvent ? 0 : Theme.contactPortraitSize * 0.5 + width: fromMe || calendarEvent ? 0 : implicitWidth * 0.5 + height: implicitHeight * 0.5 badgeVisible: false @@ -85,10 +84,10 @@ Rectangle { Rectangle { // THIS IS JUST A PRETTY MESSAGE-HOLDING RECTANGLE id: rectMessageBubble - height: (handle.visible ? handle.height : 0) + (10 * gcd.themeScale) + colMessageBubble.height + 8 - width: colMessageBubble.width + 6 + height: (handle.visible ? handle.height : 0) + colMessageBubble.height + 2 * Theme.paddingMinimal + width: colMessageBubble.width + 2 * Theme.radiusM color: fromMe ? Theme.messageFromMeBackgroundColor : (calendarEvent ? Theme.messageFromOtherBackgroundColor : Theme.messageFromOtherBackgroundColor) - radius: 15 * logscale + radius: Theme.radiusL anchors.left: fromMe ? undefined : (calendarEvent ? undefined : imgProfile.right) //parent.left anchors.right: fromMe ? (calendarEvent ? undefined : parent.right) : undefined @@ -110,7 +109,7 @@ Rectangle { color: parent.color } - Label { + Opaque.Label { id: handle visible: !fromMe && !calendarEvent @@ -118,14 +117,12 @@ Rectangle { color: Theme.messageFromOtherTextColor - elide: Text.ElideRight - width: parent.width - 20 // padding - font.pixelSize: Theme.chatSize * gcd.themeScale - font.weight: Font.Bold - font.family: Fonts.applicationFontBold.name - font.styleName: "Bold" - leftPadding: 10 * gcd.themeScale - topPadding: 10 * gcd.themeScale + multiline: false + width: parent.width - leftPadding - rightPadding // padding + size: Theme.chatSize + bold: true + leftPadding: Theme.paddingSmall + rightPadding: Theme.paddingSmall } Column { @@ -134,14 +131,12 @@ Rectangle { width: Math.max(lbl.width, ts.width + ack.width + 10) anchors.top: fromMe ? parent.top : (calendarEvent ? parent.top : handle.bottom) - anchors.topMargin: 10 * gcd.themeScale TextEdit { // this is used as a helper to calculate the message box width id: dummy visible: false - padding: 6 * gcd.themeScale - leftPadding: 10 * gcd.themeScale - font.pixelSize: gcd.themeScale * Theme.chatSize + padding: Theme.paddingSmall + font.pointSize: lbl.font.pointSize wrapMode: TextEdit.NoWrap text: lbl.text textFormat: Text.RichText @@ -149,11 +144,10 @@ Rectangle { TextEdit { // this is the actual text display id: lbl - text: parse(message, 12, true) + text: parse(message, Theme.uiEmojiSize, true) color: fromMe ? Theme.messageFromMeTextColor : Theme.messageFromOtherTextColor - padding: 6 * gcd.themeScale - leftPadding: 10 * gcd.themeScale - font.pixelSize: gcd.themeScale * Theme.chatSize + padding: Theme.paddingSmall + font.pointSize: Theme.textSmallPt selectByMouse: gcd.os != "android" readOnly: true width: Math.min(dummy.width, root.parent.width - (imgProfile.visible ? imgProfile.width : 0) - 40) @@ -166,22 +160,22 @@ Rectangle { anchors.right: parent.right visible: !calendarEvent - Opaque.ScalingLabel { // TIMESTAMP + Opaque.Label { // TIMESTAMP id: ts text: Qt.formatDateTime(new Date(root.timestamp*1000), "h:mm ap") color: fromMe ? Theme.messageFromMeTextColor : Theme.messageFromOtherTextColor - font.pixelSize: Theme.chatMetaTextSize * gcd.themeScale + size: Theme.textSmallPt rightPadding: 10 } Image { // ACKNOWLEDGEMENT ICON id: ack source: root.error != "" ? gcd.assetPath + "core/fontawesome/regular/window-close.webp" : (root.ackd ? gcd.assetPath + "core/fontawesome/regular/check-circle.webp" : gcd.assetPath + "core/fontawesome/regular/hourglass.svg") - height: Theme.chatMetaTextSize * gcd.themeScale - width: Theme.chatMetaTextSize * gcd.themeScale + height: Theme.uiIconSizeS + width: Theme.uiIconSizeS anchors.bottom: parent.bottom - sourceSize.height: Theme.chatMetaTextSize * gcd.themeScale + sourceSize.height: Theme.uiIconSizeS visible: fromMe ToolTip.visible: ma.containsMouse ToolTip.delay: 200 diff --git a/qml/widgets/MessageEditor.qml b/qml/widgets/MessageEditor.qml index 305b30be..8b275a17 100644 --- a/qml/widgets/MessageEditor.qml +++ b/qml/widgets/MessageEditor.qml @@ -58,7 +58,7 @@ ColumnLayout { Opaque.EmojiDrawer { id: emojiDrawer Layout.fillWidth: true - size: 24 * gcd.themeScale + size: Theme.uiIconSizeM onPicked: function(shortcode) { if (!txtMessage.enabled) return @@ -71,11 +71,11 @@ ColumnLayout { Layout.fillWidth: true - height: statusText.visible ? statusText.height + (4 * gcd.themeScale) : 3 * gcd.themeScale + height: statusText.visible ? statusText.height + (2 * Theme.paddingMinimal) : Theme.paddingMinimal implicitHeight: height color: Theme.dividerColor - Opaque.ScalingLabel { + Opaque.Label { id: statusText anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter @@ -85,9 +85,8 @@ ColumnLayout { wrapMode: Text.NoWrap text: "" visible: text != "" - size: Theme.chatMetaTextSize - font.family: Fonts.applicationFontRegular.name - font.styleName: "Bold" + size: Theme.textSmallPt + bold: true } } @@ -98,8 +97,8 @@ ColumnLayout { Rectangle { // MESSAGE ENTRY TEXTFIELD id: rectMessage Layout.fillWidth: true - Layout.minimumHeight: 120 * gcd.themeScale - Layout.maximumHeight: 120 * gcd.themeScale + Layout.minimumHeight: 60 + 20 * Theme.scale + Layout.maximumHeight: 60 + 20 * Theme.scale color: Theme.backgroundMainColor Opaque.Flickable { @@ -110,9 +109,9 @@ ColumnLayout { TextArea { id: txtMessage - font.pixelSize: Theme.chatSize * gcd.themeScale + font.pointSize: Theme.chatSize text: "" - padding: 6 * gcd.themeScale + padding: Theme.paddingSmall wrapMode: TextEdit.Wrap textFormat: Text.PlainText width: rectMessage.width @@ -153,7 +152,7 @@ ColumnLayout { ColumnLayout { id: colRight spacing: 0 - width: 100 * gcd.themeScale + width: Theme.uiIconSizeM + 2 * Theme.paddingStandard Layout.minimumWidth: width Layout.preferredWidth: width @@ -163,9 +162,8 @@ ColumnLayout { id: btnSend source: gcd.assetPath + "core/send-24px.webp" width: colRight.width - // floor(...) needed or else send icon won't scale properly(?!?) - height: Math.floor(50 * gcd.themeScale) - size: 36 * gcd.themeScale + height: Theme.uiIconSizeM + 2 * Theme.paddingMinimal + size: Theme.uiIconSizeM sourceWidth: size sourceHeight: size @@ -192,9 +190,9 @@ ColumnLayout { id: btnEmoji source: gcd.assetPath + "core/mood-24px.webp" - size: 25 - height: 36 * gcd.themeScale - width: 48 * gcd.themeScale + size: Theme.uiIconSizeS + height: Theme.uiIconSizeS + 2 * Theme.paddingMinimal + width: colRight.width / 2 backgroundColor: enabled ? Theme.altButtonColor : Theme.altButtonDisabledColor hilightBackgroundColor: backgroundColor @@ -207,9 +205,9 @@ ColumnLayout { id: btnAttach source: gcd.assetPath + "core/attach_file-24px.webp" - size: 25 - height: 36 * gcd.themeScale - width: 48 * gcd.themeScale + size: Theme.uiIconSizeS + height: Theme.uiIconSizeS + 2 * Theme.paddingMinimal + width: colRight.width / 2 backgroundColor: enabled ? Theme.altButtonColor : Theme.altButtonDisabledColor hilightBackgroundColor: backgroundColor diff --git a/qml/widgets/MyProfile.qml b/qml/widgets/MyProfile.qml index 232e541a..293ed73f 100644 --- a/qml/widgets/MyProfile.qml +++ b/qml/widgets/MyProfile.qml @@ -13,13 +13,13 @@ import "../opaque/theme" import "../opaque/fonts" import "../const" +// usage: needs a width Item { id: root - anchors.fill: parent - width: parent.width - height: profile.height - implicitHeight: profile.height + width: 100 + height: implicitHeight + implicitHeight: (dualPane ? 1 : 3) * Theme.contactPortraitSize + 2 * Theme.paddingStandard // + nameMetric.height property string image property string nick @@ -28,124 +28,77 @@ Item { property bool dualPane: false property bool profileOnline: false - - property real logscale: 4 * Math.log10(gcd.themeScale + 1) - - onDualPaneChanged: { realignProfile() } - - function realignProfile() { - - if (dualPane) { - profile.height = Theme.contactPortraitSize * logscale - - portrait.anchors.horizontalCenter = undefined - portrait.anchors.left = profile.left - portrait.anchors.leftMargin = 25 * logscale - - portrait.size = Theme.contactPortraitSize * logscale - - profiletype.height = Theme.badgeTextSize * gcd.themeScale - - nameRow.anchors.right = undefined - nameRow.anchors.left = portrait.right - - nameRow.anchors.top = undefined - nameRow.anchors.verticalCenter = portrait.verticalCenter - - nameCenter.anchors.horizontalCenter = undefined - nameCenter.anchors.left = nameRow.left - } else { - profile.height = (Theme.contactPortraitSize * 2 * logscale) - - portrait.anchors.left = undefined - portrait.anchors.leftMargin = undefined - portrait.anchors.horizontalCenter = profile.horizontalCenter - - portrait.size = Theme.contactPortraitSize * 1.5 - - profiletype.height = Theme.badgeTextSize * gcd.themeScale * 1.5 - - nameRow.anchors.left = profile.left - nameRow.anchors.right = profile.right - - nameRow.anchors.verticalCenter = undefined - nameRow.anchors.top = portrait.bottom - - nameCenter.anchors.left = undefined - nameCenter.anchors.horizontalCenter = nameRow.horizontalCenter - - } - } - Rectangle { - - anchors.left: parent.left - anchors.right: parent.right - width: parent.width id: profile + anchors.fill: parent color: Theme.backgroundMainColor - Opaque.Portrait { - id: portrait + Opaque.Portrait { + id: portrait + anchors.horizontalCenter: root.dualPane ? undefined : parent.horizontalCenter + //anchors.left: root.dualPane ? parent.left : undefined + anchors.bottom: root.dualPane ? undefined : parent.verticalCenter - source: root.image + source: root.image + width: (root.dualPane ? 1 : 2) * Theme.contactPortraitSize + height: width - badgeColor: Theme.portraitProfileBadgeColor - portraitBorderColor: Theme.portraitOnlineBorderColor - portraitColor: Theme.portraitOnlineBackgroundColor + badgeColor: Theme.portraitProfileBadgeColor + portraitBorderColor: Theme.portraitOnlineBorderColor + portraitColor: Theme.portraitOnlineBackgroundColor - badgeContent: Opaque.Icon {// Profle Type - id: profiletype - source: tag == "v1-userPassword" ? gcd.assetPath + "core/lock-24px.webp" : gcd.assetPath + "core/lock_open-24px.webp" - height: Theme.badgeTextSize * gcd.themeScale - width: height + badgeContent: Opaque.Icon {// Profle Type + id: profiletype + source: tag == "v1-userPassword" ? gcd.assetPath + "core/lock-24px.webp" : gcd.assetPath + "core/lock_open-24px.webp" + height: Theme.badgeTextSize + width: height - iconColor: Theme.defaultButtonTextColor - backgroundColor: portrait.badgeColor - hilightBackgroundColor: portrait.badgeColor - } - } + iconColor: Theme.defaultButtonTextColor + backgroundColor: portrait.badgeColor + hilightBackgroundColor: portrait.badgeColor + } + } - Rectangle { - id: nameRow - height: name.height - color: Theme.backgroundMainColor + Opaque.Label { + id: name + anchors.left: root.dualPane ? portrait.right : undefined + anchors.top: root.dualPane ? undefined : parent.verticalCenter + anchors.verticalCenter: root.dualPane ? portrait.verticalCenter : undefined - Rectangle { - id: nameCenter - width: name.width + addBtn.width + property real rem: parent.width - portrait.width - addBtn.width + width: root.dualPane ? Math.min(rem, nameMetric.width) : nameMetric.width + 6 + //horizontalAlignment: root.dualPane ? Text.AlignLeft : Text.AlignCenter + anchors.horizontalCenter: root.dualPane ? undefined : parent.horizontalCenter - Label { - id: name + color: Theme.portraitOnlineTextColor + multiline: false + header: true + text: root.nick + } - color: Theme.portraitOnlineTextColor - elide: Text.ElideRight - font.pixelSize: Theme.usernameSize * gcd.themeScale - font.weight: Font.Bold - font.family: Fonts.applicationFontExtraBold.name - font.styleName: "ExtraBold" - text: nick - } + TextMetrics { + id: nameMetric + font: name.font + text: root.nick + } - Opaque.Button { // Add Button - id: addBtn + Opaque.Button { // Add Button + id: addBtn - anchors.left: name.right - anchors.top: name.top - anchors.leftMargin: 10 * gcd.themeScale + anchors.left: name.right + anchors.verticalCenter: name.verticalCenter + anchors.top: name.top + anchors.leftMargin: Theme.paddingSmall - icon: "fontawesome/solid/plus" - - height: name.height - width: height - radius: width * 0.3 - onClicked: { - theStack.currentIndex = theStack.addPeerGroupPane - } - } - } - } + icon: "fontawesome/solid/plus" + height: Theme.uiIconSizeM + width: Theme.uiIconSizeM + radius: width * 0.3 + onClicked: { + theStack.currentIndex = theStack.addPeerGroupPane + } + } } function updateStatus() { @@ -182,8 +135,6 @@ Item { updateStatus() } - onResetProfile: { realignProfile() } - onTorStatusChanged: function() { updateStatus() } diff --git a/qml/widgets/Overlay.qml b/qml/widgets/Overlay.qml index 43567a0f..b5c5dae2 100644 --- a/qml/widgets/Overlay.qml +++ b/qml/widgets/Overlay.qml @@ -15,6 +15,7 @@ import "../const" Item { id: root Layout.fillWidth: true + width: parent.width property bool online: false property int state: Const.state_disconnected diff --git a/qml/widgets/ProfileList.qml b/qml/widgets/ProfileList.qml index 204a1c8d..493c86cf 100644 --- a/qml/widgets/ProfileList.qml +++ b/qml/widgets/ProfileList.qml @@ -10,14 +10,6 @@ import "../opaque/theme" ColumnLayout { id: root - MouseArea { - anchors.fill: parent - - onClicked: { - forceActiveFocus() - } - } - Opaque.Flickable { // Profile List id: sv Layout.minimumHeight: 100 @@ -122,15 +114,13 @@ ColumnLayout { badgeVisible: true badgeContent: Image { source: gcd.assetPath + "core/fontawesome/solid/plus.webp" - height: Theme.badgeTextSize * gcd.themeScale + height: Theme.uiIconSizeS width: height } badgeColor: Theme.portraitProfileBadgeColor onClicked: function(handle) { profileAddEditPane.reset(); parentStack.pane = parentStack.addEditProfilePane } } - - } } } diff --git a/qml/widgets/ProfileRow.qml b/qml/widgets/ProfileRow.qml index c2b9f5e5..48790728 100644 --- a/qml/widgets/ProfileRow.qml +++ b/qml/widgets/ProfileRow.qml @@ -36,7 +36,7 @@ RowLayout { badgeContent: Opaque.Icon {// Profle Type id: profiletype source: tag == "v1-userPassword" ? gcd.assetPath + "core/lock-24px.webp" : gcd.assetPath + "core/lock_open-24px.webp" - height: Theme.badgeTextSize * gcd.themeScale + height: Theme.uiIconSizeS width: height iconColor: Theme.defaultButtonTextColor @@ -104,19 +104,11 @@ RowLayout { hilightBackgroundColor: Theme.backgroundHilightElementColor iconColor: Theme.altTextColor - anchors.verticalCenter: parent.verticalCenter - // Layout.alignment: Qt.AlignVCenter - - height: root.height / 2 width: root.height / 2 size: root.height / 2 onClicked: editClicked(handle, displayName, tag, image) } - - - - } diff --git a/qml/widgets/ServerList.qml b/qml/widgets/ServerList.qml index 2fcb61a1..fb555d12 100644 --- a/qml/widgets/ServerList.qml +++ b/qml/widgets/ServerList.qml @@ -10,14 +10,6 @@ import "../opaque/theme" ColumnLayout { id: root - MouseArea { - anchors.fill: parent - - onClicked: { - forceActiveFocus() - } - } - Opaque.Flickable { // Profile List id: sv Layout.minimumHeight: 100 @@ -71,10 +63,6 @@ ColumnLayout { _messages: messages }) } - - onResetServerList: function() { - serversModel.clear() - } } ListModel { // Profile OBJECTS ARE STORED HERE ... @@ -116,7 +104,7 @@ ColumnLayout { badgeVisible: true badgeContent: Image { source: gcd.assetPath + "core/fontawesome/solid/plus.webp" - height: Theme.badgeTextSize * gcd.themeScale + height: Theme.uiIconSizeS width: height } badgeColor: Theme.defaultButtonColor diff --git a/qml/widgets/Statusbar.qml b/qml/widgets/Statusbar.qml index d1b60ed0..03ce203a 100644 --- a/qml/widgets/Statusbar.qml +++ b/qml/widgets/Statusbar.qml @@ -12,8 +12,8 @@ import "../const" Rectangle { id: statusbar - readonly property int openHeight: 25 - readonly property int hideHeight: 10 + readonly property int openHeight: Theme.uiIconSizeS + 2 * Theme.paddingMinimal + readonly property int hideHeight: Theme.paddingClickTarget property bool isHover: false @@ -27,9 +27,9 @@ Rectangle { opacity: 0 anchors.right: networkStatus.left anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: 5 * gcd.themeScale + anchors.rightMargin: Theme.paddingMinimal - font.pixelSize: Theme.statusTextSize * gcd.themeScale + font.pixelSize: Theme.statusTextSize } Opaque.Icon { @@ -37,9 +37,9 @@ Rectangle { opacity: 0 anchors.right: connectionStatus.left anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: 5 * gcd.themeScale - height: 18 - width: 18 + anchors.rightMargin: Theme.paddingMinimal + height: Theme.uiIconSizeS + width: Theme.uiIconSizeS } @@ -48,9 +48,9 @@ Rectangle { opacity: 0 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: 10 * gcd.themeScale - height: 18 * gcd.themeScale - width: 18 * gcd.themeScale + anchors.rightMargin: Theme.paddingSmall + height: Theme.uiIconSizeS + width: Theme.uiIconSizeS } function changeStatus() {