]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
add InfoFrame component
authortobtoht <tob@featherwallet.org>
Fri, 15 Sep 2023 12:29:58 +0000 (14:29 +0200)
committertobtoht <tob@featherwallet.org>
Thu, 26 Oct 2023 20:12:23 +0000 (22:12 +0200)
src/components.cpp
src/components.h
src/wizard/PageSetPassword.cpp
src/wizard/PageSetPassword.ui
src/wizard/PageSetRestoreHeight.cpp
src/wizard/PageSetRestoreHeight.ui
src/wizard/PageWalletFile.cpp
src/wizard/PageWalletFile.ui
src/wizard/PageWalletSeed.cpp
src/wizard/PageWalletSeed.ui

index 54c685adb1679f6fbed2b865bc41dfd4f5263d6e..6da1a23d2195b32e46ede6644541a20f2fe698df 100644 (file)
@@ -84,4 +84,41 @@ WindowModalDialog::WindowModalDialog(QWidget *parent)
 #ifndef Q_OS_MACOS
     this->setWindowModality(Qt::WindowModal);
 #endif
+}
+
+InfoFrame::InfoFrame(QWidget *parent)
+    : QFrame(parent)
+{
+  auto *layout = new QHBoxLayout(this);
+
+  m_icon = new QPushButton(this);
+  m_icon->setFlat(true);
+  m_icon->setIconSize(QSize(32, 32));
+  m_icon->setMaximumSize(32, 32);
+  m_icon->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+  layout->addWidget(m_icon);
+
+  auto *spacer = new QSpacerItem(5, 0, QSizePolicy::Fixed, QSizePolicy::Minimum);
+  layout->addSpacerItem(spacer);
+
+  m_infoLabel = new QLabel(this);
+  m_infoLabel->setWordWrap(true);
+  m_infoLabel->setTextFormat(Qt::MarkdownText);
+  m_infoLabel->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse);
+  layout->addWidget(m_infoLabel);
+}
+
+void InfoFrame::setInfo(const QIcon &icon, const QString &text) {
+  m_icon->setIcon(icon);
+  m_infoLabel->setText(text);
+
+#ifdef Q_OS_MACOS
+  this->setFrameShape(QFrame::Box);
+#else
+  this->setFrameShape(QFrame::StyledPanel);
+#endif
+}
+
+void InfoFrame::setText(const QString &text) {
+  m_infoLabel->setText(text);
 }
\ No newline at end of file
index 851cdf3221276fa82ef8c93c85cd0555524f0667..e00a7e82eeea95ffba7ba943a560173f2cc9defc 100644 (file)
@@ -80,4 +80,17 @@ public:
     explicit WindowModalDialog(QWidget *parent);
 };
 
+class InfoFrame : public QFrame {
+    Q_OBJECT
+
+public:
+    explicit InfoFrame(QWidget *parent);
+    void setInfo(const QIcon &icon, const QString &text);
+    void setText(const QString &text);
+
+private:
+    QPushButton *m_icon;
+    QLabel *m_infoLabel;
+};
+
 #endif //FEATHER_COMPONENTS_H
index 2d8a110152df2061bc38bac78511e8a184d9ad27..726cfcb275686e9ad681b8d99260b7d89d38599d 100644 (file)
@@ -5,6 +5,8 @@
 #include "ui_PageSetPassword.h"
 #include "WalletWizard.h"
 
+#include "utils/Icons.h"
+
 PageSetPassword::PageSetPassword(WizardFields *fields, QWidget *parent)
     : QWizardPage(parent)
     , ui(new Ui::PageSetPassword)
@@ -13,8 +15,7 @@ PageSetPassword::PageSetPassword(WizardFields *fields, QWidget *parent)
     ui->setupUi(this);
     this->setFinalPage(true);
 
