Add news checking system and news toolbar
This commit is contained in:
		@@ -116,6 +116,17 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
 | 
				
			|||||||
		renameButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
							renameButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Add the news label to the news toolbar.
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							newsLabel = new QToolButton();
 | 
				
			||||||
 | 
							newsLabel->setIcon(QIcon(":/icons/toolbar/news"));
 | 
				
			||||||
 | 
							newsLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
				
			||||||
 | 
							newsLabel->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
 | 
				
			||||||
 | 
							ui->newsToolBar->insertWidget(ui->actionMoreNews, newsLabel);
 | 
				
			||||||
 | 
							QObject::connect(MMC->newsChecker().get(), &NewsChecker::newsLoaded, this, &MainWindow::updateNewsLabel);
 | 
				
			||||||
 | 
							updateNewsLabel();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the instance list widget
 | 
						// Create the instance list widget
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		view = new KCategorizedView(ui->centralWidget);
 | 
							view = new KCategorizedView(ui->centralWidget);
 | 
				
			||||||
@@ -249,6 +260,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		MMC->newsChecker()->reloadNews();
 | 
							MMC->newsChecker()->reloadNews();
 | 
				
			||||||
 | 
							updateNewsLabel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// set up the updater object.
 | 
							// set up the updater object.
 | 
				
			||||||
		auto updater = MMC->updateChecker();
 | 
							auto updater = MMC->updateChecker();
 | 
				
			||||||
@@ -433,6 +445,30 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
 | 
				
			|||||||
	return QMainWindow::eventFilter(obj, ev);
 | 
						return QMainWindow::eventFilter(obj, ev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MainWindow::updateNewsLabel()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						auto newsChecker = MMC->newsChecker();
 | 
				
			||||||
 | 
						if (newsChecker->isLoadingNews())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							newsLabel->setText(tr("Loading news..."));
 | 
				
			||||||
 | 
							newsLabel->setEnabled(false);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							QList<NewsEntryPtr> entries = newsChecker->getNewsEntries();
 | 
				
			||||||
 | 
							if (entries.length() > 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								newsLabel->setText(entries[0]->title);
 | 
				
			||||||
 | 
								newsLabel->setEnabled(true);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								newsLabel->setText(tr("No news available."));
 | 
				
			||||||
 | 
								newsLabel->setEnabled(false);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::updateAvailable(QString repo, QString versionName, int versionId)
 | 
					void MainWindow::updateAvailable(QString repo, QString versionName, int versionId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	UpdateDialog dlg;
 | 
						UpdateDialog dlg;
 | 
				
			||||||
@@ -708,7 +744,7 @@ void MainWindow::on_actionReportBug_triggered()
 | 
				
			|||||||
	openWebPage(QUrl("http://multimc.myjetbrains.com/youtrack/dashboard#newissue=yes"));
 | 
						openWebPage(QUrl("http://multimc.myjetbrains.com/youtrack/dashboard#newissue=yes"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::on_actionNews_triggered()
 | 
					void MainWindow::on_actionMoreNews_triggered()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	openWebPage(QUrl("http://multimc.org/posts.html"));
 | 
						openWebPage(QUrl("http://multimc.org/posts.html"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,7 +84,7 @@ slots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	void on_actionReportBug_triggered();
 | 
						void on_actionReportBug_triggered();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void on_actionNews_triggered();
 | 
						void on_actionMoreNews_triggered();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void on_mainToolBar_visibilityChanged(bool);
 | 
						void on_mainToolBar_visibilityChanged(bool);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -162,6 +162,8 @@ slots:
 | 
				
			|||||||
	void changeActiveAccount();
 | 
						void changeActiveAccount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void repopulateAccountsMenu();
 | 
						void repopulateAccountsMenu();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void updateNewsLabel();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/*!
 | 
						/*!
 | 
				
			||||||
	 * Runs the DownloadUpdateTask and installs updates.
 | 
						 * Runs the DownloadUpdateTask and installs updates.
 | 
				
			||||||
@@ -181,6 +183,7 @@ private:
 | 
				
			|||||||
	ConsoleWindow *console;
 | 
						ConsoleWindow *console;
 | 
				
			||||||
	LabeledToolButton *renameButton;
 | 
						LabeledToolButton *renameButton;
 | 
				
			||||||
	QToolButton *changeIconButton;
 | 
						QToolButton *changeIconButton;
 | 
				
			||||||
 | 
						QToolButton* newsLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BaseInstance *m_selectedInstance;
 | 
						BaseInstance *m_selectedInstance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@
 | 
				
			|||||||
    <x>0</x>
 | 
					    <x>0</x>
 | 
				
			||||||
    <y>0</y>
 | 
					    <y>0</y>
 | 
				
			||||||
    <width>688</width>
 | 
					    <width>688</width>
 | 
				
			||||||
    <height>650</height>
 | 
					    <height>460</height>
 | 
				
			||||||
   </rect>
 | 
					   </rect>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="windowTitle">
 | 
					  <property name="windowTitle">
 | 
				
			||||||
@@ -72,7 +72,6 @@
 | 
				
			|||||||
   <addaction name="actionSettings"/>
 | 
					   <addaction name="actionSettings"/>
 | 
				
			||||||
   <addaction name="separator"/>
 | 
					   <addaction name="separator"/>
 | 
				
			||||||
   <addaction name="actionReportBug"/>
 | 
					   <addaction name="actionReportBug"/>
 | 
				
			||||||
   <addaction name="actionNews"/>
 | 
					 | 
				
			||||||
   <addaction name="actionAbout"/>
 | 
					   <addaction name="actionAbout"/>
 | 
				
			||||||
   <addaction name="separator"/>
 | 
					   <addaction name="separator"/>
 | 
				
			||||||
   <addaction name="actionCAT"/>
 | 
					   <addaction name="actionCAT"/>
 | 
				
			||||||
@@ -121,6 +120,36 @@
 | 
				
			|||||||
   <addaction name="separator"/>
 | 
					   <addaction name="separator"/>
 | 
				
			||||||
   <addaction name="actionDeleteInstance"/>
 | 
					   <addaction name="actionDeleteInstance"/>
 | 
				
			||||||
  </widget>
 | 
					  </widget>
 | 
				
			||||||
 | 
					  <widget class="QToolBar" name="newsToolBar">
 | 
				
			||||||
 | 
					   <property name="windowTitle">
 | 
				
			||||||
 | 
					    <string>News Toolbar</string>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="movable">
 | 
				
			||||||
 | 
					    <bool>false</bool>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="allowedAreas">
 | 
				
			||||||
 | 
					    <set>Qt::BottomToolBarArea</set>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="iconSize">
 | 
				
			||||||
 | 
					    <size>
 | 
				
			||||||
 | 
					     <width>16</width>
 | 
				
			||||||
 | 
					     <height>16</height>
 | 
				
			||||||
 | 
					    </size>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="toolButtonStyle">
 | 
				
			||||||
 | 
					    <enum>Qt::ToolButtonTextBesideIcon</enum>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="floatable">
 | 
				
			||||||
 | 
					    <bool>false</bool>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <attribute name="toolBarArea">
 | 
				
			||||||
 | 
					    <enum>BottomToolBarArea</enum>
 | 
				
			||||||
 | 
					   </attribute>
 | 
				
			||||||
 | 
					   <attribute name="toolBarBreak">
 | 
				
			||||||
 | 
					    <bool>false</bool>
 | 
				
			||||||
 | 
					   </attribute>
 | 
				
			||||||
 | 
					   <addaction name="actionMoreNews"/>
 | 
				
			||||||
 | 
					  </widget>
 | 
				
			||||||
  <action name="actionAddInstance">
 | 
					  <action name="actionAddInstance">
 | 
				
			||||||
   <property name="icon">
 | 
					   <property name="icon">
 | 
				
			||||||
    <iconset resource="../graphics.qrc">
 | 
					    <iconset resource="../graphics.qrc">
 | 
				
			||||||
@@ -229,19 +258,22 @@
 | 
				
			|||||||
    <string>Open the bug tracker to report a bug with MultiMC.</string>
 | 
					    <string>Open the bug tracker to report a bug with MultiMC.</string>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
  </action>
 | 
					  </action>
 | 
				
			||||||
  <action name="actionNews">
 | 
					  <action name="actionMoreNews">
 | 
				
			||||||
   <property name="icon">
 | 
					   <property name="icon">
 | 
				
			||||||
    <iconset resource="../graphics.qrc">
 | 
					    <iconset resource="../graphics.qrc">
 | 
				
			||||||
     <normaloff>:/icons/toolbar/news</normaloff>:/icons/toolbar/news</iconset>
 | 
					     <normaloff>:/icons/toolbar/news</normaloff>:/icons/toolbar/news</iconset>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="text">
 | 
					   <property name="text">
 | 
				
			||||||
    <string>News</string>
 | 
					    <string>More News</string>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="iconText">
 | 
				
			||||||
 | 
					    <string>More...</string>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="toolTip">
 | 
					   <property name="toolTip">
 | 
				
			||||||
    <string>Open the MultiMC dev blog to read news about MultiMC.</string>
 | 
					    <string>Open the MultiMC development blog to read more news about MultiMC.</string>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="statusTip">
 | 
					   <property name="statusTip">
 | 
				
			||||||
    <string>Open the MultiMC dev blog to read news about MultiMC.</string>
 | 
					    <string>Open the MultiMC development blog to read more news about MultiMC.</string>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
  </action>
 | 
					  </action>
 | 
				
			||||||
  <action name="actionAbout">
 | 
					  <action name="actionAbout">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,6 +102,11 @@ void NewsChecker::rssDownloadFailed()
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QList<NewsEntryPtr> NewsChecker::getNewsEntries() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return m_newsEntries;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool NewsChecker::isLoadingNews() const
 | 
					bool NewsChecker::isLoadingNews() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return m_newsNetJob.get() != nullptr;
 | 
						return m_newsNetJob.get() != nullptr;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,9 @@ public:
 | 
				
			|||||||
	 * Returns true if the news has been loaded successfully.
 | 
						 * Returns true if the news has been loaded successfully.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	bool isNewsLoaded() const;
 | 
						bool isNewsLoaded() const;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						//! True if the news is currently loading. If true, reloadNews() will do nothing.
 | 
				
			||||||
 | 
						bool isLoadingNews() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*!
 | 
						/*!
 | 
				
			||||||
	 * Returns a list of news entries.
 | 
						 * Returns a list of news entries.
 | 
				
			||||||
@@ -78,9 +81,6 @@ protected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	//! The network job to use to load the news.
 | 
						//! The network job to use to load the news.
 | 
				
			||||||
	NetJobPtr m_newsNetJob;
 | 
						NetJobPtr m_newsNetJob;
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	//! True if the news is currently loading. If true, reloadNews() will do nothing.
 | 
					 | 
				
			||||||
	bool isLoadingNews() const;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//! True if news has been loaded.
 | 
						//! True if news has been loaded.
 | 
				
			||||||
	bool m_loadedNews;
 | 
						bool m_loadedNews;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user