Subversion Repositories Scribus

Rev

Rev 13658 | Rev 13678 | 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"
21
 
22
PictureBrowser::PictureBrowser ( ScribusDoc* doc, QWidget *parent ) : QDialog ( parent )
23
{
24
        setupUi ( this );
25
 
26
//set Scribusdoc
27
        srcDoc = doc;
28
        ScMW = doc->scMW();
29
 
30
//load settings
31
        pbSettings.load();
32
 
33
 
34
        connect ( navigationBox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( navigate ( int ) ) );
35
        connect ( sortCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( sortChanged ( int ) ) );
36
        connect ( previewModeCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( previewModeChanged ( int ) ) );
37
        connect ( moreButton, SIGNAL ( clicked() ), this, SLOT ( moreButtonClicked() ) );
38
        connect ( resetSettingsButton, SIGNAL ( clicked() ), this, SLOT ( resetSettingsButtonClicked() ) );
39
        connect ( sortOrderButton, SIGNAL ( clicked() ), this, SLOT ( sortOrderButtonClicked() ) );
40
        connect ( actionsGoButton, SIGNAL ( clicked() ), this, SLOT ( actionsGoButtonClicked() ) );
41
 
42
        connect ( zoomPlusButton, SIGNAL ( clicked() ), this, SLOT ( zoomPlusButtonClicked() ) );
43
        connect ( zoomMinusButton, SIGNAL ( clicked() ), this, SLOT ( zoomMinusButtonClicked() ) );
44
 
45
//close button
46
        connect ( closeButton, SIGNAL ( clicked() ), this, SLOT ( accept() ) );
47
 
48
        connect ( tabWidget, SIGNAL ( currentChanged ( int ) ), this, SLOT ( tabWidgetCurrentChanged ( int ) ) );
49
 
50
//"goto page" button in documentbrowser
51
        connect ( gotoPageButton, SIGNAL ( clicked() ), this, SLOT ( gotoPageButtonClicked() ) );
52
 
53
        connect ( folderView, SIGNAL ( activated ( const QModelIndex & ) ), this, SLOT ( dirChosen ( const QModelIndex & ) ) );
54
        connect ( folderView, SIGNAL ( clicked ( const QModelIndex & ) ), this, SLOT ( dirChosen ( const QModelIndex & ) ) );
55
        connect ( folderView, SIGNAL ( doubleClicked ( const QModelIndex & ) ), this, SLOT ( dirChosen ( const QModelIndex & ) ) );
56
 
57
//changing page
58
        connect ( this, SIGNAL ( selectPage ( int ) ), ScCore->primaryMainWindow(), SLOT ( selectPagesFromOutlines ( int ) ) );
59
        connect ( this, SIGNAL ( selectMasterPage ( QString ) ), ScCore->primaryMainWindow(), SLOT ( manageMasterPages ( QString ) ) );
60
 
61
//always-on-top checkbox
62
        connect ( alwaysOnTopCheckbox, SIGNAL ( stateChanged ( int ) ), this, SLOT ( alwaysOnTopCheckboxStateChanged() ) );
63
//save settings checkbox
64
        connect ( saveSettingsCheckbox, SIGNAL ( stateChanged ( int ) ), this, SLOT ( saveSettingsCheckboxStateChanged() ) );
65
 
66
//folderbrowser:include subdirs
67
        connect ( subdirsCheckbox, SIGNAL ( stateChanged ( int ) ), this, SLOT ( subdirsCheckboxStateChanged() ) );
68
 
69
        loadIcons();
70
 
71
        setSettings();
72
 
73
        navigationStack->setCurrentIndex ( 0 );
74
 
75
 
76
//maybe add QDir::Readable, although users might wonder where their folders are
77
        folderModel.setFilter ( QDir::AllDirs|QDir::Drives|QDir::NoDotAndDotDot|QDir::NoSymLinks/*|QDir::Hidden*/ );
78
        folderView->setModel ( &folderModel );
79
 
80
// this should give a little performance boost
81
        folderView->setUniformRowHeights ( true );
82
        folderView->setCurrentIndex ( folderModel.index ( QDir::currentPath() ) );
83
        folderView->scrollTo ( folderView->currentIndex(), QAbstractItemView::PositionAtTop );
84
        folderView->resizeColumnToContents ( 0 );
85
 
86
//this needs to be calculated later from height/width of QListView!
87
        previewIconsVisible = 8;
88
        folderBrowserIncludeSubdirs = false;
89
 
90
        imagesDisplayed = 0;
91
        imagesFiltered = 0;
92
        previewIconIndex = -1;
93
        insertCustomPosition = false;
94
        insertCustomSize = false;
95
        currentRow = 0;
96
 
97
//set up previewimages instance, fill with last shown images later
98
        pImages = new previewImages ( QStringList() );
99
 
100
//set threadpointer to 0
101
        fit = 0;
102
        crt = 0;
103
        cdbwt = 0;
104
        clrt = 0;
105
 
106
 
107
        pModel = new PreviewImagesModel ( this );
108
 
109
//create loadImagesThread instance, connect and run it
110
        lit = new loadImagesThread ( this, pModel );
111
        lit->start();
112
 
113
        connect ( imageViewArea, SIGNAL ( clicked ( const QModelIndex & ) ), this, SLOT ( previewIconClicked ( const QModelIndex & ) ) );
114
        connect ( imageViewArea, SIGNAL ( doubleClicked ( const QModelIndex & ) ), this, SLOT ( previewIconDoubleClicked ( const QModelIndex & ) ) );
115
        imageViewArea->setViewMode ( QListView::IconMode );
116
        imageViewArea->setIconSize ( QSize ( pbSettings.previewIconSize, pbSettings.previewIconSize ) );
117
        imageViewArea->setGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
118
        imageViewArea->setUniformItemSizes ( true );
119
        imageViewArea->setContextMenuPolicy ( Qt::CustomContextMenu );
120
        imageViewArea->setSelectionMode ( QAbstractItemView::ExtendedSelection );
13669 pierre 121
        imageViewArea->setMovement ( QListView::Static);
13520 pierre 122
        imageViewArea->setResizeMode ( QListView::Adjust );
123
        imageViewArea->setModel ( pModel );
124
 
125
//register item selections
126
        connect ( imageViewArea->selectionModel(), SIGNAL ( selectionChanged ( const QItemSelection &, const QItemSelection & ) ), this, SLOT ( previewImageSelectionChanged ( const QItemSelection &, const QItemSelection & ) ) );
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
232
        nameFilters << "*.jpg" << "*.jpeg" << "*.gif" << "*.png" << "*.ps" << "*.psd" << "*.tif" << "*.tiff" << "*.xpm" << "*.eps" << "*.epsf" << "*.epsi" << "*.eps2" << "*.eps3" << "*.epi" << "*.epg";
233
 
234
 
235
//filter/search setup
236
        connect ( filterTargetCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( filterTargetComboboxChanged ( int ) ) );
237
        connect ( filterCriteriaCombobox, SIGNAL ( currentIndexChanged ( int ) ), this, SLOT ( filterCriteriaComboboxChanged ( int ) ) );
238
        connect ( filterFilterButton, SIGNAL ( clicked() ), this, SLOT ( filterFilterButtonClicked() ) );
239
        connect ( filterClearButton, SIGNAL ( clicked() ), this, SLOT ( filterClearButtonClicked() ) );
240
        connect ( filterAddCriterionButton, SIGNAL ( clicked() ), this, SLOT ( filterAddCriterionButtonClicked() ) );
241
        connect ( filterSearchDirButton, SIGNAL ( clicked() ), this, SLOT ( filterSearchDirButtonClicked() ) );
242
 
243
        filters = new imageFilters;
244
 
245
 
13658 cbradney 246
        filterTypeCombobox->addItem ( "All Supported Formats", 1 );
13520 pierre 247
 
248
        for ( int i = 0 ; i < nameFilters.size() ; ++i )
249
        {
250
                filterTypeCombobox->addItem ( nameFilters.at ( i ), 1 );
251
        }
252
 
253
//fix: scrollperitem doesnt work
254
//imageViewArea->setLayoutMode(QListView::Batched);
255
//imageViewArea->setBatchSize(4);
256
//imageViewArea->setVerticalScrollMode(QAbstractItemView::ScrollPerItem);
257
//imageViewArea->setHorizontalScrollMode(QAbstractItemView::ScrollPerItem);
258
}
259
 
260
 
261
PictureBrowser::~PictureBrowser()
262
{
263
}
264
 
265
 
266
void PictureBrowser::callLoadImageThread ( int row, int pId )
267
{
268
        previewImage *imageToLoad = pModel->modelItemsList.at ( row );
269
 
270
        emit loadImageJob ( row, imageToLoad->fileInformation.absoluteFilePath(), pbSettings.previewIconSize, pId );
271
}
272
 
273
 
274
void PictureBrowser::navigate ( int index )
275
{
276
        //this check shouldnt be necessary but you never know...
277
        if ( ( index >= 0 ) && ( index < 3 ) )
278
        {
279
                if ( index == 2 )
280
                {
281
                        updateDocumentbrowser();
282
                }
283
 
284
                navigationStack->setCurrentIndex ( index );
285
        }
286
}
287
 
288
 
289
void PictureBrowser::previewIconClicked ( const QModelIndex &index )
290
{
291
        int row = index.row();
292
 
293
        if ( row >= 0 )
294
        {
295
                previewIconIndex = row;
296
                updateInformationTab ( previewIconIndex );
297
        }
298
}
299
 
300
 
301
void PictureBrowser::previewIconDoubleClicked ( const QModelIndex &index )
302
{
303
        int row = index.row();
304
 
305
        if ( row >= 0 )
306
        {
307
                ScribusDoc *currentDoc ( ScMW->doc );
308
                Imagedialog *id ( new Imagedialog ( pImages->previewImagesList.at ( row )->fileInformation.absoluteFilePath(), currentDoc ,this ) );
309
 
310
                if ( id )
311
                {
312
                        id->setAttribute ( Qt::WA_DeleteOnClose );
313
                        id->show();
314
                        id->raise();
315
                        id->activateWindow();
316
                }
317
        }
318
}
319
 
320
 
321
void PictureBrowser::sortChanged ( int index )
322
{
323
        //this check shouldnt be necessary but you never know...
324
        if ( ( index >= 0 ) && ( index < 4 ) )
325
        {
326
                pbSettings.sortSetting = index;
327
 
328
                if ( saveSettingsCheckbox->isChecked() )
329
                {
330
                        pbSettings.save();
331
                }
332
 
333
                updateBrowser ( false, true, false );
334
        }
335
}
336
 
337
 
338
void PictureBrowser::previewModeChanged ( int index )
339
{
340
        if ( ( index >= 0 ) && ( index < 2 ) )
341
        {
342
                pbSettings.previewMode = index;
343
                imageViewArea->setGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
344
 
345
                if ( saveSettingsCheckbox->isChecked() )
346
                {
347
                        pbSettings.save();
348
                }
349
        }
350
}
351
 
352
 
353
// enlarge dialog to show more information/options
354
//FIXME: still quick and dirty, professional animation required
355
void PictureBrowser::moreButtonClicked()
356
{
357
        // dialog is not enlarged -> enlarge, change buttontext/icon
358
        if ( !pbSettings.showMore )
359
        {
360
                expandDialog ( true );
361
                pbSettings.showMore = true;
362
 
363
                if ( tabWidget->currentIndex() == 0 )
364
                {
365
                        updateInformationTab ( previewIconIndex );
366
                }
367
        }
368
        // dialog is enlarged, set back to original size, change buttontext/icon
369
        else
370
        {
371
                expandDialog ( false );
372
                pbSettings.showMore = false;
373
        }
374
 
375
        if ( saveSettingsCheckbox->isChecked() )
376
        {
377
                pbSettings.save();
378
        }
379
}
380
 
381
 
382
void PictureBrowser::resetSettingsButtonClicked()
383
{
384
        pbSettings.reset();
385
        setSettings();
386
}
387
 
388
 
389
void PictureBrowser::actionsGoButtonClicked()
390
{
391
        int index = actionsCombobox->currentIndex();
392
 
393
        if ( ( previewIconIndex < 0 ) || ( previewIconIndex > pImages->previewImagesList.size() ) )
394
        {
13658 cbradney 395
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No Image(s) Selected" ) );
13520 pierre 396
                return;
397
        }
398
 
399
        if ( index == 0 )
400
        {
401
                previewImage *tmpImage;
402
 
403
                //image from pModel needed here
404
                tmpImage = pModel->modelItemsList.at ( previewIconIndex );
405
                InsertAFrameData iafData;
406
 
407
                iafData.frameType=PageItem::ImageFrame;
408
                iafData.source=tmpImage->fileInformation.absoluteFilePath();
409
                iafData.locationType = 0;
410
                iafData.pageList = QString ( "" );
411
                iafData.positionType = 0;
412
                iafData.sizeType = 0;
413
                iafData.x = 0;
414
                iafData.y = 0;
415
                iafData.width = 0;
416
                iafData.height = 0;
417
                //iafData.impsetup=m_ImportSetup;
418
                iafData.columnCount = 0;
419
                iafData.columnGap = 0;
420
                iafData.linkTextFrames = false;
421
                iafData.linkToExistingFrame = false;
422
                iafData.linkToExistingFramePtr=NULL;
423
 
424
                tmpImage->insertIntoDocument ( srcDoc, iafData );
425
        }
426
        else if ( index == 1 )
427
        {
428
                if ( !pbSettings.showMore )
429
                {
430
                        expandDialog ( true );
431
                }
432
 
433
                if ( tabWidget->currentIndex() != 3 )
434
                {
435
                        tabWidget->setCurrentIndex ( 3 );
436
                }
437
        }
438
        else if ( index == 2 )
439
        {
440
                navigationBox->setCurrentIndex ( 1 );
441
                collectionsStackedwidget->setCurrentIndex ( 1 );
442
                updateCollectionsWidget ( true );
443
                collectionsWidget->blockSignals ( true );
444
        }
445
}
446
 
447
 
448
void PictureBrowser::sortOrderButtonClicked()
449
{
450
        if ( !pbSettings.sortOrder )
451
        {
452
                pbSettings.sortOrder = true;
453
                sortOrderButton->setIcon ( *iconArrowUp );
454
        }
455
        else
456
        {
457
                pbSettings.sortOrder = false;
458
                sortOrderButton->setIcon ( *iconArrowDown );
459
        }
460
 
461
        if ( saveSettingsCheckbox->isChecked() )
462
        {
463
                pbSettings.save();
464
        }
465
 
466
        updateBrowser ( false, false, false );
467
}
468
 
469
 
470
void PictureBrowser::zoomPlusButtonClicked()
471
{
472
        if ( pbSettings.previewIconSize < 500 )
473
        {
474
                pbSettings.previewIconSize += 20;
475
 
476
                imageViewArea->setIconSize ( QSize ( pbSettings.previewIconSize, pbSettings.previewIconSize ) );
477
                imageViewArea->setGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
478
 
479
                pModel->createDefaultIcon ( pbSettings.previewIconSize );
480
 
481
                if ( saveSettingsCheckbox->isChecked() )
482
                {
483
                        pbSettings.save();
484
                }
485
 
486
                updateBrowser ( false, false, true );
487
        }
488
}
489
 
490
 
