Subversion Repositories Scribus

Rev

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

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