import QtQuick 2.14 import QtQuick.Controls 2.14 import QtQuick.Layouts 1.14 import StatusQ.Core 0.1 import StatusQ.Core.Theme 0.1 import StatusQ.Controls 0.1 import StatusQ.Popups 0.1 import StatusQ.Components 0.1 import StatusQ.Controls.Validators 0.1 import utils 1.0 import "../stores" import "../panels" ColumnLayout { id: advancedSection property int addAccountType: SelectGeneratedAccount.AddAccountType.GenerateNew property string derivedFromAddress: "" property string mnemonicText: "" property alias privateKey: importPrivateKeyPanel.text property string path: "" property string pathSubFix: "" property string completePath: path + "/" + pathSubFix property alias watchAddress: addressInput.text property bool isValid: addAccountType === SelectGeneratedAccount.AddAccountType.ImportSeedPhrase ? importSeedPhrasePanel.isValid : addAccountType === SelectGeneratedAccount.AddAccountType.ImportPrivateKey ? (importPrivateKeyPanel.text !== "" && importPrivateKeyPanel.valid) : addAccountType === SelectGeneratedAccount.AddAccountType.WatchOnly ? (addressInput.text !== "" && addressInput.valid) : true signal calculateDerivedPath() signal enterPressed() function reset() { //reset selectGeneratedAccount selectGeneratedAccount.resetMe() // reset privateKey importPrivateKeyPanel.resetMe() // reset importSeedPhrasePanel importSeedPhrasePanel.reset() // reset derivation path derivationPathsPanel.reset() // reset derviedAccountsList derivedAddressesPanel.reset() // reset watch only address input addressInput.text = "" addressInput.reset() } function validate() { if(addAccountType === SelectGeneratedAccount.AddAccountType.ImportSeedPhrase) { // validate mnemonic return importSeedPhrasePanel.validate() } else if(addAccountType === SelectGeneratedAccount.AddAccountType.ImportPrivateKey) { // validate privateKey return importPrivateKeyPanel.validateMe() } else if(addAccountType === SelectGeneratedAccount.AddAccountType.WatchOnly) { return addressInput.valid } return true } onPathChanged: { if(addAccountType === SelectGeneratedAccount.AddAccountType.ImportSeedPhrase) { if(importSeedPhrasePanel.isValid) { calculateDerivedPath() } } else { calculateDerivedPath() } } onDerivedFromAddressChanged: { // reset derviedAccountsList derivedAddressesPanel.reset() if(addAccountType === SelectGeneratedAccount.AddAccountType.ImportSeedPhrase) { if(importSeedPhrasePanel.isValid) { calculateDerivedPath() } } else { calculateDerivedPath() } } spacing: Style.current.padding SelectGeneratedAccount { id: selectGeneratedAccount Layout.margins: Style.current.padding Component.onCompleted: { advancedSection.addAccountType = Qt.binding(function() {return addAccountType}) advancedSection.derivedFromAddress = Qt.binding(function() {return derivedFromAddress}) } } ImportPrivateKeyPanel { id: importPrivateKeyPanel visible: advancedSection.addAccountType === SelectGeneratedAccount.AddAccountType.ImportPrivateKey && advancedSection.visible } ImportSeedPhrasePanel { id: importSeedPhrasePanel Layout.preferredWidth: parent.width Layout.preferredHeight: visible ? importSeedPhrasePanel.preferredHeight: 0 Layout.leftMargin: Style.current.padding Layout.rightMargin: Style.current.padding visible: advancedSection.addAccountType === SelectGeneratedAccount.AddAccountType.ImportSeedPhrase && advancedSection.visible onMnemonicStringChanged: { advancedSection.mnemonicText = mnemonicString if(isValid) { calculateDerivedPath() } } onEnterPressed: advancedSection.enterPressed() } StatusInput { id: addressInput visible: advancedSection.addAccountType === SelectGeneratedAccount.AddAccountType.WatchOnly && advancedSection.visible //% "Enter address..." input.placeholderText: qsTrId("enter-address...") //% "Account address" label: qsTrId("wallet-key-title") validators: [ StatusAddressValidator { //% "This needs to be a valid address (starting with 0x)" errorMessage: qsTrId("this-needs-to-be-a-valid-address-(starting-with-0x)") }, StatusMinLengthValidator { //% "You need to enter an address" errorMessage: qsTrId("you-need-to-enter-an-address") minLength: 1 } ] } RowLayout { Layout.margins: Style.current.padding Layout.preferredWidth: parent.width spacing: Style.current.bigPadding visible: advancedSection.addAccountType !== SelectGeneratedAccount.AddAccountType.ImportPrivateKey && advancedSection.addAccountType !== SelectGeneratedAccount.AddAccountType.WatchOnly DerivationPathsPanel { id: derivationPathsPanel Layout.preferredWidth: 213 Layout.alignment: Qt.AlignTop Component.onCompleted: advancedSection.path = Qt.binding(function() { return derivationPathsPanel.path}) } DerivedAddressesPanel { id: derivedAddressesPanel Layout.preferredWidth: 213 Layout.alignment: Qt.AlignTop Component.onCompleted: advancedSection.pathSubFix = Qt.binding(function() { return derivedAddressesPanel.pathSubFix}) } } }