Plug the search widget in the main window (top dock)

Move all dock-related initialization to a dedicated function
This commit is contained in:
Luca Beltrame 2015-02-15 18:32:38 +01:00
parent 45016bd3a2
commit bc63d4e575
2 changed files with 91 additions and 24 deletions

View file

@ -44,6 +44,7 @@
#include "model/danboorupoolmodel.h"
#include "mainwindow.h"
#include "danbooruconnectwidget.h"
#include "danboorusearchwidget.h"
#include "danboorusettings.h"
#include "generalpage.h"
@ -62,8 +63,10 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
m_model(new DanbooruPostModel(this)),
m_poolModel(new DanbooruPoolModel(this)),
m_service(new DanbooruService()),
m_connectWidget(nullptr),
m_searchWidget(new DanbooruSearchWidget(this)),
m_tableView(new QTableView(this)),
m_cache(0)
m_cache(nullptr)
{
m_service->setParent(this);
@ -99,21 +102,11 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
QVector<QUrl> boardsList = { QUrl("http://konachan.com"), QUrl("https://yande.re") };
m_connectWidget = new DanbooruConnectWidget(boardsList);
m_connectWidget = new DanbooruConnectWidget(boardsList, this);
statusBar()->addPermanentWidget(m_connectWidget);
m_connectWidget->hide();
// Set up PoolWidget
m_tableView->setModel(m_poolModel);
QDockWidget* dockWidget = new QDockWidget(i18n("Pools"), this);
dockWidget->setAllowedAreas(Qt::BottomDockWidgetArea);
dockWidget->setWidget(m_tableView);
dockWidget->setObjectName("PoolView");
// Prevent the use of winId() when detached, leads to QQuickWidget bugs
dockWidget->setFeatures(QDockWidget::DockWidgetClosable);
addDockWidget(Qt::BottomDockWidgetArea, dockWidget);
m_tableView->hide();
dockWidget->hide();
setupDockWidgets();
// then, setup our actions
setupActions();
@ -139,10 +132,12 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
actionCollection()->action(QLatin1String("find"))->setEnabled(true);
actionCollection()->action(QLatin1String("poolDownload"))->setEnabled(true);
if (DanbooruSettings::self()->autoDownload()) {
m_view->rootObject()->setProperty("poolMode", QVariant(false));
m_connectWidget->hide();
m_service->setPostTags(QStringList());
m_service->getPostList();
}
});
@ -167,9 +162,20 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
});
connect(dockWidget, &QDockWidget::visibilityChanged, [this](bool visible) {
actionCollection()->action(QLatin1String("poolDownload"))->setChecked(visible);
connect(m_searchWidget, &DanbooruSearchWidget::accepted, [this]() {
QDockWidget* searchDockWidget = findChild<QDockWidget*>(QLatin1String("SearchView"));
searchDockWidget->hide();
m_model->clear();
m_service->setPostTags(m_searchWidget->selectedTags());
m_view->rootObject()->setProperty("poolMode", QVariant(false));
m_service->getPostList();
});
connect(m_searchWidget, &DanbooruSearchWidget::rejected, [this]() {
QDockWidget* searchDockWidget = findChild<QDockWidget*>(QLatin1String("SearchView"));
searchDockWidget->hide();
});
}
@ -189,6 +195,7 @@ void DanbooruMainWindow::loadSettings()
}
void DanbooruMainWindow::setupActions()
{
@ -199,7 +206,7 @@ void DanbooruMainWindow::setupActions()
QAction *fetchAction = new QAction(QIcon::fromTheme(QLatin1String("download")),
i18n("Download"), this);
QAction *findAction = new QAction(QIcon::fromTheme(QLatin1String("edit-find")),
KToggleAction *findAction = new KToggleAction(QIcon::fromTheme(QLatin1String("edit-find")),
i18n("Search"), this);
KToggleAction *poolAction = new KToggleAction(QIcon::fromTheme(QLatin1String("image-x-generic")),
i18n("Pools"), this);
@ -208,6 +215,9 @@ void DanbooruMainWindow::setupActions()
findAction->setEnabled(false);
poolAction->setEnabled(false);
poolAction->setChecked(false);
findAction->setChecked(false);
actionCollection()->addAction(QLatin1String("connect"), connectAction);
actionCollection()->addAction(QLatin1String("fetch"), fetchAction);
actionCollection()->addAction(QLatin1String("find"), findAction);
@ -215,19 +225,19 @@ void DanbooruMainWindow::setupActions()
actionCollection()->setDefaultShortcut(connectAction, KStandardShortcut::Open);
actionCollection()->setDefaultShortcut(findAction, KStandardShortcut::Find);
// actionCollection()->removeAction(actionCollection()->action("help_contents"));
KStandardAction::quit(qApp, SLOT(quit()), actionCollection());
KStandardAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
connect(connectAction, &QAction::triggered, this, &DanbooruMainWindow::connectToBoard);
connect(fetchAction, &QAction::triggered, this, &DanbooruMainWindow::downloadPosts);
connect(poolAction, &KToggleAction::toggled, [this](bool checked) {
if (!m_service) {
return;
}
QDockWidget* dockWidget = findChild<QDockWidget*>(QLatin1String("PoolView"));
QDockWidget* poolDockWidget = findChild<QDockWidget*>(QLatin1String("PoolView"));
if (checked) {
@ -235,16 +245,69 @@ void DanbooruMainWindow::setupActions()
m_service->getPoolList();
}
dockWidget->show();
poolDockWidget->show();
m_tableView->show();
} else {
dockWidget->hide();
poolDockWidget->hide();
m_tableView->hide();
}
});
connect(findAction, &KToggleAction::toggled, [this](bool checked) {
QDockWidget* searchDockWidget = findChild<QDockWidget*>(QLatin1String("SearchView"));
if (checked) {
searchDockWidget->show();
m_searchWidget->show();
} else {
searchDockWidget->hide();
m_searchWidget->hide();
}
});
}
void DanbooruMainWindow::setupDockWidgets() {
// Set up PoolWidget
m_tableView->setModel(m_poolModel);
QDockWidget* poolDockWidget = new QDockWidget(i18n("Pools"), this);
poolDockWidget->setAllowedAreas(Qt::BottomDockWidgetArea);
poolDockWidget->setWidget(m_tableView);
poolDockWidget->setObjectName("PoolView");
// Prevent the use of winId() when detached, leads to QQuickWidget bugs
poolDockWidget->setFeatures(QDockWidget::DockWidgetClosable);
addDockWidget(Qt::BottomDockWidgetArea, poolDockWidget);
m_tableView->hide();
poolDockWidget->hide();
// Find widget
QDockWidget *searchDockWidget = new QDockWidget(QLatin1String(""), this);
searchDockWidget->setAllowedAreas(Qt::TopDockWidgetArea);
searchDockWidget->setWidget(m_searchWidget);
searchDockWidget->setObjectName("SearchView");
// FIXME: Get rid of the close button in the widget
searchDockWidget->setFeatures(QDockWidget::NoDockWidgetFeatures);
addDockWidget(Qt::TopDockWidgetArea, searchDockWidget);
searchDockWidget->hide();
m_searchWidget->hide();
searchDockWidget->setTitleBarWidget(new QWidget(this));
// Connections
connect(poolDockWidget, &QDockWidget::visibilityChanged, [this](bool visible) {
actionCollection()->action(QLatin1String("poolDownload"))->setChecked(visible);
});
connect(searchDockWidget, &QDockWidget::visibilityChanged, [this](bool visible) {
actionCollection()->action(QLatin1String("find"))->setChecked(visible);
});
}
void DanbooruMainWindow::connectToBoard()
@ -267,6 +330,7 @@ void DanbooruMainWindow::downloadPosts()
return;
}
m_model->clear();
m_service->setPostTags(QStringList());
m_view->rootObject()->setProperty("poolMode", QVariant(false));
m_service->getPostList();

View file

@ -43,6 +43,7 @@ class DanbooruService;
class DanbooruPostModel;
class DanbooruPoolModel;
class DanbooruConnectWidget;
class DanbooruSearchWidget;
/**
* This class serves as the main window for danbooru_client. It handles the
@ -62,6 +63,7 @@ private:
DanbooruPoolModel *m_poolModel;
DanbooruService *m_service;
DanbooruConnectWidget *m_connectWidget;
DanbooruSearchWidget *m_searchWidget;
QTableView *m_tableView;
KImageCache *m_cache;
static QHash<int, DanbooruPost::Rating> ratingMap;
@ -79,6 +81,7 @@ public:
private:
void setupActions();
void setupDockWidgets();
void setupConnections();
private Q_SLOTS: