Subversion Repositories Scribus

Rev

Rev 13685 | Rev 14231 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13520 pierre 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
#include <QtGui>
8
#include <QMessageBox>
9
#include <iostream>
10
#include "picturebrowser.h"
13669 pierre 11
#include "collection.h"
12
#include "findimage.h"
13
#include "previewimage.h"
14
#include "loadimage.h"
13520 pierre 15
 
16
#include "prefsfile.h"
17
#include "prefsmanager.h"
18
 
19
//provides loadIcon()
20
#include "util_icon.h"
14087 fschmid 21
#include "util_formats.h"
13520 pierre 22
 
23
PictureBrowser::PictureBrowser ( ScribusDoc* doc, QWidget *parent ) : QDialog ( parent )
24
{
25
        setupUi ( this );
26
 
27
//set Scribusdoc
28
        srcDoc = doc;
29
        ScMW = doc->scMW();
30
 
31
//load settings
32
        pbSettings.load();
33
 
34
 
35
        connect ( navigationBox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( navigate ( int ) ) );
36
        connect ( sortCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( sortChanged ( int ) ) );
37
        connect ( previewModeCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( previewModeChanged ( int ) ) );
38
        connect ( moreButton, SIGNAL ( clicked() ), this, SLOT ( moreButtonClicked() ) );
39
        connect ( resetSettingsButton, SIGNAL ( clicked() ), this, SLOT ( resetSettingsButtonClicked() ) );
40
        connect ( sortOrderButton, SIGNAL ( clicked() ), this, SLOT ( sortOrderButtonClicked() ) );
41
        connect ( actionsGoButton, SIGNAL ( clicked() ), this, SLOT ( actionsGoButtonClicked() ) );
42
 
43
        connect ( zoomPlusButton, SIGNAL ( clicked() ), this, SLOT ( zoomPlusButtonClicked() ) );
44
        connect ( zoomMinusButton, SIGNAL ( clicked() ), this, SLOT ( zoomMinusButtonClicked() ) );
45
 
46
//close button
47
        connect ( closeButton, SIGNAL ( clicked() ), this, SLOT ( accept() ) );
48
 
49
        connect ( tabWidget, SIGNAL ( currentChanged ( int ) ), this, SLOT ( tabWidgetCurrentChanged ( int ) ) );
50
 
51
//"goto page" button in documentbrowser
52
        connect ( gotoPageButton, SIGNAL ( clicked() ), this, SLOT ( gotoPageButtonClicked() ) );
53
 
54
        connect ( folderView, SIGNAL ( activated ( const QModelIndex & ) ), this, SLOT ( dirChosen ( const QModelIndex & ) ) );
55
        connect ( folderView, SIGNAL ( clicked ( const QModelIndex & ) ), this, SLOT ( dirChosen ( const QModelIndex & ) ) );
56
        connect ( folderView, SIGNAL ( doubleClicked ( const QModelIndex & ) ), this, SLOT ( dirChosen ( const QModelIndex & ) ) );
57
 
58
//changing page
59
        connect ( this, SIGNAL ( selectPage ( int ) ), ScCore->primaryMainWindow(), SLOT ( selectPagesFromOutlines ( int ) ) );
60
        connect ( this, SIGNAL ( selectMasterPage ( QString ) ), ScCore->primaryMainWindow(), SLOT ( manageMasterPages ( QString ) ) );
61
 
62
//always-on-top checkbox
63
        connect ( alwaysOnTopCheckbox, SIGNAL ( stateChanged ( int ) ), this, SLOT ( alwaysOnTopCheckboxStateChanged() ) );
64
//save settings checkbox
65
        connect ( saveSettingsCheckbox, SIGNAL ( stateChanged ( int ) ), this, SLOT ( saveSettingsCheckboxStateChanged() ) );
66
 
67
//folderbrowser:include subdirs
68
        connect ( subdirsCheckbox, SIGNAL ( stateChanged ( int ) ), this, SLOT ( subdirsCheckboxStateChanged() ) );
69
 
70
        loadIcons();
71
 
72
        setSettings();
73
 
74
        navigationStack->setCurrentIndex ( 0 );
75
 
76
 
77
//maybe add QDir::Readable, although users might wonder where their folders are
78
        folderModel.setFilter ( QDir::AllDirs|QDir::Drives|QDir::NoDotAndDotDot|QDir::NoSymLinks/*|QDir::Hidden*/ );
79
        folderView->setModel ( &folderModel );
80
 
81
// this should give a little performance boost
82
        folderView->setUniformRowHeights ( true );
83
        folderView->setCurrentIndex ( folderModel.index ( QDir::currentPath() ) );
84
        folderView->scrollTo ( folderView->currentIndex(), QAbstractItemView::PositionAtTop );
85
        folderView->resizeColumnToContents ( 0 );
86
 
87
//this needs to be calculated later from height/width of QListView!
88
        previewIconsVisible = 8;
89
        folderBrowserIncludeSubdirs = false;
90
 
91
        imagesDisplayed = 0;
92
        imagesFiltered = 0;
93
        previewIconIndex = -1;
94
        insertCustomPosition = false;
95
        insertCustomSize = false;
96
        currentRow = 0;
97
 
98
//set up previewimages instance, fill with last shown images later
99
        pImages = new previewImages ( QStringList() );
100
 
101
//set threadpointer to 0
102
        fit = 0;
103
        crt = 0;
104
        cdbwt = 0;
105
        clrt = 0;
106
 
107
 
108
        pModel = new PreviewImagesModel ( this );
109
 
110
//create loadImagesThread instance, connect and run it
111
        lit = new loadImagesThread ( this, pModel );
112
        lit->start();
113
 
114
        connect ( imageViewArea, SIGNAL ( clicked ( const QModelIndex & ) ), this, SLOT ( previewIconClicked ( const QModelIndex & ) ) );
115
        connect ( imageViewArea, SIGNAL ( doubleClicked ( const QModelIndex & ) ), this, SLOT ( previewIconDoubleClicked ( const QModelIndex & ) ) );
116
 
13678 pierre 117
        imageViewArea->SetIconSize ( QSize ( pbSettings.previewIconSize, pbSettings.previewIconSize ) );
118
        imageViewArea->SetGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
119
        imageViewArea->SetModel ( pModel );
120
 
13520 pierre 121
//register item selections
13678 pierre 122
        connect ( imageViewArea->SelectionModel(), SIGNAL ( selectionChanged ( const QItemSelection &, const QItemSelection & ) ), this, SLOT ( previewImageSelectionChanged ( const QItemSelection &, const QItemSelection & ) ) );
13520 pierre 123
 
124
//documentbrowser setup
125
        connect ( documentWidget, SIGNAL ( itemActivated ( QTreeWidgetItem * , int ) ), this, SLOT ( documentChosen ( QTreeWidgetItem * , int ) ) );
126
        connect ( documentWidget, SIGNAL ( itemClicked ( QTreeWidgetItem * , int ) ), this, SLOT ( documentChosen ( QTreeWidgetItem * , int ) ) );
127
 
128
        documentWidget->setColumnCount ( 1 );
129
        documentWidget->setHeaderLabels ( QStringList ( "Pages" ) );
130
 
131
 
132
//collectionsbrowser setup
133
        connect ( collectionsWidget, SIGNAL ( itemActivated ( QTreeWidgetItem * , int ) ), this, SLOT ( collectionChosen ( QTreeWidgetItem * , int ) ) );
134
        connect ( collectionsWidget, SIGNAL ( itemClicked ( QTreeWidgetItem * , int ) ), this, SLOT ( collectionChosen ( QTreeWidgetItem * , int ) ) );
135
        connect ( collectionsWidget, SIGNAL ( itemChanged ( QTreeWidgetItem * , int ) ), this, SLOT ( collectionsWidgetItemEdited ( QTreeWidgetItem * , int ) ) );
136
        connect ( collectionsNewCategoryButton, SIGNAL ( clicked() ), this, SLOT ( collectionsNewCategoryButtonClicked() ) );
137
        connect ( collectionsNewButton, SIGNAL ( clicked() ), this, SLOT ( collectionsNewButtonClicked() ) );
138
        connect ( collectionsImportButton, SIGNAL ( clicked() ), this, SLOT ( collectionsImportButtonClicked() ) );
139
        connect ( collectionsExportButton, SIGNAL ( clicked() ), this, SLOT ( collectionsExportButtonClicked() ) );
140
        connect ( collectionsDeleteButton, SIGNAL ( clicked() ), this, SLOT ( collectionsDeleteButtonClicked() ) );
141
        connect ( collectionsRenameButton, SIGNAL ( clicked() ), this, SLOT ( collectionsRenameButtonClicked() ) );
142
 
143
        connect ( collectionsAddImagesButton, SIGNAL ( clicked() ), this, SLOT ( collectionsAddImagesButtonClicked() ) );
144
        connect ( collectionsRemoveImagesButton, SIGNAL ( clicked() ), this, SLOT ( collectionsRemoveImagesButtonClicked() ) );
145
        connect ( collectionsTagImagesButton, SIGNAL ( clicked() ), this, SLOT ( collectionsTagImagesButtonClicked() ) );
146
        connect ( collectionsAddImagesOkButton, SIGNAL ( clicked() ), this, SLOT ( collectionsAddImagesOkButtonClicked() ) );
147
        connect ( collectionsAddImagesCancelButton, SIGNAL ( clicked() ), this, SLOT ( collectionsAddImagesCancelButtonClicked() ) );
148
 
149
        connect ( collectionsSetTagsButton, SIGNAL ( clicked() ), this, SLOT ( collectionsSetTagsButtonClicked() ) );
150
        connect ( collectionsAddNewTagButton, SIGNAL ( clicked() ), this, SLOT ( collectionsAddNewTagButtonClicked() ) );
151
 
152
 
153
        collectionsWidget->setColumnCount ( 1 );
154
        collectionsWidget->setHeaderLabels ( QStringList ( "Name" ) );
155
 
13608 jghali 156
        cdbFile = ScPaths::instance().getPluginDataDir() + QString ( "collectionsdb.xml" );
13520 pierre 157
//emtpy initialization, maybe accessed before collection is actually loaded
158
        currCollection = new imageCollection;
159
        currCollection->name = "empty";
160
        currCollection->file = "empty";
161
 
162
        crt = new collectionReaderThread ( cdbFile, false );
163
        connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
164
        crt->start();
165
 
166
        connect ( insertPositionCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( insertPositionComboboxChanged ( int ) ) );
167
        connect ( insertSizeCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( insertSizeComboboxChanged ( int ) ) );
168
        connect ( insertImageButton, SIGNAL ( clicked() ), this, SLOT ( insertImageButtonClicked() ) );
169
        connect ( insertPagesCombobox, SIGNAL ( checkstateChanged ( int ) ), this, SLOT ( insertPagesComboboxCheckstateChanged ( int ) ) );
13658 cbradney 170
        insertPagesCombobox->addItem ( "Current Page", 1 );
13520 pierre 171
        insertPagesCombobox->addItem ( "All Pages", 0 );
172
 
173
        for ( int i = 0 ; i < ( int ) ( srcDoc->Pages->count() ) ; ++i )
174
        {
175
                insertPagesCombobox->addItem ( QString ( "Page %1" ).arg ( i+1 ), 0 );
176
        }
177
 
178
        insertFramesCombobox->addItem ( "All Frames", 0 );
179
        insertFramesCombobox->addItem ( "All Empty Frames", 0 );
180
 
181
 
182
        PageItem *pItem;
183
 
184
        for ( int i = 0; i < srcDoc->MasterItems.count(); ++i )
185
        {
186
                pItem = srcDoc->MasterItems.at ( i );
187
 
188
                if ( ( pItem->itemType() == PageItem::ImageFrame ) && ( !pItem->asLatexFrame() ) )
189
                {
190
                        QString itemText;
191
 
192
                        if ( pItem->PictureIsAvailable )
193
                        {
194
                                itemText = QString ( "Frame %1" ).arg ( i+1 );
195
                        }
196
                        else
197
                        {
198
                                itemText = QString ( "Frame %1 (empty)" ).arg ( i+1 );
199
                        }
200
 
201
                        insertFramesCombobox->addItem ( itemText, 0 );
202
                }
203
        }
204
 
205
        for ( int i = 0; i < srcDoc->Items->count(); ++i )
206
        {
207
                pItem = srcDoc->Items->at ( i );
208
 
209
                if ( ( pItem->itemType() == PageItem::ImageFrame ) && ( !pItem->asLatexFrame() ) )
210
                {
211
                        QString itemText;
212
 
213
                        if ( pItem->PictureIsAvailable )
214
                        {
215
                                itemText = QString ( "Frame %1" ).arg ( i+1 );
216
                        }
217
                        else
218
                        {
219
                                itemText = QString ( "Frame %1 (empty)" ).arg ( i+1 );
220
                        }
221
 
222
                        insertFramesCombobox->addItem ( itemText, 0 );
223
                }
224
        }
225
 
226
 
227
//set namefilters for global use
14087 fschmid 228
//      nameFilters << "*.jpg" << "*.jpeg" << "*.gif" << "*.png" << "*.ps" << "*.psd" << "*.tif" << "*.tiff" << "*.xpm" << "*.eps" << "*.epsf" << "*.epsi" << "*.eps2" << "*.eps3" << "*.epi" << "*.epg";
13520 pierre 229
 
14087 fschmid 230
        QString formatD(FormatsManager::instance()->extensionListForFormat(FormatsManager::IMAGESIMGFRAME, 0));
231
        nameFilters = formatD.split(" ", QString::SkipEmptyParts);
13520 pierre 232
 
233
//filter/search setup
234
        connect ( filterTargetCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( filterTargetComboboxChanged ( int ) ) );
235
        connect ( filterCriteriaCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( filterCriteriaComboboxChanged ( int ) ) );
236
        connect ( filterFilterButton, SIGNAL ( clicked() ), this, SLOT ( filterFilterButtonClicked() ) );
237
        connect ( filterClearButton, SIGNAL ( clicked() ), this, SLOT ( filterClearButtonClicked() ) );
238
        connect ( filterAddCriterionButton, SIGNAL ( clicked() ), this, SLOT ( filterAddCriterionButtonClicked() ) );
239
        connect ( filterSearchDirButton, SIGNAL ( clicked() ), this, SLOT ( filterSearchDirButtonClicked() ) );
240
 
241
        filters = new imageFilters;
242
 
243
 
13658 cbradney 244
        filterTypeCombobox->addItem ( "All Supported Formats", 1 );
13520 pierre 245
 
246
        for ( int i = 0 ; i < nameFilters.size() ; ++i )
247
        {
248
                filterTypeCombobox->addItem ( nameFilters.at ( i ), 1 );
249
        }
250
 
251
//fix: scrollperitem doesnt work
252
//imageViewArea->setLayoutMode(QListView::Batched);
253
//imageViewArea->setBatchSize(4);
254
//imageViewArea->setVerticalScrollMode(QAbstractItemView::ScrollPerItem);
255
//imageViewArea->setHorizontalScrollMode(QAbstractItemView::ScrollPerItem);
256
}
257
 
