Procházet zdrojové kódy

Integrated LotroDatLibrary, done with 2 concept views

Ivan Arkhipov před 6 roky
rodič
revize
6dc4868f43

+ 11 - 3
Legacy_v2.pro

@@ -31,16 +31,24 @@ SOURCES += \
         gui/mainwindow.cpp \
         src/menuentry.cpp \
         src/legacyapp.cpp \
-        src/filesystem.cpp
+        src/filesystem.cpp \
+        src/filedownloader.cpp \
+    gui/statuswidget.cpp \
+    gui/rusificationwidget.cpp
 
 HEADERS += \
         gui/mainwindow.h \
         include/menuentry.h \
         include/legacyapp.h \
-        include/filesystem.h
+        include/filesystem.h \
+        include/filedownloader.h \
+    gui/statuswidget.h \
+    gui/rusificationwidget.h
 
 FORMS += \
-        gui/mainwindow.ui
+        gui/mainwindow.ui \
+    gui/statuswidget.ui \
+    gui/rusificationwidget.ui
 
 RESOURCES += \
         res.qrc

+ 24 - 23
gui/mainwindow.cpp

@@ -13,6 +13,16 @@ MainWindow::MainWindow(LegacyApp *app, QWidget *parent) :
 
 void MainWindow::Init() {
     ui->setupUi(this);
+
+    status_frame = new StatusWidget(this);
+    ui->content_layout->addWidget(status_frame);
+
+    rusification_frame = new RusificationWidget(this);
+    ui->content_layout->addWidget(rusification_frame);
+
+    hideAllContentWidgets();
+    status_frame->show();
+
     setupWindowBackgroundAndMask(1);
     setupMenuHoverWidget();
     show();
@@ -48,42 +58,29 @@ MainWindow::~MainWindow()
 
 void MainWindow::on_menuentry_1_clicked()
 {
-    QMessageBox msgBox;
-    msgBox.setIcon(QMessageBox::Information);
-    msgBox.setText("Нажали на \"Статус\"!");
-    msgBox.exec();
+    hideAllContentWidgets();
+    status_frame->show();
 }
 
 void MainWindow::on_menuentry_2_clicked()
 {
-    QMessageBox msgBox;
-    msgBox.setIcon(QMessageBox::Information);
-    msgBox.setText("Нажали на \"Русификация\"!");
-    msgBox.exec();
+    hideAllContentWidgets();
 }
 
 void MainWindow::on_menuentry_3_clicked()
 {
-    QMessageBox msgBox;
-    msgBox.setIcon(QMessageBox::Information);
-    msgBox.setText("Нажали на \"Новости\"!");
-    msgBox.exec();
+    hideAllContentWidgets();
+    rusification_frame->show();
 }
 
 void MainWindow::on_menuentry_4_clicked()
 {
-    QMessageBox msgBox;
-    msgBox.setIcon(QMessageBox::Information);
-    msgBox.setText("Нажали на \"Помощь\"!");
-    msgBox.exec();
+    hideAllContentWidgets();
 }
 
 void MainWindow::on_menuentry_5_clicked()
 {
-    QMessageBox msgBox;
-    msgBox.setIcon(QMessageBox::Information);
-    msgBox.setText("Нажали на \"О наследии\"!");
-    msgBox.exec();
+    hideAllContentWidgets();
 }
 
 void MainWindow::onHoverMenuentry()
@@ -91,7 +88,6 @@ void MainWindow::onHoverMenuentry()
     moveMenuHoverWidget(MenuEntry::getHoverLabel());
 }
 
-
 void MainWindow::setupWindowBackgroundAndMask(int bg_id)
 {
     QPixmap maskPix(":/assets/bg" + QString::number(bg_id) + ".png");
@@ -100,7 +96,6 @@ void MainWindow::setupWindowBackgroundAndMask(int bg_id)
     ui->centralWidget->setStyleSheet("border-image: url(:/assets/bg" + QString::number(bg_id) + ".png)");
 }
 
