Subversion Repositories Scribus

Rev

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