258
 
259
PictureBrowser::~PictureBrowser()
260
{
261
}
262
 
263
 
264
void PictureBrowser::callLoadImageThread ( int row, int pId )
265
{
266
        previewImage *imageToLoad = pModel->modelItemsList.at ( row );
267
 
268
        emit loadImageJob ( row, imageToLoad->fileInformation.absoluteFilePath(), pbSettings.previewIconSize, pId );
269
}
270
 
271
 
272
void PictureBrowser::navigate ( int index )
273
{
274
        //this check shouldnt be necessary but you never know...
275
        if ( ( index >= 0 ) && ( index < 3 ) )
276
        {
277
                if ( index == 2 )
278
                {
279
                        updateDocumentbrowser();
280
                }
281
 
282
                navigationStack->setCurrentIndex ( index );
283
        }
284
}
285
 
286
 
287
void PictureBrowser::previewIconClicked ( const QModelIndex &index )
288
{
289
        int row = index.row();
290
 
291
        if ( row >= 0 )
292
        {
293
                previewIconIndex = row;
294
                updateInformationTab ( previewIconIndex );
295
        }
296
}
297
 
298
 
299
void PictureBrowser::previewIconDoubleClicked ( const QModelIndex &index )
300
{
301
        int row = index.row();
302
 
303
        if ( row >= 0 )
304
        {
305
                ScribusDoc *currentDoc ( ScMW->doc );
306
                Imagedialog *id ( new Imagedialog ( pImages->previewImagesList.at ( row )->fileInformation.absoluteFilePath(), currentDoc ,this ) );
307
 
308
                if ( id )
309
                {
310
                        id->setAttribute ( Qt::WA_DeleteOnClose );
311
                        id->show();
312
                        id->raise();
313
                        id->activateWindow();
314
                }
315
        }
316
}
317
 
318
 
319
void PictureBrowser::sortChanged ( int index )
320
{
321
        //this check shouldnt be necessary but you never know...
322
        if ( ( index >= 0 ) && ( index < 4 ) )
323
        {
324
                pbSettings.sortSetting = index;
325
 
326
                if ( saveSettingsCheckbox->isChecked() )
327
                {
328
                        pbSettings.save();
329
                }
330
 
331
                updateBrowser ( false, true, false );
332
        }
333
}
334
 
335
 
336
void PictureBrowser::previewModeChanged ( int index )
337
{
338
        if ( ( index >= 0 ) && ( index < 2 ) )
339
        {
340
                pbSettings.previewMode = index;
13678 pierre 341
                imageViewArea->SetGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
13520 pierre 342
 
343
                if ( saveSettingsCheckbox->isChecked() )
344
                {
345
                        pbSettings.save();
346
                }
347
        }
348
}
349
 
350
 
351
// enlarge dialog to show more information/options
352
//FIXME: still quick and dirty, professional animation required
353
void PictureBrowser::moreButtonClicked()
354
{
355
        // dialog is not enlarged -> enlarge, change buttontext/icon
356
        if ( !pbSettings.showMore )
357
        {
358
                expandDialog ( true );
359
                pbSettings.showMore = true;
360
 
361
                if ( tabWidget->currentIndex() == 0 )
362
                {
363
                        updateInformationTab ( previewIconIndex );
364
                }
365
        }
366
        // dialog is enlarged, set back to original size, change buttontext/icon
367
        else
368
        {
369
                expandDialog ( false );
370
                pbSettings.showMore = false;
371
        }
372
 
373
        if ( saveSettingsCheckbox->isChecked() )
374
        {
375
                pbSettings.save();
376
        }
377
}
378
 
379
 
380
void PictureBrowser::resetSettingsButtonClicked()
381
{
382
        pbSettings.reset();
383
        setSettings();
384
}
385
 
386
 
387
void PictureBrowser::actionsGoButtonClicked()
388
{
389
        int index = actionsCombobox->currentIndex();
390
 
391
        if ( ( previewIconIndex < 0 ) || ( previewIconIndex > pImages->previewImagesList.size() ) )
392
        {
13658 cbradney 393
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No Image(s) Selected" ) );
13520 pierre 394
                return;
395
        }
396
 
397
        if ( index == 0 )
398
        {
399
                previewImage *tmpImage;
400
 
401
                //image from pModel needed here
402
                tmpImage = pModel->modelItemsList.at ( previewIconIndex );
403
                InsertAFrameData iafData;
404
 
405
                iafData.frameType=PageItem::ImageFrame;
406
                iafData.source=tmpImage->fileInformation.absoluteFilePath();
407
                iafData.locationType = 0;
408
                iafData.pageList = QString ( "" );
409
                iafData.positionType = 0;
410
                iafData.sizeType = 0;
411
                iafData.x = 0;
412
                iafData.y = 0;
413
                iafData.width = 0;
414
                iafData.height = 0;
415
                //iafData.impsetup=m_ImportSetup;
416
                iafData.columnCount = 0;
417
                iafData.columnGap = 0;
418
                iafData.linkTextFrames = false;
419
                iafData.linkToExistingFrame = false;
420
                iafData.linkToExistingFramePtr=NULL;
421
 
422
                tmpImage->insertIntoDocument ( srcDoc, iafData );
423
        }
424
        else if ( index == 1 )
425
        {
426
                if ( !pbSettings.showMore )
427
                {
428
                        expandDialog ( true );
429
                }
430
 
431
                if ( tabWidget->currentIndex() != 3 )
432
                {
433
                        tabWidget->setCurrentIndex ( 3 );
434
                }
435
        }
436
        else if ( index == 2 )
437
        {
438
                navigationBox->setCurrentIndex ( 1 );
439
                collectionsStackedwidget->setCurrentIndex ( 1 );
440
                updateCollectionsWidget ( true );
441
                collectionsWidget->blockSignals ( true );
442
        }
443
}
444
 
