Subversion Repositories Scribus

Rev

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

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