diff --git a/electrum/gui/qml/components/InfoTextArea.qml b/electrum/gui/qml/components/InfoTextArea.qml new file mode 100644 index 000000000..5f9d2dbec --- /dev/null +++ b/electrum/gui/qml/components/InfoTextArea.qml @@ -0,0 +1,57 @@ +import QtQuick 2.6 +import QtQuick.Layouts 1.0 +import QtQuick.Controls 2.1 +import QtQuick.Controls.Material 2.0 + +GridLayout { + property alias text: infotext.text + + enum IconStyle { + None, + Info, + Warn, + Error + } + + property int iconStyle: InfoTextArea.IconStyle.Info + + columns: 1 + rowSpacing: 0 + + Rectangle { + height: 2 + Layout.fillWidth: true + color: Qt.rgba(1,1,1,0.25) + } + + TextArea { + id: infotext + Layout.fillWidth: true + readOnly: true + rightPadding: 16 + leftPadding: 64 + wrapMode: TextInput.WordWrap + textFormat: TextEdit.RichText + background: Rectangle { + color: Qt.rgba(1,1,1,0.05) // whiten 5% + } + + Image { + source: iconStyle == InfoTextArea.IconStyle.Info ? "../../icons/info.png" : InfoTextArea.IconStyle.Warn ? "../../icons/warning.png" : InfoTextArea.IconStyle.Error ? "../../icons/expired.png" : "" + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: 16 + anchors.topMargin: 16 + height: 32 + width: 32 + fillMode: Image.PreserveAspectCrop + } + + } + + Rectangle { + height: 2 + Layout.fillWidth: true + color: Qt.rgba(0,0,0,0.25) + } +} diff --git a/electrum/gui/qml/components/Wizard.qml b/electrum/gui/qml/components/Wizard.qml index a4a4e1b74..0f2e7872e 100644 --- a/electrum/gui/qml/components/Wizard.qml +++ b/electrum/gui/qml/components/Wizard.qml @@ -129,4 +129,38 @@ Dialog { } } + header: GridLayout { + columns: 2 + rowSpacing: 0 + + Image { + source: "../../icons/electrum.png" + Layout.preferredWidth: 48 + Layout.preferredHeight: 48 + Layout.leftMargin: 12 + Layout.topMargin: 12 + Layout.bottomMargin: 12 + } + + Label { + text: title + elide: Label.ElideRight + Layout.fillWidth: true + topPadding: 24 + bottomPadding: 24 + font.bold: true + font.pixelSize: 16 + } + + Rectangle { + Layout.columnSpan: 2 + Layout.fillWidth: true + Layout.leftMargin: 4 + Layout.rightMargin: 4 + height: 1 + color: Qt.rgba(0,0,0,0.5) + } + } + + } diff --git a/electrum/gui/qml/components/WizardComponents.qml b/electrum/gui/qml/components/WizardComponents.qml index 62da140b3..7f87f6693 100644 --- a/electrum/gui/qml/components/WizardComponents.qml +++ b/electrum/gui/qml/components/WizardComponents.qml @@ -141,13 +141,10 @@ Item { width: parent.width columns: 1 - TextArea { + InfoTextArea { id: warningtext - readOnly: true Layout.fillWidth: true - wrapMode: TextInput.WordWrap - textFormat: TextEdit.RichText - background: Rectangle { color: "transparent" } + iconStyle: InfoTextArea.IconStyle.Warn } Label { text: qsTr('Your wallet generation seed is:') } TextArea { @@ -198,7 +195,7 @@ Item { property Component haveseed: Component { WizardComponent { - valid: true + valid: false onAccept: { wizard_data['seed'] = seedtext.text @@ -207,44 +204,89 @@ Item { wizard_data['seed_bip39'] = bip39cb.checked } + function checkValid() { + } + + function setSeedTypeHelpText() { + var t = { + 'Electrum': [ + qsTr('Electrum seeds are the default seed type.'), + qsTr('If you are restoring from a seed previously created by Electrum, choose this option') + ].join(' '), + 'BIP39': [ + qsTr('BIP39 seeds can be imported in Electrum, so that users can access funds locked in other wallets.'), + '

', + qsTr('However, we do not generate BIP39 seeds, because they do not meet our safety standard.'), + qsTr('BIP39 seeds do not include a version number, which compromises compatibility with future software.'), + '

', + qsTr('We do not guarantee that BIP39 imports will always be supported in Electrum.') + ].join(' '), + 'SLIP39': [ + qsTr('SLIP39 seeds can be imported in Electrum, so that users can access funds locked in other wallets.'), + '

', + qsTr('However, we do not generate SLIP39 seeds.') + ].join(' ') + } + infotext.text = t[seed_type.currentText] + } + GridLayout { width: parent.width - columns: 1 + columns: 2 - Label { text: qsTr('Enter your seed') } + Label { + text: qsTr('Seed Type') + } + ComboBox { + id: seed_type + model: ['Electrum', 'BIP39', 'SLIP39'] + onActivated: setSeedTypeHelpText() + } + InfoTextArea { + id: infotext + Layout.fillWidth: true + Layout.columnSpan: 2 + } + Label { + text: qsTr('Enter your seed') + Layout.columnSpan: 2 + } TextArea { id: seedtext wrapMode: TextInput.WordWrap Layout.fillWidth: true + Layout.columnSpan: 2 background: Rectangle { color: "transparent" border.color: Material.accentColor } leftInset: -5 rightInset: -5 + onTextChanged: { + checkValid() + } } CheckBox { id: extendcb - enabled: true + Layout.columnSpan: 2 text: qsTr('Extend seed with custom words') } TextField { id: customwordstext visible: extendcb.checked Layout.fillWidth: true + Layout.columnSpan: 2 placeholderText: qsTr('Enter your custom word(s)') echoMode: TextInput.Password } - CheckBox { - id: bip39cb - enabled: true - text: qsTr('BIP39') - } } Bitcoin { id: bitcoin } + Component.onCompleted: { + setSeedTypeHelpText() + } } } @@ -262,14 +304,11 @@ Item { width: parent.width columns: 1 - TextArea { - readOnly: true + InfoTextArea { Layout.fillWidth: true - wrapMode: TextInput.WordWrap text: qsTr('Your seed is important!') + ' ' + qsTr('If you lose your seed, your money will be permanently lost.') + ' ' + qsTr('To make sure that you have properly saved your seed, please retype it here.') - background: Rectangle { color: "transparent" } } Label { text: qsTr('Confirm your seed (re-enter)') } TextArea {