-    QPixmap pixmap = QPixmap(":/assets/images/lock.svg");
-    ui->icon->setPixmap(pixmap.scaledToWidth(32, Qt::SmoothTransformation));
+    ui->frame_password->setInfo(icons()->icon("lock"), "Choose a password to encrypt your wallet keys.");
 
     connect(ui->line_password, &QLineEdit::textChanged, [this]{
         this->completeChanged();
index 66da66ae9ccb1912ade7e5c985703fc41acdfed7..b9175d3ab32fe8ff0e9ef87276cd2a078cfd9eaa 100644 (file)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>431</width>
-    <height>231</height>
+    <height>232</height>
    </rect>
   </property>
   <property name="windowTitle">
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QFrame" name="frame">
+    <widget class="InfoFrame" name="frame_password">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_2">
-      <item>
-       <widget class="QLabel" name="icon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>TextLabel</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>Choose a password to encrypt your wallet keys.</string>
-        </property>
-        <property name="wordWrap">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
     </widget>
    </item>
    <item>
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>InfoFrame</class>
+   <extends>QFrame</extends>
+   <header>components.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>
index 25fd77bec43cd1344a409dddd6ced1b805065105..55d02ac04c9a204dd93628d6497589dedf682357 100644 (file)
@@ -7,6 +7,8 @@
 #include "WalletWizard.h"
 #include "constants.h"
 
+#include "utils/Icons.h"
+
 PageSetRestoreHeight::PageSetRestoreHeight(WizardFields *fields, QWidget *parent)
         : QWizardPage(parent)
         , ui(new Ui::PageSetRestoreHeight)
@@ -14,6 +16,10 @@ PageSetRestoreHeight::PageSetRestoreHeight(WizardFields *fields, QWidget *parent
 {
     ui->setupUi(this);
 
+    ui->frame_restoreHeight->setInfo(icons()->icon("unpaid"), "Enter the wallet creation date or set the restore height manually.");
+    ui->frame_walletAgeWarning->setInfo(icons()->icon("info2"), "Wallet is very old. Synchronization may take a long time.");
+    ui->frame_scanWarning->setInfo(icons()->icon("info2"), "Wallet will not scan for transactions before YYYY/MM/DD.");
+
     QRegularExpression yearRe(R"(\d{2,4}-\d{1,2}-\d{1,2})");
     QValidator *yearValidator = new QRegularExpressionValidator(yearRe, this);
     ui->line_creationDate->setValidator(yearValidator);
@@ -22,13 +28,6 @@ PageSetRestoreHeight::PageSetRestoreHeight(WizardFields *fields, QWidget *parent
     QValidator *heightValidator = new QRegularExpressionValidator(heightRe, this);
     ui->line_restoreHeight->setValidator(heightValidator);
 
-    QPixmap pixmap = QPixmap(":/assets/images/unpaid.png");
-    ui->icon->setPixmap(pixmap.scaledToWidth(32, Qt::SmoothTransformation));
-
-    QPixmap pixmap2 = QPixmap(":/assets/images/info2.svg");
-    ui->warningIcon->setPixmap(pixmap2.scaledToWidth(32, Qt::SmoothTransformation));
-    ui->infoIcon->setPixmap(pixmap2.scaledToWidth(32, Qt::SmoothTransformation));
-
     connect(ui->line_creationDate, &QLineEdit::textEdited, [this]{
         this->onCreationDateEdited();
         this->completeChanged();
@@ -88,7 +87,7 @@ void PageSetRestoreHeight::onRestoreHeightEdited() {
 
 void PageSetRestoreHeight::showScanWarning(const QDateTime &date) {
     QString dateString = date.toString("MMMM dd, yyyy");
-    ui->label_scanWarning->setText(QString("Wallet will not scan for transactions before %1").arg(dateString));
+    ui->frame_scanWarning->setText(QString("Wallet will not scan for transactions before %1").arg(dateString));
     ui->frame_scanWarning->show();
 }
 
index 52be4444fd8f44bc926b0c6e6e975f3ff60c3f0e..da165b1f9806846e6608b71ba4b088547e86d4ab 100644 (file)
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QFrame" name="frame">
+    <widget class="InfoFrame" name="frame_restoreHeight">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <item>
-       <widget class="QLabel" name="icon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
-         <widget class="QLabel" name="label_2">
-          <property name="text">
-           <string>Enter the wallet creation date or set the restore height manually.</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
     </widget>
    </item>
    <item>
     </spacer>
    </item>
    <item>
-    <widget class="QFrame" name="frame_walletAgeWarning">
+    <widget class="InfoFrame" name="frame_walletAgeWarning">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_4">
-      <item>
-       <widget class="QLabel" name="infoIcon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer_4">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_7">
-        <property name="text">
-         <string>Wallet is very old. Synchronization may take a long time.</string>
-        </property>
-        <property name="wordWrap">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
     </widget>
    </item>
    <item>
-    <widget class="QFrame" name="frame_scanWarning">
+    <widget class="InfoFrame" name="frame_scanWarning">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_3">
-      <item>
-       <widget class="QLabel" name="warningIcon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer_3">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_scanWarning">
-        <property name="text">
-         <string>Wallet will not scan for transactions before YYYY/MM/DD.</string>
-        </property>
-        <property name="wordWrap">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
     </widget>
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>InfoFrame</class>
+   <extends>QFrame</extends>
+   <header>components.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>
index 1b5b18ce9e2e1eb7e799c9bc6d2d743a30c4df91..6acc60c48f5df1f661c7b3991dfdc3d3e88cd162 100644 (file)
@@ -5,10 +5,11 @@
 #include "PageWalletFile.h"
 #include "ui_PageWalletFile.h"
 
-#include "utils/Utils.h"
-
 #include <QFileDialog>
 
+#include "utils/Icons.h"
+#include "utils/Utils.h"
+
 PageWalletFile::PageWalletFile(WizardFields *fields, QWidget *parent)
     : QWizardPage(parent)
     , ui(new Ui::PageWalletFile)
@@ -17,8 +18,7 @@ PageWalletFile::PageWalletFile(WizardFields *fields, QWidget *parent)
     ui->setupUi(this);
     this->setButtonText(QWizard::FinishButton, "Open wallet");
 
-    QPixmap pixmap = QPixmap(":/assets/images/file.png");
-    ui->lockIcon->setPixmap(pixmap.scaledToWidth(32, Qt::SmoothTransformation));
+    ui->frame_wallet->setInfo(icons()->icon("file"), "Choose a name and directory for your wallet files.");
 
     connect(ui->btnChange, &QPushButton::clicked, [=] {
         QString currentWalletDir = conf()->get(Config::walletDirectory).toString();
index c4e2807a4b4145680a8d8231d99ad0b6d08dcf70..30ab81cd31b6fcf29bcf2b1da1b7e0920629f7a0 100644 (file)
    <string>Create Wallet</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
+   <item row="2" column="0">
+    <widget class="QLineEdit" name="line_walletName"/>
+   </item>
+   <item row="6" column="0">
+    <widget class="QCheckBox" name="check_defaultWalletDirectory">
+     <property name="text">
+      <string>Set as default wallet directory</string>
+     </property>
+    </widget>
+   </item>
    <item row="1" column="0">
     <widget class="QLabel" name="label">
      <property name="text">
      </property>
     </widget>
    </item>
+   <item row="0" column="0">
+    <widget class="InfoFrame" name="frame_wallet">
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+    </widget>
+   </item>
    <item row="5" column="0">
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
@@ -39,9 +59,6 @@
      </item>
     </layout>
    </item>
-   <item row="2" column="0">
-    <widget class="QLineEdit" name="line_walletName"/>
-   </item>
    <item row="3" column="0">
     <widget class="QLabel" name="label_9">
      <property name="text">
      </property>
     </widget>
    </item>
-   <item row="0" column="0">
-    <widget class="QFrame" name="frame">
-     <property name="frameShape">
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_4">
-      <item>
-       <widget class="QLabel" name="lockIcon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer_2">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>Choose a name and directory for your wallet files.</string>
-        </property>
-        <property name="wordWrap">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
    <item row="8" column="0">
     <spacer name="verticalSpacer">
      <property name="orientation">
      </property>
     </spacer>
    </item>
-   <item row="6" column="0">
-    <widget class="QCheckBox" name="check_defaultWalletDirectory">
-     <property name="text">
-      <string>Set as default wallet directory</string>
-     </property>
-    </widget>
-   </item>
   </layout>
   <zorder>label_9</zorder>
   <zorder>label</zorder>
   <zorder>line_walletName</zorder>
-  <zorder>frame</zorder>
   <zorder>check_defaultWalletDirectory</zorder>
+  <zorder>frame_wallet</zorder>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>InfoFrame</class>
+   <extends>QFrame</extends>
+   <header>components.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <tabstops>
   <tabstop>line_walletName</tabstop>
   <tabstop>line_walletDir</tabstop>
index 342918a2a8942ea5bb813cf91a0dbe43ffeebfb7..212fbef91c57234d07cb42518b4833b5c27be2d6 100644 (file)
@@ -4,14 +4,15 @@
 #include "WalletWizard.h"
 #include "PageWalletSeed.h"
 #include "ui_PageWalletSeed.h"
-#include "constants.h"
-#include "Seed.h"
 
 #include <QMessageBox>
-#include <QLineEdit>
 #include <QCheckBox>
 #include <QDialogButtonBox>
 
+#include "constants.h"
+#include "Seed.h"
+#include "Icons.h"
+
 PageWalletSeed::PageWalletSeed(WizardFields *fields, QWidget *parent)
     : QWizardPage(parent)
     , ui(new Ui::PageWalletSeed)
@@ -19,15 +20,14 @@ PageWalletSeed::PageWalletSeed(WizardFields *fields, QWidget *parent)
 {
     ui->setupUi(this);
 
-    ui->frame_invalidSeed->hide();
-    QPixmap warningIcon = QPixmap(":/assets/images/warning.png");
-    ui->warningIcon->setPixmap(warningIcon.scaledToWidth(32, Qt::SmoothTransformation));
-
-    QPixmap infoIcon = QPixmap(":/assets/images/info2.svg");
-    ui->newSeedWarningIcon->setPixmap(infoIcon.scaledToWidth(32, Qt::SmoothTransformation));
+    ui->frame_notice->setInfo(icons()->icon("seed"), "The following **16** words can be used to recover access to your wallet.\n\n"
+                                                   "Write them down and store them somewhere safe and secure.\n\n"
+                                                   "Feather uses **Polyseed**. For more information click **Help**.");
 
-    QPixmap pixmap = QPixmap(":/assets/images/seed.png");
-    ui->seedIcon->setPixmap(pixmap.scaledToWidth(32, Qt::SmoothTransformation));
+    ui->frame_invalidSeed->setInfo(icons()->icon("warning"), "Feather was unable to generate a valid seed.\n"
+                                                             "This should never happen.\n"
+                                                             "Please contact the developers immediately.");
+    ui->frame_invalidSeed->hide();
 
     connect(ui->btnRoulette, &QPushButton::clicked, [=]{
         this->seedRoulette(0);
index aa91272809acfc1503ff88735748b3c5272651d4..3575faaf96c9a9e118eda9d5cb05bc7cb42eb85c 100644 (file)
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QFrame" name="frame">
+    <widget class="InfoFrame" name="frame_notice">
      <property name="frameShape">
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
+      <enum>QFrame::Box</enum>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_12">
-      <item>
-       <widget class="QLabel" name="seedIcon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer_2">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
-         <widget class="QLabel" name="label_5">
-          <property name="text">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Store your &lt;span style=&quot; font-weight:600;&quot;&gt;16-word&lt;/span&gt; seed in a safe location.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLabel" name="label">
-          <property name="text">
-           <string>This seed will allow you to recover your wallet in case of computer failure.</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
     </widget>
    </item>
    <item>
-    <widget class="QFrame" name="frame_18">
+    <widget class="InfoFrame" name="frame_invalidSeed">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_20">
-      <item>
-       <widget class="QLabel" name="newSeedWarningIcon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer_4">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <layout class="QVBoxLayout" name="verticalLayout_9">
-        <item>
-         <widget class="QLabel" name="label_14">
-          <property name="text">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Feather uses &lt;span style=&quot; font-weight:600;&quot;&gt;Polyseed&lt;/span&gt;. For more information click &lt;span style=&quot; font-weight:700;&quot;&gt;Help&lt;/span&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-          <property name="textInteractionFlags">
-           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QFrame" name="frame_invalidSeed">
-     <property name="frameShape">
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_17">
-      <item>
-       <widget class="QLabel" name="warningIcon">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>icon</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer_3">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>5</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <layout class="QVBoxLayout" name="verticalLayout_6">
-        <item>
-         <widget class="QLabel" name="label_6">
-          <property name="text">
-           <string>Feather was unable to generate a valid seed.</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLabel" name="label_8">
-          <property name="text">
-           <string>This should never happen.</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLabel" name="label_10">
-          <property name="text">
-           <string>Please contact the developers immediately.</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
     </widget>
    </item>
    <item>
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>InfoFrame</class>
+   <extends>QFrame</extends>
+   <header>components.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>