~ubuntu-branches/ubuntu/intrepid/digikam/intrepid

« back to all changes in this revision

Viewing changes to digikam/digikam/digikamview.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Mark Purcell
  • Date: 2008-07-17 20:25:39 UTC
  • mfrom: (1.2.15 upstream) (3.1.2 lenny)
  • Revision ID: james.westby@ubuntu.com-20080717202539-6n7dtirbkoo7qvhd
Tags: 2:0.9.4-1
* New upstream release
  - digiKam 0.9.4 Release Plan (KDE3) ~ 13 July 08 (Closes: #490144)
* DEB_CONFIGURE_EXTRA_FLAGS := --without-included-sqlite3
* Debhelper compatibility level V7
* Install pixmaps in debian/*.install
* Add debian/digikam.lintian-overrides

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
 * Description : implementation of album view interface. 
8
8
 *
9
9
 * Copyright (C) 2002-2005 by Renchi Raju  <renchi@pooh.tam.uiuc.edu>
10
 
 * Copyright (C) 2002-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
 
10
 * Copyright (C) 2002-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
11
11
 *
12
12
 * This program is free software; you can redistribute it
13
13
 * and/or modify it under the terms of the GNU General
78
78
#include "searchtextbar.h"
79
79
#include "statusprogressbar.h"
80
80
#include "tagfilterview.h"
 
81
#include "timelineview.h"
 
82
#include "timelinefolderview.h"
81
83
#include "thumbnailsize.h"
82
84
#include "dio.h"
83
85
#include "digikamapp.h"
110
112
        leftSideBar           = 0;
111
113
        rightSideBar          = 0;
112
114
        dateFolderView        = 0;
 
115
        timeLineView          = 0;
113
116
        tagFolderView         = 0;
114
117
        searchFolderView      = 0;
115
118
        tagFilterView         = 0;
149
152
    AlbumManager             *albumManager;
150
153
    AlbumHistory             *albumHistory;
151
154
    AlbumWidgetStack         *albumWidgetStack;
152
 
    
 
155
 
153
156
    Sidebar                  *leftSideBar;
154
157
    ImagePropertiesSideBarDB *rightSideBar;
155
158
 
156
159
    DateFolderView           *dateFolderView;
 
160
    TimeLineView             *timeLineView;
157
161
    TagFolderView            *tagFolderView;
158
162
    SearchFolderView         *searchFolderView;
159
163
    TagFilterView            *tagFilterView;
187
191
    // Folders sidebar tab contents.
188
192
    d->folderBox       = new QVBox(this);
189
193
    d->folderView      = new AlbumFolderView(d->folderBox);
190
 
    d->folderSearchBar = new SearchTextBar(d->folderBox);
 
194
    d->folderSearchBar = new SearchTextBar(d->folderBox, "DigikamViewFolderSearchBar");
191
195
    d->folderBox->setSpacing(KDialog::spacingHint());
192
196
    d->folderBox->setMargin(0);
193
197
 
194
198
    // Tags sidebar tab contents.
195
 
    d->tagBox        = new QVBox(this);
196
 
    d->tagFolderView = new TagFolderView(d->tagBox);
197
 
    d->tagSearchBar  = new SearchTextBar(d->tagBox);
 
199
    d->tagBox           = new QVBox(this);
 
200
    d->tagFolderView    = new TagFolderView(d->tagBox);
 
201
    d->tagSearchBar     = new SearchTextBar(d->tagBox, "DigikamViewTagSearchBar");
198
202
    d->tagBox->setSpacing(KDialog::spacingHint());
199
203
    d->tagBox->setMargin(0);
200
204
 
201
205
    // Search sidebar tab contents.
202
206
    d->searchBox        = new QVBox(this);
203
207
    d->searchFolderView = new SearchFolderView(d->searchBox);
204
 
    d->searchSearchBar  = new SearchTextBar(d->searchBox);
 
208
    d->searchSearchBar  = new SearchTextBar(d->searchBox, "DigikamViewSearchSearchBar");
205
209
    d->searchBox->setSpacing(KDialog::spacingHint());
206
210
    d->searchBox->setMargin(0);
207
211
 
208
212
    d->dateFolderView   = new DateFolderView(this);
 
213
    d->timeLineView     = new TimeLineView(this);
209
214
 
210
215
    d->leftSideBar->appendTab(d->folderBox, SmallIcon("folder_image"), i18n("Albums"));
211
 
    d->leftSideBar->appendTab(d->dateFolderView, SmallIcon("date"), i18n("Dates"));
 
216
    d->leftSideBar->appendTab(d->dateFolderView, SmallIcon("date"), i18n("Calendar"));
212
217
    d->leftSideBar->appendTab(d->tagBox, SmallIcon("tag"), i18n("Tags"));
 
218
    d->leftSideBar->appendTab(d->timeLineView, SmallIcon("clock"), i18n("Timeline"));
213
219
    d->leftSideBar->appendTab(d->searchBox, SmallIcon("find"), i18n("Searches"));
214
220
 
215
221
    // To the right.
217
223
    // Tags Filter sidebar tab contents.
218
224
    d->tagFilterBox       = new QVBox(this);
219
225
    d->tagFilterView      = new TagFilterView(d->tagFilterBox);
220
 
    d->tagFilterSearchBar = new SearchTextBar(d->tagFilterBox);
 
226
    d->tagFilterSearchBar = new SearchTextBar(d->tagFilterBox, "DigikamViewTagFilterSearchBar");
221
227
    d->tagFilterBox->setSpacing(KDialog::spacingHint());
222
228
    d->tagFilterBox->setMargin(0);
223
229
 
248
254
    AlbumSettings *settings = AlbumSettings::instance();
249
255
    d->iconView->applySettings(settings);
250
256
    d->albumWidgetStack->imagePreviewView()->setLoadFullImageSize(settings->getPreviewLoadFullImageSize());
 
257
    refreshView();
 
258
}
 
259
 
 
260
void DigikamView::refreshView()
 
261
{
 
262
    d->folderView->refresh();
 
263
    d->dateFolderView->refresh();
 
264
    d->tagFolderView->refresh();
 
265
    d->tagFilterView->refresh();
 
266
    d->rightSideBar->refreshTagsView();
251
267
}
252
268
 
253
269
void DigikamView::setupConnections()
292
308
    connect(d->albumManager, SIGNAL(signalAlbumCurrentChanged(Album*)),
293
309
            this, SLOT(slotAlbumSelected(Album*)));
294
310
 
295
 
    connect(d->albumManager, SIGNAL(signalAlbumsCleared()),
296
 
            this, SLOT(slotAlbumsCleared()));
297
 
 
298
 
    connect(d->albumManager, SIGNAL(signalAlbumDeleted(Album*)),
299
 
            this, SLOT(slotAlbumDeleted(Album*)));
300
 
 
301
311
    connect(d->albumManager, SIGNAL(signalAllAlbumsLoaded()),
302
312
            this, SLOT(slotAllAlbumsLoaded()));
303
313
 
304
314
    connect(d->albumManager, SIGNAL(signalAlbumItemsSelected(bool) ),
305
315
            this, SLOT(slotImageSelected()));
306
316
 
 
317
    connect(d->albumManager, SIGNAL(signalAlbumAdded(Album*)),
 
318
            this, SLOT(slotAlbumAdded(Album*)));
 
319
 
 
320
    connect(d->albumManager, SIGNAL(signalAlbumDeleted(Album*)),
 
321
            this, SLOT(slotAlbumDeleted(Album*)));
 
322
 
307
323
    connect(d->albumManager, SIGNAL(signalAlbumRenamed(Album*)),
308
324
            this, SLOT(slotAlbumRenamed(Album*)));
309
325
 
 
326
    connect(d->albumManager, SIGNAL(signalAlbumsCleared()),
 
327
            this, SLOT(slotAlbumsCleared()));
 
328
 
310
329
    // -- IconView Connections -------------------------------------
311
330
 
312
331
    connect(d->iconView, SIGNAL(signalItemsUpdated(const KURL::List&)),
380
399
    connect(d->tagFolderView, SIGNAL(signalProgressValue(int)),
381
400
            d->parent, SLOT(slotProgressValue(int)));
382
401
 
 
402
    connect(d->parent, SIGNAL(signalResetTagFilters()),
 
403
            d->tagFilterView, SLOT(slotResetTagFilters()));
 
404
 
383
405
    // -- Filter Bars Connections ---------------------------------
384
406
 
385
407
    connect(d->folderSearchBar, SIGNAL(signalTextChanged(const QString&)),
386
 
            d->folderView, SLOT(slotFolderFilterChanged(const QString&)));
 
408
            d->folderView, SLOT(slotTextFolderFilterChanged(const QString&)));
387
409
 
388
410
    connect(d->tagSearchBar, SIGNAL(signalTextChanged(const QString&)),
389
 
            d->tagFolderView, SLOT(slotTagFilterChanged(const QString&)));
 
411
            d->tagFolderView, SLOT(slotTextTagFilterChanged(const QString&)));
390
412
 
391
413
    connect(d->searchSearchBar, SIGNAL(signalTextChanged(const QString&)),
392
 
            d->searchFolderView, SLOT(slotSearchFilterChanged(const QString&)));
 
414
            d->searchFolderView, SLOT(slotTextSearchFilterChanged(const QString&)));
393
415
 
394
416
    connect(d->tagFilterSearchBar, SIGNAL(signalTextChanged(const QString&)),
395
 
            d->tagFilterView, SLOT(slotTagFilterChanged(const QString&)));
 
417
            d->tagFilterView, SLOT(slotTextTagFilterChanged(const QString&)));
396
418
 
397
 
    connect(d->folderView, SIGNAL(signalFolderFilterMatch(bool)),
 
419
    connect(d->folderView, SIGNAL(signalTextFolderFilterMatch(bool)),
398
420
            d->folderSearchBar, SLOT(slotSearchResult(bool)));
399
421
 
400
 
    connect(d->tagFolderView, SIGNAL(signalTagFilterMatch(bool)),
 
422
    connect(d->tagFolderView, SIGNAL(signalTextTagFilterMatch(bool)),
401
423
            d->tagSearchBar, SLOT(slotSearchResult(bool)));
402
424
 
403
 
    connect(d->searchFolderView, SIGNAL(signalSearchFilterMatch(bool)),
 
425
    connect(d->searchFolderView, SIGNAL(signalTextSearchFilterMatch(bool)),
404
426
            d->searchSearchBar, SLOT(slotSearchResult(bool)));
405
427
 
406
 
    connect(d->tagFilterView, SIGNAL(signalTagFilterMatch(bool)),
 
428
    connect(d->tagFilterView, SIGNAL(signalTextTagFilterMatch(bool)),
407
429
            d->tagFilterSearchBar, SLOT(slotSearchResult(bool)));
408
430
 
409
431
    // -- Preview image widget Connections ------------------------
590
612
    d->searchFolderView->extendedSearchNew();
591
613
}
592
614
 
593
 
void DigikamView::slotAlbumDeleted(Album *delalbum)
594
 
{
595
 
    d->albumHistory->deleteAlbum(delalbum);
 
615
void DigikamView::slotAlbumAdded(Album *album)
 
616
{
 
617
    if (!album->isRoot())
 
618
    {
 
619
        switch (album->type())
 
620
        {
 
621
            case Album::PHYSICAL:
 
622
            {
 
623
                d->folderSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
624
                break;
 
625
            }
 
626
            case Album::TAG:
 
627
            {
 
628
                d->tagSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
629
                d->tagFilterSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
630
                break;
 
631
            }
 
632
            case Album::SEARCH:
 
633
            {
 
634
                d->searchSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
635
                d->timeLineView->searchBar()->lineEdit()->completionObject()->addItem(album->title());
 
636
                break;
 
637
            }
 
638
            default:
 
639
            {
 
640
                // Nothing to do with Album::DATE
 
641
                break;
 
642
            }
 
643
        }
 
644
    }
 
645
}
 
646
 
 
647
void DigikamView::slotAlbumDeleted(Album *album)
 
648
{
 
649
    d->albumHistory->deleteAlbum(album);
596
650
 
597
651
    // display changed tags
598
 
    if (delalbum->type() == Album::TAG)
 
652
    if (album->type() == Album::TAG)
599
653
        d->iconView->updateContents();
600
654
 
601
655
    /*
602
656
    // For what is this needed?
603
 
    Album *album;
 
657
    Album *a;
604
658
    QWidget *widget;
605
 
    d->albumHistory->getCurrentAlbum(&album, &widget);
 
659
    d->albumHistory->getCurrentAlbum(&a, &widget);
606
660
 
607
 
    changeAlbumFromHistory(album, widget);
 
661
    changeAlbumFromHistory(a, widget);
608
662
    */
 
663
 
 
664
    if (!album->isRoot())
 
665
    {
 
666
        switch (album->type())
 
667
        {
 
668
            case Album::PHYSICAL:
 
669
            {
 
670
                d->folderSearchBar->lineEdit()->completionObject()->removeItem(album->title());
 
671
                break;
 
672
            }
 
673
            case Album::TAG:
 
674
            {
 
675
                d->tagSearchBar->lineEdit()->completionObject()->removeItem(album->title());
 
676
                d->tagFilterSearchBar->lineEdit()->completionObject()->removeItem(album->title());
 
677
                break;
 
678
            }
 
679
            case Album::SEARCH:
 
680
            {
 
681
                d->searchSearchBar->lineEdit()->completionObject()->removeItem(album->title());
 
682
                d->timeLineView->searchBar()->lineEdit()->completionObject()->removeItem(album->title());
 
683
                break;
 
684
            }
 
685
            default:
 
686
            {
 
687
                // Nothing to do with Album::DATE
 
688
                break;
 
689
            }
 
690
        }
 
691
    }
609
692
}
610
693
 
