瀏覽代碼

Set news widget used both by status widget and help widget

Ivan Arkhipov 4 年之前
父節點
當前提交
98ac3b36f7

+ 19 - 1
src/Legacy/widgets/helpwidget.cpp

@@ -1,6 +1,7 @@
 #include "ui_helpwidget.h"
 
 #include "widgets/helpwidget.h"
+#include "widgets/mainwindow.h"
 #include "fonts.h"
 #include <QDebug>
 #include <QScrollBar>
@@ -10,6 +11,8 @@ HelpWidget::HelpWidget(QWidget *parent)
     , ui(new Ui::HelpWidget)
 {
     ui->setupUi(this);
+    dynamic_cast<MainWindow*>(parent)->getNewsWidget()->show();
+    dynamic_cast<MainWindow*>(parent)->getNewsWidget()->setGeometry(45, 185, 240, 453);
 }
 
 HelpWidget::~HelpWidget()
@@ -20,9 +23,24 @@ HelpWidget::~HelpWidget()
 void HelpWidget::updateFontsSizes()
 {
     ui->label_6->setFont(crimson_16pt);
+    ui->news_label->setFont(trajan_10pt);
 }
 
-void HelpWidget::resizeEvent(QResizeEvent *event)
+void HelpWidget::show()
+{
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->setParent(this);
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->setGeometry(45, 75, 240, 453);
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->show();
+    QWidget::show();
+}
+
+void HelpWidget::hide()
+{
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->hide();
+    QWidget::hide();
+}
+
+void HelpWidget::resizeEvent(QResizeEvent*)
 {
     updateFontsSizes();
 }

+ 4 - 0
src/Legacy/widgets/helpwidget.h

@@ -25,6 +25,10 @@ public:
 public slots:
     void updateFontsSizes();
 
+    void show();
+
+    void hide();
+
 protected:
     void resizeEvent(QResizeEvent *event) override;
 

+ 20 - 0
src/Legacy/widgets/helpwidget.ui

@@ -57,6 +57,26 @@
     </item>
    </layout>
   </widget>
+  <widget class="QLabel" name="news_label">
+   <property name="geometry">
+    <rect>
+     <x>45</x>
+     <y>33</y>
+     <width>180</width>
+     <height>21</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <family>Trajan Pro 3</family>
+     <pointsize>10</pointsize>
+     <kerning>false</kerning>
+    </font>
+   </property>
+   <property name="text">
+    <string>новости проекта</string>
+   </property>
+  </widget>
  </widget>
  <resources/>
  <connections/>

+ 10 - 0
src/Legacy/widgets/mainwindow.cpp

@@ -88,6 +88,16 @@ MainWindow::~MainWindow()
     delete ui;
 }
 
+NewsListWidget *MainWindow::getNewsWidget()
+{
+    return ui->news_list;
+}
+
+QScrollArea *MainWindow::getNewsWidgetOverlay()
+{
+    return ui->news_scroll_area;
+}
+
 void MainWindow::updateFontSizes()
 {
     ui->menuentry_1->setFont(trajan_9pt);

+ 4 - 0
src/Legacy/widgets/mainwindow.h

@@ -11,11 +11,13 @@
 #include <QCloseEvent>
 #include <QMutex>
 #include <QMutexLocker>
+#include <QScrollArea>
 
 #include "statuswidget.h"
 #include "aboutwidget.h"
 #include "helpwidget.h"
 #include "legacyapplication.h"
+#include "widgets/newslistwidget.h"
 
 namespace Ui {
 class MainWindow;
@@ -32,6 +34,8 @@ class MainWindow : public QMainWindow
 public:
     explicit MainWindow(QWidget *parent = 0);
     ~MainWindow();
+    NewsListWidget* getNewsWidget();
+    QScrollArea* getNewsWidgetOverlay();
 
 public slots:
     void updateFontSizes();

+ 82 - 6
src/Legacy/widgets/mainwindow.ui

@@ -35,12 +35,6 @@
      <verstretch>0</verstretch>
     </sizepolicy>
    </property>
-   <property name="autoFillBackground">
-    <bool>false</bool>
-   </property>
-   <property name="styleSheet">
-    <string notr="true">/*border-image: url(:/backgrounds/bg1.png);*/</string>
-   </property>
    <widget class="QWidget" name="content_area" native="true">
     <property name="geometry">
      <rect>
@@ -363,10 +357,92 @@ QPushButton#closeButton:hover { border-image: url(:/buttons/close.png) 0 0 0 0 s
      </item>
     </layout>
    </widget>
+   <widget class="QScrollArea" name="news_scroll_area">
+    <property name="geometry">
+     <rect>
+      <x>45</x>
+      <y>185</y>
+      <width>240</width>
+      <height>453</height>
+     </rect>
+    </property>
+    <property name="styleSheet">
+     <string notr="true">QScrollArea{
+	background: transparent;
+}
+
+QScrollArea &gt; QWidget &gt; QWidget { background: transparent; }
+
+QScrollBar:vertical {
+     border: 0px solid grey;
+     background: transparent;
+     width: 10px;
+     margin: 10px 0 10px 0;
+ }
+
+ QScrollBar::handle:vertical {
+	min-height: 10px;
+	background-color:rgba(0,0,0,80);
+	border-radius: 5px;
+	border: 1px solid #6d6867;
+
+ }
+ QScrollBar::add-line:vertical {
+     border: 0px solid grey;
+     background: transparent;
+     height: 1px;
+     subcontrol-position: bottom;
+     subcontrol-origin: margin;
+ }
+
+ QScrollBar::sub-line:vertical {
+     border: 0px solid grey;
+     background: transparent;
+     height: 1px;
+     subcontrol-position: top;
+     subcontrol-origin: margin;
+ }
+ QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
+     border: 0px;
+     width: 0px;
+     height: 0px;
+     background: transparent;
+ }
+
+ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+     background: none;
+ }</string>
+    </property>
+    <property name="frameShape">
+     <enum>QFrame::NoFrame</enum>
+    </property>
+    <property name="widgetResizable">
+     <bool>true</bool>
+    </property>
+    <widget class="NewsListWidget" name="news_list">
+     <property name="geometry">
+      <rect>
+       <x>0</x>
+       <y>0</y>
+       <width>240</width>
+       <height>453</height>
+      </rect>
+     </property>
+    </widget>
+   </widget>
+   <zorder>menu_widget</zorder>
+   <zorder>content_area</zorder>
+   <zorder>news_scroll_area</zorder>
   </widget>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <customwidgets>