-
 void MainWindow::setupMenuHoverWidget()
 {
     menuHoverWidget = new QWidget(ui->menu_widget);
@@ -114,7 +109,7 @@ void MainWindow::setupMenuHoverWidget()
     connect(ui->menuentry_5, &MenuEntry::hover_label_changed, this, &MainWindow::onHoverMenuentry);
 
     MenuEntry::setActiveLabel(ui->menuentry_1);
-    menu_hover_checker_timer.setInterval(700);
+    menu_hover_checker_timer.setInterval(500);
     connect(&menu_hover_checker_timer, &QTimer::timeout, this, &MainWindow::checkMenuIsHovered);
     menu_hover_checker_timer.start();
 }
@@ -155,6 +150,12 @@ void MainWindow::checkMenuIsHovered()
     }
 }
 
+void MainWindow::hideAllContentWidgets()
+{
+    status_frame->hide();
+    rusification_frame->hide();
+}
+
 void MainWindow::on_closeButton_clicked()
 {
     qApp->quit();

+ 11 - 0
gui/mainwindow.h

@@ -5,6 +5,9 @@
 #include <QPropertyAnimation>
 #include <QTimer>
 
+#include "statuswidget.h"
+#include "rusificationwidget.h"
+
 namespace Ui {
 class MainWindow;
 }
@@ -45,10 +48,15 @@ private slots:
 
 private:
     void setupWindowBackgroundAndMask(int bg_id);
+
     void setupMenuHoverWidget();
+
     void moveMenuHoverWidget(MenuEntry* target);
+
     void checkMenuIsHovered();
 
+    void hideAllContentWidgets();
+
 private:
     LegacyApp *app;
 
@@ -60,6 +68,9 @@ private:
     QTimer menu_hover_checker_timer;
 
     QPoint dragPosition;
+
+    StatusWidget *status_frame;
+    RusificationWidget *rusification_frame;
 };
 
 #endif // MAINWINDOW_H

+ 15 - 4
gui/mainwindow.ui

@@ -217,7 +217,7 @@ font: 15px &quot;Trebuchet MS&quot;;</string>
 font: 15px &quot;Trebuchet MS&quot;;</string>
             </property>
             <property name="text">
-             <string>РУСИФИКАЦИЯ</string>
+             <string>НАСТРОЙКИ</string>
             </property>
             <property name="scaledContents">
              <bool>true</bool>
@@ -252,7 +252,7 @@ font: 15px &quot;Trebuchet MS&quot;;</string>
 </string>
             </property>
             <property name="text">
-             <string notr="true">НОВОСТИ</string>
+             <string notr="true">  РУСИФИКАЦИЯ  </string>
             </property>
             <property name="scaledContents">
              <bool>true</bool>
@@ -287,7 +287,7 @@ font: 15px &quot;Trebuchet MS&quot;;</string>
 font: 15px &quot;Trebuchet MS&quot;;</string>
             </property>
             <property name="text">
-             <string>ПОМОЩЬ</string>
+             <string>НОВОСТИ</string>
             </property>
             <property name="scaledContents">
              <bool>true</bool>
@@ -325,7 +325,7 @@ font: 15px &quot;Trebuchet MS&quot;;</string>
 font: 15px &quot;Trebuchet MS&quot;;</string>
             </property>
             <property name="text">
-             <string>О НАСЛЕДИИ</string>
+             <string>ПОМОЩЬ</string>
             </property>
             <property name="scaledContents">
              <bool>true</bool>
@@ -449,6 +449,17 @@ QPushButton#closeButton:hover { border-image: url(:/assets/close.png) 0 0 0 0 st
       <property name="styleSheet">
        <string notr="true">border-image:none;</string>
       </property>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <property name="leftMargin">
+        <number>20</number>
+       </property>
+       <property name="rightMargin">
+        <number>20</number>
+       </property>
+       <item row="0" column="0">
+        <layout class="QGridLayout" name="content_layout"/>
+       </item>
+      </layout>
      </widget>
     </item>
    </layout>

+ 14 - 0
gui/rusificationwidget.cpp

@@ -0,0 +1,14 @@
+#include "gui\rusificationwidget.h"
+#include "ui_rusificationwidget.h"
+
+RusificationWidget::RusificationWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::RusificationWidget)
+{
+    ui->setupUi(this);
+}
+
+RusificationWidget::~RusificationWidget()
+{
+    delete ui;
+}

+ 22 - 0
gui/rusificationwidget.h

@@ -0,0 +1,22 @@
+#ifndef RUSIFICATIONWIDGET_H
+#define RUSIFICATIONWIDGET_H
+
+#include <QWidget>
+
+namespace Ui {
+class RusificationWidget;
+}
+
+class RusificationWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit RusificationWidget(QWidget *parent = 0);
+    ~RusificationWidget();
+
+private:
+    Ui::RusificationWidget *ui;
+};
+
+#endif // RUSIFICATIONWIDGET_H

+ 384 - 0
gui/rusificationwidget.ui

@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>RusificationWidget</class>
+ <widget class="QWidget" name="RusificationWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>744</width>
+    <height>417</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <property name="spacing">
+    <number>30</number>
+   </property>
+   <item>
+    <widget class="QWidget" name="left_column_widget" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>350</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="styleSheet">
+      <string notr="true">border-radius: 20px;
+background-color: rgba(30, 0, 0, 100);</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QTreeWidget" name="treeWidget">
+        <property name="styleSheet">
+         <string notr="true">border-radius: 20px;
+color: rgb(255, 255, 255);
+font: 12pt &quot;Trebuchet MS&quot;;
+background-color: rgba(255, 255, 255, 0);</string>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="showDropIndicator" stdset="0">
+         <bool>false</bool>
+        </property>
+        <property name="alternatingRowColors">
+         <bool>false</bool>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::NoSelection</enum>
+        </property>
+        <property name="verticalScrollMode">
+         <enum>QAbstractItemView::ScrollPerItem</enum>
+        </property>
+        <property name="autoExpandDelay">
+         <number>0</number>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>true</bool>
+        </property>
+        <property name="uniformRowHeights">
+         <bool>false</bool>
+        </property>
+        <property name="itemsExpandable">
+         <bool>true</bool>
+        </property>
+        <property name="animated">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>false</bool>
+        </property>
+        <property name="headerHidden">
+         <bool>true</bool>
+        </property>
+        <property name="expandsOnDoubleClick">
+         <bool>true</bool>
+        </property>
+        <attribute name="headerVisible">
+         <bool>false</bool>
+        </attribute>
+        <column>
+         <property name="text">
+          <string>Устанавливаемые элементы</string>
+         </property>
+         <property name="background">
+          <color alpha="0">
+           <red>0</red>
+           <green>0</green>
+           <blue>0</blue>
+          </color>
+         </property>
+         <property name="foreground">
+          <brush brushstyle="NoBrush">
+           <color alpha="0">
+            <red>0</red>
+            <green>0</green>
+            <blue>0</blue>
+           </color>
+          </brush>
+         </property>
+        </column>
+        <item>
+         <property name="text">
+          <string>Тексты</string>
+         </property>
+         <property name="checkState">
+          <enum>PartiallyChecked</enum>
+         </property>
+         <item>
+          <property name="text">
+           <string>Шрифты</string>
+          </property>
+          <property name="checkState">
+           <enum>Checked</enum>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Предметы</string>
+          </property>
+          <property name="checkState">
+           <enum>Checked</enum>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Эмоции</string>
+          </property>
+          <property name="checkState">
+           <enum>Checked</enum>
+          </property>
+         </item>
+        </item>
+        <item>
+         <property name="text">
+          <string>Озвучка персонажей</string>
+         </property>
+         <property name="checkState">
+          <enum>Checked</enum>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Заставочные экраны</string>
+         </property>
+         <property name="checkState">
+          <enum>Checked</enum>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Карты</string>
+         </property>
+         <property name="checkState">
+          <enum>Checked</enum>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Видеоролики</string>
+         </property>
+         <property name="checkState">
+          <enum>Checked</enum>
+         </property>
+         <item>
+          <property name="text">
+           <string>Вступительный</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Расовые</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Классовые</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Книга 1: Тени Ангмара</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Книга 2: Копи Мории</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Книга 3: Союзники Короля</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Книга 4: Мощь Саурона</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Чёрная Книга Мордора</string>
+          </property>
+         </item>
+        </item>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWidget" name="right_column_widget" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="3" column="0" colspan="2">
+       <widget class="QWidget" name="widget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>132</width>
+             <height>57</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>160</width>
+             <height>60</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>ПРИМЕНИТЬ</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="0" column="0" colspan="2">
+       <spacer name="verticalSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>321</width>
+          <height>1</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="2" column="0" colspan="2">
+       <spacer name="verticalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>321</width>
+          <height>18</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <widget class="QWidget" name="widget_2" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="styleSheet">
+         <string notr="true">border-radius: 20px;
+background-color: rgba(30, 0, 0, 100);
+color:rgb(255,255,255)</string>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_3">
+         <item row="0" column="0">
+          <widget class="QLabel" name="label_2">
+           <property name="font">
+            <font>
+             <family>Times New Roman</family>
+             <pointsize>12</pointsize>
+             <weight>75</weight>
+             <bold>true</bold>
+            </font>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">background:none</string>
+           </property>
+           <property name="text">
+            <string>ОПИСАНИЕ</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignCenter</set>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="label">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">background-color: none;</string>
+           </property>
+           <property name="text">
+            <string>Привет как дела как жизнь что деПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как дела как жизнь что делаешьПривет как </string>
+           </property>
+           <property name="wordWrap">
+            <bool>true</bool>
+           </property>
+           <property name="margin">
+            <number>10</number>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <widget class="QLabel" name="label_3">
+           <property name="minimumSize">
+            <size>
+             <width>100</width>
+             <height>100</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">background-color:none;</string>
+           </property>
+           <property name="text">
+            <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/teksty-photo-normal.png&quot; width=&quot;100&quot; height=&quot;100&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignCenter</set>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 14 - 0
gui/statuswidget.cpp

