Subversion Repositories Scribus

Rev

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