491
void PictureBrowser::zoomMinusButtonClicked()
492
{
493
        if ( pbSettings.previewIconSize > 50 )
494
        {
495
                pbSettings.previewIconSize -= 20;
496
 
497
                imageViewArea->setIconSize ( QSize ( pbSettings.previewIconSize, pbSettings.previewIconSize ) );
498
                imageViewArea->setGridSize ( QSize ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ), ( qRound ( ( 1.1 ) *pbSettings.previewIconSize ) + pbSettings.previewMode*10 ) ) );
499
 
500
                pModel->createDefaultIcon ( pbSettings.previewIconSize );
501
 
502
                if ( saveSettingsCheckbox->isChecked() )
503
                {
504
                        pbSettings.save();
505
                }
506
 
507
                updateBrowser ( false, false, true );
508
        }
509
}
510
 
511
 
512
void PictureBrowser::tabWidgetCurrentChanged ( int index )
513
{
514
        if ( index == 0 )
515
        {
516
                updateInformationTab ( previewIconIndex );
517
        }
518
}
519
 
520
 
521
void PictureBrowser::gotoPageButtonClicked()
522
{
523
        QTreeWidgetItem *item = documentWidget->currentItem();
524
 
525
        if ( !item )
526
        {
527
                return;
528
        }
529
 
530
        int id = item->data ( 0, Qt::UserRole ).toInt();
531
 
532
        if ( id > 0 )
533
        {
534
                id--;
535
        }
536
 
537
        ScCore->primaryMainWindow()->closeActiveWindowMasterPageEditor();
538
        emit selectPage ( id );
539
}
540
 
541
 
542
void PictureBrowser::alwaysOnTopCheckboxStateChanged()
543
{
544
        pbSettings.alwaysOnTop = alwaysOnTopCheckbox->isChecked();
545
 
546
        if ( saveSettingsCheckbox->isChecked() )
547
        {
548
                pbSettings.save();
549
        }
550
 
551
        setAlwaysOnTop ( pbSettings.alwaysOnTop );
552
}
553
 
554
 
555
void PictureBrowser::saveSettingsCheckboxStateChanged()
556
{
557
        pbSettings.saveSettings = saveSettingsCheckbox->isChecked();
558
        pbSettings.save();
559
}
560
 
561
 
562
void PictureBrowser::subdirsCheckboxStateChanged()
563
{
564
        folderBrowserIncludeSubdirs = subdirsCheckbox->isChecked();
565
}
566
 
567
 
568
// processes chosen dirs in the folderbrowser
569
void PictureBrowser::dirChosen ( const QModelIndex &index )
570
{
571
        // as long as the folder doesnt change, only the first signal (click, doubleclick or activated) is processed
572
        if ( !tmpindex.isValid() || ( tmpindex != index ) )
573
        {
574
                tmpindex = index;
575
 
576
                currPath = folderModel.filePath ( index );
577
 
578
                if ( !fit )
579
                {
580
                        fit = new findImagesThread ( currPath, nameFilters, QDir::Name, folderBrowserIncludeSubdirs );
581
                        connect ( fit, SIGNAL ( finished() ), this, SLOT ( findImagesThreadFinished() ) );
582
                        fit->start();
583
                }
584
                else
585
                {
586
                        fit->restart();
587
                }
588
        }
589
}
590
 
591
 
592
void PictureBrowser::documentChosen ( QTreeWidgetItem * item, int column )
593
{
594
        PageItem *pItem;
595
        QStringList imageFiles;
596
 
597
        int id = item->data ( 0, Qt::UserRole ).toInt();
598
 
599
 
600
        for ( int i = 0; i < srcDoc->MasterItems.count(); ++i )
601
        {
602
                pItem = srcDoc->MasterItems.at ( i );
603
 
604
                if ( ( pItem->itemType() == PageItem::ImageFrame ) && ( pItem->PictureIsAvailable ) && ( !pItem->asLatexFrame() ) )
605
                {
606
                        if ( ( id == 0 ) || ( ( id-1 ) == pItem->OwnPage ) )
607
                        {
608
                                imageFiles.append ( pItem->Pfile );
609
                        }
610
                }
611
        }
612
 
613
        for ( int i = 0; i < srcDoc->Items->count(); ++i )
614
        {
615
                pItem = srcDoc->Items->at ( i );
616
 
617
                if ( ( pItem->itemType() == PageItem::ImageFrame ) && ( pItem->PictureIsAvailable ) && ( !pItem->asLatexFrame() ) )
618
                {
619
                        if ( ( id == 0 ) || ( ( id-1 ) == pItem->OwnPage ) )
620
                        {
621
                                imageFiles.append ( pItem->Pfile );
622
                        }
623
                }
624
        }
625
 
626
//todo: check if item is selected: item->isSelected()
627
 
628
 
629
        pImages->createPreviewImagesList ( imageFiles );
630
 
631
        updateBrowser ( true, true, false );
632
}
633
 
634
 
635
void PictureBrowser::collectionChosen ( QTreeWidgetItem * item, int column )
636
{
637
        QString collectionFile = item->data ( 0, Qt::UserRole ).toString();
638
 
13658 cbradney 639
        if ( collectionFile == "Category" )
13520 pierre 640
        {
641
                return;
642
        }
643
 
644
        currCollectionFile = collectionFile;
645
 
646
        if ( !crt )
647
        {
648
                crt = new collectionReaderThread ( currCollectionFile, false );
649
                connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
650
                crt->start();
651
        }
652
        else
653
        {
654
                crt->restart();
655
        }
656
}
657
 
658
 
659
void PictureBrowser::collectionsWidgetItemEdited ( QTreeWidgetItem * item, int column )
660
{
661
        saveCollectionsDb();
662
}
663
 
664
 
665
void PictureBrowser::findImagesThreadFinished()
666
{
667
        if ( fit->restartThread )
668
        {
669
                delete fit;
670
 
671
                //maybe the state of folderBrowserIncludeSubdirs needs to be saved when canceling the old thread
672
                fit = new findImagesThread ( currPath, nameFilters, QDir::Name, folderBrowserIncludeSubdirs );
673
                connect ( fit, SIGNAL ( finished() ), this, SLOT ( findImagesThreadFinished() ) );
674
                fit->start();
675
        }
676
        else
677
        {
678
                pImages->createPreviewImagesList ( fit->imageFiles );
679
 
680
                updateBrowser ( true, true, false );
681
 
682
                delete fit;
683
                fit = 0;
684
        }
685
}
686
 
687
 
688
void PictureBrowser::collectionReaderThreadFinished()
689
{
690
        if ( crt->restartThread )
691
        {
692
                bool import = crt->import;
693
                delete crt;
694
 
695
                crt = new collectionReaderThread ( currCollectionFile, import );
696
                connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
697
                crt->start();
698
 
699
                return;
700
        }
701
 
702
        switch ( crt->type )
703
        {
704
                case 0:
13658 cbradney 705
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "File not found or file is not a collection file" ) );
13520 pierre 706
                        break;
707
 
708
                case 1:
709
                        collectionsDb += crt->collectionsSet;
710
 
711
                        updateCollectionsWidget ( false );
712
                        updateCollectionsAddImagesCombobox();
713
                        break;
714
 
715
                case 2:
716
                        if ( crt->import )
717
                        {
718
                                collectionsWidget->blockSignals ( true );
719
 
720
                                QTreeWidgetItem *currItem = collectionsWidget->currentItem();
721
 
722
                                if ( !currItem )
723
                                {
724
                                        currItem = collectionsWidget->topLevelItem ( 0 );
725
 
726
                                        if ( !currItem )
727
                                        {
13658 cbradney 728
                                                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "You have to create a category first" ) );
13520 pierre 729
                                                return;
730
                                        }
731
                                }
732
 
733
                                QTreeWidgetItem *tmpItem;
734
 
735
                                if ( currItem->parent() )
736
                                {
737
                                        tmpItem = new QTreeWidgetItem ( currItem->parent(), QStringList ( crt->collection->name ) );
738
                                }
739
                                else
740
                                {
741
                                        tmpItem = new QTreeWidgetItem ( currItem, QStringList ( crt->collection->name ) );
742
                                }
743
 
744
                                tmpItem->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
745
                                tmpItem->setData ( 0, Qt::UserRole, crt->collection->file );
746
                                tmpItem->setIcon ( 0, *iconCollection );
747
                                collectionsWidget->blockSignals ( false );
748
 
749
                                collectionsWidget->setCurrentItem ( tmpItem );
750
                                saveCollectionsDb();
751
                        }
752
 
753
                        currCollection = crt->collection;
754
                        pImages->createPreviewImagesList ( currCollection );
755
 
756
                        //update view
757
                        updateBrowser ( true, true, false );
758
                        updateCollectionsAddImagesCombobox();
759
                        break;
760
 
761
                default:
762
                        break;
763
        }
764
 
765
        delete crt;
766
        crt = 0;
767
}
768
 
769
 
770
void PictureBrowser::collectionListReaderThreadFinished()
771
{
772
        /*      if(clrt->restartThread)
773
                {
774
                delete clrt;
775
 
776
                clrt = new collectionListReaderThread(collections);
777
                connect(clrt, SIGNAL(finished()), this, SLOT(collectionListReaderThreadFinished()));
778
                clrt->start();
779
                }
780
                else
781
                {
782
                pImages->createPreviewImagesList(clrt->imageFiles);
783
 
784
                updateBrowser(true, true, false);
785
 
786
                delete clrt;
787
                clrt = 0;
788
                }*/
789
}
790
 
791
 
792
void PictureBrowser::collectionReaderThreadListFinishedSave()
793
{
794
        collectionReaderThread *tmpCrt;
795
        collectionWriterThread *tmpCwt;
796
        imageCollection *tmpCollection;
797
 
798
        for ( int i = 0 ; i < crtList.size() ; ++i )
799
        {
800
                tmpCrt = crtList.at ( i );
801
 
802
                if ( tmpCrt->isFinished() )
803
                {
804
                        QStringList tmpTags;
805
 
806
                        if ( !tmpCrt->type )
807
                        {
13658 cbradney 808
                                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), QString ( "A collection was not found:\n%1\nit will be created" ).arg ( tmpCrt->xmlFile ) );
13520 pierre 809
                                tmpCollection = new imageCollection;
810
                                tmpCollection->imageFiles = tmpCrt->addImages;
811
                        }
812
                        else
813
                        {
814
                                tmpCollection = tmpCrt->collection;
815
                                tmpCollection->imageFiles += tmpCrt->addImages;
816
                        }
817
 
818
                        //add empty tags for list consistency
819
                        for ( int j = 0 ; j < tmpCrt->addImages.size() ; ++j )
820
                        {
821
                                tmpCollection->tags.append ( tmpTags );
822
                        }
823
 
824
                        tmpCwt = new collectionWriterThread ( tmpCrt->xmlFile, *tmpCollection );
825
                        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
826
                        cwtList.append ( tmpCwt );
827
                        tmpCwt->start();
828
 
829
                        delete tmpCollection;
830
                        delete crtList.takeAt ( i );
831
                }
832
        }
833
}
834
 
835
 
836
void PictureBrowser::collectionsDbWriterThreadFinished()
837
{
838
        if ( cdbwt->restartThread )
839
        {
840
                delete cdbwt;
841
 
842
                cdbwt = new collectionsWriterThread ( cdbFile, collectionsDb );
843
                connect ( cdbwt, SIGNAL ( finished() ), this, SLOT ( collectionsDbWriterThreadFinished() ) );
844
                cdbwt->start();
845
        }
846
        else
847
        {
848
                delete cdbwt;
849
                cdbwt = 0;
850
        }
851
}
852
 
853
 
854
void PictureBrowser::collectionWriterThreadListFinished()
855
{
856
        for ( int i = 0 ; i < cwtList.size() ; ++i )
857
        {
858
                if ( cwtList.at ( i )->isFinished() )
859
                {
860
                        delete cwtList.takeAt ( i );
861
                }
862
        }
863
}
864
 
865
 
866
void PictureBrowser::insertPagesComboboxCheckstateChanged ( int row )
867
{
868
        int tmpState = insertPagesCombobox->checkstate ( 1 );
869
 
870
        if ( row == 1 )
871
        {
872
                int itemsCount = insertPagesCombobox->count();
873
 
874
                for ( int i = 2 ; i < itemsCount ; ++i )
875
                {
876
                        insertPagesCombobox->setCheckstate ( i, tmpState );
877
                }
878
        }
879
        else if ( ( tmpState == 1 ) && ( row > 1 ) )
880
        {
881
                insertPagesCombobox->setCheckstate ( 1, 0 );
882
        }
883
 
884
        insertPagesCombobox->setCurrentIndex ( row );
885
}
886
 
887
 
888
void PictureBrowser::insertImageButtonClicked()
889
{
890
        if ( ( previewIconIndex < 0 ) || ( previewIconIndex > pModel->modelItemsList.size() ) )
891
        {
13658 cbradney 892
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No image(s) selected" ) );
13520 pierre 893
                return;
894
        }
895
 
896
        previewImage *tmpImage;
897
 
898
//image from pModel needed here
899
        tmpImage = pModel->modelItemsList.at ( previewIconIndex );
900
        InsertAFrameData iafData;
901
 
902
        iafData.frameType=PageItem::ImageFrame;
903
        iafData.source=tmpImage->fileInformation.absoluteFilePath();
904
 
905
        QString pageList = "";
906
 
907
        if ( insertPagesCombobox->checkstate ( 1 ) == 1 )
908
        {
909
                iafData.locationType = 1;
910
        }
911
        else
912
        {
913
                iafData.locationType = 2;
914
 
915
                //current page has been selected
916
                if ( insertPagesCombobox->checkstate ( 0 ) == 1 )
917
                {
918
                        int currPage = srcDoc->currentPageNumber() + 1;
919
 
920
                        //prevent double insert, only add current page to pagelist if the page isn't selected yet
921
                        if ( insertPagesCombobox->checkstate ( currPage + 1 ) == 0 )
922
                        {
923
                                pageList += QString ( "%1," ).arg ( currPage );
924
                        }
925
                }
926
 
927
                for ( int i = 2 ; i < insertPagesCombobox->count() ; ++i )
928
                {
929
                        if ( insertPagesCombobox->checkstate ( i ) == 1 )
930
                        {
931
                                pageList += QString ( "%1," ).arg ( i-1 );
932
                        }
933
                }
934
 
935
                if ( pageList.isEmpty() )
936
                {
13658 cbradney 937
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No page/image frame selected" ) );
13520 pierre 938
                        return;
939
                }
940
 
941
                pageList.chop ( 1 );
942
        }
943
 
944
        iafData.pageList = pageList;
945
        iafData.positionType = insertPositionCombobox->currentIndex();
946
        iafData.sizeType = insertSizeCombobox->currentIndex();
947
        iafData.x = insertPositionXSpinbox->value();
948
        iafData.y = insertPositionYSpinbox->value();
949
        iafData.width = insertWidthSpinbox->value();
950
        iafData.height = insertHeightSpinbox->value();
951
 
952
        /*dont need all this crap */
953
//iafData.impsetup=m_ImportSetup;
954
        iafData.columnCount = 0;
955
        iafData.columnGap = 0;
956
        iafData.linkTextFrames = false;
957
        iafData.linkToExistingFrame = false;
958
        iafData.linkToExistingFramePtr=NULL;
959
 
960
        tmpImage->insertIntoDocument ( srcDoc, iafData );
961
}
962
 
963
 
