1 /* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2009-12-05
7 * Description : Side Bar Widget for the search.
8 *
9 * Copyright (C) 2009-2010 by Johannes Wienke <languitar at semipol dot de>
10 * Copyright (C) 2010-2021 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * Copyright (C) 2012 by Andi Clemens <andi dot clemens at gmail dot com>
12 * Copyright (C) 2014 by Mohamed_Anwer <m_dot_anwer at gmx dot com>
13 * Copyright (C) 2010 by Aditya Bhatt <adityabhatt1991 at gmail dot com>
14 *
15 * This program is free software; you can redistribute it
16 * and/or modify it under the terms of the GNU General
17 * Public License as published by the Free Software Foundation;
18 * either version 2, or (at your option)
19 * any later version.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * ============================================================ */
27
28 #include "searchsidebarwidget.h"
29
30 // Qt includes
31
32 #include <QApplication>
33 #include <QStyle>
34 #include <QIcon>
35
36 // KDE includes
37
38 #include <kconfiggroup.h>
39 #include <klocalizedstring.h>
40
41 // Local includes
42
43 #include "digikam_debug.h"
44 #include "albumpointer.h"
45 #include "applicationsettings.h"
46 #include "editablesearchtreeview.h"
47 #include "searchfolderview.h"
48 #include "searchtabheader.h"
49 #include "searchtextbardb.h"
50 #include "searchtreeview.h"
51
52 namespace Digikam
53 {
54
55 class Q_DECL_HIDDEN SearchSideBarWidget::Private
56 {
57 public:
58
Private()59 explicit Private()
60 : searchSearchBar(nullptr),
61 searchTreeView (nullptr),
62 searchTabHeader(nullptr)
63 {
64 }
65
66 SearchTextBarDb* searchSearchBar;
67 NormalSearchTreeView* searchTreeView;
68 SearchTabHeader* searchTabHeader;
69 };
70
SearchSideBarWidget(QWidget * const parent,SearchModel * const searchModel,SearchModificationHelper * const searchModificationHelper)71 SearchSideBarWidget::SearchSideBarWidget(QWidget* const parent,
72 SearchModel* const searchModel,
73 SearchModificationHelper* const searchModificationHelper)
74 : SidebarWidget(parent),
75 d (new Private)
76 {
77 setObjectName(QLatin1String("Search Sidebar"));
78 setProperty("Shortcut", Qt::CTRL + Qt::SHIFT + Qt::Key_F6);
79
80 const int spacing = QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing);
81
82 QVBoxLayout* const layout = new QVBoxLayout(this);
83
84 d->searchTabHeader = new SearchTabHeader(this);
85 d->searchTreeView = new NormalSearchTreeView(this, searchModel, searchModificationHelper);
86 d->searchTreeView->setConfigGroup(getConfigGroup());
87 d->searchTreeView->filteredModel()->listNormalSearches();
88 d->searchTreeView->filteredModel()->setListTemporarySearches(true);
89 d->searchTreeView->setAlbumManagerCurrentAlbum(true);
90 d->searchSearchBar = new SearchTextBarDb(this, QLatin1String("ItemIconViewSearchSearchBar"));
91 d->searchSearchBar->setModel(d->searchTreeView->filteredModel(),
92 AbstractAlbumModel::AlbumIdRole, AbstractAlbumModel::AlbumTitleRole);
93 d->searchSearchBar->setFilterModel(d->searchTreeView->albumFilterModel());
94
95 layout->addWidget(d->searchTabHeader);
96 layout->addWidget(d->searchTreeView);
97 layout->setStretchFactor(d->searchTreeView, 1);
98 layout->addWidget(d->searchSearchBar);
99 layout->setContentsMargins(0, 0, spacing, 0);
100
101 connect(d->searchTreeView, SIGNAL(newSearch()),
102 d->searchTabHeader, SLOT(newAdvancedSearch()));
103
104 connect(d->searchTreeView, SIGNAL(editSearch(SAlbum*)),
105 d->searchTabHeader, SLOT(editSearch(SAlbum*)));
106
107 connect(d->searchTreeView, SIGNAL(currentAlbumChanged(Album*)),
108 d->searchTabHeader, SLOT(selectedSearchChanged(Album*)));
109
110 connect(d->searchTabHeader, SIGNAL(searchShallBeSelected(QList<Album*>)),
111 d->searchTreeView, SLOT(setCurrentAlbums(QList<Album*>)));
112 }
113
~SearchSideBarWidget()114 SearchSideBarWidget::~SearchSideBarWidget()
115 {
116 delete d;
117 }
118
setActive(bool active)119 void SearchSideBarWidget::setActive(bool active)
120 {
121 if (active)
122 {
123 AlbumManager::instance()->setCurrentAlbums(QList<Album*>() << d->searchTreeView->currentAlbum());
124 d->searchTabHeader->selectedSearchChanged(d->searchTreeView->currentAlbum());
125 }
126 }
127
doLoadState()128 void SearchSideBarWidget::doLoadState()
129 {
130 d->searchTreeView->loadState();
131 }
132
doSaveState()133 void SearchSideBarWidget::doSaveState()
134 {
135 d->searchTreeView->saveState();
136 }
137
applySettings()138 void SearchSideBarWidget::applySettings()
139 {
140 }
141
changeAlbumFromHistory(const QList<Album * > & album)142 void SearchSideBarWidget::changeAlbumFromHistory(const QList<Album*>& album)
143 {
144 d->searchTreeView->setCurrentAlbums(album);
145 }
146
getIcon()147 const QIcon SearchSideBarWidget::getIcon()
148 {
149 return QIcon::fromTheme(QLatin1String("edit-find"));
150 }
151
getCaption()152 const QString SearchSideBarWidget::getCaption()
153 {
154 return i18nc("Advanced search images, access stored searches", "Search");
155 }
156
newKeywordSearch()157 void SearchSideBarWidget::newKeywordSearch()
158 {
159 d->searchTabHeader->newKeywordSearch();
160 }
161
newAdvancedSearch()162 void SearchSideBarWidget::newAdvancedSearch()
163 {
164 d->searchTabHeader->newAdvancedSearch();
165 }
166
167 } // namespace Digikam
168