611
694
void DigikamView::slotAlbumRenamed(Album *album)
614
697
 
615
698
    if (album == d->albumManager->currentAlbum())
616
699
        d->iconView->updateContents();
 
700
 
 
701
    if (!album->isRoot())
 
702
    {
 
703
        switch (album->type())
 
704
        {
 
705
            case Album::PHYSICAL:
 
706
            {
 
707
                d->folderSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
708
                d->folderView->slotTextFolderFilterChanged(d->folderSearchBar->lineEdit()->text());
 
709
                break;
 
710
            }
 
711
            case Album::TAG:
 
712
            {
 
713
                d->tagSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
714
                d->tagFolderView->slotTextTagFilterChanged(d->tagSearchBar->lineEdit()->text());
 
715
 
 
716
                d->tagFilterSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
717
                d->tagFilterView->slotTextTagFilterChanged(d->tagFilterSearchBar->lineEdit()->text());
 
718
                break;
 
719
            }
 
720
            case Album::SEARCH:
 
721
            {
 
722
                d->searchSearchBar->lineEdit()->completionObject()->addItem(album->title());
 
723
                d->searchFolderView->slotTextSearchFilterChanged(d->searchSearchBar->lineEdit()->text());
 
724
 
 
725
                d->timeLineView->searchBar()->lineEdit()->completionObject()->addItem(album->title());
 
726
                d->timeLineView->folderView()->slotTextSearchFilterChanged(d->timeLineView->searchBar()->lineEdit()->text());
 
727
                break;
 
728
            }
 
729
            default:
 
730
            {
 
731
                // Nothing to do with Album::DATE
 
732
                break;
 
733
            }
 
734
        }
 
735
    }
 
736
}
 
737
 
 
738
void DigikamView::slotAlbumsCleared()
 
739
{
 
740
    d->iconView->clear();
 
741
    emit signalAlbumSelected(false);
 
742
 
 
743
    d->folderSearchBar->lineEdit()->completionObject()->clear();
 
744
 
 
745
    d->tagSearchBar->lineEdit()->completionObject()->clear();
 
746
    d->tagFilterSearchBar->lineEdit()->completionObject()->clear();
 
747
 
 
748
    d->searchSearchBar->lineEdit()->completionObject()->clear();
 
749
    d->timeLineView->searchBar()->lineEdit()->completionObject()->clear();
617
750
}
618
751
 
619
752
void DigikamView::slotAlbumHistoryBack(int steps)
676
809
            if(!item) return;
677
810
            v->setSelected(item);
678
811
        }
 
812
        else if (TimeLineView *v = dynamic_cast<TimeLineView*>(widget))
 
813
        {
 
814
            item = (QListViewItem*)album->extraData(v->folderView());
 
815
            if(!item) return;
 
816
 
 
817
            v->folderView()->setSelected(item, true);
 
818
            v->folderView()->ensureItemVisible(item);
 
819
        }
679
820
 
680
821
        d->leftSideBar->setActiveTab(widget);
681
822
 
885
1026
    }
886
1027
}
887
1028
 
888
 
void DigikamView::slotAlbumsCleared()
889
 
{
890
 
    d->iconView->clear();
891
 
    emit signalAlbumSelected(false);
892
 
}
893
 
 
894
1029
void DigikamView::setThumbSize(int size)
895
1030
{
896
1031
    if (d->albumWidgetStack->previewMode() == AlbumWidgetStack::PreviewImageMode)
902
1037
        double b    = (zmin-(zmax*s/h))/(1-s/h);
903
1038
        double a    = (zmax-b)/h;
904
1039
        double z    = a*size+b; 
905
 
        d->albumWidgetStack->setZoomFactor(z);   
 
1040
        d->albumWidgetStack->setZoomFactorSnapped(z);   
906
1041
    }
907
1042
    else if (d->albumWidgetStack->previewMode() == AlbumWidgetStack::PreviewAlbumMode)
908
1043
    {
998
1133
void DigikamView::slotZoomTo100Percents()
999
1134
{
1000
1135
    if (d->albumWidgetStack->previewMode() == AlbumWidgetStack::PreviewImageMode)
1001
 
    {
1002
 
        d->albumWidgetStack->zoomTo100Percents();
 
1136
    { 
 
1137
        d->albumWidgetStack->toggleFitToWindowOr100();
1003
1138
    }
1004
1139
}
1005
1140
 
1270
1405
    d->folderView->setActive(w == d->folderBox);
1271
1406
    d->tagFolderView->setActive(w == d->tagBox);
1272
1407
    d->searchFolderView->setActive(w == d->searchBox);
 
1408
    d->timeLineView->setActive(w == d->timeLineView);
1273
1409
}
1274
1410
 
1275
1411
void DigikamView::slotAssignRating(int rating)