964
void PictureBrowser::insertPositionComboboxChanged ( int index )
965
{
966
        if ( ( index == 3 ) && !insertCustomPosition )
967
        {
968
                insertPositionXSpinbox->setEnabled ( true );
969
                insertPositionYSpinbox->setEnabled ( true );
970
                insertPositionXLabel->setEnabled ( true );
971
                insertPositionYLabel->setEnabled ( true );
972
                insertCustomPosition = true;
973
        }
974
        else if ( insertCustomPosition )
975
        {
976
                insertPositionXSpinbox->setEnabled ( false );
977
                insertPositionYSpinbox->setEnabled ( false );
978
                insertPositionXLabel->setEnabled ( false );
979
                insertPositionYLabel->setEnabled ( false );
980
                insertCustomPosition = false;
981
        }
982
}
983
 
984
 
985
void PictureBrowser::insertSizeComboboxChanged ( int index )
986
{
987
        if ( ( index == 3 ) && !insertCustomSize )
988
        {
989
                insertWidthSpinbox->setEnabled ( true );
990
                insertHeightSpinbox->setEnabled ( true );
991
                insertWidthLabel->setEnabled ( true );
992
                insertHeightLabel->setEnabled ( true );
993
                insertCustomSize = true;
994
        }
995
        else if ( insertCustomSize )
996
        {
997
                insertWidthSpinbox->setEnabled ( false );
998
                insertHeightSpinbox->setEnabled ( false );
999
                insertWidthLabel->setEnabled ( false );
1000
                insertHeightLabel->setEnabled ( false );
1001
                insertCustomSize = false;
1002
        }
1003
}
1004
 
1005
 
1006
void PictureBrowser::filterCriteriaComboboxChanged ( int index )
1007
{
1008
        //this check shouldnt be necessary but you never know...
1009
        if ( ( index >= 0 ) && ( index < 5 ) )
1010
        {
1011
                filterStackedwidget->setCurrentIndex ( index );
1012
        }
1013
}
1014
 
1015
 
1016
void PictureBrowser::filterTargetComboboxChanged ( int index )
1017
{
1018
        if ( ( index >= 0 ) && ( index < 3 ) )
1019
        {
1020
                filterTargetStackedWidget->setCurrentIndex ( index );
1021
        }
1022
 
1023
        if ( index == 1 )
1024
        {
1025
                filterFilterButton->setText ( "Search" );
1026
        }
1027
        else
1028
        {
1029
                filterFilterButton->setText ( "Apply Filters" );
1030
        }
1031
}
1032
 
1033
 
1034
void PictureBrowser::filterFilterButtonClicked()
1035
{
1036
        if ( filterTargetCombobox->currentIndex() == 1 )
1037
        {
1038
                QString searchDir = filterSearchLineedit->text();
1039
                QDir dir ( searchDir );
1040
 
1041
                if ( !dir.exists() )
1042
                {
13658 cbradney 1043
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "Directory does not exist" ) );
13520 pierre 1044
                        return;
1045
                }
1046
 
1047
                currPath = searchDir;
1048
 
1049
                if ( !fit )
1050
                {
1051
                        fit = new findImagesThread ( currPath, nameFilters, QDir::Name, true );
1052
                        connect ( fit, SIGNAL ( finished() ), this, SLOT ( findImagesThreadFinished() ) );
1053
                        fit->start();
1054
                }
1055
                else
1056
                {
1057
                        fit->restart();
1058
                }
1059
        }
1060
        else if ( filterTargetCombobox->currentIndex() == 2 )
1061
        {
1062
                /*      if(!clrt)
1063
                        {
1064
                        clrt = new collectionListReaderThread(collections);
1065
                        connect(clrt, SIGNAL(finished()), this, SLOT(collectionListReaderThreadFinished()));
1066
                        clrt->start();
1067
                        }
1068
                        else
1069
                        {
1070
                        clrt->restart();
1071
                        }*/
1072
        }
1073
        else
1074
        {
1075
                updateBrowser ( true, false, false );
1076
        }
1077
}
1078
 
1079
 
1080
void PictureBrowser::filterClearButtonClicked()
1081
{
1082
        pImages->clearFilters();
1083
        filterFiltersListwidget->clear();
1084
 
1085
        delete filters;
1086
        filters = new imageFilters;
1087
 
1088
        updateBrowser ( true, false, false );
1089
}
1090
 
1091
 
1092
void PictureBrowser::filterAddCriterionButtonClicked()
1093
{
1094
        QListWidgetItem *newItem = new QListWidgetItem;
1095
 
1096
        newItem->setFlags ( Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
1097
        newItem->setCheckState ( Qt::Checked );
1098
 
1099
        int index = filterCriteriaCombobox->currentIndex();
13658 cbradney 1100
        QString filterText = "Empty Filter";
13520 pierre 1101
 
1102
        if ( index == 0 )
1103
        {
1104
                if ( filterNameCombobox->currentIndex() == 0 )
1105
                {
13658 cbradney 1106
                        filterText = QString ( "Name contains \"%1\"" ).arg ( filterNameLineedit->text() );
13520 pierre 1107
                        filters->nameInverts.append ( true );
1108
                }
1109
                else
1110
                {
13658 cbradney 1111
                        filterText = QString ( "Name does not contain \"%1\"" ).arg ( filterNameLineedit->text() );
13520 pierre 1112
                        filters->nameInverts.append ( false );
1113
                }
1114
 
1115
                filters->nameFilters.append ( filterNameLineedit->text() );
1116
        }
1117
        else if ( index == 1 )
1118
        {
1119
                if ( filterDateCombobox->currentIndex() == 0 )
1120
                {
13658 cbradney 1121
                        filterText = QString ( "Newer than %1" ).arg ( filterDateDatetimeedit->dateTime().toString ( "dd.MM.yyyy hh:mm" ) );
13520 pierre 1122
                        filters->dateInverts.append ( false );
1123
                }
1124
                else
1125
                {
13658 cbradney 1126
                        filterText = QString ( "Older than %1" ).arg ( filterDateDatetimeedit->dateTime().toString ( "dd.MM.yyyy hh:mm" ) );
13520 pierre 1127
                        filters->dateInverts.append ( true );
1128
                }
1129
 
1130
                filters->dateFilters.append ( filterDateDatetimeedit->dateTime() );
1131
        }
1132
        else if ( index == 2 )
1133
        {
1134
                if ( filterSizeCombobox->currentIndex() == 0 )
1135
                {
13658 cbradney 1136
                        filterText = QString ( "Smaller than %1 KB" ).arg ( filterSizeSpinbox->value() );
13520 pierre 1137
                        filters->sizeInverts.append ( true );
1138
                }
1139
                else
1140
                {
13658 cbradney 1141
                        filterText = QString ( "Bigger than %1 KB" ).arg ( filterSizeSpinbox->value() );
13520 pierre 1142
                        filters->sizeInverts.append ( false );
1143
                }
1144
 
1145
                filters->sizeFilters.append ( filterSizeSpinbox->value() );
1146
        }
1147
        else if ( index == 3 )
1148
        {
1149
                QStringList types;
13658 cbradney 1150
                filterText = QString ( "Allowed types: " );
13520 pierre 1151
 
1152
                if ( filterTypeCombobox->checkstate ( 0 ) == 1 )
1153
                {
13658 cbradney 1154
                        filterText += QString ( "All supported types (really a useful filter...)" );
13520 pierre 1155
                        types = nameFilters;
1156
                }
1157
                else
1158
                {
1159
                        int itemsCount = filterTypeCombobox->count();
1160
 
1161
                        for ( int i = 1 ; i < itemsCount ; ++i )
1162
                        {
1163
                                if ( filterTypeCombobox->checkstate ( i ) == 1 )
1164
                                {
1165
                                        filterText += QString ( "\"%1\", " ).arg ( nameFilters.at ( i - 1 ) );
1166
                                        types.append ( nameFilters.at ( i - 1 ) );
1167
                                }
1168
                        }
1169
                }
1170
 
1171
                filters->typeFilters.append ( types );
1172
        }
1173
        else if ( index == 4 )
1174
        {
1175
                QStringList tags;
13658 cbradney 1176
                filterText = QString ( "Has tags: " );
13520 pierre 1177
 
1178
                int itemsCount = filterTagsCombobox->count();
1179
 
1180
                for ( int i = 1 ; i < itemsCount ; ++i )
1181
                {
1182
                        if ( filterTagsCombobox->checkstate ( i ) == 1 )
1183
                        {
1184
                                filterText += QString ( "\"%1\", " ).arg ( filterTagsCombobox->itemText ( i ) );
1185
                                tags.append ( filterTagsCombobox->itemText ( i ) );
1186
                        }
1187
                }
1188
 
1189
                filters->tagFilters.append ( tags );
1190
        }
1191
 
1192
        filters->filterMap.append ( index );
1193
 
1194
        newItem->setText ( filterText );
1195
        filterFiltersListwidget->addItem ( newItem );
1196
}
1197
 
1198
 
1199
void PictureBrowser::filterSearchDirButtonClicked()
1200
{
1201
        QString searchDir = QFileDialog::getExistingDirectory ( this, tr ( "Select Directory" ), QDir::rootPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );
1202
        filterSearchLineedit->setText ( searchDir );
1203
}
1204
 
1205
 
1206
void PictureBrowser::collectionsNewCategoryButtonClicked()
1207
{
1208
        collectionsWidget->blockSignals ( true );
1209
 
1210
        QTreeWidgetItem *tmpCategory;
1211
 
1212
        tmpCategory = new QTreeWidgetItem ( collectionsWidget, QStringList ( "New Category" ) );
1213
        tmpCategory->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
13658 cbradney 1214
        tmpCategory->setData ( 0, Qt::UserRole, QString ( "Category" ) );
13520 pierre 1215
        tmpCategory->setExpanded ( true );
1216
 
1217
        collectionsWidget->blockSignals ( false );
1218
 
1219
        collectionsWidget->setCurrentItem ( tmpCategory );
1220
        collectionsWidget->editItem ( tmpCategory );
1221
 
1222
        saveCollectionsDb();
1223
}
1224
 
1225
 
1226
void PictureBrowser::collectionsNewButtonClicked()
1227
{
1228
        collectionsWidget->blockSignals ( true );
1229
 
1230
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1231
 
1232
        if ( !currItem )
1233
        {
1234
                currItem = collectionsWidget->topLevelItem ( 0 );
1235
 
1236
                if ( !currItem )
1237
                {
13658 cbradney 1238
                        QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "You have to create a category first" ) );
13520 pierre 1239
                        return;
1240
                }
1241
        }
1242
 
1243
        QTreeWidgetItem *parentItem, *tmpItem;
13608 jghali 1244
        QString newCollectionFile = ScPaths::instance().getPluginDataDir();
13520 pierre 1245
 
1246
        parentItem = currItem->parent();
1247
 
1248
        if ( parentItem )
1249
        {
1250
                tmpItem = new QTreeWidgetItem ( parentItem, QStringList ( "New Collection" ) );
1251
                newCollectionFile += QString ( "c%1_%2.sic" ).arg ( collectionsWidget->indexOfTopLevelItem ( parentItem ) ).arg ( parentItem->childCount() );
1252
        }
1253
        else
1254
        {
1255
                tmpItem = new QTreeWidgetItem ( currItem, QStringList ( "New Collection" ) );
1256
                newCollectionFile += QString ( "c%1_%2.sic" ).arg ( collectionsWidget->indexOfTopLevelItem ( currItem ) ).arg ( currItem->childCount() );
1257
        }
1258
 
1259
        tmpItem->setFlags ( Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled );
1260
        tmpItem->setData ( 0, Qt::UserRole, newCollectionFile );
1261
        tmpItem->setIcon ( 0, *iconCollection );
1262
        collectionsWidget->blockSignals ( false );
1263
 
1264
        collectionsWidget->setCurrentItem ( tmpItem );
1265
        collectionsWidget->editItem ( tmpItem );
1266
 
1267
        saveCollectionsDb();
1268
 
1269
        imageCollection tmpCollection;
1270
        collectionWriterThread *tmpCwt;
1271
        tmpCwt = new collectionWriterThread ( newCollectionFile, tmpCollection );
1272
        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1273
        cwtList.append ( tmpCwt );
1274
        tmpCwt->start();
1275
}
1276
 
1277
 
1278
void PictureBrowser::collectionsImportButtonClicked()
1279
{
13658 cbradney 1280
        QString fileName = QFileDialog::getOpenFileName ( this, tr ( "Import Image Collection" ), QDir::rootPath(), tr ( "Scribus ImageCollection (*.sic)" ) );
13520 pierre 1281
 
1282
        if ( !fileName.isEmpty() )
1283
        {
1284
                currCollectionFile = fileName;
1285
 
1286
                if ( !crt )
1287
                {
1288
                        crt = new collectionReaderThread ( currCollectionFile, true );
1289
                        connect ( crt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadFinished() ) );
1290
                        crt->start();
1291
                }
1292
                else
1293
                {
1294
                        crt->restart();
1295
                }
1296
        }
1297
}
1298
 
1299
 
1300
void PictureBrowser::collectionsExportButtonClicked()
1301
{
13658 cbradney 1302
        QString fileName = QFileDialog::getSaveFileName ( this, tr ( "Export Image Collection" ), QDir::rootPath(), tr ( "Scribus ImageCollection (*.sic)" ) );
13520 pierre 1303
 
1304
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1305
 
1306
        if ( !currItem )
1307
        {
13658 cbradney 1308
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "You have to select something you want to export" ) );
13520 pierre 1309
                return;
1310
        }
1311
 
1312
        //collection
1313
        if ( currItem->parent() )
1314
        {
1315
                collectionWriterThread *tmpCwt;
1316
                tmpCwt = new collectionWriterThread ( fileName, *currCollection );
1317
                connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1318
                cwtList.append ( tmpCwt );
1319
                tmpCwt->start();
1320
        }
1321
        //category
1322
        else
1323
        {
1324
 
1325
        }
1326
}
1327
 
1328
 
1329
void PictureBrowser::collectionsDeleteButtonClicked()
1330
{
1331
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1332
 
1333
        if ( !currItem )
1334
        {
1335
                return;
1336
        }
1337
 
1338
        delete currItem;
1339
 
1340
        saveCollectionsDb();
1341
}
1342
 
1343
 
1344
void PictureBrowser::collectionsRenameButtonClicked()
1345
{
1346
        QTreeWidgetItem *currItem = collectionsWidget->currentItem();
1347
 
1348
        if ( !currItem )
1349
        {
1350
                return;
1351
        }
1352
 
1353
        collectionsWidget->editItem ( currItem );
1354
}
1355
 
1356
 
1357
void PictureBrowser::collectionsAddImagesButtonClicked()
1358
{
1359
        collectionsStackedwidget->setCurrentIndex ( 1 );
1360
        updateCollectionsWidget ( true );
1361
        collectionsWidget->blockSignals ( true );
1362
}
1363
 
1364
 
1365
void PictureBrowser::collectionsSetTagsButtonClicked()
1366
{
1367
        for ( int i = 0 ; i < collectionsTagImagesCombobox->count() ; ++i )
1368
        {
1369
                if ( collectionsTagImagesCombobox->checkstate ( i ) == 0 )
1370
                {
1371
                        for ( int j = 0 ; j < selectedIndexes.size() ; ++j )
1372
                        {
1373
                                pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.removeAll ( collectionsTagImagesCombobox->itemText ( i ) );
1374
                        }
1375
                }
1376
                else if ( collectionsTagImagesCombobox->checkstate ( i ) == 1 )
1377
                {
1378
                        for ( int j = 0 ; j < selectedIndexes.size() ; ++j )
1379
                        {
1380
                                if ( !pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.contains ( collectionsTagImagesCombobox->itemText ( i ) ) )
1381
                                {
1382
                                        pImages->previewImagesList.at ( selectedIndexes.at ( j ) )->tags.append ( collectionsTagImagesCombobox->itemText ( i ) );
1383
                                }
1384
                        }
1385
                }
1386
        }
1387
 
1388
 
1389
        collectionWriterThread *tmpCwt;
1390
 
1391
        currCollection->imageFiles.clear();
1392
        currCollection->tags.clear();
1393
 
1394
        for ( int i = 0 ; i < pImages->previewImagesList.size() ; ++i )
1395
        {
1396
                currCollection->imageFiles.append ( pImages->previewImagesList.at ( i )->fileInformation.absoluteFilePath() );
1397
                currCollection->tags.append ( pImages->previewImagesList.at ( i )->tags );
1398
        }
1399
 
1400
        tmpCwt = new collectionWriterThread ( currCollection->file, *currCollection );
1401
        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1402
        cwtList.append ( tmpCwt );
1403
        tmpCwt->start();
1404
}
1405
 
1406
 
1407
void PictureBrowser::collectionsAddNewTagButtonClicked()
1408
{
1409
        QString newTag = collectionsAddNewTagLineedit->text();
1410
 
1411
        if ( !newTag.isEmpty() )
1412
        {
1413
                collectionsTagImagesCombobox->addItem ( newTag, 1 );
1414
        }
1415
        else
1416
        {
13658 cbradney 1417
                QMessageBox::warning ( this, tr ( "Picture Browser Error" ), tr ( "No tag entered" ) );
13520 pierre 1418
        }
1419
}
1420
 
1421
 
1422
void PictureBrowser::collectionsRemoveImagesButtonClicked()
1423
{
1424
        collectionWriterThread *tmpCwt;
1425
        QList<previewImage *> tmpPreviewImagesList;
1426
 
1427
        for ( int i = 0 ; i < selectedIndexes.size() ; ++i )
1428
        {
1429
                tmpPreviewImagesList.append ( pImages->previewImagesList.takeAt ( selectedIndexes.at ( i ) ) );
1430
        }
1431
 
1432
//update view
1433
        updateBrowser ( false, false, false );
1434
 
1435
        for ( int i = 0 ; i < tmpPreviewImagesList.size() ; ++i )
1436
        {
1437
                delete tmpPreviewImagesList.at ( i );
1438
        }
1439
 
1440
        currCollection->imageFiles.clear();
1441
        currCollection->tags.clear();
1442
 
1443
        for ( int i = 0 ; i < pImages->previewImagesList.size() ; ++i )
1444
        {
1445
                currCollection->imageFiles.append ( pImages->previewImagesList.at ( i )->fileInformation.absoluteFilePath() );
1446
                currCollection->tags.append ( pImages->previewImagesList.at ( i )->tags );
1447
        }
1448
 
1449
        tmpCwt = new collectionWriterThread ( currCollection->file, *currCollection );
1450
        connect ( tmpCwt, SIGNAL ( finished() ), this, SLOT ( collectionWriterThreadListFinished() ) );
1451
        cwtList.append ( tmpCwt );
1452
        tmpCwt->start();
1453
}
1454
 
1455
 
1456
void PictureBrowser::collectionsTagImagesButtonClicked()
1457
{
1458
}
1459
 
1460
 
1461
void PictureBrowser::collectionsAddImagesOkButtonClicked()
1462
{
1463
        QTreeWidgetItem *tmpItem, *tmpItem2;
1464
        QString collectionFile;
1465
        collectionReaderThread *tmpCrt;
1466
 
1467
        QStringList addImages;
1468
 
1469
        for ( int k = 0 ; k < selectedIndexes.size() ; ++k )
1470
        {
1471
                addImages.append ( pModel->modelItemsList.at ( selectedIndexes.at ( k ) )->fileInformation.absoluteFilePath() );
1472
        }
1473
 
1474
 
1475
        for ( int i = 0 ; i < collectionsWidget->topLevelItemCount() ; ++i )
1476
        {
1477
                tmpItem = collectionsWidget->topLevelItem ( i );
1478
 
1479
                for ( int j = 0 ; j < tmpItem->childCount() ; ++j )
1480
                {
1481
                        tmpItem2 = tmpItem->child ( j );
1482
 
1483
                        if ( tmpItem2->checkState ( 0 ) == Qt::Checked )
1484
                        {
1485
                                //add images here
1486
                                collectionFile = tmpItem2->data ( 0, Qt::UserRole ).toString();
1487
 
1488
                                tmpCrt = new collectionReaderThread ( collectionFile, false );
1489
                                tmpCrt->addImages = addImages;
1490
                                connect ( tmpCrt, SIGNAL ( finished() ), this, SLOT ( collectionReaderThreadListFinishedSave() ) );
1491
                                crtList.append ( tmpCrt );
1492
                                tmpCrt->start();
1493
                        }
1494
                }
1495
        }
1496
 
1497
        collectionsStackedwidget->setCurrentIndex ( 0 );
1498
        updateCollectionsWidget ( false );
1499
        collectionsWidget->blockSignals ( false );
1500
}
1501
 
1502
 
1503
void PictureBrowser::collectionsAddImagesCancelButtonClicked()
1504
{
1505
        collectionsStackedwidget->setCurrentIndex ( 0 );
1506
        updateCollectionsWidget ( false );
1507
        collectionsWidget->blockSignals ( false );
1508
}
1509
 
1510
 
1511
void PictureBrowser::updateBrowser ( bool filter, bool sort, bool reload )
1512
{
1513
        if ( filter )
1514
        {
1515
                applyFilters();
1516
        }
1517
 
1518
        if ( sort )
1519
        {
1520
                pImages->sortPreviewImages ( pbSettings.sortSetting );
1521
        }
1522
 
1523
        if ( reload )
1524
        {
1525
                previewImage *tmpImage;
1526
 
1527
                //force reload, check if needed is necessary
1528
                for ( int i = 0 ; i < pImages->previewImagesList.size() ; ++i )
1529
                {
1530
                        tmpImage = pImages->previewImagesList.at ( i );
1531
                        tmpImage->previewImageLoading = false;
1532
                        tmpImage->previewIconCreated = false;
1533
                }
1534
        }
1535
 
1536
        pModel->setModelItemsList ( pImages->previewImagesList );
1537
        statusLabel->setText ( QString ( "%1 image(s) displayed, %2 image(s) filtered" ).arg ( imagesDisplayed ).arg ( imagesFiltered ) );
1538
}
1539
 
1540
 
1541
void PictureBrowser::loadIcons()
1542
{
1543
        iconArrowUp = new QIcon ( loadIcon ( "pitr_green_arrows_set_1.svg" ) );
1544
        iconArrowDown = new QIcon ( loadIcon ( "pitr_green_arrows_set_5.svg" ) );
1545
        iconFolderBrowser = new QIcon ( loadIcon ( "sarxos_Simple_Folder_Seek.svg" ) );
1546
        iconCollectionsBrowser = new QIcon ( loadIcon ( "sarxos_Simple_Green_Yellow_Blue_Violet_Folders.svg" ) );
1547
        iconDocumentBrowser = new QIcon ( loadIcon ( "sarxos_Paper_Sheets.svg" ) );
1548
        iconDocument = new QIcon ( loadIcon ( "doc.png" ) );
1549
        iconCollection = new QIcon ( loadIcon ( "cmyk.png" ) );
1550
        iconOk = new QIcon ( loadIcon ( "ok22.png" ) );
1551
        iconClose = new QIcon ( loadIcon ( "/16/close.png" ) );
1552
        iconZoomPlus = new QIcon ( loadIcon ( "viewmagin.png" ) );
1553
        iconZoomMinus = new QIcon ( loadIcon ( "viewmagout.png" ) );
1554
        iconNew = new QIcon ( loadIcon ( "/16/insert-table.png" ) );
1555
        iconNew2 = new QIcon ( loadIcon ( "/16/document-new.png" ) );
1556
        iconEdit = new QIcon ( loadIcon ( "/16/document-properties.png" ) );
1557
        iconRemove = new QIcon ( loadIcon ( "/16/edit-cut.png" ) );
1558
        iconLoad = new QIcon ( loadIcon ( "/16/document-open.png" ) );
1559
        iconSave = new QIcon ( loadIcon ( "/16/document-save.png" ) );
1560
        iconPlus = new QIcon ( loadIcon ( "/16/list-add.png" ) );
1561
        iconMinus = new QIcon ( loadIcon ( "/16/list-remove.png" ) );
1562
        iconPen = new QIcon ( loadIcon ( "/16/story-editor.png" ) );
1563
 
1564
        collectionsNewCategoryButton->setIcon ( *iconNew );
1565
        collectionsNewButton->setIcon ( *iconNew2 );
1566
        collectionsRenameButton->setIcon ( *iconEdit );
1567
        collectionsDeleteButton->setIcon ( *iconRemove );
1568
        collectionsImportButton->setIcon ( *iconLoad );
1569
        collectionsExportButton->setIcon ( *iconSave );
1570
        collectionsAddImagesButton->setIcon ( *iconPlus );
1571
        collectionsRemoveImagesButton->setIcon ( *iconMinus );
1572
        collectionsTagImagesButton->setIcon ( *iconPen );
1573
        collectionsAddImagesOkButton->setIcon ( *iconOk );
1574
        collectionsAddImagesCancelButton->setIcon ( *iconClose );
1575
 
1576
        navigationBox->setItemIcon ( 0, *iconFolderBrowser );
1577
        navigationBox->setItemIcon ( 1, *iconCollectionsBrowser );
1578
        navigationBox->setItemIcon ( 2, *iconDocumentBrowser );
1579
 
1580
        zoomPlusButton->setIcon ( *iconZoomPlus );
1581
        zoomMinusButton->setIcon ( *iconZoomMinus );
1582
 
1583
        actionsGoButton->setIcon ( *iconOk );
1584
 
1585
        closeButton->setIcon ( *iconClose );
1586
 
1587
        moreButton->setIcon ( *iconArrowDown );
1588
}
1589
 
1590
 
1591
void PictureBrowser::setSettings()
1592
{
1593
//set settings
1594
        if ( pbSettings.saveSettings )
1595
        {
1596
                saveSettingsCheckbox->setCheckState ( Qt::Checked );
1597
        }
1598
 
1599
        if ( pbSettings.showMore )
1600
        {
1601
                expandDialog ( true );
1602
        }
1603
        else
1604
        {
1605
                expandDialog ( false );
1606
        }
1607
 
1608
        if ( pbSettings.sortOrder )
1609
        {
1610
                sortOrderButton->setIcon ( *iconArrowUp );
1611
        }
1612
        else
1613
        {
1614
                sortOrderButton->setIcon ( *iconArrowDown );
1615
        }
1616
 
1617
        sortCombobox->setCurrentIndex ( pbSettings.sortSetting );
1618
        previewModeCombobox->setCurrentIndex ( pbSettings.previewMode );
1619
 
1620
        if ( pbSettings.alwaysOnTop )
1621
        {
1622
                alwaysOnTopCheckbox->setCheckState ( Qt::Checked );
1623
                setAlwaysOnTop ( true );
1624
        }
1625
}
1626
 
1627
void PictureBrowser::changedDocument ( ScribusDoc* doc )
1628
{
1629
        srcDoc = doc;
1630
        updateDocumentbrowser();
1631
        actionsGoButton->setEnabled ( true );
1632
        insertImageButton->setEnabled ( true );
1633
}
1634
 
1635
void PictureBrowser::closedDocument()
1636
{
1637
        documentWidget->clear();
1638
        documentItems.clear();
1639
        srcDoc = NULL;
1640
        pImages->clearPreviewImagesList();
1641
        updateBrowser ( false, false, false );
1642
        actionsGoButton->setEnabled ( false );
1643
        insertImageButton->setEnabled ( false );
1644
}
1645
 
1646
void PictureBrowser::updateDocumentbrowser()
1647
{
1648
        documentWidget->clear();
1649
        documentItems.clear();
13658 cbradney 1650
        QTreeWidgetItem* allpages=new QTreeWidgetItem ( documentWidget, QStringList ( "All Pages" ) );
13520 pierre 1651
        allpages->setData ( 0, Qt::UserRole, 0 );
1652
        allpages->setExpanded ( true );
1653
        documentWidget->addTopLevelItem ( allpages );
1654
 
1655
        QTreeWidgetItem *tmpItem;
1656
 
1657
        for ( int i = 0 ; i < ( int ) ( srcDoc->Pages->count() ) ; ++i )
1658
        {
1659
                tmpItem = new QTreeWidgetItem ( allpages, QStringList ( QString ( "Page %1" ).arg ( i+1 ) ) );
1660
                tmpItem->setData ( 0, Qt::UserRole, ( i+1 ) );
1661
                tmpItem->setIcon ( 0, *iconDocument );
1662
                documentItems.append ( tmpItem );
1663
        }
1664
 
1665
        documentWidget->insertTopLevelItems ( 0, documentItems );
1666
}
1667
 
1668
 
1669
void PictureBrowser::previewImageSelectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )
1670
{
1671
        QItemSelectionModel *selectionModel = imageViewArea->selectionModel();
1672
        QModelIndexList selection = selectionModel->selectedIndexes();
1673
        int tmpIndex;
1674
 
1675
 
1676
        selectedIndexes.clear();
1677
 
1678
        for ( int i = 0 ; i < selection.size() ; ++i )
1679
        {
1680
                tmpIndex = selection.at ( i ).row();
1681
 
1682
                //take filtered images into account
1683
                for ( int j = 0 ; ( j <= tmpIndex ) && ( j < pImages->previewImagesList.size() ) ; ++j )
1684
                {
1685
                        if ( pImages->previewImagesList.at ( j )->filtered )
1686
                        {
1687
                                tmpIndex++;
1688
                        }
1689
                }
1690
 
1691
                selectedIndexes.append ( tmpIndex );
1692
        }
1693
 
1694
        updateTagImagesTab();
1695
}
1696
 
1697
 
1698
void PictureBrowser::updateInformationTab ( int index )
1699
{
1700
        if ( pbSettings.showMore && ( tabWidget->currentIndex() == 0 ) )
1701
        {
1702
                if ( ( index >= 0 ) && ( index < pModel->modelItemsList.size() ) )
1703
                {
1704
                        previewImage *tmpImage;
1705
                        tmpImage = pModel->modelItemsList.at ( index );
1706
 
1707
                        informationFilenameLabel->setText ( tmpImage->fileInformation.fileName() );
1708
                        informationFilepathLabel->setText ( tmpImage->fileInformation.absolutePath() );
13658 cbradney 1709
                        informationFilesizeLabel->setText ( QString ( "%1 Bytes" ).arg ( tmpImage->fileInformation.size() ) );
13520 pierre 1710
                        informationFiledateLabel->setText ( tmpImage->fileInformation.lastModified().toString ( "dd.MM.yyyy hh:mm:ss" ) );
1711
 
1712
                        if ( tmpImage->imgInfo->valid )
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
                {
13658 cbradney 1776
                        informationFilenameLabel->setText ( "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
}