profile delete. profile version tagging. minor qml refactor (less importing widgets directly into qml namespace)
This commit is contained in:
parent
fbecb20e05
commit
d77851a835
|
@ -4,3 +4,6 @@ const Nick = "nick"
|
|||
const LastRead = "last-read"
|
||||
const Picture = "picture"
|
||||
const DefaultPassword = "default-password"
|
||||
|
||||
const ProfileTypeV1DefaultPassword = "v1-defaultPassword"
|
||||
const ProfileTypeV1Password = "v1-userPassword"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package handlers
|
||||
|
||||
import (
|
||||
"cwtch.im/cwtch/app"
|
||||
"cwtch.im/cwtch/app/plugins"
|
||||
"cwtch.im/cwtch/event"
|
||||
"cwtch.im/ui/go/constants"
|
||||
|
@ -12,7 +13,7 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
func App(gcd *ui.GrandCentralDispatcher, subscribed chan bool, reloadingFirst bool) {
|
||||
func App(gcd *ui.GrandCentralDispatcher, subscribed chan bool, reloadingAccounts bool) {
|
||||
q := event.NewQueue()
|
||||
the.AppBus.Subscribe(event.NewPeer, q)
|
||||
the.AppBus.Subscribe(event.PeerError, q)
|
||||
|
@ -21,7 +22,6 @@ func App(gcd *ui.GrandCentralDispatcher, subscribed chan bool, reloadingFirst bo
|
|||
the.AppBus.Subscribe(event.NetworkStatus, q)
|
||||
the.AppBus.Subscribe(event.ReloadDone, q)
|
||||
subscribed <- true
|
||||
loadingV1Accounts := !reloadingFirst
|
||||
|
||||
networkOffline := false
|
||||
timeSinceLastSuccess := time.Unix(0, 0)
|
||||
|
@ -77,35 +77,24 @@ func App(gcd *ui.GrandCentralDispatcher, subscribed chan bool, reloadingFirst bo
|
|||
case event.AppError:
|
||||
|
||||
if e.Data[event.Error] == event.AppErrLoaded0 {
|
||||
|
||||
if loadingV1Accounts {
|
||||
loadingV1Accounts = false
|
||||
// TODO: only an error if other profiles are not loaded
|
||||
if len(the.CwtchApp.ListPeers()) == 0 {
|
||||
log.Infoln("couldn't load your config file. attempting to create one now")
|
||||
if gcd.Version() == "development" {
|
||||
the.CwtchApp.CreatePeer("tester", the.AppPassword)
|
||||
} else {
|
||||
the.CwtchApp.CreatePeer("alice", the.AppPassword)
|
||||
}
|
||||
}
|
||||
if reloadingAccounts {
|
||||
reloadingAccounts = false
|
||||
} else {
|
||||
gcd.ErrorLoaded0()
|
||||
}
|
||||
}
|
||||
|
||||
case event.ReloadDone:
|
||||
if the.Peer == nil {
|
||||
loadingV1Accounts = true
|
||||
reloadingAccounts = false
|
||||
if len(the.CwtchApp.ListPeers()) == 0 {
|
||||
the.CwtchApp.LoadProfiles(the.AppPassword)
|
||||
}
|
||||
case event.NewPeer:
|
||||
onion := e.Data[event.Identity]
|
||||
peer := the.CwtchApp.GetPeer(onion)
|
||||
|
||||
if loadingV1Accounts {
|
||||
the.CwtchApp.GetPeer(onion).SetAttribute(constants.DefaultPassword, "true")
|
||||
loadingV1Accounts = false
|
||||
if tag, exists := peer.GetAttribute(app.AttributeTag); !exists || tag == "" {
|
||||
peer.SetAttribute(app.AttributeTag, constants.ProfileTypeV1DefaultPassword)
|
||||
}
|
||||
|
||||
log.Infof("NewPeer for %v\n", onion)
|
||||
|
|
|
@ -9,6 +9,8 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
const ExitPeerHandlerEvent = 10000
|
||||
|
||||
func PeerHandler(onion string, uiManager ui.Manager, subscribed chan bool) {
|
||||
peer := the.CwtchApp.GetPeer(onion)
|
||||
eventBus := the.CwtchApp.GetEventBus(onion)
|
||||
|
@ -105,6 +107,10 @@ func PeerHandler(onion string, uiManager ui.Manager, subscribed chan bool) {
|
|||
log.Errorf("found group that is nil :/")
|
||||
}
|
||||
}
|
||||
case event.DeletePeer:
|
||||
log.Infof("PeerHandler got DeletePeer, SHUTTING down!\n")
|
||||
uiManager.ReloadProfiles()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
33
go/ui/gcd.go
33
go/ui/gcd.go
|
@ -37,12 +37,11 @@ type GrandCentralDispatcher struct {
|
|||
_ string `property:"selectedConversation,auto"`
|
||||
|
||||
// profile management stuff
|
||||
_ func() `signal:"Loaded"`
|
||||
_ func(handle, displayname, image string) `signal:"AddProfile"`
|
||||
_ func() `signal:"ErrorLoaded0"`
|
||||
_ func() `signal:"ResetProfile"`
|
||||
_ func() `signal:"ResetProfileList"`
|
||||
_ func(onion string) `signal:"deleteProfile"`
|
||||
_ func() `signal:"Loaded"`
|
||||
_ func(handle, displayname, image, tag string) `signal:"AddProfile"`
|
||||
_ func() `signal:"ErrorLoaded0"`
|
||||
_ func() `signal:"ResetProfile"`
|
||||
_ func() `signal:"ResetProfileList"`
|
||||
|
||||
// contact list stuff
|
||||
_ func(handle, displayName, image, server string, badge, status int, blocked bool, loading bool, lastMsgTime int) `signal:"AddContact"`
|
||||
|
@ -78,11 +77,12 @@ type GrandCentralDispatcher struct {
|
|||
_ func() `signal:"onActivate,auto"`
|
||||
_ func(locale string) `signal:"setLocale,auto"`
|
||||
// profile managemenet
|
||||
_ func(onion, nick string) `signal:"updateNick,auto"`
|
||||
_ func(handle string) `signal:"loadProfile,auto"`
|
||||
_ func(nick, password string) `signal:"createProfile,auto"`
|
||||
_ func(password string) `signal:"unlockProfiles,auto"`
|
||||
_ func() `signal:"reloadProfileList,auto"`
|
||||
_ func(onion, nick string) `signal:"updateNick,auto"`
|
||||
_ func(handle string) `signal:"loadProfile,auto"`
|
||||
_ func(nick string, defaultPass bool, password string) `signal:"createProfile,auto"`
|
||||
_ func(password string) `signal:"unlockProfiles,auto"`
|
||||
_ func() `signal:"reloadProfileList,auto"`
|
||||
_ func(onion string) `signal:"deleteProfile,auto"`
|
||||
// operating a profile
|
||||
_ func(message string, mid string) `signal:"sendMessage,auto"`
|
||||
_ func(onion string) `signal:"blockPeer,auto"`
|
||||
|
@ -619,8 +619,12 @@ func (this *GrandCentralDispatcher) loadProfile(onion string) {
|
|||
}
|
||||
}
|
||||
|
||||
func (this *GrandCentralDispatcher) createProfile(nick, password string) {
|
||||
the.CwtchApp.CreatePeer(nick, password)
|
||||
func (this *GrandCentralDispatcher) createProfile(nick string, defaultPass bool, password string) {
|
||||
if defaultPass {
|
||||
the.CwtchApp.CreateTaggedPeer(nick, the.AppPassword, constants.ProfileTypeV1DefaultPassword)
|
||||
} else {
|
||||
the.CwtchApp.CreateTaggedPeer(nick, password, constants.ProfileTypeV1Password)
|
||||
}
|
||||
}
|
||||
|
||||
func (this *GrandCentralDispatcher) reloadProfileList() {
|
||||
|
@ -632,5 +636,6 @@ func (this *GrandCentralDispatcher) reloadProfileList() {
|
|||
}
|
||||
|
||||
func (this *GrandCentralDispatcher) deleteProfile(onion string) {
|
||||
//the.CwtchApp.
|
||||
log.Infof("deleteProfile %v\n", onion)
|
||||
the.CwtchApp.DeletePeer(onion)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package ui
|
||||
|
||||
import (
|
||||
"cwtch.im/cwtch/app"
|
||||
"cwtch.im/cwtch/model"
|
||||
"cwtch.im/cwtch/protocol/connections"
|
||||
"cwtch.im/ui/go/constants"
|
||||
|
@ -122,8 +123,10 @@ func AddProfile(gcd *GrandCentralDispatcher, handle string) {
|
|||
pic = RandomProfileImage(handle)
|
||||
peer.SetAttribute(constants.Picture, pic)
|
||||
}
|
||||
log.Infof("AddProfile %v %v %v\n", handle, nick, pic)
|
||||
gcd.AddProfile(handle, nick, pic)
|
||||
|
||||
tag, _ := peer.GetAttribute(app.AttributeTag)
|
||||
log.Infof("AddProfile %v %v %v %v\n", handle, nick, pic, tag)
|
||||
gcd.AddProfile(handle, nick, pic, tag)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,6 +146,8 @@ type Manager interface {
|
|||
AddSendMessageError(peer string, signature string, err string)
|
||||
AddMessage(handle string, from string, message string, fromMe bool, messageID string, timestamp time.Time, Acknowledged bool)
|
||||
|
||||
ReloadProfiles()
|
||||
|
||||
UpdateContactDisplayName(handle string, name string)
|
||||
UpdateContactStatus(handle string, status int, loading bool)
|
||||
UpdateContactAttribute(handle, key, value string)
|
||||
|
@ -244,6 +249,10 @@ func (this *manager) AddMessage(handle string, from string, message string, from
|
|||
})
|
||||
}
|
||||
|
||||
func (this *manager) ReloadProfiles() {
|
||||
this.gcd.reloadProfileList()
|
||||
}
|
||||
|
||||
// UpdateContactDisplayName updates a contact's display name in the contact list and conversations
|
||||
func (this *manager) UpdateContactDisplayName(handle string, name string) {
|
||||
this.gcd.DoIfProfile(this.profile, func() {
|
||||
|
|
2
qml.qrc
2
qml.qrc
|
@ -29,9 +29,7 @@
|
|||
<file>qml/widgets/ScalingLabel.qml</file>
|
||||
<file>qml/widgets/SimpleButton.qml</file>
|
||||
<file>qml/widgets/StackToolbar.qml</file>
|
||||
<file>qml/widgets/controls/Button.qml</file>
|
||||
<file>qml/widgets/controls/Loader.qml</file>
|
||||
<file>qml/widgets/controls/Text.qml</file>
|
||||
<file>qml/widgets/controls/Variables.qml</file>
|
||||
<file>i18n/translation_de.qm</file>
|
||||
<file>i18n/translation_en.qm</file>
|
||||
|
|
|
@ -6,8 +6,7 @@ import QtQuick.Controls 1.4
|
|||
import QtQuick.Layouts 1.3
|
||||
|
||||
|
||||
import "../widgets"
|
||||
import "../widgets/controls" as Awesome
|
||||
import "../widgets" as Widgets
|
||||
import "../fonts/Twemoji.js" as T
|
||||
import "../utils.js" as Utils
|
||||
import "../styles"
|
||||
|
@ -176,7 +175,7 @@ ColumnLayout {
|
|||
width: parent.width - 50
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
id: replybtn
|
||||
visible: selected
|
||||
text: "reply"
|
||||
|
@ -231,7 +230,7 @@ ColumnLayout {
|
|||
}
|
||||
|
||||
|
||||
SimpleButton { // SEND MESSAGE BUTTON
|
||||
Widgets.SimpleButton { // SEND MESSAGE BUTTON
|
||||
id: btnSend
|
||||
icon: "regular/paper-plane"
|
||||
text: "post"
|
||||
|
|
|
@ -5,7 +5,7 @@ import QtQuick.Controls.Material 2.0
|
|||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import "../widgets"
|
||||
import "../widgets" as Widgets
|
||||
import "../widgets/controls" as Awesome
|
||||
import "../fonts/Twemoji.js" as T
|
||||
import "../utils.js" as Utils
|
||||
|
@ -204,7 +204,7 @@ ColumnLayout {
|
|||
style: CwtchTextFieldStyle{}
|
||||
}
|
||||
|
||||
SimpleButton { // SEND MESSAGE BUTTON
|
||||
Widgets.SimpleButton { // SEND MESSAGE BUTTON
|
||||
id: btnSend
|
||||
icon: "regular/paper-plane"
|
||||
text: "add"
|
||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Layouts 1.3
|
|||
import QtQuick.Window 2.11
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "../widgets"
|
||||
import "../widgets" as Widgets
|
||||
import "../styles"
|
||||
|
||||
ColumnLayout { // settingsPane
|
||||
|
@ -14,7 +14,7 @@ ColumnLayout { // settingsPane
|
|||
anchors.fill: parent
|
||||
|
||||
|
||||
StackToolbar {
|
||||
Widgets.StackToolbar {
|
||||
id: stb
|
||||
text: qsTr("create-group-title")
|
||||
aux.visible: false
|
||||
|
@ -37,7 +37,7 @@ ColumnLayout { // settingsPane
|
|||
spacing: 5
|
||||
width: root.width
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
//: Server label
|
||||
text: qsTr("server-label") + ":"
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ ColumnLayout { // settingsPane
|
|||
text: "2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd"
|
||||
}
|
||||
|
||||
ScalingLabel{
|
||||
Widgets.ScalingLabel{
|
||||
//: Group name label
|
||||
text: qsTr("group-name-label") + ":"
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ ColumnLayout { // settingsPane
|
|||
text: qsTr("default-group-name")
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
//: create group button
|
||||
text: qsTr("create-group-btn")
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Layouts 1.3
|
|||
import QtQuick.Window 2.11
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "../widgets"
|
||||
import "../widgets" as Widgets
|
||||
import "../styles"
|
||||
import "../utils.js" as Utils
|
||||
|
||||
|
@ -16,7 +16,7 @@ ColumnLayout { // groupSettingsPane
|
|||
property string groupID
|
||||
property variant addrbook
|
||||
|
||||
StackToolbar {
|
||||
Widgets.StackToolbar {
|
||||
id: toolbar
|
||||
aux.visible: false
|
||||
back.onClicked: theStack.pane = theStack.messagePane
|
||||
|
@ -38,7 +38,7 @@ ColumnLayout { // groupSettingsPane
|
|||
leftPadding: 10
|
||||
spacing: 5
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
text: qsTr("server-label") + ":"
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ ColumnLayout { // groupSettingsPane
|
|||
readOnly: true
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
icon: "regular/clipboard"
|
||||
text: qsTr("copy-btn")
|
||||
|
||||
|
@ -59,7 +59,7 @@ ColumnLayout { // groupSettingsPane
|
|||
}
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
text: qsTr("invitation-label") + ":"
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ ColumnLayout { // groupSettingsPane
|
|||
readOnly: true
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
icon: "regular/clipboard"
|
||||
text: qsTr("copy-btn")
|
||||
|
||||
|
@ -80,7 +80,7 @@ ColumnLayout { // groupSettingsPane
|
|||
}
|
||||
}
|
||||
|
||||
ScalingLabel{
|
||||
Widgets.ScalingLabel{
|
||||
text: qsTr("group-name-label") + ":"
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ ColumnLayout { // groupSettingsPane
|
|||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
text: qsTr("save-btn")
|
||||
|
||||
onClicked: {
|
||||
|
@ -100,7 +100,7 @@ ColumnLayout { // groupSettingsPane
|
|||
}
|
||||
|
||||
//: Invite someone to the group
|
||||
ScalingLabel { text: qsTr("invite-to-group-label") }
|
||||
Widgets.ScalingLabel { text: qsTr("invite-to-group-label") }
|
||||
|
||||
ComboBox {
|
||||
id: cbInvite
|
||||
|
@ -110,7 +110,7 @@ ColumnLayout { // groupSettingsPane
|
|||
style: CwtchComboBoxStyle{}
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
text: qsTr("invite-btn")
|
||||
|
||||
onClicked: {
|
||||
|
@ -118,7 +118,7 @@ ColumnLayout { // groupSettingsPane
|
|||
}
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
icon: "regular/trash-alt"
|
||||
text: qsTr("delete-btn")
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Layouts 1.3
|
|||
import QtQuick.Window 2.11
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "../widgets"
|
||||
import "../widgets" as Widgets
|
||||
import "../styles"
|
||||
|
||||
ColumnLayout { // peerSettingsPane
|
||||
|
@ -14,7 +14,7 @@ ColumnLayout { // peerSettingsPane
|
|||
anchors.fill: parent
|
||||
property bool blocked
|
||||
|
||||
StackToolbar {
|
||||
Widgets.StackToolbar {
|
||||
id: toolbar
|
||||
aux.visible: false
|
||||
|
||||
|
@ -38,7 +38,7 @@ ColumnLayout { // peerSettingsPane
|
|||
leftPadding: 10
|
||||
spacing: 5
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
text: qsTr("address-label")
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ ColumnLayout { // peerSettingsPane
|
|||
readOnly: true
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
icon: "regular/clipboard"
|
||||
text: qsTr("copy-btn")
|
||||
|
||||
|
@ -60,7 +60,7 @@ ColumnLayout { // peerSettingsPane
|
|||
}
|
||||
}
|
||||
|
||||
ScalingLabel{
|
||||
Widgets.ScalingLabel{
|
||||
text: qsTr("display-name-label")
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ ColumnLayout { // peerSettingsPane
|
|||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
text: qsTr("save-btn")
|
||||
|
||||
onClicked: {
|
||||
|
@ -80,7 +80,7 @@ ColumnLayout { // peerSettingsPane
|
|||
}
|
||||
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
icon: "solid/hand-paper"
|
||||
text: root.blocked ? qsTr("unblock-btn") : qsTr("block-btn")
|
||||
|
||||
|
@ -94,7 +94,7 @@ ColumnLayout { // peerSettingsPane
|
|||
}
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
icon: "regular/trash-alt"
|
||||
text: qsTr("delete-btn")
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import QtGraphicalEffects 1.0
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Controls 2.13
|
||||
import QtQuick.Controls.Material 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Window 2.11
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "../widgets"
|
||||
import "../styles"
|
||||
|
||||
import "../widgets" as Widgets
|
||||
// import "../styles"
|
||||
|
||||
ColumnLayout { // Add Profile Pane
|
||||
id: profileAddEditPane
|
||||
|
@ -15,7 +15,7 @@ ColumnLayout { // Add Profile Pane
|
|||
|
||||
property string mode // edit or add
|
||||
|
||||
StackToolbar {
|
||||
Widgets.StackToolbar {
|
||||
id: stb
|
||||
text: mode == "add" ? qsTr("add-profile-title") : qsTr("edit-profile-title")
|
||||
aux.visible: false
|
||||
|
@ -28,6 +28,7 @@ ColumnLayout { // Add Profile Pane
|
|||
txtPassword1.text = ""
|
||||
txtPassword2.text = ""
|
||||
deleteReset()
|
||||
radioUsePassword.checked = true
|
||||
}
|
||||
|
||||
function load(onion, name, pass) {
|
||||
|
@ -64,59 +65,90 @@ ColumnLayout { // Add Profile Pane
|
|||
spacing: 5
|
||||
width: profileAddEditPane.width
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
//: Onion
|
||||
text: qsTr("profile-onion-label") + ":"
|
||||
visible: mode == "edit"
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
id: onionLabel
|
||||
visible: mode == "edit"
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
//: Display name
|
||||
text: qsTr("profile-name") + ":"
|
||||
}
|
||||
|
||||
TextField {
|
||||
Widgets.TextField {
|
||||
id: txtProfileName
|
||||
Layout.fillWidth: true
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
//: default suggested profile name
|
||||
text: qsTr("default-profile-name")
|
||||
|
||||
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
RowLayout {
|
||||
//id: radioButtons
|
||||
|
||||
Widgets.RadioButton {
|
||||
id: radioUsePassword
|
||||
checked: true
|
||||
//: Password
|
||||
text: qsTr("radio-use-password")
|
||||
}
|
||||
|
||||
Widgets.RadioButton {
|
||||
id: radioNoPassword
|
||||
//: Unencrypted (No password)
|
||||
text: qsTr("radio-no-password")
|
||||
}
|
||||
}
|
||||
|
||||
Widgets.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 {
|
||||
id: passwordLabel
|
||||
//: Password
|
||||
text: qsTr("password1-label") + ":"
|
||||
visible: radioUsePassword.checked
|
||||
}
|
||||
|
||||
TextField {
|
||||
Widgets.TextField {
|
||||
id: txtPassword1
|
||||
Layout.fillWidth: true
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
echoMode: TextInput.Password
|
||||
readOnly: mode == "edit"
|
||||
visible: radioUsePassword.checked
|
||||
}
|
||||
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
id: passwordReLabel
|
||||
//: Reenter password
|
||||
text: qsTr("password2-label") + ":"
|
||||
visible: radioUsePassword.checked
|
||||
}
|
||||
|
||||
TextField {
|
||||
Widgets.TextField {
|
||||
id: txtPassword2
|
||||
Layout.fillWidth: true
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
echoMode: TextInput.Password
|
||||
readOnly: mode == "edit"
|
||||
|
||||
visible: radioUsePassword.checked
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
//: Create Profile || Save Profile
|
||||
text: mode == "add" ? qsTr("create-profile-btn") : qsTr("save-profile-btn")
|
||||
|
||||
|
@ -125,7 +157,7 @@ ColumnLayout { // Add Profile Pane
|
|||
passwordErrorLabel.visible = true
|
||||
} else {
|
||||
if (mode == "add") {
|
||||
gcd.createProfile(txtProfileName.text, txtPassword1.text)
|
||||
gcd.createProfile(txtProfileName.text, radioNoPassword .checked, txtPassword1.text)
|
||||
} else {
|
||||
gcd.updateNick(onionLabel.text, txtProfileName.text)
|
||||
}
|
||||
|
@ -135,7 +167,7 @@ ColumnLayout { // Add Profile Pane
|
|||
}
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
id: passwordErrorLabel
|
||||
//: Passwords do not match
|
||||
text: qsTr("password-error-match")
|
||||
|
@ -143,7 +175,7 @@ ColumnLayout { // Add Profile Pane
|
|||
color: "red"
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
//: Delete Profile
|
||||
text: qsTr("delete-profile-btn")
|
||||
icon: "regular/trash-alt"
|
||||
|
@ -158,21 +190,21 @@ ColumnLayout { // Add Profile Pane
|
|||
}
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
id: deleteConfirmLabel
|
||||
//: Type DELETE to confirm
|
||||
text: qsTr("delete-confirm-label")+ ":"
|
||||
visible: false
|
||||
}
|
||||
|
||||
TextField {
|
||||
Widgets.TextField {
|
||||
id: confirmDeleteTxt
|
||||
Layout.fillWidth: true
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
//style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
visible: false
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
id: confirmDeleteBtn
|
||||
icon: "regular/trash-alt"
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import QtQuick.Window 2.11
|
|||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import "../widgets"
|
||||
import "../widgets" as Widgets
|
||||
import "../widgets/controls"
|
||||
import "../styles"
|
||||
|
||||
|
@ -19,7 +19,7 @@ ColumnLayout {
|
|||
//leftPadding: 10
|
||||
//spacing: 5
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
wrapMode: TextEdit.Wrap
|
||||
//: Please enter password:
|
||||
|
@ -33,7 +33,7 @@ ColumnLayout {
|
|||
echoMode: TextInput.Password
|
||||
}
|
||||
|
||||
ScalingLabel {
|
||||
Widgets.ScalingLabel {
|
||||
id: error
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: "red"
|
||||
|
@ -42,7 +42,7 @@ ColumnLayout {
|
|||
visible: false
|
||||
}
|
||||
|
||||
SimpleButton {
|
||||
Widgets.SimpleButton {
|
||||
id: "button"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
|
@ -75,7 +75,7 @@ ColumnLayout {
|
|||
Layout.minimumWidth: Layout.maximumWidth
|
||||
//Layout.maximumWidth: theStack.pane == theStack.emptyPane ? parent.width : 450
|
||||
|
||||
ProfileList {
|
||||
Widgets.ProfileList {
|
||||
anchors.fill: parent
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ Item { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
|
|||
property bool isHover
|
||||
property bool background: true
|
||||
property string type // profile or contact or button
|
||||
property string tag // profile version/type
|
||||
|
||||
// Profile
|
||||
property bool defaultPassword
|
||||
|
@ -114,6 +115,22 @@ Item { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
|
|||
|
||||
// Profile
|
||||
|
||||
Image {// Profle Type
|
||||
id: profiletype
|
||||
|
||||
source: tag == "v1-userPassword" ? "qrc:/qml/images/fontawesome/solid/lock.svg" : "qrc:/qml/images/fontawesome/solid/lock-open.svg"
|
||||
|
||||
anchors.right: parent.right
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.leftMargin: 1 * gcd.themeScale
|
||||
anchors.rightMargin: (20 * gcd.themeScale) + parent.height
|
||||
height: parent.height * 0.5
|
||||
width: height
|
||||
|
||||
visible: type == "profile"
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Contact
|
||||
|
|
|
@ -41,7 +41,7 @@ ColumnLayout {
|
|||
Connections { // ADD/REMOVE CONTACT ENTRIES
|
||||
target: gcd
|
||||
|
||||
onAddProfile: function(handle, displayName, image) {
|
||||
onAddProfile: function(handle, displayName, image, tag) {
|
||||
|
||||
console.log("ProfileList onAddProfile for: " + handle)
|
||||
for (var i = 0; i < profilesModel.count; i++) {
|
||||
|
@ -55,7 +55,8 @@ ColumnLayout {
|
|||
"_handle": handle,
|
||||
"_displayName": displayName,
|
||||
"_image": image,
|
||||
"_type": "profile"
|
||||
"_type": "profile",
|
||||
"_tag": tag
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -77,6 +78,7 @@ ColumnLayout {
|
|||
_displayName: qsTr("add-new-profile-btn"),
|
||||
_image: "qrc:/qml/images/fontawesome/solid/user-plus.svg",
|
||||
_type: "button",
|
||||
_tag: ","
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -89,6 +91,7 @@ ColumnLayout {
|
|||
_displayName: qsTr("add-new-profile-btn")
|
||||
_image: "qrc:/qml/images/fontawesome/solid/user-plus.svg"
|
||||
_type: "button"
|
||||
_tag: ""
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,6 +107,7 @@ ColumnLayout {
|
|||
blocked: false
|
||||
loading: false
|
||||
type: _type
|
||||
tag: _tag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@ import QtQuick.Controls 2.4
|
|||
import QtQuick.Controls.Material 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import "controls" as Awesome
|
||||
import "../fonts/Twemoji.js" as T
|
||||
|
||||
Rectangle {
|
||||
|
|
|
@ -4,7 +4,6 @@ import QtQuick.Controls 2.4
|
|||
import QtQuick.Controls.Material 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import "controls" as Awesome
|
||||
import "../fonts/Twemoji.js" as T
|
||||
|
||||
Rectangle { // OVERHEAD BAR ON STACK PANE
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
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
|
||||
}
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.0
|
||||
import QtQuick.Controls.Styles 1.0
|
||||
import QtQuick.Layouts 1.0
|
||||
|
||||
Button {
|
||||
id: button
|
||||
property string icon
|
||||
property color color: "black"
|
||||
property font font
|
||||
|
||||
style: ButtonStyle {
|
||||
id: buttonstyle
|
||||
property font font: button.font
|
||||
property color foregroundColor: button.color
|
||||
|
||||
background: Item {
|
||||
Rectangle {
|
||||
id: baserect
|
||||
anchors.fill: parent
|
||||
color: "transparent"
|
||||
}
|
||||
}
|
||||
|
||||
label: Item {
|
||||
implicitWidth: row.implicitWidth
|
||||
implicitHeight: row.implicitHeight
|
||||
|
||||
RowLayout {
|
||||
id: row
|
||||
anchors.centerIn: parent
|
||||
spacing: 15
|
||||
|
||||
Text {
|
||||
color: buttonstyle.foregroundColor
|
||||
font.pointSize: buttonstyle.font.pointSize * 2
|
||||
font.family: awesome.family
|
||||
renderType: Text.NativeRendering
|
||||
text: awesome.loaded ? icon : ""
|
||||
visible: !(icon === "")
|
||||
}
|
||||
Text {
|
||||
color: buttonstyle.foregroundColor
|
||||
font: buttonstyle.font
|
||||
renderType: Text.NativeRendering
|
||||
text: control.text
|
||||
visible: !(control.text === "")
|
||||
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,61 +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 QtQuick.Controls 1.0
|
||||
import QtQuick.Layouts 1.0
|
||||
|
||||
Text {
|
||||
id: root
|
||||
|
||||
property alias spacing: row.spacing
|
||||
property alias text: content.text
|
||||
property color color: "black"
|
||||
property font font
|
||||
property string icon
|
||||
|
||||
RowLayout {
|
||||
id: row
|
||||
|
||||
Text {
|
||||
color: root.color
|
||||
font.pointSize: root.font.pointSize
|
||||
font.family: awesome.family
|
||||
renderType: Text.NativeRendering
|
||||
text: awesome.loaded ? icon : ""
|
||||
}
|
||||
|
||||
Text {
|
||||
id: content
|
||||
color: root.color
|
||||
font.pointSize: root.font.pointSize
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue