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

« back to all changes in this revision

Viewing changes to digikam/libs/widgets/metadata/metadatalistview.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 : a generic list view widget to 
8
8
 *               display metadata
9
9
 * 
10
 
 * Copyright (c) 2006-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
 
10
 * Copyright (c) 2006-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
45
45
{
46
46
 
47
47
MetadataListView::MetadataListView(QWidget* parent)
48
 
                : KListView(parent)
 
48
                : QListView(parent)
49
49
{
50
50
    header()->hide();
51
51
    addColumn("Name");    // No need i18n here.
52
52
    addColumn("Value");   // No need i18n here.
53
 
    setTreeStepSize(0);
54
53
    setItemMargin(0);
55
54
    setAllColumnsShowFocus(true);
56
 
    setResizeMode(KListView::AllColumns);
 
55
    setResizeMode(QListView::AllColumns);
57
56
    // Vertical scroll bar is always disable to give more 
58
57
    // free space to metadata content
59
58
    setVScrollBarMode(QScrollView::AlwaysOff);
60
 
    
 
59
 
61
60
    m_parent = dynamic_cast<MetadataWidget *>(parent);
62
 
    
 
61
 
63
62
    connect(this, SIGNAL(selectionChanged(QListViewItem*)),
64
63
            this, SLOT(slotSelectionChanged(QListViewItem*)));
65
64
}
78
77
            return item->getKey();
79
78
        }
80
79
    }
81
 
    
 
80
 
82
81
    return QString();
83
82
}
84
83
 
93
92
        if ( it.current()->isSelectable() )
94
93
        {
95
94
            MetadataListViewItem *item = dynamic_cast<MetadataListViewItem *>(it.current());
96
 
            
 
95
 
97
96
            if (item->getKey() == itemKey)
98
97
            {
99
98
                setSelected(item, true);
102
101
                return;
103
102
            }
104
103
        }
105
 
        
 
104
 
106
105
        ++it;
107
106
    }
108
107
}
122
121
        tagValue.truncate(128);
123
122
        tagValue.append("...");
124
123
    }
125
 
    
 
124
 
126
125
    QWhatsThis::add(this, i18n("<b>Title: </b><p>%1<p>"
127
126
                               "<b>Value: </b><p>%2<p>"
128
127
                               "<b>Description: </b><p>%3")
131
130
                          .arg(tagDesc));
132
131
}
133
132
 
134
 
void MetadataListView::setIfdList(DMetadata::MetaDataMap ifds, const QStringList& tagsfilter)
 
133
void MetadataListView::setIfdList(const DMetadata::MetaDataMap& ifds, const QStringList& tagsfilter)
135
134
{
136
135
    clear();
137
 
    
 
136
 
138
137
    uint               subItems = 0;
139
138
    QString            ifDItemName;
140
139
    MdKeyListViewItem *parentifDItem = 0;
141
140
 
142
 
    for (DMetadata::MetaDataMap::iterator it = ifds.begin(); it != ifds.end(); ++it)
 
141
    for (DMetadata::MetaDataMap::const_iterator it = ifds.begin(); it != ifds.end(); ++it)
143
142
    {
144
143
        // We checking if we have changed of ifDName
145
144
        QString currentIfDName = it.key().section('.', 1, 1);
146
 
        
 
145
 
147
146
        if ( currentIfDName != ifDItemName )
148
147
        {
149
148
            ifDItemName = currentIfDName;
173
172
            else
174
173
            {
175
174
                // We don't filter the output (Complete Mode)
176
 
            
 
175
 
177
176
                QString tagTitle = m_parent->getTagTitle(it.key());
178
177
                new MetadataListViewItem(parentifDItem, it.key(), tagTitle, it.data());
179
178
                subItems++;
189
188
    QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) );
190
189
}
191
190
 
192
 
void MetadataListView::setIfdList(DMetadata::MetaDataMap ifds, QStringList keysFilter,
 
191
void MetadataListView::setIfdList(const DMetadata::MetaDataMap& ifds, const QStringList& keysFilter,
193
192
                                  const QStringList& tagsFilter)
194
193
{
195
194
    clear();
196
 
    
 
195
 
197
196
    uint               subItems = 0;
198
197
    MdKeyListViewItem *parentifDItem = 0;
199
198
 
200
 
    for (QStringList::iterator itKeysFilter = keysFilter.begin();
 
199
    for (QStringList::const_iterator itKeysFilter = keysFilter.begin();
201
200
         itKeysFilter != keysFilter.end();
202
201
         ++itKeysFilter)
203
202
    {
204
203
        subItems = 0;
205
204
        parentifDItem = new MdKeyListViewItem(this, *itKeysFilter);
206
 
        
207
 
        DMetadata::MetaDataMap::iterator it = ifds.end(); 
 
205
 
 
206
        DMetadata::MetaDataMap::const_iterator it = ifds.end(); 
208
207
 
209
208
        while(1)   
210
209
        {
216
215
                    if (!tagsFilter.isEmpty())
217
216
                    {
218
217
                        // We using the filter to make a more user friendly output (Simple Mode)
219
 
        
 
218
 
220
219
                        if (tagsFilter.contains(it.key().section('.', 2, 2)))
221
220
                        {
222
221
                            QString tagTitle = m_parent->getTagTitle(it.key());
227
226
                    else
228
227
                    {
229
228
                        // We don't filter the output (Complete Mode)
230
 
                    
 
229
 
231
230
                        QString tagTitle = m_parent->getTagTitle(it.key());
232
231
                        new MetadataListViewItem(parentifDItem, it.key(), tagTitle, it.data());
233
232
                        subItems++;
234
233
                    }
235
234
                }
236
235
            }
237
 
            
 
236
 
238
237
            if (it == ifds.begin()) break;
239
238
            --it;
240
239
        }
250
249
 
251
250
void MetadataListView::viewportResizeEvent(QResizeEvent* e)
252
251
{
253
 
    KListView::viewportResizeEvent(e);
 
252
    QListView::viewportResizeEvent(e);
254
253
    QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) );
255
254
}
256
255
 
 
256
void MetadataListView::slotSearchTextChanged(const QString& filter)
 
257
{
 
258
    bool query     = false;
 
259
    QString search = filter.lower();
 
260
 
 
261
    QListViewItemIterator it(this);
 
262
    for ( ; it.current(); ++it ) 
 
263
    {
 
264
        MetadataListViewItem *item = dynamic_cast<MetadataListViewItem*>(it.current());
 
265
        if (item)
 
266
       {
 
267
            if (item->text(0).lower().contains(search) ||
 
268
                item->text(1).lower().contains(search))
 
269
            {
 
270
                query = true;
 
271
                item->setVisible(true);
 
272
            }
 
273
            else
 
274
            {
 
275
                item->setVisible(false);
 
276
            }
 
277
        }
 
278
    }
 
279
 
 
280
    emit signalTextFilterMatch(query);
 
281
}
 
282
 
257
283
}  // namespace Digikam
258