445
 
446
void PictureBrowser::sortOrderButtonClicked()
447
{
448
        if ( !pbSettings.sortOrder )
449
        {
450
                pbSettings.sortOrder = true;
451
                sortOrderButton->setIcon ( *iconArrowUp );
452
        }
453
        else
454
        {
455
                pbSettings.sortOrder = false;
456
                sortOrderButton->setIcon ( *iconArrowDown );
457
        }
458
 
459
        if ( saveSettingsCheckbox->isChecked() )
460
        {
461
                pbSettings.save();
462
        }
463
 
464
        updateBrowser ( false, false, false );
465
}
466
 
467
 
468
void PictureBrowser::zoomPlusButtonClicked()
469
{
470
        if ( pbSettings.previewIconSize < 500 )
471
        {
472
                pbSettings.previewIconSize += 20;
473
 
13678 pierre 474
                imageViewArea->SetIconSize ( QSize ( pbSettings.previewIconSize, pbSettings.previewIconSize ) );
475
                imageViewArea->SetGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
13520 pierre 476
 
477
                pModel->createDefaultIcon ( pbSettings.previewIconSize );
478
 
479
                if ( saveSettingsCheckbox->isChecked() )
480
                {
481
                        pbSettings.save();
482
                }
483
 
484
                updateBrowser ( false, false, true );
485
        }
486
}
487
 
488
 
489
void PictureBrowser::zoomMinusButtonClicked()
490
{
491
        if ( pbSettings.previewIconSize > 50 )
492
        {
493
                pbSettings.previewIconSize -= 20;
494
 
13678 pierre 495
                imageViewArea->SetIconSize ( QSize ( pbSettings.previewIconSize, pbSettings.previewIconSize ) );
496
                imageViewArea->SetGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
13520 pierre 497
 
498
                pModel->createDefaultIcon ( pbSettings.previewIconSize );
499
 
500
                if ( saveSettingsCheckbox->isChecked() )
501
                {
502
                        pbSettings.save();
503
                }
504
 
505
                updateBrowser ( false, false, true );
506
        }
507
}
508
 
509
 
510
void PictureBrowser::tabWidgetCurrentChanged ( int index )
511
{
512
        if ( index == 0 )
513
        {
514
                updateInformationTab ( previewIconIndex );
515
        }
516
}
517
 
518
 
519
void PictureBrowser::gotoPageButtonClicked()
520
{
521
        QTreeWidgetItem *item = documentWidget->currentItem();
522
 
523
        if ( !item )
524
        {
525
                return;
526
        }
527
 
528
        int id = item->data ( 0, Qt::UserRole ).toInt();
529
 
530
        if ( id > 0 )
531
        {
532
                id--;
533
        }
534
 
535
        ScCore->primaryMainWindow()->closeActiveWindowMasterPageEditor();
536
        emit selectPage ( id );
537
}
538
 
539
 
540
void PictureBrowser::alwaysOnTopCheckboxStateChanged()
541
{
542
        pbSettings.alwaysOnTop = alwaysOnTopCheckbox->isChecked();
543
 
544
        if ( saveSettingsCheckbox->isChecked() )
545
        {
546
                pbSettings.save();
547
        }
548
 
549
        setAlwaysOnTop ( pbSettings.alwaysOnTop );
550
}
551
 
552
 
553
void PictureBrowser::saveSettingsCheckboxStateChanged()
554
{
555
        pbSettings.saveSettings = saveSettingsCheckbox->isChecked();
556
        pbSettings.save();
557
}
558
 
559
 
560
void PictureBrowser::subdirsCheckboxStateChanged()
561
{
562
        folderBrowserIncludeSubdirs = subdirsCheckbox->isChecked();
563
}
564
 
565
 
566
// processes chosen dirs in the folderbrowser
567
void PictureBrowser::dirChosen ( const QModelIndex &index )
568
{
569
        // as long as the folder doesnt change, only the first signal (click, doubleclick or activated) is processed
570
        if ( !tmpindex.isValid() || ( tmpindex != index ) )
571
        {
572
                tmpindex = index;
573
 
574
                currPath = folderModel.filePath ( index );
575
 
576
                if ( !fit )
577
                {
578
                        fit = new findImagesThread ( currPath, nameFilters, QDir::Name, folderBrowserIncludeSubdirs );
579
                        connect ( fit, SIGNAL ( finished() ), this, SLOT ( findImagesThreadFinished() ) );
580
                        fit->start();
581
                }
582
                else
583
                {
584
                        fit->restart();
585
                }
586
        }
587
}
588
 
589
 
590
void PictureBrowser::documentChosen ( QTreeWidgetItem * item, int column )
591
{
592
        PageItem *pItem;
593
        QStringList imageFiles;
594
 
595
        int id = item->data ( 0, Qt::UserRole ).toInt();
596
 
597
 
598
        for ( int i = 0; i < srcDoc->MasterItems.count(); ++i )
599
        {
600
                pItem = srcDoc->MasterItems.at ( i );
601
 
602
                if ( ( pItem->itemType() == PageItem::ImageFrame ) && ( pItem->PictureIsAvailable ) && ( !pItem->asLatexFrame() ) )
603
                {
604
                        if ( ( id == 0 ) || ( ( id-1 ) == pItem->OwnPage ) )
605
                        {
606
                                imageFiles.append ( pItem->Pfile );
607
                        }
608
                }
609
        }
610
 
611
        for ( int i = 0; i < srcDoc->Items->count(); ++i )
612
        {
613
                pItem = srcDoc->Items->at ( i );
614
 
615
                if ( ( pItem->itemType() == PageItem::ImageFrame ) && ( pItem->PictureIsAvailable ) && ( !pItem->asLatexFrame() ) )
616
                {
617
                        if ( ( id == 0 ) || ( ( id-1 ) == pItem->OwnPage ) )
618
                        {
619
                                imageFiles.append ( pItem->Pfile );
620
                        }
621
                }
622
        }
623
 
624
//todo: check if item is selected: item->isSelected()
625
 
626
 
627
        pImages->createPreviewImagesList ( imageFiles );
628
 
629
        updateBrowser ( true, true, false );
630
}
631
 
632
 
633
void PictureBrowser::collectionChosen ( QTreeWidgetItem * item, int column )
634
{
635
        QString collectionFile = item->data ( 0, Qt::UserRole ).toString();
636
 
13658 cbradney 637
        if ( collectionFile == "Category" )
13520 pierre 638
        {
639
                return;
640
        }
641
 
642
        currCollectionFile = collectionFile;
643
 
644
        if ( !crt )
645
        {
646
                crt = new collectionReaderThread ( currCollectionFile, false );
647
                connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
648
                crt->start();
649
        }
650
        else
651
        {
652
                crt->restart();
653
        }
654
}
655
 
656
 
657
void PictureBrowser::collectionsWidgetItemEdited ( QTreeWidgetItem * item, int column )
658
{
659
        saveCollectionsDb();
660
}
661
 
662
 
663
void PictureBrowser::findImagesThreadFinished()
664
{
665
        if ( fit->restartThread )
666
        {
667
                delete fit;
668
 
669
                //maybe the state of folderBrowserIncludeSubdirs needs to be saved when canceling the old thread
670
                fit = new findImagesThread ( currPath, nameFilters, QDir::Name, folderBrowserIncludeSubdirs );
671
                connect ( fit, SIGNAL ( finished() ), this, SLOT ( findImagesThreadFinished() ) );
672
                fit->start();
673
        }
674
        else
675
        {
676
                pImages->createPreviewImagesList ( fit->imageFiles );
677
 
678
                updateBrowser ( true, true, false );
679
 
680
                delete fit;
681
                fit = 0;
682
        }
683
}
684
 
685
 
686
void PictureBrowser::collectionReaderThreadFinished()
687
{
688
        if ( crt->restartThread )
689
        {
690
                bool import = crt->import;
691
                delete crt;
692
 
693
                crt = new collectionReaderThread ( currCollectionFile, import );
694
                connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
695
                crt->start();
696
 
697
                return;
698
        }
699
 
700
        switch ( crt->type )
701
        {
702
                case 0:
13678 pierre 703
//                      QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "File not found or file is not a collection file" ) );
13520 pierre 704
                        break;
705
 
706
                case 1:
707
                        collectionsDb += crt->collectionsSet;
708
 
709
                        updateCollectionsWidget ( false );
710
                        updateCollectionsAddImagesCombobox();
711
                        break;
712
 
713
                case 2:
714
                        if ( crt->import )
715
                        {
716
                                collectionsWidget->blockSignals ( true );
717
 
718
                                QTreeWidgetItem *currItem = collectionsWidget->currentItem();
719
 
720
                                if ( !currItem )
721
                                {
722
                                        currItem = collectionsWidget->topLevelItem ( 0 );
723
 
724
                                        if ( !currItem )
725
                                        {
13658 cbradney 726
                                                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "You have to create a category first" ) );
13520 pierre 727
                                                return;
728
                                        }
729
                                }
730
 
731
                                QTreeWidgetItem *tmpItem;
732
 
733
                                if ( currItem->parent() )
734
                                {
735
                                        tmpItem = new QTreeWidgetItem ( currItem->parent(), QStringList ( crt->collection->name ) );
736
                                }
737
                                else
738
                                {
739
                                        tmpItem = new QTreeWidgetItem ( currItem, QStringList ( crt->collection->name ) );
740
                                }
741
 
742
                                tmpItem->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
743
                                tmpItem->setData ( 0, Qt::UserRole, crt->collection->file );
744
                                tmpItem->setIcon ( 0, *iconCollection );
745
                                collectionsWidget->blockSignals ( false );
746
 
747
                                collectionsWidget->setCurrentItem ( tmpItem );
748
                                saveCollectionsDb();
749
                        }
750
 
751
                        currCollection = crt->collection;
752
                        pImages->createPreviewImagesList ( currCollection );
753
 
754
                        //update view
755
                        updateBrowser ( true, true, false );
756
                        updateCollectionsAddImagesCombobox();
757
                        break;
758
 
759
                default:
760
                        break;
761
        }
762
 
763
        delete crt;
764
        crt = 0;
765
}
766
 
767
 
768
void PictureBrowser::collectionListReaderThreadFinished()
769
{
770
        /*      if(clrt->restartThread)
771
                {
772
                delete clrt;
773
 
774
                clrt = new collectionListReaderThread(collections);
775
                connect(clrt, SIGNAL(finished()), this, SLOT(collectionListReaderThreadFinished()));
776
                clrt->start();
777
                }
778
                else
779
                {
780
                pImages->createPreviewImagesList(clrt->imageFiles);
781
 
782
                updateBrowser(true, true, false);
783
 
784
                delete clrt;
785
                clrt = 0;
786
                }*/
787
}
788
 
789
 
790
void PictureBrowser::collectionReaderThreadListFinishedSave()
791
{
792
        collectionReaderThread *tmpCrt;
793
        collectionWriterThread *tmpCwt;
794
        imageCollection *tmpCollection;
795
 
796
        for ( int i = 0 ; i < crtList.size() ; ++i )
797
        {
798
                tmpCrt = crtList.at ( i );
799
 
800
                if ( tmpCrt->isFinished() )
801
                {
802
                        QStringList tmpTags;
803
 
804
                        if ( !tmpCrt->type )
805
                        {
13658 cbradney 806
                                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), QString ( "A collection was not found:\n%1\nit will be created" ).arg ( tmpCrt->xmlFile ) );
13520 pierre 807
                                tmpCollection = new imageCollection;
808
                                tmpCollection->imageFiles = tmpCrt->addImages;
809
                        }
810
                        else
811
                        {
812
                                tmpCollection = tmpCrt->collection;
813
                                tmpCollection->imageFiles += tmpCrt->addImages;
814
                        }
815
 
816
                        //add empty tags for list consistency
817
                        for ( int j = 0 ; j < tmpCrt->addImages.size() ; ++j )
818
                        {
819
                                tmpCollection->tags.append ( tmpTags );
820
                        }
821
 
822
                        tmpCwt = new collectionWriterThread ( tmpCrt->xmlFile, *tmpCollection );
823
                        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
824
                        cwtList.append ( tmpCwt );
825
                        tmpCwt->start();
826
 
827
                        delete tmpCollection;
828
                        delete crtList.takeAt ( i );
829
                }
830
        }
831
}
832
 
833
 
834
void PictureBrowser::collectionsDbWriterThreadFinished()
835
{
836
        if ( cdbwt->restartThread )
837
        {
838
                delete cdbwt;
839
 
840
                cdbwt = new collectionsWriterThread ( cdbFile, collectionsDb );
841
                connect ( cdbwt, SIGNAL ( finished() ), this, SLOT ( collectionsDbWriterThreadFinished() ) );
842
                cdbwt->start();
843
        }
844
        else
845
        {
846
                delete cdbwt;
847
                cdbwt = 0;
848
        }
849
}
850
 
851
 
852
void PictureBrowser::collectionWriterThreadListFinished()
853
{
854
        for ( int i = 0 ; i < cwtList.size() ; ++i )
855
        {
856
                if ( cwtList.at ( i )->isFinished() )
857
                {
858
                        delete cwtList.takeAt ( i );
859
                }
860
        }
861
}
862
 
863
 
864
void PictureBrowser::insertPagesComboboxCheckstateChanged ( int row )
865
{
866
        int tmpState = insertPagesCombobox->checkstate ( 1 );
867
 
868
        if ( row == 1 )
869
        {
870
                int itemsCount = insertPagesCombobox->count();
871
 
872
                for ( int i = 2 ; i < itemsCount ; ++i )
873
                {
874
                        insertPagesCombobox->setCheckstate ( i, tmpState );
875
                }
876
        }
877
        else if ( ( tmpState == 1 ) && ( row > 1 ) )
878
        {
879
                insertPagesCombobox->setCheckstate ( 1, 0 );
880
        }
881
 
882
        insertPagesCombobox->setCurrentIndex ( row );
883
}
884
 
885
 
886
void PictureBrowser::insertImageButtonClicked()
887
{
888
        if ( ( previewIconIndex < 0 ) || ( previewIconIndex > pModel->modelItemsList.size() ) )
889
        {
13658 cbradney 890
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No image(s) selected" ) );
13520 pierre 891
                return;
892
        }
893
 
894
        previewImage *tmpImage;
895
 
896
//image from pModel needed here
897
        tmpImage = pModel->modelItemsList.at ( previewIconIndex );
898
        InsertAFrameData iafData;
899
 
900
        iafData.frameType=PageItem::ImageFrame;
901
        iafData.source=tmpImage->fileInformation.absoluteFilePath();
902
 
903
        QString pageList = "";
904
 
905
        if ( insertPagesCombobox->checkstate ( 1 ) == 1 )
906
        {
907
                iafData.locationType = 1;
908
        }
909
        else
910
        {
911
                iafData.locationType = 2;
912
 
913
                //current page has been selected
914
                if ( insertPagesCombobox->checkstate ( 0 ) == 1 )
915
                {
916
                        int currPage = srcDoc->currentPageNumber() + 1;
917
 
918
                        //prevent double insert, only add current page to pagelist if the page isn't selected yet
919
                        if ( insertPagesCombobox->checkstate ( currPage + 1 ) == 0 )
920
                        {
921
                                pageList += QString ( "%1," ).arg ( currPage );
922
                        }
923
                }
924
 
925
                for ( int i = 2 ; i < insertPagesCombobox->count() ; ++i )
926
                {
927
                        if ( insertPagesCombobox->checkstate ( i ) == 1 )
928
                        {
929
                                pageList += QString ( "%1," ).arg ( i-1 );
930
                        }
931
                }
932
 
933
                if ( pageList.isEmpty() )
934
                {
13658 cbradney 935
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No page/image frame selected" ) );
13520 pierre 936
                        return;
937
                }
938
 
939
                pageList.chop ( 1 );
940
        }
941
 
942
        iafData.pageList = pageList;
943
        iafData.positionType = insertPositionCombobox->currentIndex();
944
        iafData.sizeType = insertSizeCombobox->currentIndex();
945
        iafData.x = insertPositionXSpinbox->value();
946
        iafData.y = insertPositionYSpinbox->value();
947
        iafData.width = insertWidthSpinbox->value();
948
        iafData.height = insertHeightSpinbox->value();
949
 
950
        /*dont need all this crap */
951
//iafData.impsetup=m_ImportSetup;
952
        iafData.columnCount = 0;
953
        iafData.columnGap = 0;
954
        iafData.linkTextFrames = false;
955
        iafData.linkToExistingFrame = false;
956
        iafData.linkToExistingFramePtr=NULL;
957
 
958
        tmpImage->insertIntoDocument ( srcDoc, iafData );
959
}
960
 
961
 
962
void PictureBrowser::insertPositionComboboxChanged ( int index )
963
{
964
        if ( ( index == 3 ) && !insertCustomPosition )
965
        {
966
                insertPositionXSpinbox->setEnabled ( true );
967
                insertPositionYSpinbox->setEnabled ( true );
968
                insertPositionXLabel->setEnabled ( true );
969
                insertPositionYLabel->setEnabled ( true );
970
                insertCustomPosition = true;
971
        }
972
        else if ( insertCustomPosition )
973
        {
974
                insertPositionXSpinbox->setEnabled ( false );
975
                insertPositionYSpinbox->setEnabled ( false );
976
                insertPositionXLabel->setEnabled ( false );
977
                insertPositionYLabel->setEnabled ( false );
978
                insertCustomPosition = false;
979
        }
980
}
981
 
982
 
983
void PictureBrowser::insertSizeComboboxChanged ( int index )
984
{
985
        if ( ( index == 3 ) && !insertCustomSize )
986
        {
987
                insertWidthSpinbox->setEnabled ( true );
988
                insertHeightSpinbox->setEnabled ( true );
989
                insertWidthLabel->setEnabled ( true );
990
                insertHeightLabel->setEnabled ( true );
991
                insertCustomSize = true;
992
        }
993
        else if ( insertCustomSize )
994
        {
995
                insertWidthSpinbox->setEnabled ( false );
996
                insertHeightSpinbox->setEnabled ( false );
997
                insertWidthLabel->setEnabled ( false );
998
                insertHeightLabel->setEnabled ( false );
999
                insertCustomSize = false;
1000
        }
1001
}
1002
 
1003
 
1004
void PictureBrowser::filterCriteriaComboboxChanged ( int index )
1005
{
1006
        //this check shouldnt be necessary but you never know...
1007
        if ( ( index >= 0 ) && ( index < 5 ) )
1008
        {
1009
                filterStackedwidget->setCurrentIndex ( index );
1010
        }
1011
}
1012
 
1013
 
1014
void PictureBrowser::filterTargetComboboxChanged ( int index )
1015
{
1016
        if ( ( index >= 0 ) && ( index < 3 ) )
1017
        {
1018
                filterTargetStackedWidget->setCurrentIndex ( index );
1019
        }
1020
 
1021
        if ( index == 1 )
1022
        {
1023
                filterFilterButton->setText ( "Search" );
1024
        }
1025
        else
1026
        {
1027
                filterFilterButton->setText ( "Apply Filters" );
1028
        }
1029
}
1030
 
1031
 
1032
void PictureBrowser::filterFilterButtonClicked()
1033
{
1034
        if ( filterTargetCombobox->currentIndex() == 1 )
1035
        {
1036
                QString searchDir = filterSearchLineedit->text();
1037
                QDir dir ( searchDir );
1038
 
1039
                if ( !dir.exists() )
1040
                {
13658 cbradney 1041
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "Directory does not exist" ) );
13520 pierre 1042
                        return;
1043
                }
1044
 
1045
                currPath = searchDir;
1046
 
1047
                if ( !fit )
1048
                {
1049
                        fit = new findImagesThread ( currPath, nameFilters, QDir::Name, true );
1050
                        connect ( fit, SIGNAL ( finished() ), this, SLOT ( findImagesThreadFinished() ) );
1051
                        fit->start();
1052
                }
1053
                else
1054
                {
1055
                        fit->restart();
1056
                }
1057
        }
1058
        else if ( filterTargetCombobox->currentIndex() == 2 )
1059
        {
1060
                /*      if(!clrt)
1061
                        {
1062
                        clrt = new collectionListReaderThread(collections);
1063
                        connect(clrt, SIGNAL(finished()), this, SLOT(collectionListReaderThreadFinished()));
1064
                        clrt->start();
1065
                        }
1066
                        else
1067
                        {
1068
                        clrt->restart();
1069
                        }*/
1070
        }
1071
        else
1072
        {
1073
                updateBrowser ( true, false, false );
1074
        }
1075
}
1076
 
1077
 
1078
void PictureBrowser::filterClearButtonClicked()
1079
{
1080
        pImages->clearFilters();
1081
        filterFiltersListwidget->clear();
1082
 
1083
        delete filters;
1084
        filters = new imageFilters;
1085
 
1086
        updateBrowser ( true, false, false );
1087
}
1088
 
1089
 
1090
void PictureBrowser::filterAddCriterionButtonClicked()
1091
{
1092
        QListWidgetItem *newItem = new QListWidgetItem;
1093
 
1094
        newItem->setFlags ( Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
1095
        newItem->setCheckState ( Qt::Checked );
1096
 
1097
        int index = filterCriteriaCombobox->currentIndex();
13658 cbradney 1098
        QString filterText = "Empty Filter";
13520 pierre 1099
 
1100
        if ( index == 0 )
1101
        {
1102
                if ( filterNameCombobox->currentIndex() == 0 )
1103
                {
13658 cbradney 1104
                        filterText = QString ( "Name contains \"%1\"" ).arg ( filterNameLineedit->text() );
13520 pierre 1105
                        filters->nameInverts.append ( true );
1106
                }
1107
                else
1108
                {
13658 cbradney 1109
                        filterText = QString ( "Name does not contain \"%1\"" ).arg ( filterNameLineedit->text() );
13520 pierre 1110
                        filters->nameInverts.append ( false );
1111
                }
1112
 
1113
                filters->nameFilters.append ( filterNameLineedit->text() );
1114
        }
1115
        else if ( index == 1 )
1116
        {
1117
                if ( filterDateCombobox->currentIndex() == 0 )
1118
                {
13658 cbradney 1119
                        filterText = QString ( "Newer than %1" ).arg ( filterDateDatetimeedit->dateTime().toString ( "dd.MM.yyyy hh:mm" ) );
13520 pierre 1120
                        filters->dateInverts.append ( false );
1121
                }
1122
                else
1123
                {
13658 cbradney 1124
                        filterText = QString ( "Older than %1" ).arg ( filterDateDatetimeedit->dateTime().toString ( "dd.MM.yyyy hh:mm" ) );
13520 pierre 1125
                        filters->dateInverts.append ( true );
1126
                }
1127
 
1128
                filters->dateFilters.append ( filterDateDatetimeedit->dateTime() );
1129
        }
1130
        else if ( index == 2 )
1131
        {
1132
                if ( filterSizeCombobox->currentIndex() == 0 )
1133
                {
13658 cbradney 1134
                        filterText = QString ( "Smaller than %1 KB" ).arg ( filterSizeSpinbox->value() );
13520 pierre 1135
                        filters->sizeInverts.append ( true );
1136
                }
1137
                else
1138
                {
13658 cbradney 1139
                        filterText = QString ( "Bigger than %1 KB" ).arg ( filterSizeSpinbox->value() );
13520 pierre 1140
                        filters->sizeInverts.append ( false );
1141
                }
1142
 
1143
                filters->sizeFilters.append ( filterSizeSpinbox->value() );
1144
        }
1145
        else if ( index == 3 )
1146
        {
1147
                QStringList types;
13658 cbradney 1148
                filterText = QString ( "Allowed types: " );
13520 pierre 1149
 
1150
                if ( filterTypeCombobox->checkstate ( 0 ) == 1 )
1151
                {
13658 cbradney 1152
                        filterText += QString ( "All supported types (really a useful filter...)" );
13520 pierre 1153
                        types = nameFilters;
1154
                }
1155
                else
1156
                {
1157
                        int itemsCount = filterTypeCombobox->count();
1158
 
1159
                        for ( int i = 1 ; i < itemsCount ; ++i )
1160
                        {
1161
                                if ( filterTypeCombobox->checkstate ( i ) == 1 )
1162
                                {
1163
                                        filterText += QString ( "\"%1\", " ).arg ( nameFilters.at ( i - 1 ) );
1164
                                        types.append ( nameFilters.at ( i - 1 ) );
1165
                                }
1166
                        }
1167
                }
1168
 
1169
                filters->typeFilters.append ( types );
1170
        }
1171
        else if ( index == 4 )
1172
        {
1173
                QStringList tags;
13658 cbradney 1174
                filterText = QString ( "Has tags: " );
13520 pierre 1175
 
1176
                int itemsCount = filterTagsCombobox->count();
1177
 
1178
                for ( int i = 1 ; i < itemsCount ; ++i )
1179
                {
1180
                        if ( filterTagsCombobox->checkstate ( i ) == 1 )
1181
                        {
1182
                                filterText += QString ( "\"%1\", " ).arg ( filterTagsCombobox->itemText ( i ) );
1183
                                tags.append ( filterTagsCombobox->itemText ( i ) );
1184
                        }
1185
                }
1186
 
1187
                filters->tagFilters.append ( tags );
1188
        }
1189
 
1190
        filters->filterMap.append ( index );
1191
 
1192
        newItem->setText ( filterText );
1193
        filterFiltersListwidget->addItem ( newItem );
1194
}
1195
 
1196
 
1197
void PictureBrowser::filterSearchDirButtonClicked()
1198
{
1199
        QString searchDir = QFileDialog::getExistingDirectory ( this, tr ( "Select Directory" ), QDir::rootPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );
1200
        filterSearchLineedit->setText ( searchDir );
1201
}
1202
 
1203
 
1204
void PictureBrowser::collectionsNewCategoryButtonClicked()
1205
{
1206
        collectionsWidget->blockSignals ( true );
1207
 
1208
        QTreeWidgetItem *tmpCategory;
1209
 
1210
        tmpCategory = new QTreeWidgetItem ( collectionsWidget, QStringList ( "New Category" ) );
1211
        tmpCategory->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
13658 cbradney 1212
        tmpCategory->setData ( 0, Qt::UserRole, QString ( "Category" ) );
13520 pierre 1213
        tmpCategory->setExpanded ( true );
1214
 
1215
        collectionsWidget->blockSignals ( false );
1216
 
1217
        collectionsWidget->setCurrentItem ( tmpCategory );
1218
        collectionsWidget->editItem ( tmpCategory );
1219
 
1220
        saveCollectionsDb();
1221
}
1222
 
1223
 
1224
void PictureBrowser::collectionsNewButtonClicked()
1225
{
1226
        collectionsWidget->blockSignals ( true );
1227
 
1228
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1229
 
1230
        if ( !currItem )
1231
        {
1232
                currItem = collectionsWidget->topLevelItem ( 0 );
1233
 
1234
                if ( !currItem )
1235
                {
13658 cbradney 1236
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "You have to create a category first" ) );
13520 pierre 1237
                        return;
1238
                }
1239
        }
1240
 
1241
        QTreeWidgetItem *parentItem, *tmpItem;
13608 jghali 1242
        QString newCollectionFile = ScPaths::instance().getPluginDataDir();
13520 pierre 1243
 
1244
        parentItem = currItem->parent();
1245
 
1246
        if ( parentItem )
1247
        {
1248
                tmpItem = new QTreeWidgetItem ( parentItem, QStringList ( "New Collection" ) );
1249
                newCollectionFile += QString ( "c%1_%2.sic" ).arg ( collectionsWidget->indexOfTopLevelItem ( parentItem ) ).arg ( parentItem->childCount() );
1250
        }
1251
        else
1252
        {
1253
                tmpItem = new QTreeWidgetItem ( currItem, QStringList ( "New Collection" ) );
1254
                newCollectionFile += QString ( "c%1_%2.sic" ).arg ( collectionsWidget->indexOfTopLevelItem ( currItem ) ).arg ( currItem->childCount() );
1255
        }
1256
 
1257
        tmpItem->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
1258
        tmpItem->setData ( 0, Qt::UserRole, newCollectionFile );
1259
        tmpItem->setIcon ( 0, *iconCollection );
1260
        collectionsWidget->blockSignals ( false );
1261
 
1262
        collectionsWidget->setCurrentItem ( tmpItem );
1263
        collectionsWidget->editItem ( tmpItem );
1264
 
1265
        saveCollectionsDb();
1266
 
1267
        imageCollection tmpCollection;
1268
        collectionWriterThread *tmpCwt;
1269
        tmpCwt = new collectionWriterThread ( newCollectionFile, tmpCollection );
1270
        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1271
        cwtList.append ( tmpCwt );
1272
        tmpCwt->start();
1273
}
1274
 
1275
 
1276
void PictureBrowser::collectionsImportButtonClicked()
1277
{
13658 cbradney 1278
        QString fileName = QFileDialog::getOpenFileName ( this, tr ( "Import Image Collection" ), QDir::rootPath(), tr ( "Scribus ImageCollection (*.sic)" ) );
13520 pierre 1279
 
1280
        if ( !fileName.isEmpty() )
1281
        {
1282
                currCollectionFile = fileName;
1283
 
1284
                if ( !crt )
1285
                {
1286
                        crt = new collectionReaderThread ( currCollectionFile, true );
1287
                        connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
1288
                        crt->start();
1289
                }
1290
                else
1291
                {
1292
                        crt->restart();
1293
                }
1294
        }
1295
}
1296
 
1297
 
1298
void PictureBrowser::collectionsExportButtonClicked()
1299
{
13658 cbradney 1300
        QString fileName = QFileDialog::getSaveFileName ( this, tr ( "Export Image Collection" ), QDir::rootPath(), tr ( "Scribus ImageCollection (*.sic)" ) );
13520 pierre 1301
 
1302
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1303
 
1304
        if ( !currItem )
1305
        {
13658 cbradney 1306
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "You have to select something you want to export" ) );
13520 pierre 1307
                return;
1308
        }
1309
 
1310
        //collection
1311
        if ( currItem->parent() )
1312
        {
1313
                collectionWriterThread *tmpCwt;
1314
                tmpCwt = new collectionWriterThread ( fileName, *currCollection );
1315
                connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1316
                cwtList.append ( tmpCwt );
1317
                tmpCwt->start();
1318
        }
1319
        //category
1320
        else
1321
        {
1322
 
1323
        }
1324
}
1325
 
1326
 
1327
void PictureBrowser::collectionsDeleteButtonClicked()
1328
{
1329
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1330
 
1331
        if ( !currItem )
1332
        {
1333
                return;
1334
        }
1335
 
1336
        delete currItem;
1337
 
1338
        saveCollectionsDb();
1339
}
1340
 
1341
 
1342
void PictureBrowser::collectionsRenameButtonClicked()
1343
{
1344
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1345
 
1346
        if ( !currItem )
1347
        {
1348
                return;
1349
        }
1350
 
1351
        collectionsWidget->editItem ( currItem );
1352
}
1353
 
