Subversion Repositories Scribus

Rev

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

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