1 /* Copyright (C) 2003-2009 Jesper K. Pedersen <blackie@kde.org>
3 This program is free software; you can redistribute it and/or
4 modify it under the terms of the GNU General Public
5 License as published by the Free Software Foundation; either
6 version 2 of the License, or (at your option) any later version.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program; see the file COPYING. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
18 #include "ThumbnailFacade.h"
20 #include "ThumbnailCache.h"
21 #include "Settings/SettingsData.h"
22 #include "ImageManager/Manager.h"
23 #include "ThumbnailToolTip.h"
24 #include "ThumbnailPainter.h"
25 #include "ThumbnailModel.h"
26 #include "CellGeometry.h"
27 #include "ThumbnailWidget.h"
29 ThumbnailView::ThumbnailFacade
* ThumbnailView::ThumbnailFacade::_instance
= 0;
30 ThumbnailView::ThumbnailFacade::ThumbnailFacade()
31 :_cellGeometry( new CellGeometry(this) ),
32 _model( 0 ), _thumbnailCache( 0 ),_widget( 0 ), _painter( 0 ), _toolTip( 0 )
34 // To avoid one of the components references one of the other before it has been initialized, we first construct them all with null.
35 _cellGeometry
= new CellGeometry(this);
36 _thumbnailCache
= new ThumbnailCache
;
37 _model
= new ThumbnailModel(this);
38 _widget
= new ThumbnailWidget(this);
39 _painter
= new ThumbnailPainter(this);
40 _toolTip
= new ThumbnailToolTip( _widget
);
42 connect( _widget
, SIGNAL( showImage( const DB::ResultId
& ) ),
43 this, SIGNAL( showImage( const DB::ResultId
& ) ) );
44 connect( _widget
, SIGNAL( showSelection() ),
45 this, SIGNAL( showSelection() ) );
46 connect( _widget
, SIGNAL( fileIdUnderCursorChanged( const DB::ResultId
& ) ),
47 this, SIGNAL( fileIdUnderCursorChanged( const DB::ResultId
& ) ) );
48 connect( _widget
, SIGNAL( currentDateChanged( const QDateTime
& ) ),
49 this, SIGNAL( currentDateChanged( const QDateTime
& ) ) );
50 connect( _model
, SIGNAL( selectionChanged(int) ),
51 this, SIGNAL( selectionChanged(int) ) );
52 connect( _model
, SIGNAL( collapseAllStacksEnabled(bool ) ),
53 this, SIGNAL( collapseAllStacksEnabled(bool ) ) );
54 connect( _model
, SIGNAL( expandAllStacksEnabled(bool) ),
55 this, SIGNAL( expandAllStacksEnabled(bool ) ) );
60 QWidget
* ThumbnailView::ThumbnailFacade::gui()
65 void ThumbnailView::ThumbnailFacade::gotoDate( const DB::ImageDate
& date
, bool b
)
67 _widget
->gotoDate( date
, b
);
70 void ThumbnailView::ThumbnailFacade::setCurrentItem( const DB::ResultId
& id
)
72 model()->clearSelection();
73 model()->select( id
);
74 model()->setCurrentItem(id
);
76 Cell cell
= model()->positionForMediaId( id
);
77 widget()->ensureCellVisible( cell
.row(), cell
.col() );
80 void ThumbnailView::ThumbnailFacade::reload( bool flushCache
, bool clearSelection
)
82 _widget
->reload( flushCache
, clearSelection
);
85 DB::Result
ThumbnailView::ThumbnailFacade::selection(bool keepSortOrderOfDatabase
) const
87 return _model
->selection( keepSortOrderOfDatabase
);
90 DB::Result
ThumbnailView::ThumbnailFacade::imageList(Order order
) const
92 return _model
->imageList(order
);
95 DB::ResultId
ThumbnailView::ThumbnailFacade::mediaIdUnderCursor() const
97 return _widget
->mediaIdUnderCursor();
100 DB::ResultId
ThumbnailView::ThumbnailFacade::currentItem() const
102 return _model
->currentItem();
105 void ThumbnailView::ThumbnailFacade::setImageList(const DB::Result
& list
)
107 _model
->setImageList( list
);
110 void ThumbnailView::ThumbnailFacade::setSortDirection( SortDirection direction
)
112 _model
->setSortDirection( direction
);
115 void ThumbnailView::ThumbnailFacade::selectAll()
120 void ThumbnailView::ThumbnailFacade::showToolTipsOnImages( bool on
)
122 _toolTip
->setActive( on
);
125 void ThumbnailView::ThumbnailFacade::repaintScreen()
127 _widget
->repaintScreen();
130 void ThumbnailView::ThumbnailFacade::toggleStackExpansion(const DB::ResultId
& id
)
132 _model
->toggleStackExpansion(id
);
135 void ThumbnailView::ThumbnailFacade::collapseAllStacks()
137 _model
->collapseAllStacks();
140 void ThumbnailView::ThumbnailFacade::expandAllStacks()
142 _model
->expandAllStacks();
145 void ThumbnailView::ThumbnailFacade::updateDisplayModel()
147 _model
->updateDisplayModel();
150 void ThumbnailView::ThumbnailFacade::changeSingleSelection(const DB::ResultId
& id
)
152 _model
->changeSingleSelection(id
);
155 ThumbnailView::ThumbnailModel
* ThumbnailView::ThumbnailFacade::model()
160 ThumbnailView::CellGeometry
* ThumbnailView::ThumbnailFacade::cellGeometry()
162 return _cellGeometry
;
165 ThumbnailView::ThumbnailWidget
* ThumbnailView::ThumbnailFacade::widget()
170 ThumbnailView::ThumbnailPainter
* ThumbnailView::ThumbnailFacade::painter()
175 ThumbnailView::ThumbnailFacade
* ThumbnailView::ThumbnailFacade::instance()
177 Q_ASSERT( _instance
);
181 ThumbnailView::ThumbnailCache
* ThumbnailView::ThumbnailFacade::cache()
183 return _thumbnailCache
;
185 void ThumbnailView::ThumbnailFacade::slotRecreateThumbnail()
187 Q_FOREACH( const DB::ResultId
& id
, model()->selectionSet() ) {
188 const DB::ImageInfoPtr info
= id
.fetchInfo();
189 const QString fileName
= info
->fileName(DB::AbsolutePath
);
190 ImageManager::Manager::instance()->removeThumbnail( fileName
);
192 int size
= Settings::SettingsData::instance()->thumbSize();
193 ImageManager::ImageRequest
* request
= new ImageManager::ImageRequest( fileName
, QSize(size
,size
), info
->angle(), painter() );
194 request
->setPriority( ImageManager::BatchTask
);
195 ImageManager::Manager::instance()->load( request
);