@@ -0,0 +1,14 @@
+#include "statuswidget.h"
+#include "ui_statuswidget.h"
+
+StatusWidget::StatusWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::StatusWidget)
+{
+    ui->setupUi(this);
+}
+
+StatusWidget::~StatusWidget()
+{
+    delete ui;
+}

+ 22 - 0
gui/statuswidget.h

@@ -0,0 +1,22 @@
+#ifndef STATUSWIDGET_H
+#define STATUSWIDGET_H
+
+#include <QWidget>
+
+namespace Ui {
+class StatusWidget;
+}
+
+class StatusWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit StatusWidget(QWidget *parent = 0);
+    ~StatusWidget();
+
+private:
+    Ui::StatusWidget *ui;
+};
+
+#endif // STATUSWIDGET_H

+ 438 - 0
gui/statuswidget.ui

@@ -0,0 +1,438 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>StatusWidget</class>
+ <widget class="QWidget" name="StatusWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>675</width>
+    <height>382</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_3">
+   <item row="0" column="1">
+    <widget class="QWidget" name="right_column_widget" native="true">
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0" colspan="2">
+       <widget class="QWidget" name="common_status_widget" native="true">
+        <property name="styleSheet">
+         <string notr="true"/>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
+          <widget class="QWidget" name="backup_status" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-radius: 20px;
+background-color: rgba(30, 0, 0, 100);</string>
+           </property>
+           <layout class="QHBoxLayout" name="horizontalLayout_4">
+            <item>
+             <widget class="QLabel" name="label_4">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>РЕЗЕРВНАЯ КОПИЯ:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_5">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(85, 170, 255); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>Создание... 50%</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QWidget" name="backup_help" native="true">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>30</width>
+                <height>30</height>
+               </size>
+              </property>
+              <property name="mouseTracking">
+               <bool>true</bool>
+              </property>
+              <property name="styleSheet">
+               <string notr="true">border-image: url(:/assets/question.png); color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item>
+          <widget class="QWidget" name="download_status" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-radius: 20px;
+background-color: rgba(30, 0, 0, 100);</string>
+           </property>
+           <layout class="QHBoxLayout" name="horizontalLayout_5">
+            <item>
+             <widget class="QLabel" name="label_8">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>ЗАГРУЗКА:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_9">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(0, 170, 0); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>Все данные загружены</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QWidget" name="download_help" native="true">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>30</width>
+                <height>30</height>
+               </size>
+              </property>
+              <property name="styleSheet">
+               <string notr="true">border-image: url(:/assets/question.png); color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item>
+          <widget class="QWidget" name="rusification_status" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-radius: 20px;
+background-color: rgba(30, 0, 0, 100);</string>
+           </property>
+           <layout class="QHBoxLayout" name="horizontalLayout_6">
+            <item>
+             <widget class="QLabel" name="label_2">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>РУСИФИКАЦИЯ:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_3">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(85, 170, 255); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>Установка... (1/5) 50%</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QWidget" name="rusification_help" native="true">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>30</width>
+                <height>30</height>
+               </size>
+              </property>
+              <property name="styleSheet">
+               <string notr="true">border-image: url(:/assets/question.png); color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item>
+          <widget class="QWidget" name="protection_status" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-radius: 20px;
+background-color: rgba(30, 0, 0, 100);</string>
+           </property>
+           <layout class="QHBoxLayout" name="horizontalLayout_7">
+            <item>
+             <widget class="QLabel" name="label_6">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>ЗАЩИТА ИГРОВЫХ ДАННЫХ:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_7">
+              <property name="styleSheet">
+               <string notr="true">color: rgb(255, 85, 0); background-color:none;</string>
+              </property>
+              <property name="text">
+               <string>Выключена</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QWidget" name="protection_help" native="true">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>30</width>
+                <height>30</height>
+               </size>
+              </property>
+              <property name="styleSheet">
+               <string notr="true">border-image: url(:/assets/question.png); color: rgb(255, 255, 255); background-color:none;</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <spacer name="horizontalSpacer_3">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>219</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="1">
+       <widget class="QWidget" name="buttons_widget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>80</height>
+         </size>
+        </property>
+        <property name="styleSheet">
+         <string notr="true">background-color: rgb(0, 0, 84);</string>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout" stretch="1">
+         <property name="spacing">
+          <number>1</number>
+         </property>
+         <property name="leftMargin">
+          <number>1</number>
+         </property>
+         <property name="topMargin">
+          <number>1</number>
+         </property>
+         <property name="rightMargin">
+          <number>1</number>
+         </property>
+         <property name="bottomMargin">
+          <number>1</number>
+         </property>
+         <item>
+          <widget class="QPushButton" name="game_button">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>150</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>180</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>Trebuchet MS</family>
+             <pointsize>12</pointsize>
+            </font>
+           </property>
+           <property name="autoFillBackground">
+            <bool>false</bool>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/assets/gray-button-hi.png);
+color: rgb(85, 0, 0);</string>
+           </property>
+           <property name="text">
+            <string notr="true">    ИГРАТЬ    </string>
+           </property>
+           <property name="iconSize">
+            <size>
+             <width>0</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="default">
+            <bool>false</bool>
+           </property>
+           <property name="flat">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <widget class="QWidget" name="left_column_widget" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0" columnstretch="0,0,0">
+      <item row="0" column="0">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>31</width>
+          <height>249</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="0" rowspan="4" colspan="3">
+       <widget class="QWidget" name="status_label_widget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>40</height>
+         </size>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="QLabel" name="status_label">
+           <property name="font">
+            <font>
+             <family>Times New Roman</family>
+             <pointsize>16</pointsize>
+             <weight>75</weight>
+             <bold>true</bold>
+            </font>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">color: rgb(85, 170, 255); </string>
+           </property>
+           <property name="text">
+            <string>В РАБОТЕ</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignHCenter|Qt::AlignTop</set>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>31</width>
+          <height>249</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="0" column="1" rowspan="2">
+       <widget class="QWidget" name="status_image_widget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>200</width>
+          <height>200</height>
+         </size>
+        </property>
+        <property name="baseSize">
+         <size>
+          <width>200</width>
+          <height>200</height>
+         </size>
+        </property>
+        <property name="styleSheet">
+         <string notr="true">border-image: url(:/assets/info.png);</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+  <zorder>right_column_widget</zorder>
+  <zorder>left_column_widget</zorder>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 29 - 0
include/filedownloader.h

@@ -0,0 +1,29 @@
+#ifndef INCLUDEILEDOWNLOADER_H
+#define INCLUDEILEDOWNLOADER_H
+
+#include <QObject>
+#include <QByteArray>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+
+class FileDownloader : public QObject
+{
+    Q_OBJECT
+public:
+    explicit FileDownloader(QUrl url, QObject *parent = 0);
+    virtual ~FileDownloader();
+    QByteArray DownloadedData() const;
+
+signals:
+    void downloaded();
+
+private slots:
+    void FileDownloaded(QNetworkReply* pReply);
+
+private:
+    QNetworkAccessManager m_WebCtrl;
+    QByteArray m_DownloadedData;
+};
+
+#endif // INCLUDEILEDOWNLOADER_H

+ 12 - 1
include/legacyapp.h

@@ -5,10 +5,13 @@
 #include <QSettings>
 #include <QApplication>
 
+#include <queue>
+
 #include "mainwindow.h"
 #include <LotroDat.h>
 
 class MainWindow;
+class FileDownloader;
 
 class LegacyApp : public QObject
 {
@@ -27,12 +30,20 @@ private:
 signals:
 
 private slots:
+    void DownloadFinished();
+
 
 private:
     MainWindow window;
+
     LOTRO_DAT::DatFile client_local_dat;
-    QSettings properties;
+    std::queue<QString> patch_databases_queue;
     bool client_local_dat_busy;
+
+    QSettings properties;
+
+    FileDownloader* dowloader;
+    std::queue<std::pair<QString, QString>> download_queue;
 };
 
 #endif // LEGACYAPP_H

+ 2 - 2
include/menuentry.h

@@ -32,8 +32,8 @@ private slots:
 private:
     static MenuEntry *active_label;
     static MenuEntry *hover_label;
-    const QString default_stylesheet = "color:rgb(255, 255, 255);\nfont: 15px \"Trebuchet MS\";";
-    const QString active_stylesheet = "color:rgb(200, 200, 200);\nfont: 15px \"Trebuchet MS\";";
+    const QString default_stylesheet = "color:rgb(255, 255, 255);\nfont:15px \"Trebuchet MS\";";
+    const QString active_stylesheet = "color:rgb(200, 200, 200);\nfont:15px \"Trebuchet MS\";";
 };
 
 #endif // CLICKABLELABEL_H

+ 12 - 0
res.qrc

@@ -3,5 +3,17 @@
         <file>assets/bg1.png</file>
         <file>assets/close.png</file>
         <file>assets/minimize.png</file>
+        <file>assets/appicon.ico</file>
+        <file>assets/critical.png</file>
+        <file>assets/error.png</file>
+        <file>assets/info.png</file>
+        <file>assets/ok.png</file>
+        <file>assets/orange-button-hi.png</file>
+        <file>assets/warning.png</file>
+        <file>assets/green-button-hi.png</file>
+        <file>assets/folder.png</file>
+        <file>assets/question.png</file>
+        <file>assets/gray-button-hi.png</file>
+        <file>assets/teksty-photo-normal.png</file>
     </qresource>
 </RCC>

+ 21 - 0
src/filedownloader.cpp

@@ -0,0 +1,21 @@
+#include "filedownloader.h"
+
+FileDownloader::FileDownloader(QUrl Url, QObject *parent) :QObject(parent)
+{
+    connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(FileDownloaded(QNetworkReply*)));
+    QNetworkRequest request(Url);
+    m_WebCtrl.get(request);
+}
+
+FileDownloader::~FileDownloader() {}
+
+void FileDownloader::FileDownloaded(QNetworkReply* pReply) {
+    m_DownloadedData = pReply->readAll();
+    //emit a signal
+    pReply->deleteLater();
+    emit downloaded();
+}
+
+QByteArray FileDownloader::DownloadedData() const {
+    return m_DownloadedData;
+}

+ 5 - 0
src/legacyapp.cpp

@@ -29,3 +29,8 @@ void LegacyApp::StartDatFilesInitialisation()
         }
     });
 }
+
+void LegacyApp::DownloadFinished()
+{
+    // TODO
+}