From 28ffb4d6e3d76a29382e69bbd6d3b6e46107ebf3 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sun, 4 Jan 2015 19:47:06 +0100 Subject: [PATCH] Work on download manager. --- .../icons/mini-kfaenza/download-manager.png | Bin 0 -> 1651 bytes src/gui/formmain.cpp | 3 ++ src/gui/formmain.ui | 6 ++++ src/gui/tabbar.cpp | 5 ++-- src/gui/tabwidget.cpp | 27 ++++++++++++++++-- src/gui/tabwidget.h | 5 +++- src/miscellaneous/application.cpp | 2 +- src/miscellaneous/application.h | 10 +++++++ src/network-web/downloadmanager.cpp | 6 ++++ src/network-web/downloadmanager.h | 2 ++ src/network-web/webview.cpp | 2 +- 11 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 resources/graphics/icons/mini-kfaenza/download-manager.png diff --git a/resources/graphics/icons/mini-kfaenza/download-manager.png b/resources/graphics/icons/mini-kfaenza/download-manager.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb5db6791802739400ccfb0275140194e8ecdd7 GIT binary patch literal 1651 zcmV-(28{WMP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ>`AI}URCwCdT3c)sRT%#Mv%531?Or4#g|c9XrP$H}DI#E7Xa#ChDv}tD@%kju zXHCRtFhmohKKSH|(ZmFAi5er~GBS61c-xu<#EGY}UXs4j#&_KyVUN69kD#wy#+W0FbDO zZr!$H%e(KKIJ#%|x;kCg*R3S!v)SxO--VH@$6h`05s8`smP0oHfS4IX6o9C$|Kjsc zkMG=Be}6n?j@q_utt0?}KtP*J8`YOCUHR>)r=NWba_|Z>+b)0zfZEZ~(f4iJUeP`u z2n0}FUHuY(L1vzE{X7I6C8aF1_&gdVVs+mPLf3V_ zjG`O^^JOdqARKf`i94r=bPkk6egu)$A!qth183xU>m}SLU(I75|g-8$t3Ez9mWTE8?Vj_ZVGYJw9!XE%Z0=CUcd8b$q3jm@V7h*8X ztm%7inJy$;E8N0DszD3@CqH?4Ohp*QAf{!bQCFiPAf`$^qjFy{8l8Kt;(F$}_iFsc zfRqxSoqXjFWpBM5rG%~O$phX&yod$JE!w=a@7l1~9?u4}@N99m;UX6B zbRqIOKt!ZznjwS;jQty2Rop9tZ_PUUXfhp1czwU7DmN~rv@OdrJ-mX8b!1eel;CVO zo7FVU`0(R%8!ukG9Ppyccs%aAlrX{uj=uQ8Jzm<~wX4y7{aDL?mSts~q~%o$d6v^u zECi&K(y}b`h3EJGUA;EG;q2M|kYN~#a|J-xbyQVV-J(;|G||@9F!RX6_a!ashAE5C zVL>8WU;)ATRiuNmWi*mb9q!%%02|KzG7vHh0|fQTvap6~YipP}+`S_ijighyU7X7u z0lo9UQbR2lM0ZynL{HDvvMd1xvSt?h_HLQ!?pj)SFBwZNC8U%x9?OFu(1xDgt06-- z{4-F2E0~svy{+{#hq{`Q@mM+~{bkYOJ#h)iM8;$3)S<2>kih!$=dWo-*uOh57}-n~ zdt2+QuFj@Z3BoUsb-`e(6cEwKM5?o6I{`?X@4co~ge#U-0|S{%1}!a{tPYi2$bmU^9I4pFijIJ&6}-*2O5WC(aGde0b8mIDNiO`5C;!50zjhg z!jKjYhv%N^@O<;0+OmZ&P>g3LCe@}!N;wNc1Srwh_h%jifQ*?zbMq!^e|y7lEIO&` zHih+*_h1WUE*Hf9_686r@#}>l4FDe4Q)4~YzNKv8=f!~cV5{8Mu2M=FsT@zX?W+TT z1OT+{s~e6~jwcn^W-%9n*Hi+_vGN&vBKgGQHP-=PdU|5IjDYps)Kj_R#rYtnrlzJ{ zt6-UyV*y&o{i1Pq|A19FJgQeO*JaXK%k{kBQN6lm4xwq(=00L`0`fpV0umo|k#fg>C}& FormMain::allActions() { // Add basic actions. actions << m_ui->m_actionSettings; + actions << m_ui->m_actionDownloadManager; actions << m_ui->m_actionImportFeeds; actions << m_ui->m_actionExportFeeds; actions << m_ui->m_actionRestoreDatabaseSettings; @@ -206,6 +207,7 @@ void FormMain::setupIcons() { IconFactory *icon_theme_factory = qApp->icons(); // Setup icons of this main window. + m_ui->m_actionDownloadManager->setIcon(icon_theme_factory->fromTheme("download-manager")); m_ui->m_actionSettings->setIcon(icon_theme_factory->fromTheme("application-settings")); m_ui->m_actionQuit->setIcon(icon_theme_factory->fromTheme("application-exit")); m_ui->m_actionRestart->setIcon(icon_theme_factory->fromTheme("go-refresh")); @@ -350,6 +352,7 @@ void FormMain::createConnections() { // Menu "Tools" connections. connect(m_ui->m_actionSettings, SIGNAL(triggered()), this, SLOT(showSettings())); + connect(m_ui->m_actionDownloadManager, SIGNAL(triggered()), m_ui->m_tabWidget, SLOT(showDownloadManager())); // Menu "Help" connections. connect(m_ui->m_actionAboutGuard, SIGNAL(triggered()), this, SLOT(showAbout())); diff --git a/src/gui/formmain.ui b/src/gui/formmain.ui index 599624aaf..75a352c05 100755 --- a/src/gui/formmain.ui +++ b/src/gui/formmain.ui @@ -100,6 +100,7 @@ + @@ -637,6 +638,11 @@ + + + &Downloads + + diff --git a/src/gui/tabbar.cpp b/src/gui/tabbar.cpp index 50944623d..56e44a0b9 100755 --- a/src/gui/tabbar.cpp +++ b/src/gui/tabbar.cpp @@ -37,6 +37,7 @@ TabBar::~TabBar() { void TabBar::setTabType(int index, const TabBar::TabType &type) { switch (type) { + case TabBar::DownloadManager: case TabBar::Closable: { PlainToolButton *close_button = new PlainToolButton(this); @@ -46,9 +47,7 @@ void TabBar::setTabType(int index, const TabBar::TabType &type) { close_button->setFixedSize(iconSize()); // Close underlying tab when button is clicked. - connect(close_button, SIGNAL(clicked()), - this, SLOT(closeTabViaButton())); - + connect(close_button, SIGNAL(clicked()),this, SLOT(closeTabViaButton())); setTabButton(index, QTabBar::RightSide, close_button); break; } diff --git a/src/gui/tabwidget.cpp b/src/gui/tabwidget.cpp index fe4f9ca2b..90d5eede2 100755 --- a/src/gui/tabwidget.cpp +++ b/src/gui/tabwidget.cpp @@ -86,6 +86,20 @@ void TabWidget::openMainMenu() { m_menuMain->exec(mapToGlobal(button_position)); } +void TabWidget::showDownloadManager() { + for (int i = 0; i < count(); i++) { + if (QString(widget(i)->metaObject()->className()) == "DownloadManager") { + setCurrentIndex(i); + return; + } + } + + // Download manager is not opened. Create tab with it. + qApp->downloadManager()->setParent(this); + addTab(qApp->downloadManager(), qApp->icons()->fromTheme("download-manager"), tr("Downloads"), TabBar::DownloadManager); + setCurrentIndex(count() - 1); +} + void TabWidget::checkTabBarVisibility() { bool should_be_visible = count() > 1 || !qApp->settings()->value(GROUP(GUI), SETTING(GUI::HideTabBarIfOnlyOneTab)).toBool(); @@ -172,7 +186,11 @@ void TabWidget::setupIcons() { bool TabWidget::closeTab(int index) { if (tabBar()->tabType(index) == TabBar::Closable) { - removeTab(index); + removeTab(index, true); + return true; + } + else if (tabBar()->tabType(index) == TabBar::DownloadManager) { + removeTab(index, false); return true; } else { @@ -216,8 +234,11 @@ void TabWidget::closeAllTabsExceptCurrent() { } } -void TabWidget::removeTab(int index) { - widget(index)->deleteLater(); +void TabWidget::removeTab(int index, bool clear_from_memory) { + if (clear_from_memory) { + widget(index)->deleteLater(); + } + QTabWidget::removeTab(index); } diff --git a/src/gui/tabwidget.h b/src/gui/tabwidget.h index a9114569d..57e6af3db 100644 --- a/src/gui/tabwidget.h +++ b/src/gui/tabwidget.h @@ -47,7 +47,7 @@ class TabWidget : public QTabWidget { const TabBar::TabType &type = TabBar::Closable); int insertTab(int index, QWidget *widget, const QIcon &icon, const QString &label, const TabBar::TabType &type = TabBar::NonClosable); - void removeTab(int index); + void removeTab(int index, bool clear_from_memory); // Returns tab bar. inline TabBar *tabBar() { @@ -98,8 +98,11 @@ class TabWidget : public QTabWidget { bool closeTab(int index); bool closeCurrentTab(); + // Opens main menu. void openMainMenu(); + void showDownloadManager(); + // Closes all "closable" tabs except the active tab. void closeAllTabsExceptCurrent(); diff --git a/src/miscellaneous/application.cpp b/src/miscellaneous/application.cpp index 67d308981..09f41591e 100755 --- a/src/miscellaneous/application.cpp +++ b/src/miscellaneous/application.cpp @@ -33,7 +33,7 @@ Application::Application(const QString &id, int &argc, char **argv) : QtSingleApplication(id, argc, argv), m_closeLock(NULL), m_userActions(QList()), m_mainForm(NULL), m_trayIcon(NULL), m_settings(NULL), m_system(NULL), m_skins(NULL), - m_localization(NULL), m_icons(NULL), m_database(NULL), m_shouldRestart(false) { + m_localization(NULL), m_icons(NULL), m_database(NULL), m_downloadManager(NULL), m_shouldRestart(false) { connect(this, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit())); connect(this, SIGNAL(commitDataRequest(QSessionManager&)), this, SLOT(onCommitData(QSessionManager&))); connect(this, SIGNAL(saveStateRequest(QSessionManager&)), this, SLOT(onSaveState(QSessionManager&))); diff --git a/src/miscellaneous/application.h b/src/miscellaneous/application.h index 294e30724..cf38fc5a7 100755 --- a/src/miscellaneous/application.h +++ b/src/miscellaneous/application.h @@ -27,6 +27,7 @@ #include "miscellaneous/localization.h" #include "miscellaneous/databasefactory.h" #include "gui/systemtrayicon.h" +#include "network-web/downloadmanager.h" #include #include @@ -93,6 +94,14 @@ class Application : public QtSingleApplication { IconFactory *icons(); + inline DownloadManager *downloadManager() { + if (m_downloadManager == NULL) { + m_downloadManager = new DownloadManager(); + } + + return m_downloadManager; + } + inline Settings *settings() { if (m_settings == NULL) { m_settings = Settings::setupSettings(this); @@ -205,6 +214,7 @@ class Application : public QtSingleApplication { Localization *m_localization; IconFactory *m_icons; DatabaseFactory *m_database; + DownloadManager *m_downloadManager; bool m_shouldRestart; }; diff --git a/src/network-web/downloadmanager.cpp b/src/network-web/downloadmanager.cpp index 1be8d12ec..18e3f5e32 100644 --- a/src/network-web/downloadmanager.cpp +++ b/src/network-web/downloadmanager.cpp @@ -23,9 +23,15 @@ DownloadManager::DownloadManager(QWidget *parent) : TabContent(parent), m_ui(new } DownloadManager::~DownloadManager() { + qDebug("Destroying DownloadManager."); delete m_ui; } // TODO: pokračovat, převzít downloaditem, edittableview z arory // přistup k downloadmanageru bude z qApp->downloadManager(), // bude se využívat pro stahování skrze webview + + +WebBrowser *DownloadManager::webBrowser() { + return NULL; +} diff --git a/src/network-web/downloadmanager.h b/src/network-web/downloadmanager.h index 561812d33..b441d94cb 100644 --- a/src/network-web/downloadmanager.h +++ b/src/network-web/downloadmanager.h @@ -34,6 +34,8 @@ class DownloadManager : public TabContent { explicit DownloadManager(QWidget *parent = 0); virtual ~DownloadManager(); + WebBrowser *webBrowser(); + private: Ui::DownloadManager *m_ui; }; diff --git a/src/network-web/webview.cpp b/src/network-web/webview.cpp index b8eec7fe4..bacafc312 100755 --- a/src/network-web/webview.cpp +++ b/src/network-web/webview.cpp @@ -52,7 +52,7 @@ WebView::WebView(QWidget *parent) } WebView::~WebView() { - qDebug("Destroying BaseWebView."); + qDebug("Destroying WebView."); } void WebView::onLoadFinished(bool ok) {