+  <customwidget>
+   <class>NewsListWidget</class>
+   <extends>QWidget</extends>
+   <header>widgets/newslistwidget.h</header>
+   <container>1</container>
+  </customwidget>
   <customwidget>
    <class>MenuEntry</class>
    <extends>QLabel</extends>

+ 2 - 0
src/Legacy/widgets/newslistwidget.cpp

@@ -8,6 +8,8 @@
 
 NewsListWidget::NewsListWidget(QWidget *parent) : QWidget(parent)
 {
+    setAttribute(Qt::WA_StyledBackground, true);
+
     news_downloader.targetBytearray = &news_data;
     news_downloader.setUrl(Settings::getValue("Network/news_list_url").toUrl());
 

+ 19 - 8
src/Legacy/widgets/statuswidget.cpp

@@ -4,6 +4,7 @@
 #include "models/patchdownloader.h"
 #include "models/settings.h"
 #include "legacyapplication.h"
+#include "widgets/mainwindow.h"
 
 #include "constants.h"
 
@@ -18,6 +19,7 @@ StatusWidget::StatusWidget(QWidget *parent)
     , ui(new Ui::StatusWidget)
 {
     ui->setupUi(this);
+
     last_statusbar_update_time_.start();
     ui->galadriel_tooltip_example->hide();
     ui->c_progress_bar->setProgress(100);
@@ -26,8 +28,8 @@ StatusWidget::StatusWidget(QWidget *parent)
     connect(ui->weekly_code_widget, &WeeklyCodeWidget::showHelpTooltip, this, [this](){setToolTipMessage("Нажмите по еженедельному коду, чтобы скопировать его.", E_HINT);});
     connect(ui->weekly_code_widget, &WeeklyCodeWidget::showNoTooltip, this, [this](){unsetToolTipMessage(E_HINT);});
 
-    connect(ui->news_list, &NewsListWidget::showHelpToolTip, this, [this](){setToolTipMessage("Нажмите на заголовок новости, чтобы открыть её в браузере.", E_HINT);});
-    connect(ui->news_list, &NewsListWidget::showNoToolTip, this, [this](){unsetToolTipMessage(E_HINT);});
+    connect(dynamic_cast<MainWindow*>(parent)->getNewsWidget(), &NewsListWidget::showHelpToolTip, this, [this](){setToolTipMessage("Нажмите на заголовок новости, чтобы открыть её в браузере.", E_HINT);});
+    connect(dynamic_cast<MainWindow*>(parent)->getNewsWidget(), &NewsListWidget::showNoToolTip, this, [this](){unsetToolTipMessage(E_HINT);});
 
     connect(ui->server_status_widget, &ServerStatusWidget::showServersTooltip, this, [this](QString message){setToolTipMessage(message, E_HINT);});
     connect(ui->server_status_widget, &ServerStatusWidget::showNoTooltip, this, [this](){unsetToolTipMessage(E_HINT);});
@@ -121,13 +123,27 @@ void StatusWidget::unsetToolTipMessage(StatusWidget::ToolTipState state)
     fadeBetweenToolTips(message_id);
 }
 
+void StatusWidget::show()
+{
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->setParent(this);
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->setGeometry(45, 75, 240, 453);
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->show();
+    QWidget::show();
+}
+
+void StatusWidget::hide()
+{
+    dynamic_cast<MainWindow*>(window())->getNewsWidgetOverlay()->hide();
+    QWidget::hide();
+}
+
 void StatusWidget::onErrorStatusChanged(AppErrorStatus status)
 {
     QString init_error_type_message;
 
     if (status == E_NO_ERRORS) {
         setToolTipMessage("Инициализация Наследия прошла успешно!", E_INFO);
-        ui->news_list->updateNewsWidget();
+        dynamic_cast<MainWindow*>(window())->getNewsWidget()->updateNewsWidget();
         ui->server_status_widget->updateServerStatus();
         ui->weekly_code_widget->updateWeeklyCodeWidget();
         _need_to_repair_game_files = false;
@@ -346,11 +362,6 @@ void StatusWidget::createTooltipMessageWidget(QString tooltip_id)
     tooltip_widgets_[tooltip_id]->show();
 }
 
-void StatusWidget::on_check_for_updates_button_clicked()
-{
-    QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::startPatchDownloaderChain, Qt::QueuedConnection);
-}
-
 void StatusWidget::showComponentsStatus() {
     _components_status_opacity_animation->disconnect();
     if (_components_status_opacity_animation->state() == QAbstractAnimation::Running) {

+ 4 - 2
src/Legacy/widgets/statuswidget.h

@@ -41,6 +41,10 @@ public slots:
 
     void unsetToolTipMessage(ToolTipState state);
 
+    void show();
+
+    void hide();
+
 protected:
     void resizeEvent(QResizeEvent *event) override;
 
@@ -67,8 +71,6 @@ private slots:
 
     void on_game_button_clicked();
 
-    void on_check_for_updates_button_clicked();
-
     void showComponentsStatus();
 
     void hideComponentsStatus();

+ 0 - 80
src/Legacy/widgets/statuswidget.ui

@@ -45,79 +45,6 @@ color: white;
     <string>новости проекта</string>
    </property>
   </widget>
-  <widget class="QScrollArea" name="news_scroll_area">
-   <property name="geometry">
-    <rect>
-     <x>45</x>
-     <y>75</y>
-     <width>240</width>
-     <height>453</height>
-    </rect>
-   </property>
-   <property name="styleSheet">
-    <string notr="true">QScrollArea{
-	background: transparent;
-}
-
-QScrollArea &gt; QWidget &gt; QWidget { background: transparent; }
-
-QScrollBar:vertical {
-     border: 0px solid grey;
-     background: transparent;
-     width: 10px;
-     margin: 10px 0 10px 0;
- }
-
- QScrollBar::handle:vertical {
-	min-height: 10px;
-	background-color:rgba(0,0,0,80);
-	border-radius: 5px;
-	border: 1px solid #6d6867;
-
- }
- QScrollBar::add-line:vertical {
-     border: 0px solid grey;
-     background: transparent;
-     height: 1px;
-     subcontrol-position: bottom;
-     subcontrol-origin: margin;
- }
-
- QScrollBar::sub-line:vertical {
-     border: 0px solid grey;
-     background: transparent;
-     height: 1px;
-     subcontrol-position: top;
-     subcontrol-origin: margin;
- }
- QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
-     border: 0px;
-     width: 0px;
-     height: 0px;
-     background: transparent;
- }
-
- QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
-     background: none;
- }</string>
-   </property>
-   <property name="frameShape">
-    <enum>QFrame::NoFrame</enum>
-   </property>
-   <property name="widgetResizable">
-    <bool>true</bool>
-   </property>
-   <widget class="NewsListWidget" name="news_list">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>0</y>
-      <width>240</width>
-      <height>453</height>
-     </rect>
-    </property>
-   </widget>
-  </widget>
   <widget class="ServerStatusWidget" name="server_status_widget" native="true">
    <property name="geometry">
     <rect>
@@ -307,7 +234,6 @@ QPushButton#game_button:disabled {
    </layout>
   </widget>
   <zorder>news_label</zorder>
-  <zorder>news_scroll_area</zorder>
   <zorder>game_button</zorder>
   <zorder>server_status_widget</zorder>
   <zorder>weekly_code_widget</zorder>
@@ -323,12 +249,6 @@ QPushButton#game_button:disabled {
    <header>widgets/serverstatuswidget.h</header>
    <container>1</container>
   </customwidget>
-  <customwidget>
-   <class>NewsListWidget</class>
-   <extends>QWidget</extends>
-   <header>widgets/newslistwidget.h</header>
-   <container>1</container>
-  </customwidget>
   <customwidget>
    <class>WeeklyCodeWidget</class>
    <extends>QWidget</extends>