00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include <qwidget.h>
00013
#include <qlayout.h>
00014
#include <qlabel.h>
00015
#include <qfont.h>
00016
#include <qpixmap.h>
00017
#include <qapplication.h>
00018
#include <qtoolbutton.h>
00019
#include <qtooltip.h>
00020
00021
00022
#include "subalbumsWidget.h"
00023
#include "subalbumPreviewWidget.h"
00024
#include "subalbumsIconView.h"
00025
#include "layoutWidget.h"
00026
#include "window.h"
00027
#include "titleWidget.h"
00028
#include "dialogs/questionDialog.h"
00029
#include "../config.h"
00030
#include "../backend/album.h"
00031
#include "../backend/subalbum.h"
00032
#include "../backend/tools/guiTools.h"
00033
#include "../configuration/configuration.h"
00034
00035
00036 SubalbumsWidget::SubalbumsWidget(
QWidget *parent,
00037
const char* name ) :
00038
QWidget(parent,name)
00039 {
00040
00041
layout = (
LayoutWidget*)parent;
00042
00043
00044
QLabel* collectionsHeader =
new QLabel(
this );
00045 collectionsHeader->setText( tr(
"Collections:") );
00046 QFont labelFont = collectionsHeader->font();
00047 labelFont.setWeight(QFont::Bold);
00048 collectionsHeader->setFont( labelFont );
00049
00050
00051
collections =
new SubalbumsIconView(
this );
00052
00053
00054
collections->setSelectionMode( QIconView::Single ) ;
00055
00056
00057
collections->setGridX(1);
00058
00059
00060
collections->setItemTextPos( QIconView::Right );
00061
00062
00063
collections->setFrameShape ( QFrame::NoFrame );
00064
00065
collections->setMaxItemWidth(500);
00066
collections->setPaletteBackgroundColor( QColor(193, 210, 238) );
00067
collections->setDragAutoScroll(
true);
00068
collections->setAcceptDrops(
true);
00069
collections->setVScrollBarMode( QScrollView::Auto );
00070
collections->setHScrollBarMode( QScrollView::Auto );
00071
00072
00073
currentSelection = NULL;
00074
00075
00076 connect(
collections, SIGNAL(itemHasMoved()), SLOT(
reorder()) );
00077
00078
00079 connect(
collections, SIGNAL(selectionChanged(
QIconViewItem*)),
00080
this, SLOT(
handleSelectionAttempt(
QIconViewItem*)));
00081
00082
00083 QFont buttonFont( qApp->font() );
00084 buttonFont.setBold(
true);
00085 buttonFont.setPointSize( 11 );
00086
00087
createButton =
new QToolButton(
this );
00088
createButton->setTextLabel(tr(
"Create"));
00089
createButton->setIconSet( QPixmap(QString(
IMAGE_PATH)+
"buttonIcons/create.png") );
00090
createButton->setTextPosition(QToolButton::Right);
00091
createButton->setFont( buttonFont );
00092
createButton->setUsesTextLabel(
true );
00093
createButton->setEnabled(
true);
00094
createButton->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
00095 QToolTip::add(
createButton, tr(
"Create a collection and append to subalbum list") );
00096 connect(
createButton, SIGNAL(clicked()), SLOT(
createAction()) );
00097
00098
deleteButton =
new QToolButton(
this );
00099
deleteButton->setTextLabel(tr(
"Delete"));
00100
deleteButton->setIconSet( QPixmap(QString(
IMAGE_PATH)+
"buttonIcons/delete.png") );
00101
deleteButton->setTextPosition(QToolButton::Right);
00102
deleteButton->setFont( buttonFont );
00103
deleteButton->setUsesTextLabel(
true );
00104
deleteButton->setEnabled(
false);
00105
deleteButton->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
00106 QToolTip::add(
deleteButton, tr(
"Delete selected collection and all its contents") );
00107 connect(
deleteButton, SIGNAL(clicked()), SLOT(
deleteAction()) );
00108
00109
00110 QGridLayout* grid =
new QGridLayout(
this, 3, 2, 0 );
00111 grid->addMultiCellWidget( collectionsHeader, 0, 0, 0, 1, Qt::AlignHCenter );
00112 grid->addMultiCellWidget(
collections, 1, 1, 0, 1 );
00113 grid->addWidget(
createButton, 2, 0, Qt::AlignHCenter);
00114 grid->addWidget(
deleteButton, 2, 1, Qt::AlignHCenter);
00115
00116
00117 grid->setRowStretch( 1, 1 );
00118
00119
00120 setPaletteBackgroundColor( QColor(193, 210, 238) );
00121 }
00122
00123 void SubalbumsWidget::createAction()
00124 {
00125
00126
Album* albm =
layout->
getWindow()->
getTitle()->
getAlbum();
00127
Subalbum* newCollection =
new Subalbum( albm, albm->
getNumSubalbums()+1 );
00128 albm->
appendSubalbum( newCollection );
00129
00130
00131
SubalbumPreviewWidget* newCollectionIcon =
new SubalbumPreviewWidget(
collections, newCollection );
00132 newCollectionIcon->setDropEnabled(
true);
00133
selectCollection( newCollectionIcon );
00134
00135
00136
deleteButton->setEnabled(
collections->count() > 1 );
00137 }
00138
00139 void SubalbumsWidget::deleteAction()
00140 {
00141
00142
if(
collections->currentItem() != NULL)
00143 {
00144
00145
00146
bool proceed = !((
Window*)qApp->mainWidget())->getConfig()->getBool(
"alerts",
"showDestructiveAlerts" );
00147
if(!proceed)
00148 {
00149
QuestionDialog sure( tr(
"Delete collection?"),
00150 tr(
"Once deleted a collection and it's contents cannot be brought back unless a saved copy of the album exists."),
00151
"alertIcons/warning.png",
00152
this );
00153 proceed = sure.exec();
00154 }
00155
if(proceed)
00156 {
00157
00158
QIconViewItem* oldSelection =
collections->currentItem();
00159
00160
00161
00162
00163
QIconViewItem* newSelection = oldSelection->nextItem();
00164
if(newSelection == NULL) newSelection = oldSelection->prevItem();
00165
00166
00167
00168
00169
selectCollection( newSelection );
00170
00171
00172
Subalbum* s = ((
SubalbumPreviewWidget*) oldSelection)->getSubalbum();
00173
layout->
getWindow()->
getTitle()->
getAlbum()->
removeSubalbum( s );
00174
00175
00176
delete oldSelection;
00177 oldSelection = NULL;
00178
00179
00180
00181
collections->arrangeItemsInGrid();
00182
if(newSelection != NULL)
collections->ensureItemVisible( newSelection );
00183
00184
00185
deleteButton->setEnabled(
collections->count() > 1 );
00186
00187
00188
layout->
getWindow()->
getTitle()->
updateMenus();
00189 }
00190 }
00191 }
00192
00193 void SubalbumsWidget::refreshSelectedCollectionName()
00194 {
00195
if(
currentSelection != NULL)
00196
currentSelection->setText( ((
SubalbumPreviewWidget*)
currentSelection)->getSubalbum()->getName() );
00197 }
00198
00199 void SubalbumsWidget::updatedSelectedCollectionImage( QPixmap* val)
00200 {
00201
if(
currentSelection != NULL)
00202
currentSelection->setPixmap( *val );
00203 }
00204
00205 void SubalbumsWidget::reorder()
00206 {
00207
00208
collections->sort(
true );
00209
collections->arrangeItemsInGrid();
00210
00211
00212
Album* albm =
layout->
getWindow()->
getTitle()->
getAlbum();
00213 albm->
syncSubalbumList((
SubalbumPreviewWidget*)
collections->firstItem());
00214 }
00215
00216 void SubalbumsWidget::updateButtons(
bool enable)
00217 {
00218
if(enable)
00219 {
00220
createButton->setEnabled(
true );
00221
deleteButton->setEnabled(
buttonsState );
00222 }
00223
else
00224 {
00225
buttonsState =
createButton->isEnabled();
00226
createButton->setEnabled(
false );
00227
deleteButton->setEnabled(
false );
00228 }
00229 }
00230
00231 LayoutWidget*
SubalbumsWidget::getParent() {
return layout; }
00232 QIconViewItem*
SubalbumsWidget::getCurrentSelection() {
return currentSelection; }
00233
00234 Subalbum*
SubalbumsWidget::getSelectedSubalbum()
00235 {
00236
return ((
SubalbumPreviewWidget*)
currentSelection )->getSubalbum();
00237 }
00238
00239 void SubalbumsWidget::refreshCollectionsList()
00240 {
00241
00242
QIconViewItem* current =
collections->firstItem();
00243
while(current != NULL)
00244 {
00245
QIconViewItem* next = current->nextItem();
00246
delete current;
00247 current = next;
00248 }
00249
00250
00251
00252
collections->clear();
00253
00254
00255
currentSelection = NULL;
00256
00257
00258
Subalbum* curCollection =
layout->
getWindow()->
getTitle()->
getAlbum()->
getFirstSubalbum();
00259
while( curCollection != NULL)
00260 {
00261
SubalbumPreviewWidget* item =
new SubalbumPreviewWidget(
collections, curCollection );
00262 item->setDropEnabled(
true);
00263 curCollection = curCollection->
getNext();
00264 }
00265
00266
00267
collections->arrangeItemsInGrid();
00268
00269
00270
selectFirstCollection();
00271 }
00272
00273 void SubalbumsWidget::handleSelectionAttempt(
QIconViewItem* item )
00274 {
00275
00276
if( !
layout->
getWindow()->
getTitle()->
getBusy() )
00277
selectCollection( item );
00278 }
00279
00280 void SubalbumsWidget::selectFirstCollection()
00281 {
00282
selectCollection(
collections->firstItem() );
00283 }
00284
00285 void SubalbumsWidget::selectCollection(
QIconViewItem* item )
00286 {
00287
00288
if(
currentSelection == item)
return;
00289
00290
00291
if( item != NULL )
collections->setSelected( item,
true);
00292
00293
00294
currentSelection = item;
00295
00296
00297
if(
currentSelection == NULL )
00298 emit
collectionSelected( NULL );
00299
else
00300 emit collectionSelected( ((
SubalbumPreviewWidget*)
currentSelection)->getSubalbum() );
00301 }
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321