1354
 
1355
void PictureBrowser::collectionsAddImagesButtonClicked()
1356
{
1357
        collectionsStackedwidget->setCurrentIndex ( 1 );
1358
        updateCollectionsWidget ( true );
1359
        collectionsWidget->blockSignals ( true );
1360
}
1361
 
1362
 
1363
void PictureBrowser::collectionsSetTagsButtonClicked()
1364
{
1365
        for ( int i = 0 ; i < collectionsTagImagesCombobox->count() ; ++i )
1366
        {
1367
                if ( collectionsTagImagesCombobox->checkstate ( i ) == 0 )
1368
                {
1369
                        for ( int j = 0 ; j < selectedIndexes.size() ; ++j )
1370
                        {
1371
                                pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.removeAll ( collectionsTagImagesCombobox->itemText ( i ) );
1372
                        }
1373
                }
1374
                else if ( collectionsTagImagesCombobox->checkstate ( i ) == 1 )
1375
                {
1376
                        for ( int j = 0 ; j < selectedIndexes.size() ; ++j )
1377
                        {
1378
                                if ( !pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.contains ( collectionsTagImagesCombobox->itemText ( i ) ) )
1379
                                {
1380
                                        pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.append ( collectionsTagImagesCombobox->itemText ( i ) );
1381
                                }
1382
                        }
1383
                }
1384
        }
1385
 
1386
 
1387
        collectionWriterThread *tmpCwt;
1388
 
1389
        currCollection->imageFiles.clear();
1390
        currCollection->tags.clear();
1391
 
1392
        for ( int i = 0 ; i < pImages->previewImagesList.size() ; ++i )
1393
        {
1394
                currCollection->imageFiles.append ( pImages->previewImagesList.at ( i )->fileInformation.absoluteFilePath() );
1395
                currCollection->tags.append ( pImages->previewImagesList.at ( i )->tags );
1396
        }
1397
 
1398
        tmpCwt = new collectionWriterThread ( currCollection->file, *currCollection );
1399
        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1400
        cwtList.append ( tmpCwt );
1401
        tmpCwt->start();
1402
}
1403
 
1404
 
1405
void PictureBrowser::collectionsAddNewTagButtonClicked()
1406
{
1407
        QString newTag = collectionsAddNewTagLineedit->text();
1408
 
1409
        if ( !newTag.isEmpty() )
1410
        {
1411
                collectionsTagImagesCombobox->addItem ( newTag, 1 );
1412
        }
1413
        else
1414
        {
13658 cbradney 1415
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No tag entered" ) );
13520 pierre 1416
        }
1417
}
1418
 
1419
 
1420
void PictureBrowser::collectionsRemoveImagesButtonClicked()
1421
{
1422
        collectionWriterThread *tmpCwt;
1423
        QList<previewImage *> tmpPreviewImagesList;
1424
 
1425
        for ( int i = 0 ; i < selectedIndexes.size() ; ++i )
1426
        {
1427
                tmpPreviewImagesList.append ( pImages->previewImagesList.takeAt ( selectedIndexes.at ( i ) ) );
1428
        }
1429
 
1430
//update view
1431
        updateBrowser ( false, false, false );
1432
 
1433
        for ( int i = 0 ; i < tmpPreviewImagesList.size() ; ++i )
1434
        {
1435
                delete tmpPreviewImagesList.at ( i );
1436
        }
1437
 
1438
        currCollection->imageFiles.clear();
1439
        currCollection->tags.clear();
1440
 
1441
        for ( int i = 0 ; i < pImages->previewImagesList.size() ; ++i )
1442
        {
1443
                currCollection->imageFiles.append ( pImages->previewImagesList.at ( i )->fileInformation.absoluteFilePath() );
1444
                currCollection->tags.append ( pImages->previewImagesList.at ( i )->tags );
1445
        }
1446
 
1447
        tmpCwt = new collectionWriterThread ( currCollection->file, *currCollection );
1448
        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1449
        cwtList.append ( tmpCwt );
1450
        tmpCwt->start();
1451
}
1452
 
1453
 
1454
void PictureBrowser::collectionsTagImagesButtonClicked()
1455
{
1456
}
1457
 
1458
 
1459
void PictureBrowser::collectionsAddImagesOkButtonClicked()
1460
{
1461
        QTreeWidgetItem *tmpItem, *tmpItem2;
1462
        QString collectionFile;
1463
        collectionReaderThread *tmpCrt;
1464
 
1465
        QStringList addImages;
1466
 
1467
        for ( int k = 0 ; k < selectedIndexes.size() ; ++k )
1468
        {
1469
                addImages.append ( pModel->modelItemsList.at ( selectedIndexes.at ( k ) )->fileInformation.absoluteFilePath() );
1470
        }
1471
 
1472
 
1473
        for ( int i = 0 ; i < collectionsWidget->topLevelItemCount() ; ++i )
1474
        {
1475
                tmpItem = collectionsWidget->topLevelItem ( i );
1476
 
1477
                for ( int j = 0 ; j < tmpItem->childCount() ; ++j )
1478
                {
1479
                        tmpItem2 = tmpItem->child ( j );
1480
 
1481
                        if ( tmpItem2->checkState ( 0 ) == Qt::Checked )
1482
                        {
1483
                                //add images here
1484
                                collectionFile = tmpItem2->data ( 0, Qt::UserRole ).toString();
1485
 
1486
                                tmpCrt = new collectionReaderThread ( collectionFile, false );
1487
                                tmpCrt->addImages = addImages;
1488
                                connect ( tmpCrt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadListFinishedSave() ) );
1489
                                crtList.append ( tmpCrt );
1490
                                tmpCrt->start();
1491
                        }
1492
                }
1493
        }
1494
 
1495
        collectionsStackedwidget->setCurrentIndex ( 0 );
1496
        updateCollectionsWidget ( false );
1497
        collectionsWidget->blockSignals ( false );
1498
}
1499
 
1500
 
1501
void PictureBrowser::collectionsAddImagesCancelButtonClicked()
1502
{
1503
        collectionsStackedwidget->setCurrentIndex ( 0 );
1504
        updateCollectionsWidget ( false );
1505
        collectionsWidget->blockSignals ( false );
1506
}
1507
 
1508
 
1509
void PictureBrowser::updateBrowser ( bool filter, bool sort, bool reload )
1510
{
1511
        if ( filter )
1512
        {
1513
                applyFilters();
1514
        }
1515
 
1516
        if ( sort )
1517
        {
1518
                pImages->sortPreviewImages ( pbSettings.sortSetting );
1519
        }
1520
 
1521
        if ( reload )
1522
        {
1523
                previewImage *tmpImage;
1524
 
1525
                //force reload, check if needed is necessary
1526
                for ( int i = 0 ; i < pImages->previewImagesList.size() ; ++i )
1527
                {
1528
                        tmpImage = pImages->previewImagesList.at ( i );
1529
                        tmpImage->previewImageLoading = false;
1530
                        tmpImage->previewIconCreated = false;
1531
                }
1532
        }
1533
 
1534
        pModel->setModelItemsList ( pImages->previewImagesList );
1535
        statusLabel->setText ( QString ( "%1 image(s) displayed, %2 image(s) filtered" ).arg ( imagesDisplayed ).arg ( imagesFiltered ) );
1536
}
1537
 
1538
 
1539
void PictureBrowser::loadIcons()
1540
{
1541
        iconArrowUp = new QIcon ( loadIcon ( "pitr_green_arrows_set_1.svg" ) );
1542
        iconArrowDown = new QIcon ( loadIcon ( "pitr_green_arrows_set_5.svg" ) );
1543
        iconFolderBrowser = new QIcon ( loadIcon ( "sarxos_Simple_Folder_Seek.svg" ) );
1544
        iconCollectionsBrowser = new QIcon ( loadIcon ( "sarxos_Simple_Green_Yellow_Blue_Violet_Folders.svg" ) );
1545
        iconDocumentBrowser = new QIcon ( loadIcon ( "sarxos_Paper_Sheets.svg" ) );
1546
        iconDocument = new QIcon ( loadIcon ( "doc.png" ) );
1547
        iconCollection = new QIcon ( loadIcon ( "cmyk.png" ) );
1548
        iconOk = new QIcon ( loadIcon ( "ok22.png" ) );
1549
        iconClose = new QIcon ( loadIcon ( "/16/close.png" ) );
1550
        iconZoomPlus = new QIcon ( loadIcon ( "viewmagin.png" ) );
1551
        iconZoomMinus = new QIcon ( loadIcon ( "viewmagout.png" ) );
1552
        iconNew = new QIcon ( loadIcon ( "/16/insert-table.png" ) );
1553
        iconNew2 = new QIcon ( loadIcon ( "/16/document-new.png" ) );
1554
        iconEdit = new QIcon ( loadIcon ( "/16/document-properties.png" ) );
1555
        iconRemove = new QIcon ( loadIcon ( "/16/edit-cut.png" ) );
1556
        iconLoad = new QIcon ( loadIcon ( "/16/document-open.png" ) );
1557
        iconSave = new QIcon ( loadIcon ( "/16/document-save.png" ) );
1558
        iconPlus = new QIcon ( loadIcon ( "/16/list-add.png" ) );
1559
        iconMinus = new QIcon ( loadIcon ( "/16/list-remove.png" ) );
1560
        iconPen = new QIcon ( loadIcon ( "/16/story-editor.png" ) );
1561
 
1562
        collectionsNewCategoryButton->setIcon ( *iconNew );
1563
        collectionsNewButton->setIcon ( *iconNew2 );
1564
        collectionsRenameButton->setIcon ( *iconEdit );
1565
        collectionsDeleteButton->setIcon ( *iconRemove );
1566
        collectionsImportButton->setIcon ( *iconLoad );
1567
        collectionsExportButton->setIcon ( *iconSave );
1568
        collectionsAddImagesButton->setIcon ( *iconPlus );
1569
        collectionsRemoveImagesButton->setIcon ( *iconMinus );
1570
        collectionsTagImagesButton->setIcon ( *iconPen );
1571
        collectionsAddImagesOkButton->setIcon ( *iconOk );
1572
        collectionsAddImagesCancelButton->setIcon ( *iconClose );
1573
 
1574
        navigationBox->setItemIcon ( 0, *iconFolderBrowser );
1575
        navigationBox->setItemIcon ( 1, *iconCollectionsBrowser );
1576
        navigationBox->setItemIcon ( 2, *iconDocumentBrowser );
1577
 
1578
        zoomPlusButton->setIcon ( *iconZoomPlus );
1579
        zoomMinusButton->setIcon ( *iconZoomMinus );
1580
 
1581
        actionsGoButton->setIcon ( *iconOk );
1582
 
1583
        closeButton->setIcon ( *iconClose );
1584
 
1585
        moreButton->setIcon ( *iconArrowDown );
1586
}
1587
 
1588
 
1589
void PictureBrowser::setSettings()
1590
{
1591
//set settings
1592
        if ( pbSettings.saveSettings )
1593
        {
1594
                saveSettingsCheckbox->setCheckState ( Qt::Checked );
1595
        }
1596
 
1597
        if ( pbSettings.showMore )
1598
        {
1599
                expandDialog ( true );
1600
        }
1601
        else
1602
        {
1603
                expandDialog ( false );
1604
        }
1605
 
1606
        if ( pbSettings.sortOrder )
1607
        {
1608
                sortOrderButton->setIcon ( *iconArrowUp );
1609
        }
1610
        else
1611
        {
1612
                sortOrderButton->setIcon ( *iconArrowDown );
1613
        }
1614
 
1615
        sortCombobox->setCurrentIndex ( pbSettings.sortSetting );
1616
        previewModeCombobox->setCurrentIndex ( pbSettings.previewMode );
1617
 
1618
        if ( pbSettings.alwaysOnTop )
1619
        {
1620
                alwaysOnTopCheckbox->setCheckState ( Qt::Checked );
1621
                setAlwaysOnTop ( true );
1622
        }
1623
}
1624
 
1625
void PictureBrowser::changedDocument ( ScribusDoc* doc )
1626
{
1627
        srcDoc = doc;
1628
        updateDocumentbrowser();
1629
        actionsGoButton->setEnabled ( true );
1630
        insertImageButton->setEnabled ( true );
1631
}
1632
 
1633
void PictureBrowser::closedDocument()
1634
{
1635
        documentWidget->clear();
1636
        documentItems.clear();
1637
        srcDoc = NULL;
1638
        pImages->clearPreviewImagesList();
1639
        updateBrowser ( false, false, false );
1640
        actionsGoButton->setEnabled ( false );
1641
        insertImageButton->setEnabled ( false );
1642
}
1643
 
1644
void PictureBrowser::updateDocumentbrowser()
1645
{
1646
        documentWidget->clear();
1647
        documentItems.clear();
13658 cbradney 1648
        QTreeWidgetItem* allpages=new QTreeWidgetItem ( documentWidget, QStringList ( "All Pages" ) );
13520 pierre 1649
        allpages->setData ( 0, Qt::UserRole, 0 );
1650
        allpages->setExpanded ( true );
1651
        documentWidget->addTopLevelItem ( allpages );
1652
 
1653
        QTreeWidgetItem *tmpItem;
1654
 
1655
        for ( int i = 0 ; i < ( int ) ( srcDoc->Pages->count() ) ; ++i )
1656
        {
1657
                tmpItem = new QTreeWidgetItem ( allpages, QStringList ( QString ( "Page %1" ).arg ( i+1 ) ) );
1658
                tmpItem->setData ( 0, Qt::UserRole, ( i+1 ) );
1659
                tmpItem->setIcon ( 0, *iconDocument );
1660
                documentItems.append ( tmpItem );
1661
        }
1662
 
1663
        documentWidget->insertTopLevelItems ( 0, documentItems );
1664
}
1665
 
1666
 
1667
void PictureBrowser::previewImageSelectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )
1668
{
13678 pierre 1669
        QItemSelectionModel *selectionModel = imageViewArea->SelectionModel();
13520 pierre 1670
        QModelIndexList selection = selectionModel->selectedIndexes();
1671
        int tmpIndex;
1672
 
1673
 
1674
        selectedIndexes.clear();
1675
 
1676
        for ( int i = 0 ; i < selection.size() ; ++i )
1677
        {
1678
                tmpIndex = selection.at ( i ).row();
1679
 
1680
                //take filtered images into account
1681
                for ( int j = 0 ; ( j <= tmpIndex ) && ( j < pImages->previewImagesList.size() ) ; ++j )
1682
                {
1683
                        if ( pImages->previewImagesList.at ( j )->filtered )
1684
                        {
1685
                                tmpIndex++;
1686
                        }
1687
                }
1688
 
1689
                selectedIndexes.append ( tmpIndex );
1690
        }
1691
 
1692
        updateTagImagesTab();
1693
}
1694
 
1695
 
1696
void PictureBrowser::updateInformationTab ( int index )
1697
{
1698
        if ( pbSettings.showMore && ( tabWidget->currentIndex() == 0 ) )
1699
        {
1700
                if ( ( index >= 0 ) && ( index < pModel->modelItemsList.size() ) )
1701
                {
1702
                        previewImage *tmpImage;
1703
                        tmpImage = pModel->modelItemsList.at ( index );
1704
 
1705
                        informationFilenameLabel->setText ( tmpImage->fileInformation.fileName() );
1706
                        informationFilepathLabel->setText ( tmpImage->fileInformation.absolutePath() );
13658 cbradney 1707
                        informationFilesizeLabel->setText ( QString ( "%1 Bytes" ).arg ( tmpImage->fileInformation.size() ) );
13520 pierre 1708
                        informationFiledateLabel->setText ( tmpImage->fileInformation.lastModified().toString ( "dd.MM.yyyy hh:mm:ss" ) );
1709
 
13685 pierre 1710
                        if(tmpImage->previewImageLoading)
1711
                                informationFilenameLabel->setText (tr("Image still loading"));
1712
                        else if ( tmpImage->imgInfo->valid )
13520 pierre 1713
                        {
1714
                                QString format;
1715
 
1716
                                switch ( tmpImage->imgInfo->type )
1717
                                {
1718
                                        case 0:
1719
                                                format = tr ( "JPG" );
1720
                                                break;
1721
 
1722
                                        case 1:
1723
                                                format = tr ( "TIFF" );
1724
                                                break;
1725
 
1726
                                        case 2:
1727
                                                format = tr ( "PSD" );
1728
                                                break;
1729
 
1730
                                        case 3:
1731
                                                format = tr ( "EPS/PS" );
1732
                                                break;
1733
 
1734
                                        case 4:
1735
                                                format = tr ( "PDF" );
1736
                                                break;
1737
 
1738
                                        case 5:
1739
                                                format = tr ( "JPG2000" );
1740
                                                break;
1741
 
1742
                                        case 6:
1743
                                                format = tmpImage->fileInformation.suffix().toUpper();
1744
                                                break;
1745
 
1746
                                        case 7:
1747
                                                format = tr ( "emb. PSD" );
1748
                                                break;
1749
 
1750
                                        default:
1751
                                                format = tr ( "not available" );
1752
                                                break;
1753
                                }
1754
 
1755
                                informationFormatLabel->setText ( format );
1756
                                informationColorspaceLabel->setText ( colorSpaceText ( tmpImage->imgInfo->colorspace ) );
1757
                                informationDpiLabel->setText ( QString ( "%1 x %2" ).arg ( tmpImage->imgInfo->xdpi ).arg ( tmpImage->imgInfo->ydpi ) );
13658 cbradney 1758
                                informationWidthLabel->setText ( QString ( "%1 Pixels" ).arg ( tmpImage->imgInfo->width ) );
1759
                                informationHeightLabel->setText ( QString ( "%1 Pixels" ).arg ( tmpImage->imgInfo->height ) );
13520 pierre 1760
                                informationLayersLabel->setText ( QString ( "%1" ).arg ( tmpImage->imgInfo->layers ) );
1761
 
1762
                                if ( tmpImage->imgInfo->embedded )
1763
                                {
13658 cbradney 1764
                                        informationEmbeddedLabel->setText ( QString ( "Yes" ) );
13520 pierre 1765
                                }
1766
                                else
1767
                                {
13658 cbradney 1768
                                        informationEmbeddedLabel->setText ( QString ( "No" ) );
13520 pierre 1769
                                }
1770
 
1771
                                informationProfilenameLabel->setText ( QString ( "%1" ).arg ( tmpImage->imgInfo->profileName ) );
1772
                        }
1773
                }
1774
                else
1775
                {
13685 pierre 1776
                        informationFilenameLabel->setText ( tr("No image selected") );
13520 pierre 1777
                }
1778
        }
1779
}
1780
 
1781
 
1782
void PictureBrowser::updateCollectionsWidget ( bool addImages )
1783
{
1784
        collectionsWidget->blockSignals ( true );
1785
        collectionsWidget->clear();
1786
 
1787
        for ( int i = 0 ; i < collectionsDb.size() ; ++i )
1788
        {
1789
                collections *tmpCollections = collectionsDb.at ( i );
1790
 
1791
                QTreeWidgetItem *tmpCategory;
1792
                tmpCategory = new QTreeWidgetItem ( collectionsWidget, QStringList ( tmpCollections->name ) );
1793
                tmpCategory->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
13658 cbradney 1794
                tmpCategory->setData ( 0, Qt::UserRole, QString ( "Category" ) );
13520 pierre 1795
                tmpCategory->setExpanded ( true );
1796
 
1797
                for ( int j = 0 ; j < tmpCollections->collectionNames.size() ; ++j )
1798
                {
1799
                        QTreeWidgetItem *tmpItem;
1800
                        tmpItem = new QTreeWidgetItem ( tmpCategory, QStringList ( tmpCollections->collectionNames.at ( j ) ) );
1801
 
1802
                        if ( addImages )
1803
                        {
1804
                                tmpItem->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled );
1805
                                tmpItem->setCheckState ( 0, Qt::Unchecked );
1806
                        }
1807
                        else
1808
                        {
1809
                                tmpItem->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
1810
                        }
1811
 
1812
                        tmpItem->setData ( 0, Qt::UserRole, tmpCollections->collectionFiles.at ( j ) );
1813
                        tmpItem->setIcon ( 0, *iconCollection );
1814
                }
1815
        }
1816
 
1817
        collectionsWidget->blockSignals ( false );
1818
}
1819
 
1820
 
1821
void PictureBrowser::updateCollectionsAddImagesCombobox()
1822
{
1823
        /*
1824
        collections *tmpCollections;
1825
 
1826
                for(int i = 0 ; i < collectionsDb.size() ; ++i)
1827
                {
1828
                tmpCollections = collectionsDb.at(i);
1829
 
1830
                        for(int j = 0 ; j < tmpCollections->collectionNames.size() ; ++j)
1831
                        {
1832
                        collectionsAddImagesCombobox->addItem(QString("%1/%2").arg(tmpCollections->name).arg(tmpCollections->collectionNames.at(j)), false);
1833
                        }
1834
                }*/
1835
}
1836
 
1837
 
1838
void PictureBrowser::expandDialog ( bool expand )
1839
{
1840
        if ( expand )
1841
        {
1842
                tabWidget->show();
1843
 
1844
                resize ( 872, 550 );
13658 cbradney 1845
                moreButton->setText ( "Hide" );
13520 pierre 1846
                moreButton->setIcon ( *iconArrowUp );
1847
        }
1848
        else
1849
        {
1850
                tabWidget->hide();
1851
 
1852
                resize ( 872, 385 );
13658 cbradney 1853
                moreButton->setText ( "More" );
13520 pierre 1854
                moreButton->setIcon ( *iconArrowDown );
1855
        }
1856
}
1857
 
1858
 
1859
void PictureBrowser::setAlwaysOnTop ( bool alwaysOnTop )
1860
{
1861
        Qt::WindowFlags flags = windowFlags();
1862
 
1863
//save current position of the window
1864
        QPoint pos = mapToParent ( QPoint ( 0, 0 ) );
1865
 
1866
        if ( alwaysOnTop )
1867
        {
1868
                flags |= Qt::WindowStaysOnTopHint;
1869
        }
1870
        else
1871
        {
1872
                flags ^= Qt::WindowStaysOnTopHint;
1873
        }
1874
 
1875
        this->setWindowFlags ( flags );
1876
 
1877
//move to previous position
1878
        move ( pos );
1879
 
1880
//FIXME: calling setWindowFlags sets window invisible (odd behaviour, documented). causes flickering
1881
        this->show();
1882
}
1883
 
1884
 
1885
void PictureBrowser::saveCollectionsDb()
1886
{
1887
        QTreeWidgetItem *tmpItem, *tmpItem2;
1888
        collections *tmpCollections;
1889
 
1890
        for ( int i = 0 ; i < collectionsDb.size() ; ++i )
1891
        {
1892
                delete collectionsDb.at ( i );
1893
        }
1894
 
1895
        collectionsDb.clear();
1896
 
1897
 
1898
        for ( int i = 0 ; i < collectionsWidget->topLevelItemCount() ; ++i )
1899
        {
1900
                tmpItem = collectionsWidget->topLevelItem ( i );
1901
 
1902
                tmpCollections = new collections ( tmpItem->text ( 0 ) );
1903
                collectionsDb.append ( tmpCollections );
1904
 
1905
                for ( int j = 0 ; j < tmpItem->childCount() ; ++j )
1906
                {
1907
                        tmpItem2 = tmpItem->child ( j );
1908
                        tmpCollections->collectionNames.append ( tmpItem2->text ( 0 ) );
1909
                        tmpCollections->collectionFiles.append ( tmpItem2->data ( 0, Qt::UserRole ).toString() );
1910
                }
1911
        }
1912
 
1913
 
1914
        if ( !cdbwt )
1915
        {
1916
                cdbwt = new collectionsWriterThread ( cdbFile, collectionsDb );
1917
                connect ( cdbwt, SIGNAL ( finished() ), this, SLOT ( collectionsDbWriterThreadFinished() ) );
1918
                cdbwt->start();
1919
        }
1920
        else
1921
        {
1922
                cdbwt->restart();
1923
        }
1924
}
1925
 
1926
 
1927
void PictureBrowser::applyFilters()
1928
{
1929
        QListWidgetItem *item;
1930
        int c[5] = {0, 0, 0, 0, 0};
1931
        int filterType;
1932
 
1933
        pImages->clearFilters();
1934
 
1935
        for ( int i = 0 ; i < filterFiltersListwidget->count() ; ++i )
1936
        {
1937
                item = filterFiltersListwidget->item ( i );
1938
                filterType = filters->filterMap.at ( i );
1939
 
1940
                if ( item->checkState() == Qt::Checked )
1941
                {
1942
                        switch ( filterType )
1943
                        {
1944
                                case 0:
1945
                                        if ( c[0] < filters->nameFilters.size() )
1946
                                        {
1947
                                                pImages->filterFileName ( filters->nameFilters.at ( c[0] ), filters->nameInverts.at ( c[0] ) );
1948
                                        }
1949
                                        break;
1950
 
1951
                                case 1:
1952
                                        if ( c[1] < filters->dateFilters.size() )
1953
                                        {
1954
                                                pImages->filterFileModified ( filters->dateFilters.at ( c[1] ), filters->dateInverts.at ( c[1] ) );
1955
                                        }
1956
                                        break;
1957
 
1958
                                case 2:
1959
                                        if ( c[2] < filters->sizeFilters.size() )
1960
                                        {
1961
                                                pImages->filterFileSize ( ( filters->sizeFilters.at ( c[2] ) *1024 ), filters->sizeInverts.at ( c[2] ) );
1962
                                        }
1963
                                        break;
1964
 
1965
                                case 3:
1966
                                        if ( c[3] < filters->typeFilters.size() )
1967
                                        {
1968
                                                pImages->filterFileType ( filters->typeFilters.at ( c[3] ), true );
1969
                                        }
1970
                                case 4:
1971
                                        if ( c[4] < filters->tagFilters.size() )
1972
                                        {
1973
                                                pImages->filterTag ( filters->tagFilters.at ( c[4] ), true );
1974
                                        }
1975
                                        break;
1976
                        }
1977
                }
1978
 
1979
                c[filterType]++;
1980
        }
1981
}
1982
 
1983
 
1984
void PictureBrowser::updateTagImagesTab()
1985
{
1986
        QStringList tmpTags, tmpTagList;
1987
 
1988
 
1989
        collectionsSelectedImagesListwidget->clear();
1990
        collectionsTagImagesCombobox->clear();
1991
 
1992
 
1993
        for ( int i = 0 ; ( i < selectedIndexes.size() ) && ( i < currCollection->imageFiles.size() ) ; ++i )
1994
        {
1995
                new QListWidgetItem ( pImages->previewImagesList.at ( selectedIndexes.at ( i ) )->fileInformation.absoluteFilePath(), collectionsSelectedImagesListwidget );
1996
        }
1997
 
1998
        for ( int i = 0 ; i < currCollection->tags.size() ; ++i )
1999
        {
2000
                tmpTags = currCollection->tags.at ( i );
2001
 
2002
                for ( int j = 0 ; j < tmpTags.size() ; ++j )
2003
                {
2004
                        if ( !tmpTagList.contains ( tmpTags.at ( j ) ) )
2005
                        {
2006
                                tmpTagList.append ( tmpTags.at ( j ) );
2007
                        }
2008
                }
2009
        }
2010
 
2011
 
2012
        for ( int i = 0 ; i < tmpTagList.size() ; ++i )
2013
        {
2014
                collectionsTagImagesCombobox->addItem ( tmpTagList.at ( i ), 0 );
2015
 
2016
                int tagCount=0;
2017
 
2018
                for ( int j = 0 ; j < selectedIndexes.size() ; ++j )
2019
                {
2020
                        if ( pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.contains ( tmpTagList.at ( i ) ) )
2021
                        {
2022
                                tagCount++;
2023
                        }
2024
                        else if ( tagCount > 0 )
2025
                        {
2026
                                break;
2027
                        }
2028
                }
2029
 
2030
                if ( tagCount == selectedIndexes.size() )
2031
                {
2032
                        collectionsTagImagesCombobox->setCheckstate ( i, 1 );
2033
                }
2034
                else if ( tagCount > 0 )
2035
                {
2036
                        collectionsTagImagesCombobox->setCheckstate ( i, 2 );
2037
                }
2038
        }
2039
}
2040
 
2041
 
2042
imageFilters::imageFilters()
2043
{
2044
}
2045
 
2046
 
2047
picturebrowserSettings::picturebrowserSettings()
2048
{
2049
}
2050
 
2051
 
2052
void picturebrowserSettings::load()
2053
{
2054
        PrefsContext *picturebrowserPluginPrefs = PrefsManager::instance()->prefsFile->getPluginContext ( "picturebrowser" );
2055
 
2056
        saveSettings = picturebrowserPluginPrefs->getBool ( "pb_savesettings", true );
2057
        showMore = picturebrowserPluginPrefs->getBool ( "pb_showmore", false );
2058
        sortOrder = picturebrowserPluginPrefs->getBool ( "pb_sortorder", false );
2059
        sortSetting = picturebrowserPluginPrefs->getInt ( "pb_sortsetting", 0 );
2060
        previewMode = picturebrowserPluginPrefs->getInt ( "pb_previewmode", 0 );
2061
        previewIconSize = picturebrowserPluginPrefs->getInt ( "pb_previewiconsize", 128 );
2062
        alwaysOnTop = picturebrowserPluginPrefs->getBool ( "pb_alwaysontop", false );
2063
 
2064
// default value "dog" will be used if "s" doesn't already exist
2065
//QString s = myPluginPrefs->get("s", "dog");
2066
}
2067
 
2068
 
2069
void picturebrowserSettings::save()
2070
{
2071
        PrefsContext *picturebrowserPluginPrefs = PrefsManager::instance()->prefsFile->getPluginContext ( "picturebrowser" );
2072
 
2073
        picturebrowserPluginPrefs->set ( "pb_savesettings", saveSettings );
2074
        picturebrowserPluginPrefs->set ( "pb_showmore", showMore );
2075
        picturebrowserPluginPrefs->set ( "pb_sortorder", sortOrder );
2076
        picturebrowserPluginPrefs->set ( "pb_sortsetting", sortSetting );
2077
        picturebrowserPluginPrefs->set ( "pb_previewmode", previewMode );
2078
        picturebrowserPluginPrefs->set ( "pb_previewiconsize", previewIconSize );
2079
        picturebrowserPluginPrefs->set ( "pb_alwaysontop", alwaysOnTop );
2080
 
2081
//picturebrowserPluginPrefs->set("previewMode", "cat");
2082
}
2083
 
2084
 
2085
void picturebrowserSettings::reset()
2086
{
2087
        saveSettings = true;
2088
        showMore = false;
2089
        sortOrder = false;
2090
        sortSetting = 0;
2091
        previewMode = 0;
2092
        previewIconSize = 128;
2093
        alwaysOnTop = false;
2094
 
2095
        save();
2096
}