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