00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <qwidget.h>
00019 #include <qlayout.h>
00020 #include <qlabel.h>
00021 #include <qfont.h>
00022 #include <qpixmap.h>
00023 #include <qpushbutton.h>
00024
00025
00026 #include "subalbumsWidget.h"
00027 #include "subalbumPreviewWidget.h"
00028 #include "subalbumsIconView.h"
00029 #include "questionDialog.h"
00030 #include "layoutWidget.h"
00031 #include "window.h"
00032 #include "titleWidget.h"
00033 #include "../backend/album.h"
00034 #include "../backend/subalbum.h"
00035 #include "../config.h"
00036
00037 #include <iostream.h>
00038
00039
00040 SubalbumsWidget::SubalbumsWidget(QWidget *parent,
00041 const char* name ) :
00042 QWidget(parent,name)
00043 {
00044
00045 layout = (LayoutWidget*)parent;
00046
00047
00048 subalbumsText = new QLabel( this );
00049 subalbumsText->setText( "Subalbums: " );
00050 subalbumsText->setFont( QFont( "Times", 12, QFont::Bold ) );
00051
00052
00053 subalbums = new SubalbumsIconView( this );
00054
00055
00056 subalbums->setArrangement( QIconView::LeftToRight );
00057 subalbums->setVScrollBarMode( QScrollView::AlwaysOn );
00058
00059
00060 subalbums->setSelectionMode( QIconView::Single ) ;
00061
00062
00063 subalbums->setDragAutoScroll(true);
00064 subalbums->setAcceptDrops(true);
00065
00066
00067 connect( subalbums, SIGNAL(itemHasMoved()), SLOT(reorder()) );
00068
00069
00070 connect( subalbums, SIGNAL(selectionChanged(QIconViewItem*)),
00071 SLOT(updateSubalbumLayout(QIconViewItem*)) );
00072
00073
00074 connect( subalbums, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint&)),
00075 SLOT(updateSubalbumLayout(QIconViewItem*)) );
00076
00077
00078 createSubalbumImage = new QPixmap( QString(IMAGE_PATH)+"create.png" );
00079
00080 createSubalbum = new QPushButton( this );
00081 createSubalbum->setPixmap( *createSubalbumImage );
00082 createSubalbum->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Maximum );
00083 connect( createSubalbum, SIGNAL(clicked()), SLOT(createAction()) );
00084
00085 deleteSubalbumImage = new QPixmap( QString(IMAGE_PATH)+"delete.png" );
00086
00087 deleteSubalbum = new QPushButton( this );
00088 deleteSubalbum->setPixmap( *deleteSubalbumImage );
00089 deleteSubalbum->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Maximum );
00090 deleteSubalbum->setEnabled(false);
00091 connect( deleteSubalbum, SIGNAL(clicked()), SLOT(deleteAction()) );
00092
00093
00094 grid = new QGridLayout( this, 3, 2, 0 );
00095 grid->addMultiCellWidget( subalbumsText, 0, 0, 0, 1 );
00096 grid->addMultiCellWidget( subalbums, 1, 1, 0, 1 );
00097 grid->addWidget( createSubalbum, 2, 0);
00098 grid->addWidget( deleteSubalbum, 2, 1);
00099
00100
00101 grid->setRowStretch( 1, 1 );
00102
00103
00104 setPaletteBackgroundColor( QColor(255, 255, 255) );
00105
00106
00107 cachedSelection = NULL;
00108 }
00109
00110 SubalbumsWidget::~SubalbumsWidget()
00111 {
00112 delete createSubalbumImage;
00113 delete deleteSubalbumImage;
00114 }
00115
00116 void SubalbumsWidget::createAction()
00117 {
00118 Subalbum* n = new Subalbum(layout->getWindow()->getTitle()->getAlbum(),
00119 layout->getWindow()->getTitle()->getAlbum()->getNumSubalbums()+1);
00120 SubalbumPreviewWidget* p = new SubalbumPreviewWidget( subalbums, n );
00121 p->setDropEnabled(true);
00122
00123 layout->getWindow()->getTitle()->getAlbum()->appendSubalbum( n );
00124 }
00125
00126 void SubalbumsWidget::deleteAction()
00127 {
00128
00129 if(subalbums->currentItem() != NULL)
00130 {
00131
00132 QuestionDialog sure( "Delete subalbum?",
00133 "Once deleted a subalbum and it's contents cannot be brought back unless a saved copy of the album exists.",
00134 "warning.png",
00135 this );
00136
00137 if(sure.exec())
00138 {
00139
00140 Subalbum* s = ((SubalbumPreviewWidget*) subalbums->currentItem())->getSubalbum();
00141 delete subalbums->currentItem();
00142
00143
00144 layout->getWindow()->getTitle()->getAlbum()->removeSubalbum( s );
00145
00146
00147 subalbums->arrangeItemsInGrid();
00148
00149
00150 updateSubalbumLayout(subalbums->firstItem(), false);
00151
00152
00153 if(subalbums->currentItem() == NULL || !subalbums->currentItem()->isSelected())
00154 {
00155 deleteSubalbum->setEnabled(false);
00156 }
00157
00158
00159 layout->getWindow()->getTitle()->setSetButtonState(false);
00160 }
00161 }
00162 }
00163
00164 void SubalbumsWidget::updateSubalbumLayout( QIconViewItem* selection)
00165 {
00166
00167 if(layout->getWindow()->getTitle()->getBusy())
00168 {
00169 if(cachedSelection == NULL)
00170 subalbums->clearSelection();
00171 else
00172 subalbums->setSelected(cachedSelection, true);
00173 return;
00174 }
00175
00176
00177 cachedSelection = selection;
00178
00179
00180 if(selection == NULL)
00181 deleteSubalbum->setEnabled(false);
00182 else
00183 deleteSubalbum->setEnabled(true);
00184
00185 updateSubalbumLayout(selection, true);
00186 }
00187
00188 void SubalbumsWidget::updateSubalbumLayout( QIconViewItem* selection, bool oldExists)
00189 {
00190
00191 layout->stopEdit(oldExists);
00192
00193 if(selection == NULL)
00194 layout->updateSubalbum( NULL, oldExists );
00195 else
00196 {
00197 layout->updateSubalbum(((SubalbumPreviewWidget*)selection)->getSubalbum(), oldExists);
00198 }
00199 }
00200
00201 void SubalbumsWidget::updateSubalbumName(const QString& val)
00202 {
00203
00204 if(subalbums->currentItem() != NULL)
00205 {
00206 subalbums->currentItem()->setText(val);
00207 }
00208 subalbums->arrangeItemsInGrid();
00209 }
00210
00211 void SubalbumsWidget::updateSubalbumThumbnail( QPixmap* val)
00212 {
00213
00214 if(subalbums->currentItem() != NULL)
00215 {
00216 subalbums->currentItem()->setPixmap( *val );
00217 }
00218 subalbums->arrangeItemsInGrid();
00219 }
00220
00221 void SubalbumsWidget::reorder()
00222 {
00223
00224 subalbums->sort( true );
00225 subalbums->arrangeItemsInGrid();
00226
00227
00228 Album* albm = layout->getWindow()->getTitle()->getAlbum();
00229
00230
00231 albm->syncSubalbumList((SubalbumPreviewWidget*)subalbums->firstItem());
00232 }
00233
00234 void SubalbumsWidget::refresh()
00235 {
00236
00237 QIconViewItem* current = subalbums->firstItem();
00238 QIconViewItem* temp;
00239 while(current != NULL)
00240 {
00241
00242 temp = current->nextItem();
00243
00244
00245 delete current;
00246 current = temp;
00247 }
00248
00249
00250 Subalbum* curSubalbum = layout->getWindow()->getTitle()->getAlbum()->getFirstSubalbum();
00251 while( curSubalbum != NULL)
00252 {
00253 (void) new SubalbumPreviewWidget( subalbums, curSubalbum );
00254 curSubalbum = curSubalbum->getNext();
00255 }
00256
00257
00258 subalbums->arrangeItemsInGrid();
00259 updateSubalbumLayout( subalbums->firstItem(), false );
00260
00261
00262 if(subalbums->firstItem() != NULL)
00263 subalbums->setSelected( subalbums->firstItem(), TRUE);
00264 }
00265
00266 LayoutWidget* SubalbumsWidget::getParent()
00267 {
00268 return layout;
00269 }
00270
00271 void SubalbumsWidget::updateButtons(bool enable)
00272 {
00273 if(!enable)
00274 {
00275 buttonsState = createSubalbum->isEnabled();
00276 createSubalbum->setEnabled(enable);
00277 deleteSubalbum->setEnabled(enable);
00278 }
00279 else
00280 {
00281 createSubalbum->setEnabled(enable);
00282 deleteSubalbum->setEnabled(buttonsState);
00283 }
00284 }
00285