1 /* ============================================================
2  *
3  * This file is a part of digiKam project
4  * https://www.digikam.org
5  *
6  * Date        : 2009-03-25
7  * Description : Tree View for album models
8  *
9  * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10  * Copyright (C) 2010-2011 by Andi Clemens <andi dot clemens at gmail dot com>
11  * Copyright (C) 2014      by Mohamed_Anwer <m_dot_anwer at gmx dot com>
12  * Copyright (C) 2014      by Michael G. Hansen <mike at mghansen dot de>
13  * Copyright (C) 2009-2021 by Gilles Caulier <caulier dot gilles 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 "searchtreeview.h"
29 
30 // Local includes
31 
32 #include "abstractalbumtreeview_p.h"
33 
34 namespace Digikam
35 {
36 
SearchTreeView(QWidget * const parent,Flags flags)37 SearchTreeView::SearchTreeView(QWidget* const parent, Flags flags)
38     : AbstractCheckableAlbumTreeView(parent, flags),
39       m_filteredModel               (nullptr)
40 {
41     setRootIsDecorated(false);
42 
43     if (flags & CreateDefaultModel)
44     {
45         setAlbumModel(new SearchModel(this));
46     }
47 
48     if (flags & CreateDefaultFilterModel) // must set again!
49     {
50         setAlbumFilterModel(new SearchFilterModel(this), albumFilterModel());
51     }
52 }
53 
~SearchTreeView()54 SearchTreeView::~SearchTreeView()
55 {
56 }
57 
setAlbumModel(SearchModel * const model)58 void SearchTreeView::setAlbumModel(SearchModel* const model)
59 {
60     AbstractCheckableAlbumTreeView::setAlbumModel(model);
61 
62     if (m_filteredModel)
63     {
64         m_filteredModel->setSourceSearchModel(model);
65     }
66 }
67 
albumModel() const68 SearchModel* SearchTreeView::albumModel() const
69 {
70     return static_cast<SearchModel*>(m_albumModel);
71 }
72 
setAlbumFilterModel(SearchFilterModel * const filteredModel,CheckableAlbumFilterModel * const filterModel)73 void SearchTreeView::setAlbumFilterModel(SearchFilterModel* const filteredModel, CheckableAlbumFilterModel* const filterModel)
74 {
75     m_filteredModel = filteredModel;
76     AbstractCheckableAlbumTreeView::setAlbumFilterModel(filterModel);
77 
78     // hook in: source album model -> filtered model -> album filter model
79 
80     albumFilterModel()->setSourceFilterModel(m_filteredModel);
81 }
82 
filteredModel() const83 SearchFilterModel* SearchTreeView::filteredModel() const
84 {
85     return m_filteredModel;
86 }
87 
currentAlbum() const88 SAlbum* SearchTreeView::currentAlbum() const
89 {
90     return dynamic_cast<SAlbum*> (m_albumFilterModel->albumForIndex(currentIndex()));
91 }
92 
setCurrentAlbums(const QList<Album * > & albums,bool selectInAlbumManager)93 void SearchTreeView::setCurrentAlbums(const QList<Album*>& albums, bool selectInAlbumManager)
94 {
95     AbstractCheckableAlbumTreeView::setCurrentAlbums(albums, selectInAlbumManager);
96 }
97 
setCurrentAlbum(int albumId,bool selectInAlbumManager)98 void SearchTreeView::setCurrentAlbum(int albumId, bool selectInAlbumManager)
99 {
100     SAlbum* const album = AlbumManager::instance()->findSAlbum(albumId);
101     setCurrentAlbums(QList<Album*>() << album, selectInAlbumManager);
102 }
103 
104 } // namespace Digikam
105