Plug the search widget in the main window (top dock)
Move all dock-related initialization to a dedicated function
This commit is contained in:
		
					parent
					
						
							
								45016bd3a2
							
						
					
				
			
			
				commit
				
					
						bc63d4e575
					
				
			
		
					 2 changed files with 91 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
        m_view->rootObject()->setProperty("poolMode", QVariant(false));
 | 
			
		||||
        m_connectWidget->hide();
 | 
			
		||||
        m_service->setPostTags(QStringList());
 | 
			
		||||
        m_service->getPostList();
 | 
			
		||||
        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();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue