[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [digikam/development/3.0.0] utilities/cameragui/views: Removed unused classes
From:       Islam Wazery <wazery () ubuntu ! com>
Date:       2012-07-31 23:11:45
Message-ID: 20120731231145.89E8DA60CD () git ! kde ! org
[Download RAW message or body]

Git commit 073424d253df080ca4dbe141adfa9f466c06d77b by Islam Wazery.
Committed on 01/08/2012 at 01:10.
Pushed by wazery into branch 'development/3.0.0'.

Removed unused classes

D  +0    -947  utilities/cameragui/views/icategorizedview.cpp
D  +0    -199  utilities/cameragui/views/icategorizedview.h
D  +0    -1918 utilities/cameragui/views/importkcategorizedview.cpp
D  +0    -125  utilities/cameragui/views/importkcategorizedview.h
D  +0    -216  utilities/cameragui/views/importkcategorizedview_p.h

http://commits.kde.org/digikam/073424d253df080ca4dbe141adfa9f466c06d77b

diff --git a/utilities/cameragui/views/icategorizedview.cpp \
b/utilities/cameragui/views/icategorizedview.cpp deleted file mode 100644
index d6dc8d4..0000000
--- a/utilities/cameragui/views/icategorizedview.cpp
+++ /dev/null
@@ -1,947 +0,0 @@
-/* ============================================================
- *
- * This file is a part of digiKam project
- * http://www.digikam.org
- *
- * Date        : 2012-07-08
- * Description : Item view to list import interface items.
- *
- * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation;
- * either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * ============================================================ */
-
-#include "icategorizedview.moc"
-
-// Qt includes
-
-#include <QHelpEvent>
-#include <QScrollBar>
-#include <QSortFilterProxyModel>
-
-// KDE includes
-
-#include <KApplication>
-#include <KGlobalSettings>
-
-// Local includes
-
-#include "thememanager.h"
-
-namespace Digikam
-{
-
-class ICategorizedView::Private
-{
-public:
-
-    Private(ICategorizedView* const q) :
-        delegate(0),
-        currentMouseEvent(0),
-        usePointingHand(true),
-        scrollStepFactor(10),
-        toolTip(0),
-        notificationToolTip(0),
-        showToolTip(false),
-        hintAtSelectionRow(-1),
-        ensureOneSelectedItem(false),
-        ensureInitialSelectedItem(false),
-        q(q)
-    {
-    }
-
-    QModelIndex scrollPositionHint() const;
-
-public:
-
-    DItemDelegate*              delegate;
-    QMouseEvent*                currentMouseEvent;
-    bool                        usePointingHand;
-    int                         scrollStepFactor;
-    ItemViewToolTip*            toolTip;
-    ItemViewToolTip*            notificationToolTip;
-    bool                        showToolTip;
-
-    QPersistentModelIndex       hintAtSelectionIndex;
-    QPersistentModelIndex       hintAtScrollPosition;
-    int                         hintAtSelectionRow;
-    bool                        ensureOneSelectedItem;
-    bool                        ensureInitialSelectedItem;
-
-    ICategorizedView* const     q;
-};
-
-QModelIndex ICategorizedView::Private::scrollPositionHint() const
-{
-    if (q->verticalScrollBar()->value() == q->verticalScrollBar()->minimum())
-    {
-        return QModelIndex();
-    }
-
-    QModelIndex hint = q->currentIndex();
-
-    // If the user scrolled, do not take current item, but first visible
-    if (!hint.isValid() || !q->viewport()->rect().intersects(q->visualRect(hint)))
-    {
-        QList<QModelIndex> visibleIndexes = \
                q->categorizedIndexesIn(q->viewport()->rect());
-        if (!visibleIndexes.isEmpty())
-        {
-            hint = visibleIndexes.first();
-        }
-    }
-
-    return hint;
-}
-
-ICategorizedView::ICategorizedView(QWidget* const parent)
-    : ImportKCategorizedView(parent), d(new Private(this))
-{
-    setViewMode(QListView::IconMode);
-    setLayoutDirection(Qt::LeftToRight);
-    setFlow(QListView::LeftToRight);
-    setResizeMode(QListView::Adjust);
-    setMovement(QListView::Static);
-    setWrapping(true);
-
-    // important optimization for layouting
-    setUniformItemSizes(true);
-    // disable "feature" from ImportKCategorizedView
-    setDrawDraggedItems(false);
-
-    setSelectionMode(QAbstractItemView::ExtendedSelection);
-
-    setDragEnabled(true);
-    setEditTriggers(QAbstractItemView::NoEditTriggers);
-    viewport()->setAcceptDrops(true);
-    setMouseTracking(true);
-
-    connect(this, SIGNAL(activated(QModelIndex)),
-            this, SLOT(slotActivated(QModelIndex)));
-
-    connect(this, SIGNAL(clicked(QModelIndex)),
-            this, SLOT(slotClicked(QModelIndex)));
-
-    connect(this, SIGNAL(entered(QModelIndex)),
-            this, SLOT(slotEntered(QModelIndex)));
-
-    connect(ThemeManager::instance(), SIGNAL(signalThemeChanged()),
-            this, SLOT(slotThemeChanged()));
-}
-
-ICategorizedView::~ICategorizedView()
-{
-    delete d;
-}
-
-int ICategorizedView::numberOfSelectedIndexes() const
-{
-    return selectedIndexes().size();
-}
-
-void ICategorizedView::toFirstIndex()
-{
-    QModelIndex index = moveCursor(MoveHome, Qt::NoModifier);
-    clearSelection();
-    setCurrentIndex(index);
-    scrollToTop();
-}
-
-void ICategorizedView::toLastIndex()
-{
-    QModelIndex index = moveCursor(MoveEnd, Qt::NoModifier);
-    clearSelection();
-    setCurrentIndex(index);
-    scrollToTop();
-}
-
-void ICategorizedView::toNextIndex()
-{
-    toIndex(moveCursor(MoveNext, Qt::NoModifier));
-}
-
-void ICategorizedView::toPreviousIndex()
-{
-    toIndex(moveCursor(MovePrevious, Qt::NoModifier));
-}
-
-void ICategorizedView::toIndex(const QModelIndex& index)
-{
-    if (!index.isValid())
-    {
-        return;
-    }
-
-    clearSelection();
-    setCurrentIndex(index);
-    scrollTo(index);
-}
-
-void ICategorizedView::awayFromSelection()
-{
-    QItemSelection selection = selectionModel()->selection();
-
-    if (selection.isEmpty())
-    {
-        return;
-    }
-
-    const QModelIndex first = model()->index(0, 0);
-    const QModelIndex last  = model()->index(model()->rowCount() -1, 0);
-
-    if (selection.contains(first) && selection.contains(last))
-    {
-        QItemSelection remaining(first, last);
-        remaining.merge(selection, QItemSelectionModel::Toggle);
-        QList<QModelIndex> indexes = remaining.indexes();
-
-        if (indexes.isEmpty())
-        {
-            clearSelection();
-            setCurrentIndex(QModelIndex());
-        }
-        else
-        {
-            toIndex(remaining.indexes().first());
-        }
-    }
-    else if (selection.contains(last))
-    {
-        setCurrentIndex(selection.indexes().first());
-        toPreviousIndex();
-    }
-    else
-    {
-        setCurrentIndex(selection.indexes().last());
-        toNextIndex();
-    }
-}
-
-void ICategorizedView::scrollToRelaxed(const QModelIndex& index, ScrollHint hint)
-{
-    if (viewport()->rect().intersects(visualRect(index)))
-    {
-        return;
-    }
-
-    scrollTo(index, hint);
-}
-
-void ICategorizedView::setScrollStepGranularity(int factor)
-{
-    d->scrollStepFactor = qMax(1, factor);
-}
-
-void ICategorizedView::setSelectedIndexes(const QList<QModelIndex>& indexes)
-{
-    if (selectedIndexes() == indexes)
-    {
-        return;
-    }
-
-    QItemSelection mySelection;
-
-    foreach (const QModelIndex& index, indexes)
-    {
-        mySelection.select(index, index);
-    }
-
-    selectionModel()->select(mySelection, QItemSelectionModel::ClearAndSelect);
-}
-
-void ICategorizedView::invertSelection()
-{
-    const QModelIndex topLeft     = model()->index(0, 0);
-    const QModelIndex bottomRight = model()->index(model()->rowCount() -1, 0);
-
-    const QItemSelection selection(topLeft, bottomRight);
-    selectionModel()->select(selection, QItemSelectionModel::Toggle);
-}
-
-void ICategorizedView::setSpacing(int space)
-{
-    d->delegate->setSpacing(space);
-}
-
-void ICategorizedView::setToolTipEnabled(bool enabled)
-{
-    d->showToolTip;
-}
-
-bool ICategorizedView::isToolTipEnabled() const
-{
-    return d->showToolTip;
-}
-
-void ICategorizedView::setUsePointingHandCursor(bool useCursor)
-{
-    d->usePointingHand = useCursor;
-}
-
-void ICategorizedView::showIndexNotification(const QModelIndex& index, const \
                QString& message)
-{
-    hideIndexNotification();
-    if (!index.isValid())
-    {
-        return;
-    }
-
-    if (!d->notificationToolTip)
-    {
-        d->notificationToolTip = new ItemViewToolTip(this);
-    }
-
-    d->notificationToolTip->setTipContents(message);
-
-    QStyleOptionViewItem option =  viewOptions();
-    option.rect                 =  visualRect(index);
-    option.state                |= (index == currentIndex() ? QStyle::State_HasFocus \
                : QStyle::State_None);
-    d->notificationToolTip->show(option, index);
-}
-
-void ICategorizedView::hideIndexNotification()
-{
-    if (d->notificationToolTip)
-    {
-        d->notificationToolTip->hide();
-    }
-}
-
-void ICategorizedView::slotActivated(const QModelIndex& index)
-{
-    if (d->currentMouseEvent)
-    {
-        // ignore activation if Ctrl or Shift is pressed (for selection)
-        Qt::KeyboardModifiers modifiers = d->currentMouseEvent->modifiers();
-        const bool shiftKeyPressed      = modifiers & Qt::ShiftModifier;
-        const bool controlKeyPressed    = modifiers & Qt::ControlModifier;
-
-        if (shiftKeyPressed || controlKeyPressed)
-        {
-            return;
-        }
-
-        const bool rightClick = d->currentMouseEvent->button() & Qt::RightButton;
-
-        if (rightClick)
-        {
-            return;
-        }
-
-        // if the activation is caused by mouse click (not keyboard)
-        // we need to check the hot area
-        if (!d->delegate->acceptsActivation(d->currentMouseEvent->pos(), \
                visualRect(index), index))
-        {
-            return;
-        }
-    }
-
-    indexActivated(index);
-}
-
-void ICategorizedView::slotClicked(const QModelIndex& index)
-{
-    if (d->currentMouseEvent)
-    {
-        emit clicked(d->currentMouseEvent, index);
-    }
-}
-
-void ICategorizedView::slotEntered(const QModelIndex& index)
-{
-    if (d->currentMouseEvent)
-    {
-        emit entered(d->currentMouseEvent, index);
-    }
-}
-
-
-void ICategorizedView::layoutAboutToBeChanged()
-{
-    d->ensureOneSelectedItem = selectionModel()->hasSelection();
-    QModelIndex current      = currentIndex();
-
-    // store some hints so that if all selected items were removed do not need to \
                default to 0,0.
-    if (d->ensureOneSelectedItem)
-    {
-        QItemSelection currentSelection = selectionModel()->selection();
-        QModelIndex indexToAnchor;
-
-        if (currentSelection.contains(current))
-        {
-            indexToAnchor = current;
-        }
-        else if (!currentSelection.isEmpty())
-        {
-            indexToAnchor = currentSelection.first().topLeft();
-        }
-
-        if (indexToAnchor.isValid())
-        {
-            d->hintAtSelectionRow = indexToAnchor.row();
-            d->hintAtSelectionIndex = nextIndexHint(indexToAnchor, \
                QItemSelectionRange(indexToAnchor));
-        }
-    }
-
-    // some precautions to keep current scroll position
-    d->hintAtScrollPosition = d->scrollPositionHint();
-}
-
-void ICategorizedView::layoutWasChanged()
-{
-    // connected queued to layoutChanged()
-    ensureSelectionAfterChanges();
-    if (d->hintAtScrollPosition.isValid())
-    {
-        scrollToRelaxed(d->hintAtScrollPosition);
-        d->hintAtScrollPosition = QModelIndex();
-    }
-    else
-    {
-        scrollToRelaxed(currentIndex());
-    }
-}
-
-void ICategorizedView::slotThemeChanged()
-{
-    viewport()->update();
-}
-
-void ICategorizedView::slotSetupChanged()
-{
-    viewport()->update();
-}
-
-bool ICategorizedView::showToolTip(const QModelIndex& index, QStyleOptionViewItem& \
                option, QHelpEvent* he)
-{
-    QRect  innerRect;
-    QPoint pos;
-
-    if (he)
-    {
-        pos = he->pos();
-    }
-    else
-    {
-        pos = option.rect.center();
-    }
-
-    if (d->delegate->acceptsToolTip(he->pos(), option.rect, index,& innerRect))
-    {
-        if (!innerRect.isNull())
-        {
-            option.rect = innerRect;
-        }
-
-        d->toolTip->show(option, index);
-        return true;
-    }
-
-    return false;
-}
-
-void ICategorizedView::setItemDelegate(DItemDelegate* delegate)
-{
-    if (d->delegate == delegate)
-    {
-        return;
-    }
-
-    if (d->delegate)
-    {
-        disconnect(d->delegate, SIGNAL(gridSizeChanged(QSize)), this, \
                SLOT(slotGridSizeChanged(QSize)));
-    }
-
-    d->delegate = delegate;
-    ImportKCategorizedView::setItemDelegate(d->delegate);
-
-    connect(d->delegate, SIGNAL(gridSizeChanged(QSize)), this, \
                SLOT(slotGridSizeChanged(QSize)));
-}
-
-void ICategorizedView::contextMenuEvent(QContextMenuEvent* event)
-{
-    userInteraction();
-    QModelIndex index = indexAt(event->pos());
-
-    if (index.isValid())
-    {
-        showContextMenuOnIndex(event, index);
-    }
-    else
-    {
-        showContextMenu(event);
-    }
-}
-
-void ICategorizedView::keyPressEvent(QKeyEvent* event)
-{
-    userInteraction();
-
-    if (event == QKeySequence::Copy)
-    {
-        copy();
-        event->accept();
-        return;
-    }
-    else if (event == QKeySequence::Paste)
-    {
-        paste();
-        event->accept();
-        return;
-    }
-
-    ImportKCategorizedView::keyPressEvent(event);
-
-    emit keyPressed(event);
-}
-
-void ICategorizedView::mousePressEvent(QMouseEvent* event)
-{
-    userInteraction();
-    const QModelIndex index         = indexAt(event->pos());
-
-    // Clear selection on click on empty area. Standard behavior, but not done by \
                QAbstractItemView for some reason.
-    Qt::KeyboardModifiers modifiers = event->modifiers();
-    const Qt::MouseButton button    = event->button();
-    const bool rightButtonPressed   = button & Qt::RightButton;
-    const bool shiftKeyPressed      = modifiers & Qt::ShiftModifier;
-    const bool controlKeyPressed    = modifiers & Qt::ControlModifier;
-
-    if (!index.isValid() && !rightButtonPressed && !shiftKeyPressed && \
                !controlKeyPressed)
-    {
-        clearSelection();
-    }
-
-    // store event for entered(), clicked(), activated() signal handlers
-    if (!rightButtonPressed)
-    {
-        d->currentMouseEvent = event;
-    }
-    else
-    {
-        d->currentMouseEvent = 0;
-    }
-
-    ImportKCategorizedView::mousePressEvent(event);
-    if (!index.isValid())
-    {
-        emit viewportClicked(event);
-    }
-    d->currentMouseEvent = 0;
-}
-
-void ICategorizedView::mouseReleaseEvent(QMouseEvent* event)
-{
-    userInteraction();
-    d->currentMouseEvent = event;
-    ImportKCategorizedView::mouseReleaseEvent(event);
-    d->currentMouseEvent = 0;
-}
-
-void ICategorizedView::mouseMoveEvent(QMouseEvent* event)
-{
-    QModelIndex index = indexAt(event->pos());
-    QRect indexVisualRect;
-
-    if (index.isValid())
-    {
-        indexVisualRect = visualRect(index);
-
-        if (d->usePointingHand &&
-            KGlobalSettings::changeCursorOverIcon() &&
-            d->delegate->acceptsActivation(event->pos(), indexVisualRect, index))
-        {
-            setCursor(Qt::PointingHandCursor);
-        }
-        else
-        {
-            unsetCursor();
-        }
-    }
-    else
-    {
-        unsetCursor();
-    }
-
-    d->currentMouseEvent = event;
-    ImportKCategorizedView::mouseMoveEvent(event);
-    d->currentMouseEvent = 0;
-
-    d->delegate->mouseMoved(event, indexVisualRect, index);
-}
-
-void ICategorizedView::resizeEvent(QResizeEvent* e)
-{
-    QModelIndex oldPosition = d->scrollPositionHint();
-    ImportKCategorizedView::resizeEvent(e);
-    updateDelegateSizes();
-    scrollToRelaxed(oldPosition, QAbstractItemView::PositionAtTop);
-}
-
-void ICategorizedView::rowsAboutToBeRemoved(const QModelIndex& parent, int start, \
                int end)
-{
-    ImportKCategorizedView::rowsAboutToBeRemoved(parent, start, end);
-
-    // Ensure one selected item
-    int totalToRemove  = end - start + 1;
-    bool remainingRows = model()->rowCount(parent) > totalToRemove;
-
-    if (!remainingRows)
-    {
-        return;
-    }
-
-    QItemSelection removed(model()->index(start, 0), model()->index(end, 0));
-
-    if (selectionModel()->hasSelection())
-    {
-        // find out which selected indexes are left after rows are removed
-        QItemSelection selected = selectionModel()->selection();
-        QModelIndex current     = currentIndex();
-        QModelIndex indexToAnchor;
-
-        if (selected.contains(current))
-        {
-            indexToAnchor = current;
-        }
-        else if (!selected.isEmpty())
-        {
-            indexToAnchor = selected.first().topLeft();
-        }
-
-        selected.merge(removed, QItemSelectionModel::Deselect);
-
-        if (selected.isEmpty())
-        {
-            QModelIndex newCurrent = nextIndexHint(indexToAnchor, removed.first() \
                /*a range*/);
-            setCurrentIndex(newCurrent);
-        }
-    }
-
-    QModelIndex hint = d->scrollPositionHint();
-    if (removed.contains(hint))
-    {
-        d->hintAtScrollPosition = nextIndexHint(hint, removed.first() /*a range*/);
-    }
-}
-
-void ICategorizedView::rowsInserted(const QModelIndex& parent, int start, int end)
-{
-    ImportKCategorizedView::rowsInserted(parent, start, end);
-
-    if (start == 0)
-    {
-        ensureSelectionAfterChanges();
-    }
-}
-
-void ICategorizedView::reset()
-{
-    ImportKCategorizedView::reset();
-
-    emit selectionChanged();
-    emit selectionCleared();
-
-    d->ensureInitialSelectedItem = true;
-    d->hintAtScrollPosition      = QModelIndex();
-    d->hintAtSelectionIndex      = QModelIndex();
-    d->hintAtSelectionRow        = -1;
-    verticalScrollBar()->setValue(verticalScrollBar()->minimum());
-    horizontalScrollBar()->setValue(horizontalScrollBar()->minimum());
-}
-
-void ICategorizedView::selectionChanged(const QItemSelection& selectedItems, const \
                QItemSelection& deselectedItems)
-{
-    ImportKCategorizedView::selectionChanged(selectedItems, deselectedItems);
-
-    emit selectionChanged();
-
-    if (!selectionModel()->hasSelection())
-    {
-        emit selectionCleared();
-    }
-
-    userInteraction();
-}
-
-void ICategorizedView::wheelEvent(QWheelEvent* event)
-{
-    // ImportKCategorizedView updates the single step at some occasions in a private \
                method
-    horizontalScrollBar()->setSingleStep(d->delegate->gridSize().height() / \
                d->scrollStepFactor);
-    verticalScrollBar()->setSingleStep(d->delegate->gridSize().width() / \
                d->scrollStepFactor);
-
-    if (event->modifiers() & Qt::ControlModifier)
-    {
-        const int delta = event->delta();
-
-        if (delta > 0)
-        {
-            emit zoomInStep();
-        }
-        else if (delta < 0)
-        {
-            emit zoomOutStep();
-        }
-
-        event->accept();
-        return;
-    }
-
-    if (verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOff && event->orientation() \
                == Qt::Vertical)
-    {
-        QWheelEvent n(event->pos(), event->globalPos(), event->delta(),
-                      event->buttons(), event->modifiers(), Qt::Horizontal);
-        QApplication::sendEvent(horizontalScrollBar(), &n);
-        event->setAccepted(n.isAccepted());
-    }
-    else
-    {
-        ImportKCategorizedView::wheelEvent(event);
-    }
-}
-
-bool ICategorizedView::viewportEvent(QEvent* event)
-{
-    switch (event->type())
-    {
-        case QEvent::FontChange:
-        {
-            updateDelegateSizes();
-            break;
-        }
-        case QEvent::ToolTip:
-        {
-            if (!d->showToolTip)
-            {
-                return true;
-            }
-
-            QHelpEvent* he          = static_cast<QHelpEvent*>(event);
-            const QModelIndex index = indexAt(he->pos());
-
-            if (!index.isValid())
-            {
-                break;
-            }
-
-            QStyleOptionViewItem option =  viewOptions();
-            option.rect                 =  visualRect(index);
-            option.state                |= (index == currentIndex() ? \
                QStyle::State_HasFocus : QStyle::State_None);
-            showToolTip(index, option, he);
-            return true;
-        }
-        default:
-            break;
-    }
-
-    return ImportKCategorizedView::viewportEvent(event);
-}
-
-QModelIndex ICategorizedView::moveCursor(CursorAction cursorAction, \
                Qt::KeyboardModifiers modifiers)
-{
-    QModelIndex current = currentIndex();
-
-    if (!current.isValid())
-    {
-        return ImportKCategorizedView::moveCursor(cursorAction, modifiers);
-    }
-
-    // We want a simple wrapping navigation.
-    // Default behavior we do not want: right/left does never change row; \
                Next/Previous is equivalent to Down/Up
-    switch (cursorAction)
-    {
-        case MoveNext:
-        case MoveRight:
-        {
-            QModelIndex next = model()->index(current.row() + 1, 0);
-
-            if (next.isValid())
-            {
-                return next;
-            }
-            else
-            {
-                return current;
-            }
-
-            break;
-        }
-        case MovePrevious:
-        case MoveLeft:
-        {
-            QModelIndex previous = model()->index(current.row() - 1, 0);
-
-            if (previous.isValid())
-            {
-                return previous;
-            }
-            else
-            {
-                return current;
-            }
-
-            break;
-        }
-        default:
-            break;
-    }
-
-    return ImportKCategorizedView::moveCursor(cursorAction, modifiers);
-}
-
-
-void ICategorizedView::showContextMenuOnIndex(QContextMenuEvent*, const \
                QModelIndex&)
-{
-    // implemented in subclass
-}
-
-void ICategorizedView::showContextMenu(QContextMenuEvent*)
-{
-    // implemented in subclass
-}
-
-void ICategorizedView::indexActivated(const QModelIndex&)
-{
-}
-
-QModelIndex ICategorizedView::mapIndexForDragDrop(const QModelIndex& index) const
-{
-    return filterModel()->mapToSource(index);
-}
-
-QPixmap ICategorizedView::pixmapForDrag(const QList<QModelIndex>& indexes) const
-{
-    QStyleOptionViewItem option = viewOptions();
-    option.rect                 = viewport()->rect();
-    return d->delegate->pixmapForDrag(option, indexes);
-}
-
-QModelIndex ICategorizedView::nextIndexHint(const QModelIndex& indexToAnchor, const \
                QItemSelectionRange& removed) const
-{
-    Q_UNUSED(indexToAnchor);
-
-    if (removed.bottomRight().row() == model()->rowCount() - 1)
-    {
-        if (removed.topLeft().row() == 0)
-        {
-            return QModelIndex();
-        }
-        return model()->index(removed.topLeft().row() - 1, 0);    // last remaining, \
                no next one left
-    }
-    else
-    {
-        return model()->index(removed.bottomRight().row() + 1, 0);    // next \
                remaining
-    }
-}
-
-void ICategorizedView::setToolTip(ItemViewToolTip* tip)
-{
-    d->toolTip = tip;
-}
-
-void ICategorizedView::updateDelegateSizes()
-{
-    QStyleOptionViewItem option = viewOptions();
-    option.rect = QRect(QPoint(0,0), viewport()->size());
-    d->delegate->setDefaultViewOptions(option);
-}
-
-void ICategorizedView::userInteraction()
-{
-    // as soon as the user did anything affecting selection, we don't interfere \
                anymore
-    d->ensureInitialSelectedItem = false;
-    d->hintAtSelectionIndex      = QModelIndex();
-}
-
-
-QModelIndex ICategorizedView::indexForCategoryAt(const QPoint& pos) const
-{
-    return categoryAt(pos);
-}
-
-void ICategorizedView::slotGridSizeChanged(const QSize& size)
-{
-    setGridSize(size);
-
-    if (!size.isNull())
-    {
-        horizontalScrollBar()->setSingleStep(size.width() / d->scrollStepFactor);
-        verticalScrollBar()->setSingleStep(size.height() / d->scrollStepFactor);
-    }
-}
-
-void ICategorizedView::ensureSelectionAfterChanges()
-{
-    if (d->ensureInitialSelectedItem && model()->rowCount())
-    {
-        // Ensure the item (0,0) is selected, if the model was reset previously
-        // and the user did not change the selection since reset.
-        // Caveat: Item at (0,0) may have changed.
-        bool hadInitial              = d->ensureInitialSelectedItem;
-        d->ensureInitialSelectedItem = false;
-        d->ensureOneSelectedItem     = false;
-        QModelIndex index            = model()->index(0,0);
-
-        if (index.isValid())
-        {
-            selectionModel()->select(index, QItemSelectionModel::SelectCurrent | \
                QItemSelectionModel::Clear);
-            setCurrentIndex(index);
-
-            // we want ensureInitial set to false if and only if the selection
-            // is done from any other place than the previous line (i.e., by user \
                action)
-            // Effect: we select whatever is the current index(0,0)
-            if (hadInitial)
-            {
-                d->ensureInitialSelectedItem = true;
-            }
-        }
-    }
-    else if (d->ensureOneSelectedItem)
-    {
-        // ensure we have a selection if there was one before
-        d->ensureOneSelectedItem = false;
-
-        if (model()->rowCount() && selectionModel()->selection().isEmpty())
-        {
-            QModelIndex index;
-
-            if (d->hintAtSelectionIndex.isValid())
-            {
-                index = d->hintAtSelectionIndex;
-            }
-            else if (d->hintAtSelectionRow != -1)
-            {
-                index = model()->index(qMin(model()->rowCount(), \
                d->hintAtSelectionRow), 0);
-            }
-            else
-            {
-                index = currentIndex();
-            }
-
-            if (!index.isValid())
-            {
-                index = model()->index(0,0);
-            }
-
-            d->hintAtSelectionRow = -1;
-            d->hintAtSelectionIndex = QModelIndex();
-
-            if (index.isValid())
-            {
-                setCurrentIndex(index);
-                selectionModel()->select(index, QItemSelectionModel::SelectCurrent);
-            }
-        }
-    }
-}
-
-} // namespace Digikam
diff --git a/utilities/cameragui/views/icategorizedview.h \
b/utilities/cameragui/views/icategorizedview.h deleted file mode 100644
index f7f4bc8..0000000
--- a/utilities/cameragui/views/icategorizedview.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/* ============================================================
- *
- * This file is a part of digiKam project
- * http://www.digikam.org
- *
- * Date        : 2012-07-08
- * Description : Item view to list import interface items.
- *
- * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation;
- * either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * ============================================================ */
-
-#ifndef ICATEGORIZEDVIEW_H
-#define ICATEGORIZEDVIEW_H
-
-// Local includes
-
-#include "importkcategorizedview.h"
-#include "dragdropimplementations.h"
-#include "ditemdelegate.h"
-#include "itemviewtooltip.h"
-
-class QSortFilterProxyModel;
-
-namespace Digikam
-{
-
-class ICategorizedView : public ImportKCategorizedView, DragDropViewImplementation
-{
-    Q_OBJECT
-
-public:
-
-    ICategorizedView(QWidget* const parent = 0);
-    ~ICategorizedView();
-
-    DItemDelegate* delegate() const;
-
-    int numberOfSelectedIndexes() const;
-
-    /** Selects the index as current and scrolls to it */
-    void toFirstIndex();
-    void toLastIndex();
-    void toNextIndex();
-    void toPreviousIndex();
-    void toIndex(const QModelIndex& index);
-    void awayFromSelection();
-
-    /** Like scrollTo, but only scrolls if the index is not visible, regardless of \
                hint. */
-    void scrollToRelaxed(const QModelIndex& index, ScrollHint hint = EnsureVisible);
-
-    /** Determine a step size for scrolling. The larget this number, the smaller and \
                more
-     *  precise is the scrolling. Default is 10. */
-    void setScrollStepGranularity(int factor);
-
-    void setSelectedIndexes(const QList<QModelIndex>& indexes);
-    void invertSelection();
-
-    /** Sets the spacing. Does not use setSpacing()/spacing() from QListView */
-    void setSpacing(int space);
-
-    void setToolTipEnabled(bool enabled);
-    bool isToolTipEnabled() const;
-
-    /** Set if the PointingHand Cursor should be shown over the activation area */
-    void setUsePointingHandCursor(bool useCursor);
-
-    virtual QSortFilterProxyModel* filterModel() const = 0;
-
-public Q_SLOTS:
-
-    virtual void copy()  { DragDropViewImplementation::copy();  }
-    virtual void cut()   { DragDropViewImplementation::cut();   }
-    virtual void paste() { DragDropViewImplementation::paste(); }
-
-    void showIndexNotification(const QModelIndex& index, const QString& message);
-    void hideIndexNotification();
-
-Q_SIGNALS:
-
-    /** For overlays: Like the respective parent class signals, but with additional \
                info.
-     *  Do not change the mouse events.
-     */
-    void clicked(const QMouseEvent* e, const QModelIndex& index);
-    void entered(const QMouseEvent* e, const QModelIndex& index);
-
-    /** While clicked() is emitted with a valid index, this corresponds to clicking \
                on empty space.
-     */
-    void viewportClicked(const QMouseEvent* e);
-
-    /**  Remember you may want to check if the event is accepted or ignored.
-     *   This signal is emitted after being handled by this widget.
-     *   You can accept it if ignored.
-     */
-    void keyPressed(QKeyEvent* e);
-
-    void zoomInStep();
-    void zoomOutStep();
-
-    /** Emitted when any selection change occurs. Any of the signals below will be \
                emitted before.
-     */
-    void selectionChanged();
-
-    /** Emitted when the selection is completely cleared.
-     */
-    void selectionCleared();
-
-protected Q_SLOTS:
-
-    void slotClicked(const QModelIndex& index);
-    void slotActivated(const QModelIndex& index);
-    void slotEntered(const QModelIndex& index);
-    void layoutAboutToBeChanged();
-    void layoutWasChanged();
-
-    virtual void slotThemeChanged();
-    virtual void slotSetupChanged();
-
-protected:
-
-    /** Provides default behavior, can reimplement in a subclass.
-     *  Returns true if a tooltip was shown.
-     *  The help event is optional.
-     */
-    virtual bool showToolTip(const QModelIndex& index, QStyleOptionViewItem& option, \
                QHelpEvent* e = 0);
-
-    // reimplemented from parent class
-    void contextMenuEvent(QContextMenuEvent* event);
-    void keyPressEvent(QKeyEvent* event);
-    void mousePressEvent(QMouseEvent* event);
-    void mouseReleaseEvent(QMouseEvent* event);
-    void mouseMoveEvent(QMouseEvent* event);
-    void resizeEvent(QResizeEvent* event);
-    void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
-    void rowsInserted(const QModelIndex &parent, int start, int end);
-    void reset();
-    void selectionChanged(const QItemSelection& selectedItems, const QItemSelection& \
                deselectedItems);
-    void wheelEvent(QWheelEvent* event);
-    bool viewportEvent(QEvent* event);
-    QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers \
                modifiers);
-
-    /** Reimplement thses in a subclass.
-     */
-    virtual void showContextMenuOnIndex(QContextMenuEvent* event, const QModelIndex& \
                index);
-    virtual void showContextMenu(QContextMenuEvent* event);
-    virtual void indexActivated(const QModelIndex& index);
-
-    DECLARE_VIEW_DRAG_DROP_METHODS(ImportKCategorizedView)
-
-    /** Note: pure virtual dragDropHandler() still open from \
                DragDropViewImplementation.
-     */
-    virtual QModelIndex mapIndexForDragDrop(const QModelIndex& index) const;
-    virtual QPixmap     pixmapForDrag(const QList<QModelIndex>& indexes) const;
-
-    /**
-     * Assuming the given indexes would be removed (hypothetically!),
-     * return the index to be selected instead, starting from anchor.
-     * The default implementation returns the next remaining sibling.
-     */
-    virtual QModelIndex nextIndexHint(const QModelIndex& indexToAnchor, const \
                QItemSelectionRange& removed) const;
-
-    void setToolTip(ItemViewToolTip* tip);
-    void setItemDelegate(DItemDelegate* delegate);
-
-    void updateDelegateSizes();
-    void userInteraction();
-
-    /** Returns an index that is representative for the category at position pos.
-     */
-    QModelIndex indexForCategoryAt(const QPoint& pos) const;
-
-private Q_SLOTS:
-
-    void slotGridSizeChanged(const QSize&);
-
-private:
-
-    void ensureSelectionAfterChanges();
-
-private:
-
-    class Private;
-    Private* const d;
-};
-
-} // namespace Digikam
-
-#endif // ICATEGORIZEDVIEW_H
diff --git a/utilities/cameragui/views/importkcategorizedview.cpp \
b/utilities/cameragui/views/importkcategorizedview.cpp deleted file mode 100644
index b3d7899..0000000
--- a/utilities/cameragui/views/importkcategorizedview.cpp
+++ /dev/null
@@ -1,1918 +0,0 @@
-/* ============================================================
- *
- * This file is a part of digiKam project
- * http://www.digikam.org
- *
- * Date        : 2012-07-05
- * Description : Base item view to list import interface items.
- *
- * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation;
- * either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * ============================================================ */
-
-#include "importkcategorizedview.moc"
-
-// C++ includes
-
-#include <cmath>     // trunc on C99 compliant systems
-
-#if !defined(__MINGW32__)
-#include <kdefakes.h> // trunc for not C99 compliant systems
-#endif
-
-// Qt includes
-
-#include <QScrollBar>
-#include <QPainter>
-
-// KDE includes
-
-#include "kcategorizedsortfilterproxymodel.h"
-#include "kcategorydrawer.h"
-
-// Local includes
-
-#include "importkcategorizedview_p.h"
-
-namespace Digikam
-{
-
-ImportKCategorizedView::Private::Private(ImportKCategorizedView* const listView)
-    : listView(listView),
-      categoryDrawer(0),
-      biggestItemSize(QSize(0, 0)),
-      mouseButtonPressed(false),
-      rightMouseButtonPressed(false),
-      dragLeftViewport(false),
-      drawItemsWhileDragging(true),
-      proxyModel(0)
-{
-}
-
-ImportKCategorizedView::Private::~Private()
-{
-}
-
-const QModelIndexList& ImportKCategorizedView::Private::intersectionSet(const QRect& \
                rect)
-{
-    QModelIndex index;
-    QRect       indexVisualRect;
-    int         itemHeight;
-
-    intersectedIndexes.clear();
-
-    if (listView->gridSize().isEmpty())
-    {
-        itemHeight = biggestItemSize.height();
-    }
-    else
-    {
-        itemHeight = listView->gridSize().height();
-    }
-
-    // Lets find out where we should start
-    int top    = proxyModel->rowCount() - 1;
-    int bottom = 0;
-    int middle = (top + bottom) / 2;
-
-    while (bottom <= top)
-    {
-        middle          = (top + bottom) / 2;
-        index           = proxyModel->index(middle, 0);
-        indexVisualRect = visualRect(index);
-
-        // We need the whole height (not only the visualRect). This will help us to \
                update
-        // all needed indexes correctly (ereslibre)
-        indexVisualRect.setHeight(indexVisualRect.height() + (itemHeight - \
                indexVisualRect.height()));
-
-        if (qMax(indexVisualRect.topLeft().y(), indexVisualRect.bottomRight().y()) <
-            qMin(rect.topLeft().y(), rect.bottomRight().y()))
-        {
-            bottom = middle + 1;
-        }
-        else
-        {
-            top = middle - 1;
-        }
-    }
-
-    for (int i = middle; i < proxyModel->rowCount(); ++i)
-    {
-        index           = proxyModel->index(i, 0);
-        indexVisualRect = visualRect(index);
-
-        if (rect.intersects(indexVisualRect))
-        {
-            intersectedIndexes.append(index);
-        }
-
-        // If we passed next item, stop searching for hits
-        if (qMax(rect.bottomRight().y(), rect.topLeft().y()) <
-            qMin(indexVisualRect.topLeft().y(), indexVisualRect.bottomRight().y()))
-        {
-            break;
-        }
-    }
-
-    return intersectedIndexes;
-}
-
-QRect ImportKCategorizedView::Private::visualRectInViewport(const QModelIndex& \
                index) const
-{
-    if (!index.isValid())
-    {
-        return QRect();
-    }
-
-    QRect      retRect;
-    QString    curCategory     = elementsInfo[index.row()].category;
-    const bool leftToRightFlow = (listView->flow() == QListView::LeftToRight);
-
-    if (leftToRightFlow)
-    {
-        if (listView->layoutDirection() == Qt::LeftToRight)
-        {
-            retRect = QRect(listView->spacing(), listView->spacing() * 2 +
-                            categoryDrawer->categoryHeight(index, \
                listView->viewOptions()), 0, 0);
-        }
-        else
-        {
-            retRect = QRect(listView->viewport()->width() - listView->spacing(), \
                listView->spacing() * 2 +
-                            categoryDrawer->categoryHeight(index, \
                listView->viewOptions()), 0, 0);
-        }
-    }
-    else
-    {
-        retRect = QRect(listView->spacing(), listView->spacing() * 2 +
-                        categoryDrawer->categoryHeight(index, \
                listView->viewOptions()), 0, 0);
-    }
-
-    int viewportWidth = listView->viewport()->width() - listView->spacing();
-    int itemHeight;
-    int itemWidth;
-
-    if (listView->gridSize().isEmpty() && leftToRightFlow)
-    {
-        itemHeight = biggestItemSize.height();
-        itemWidth  = biggestItemSize.width();
-    }
-    else if (leftToRightFlow)
-    {
-        itemHeight = listView->gridSize().height();
-        itemWidth  = listView->gridSize().width();
-    }
-    else if (listView->gridSize().isEmpty() && !leftToRightFlow)
-    {
-        itemHeight = biggestItemSize.height();
-        itemWidth  = listView->viewport()->width() - listView->spacing() * 2;
-    }
-    else
-    {
-        itemHeight = listView->gridSize().height();
-        itemWidth  = listView->gridSize().width() - listView->spacing() * 2;
-    }
-
-    int itemWidthPlusSeparation = listView->spacing() + itemWidth;
-
-    if (!itemWidthPlusSeparation)
-    {
-        ++itemWidthPlusSeparation;
-    }
-
-    int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
-
-    if (!elementsPerRow)
-    {
-        ++elementsPerRow;
-    }
-
-    int column;
-    int row;
-
-    if (leftToRightFlow)
-    {
-        column = elementsInfo[index.row()].relativeOffsetToCategory % \
                elementsPerRow;
-        row    = elementsInfo[index.row()].relativeOffsetToCategory / \
                elementsPerRow;
-
-        if (listView->layoutDirection() == Qt::LeftToRight)
-        {
-            retRect.setLeft(retRect.left() + column * listView->spacing() +
-                            column * itemWidth);
-        }
-        else
-        {
-            retRect.setLeft(retRect.right() - column * listView->spacing() -
-                            column * itemWidth - itemWidth);
-
-            retRect.setRight(retRect.right() - column * listView->spacing() -
-                             column * itemWidth);
-        }
-    }
-    else
-    {
-        elementsPerRow = 1;
-        column         = elementsInfo[index.row()].relativeOffsetToCategory % \
                elementsPerRow;
-        row            = elementsInfo[index.row()].relativeOffsetToCategory / \
                elementsPerRow;
-    }
-
-    foreach(const QString& category, categories)
-    {
-        if (category == curCategory)
-        {
-            break;
-        }
-
-        float rows  = (float) ((float) categoriesIndexes[category].count() /
-                               (float) elementsPerRow);
-
-        int rowsInt = categoriesIndexes[category].count() / elementsPerRow;
-
-        if (rows - trunc(rows))
-        {
-            ++rowsInt;
-        }
-
-        retRect.setTop(retRect.top() +
-                       (rowsInt * itemHeight) +
-                       categoryDrawer->categoryHeight(index, \
                listView->viewOptions()) +
-                       listView->spacing() * 2);
-
-        if (listView->gridSize().isEmpty())
-        {
-            retRect.setTop(retRect.top() +
-                           (rowsInt * listView->spacing()));
-        }
-    }
-
-    if (listView->gridSize().isEmpty())
-    {
-        retRect.setTop(retRect.top() + row * listView->spacing() +
-                       (row * itemHeight));
-    }
-    else
-    {
-        retRect.setTop(retRect.top() + (row * itemHeight));
-    }
-
-    retRect.setWidth(itemWidth);
-
-    QModelIndex heightIndex = proxyModel->index(index.row(), 0);
-
-    if (listView->gridSize().isEmpty())
-    {
-        retRect.setHeight(listView->sizeHintForIndex(heightIndex).height());
-    }
-    else
-    {
-        const QSize sizeHint = listView->sizeHintForIndex(heightIndex);
-
-        if (sizeHint.width() < itemWidth && leftToRightFlow)
-        {
-            retRect.setWidth(sizeHint.width());
-            retRect.moveLeft(retRect.left() + (itemWidth - sizeHint.width()) / 2);
-        }
-
-        retRect.setHeight(qMin(sizeHint.height(), listView->gridSize().height()));
-    }
-
-    return retRect;
-}
-
-QRect ImportKCategorizedView::Private::visualCategoryRectInViewport(const QString& \
                category) const
-{
-    QRect retRect(listView->spacing(),
-                  listView->spacing(),
-                  listView->viewport()->width() - listView->spacing() * 2,
-                  0);
-
-    if (!proxyModel || !categoryDrawer || !proxyModel->isCategorizedModel() ||
-        !proxyModel->rowCount() || !categories.contains(category))
-    {
-        return QRect();
-    }
-
-    QModelIndex index         = proxyModel->index(0, 0, QModelIndex());
-    int         viewportWidth = listView->viewport()->width() - listView->spacing();
-    int         itemHeight;
-    int         itemWidth;
-
-    if (listView->gridSize().isEmpty())
-    {
-        itemHeight = biggestItemSize.height();
-        itemWidth  = biggestItemSize.width();
-    }
-    else
-    {
-        itemHeight = listView->gridSize().height();
-        itemWidth  = listView->gridSize().width();
-    }
-
-    int itemWidthPlusSeparation = listView->spacing() + itemWidth;
-    int elementsPerRow          = viewportWidth / itemWidthPlusSeparation;
-
-    if (!elementsPerRow)
-    {
-        ++elementsPerRow;
-    }
-
-    if (listView->flow() == QListView::TopToBottom)
-    {
-        elementsPerRow = 1;
-    }
-
-    foreach(const QString& itCategory, categories)
-    {
-        if (itCategory == category)
-        {
-            break;
-        }
-
-        float rows  = (float) ((float) categoriesIndexes[itCategory].count() /
-                               (float) elementsPerRow);
-        int rowsInt = categoriesIndexes[itCategory].count() / elementsPerRow;
-
-        if (rows - trunc(rows))
-        {
-            ++rowsInt;
-        }
-
-        retRect.setTop(retRect.top() +
-                       (rowsInt * itemHeight) +
-                       categoryDrawer->categoryHeight(index, \
                listView->viewOptions()) +
-                       listView->spacing() * 2);
-
-        if (listView->gridSize().isEmpty())
-        {
-            retRect.setTop(retRect.top() +
-                           (rowsInt * listView->spacing()));
-        }
-    }
-
-    retRect.setHeight(categoryDrawer->categoryHeight(index, \
                listView->viewOptions()));
-
-    return retRect;
-}
-
-// We're sure elementsPosition doesn't contain index
-const QRect& ImportKCategorizedView::Private::cacheIndex(const QModelIndex& index)
-{
-    QRect rect                     = visualRectInViewport(index);
-    QHash<int, QRect>::iterator it = elementsPosition.insert(index.row(), rect);
-
-    return *it;
-}
-
-// We're sure categoriesPosition doesn't contain category
-const QRect& ImportKCategorizedView::Private::cacheCategory(const QString& category)
-{
-    QRect rect                         = visualCategoryRectInViewport(category);
-    QHash<QString, QRect>::iterator it = categoriesPosition.insert(category, rect);
-
-    return *it;
-}
-
-const QRect& ImportKCategorizedView::Private::cachedRectIndex(const QModelIndex& \
                index)
-{
-    QHash<int, QRect>::const_iterator it = elementsPosition.constFind(index.row());
-
-    if (it != elementsPosition.constEnd()) // If we have it cached
-    {
-        // return it
-        return *it;
-    }
-    else                                     // Otherwise, cache it
-    {
-        // and return it
-        return cacheIndex(index);
-    }
-}
-
-const QRect& ImportKCategorizedView::Private::cachedRectCategory(const QString& \
                category)
-{
-    QHash<QString, QRect>::const_iterator it = \
                categoriesPosition.constFind(category);
-
-    if (it != categoriesPosition.constEnd()) // If we have it cached
-    {
-        // return it
-        return *it;
-    }
-    else                                            // Otherwise, cache it and
-    {
-        // return it
-        return cacheCategory(category);
-    }
-}
-
-QRect ImportKCategorizedView::Private::visualRect(const QModelIndex& index)
-{
-    QRect retRect = cachedRectIndex(index);
-    int dx        = -listView->horizontalOffset();
-    int dy        = -listView->verticalOffset();
-    retRect.adjust(dx, dy, dx, dy);
-
-    return retRect;
-}
-
-QRect ImportKCategorizedView::Private::categoryVisualRect(const QString& category)
-{
-    QRect retRect = cachedRectCategory(category);
-    int dx        = -listView->horizontalOffset();
-    int dy        = -listView->verticalOffset();
-    retRect.adjust(dx, dy, dx, dy);
-
-    return retRect;
-}
-
-QSize ImportKCategorizedView::Private::contentsSize()
-{
-    // find the last index in the last category
-    QModelIndex lastIndex = categoriesIndexes.isEmpty() ? QModelIndex() :
-                            \
                proxyModel->index(categoriesIndexes[categories.last()].last(), 0);
-
-    int lastItemBottom    = cachedRectIndex(lastIndex).top() +
-                            listView->spacing() +
-                            (listView->gridSize().isEmpty() ? \
                biggestItemSize.height()
-                                                            : \
                listView->gridSize().height()) - listView->viewport()->height();
-
-    return QSize(listView->viewport()->width(), lastItemBottom);
-}
-
-void ImportKCategorizedView::Private::drawNewCategory(const QModelIndex& index, int \
                sortRole,
-                                                                         const \
                QStyleOption& option, QPainter* const painter)
-{
-    if (!index.isValid())
-    {
-        return;
-    }
-
-    QStyleOption optionCopy = option;
-    const QString category  = proxyModel->data(index, \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
-    optionCopy.state        &= ~QStyle::State_Selected;
-
-    if ((listView->selectionMode() != SingleSelection) && (listView->selectionMode() \
                != NoSelection))
-    {
-        if ((category == hoveredCategory) && !mouseButtonPressed)
-        {
-            optionCopy.state |= QStyle::State_MouseOver;
-        }
-        else if ((category == hoveredCategory) && mouseButtonPressed)
-        {
-            QPoint initialPressPosition = \
                listView->viewport()->mapFromGlobal(QCursor::pos());
-            initialPressPosition.setY(initialPressPosition.y() + \
                listView->verticalOffset());
-            initialPressPosition.setX(initialPressPosition.x() + \
                listView->horizontalOffset());
-
-            if (initialPressPosition == this->initialPressPosition)
-            {
-                optionCopy.state |= QStyle::State_Selected;
-            }
-        }
-    }
-
-    categoryDrawer->drawCategory(index, sortRole, optionCopy, painter);
-}
-
-void ImportKCategorizedView::Private::updateScrollbars()
-{
-    listView->horizontalScrollBar()->setRange(0, 0);
-
-    if (listView->verticalScrollMode() == QAbstractItemView::ScrollPerItem)
-    {
-        listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-    }
-
-    if (listView->horizontalScrollMode() == QAbstractItemView::ScrollPerItem)
-    {
-        listView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
-    }
-
-    listView->verticalScrollBar()->setSingleStep(listView->viewport()->height() / \
                10);
-    listView->verticalScrollBar()->setPageStep(listView->viewport()->height());
-    listView->verticalScrollBar()->setRange(0, contentsSize().height());
-}
-
-void ImportKCategorizedView::Private::drawDraggedItems(QPainter* const painter)
-{
-    QStyleOptionViewItemV4 option = listView->viewOptions();
-    option.state                  &= ~QStyle::State_MouseOver;
-
-    foreach(const QModelIndex& index, listView->selectionModel()->selectedIndexes())
-    {
-        const int dx = mousePosition.x() - initialPressPosition.x() + \
                listView->horizontalOffset();
-        const int dy = mousePosition.y() - initialPressPosition.y() + \
                listView->verticalOffset();
-        option.rect  = visualRect(index);
-        option.rect.adjust(dx, dy, dx, dy);
-
-        if (option.rect.intersects(listView->viewport()->rect()))
-        {
-            listView->itemDelegate(index)->paint(painter, option, index);
-        }
-    }
-}
-
-void ImportKCategorizedView::Private::drawDraggedItems()
-{
-    QRect rectToUpdate;
-    QRect currentRect;
-
-    foreach(const QModelIndex& index, listView->selectionModel()->selectedIndexes())
-    {
-        int dx      = mousePosition.x() - initialPressPosition.x() + \
                listView->horizontalOffset();
-        int dy      = mousePosition.y() - initialPressPosition.y() + \
                listView->verticalOffset();
-        currentRect = visualRect(index);
-        currentRect.adjust(dx, dy, dx, dy);
-
-        if (currentRect.intersects(listView->viewport()->rect()))
-        {
-            rectToUpdate = rectToUpdate.united(currentRect);
-        }
-    }
-
-    listView->viewport()->update(lastDraggedItemsRect.united(rectToUpdate));
-
-    lastDraggedItemsRect = rectToUpdate;
-}
-
-// ---- ImportKCategorizedView ------------------------------
-
-ImportKCategorizedView::ImportKCategorizedView(QWidget* const parent)
-    : QListView(parent), d(new Private(this))
-{
-}
-
-ImportKCategorizedView::~ImportKCategorizedView()
-{
-    delete d;
-}
-
-void ImportKCategorizedView::setGridSize(const QSize& size)
-{
-    QListView::setGridSize(size);
-
-    slotLayoutChanged();
-}
-
-void ImportKCategorizedView::setModel(QAbstractItemModel* model)
-{
-    d->lastSelection           = QItemSelection();
-    d->forcedSelectionPosition = 0;
-    d->hovered                 = QModelIndex();
-    d->mouseButtonPressed      = false;
-    d->rightMouseButtonPressed = false;
-    d->elementsInfo.clear();
-    d->elementsPosition.clear();
-    d->categoriesIndexes.clear();
-    d->categoriesPosition.clear();
-    d->categories.clear();
-    d->intersectedIndexes.clear();
-
-    if (d->proxyModel)
-    {
-        disconnect(d->proxyModel, SIGNAL(layoutChanged()), this, \
                SLOT(slotLayoutChanged()));
-
-        disconnect(d->proxyModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, \
                SLOT(rowsRemoved(QModelIndex,int,int)));
-    }
-
-    QListView::setModel(model);
-
-    d->proxyModel = dynamic_cast<KCategorizedSortFilterProxyModel*>(model);
-
-    if (d->proxyModel)
-    {
-        connect(d->proxyModel, SIGNAL(layoutChanged()), this, \
                SLOT(slotLayoutChanged()));
-
-        connect(d->proxyModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, \
                SLOT(rowsRemoved(QModelIndex,int,int)));
-
-        if (d->proxyModel->rowCount())
-        {
-            slotLayoutChanged();
-        }
-    }
-}
-
-QRect ImportKCategorizedView::visualRect(const QModelIndex& index) const
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return QListView::visualRect(index);
-    }
-
-    if (!qobject_cast<const QSortFilterProxyModel*>(index.model()))
-    {
-        return d->visualRect(d->proxyModel->mapFromSource(index));
-    }
-
-    return d->visualRect(index);
-}
-
-QRect ImportKCategorizedView::categoryVisualRect(const QModelIndex& index) const
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return QRect();
-    }
-
-    if (!index.isValid())
-    {
-        return QRect();
-    }
-
-    QString category = d->elementsInfo[index.row()].category;
-    return d->categoryVisualRect(category);
-}
-
-QModelIndex ImportKCategorizedView::categoryAt(const QPoint& point) const
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return QModelIndex();
-    }
-
-    // We traverse the categories and find the first where point.y() is below the \
                visualRect
-    int y     = 0;
-    int lastY = 0;
-    QString lastCategory;
-
-    foreach(const QString& category, d->categories)
-    {
-        y = d->categoryVisualRect(category).top();
-
-        if (point.y() >= lastY && point.y() < y)
-        {
-            break;
-        }
-
-        lastY = y;
-        y     = 0;
-        lastCategory = category;
-    }
-
-    // if lastCategory is the last one in the list y will be 0
-    if (!lastCategory.isNull() && point.y() >= lastY && (point.y() < y || !y))
-    {
-        return d->proxyModel->index(d->categoriesIndexes[lastCategory][0], \
                d->proxyModel->sortColumn());
-    }
-
-    return QModelIndex();
-}
-
-QItemSelectionRange ImportKCategorizedView::categoryRange(const QModelIndex& index) \
                const
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return QItemSelectionRange();
-    }
-
-    if (!index.isValid())
-    {
-        return QItemSelectionRange();
-    }
-
-    QString category  = d->elementsInfo[index.row()].category;
-    QModelIndex first = d->proxyModel->index(d->categoriesIndexes[category].first(), \
                d->proxyModel->sortColumn());
-    QModelIndex last  = d->proxyModel->index(d->categoriesIndexes[category].last(), \
                d->proxyModel->sortColumn());
-    return QItemSelectionRange(first, last);
-}
-
-KCategoryDrawer* ImportKCategorizedView::categoryDrawer() const
-{
-    return d->categoryDrawer;
-}
-
-void ImportKCategorizedView::setCategoryDrawer(KCategoryDrawer* categoryDrawer)
-{
-    d->lastSelection           = QItemSelection();
-    d->forcedSelectionPosition = 0;
-    d->hovered                 = QModelIndex();
-    d->mouseButtonPressed      = false;
-    d->rightMouseButtonPressed = false;
-    d->elementsInfo.clear();
-    d->elementsPosition.clear();
-    d->categoriesIndexes.clear();
-    d->categoriesPosition.clear();
-    d->categories.clear();
-    d->intersectedIndexes.clear();
-    d->categoryDrawer = categoryDrawer;
-
-    if (categoryDrawer)
-    {
-        if (d->proxyModel)
-        {
-            if (d->proxyModel->rowCount())
-            {
-                slotLayoutChanged();
-            }
-        }
-    }
-    else
-    {
-        updateGeometries();
-    }
-}
-
-void ImportKCategorizedView::setDrawDraggedItems(bool drawDraggedItems)
-{
-    d->drawItemsWhileDragging = drawDraggedItems;
-}
-
-QModelIndex ImportKCategorizedView::indexAt(const QPoint& point) const
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return QListView::indexAt(point);
-    }
-
-    QModelIndex index;
-
-    const QModelIndexList item = d->intersectionSet(QRect(point, point));
-
-    if (item.count() == 1)
-    {
-        index = item[0];
-    }
-
-    return index;
-}
-
-QModelIndexList ImportKCategorizedView::categorizedIndexesIn(const QRect& rect) \
                const
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return QModelIndexList();
-    }
-
-    return d->intersectionSet(rect);
-}
-
-void ImportKCategorizedView::reset()
-{
-    QListView::reset();
-
-    d->lastSelection           = QItemSelection();
-    d->forcedSelectionPosition = 0;
-    d->hovered                 = QModelIndex();
-    d->biggestItemSize         = QSize(0, 0);
-    d->mouseButtonPressed      = false;
-    d->rightMouseButtonPressed = false;
-    d->elementsInfo.clear();
-    d->elementsPosition.clear();
-    d->categoriesIndexes.clear();
-    d->categoriesPosition.clear();
-    d->categories.clear();
-    d->intersectedIndexes.clear();
-}
-
-void ImportKCategorizedView::paintEvent(QPaintEvent* event)
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        QListView::paintEvent(event);
-        return;
-    }
-
-    bool alternatingRows          = alternatingRowColors();
-    QStyleOptionViewItemV4 option = viewOptions();
-    option.widget                 = this;
-
-    if (wordWrap())
-    {
-        option.features |= QStyleOptionViewItemV4::WrapText;
-    }
-
-    QPainter painter(viewport());
-    QRect area                = event->rect();
-    const bool focus          = (hasFocus() || viewport()->hasFocus()) && \
                currentIndex().isValid();
-    const QStyle::State state = option.state;
-    const bool enabled        = (state & QStyle::State_Enabled) != 0;
-
-    painter.save();
-
-    QModelIndexList dirtyIndexes = d->intersectionSet(area);
-    bool alternate               = false;
-
-    if (dirtyIndexes.count())
-    {
-        alternate = dirtyIndexes[0].row() % 2;
-    }
-
-    foreach(const QModelIndex& index, dirtyIndexes)
-    {
-        if (alternatingRows && alternate)
-        {
-            option.features |= QStyleOptionViewItemV4::Alternate;
-            alternate = false;
-        }
-        else if (alternatingRows)
-        {
-            option.features &= ~QStyleOptionViewItemV4::Alternate;
-            alternate = true;
-        }
-
-        option.state = state;
-        option.rect  = visualRect(index);
-
-        if (selectionModel() && selectionModel()->isSelected(index))
-        {
-            option.state |= QStyle::State_Selected;
-        }
-
-        if (enabled)
-        {
-            QPalette::ColorGroup cg;
-
-            if ((d->proxyModel->flags(index) & Qt::ItemIsEnabled) == 0)
-            {
-                option.state &= ~QStyle::State_Enabled;
-                cg           = QPalette::Disabled;
-            }
-            else
-            {
-                cg = QPalette::Normal;
-            }
-
-            option.palette.setCurrentColorGroup(cg);
-        }
-
-        if (focus && currentIndex() == index)
-        {
-            option.state |= QStyle::State_HasFocus;
-
-            if (this->state() == EditingState)
-            {
-                option.state |= QStyle::State_Editing;
-            }
-        }
-
-        if (index == d->hovered)
-        {
-            option.state |= QStyle::State_MouseOver;
-        }
-        else
-        {
-            option.state &= ~QStyle::State_MouseOver;
-        }
-
-        itemDelegate(index)->paint(&painter, option, index);
-    }
-
-    // Redraw categories
-    QStyleOptionViewItemV4 otherOption;
-    bool                   intersectedInThePast = false;
-
-    foreach(const QString& category, d->categories)
-    {
-        otherOption       = option;
-        otherOption.rect  = d->categoryVisualRect(category);
-        otherOption.state &= ~QStyle::State_MouseOver;
-
-        if (otherOption.rect.intersects(area))
-        {
-            intersectedInThePast    = true;
-            QModelIndex indexToDraw = \
                d->proxyModel->index(d->categoriesIndexes[category][0],
-                                                           \
                d->proxyModel->sortColumn());
-
-            d->drawNewCategory(indexToDraw, d->proxyModel->sortRole(), otherOption, \
                &painter);
-        }
-        else if (intersectedInThePast)
-        {
-            break; // the visible area has been finished, we don't need to keep \
                asking, the rest won't intersect
-            // this is doable because we know that categories are correctly ordered \
                on the list
-        }
-    }
-
-    if ((selectionMode() != SingleSelection) && (selectionMode() != NoSelection))
-    {
-        if (d->mouseButtonPressed && QListView::state() != DraggingState)
-        {
-            QPoint start, end, initialPressPosition;
-
-            initialPressPosition = d->initialPressPosition;
-
-            initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
-            initialPressPosition.setX(initialPressPosition.x() - \
                horizontalOffset());
-
-            if (d->initialPressPosition.x() > d->mousePosition.x() ||
-                d->initialPressPosition.y() > d->mousePosition.y())
-            {
-                start = d->mousePosition;
-                end   = initialPressPosition;
-            }
-            else
-            {
-                start = initialPressPosition;
-                end   = d->mousePosition;
-            }
-
-            QStyleOptionRubberBand yetAnotherOption;
-            yetAnotherOption.initFrom(this);
-            yetAnotherOption.shape  = QRubberBand::Rectangle;
-            yetAnotherOption.opaque = false;
-            yetAnotherOption.rect   = QRect(start, \
                end).intersected(viewport()->rect().adjusted(-16, -16, 16, 16));
-            painter.save();
-            style()->drawControl(QStyle::CE_RubberBand, &yetAnotherOption, \
                &painter);
-            painter.restore();
-        }
-    }
-
-    if (d->drawItemsWhileDragging && QListView::state() == DraggingState && \
                !d->dragLeftViewport)
-    {
-        painter.setOpacity(0.5);
-        d->drawDraggedItems(&painter);
-    }
-
-    painter.restore();
-}
-
-void ImportKCategorizedView::resizeEvent(QResizeEvent* event)
-{
-    QListView::resizeEvent(event);
-
-    // Clear the items positions cache
-    d->elementsPosition.clear();
-    d->categoriesPosition.clear();
-    d->forcedSelectionPosition = 0;
-
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return;
-    }
-
-    d->updateScrollbars();
-}
-
-QItemSelection ImportKCategorizedView::Private::selectionForRect(const QRect& rect)
-{
-    QItemSelection selection;
-    QModelIndex    tl, br;
-    QModelIndexList intersectedIndexes    = intersectionSet(rect);
-    QList<QModelIndex>::const_iterator it = intersectedIndexes.constBegin();
-
-    for (; it != intersectedIndexes.constEnd(); ++it)
-    {
-        if (!tl.isValid() && !br.isValid())
-        {
-            tl = br = *it;
-        }
-        else if ((*it).row() == (tl.row() - 1))
-        {
-            tl = *it; // expand current range
-        }
-        else if ((*it).row() == (br.row() + 1))
-        {
-            br = (*it); // expand current range
-        }
-        else
-        {
-            selection.select(tl, br); // select current range
-            tl = br = *it; // start new range
-        }
-    }
-
-    if (tl.isValid() && br.isValid())
-    {
-        selection.select(tl, br);
-    }
-    else if (tl.isValid())
-    {
-        selection.select(tl, tl);
-    }
-    else if (br.isValid())
-    {
-        selection.select(br, br);
-    }
-
-    return selection;
-}
-
-void ImportKCategorizedView::setSelection(const QRect& rect, \
                QItemSelectionModel::SelectionFlags command)
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        QListView::setSelection(rect, command);
-        return;
-    }
-
-    QItemSelection selection;
-//    QRect contentsRect = rect.translated(horizontalOffset(), verticalOffset());
-    QModelIndexList intersectedIndexes = d->intersectionSet(rect);
-
-    if (rect.width() == 1 && rect.height() == 1)
-    {
-        QModelIndex tl;
-
-        if (!intersectedIndexes.isEmpty())
-        {
-            tl = intersectedIndexes.last();    // special case for mouse press; only \
                select the top item
-        }
-
-        if (tl.isValid() && (tl.flags() & Qt::ItemIsEnabled))
-        {
-            selection.select(tl, tl);
-        }
-    }
-    else
-    {
-        if (state() == DragSelectingState)
-        {
-            // visual selection mode (rubberband selection)
-            selection = d->selectionForRect(rect);
-        }
-        else
-        {
-            // logical selection mode (key and mouse click selection)
-            QModelIndex tl, br;
-            // get the first item
-            const QRect topLeft(rect.left(), rect.top(), 1, 1);
-            intersectedIndexes = d->intersectionSet(topLeft);
-
-            if (!intersectedIndexes.isEmpty())
-            {
-                tl = intersectedIndexes.last();
-            }
-
-            // get the last item
-            const QRect bottomRight(rect.right(), rect.bottom(), 1, 1);
-            intersectedIndexes = d->intersectionSet(bottomRight);
-
-            if (!intersectedIndexes.isEmpty())
-            {
-                br = intersectedIndexes.last();
-            }
-
-            // get the ranges
-            if (tl.isValid() && br.isValid()     &&
-                (tl.flags() & Qt::ItemIsEnabled) &&
-                (br.flags() & Qt::ItemIsEnabled))
-            {
-                // first, middle, last in content coordinates
-                QRect middle;
-                QRect first    = d->cachedRectIndex(tl);
-                QRect last     = d->cachedRectIndex(br);
-                QSize fullSize = d->contentsSize();
-
-                if (flow() == LeftToRight)
-                {
-                    QRect& top    = first;
-                    QRect& bottom = last;
-
-                    // if bottom is above top, swap them
-                    if (top.center().y() > bottom.center().y())
-                    {
-                        QRect tmp = top;
-                        top       = bottom;
-                        bottom    = tmp;
-                    }
-
-                    // if the rect are on differnet lines, expand
-                    if (top.top() != bottom.top())
-                    {
-                        // top rectangle
-                        if (isRightToLeft())
-                        {
-                            top.setLeft(0);
-                        }
-                        else
-                        {
-                            top.setRight(fullSize.width());
-                        }
-
-                        // bottom rectangle
-                        if (isRightToLeft())
-                        {
-                            bottom.setRight(fullSize.width());
-                        }
-                        else
-                        {
-                            bottom.setLeft(0);
-                        }
-                    }
-                    else if (top.left() > bottom.right())
-                    {
-                        if (isRightToLeft())
-                        {
-                            bottom.setLeft(top.right());
-                        }
-                        else
-                        {
-                            bottom.setRight(top.left());
-                        }
-                    }
-                    else
-                    {
-                        if (isRightToLeft())
-                        {
-                            top.setLeft(bottom.right());
-                        }
-                        else
-                        {
-                            top.setRight(bottom.left());
-                        }
-                    }
-
-                    // middle rectangle
-                    if (top.bottom() < bottom.top())
-                    {
-                        middle.setTop(top.bottom() + 1);
-                        middle.setLeft(qMin(top.left(), bottom.left()));
-                        middle.setBottom(bottom.top() - 1);
-                        middle.setRight(qMax(top.right(), bottom.right()));
-                    }
-                }
-                else
-                {
-                    // TopToBottom
-                    QRect& left  = first;
-                    QRect& right = last;
-
-                    if (left.center().x() > right.center().x())
-                    {
-                        qSwap(left, right);
-                    }
-
-                    int ch = fullSize.height();
-
-                    if (left.left() != right.left())
-                    {
-                        // left rectangle
-                        if (isRightToLeft())
-                        {
-                            left.setTop(0);
-                        }
-                        else
-                        {
-                            left.setBottom(ch);
-                        }
-
-                        // top rectangle
-                        if (isRightToLeft())
-                        {
-                            right.setBottom(ch);
-                        }
-                        else
-                        {
-                            right.setTop(0);
-                        }
-
-                        // only set middle if the
-                        middle.setTop(0);
-                        middle.setBottom(ch);
-                        middle.setLeft(left.right() + 1);
-                        middle.setRight(right.left() - 1);
-                    }
-                    else if (left.bottom() < right.top())
-                    {
-                        left.setBottom(right.top() - 1);
-                    }
-                    else
-                    {
-                        right.setBottom(left.top() - 1);
-                    }
-                }
-
-                // get viewport coordinates
-                first  = first.translated( - horizontalOffset(), - \
                verticalOffset());
-                middle = middle.translated( - horizontalOffset(), - \
                verticalOffset());
-                last   = last.translated( - horizontalOffset(), - verticalOffset());
-
-                // do the selections
-                QItemSelection topSelection    = d->selectionForRect(first);
-                QItemSelection middleSelection = d->selectionForRect(middle);
-                QItemSelection bottomSelection = d->selectionForRect(last);
-                // merge
-                selection.merge(topSelection, QItemSelectionModel::Select);
-                selection.merge(middleSelection, QItemSelectionModel::Select);
-                selection.merge(bottomSelection, QItemSelectionModel::Select);
-            }
-        }
-    }
-
-    selectionModel()->select(selection, command);
-}
-
-void ImportKCategorizedView::mouseMoveEvent(QMouseEvent* event)
-{
-    QListView::mouseMoveEvent(event);
-
-    // was a dragging started?
-    if (state() == DraggingState)
-    {
-        d->mouseButtonPressed      = false;
-        d->rightMouseButtonPressed = false;
-
-        if (d->drawItemsWhileDragging)
-        {
-            viewport()->update(d->lastDraggedItemsRect);
-        }
-    }
-
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return;
-    }
-
-    const QModelIndexList item = d->intersectionSet(QRect(event->pos(), \
                event->pos()));
-
-    if (item.count() == 1)
-    {
-        d->hovered = item[0];
-    }
-    else
-    {
-        d->hovered = QModelIndex();
-    }
-
-    const QString previousHoveredCategory = d->hoveredCategory;
-
-    d->mousePosition = event->pos();
-
-    d->hoveredCategory.clear();
-
-    // Redraw categories
-    foreach(const QString& category, d->categories)
-    {
-        if (d->categoryVisualRect(category).intersects(QRect(event->pos(), \
                event->pos())))
-        {
-            d->hoveredCategory = category;
-            viewport()->update(d->categoryVisualRect(category));
-        }
-        else if ((category == previousHoveredCategory) &&
-                 (!d->categoryVisualRect(previousHoveredCategory).intersects(QRect(event->pos(), \
                event->pos()))))
-        {
-            viewport()->update(d->categoryVisualRect(category));
-        }
-    }
-
-    QRect rect;
-
-    if (d->mouseButtonPressed && QListView::state() != DraggingState)
-    {
-        QPoint start, end, initialPressPosition;
-
-        initialPressPosition = d->initialPressPosition;
-
-        initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
-        initialPressPosition.setX(initialPressPosition.x() - horizontalOffset());
-
-        if (d->initialPressPosition.x() > d->mousePosition.x() ||
-            d->initialPressPosition.y() > d->mousePosition.y())
-        {
-            start = d->mousePosition;
-            end   = initialPressPosition;
-        }
-        else
-        {
-            start = initialPressPosition;
-            end   = d->mousePosition;
-        }
-
-        rect = QRect(start, end).adjusted(-16, -16, 16, 16);
-        rect = rect.united(QRect(start, end).adjusted(16, 16, -16, \
                -16)).intersected(viewport()->rect());
-
-        viewport()->update(rect);
-    }
-}
-
-void ImportKCategorizedView::mousePressEvent(QMouseEvent* event)
-{
-    d->dragLeftViewport = false;
-
-    QListView::mousePressEvent(event);
-
-    if (event->button() == Qt::LeftButton)
-    {
-        d->mouseButtonPressed = true;
-
-        d->initialPressPosition = event->pos();
-        d->initialPressPosition.setY(d->initialPressPosition.y() + \
                verticalOffset());
-        d->initialPressPosition.setX(d->initialPressPosition.x() + \
                horizontalOffset());
-    }
-    else if (event->button() == Qt::RightButton)
-    {
-        d->rightMouseButtonPressed = true;
-    }
-
-    if (selectionModel())
-    {
-        d->lastSelection = selectionModel()->selection();
-    }
-
-    viewport()->update(d->categoryVisualRect(d->hoveredCategory));
-}
-
-void ImportKCategorizedView::mouseReleaseEvent(QMouseEvent* event)
-{
-    d->mouseButtonPressed      = false;
-    d->rightMouseButtonPressed = false;
-
-    QListView::mouseReleaseEvent(event);
-
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return;
-    }
-
-    QPoint initialPressPosition = viewport()->mapFromGlobal(QCursor::pos());
-    initialPressPosition.setY(initialPressPosition.y() + verticalOffset());
-    initialPressPosition.setX(initialPressPosition.x() + horizontalOffset());
-
-    if ((selectionMode() != SingleSelection) && (selectionMode() != NoSelection) &&
-        (initialPressPosition == d->initialPressPosition))
-    {
-        foreach(const QString& category, d->categories)
-        {
-            if (d->categoryVisualRect(category).contains(event->pos()) &&
-                selectionModel())
-            {
-                QItemSelection selection      = selectionModel()->selection();
-                const QVector<int> &indexList = d->categoriesIndexes[category];
-
-                foreach(int row, indexList)
-                {
-                    QModelIndex selectIndex = d->proxyModel->index(row, 0);
-
-                    selection << QItemSelectionRange(selectIndex);
-                }
-
-                selectionModel()->select(selection, \
                QItemSelectionModel::SelectCurrent);
-
-                break;
-            }
-        }
-    }
-
-    QRect rect;
-
-    if (state() != DraggingState)
-    {
-        QPoint start, end, initialPressPosition;
-
-        initialPressPosition = d->initialPressPosition;
-
-        initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
-        initialPressPosition.setX(initialPressPosition.x() - horizontalOffset());
-
-        if (d->initialPressPosition.x() > d->mousePosition.x() ||
-            d->initialPressPosition.y() > d->mousePosition.y())
-        {
-            start = d->mousePosition;
-            end   = initialPressPosition;
-        }
-        else
-        {
-            start = initialPressPosition;
-            end   = d->mousePosition;
-        }
-
-        rect = QRect(start, end).adjusted(-16, -16, 16, 16);
-        rect = rect.united(QRect(start, end).adjusted(16, 16, -16, \
                -16)).intersected(viewport()->rect());
-
-        viewport()->update(rect);
-    }
-
-    if (d->hovered.isValid())
-    {
-        viewport()->update(visualRect(d->hovered));
-    }
-    else if (!d->hoveredCategory.isEmpty())
-    {
-        viewport()->update(d->categoryVisualRect(d->hoveredCategory));
-    }
-}
-
-void ImportKCategorizedView::leaveEvent(QEvent* event)
-{
-    d->hovered = QModelIndex();
-    d->hoveredCategory.clear();
-
-    QListView::leaveEvent(event);
-}
-
-void ImportKCategorizedView::startDrag(Qt::DropActions supportedActions)
-{
-    // FIXME: QAbstractItemView does far better here since it sets the
-    //        pixmap of selected icons to the dragging cursor, but it sets a non
-    //        ARGB window so it is no transparent. Use QAbstractItemView when
-    //        this is fixed on Qt.
-    // QAbstractItemView::startDrag(supportedActions);
-    QListView::startDrag(supportedActions);
-}
-
-void ImportKCategorizedView::dragMoveEvent(QDragMoveEvent* event)
-{
-    d->mousePosition = event->pos();
-
-    d->dragLeftViewport = false;
-
-    QListView::dragMoveEvent(event);
-
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        return;
-    }
-
-    d->hovered = indexAt(event->pos());
-
-    d->drawDraggedItems();
-}
-
-void ImportKCategorizedView::dragLeaveEvent(QDragLeaveEvent* event)
-{
-    d->dragLeftViewport = true;
-
-    QListView::dragLeaveEvent(event);
-}
-
-void ImportKCategorizedView::dropEvent(QDropEvent* event)
-{
-    QListView::dropEvent(event);
-}
-
-QModelIndex ImportKCategorizedView::moveCursor(CursorAction cursorAction,
-        Qt::KeyboardModifiers modifiers)
-{
-    if ((viewMode() != ImportKCategorizedView::IconMode) ||
-        !d->proxyModel ||
-        !d->categoryDrawer ||
-        d->categories.isEmpty() ||
-        !d->proxyModel->isCategorizedModel())
-    {
-        return QListView::moveCursor(cursorAction, modifiers);
-    }
-
-    int viewportWidth = viewport()->width() - spacing();
-    int itemWidth;
-
-    if (gridSize().isEmpty())
-    {
-        itemWidth = d->biggestItemSize.width();
-    }
-    else
-    {
-        itemWidth = gridSize().width();
-    }
-
-    int itemWidthPlusSeparation = spacing() + itemWidth;
-
-    if (!itemWidthPlusSeparation)
-    {
-        ++itemWidthPlusSeparation;
-    }
-
-    int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
-
-    if (!elementsPerRow)
-    {
-        ++elementsPerRow;
-    }
-
-    QModelIndex current = selectionModel() ? selectionModel()->currentIndex()
-                                           : QModelIndex();
-
-    if (!current.isValid())
-    {
-        if (cursorAction == MoveEnd)
-        {
-            current = model()->index(model()->rowCount() - 1, 0, QModelIndex());
-            //d->forcedSelectionPosition = \
                d->elementsInfo[current.row()].relativeOffsetToCategory % \
                elementsPerRow;
-        }
-        else
-        {
-            current                    = model()->index(0, 0, QModelIndex());
-            d->forcedSelectionPosition = 0;
-        }
-
-        return current;
-    }
-
-    QString lastCategory  = d->categories.first();
-    QString theCategory   = d->categories.first();
-    QString afterCategory = d->categories.first();
-    bool hasToBreak       = false;
-
-    foreach(const QString& category, d->categories)
-    {
-        if (hasToBreak)
-        {
-            afterCategory = category;
-
-            break;
-        }
-
-        if (category == d->elementsInfo[current.row()].category)
-        {
-            theCategory = category;
-            hasToBreak  = true;
-        }
-
-        if (!hasToBreak)
-        {
-            lastCategory = category;
-        }
-    }
-
-    switch (cursorAction)
-    {
-        case QAbstractItemView::MovePageUp:
-        {
-            // We need to reimplemt PageUp/Down as well because
-            // default QListView implementation will not work properly with our \
                custom layout
-            QModelIndexList visibleIndexes = d->intersectionSet(viewport()->rect());
-            if (!visibleIndexes.isEmpty())
-            {
-                int indexToMove = qMax(current.row() - visibleIndexes.size(), 0);
-                return d->proxyModel->index(indexToMove, 0);
-            }
-            break;
-        }
-            // fall through
-
-        case QAbstractItemView::MoveUp:
-        {
-            if (d->elementsInfo[current.row()].relativeOffsetToCategory >= \
                elementsPerRow)
-            {
-                int indexToMove = current.row();
-                indexToMove     -= \
                qMin(((d->elementsInfo[current.row()].relativeOffsetToCategory) +
-                                   d->forcedSelectionPosition), elementsPerRow - \
                d->forcedSelectionPosition +
-                                   \
                (d->elementsInfo[current.row()].relativeOffsetToCategory % \
                elementsPerRow));
-
-                return d->proxyModel->index(indexToMove, 0);
-            }
-            else
-            {
-                int lastCategoryLastRow = \
                (d->categoriesIndexes[lastCategory].count() - 1) % elementsPerRow;
-                int indexToMove         = current.row() - \
                d->elementsInfo[current.row()].relativeOffsetToCategory;
-
-                if (d->forcedSelectionPosition >= lastCategoryLastRow)
-                {
-                    indexToMove -= 1;
-                }
-                else
-                {
-                    indexToMove -= qMin((lastCategoryLastRow - \
                d->forcedSelectionPosition + 1),
-                                        d->forcedSelectionPosition + elementsPerRow \
                + 1);
-                }
-
-                return d->proxyModel->index(indexToMove, 0);
-            }
-        }
-
-        case QAbstractItemView::MovePageDown:
-        {
-            QModelIndexList visibleIndexes = d->intersectionSet(viewport()->rect());
-            if (!visibleIndexes.isEmpty())
-            {
-                int indexToMove = qMin(current.row() + visibleIndexes.size(), \
                d->elementsInfo.size() - 1);
-                return d->proxyModel->index(indexToMove, 0);
-            }
-        }
-        // fall through
-        case QAbstractItemView::MoveDown:
-        {
-            if (d->elementsInfo[current.row()].relativeOffsetToCategory < \
(d->categoriesIndexes[theCategory].count() - 1 - \
                ((d->categoriesIndexes[theCategory].count() - 1) % elementsPerRow)))
-            {
-                int indexToMove = current.row();
-                indexToMove     += qMin(elementsPerRow, \
                d->categoriesIndexes[theCategory].count() - 1 -
-                                        \
                d->elementsInfo[current.row()].relativeOffsetToCategory);
-
-                return d->proxyModel->index(indexToMove, 0);
-            }
-            else
-            {
-                int afterCategoryLastRow = qMin(elementsPerRow, \
                d->categoriesIndexes[afterCategory].count());
-                int indexToMove          = current.row() + \
                (d->categoriesIndexes[theCategory].count() -
-                                                            \
                d->elementsInfo[current.row()].relativeOffsetToCategory);
-
-                if (d->forcedSelectionPosition >= afterCategoryLastRow)
-                {
-                    indexToMove += afterCategoryLastRow - 1;
-                }
-                else
-                {
-                    indexToMove += qMin(d->forcedSelectionPosition, elementsPerRow);
-                }
-
-                return d->proxyModel->index(indexToMove, 0);
-            }
-        }
-
-        case QAbstractItemView::MoveLeft:
-
-            if (layoutDirection() == Qt::RightToLeft)
-            {
-                if (current.row() + 1 == d->elementsInfo.size() ||
-                    !(d->elementsInfo[current.row() + 1].relativeOffsetToCategory % \
                elementsPerRow))
-                {
-                    return current;
-                }
-
-                return d->proxyModel->index(current.row() + 1, 0);
-            }
-
-            if (current.row() == 0 ||
-                !(d->elementsInfo[current.row()].relativeOffsetToCategory % \
                elementsPerRow))
-            {
-                return current;
-            }
-
-            return d->proxyModel->index(current.row() - 1, 0);
-
-        case QAbstractItemView::MoveRight:
-
-            if (layoutDirection() == Qt::RightToLeft)
-            {
-                if (current.row() == 0 ||
-                    !(d->elementsInfo[current.row()].relativeOffsetToCategory % \
                elementsPerRow))
-                {
-                    return current;
-                }
-
-                return d->proxyModel->index(current.row() - 1, 0);
-            }
-
-            if (current.row() + 1 == d->elementsInfo.size() ||
-                !(d->elementsInfo[current.row() + 1].relativeOffsetToCategory % \
                elementsPerRow))
-            {
-                return current;
-            }
-
-            return d->proxyModel->index(current.row() + 1, 0);
-
-        default:
-            break;
-    }
-
-    return QListView::moveCursor(cursorAction, modifiers);
-}
-
-void ImportKCategorizedView::rowsInserted(const QModelIndex& parent, int start, int \
                end)
-{
-    QListView::rowsInserted(parent, start, end);
-
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        d->forcedSelectionPosition = 0;
-        d->hovered                 = QModelIndex();
-        d->biggestItemSize         = QSize(0, 0);
-        d->mouseButtonPressed      = false;
-        d->rightMouseButtonPressed = false;
-        d->elementsInfo.clear();
-        d->elementsPosition.clear();
-        d->categoriesIndexes.clear();
-        d->categoriesPosition.clear();
-        d->categories.clear();
-        d->intersectedIndexes.clear();
-
-        return;
-    }
-
-    rowsInsertedArtifficial(parent, start, end);
-}
-
-int ImportKCategorizedView::Private::categoryUpperBound(SparseModelIndexVector& \
                modelIndexList,
-                                                                           int \
                begin, int averageSize)
-{
-    int end            = modelIndexList.size();
-    QString category   = proxyModel->data(modelIndexList[begin],
-                                          \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
-
-    // First case: Small category with <10 entries
-    const int smallEnd = qMin(end, begin + 10);
-
-    for (int k=begin; k < smallEnd; ++k)
-    {
-        if (category != proxyModel->data(modelIndexList[k],
-                                         \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString())
-        {
-            return k;
-        }
-    }
-
-    begin += 10;
-
-    // Second case: only one category, test last value
-    QString value = proxyModel->data(modelIndexList[end - 1],
-                                     \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
-
-    if (value == category)
-    {
-        return end;
-    }
-
-    // Third case: use average of last category sizes
-    if (averageSize && begin + averageSize < end)
-    {
-        if (category != proxyModel->data(modelIndexList[begin + averageSize],
-                                         \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString())
-        {
-            end = begin + averageSize;
-        }
-        else if (begin + 2*averageSize < end)
-        {
-            if (category != proxyModel->data(modelIndexList[begin + 2*averageSize],
-                                             \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString())
-            {
-                end = begin + 2 * averageSize;
-            }
-        }
-    }
-
-    // now apply a binary search - the model is sorted by category
-    // from qUpperBound, Copyright (C) 2008 Nokia Corporation and/or its \
                subsidiary(-ies)
-    int middle;
-    int n = end - begin;
-    int half;
-
-    while (n > 0)
-    {
-        half   = n >> 1;
-        middle = begin + half;
-
-        if (category != proxyModel->data(modelIndexList[middle],
-                                         \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString())
-        {
-            n = half;
-        }
-        else
-        {
-            begin = middle + 1;
-            n     -= half + 1;
-        }
-    }
-
-    return begin;
-}
-
-void ImportKCategorizedView::rowsInsertedArtifficial(const QModelIndex& parent, int \
                start, int end)
-{
-    Q_UNUSED(parent);
-
-    d->forcedSelectionPosition = 0;
-    d->hovered                 = QModelIndex();
-    d->biggestItemSize         = QSize(0, 0);
-    d->mouseButtonPressed      = false;
-    d->rightMouseButtonPressed = false;
-    d->elementsInfo.clear();
-    d->elementsPosition.clear();
-    d->categoriesIndexes.clear();
-    d->categoriesPosition.clear();
-    d->categories.clear();
-    d->intersectedIndexes.clear();
-
-    if (start > end || end < 0 || start < 0 || !d->proxyModel->rowCount())
-    {
-        return;
-    }
-
-    // Add all elements mapped to the source model and explore categories
-    const int rowCount   = d->proxyModel->rowCount();
-    const int sortColumn = d->proxyModel->sortColumn();
-    QString lastCategory = d->proxyModel->data(d->proxyModel->index(0, sortColumn),
-                                               \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
-    int offset           = -1;
-
-    SparseModelIndexVector modelIndexList(rowCount, d->proxyModel, sortColumn);
-
-    d->elementsInfo      = QVector<struct Private::ElementInfo>(rowCount);
-    int categorySizes    = 0;
-    int categoryCounts   = 0;
-
-    if (uniformItemSizes())
-    {
-        // use last index as sample for size hint
-        QModelIndex sample = d->proxyModel->index(rowCount - 1, modelColumn(), \
                rootIndex());
-        d->biggestItemSize = sizeHintForIndex(sample);
-    }
-    else
-    {
-        QStyleOptionViewItem option = viewOptions();
-
-        for (int k = 0; k < rowCount; ++k)
-        {
-            QModelIndex indexSize = (sortColumn == 0) ? modelIndexList[k] : \
                d->proxyModel->index(k, 0);
-            QSize hint            = itemDelegate(indexSize)->sizeHint(option, \
                indexSize);
-            d->biggestItemSize    = QSize(qMax(hint.width(), \
                d->biggestItemSize.width()),
-                                          qMax(hint.height(), \
                d->biggestItemSize.height()));
-        }
-    }
-
-    for (int k = 0; k < rowCount; )
-    {
-        lastCategory   = d->proxyModel->data(modelIndexList[k], \
                KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
-        int upperBound = d->categoryUpperBound(modelIndexList, k, categorySizes / \
                ++categoryCounts);
-        categorySizes  += upperBound - k;
-        offset         = 0;
-
-        QVector<int> rows(upperBound - k);
-
-        for (int i=k; i<upperBound; ++i, ++offset)
-        {
-            rows[offset]                             = i;
-            struct Private::ElementInfo& elementInfo = d->elementsInfo[i];
-            elementInfo.category                     = lastCategory;
-            elementInfo.relativeOffsetToCategory     = offset;
-        }
-
-        k = upperBound;
-
-        d->categoriesIndexes.insert(lastCategory, rows);
-        d->categories << lastCategory;
-    }
-
-    d->updateScrollbars();
-}
-
-void ImportKCategorizedView::rowsRemoved(const QModelIndex& parent, int start, int \
                end)
-{
-    Q_UNUSED(parent);
-    Q_UNUSED(start);
-    Q_UNUSED(end);
-
-    if (d->proxyModel && d->categoryDrawer && d->proxyModel->isCategorizedModel())
-    {
-        // Force the view to update all elements
-        rowsInsertedArtifficial(QModelIndex(), 0, d->proxyModel->rowCount() - 1);
-    }
-}
-
-void ImportKCategorizedView::updateGeometries()
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        QListView::updateGeometries();
-        return;
-    }
-
-    // Avoid QListView::updateGeometries(), since it will try to set another
-    // range to our scroll bars, what we don't want.
-    QAbstractItemView::updateGeometries();
-}
-
-void ImportKCategorizedView::slotLayoutChanged()
-{
-    if (d->proxyModel && d->categoryDrawer && d->proxyModel->isCategorizedModel())
-    {
-        // all cached values are invalidated, recompute immediately
-        rowsInsertedArtifficial(QModelIndex(), 0, d->proxyModel->rowCount() - 1);
-    }
-}
-
-void ImportKCategorizedView::currentChanged(const QModelIndex& current, const \
                QModelIndex& previous)
-{
-    if (!d->proxyModel || !d->categoryDrawer || \
                !d->proxyModel->isCategorizedModel())
-    {
-        QListView::currentChanged(current, previous);
-        return;
-    }
-
-    // We need to update the forcedSelectionPosition property in order to correctly
-    // navigate after with keyboard using up & down keys
-
-    int viewportWidth = viewport()->width() - spacing();
-
-    //int itemHeight;
-    int itemWidth;
-
-    if (gridSize().isEmpty())
-    {
-        //itemHeight = d->biggestItemSize.height();
-        itemWidth = d->biggestItemSize.width();
-    }
-    else
-    {
-        //itemHeight = gridSize().height();
-        itemWidth = gridSize().width();
-    }
-
-    int itemWidthPlusSeparation = spacing() + itemWidth;
-
-    if (!itemWidthPlusSeparation)
-    {
-        ++itemWidthPlusSeparation;
-    }
-
-    int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
-
-    if (!elementsPerRow)
-    {
-        ++elementsPerRow;
-    }
-
-    if (current.isValid())
-    {
-        d->forcedSelectionPosition = \
                d->elementsInfo[current.row()].relativeOffsetToCategory % \
                elementsPerRow;
-    }
-
-    QListView::currentChanged(current, previous);
-}
-
-} // namespace Digikam
diff --git a/utilities/cameragui/views/importkcategorizedview.h \
b/utilities/cameragui/views/importkcategorizedview.h deleted file mode 100644
index 54a2aea..0000000
--- a/utilities/cameragui/views/importkcategorizedview.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* ============================================================
- *
- * This file is a part of digiKam project
- * http://www.digikam.org
- *
- * Date        : 2012-07-05
- * Description : Base item view to list import interface items.
- *
- * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation;
- * either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * ============================================================ */
-
-#ifndef ImportKCategorizedView_H
-#define ImportKCategorizedView_H
-
-// Qt includes
-
-#include <QtGui/QListView>
-
-class KCategoryDrawer;
-
-namespace Digikam
-{
-
-class ImportKCategorizedView : public QListView
-{
-    Q_OBJECT
-
-public:
-
-    ImportKCategorizedView(QWidget* const parent = 0);
-    ~ImportKCategorizedView();
-
-    void setGridSize(const QSize& size);
-
-    void setCategoryDrawer(KCategoryDrawer* categoryDrawer);
-    KCategoryDrawer* categoryDrawer() const;
-
-    /**
-     * Switch on drawing of dragged items. Default: on.
-     * While dragging over the view, dragged items will be drawn transparently
-     * following the mouse cursor.
-     */
-    void setDrawDraggedItems(bool drawDraggedItems);
-
-    virtual void setModel(QAbstractItemModel* model);
-    virtual QRect visualRect(const QModelIndex& index) const;
-    virtual QModelIndex indexAt(const QPoint& p) const;
-
-    /**
-     * This method will return all indexes whose visual rect intersects @p rect.
-     * @param rect rectangle to test intersection with
-     * @note Returns an empty list if the view is not categorized.
-     */
-    virtual QModelIndexList categorizedIndexesIn(const QRect& rect) const;
-
-    /**
-     * This method will return the visual rect of the header of the category
-     * in which @p index is sorted.
-     * @note Returns QRect() if the view is not categorized.
-     */
-    virtual QRect categoryVisualRect(const QModelIndex& index) const;
-
-    /**
-     * This method will return the first index of the category
-     * in the region of which @p point is found.
-     * @note Returns QModelIndex() if the view is not categorized.
-     */
-    virtual QModelIndex categoryAt(const QPoint& point) const;
-
-    /**
-     * This method returns the range of indexes contained
-     * in the category in which @p index is sorted.
-     * @note Returns an empty range if the view is no categorized.
-     */
-    virtual QItemSelectionRange categoryRange(const QModelIndex& index) const;
-
-public Q_SLOTS:
-
-    virtual void reset();
-
-protected Q_SLOTS:
-
-    virtual void rowsInserted(const QModelIndex& parent, int start, int end);
-    virtual void rowsInsertedArtifficial(const QModelIndex& parent, int start, int \
                end);
-    virtual void rowsRemoved(const QModelIndex& parent, int start, int end);
-    virtual void updateGeometries();
-    virtual void slotLayoutChanged();
-    virtual void currentChanged(const QModelIndex& current, const QModelIndex& \
                previous);
-
-protected:
-
-    virtual void paintEvent(QPaintEvent* event);
-    virtual void resizeEvent(QResizeEvent* event);
-    virtual void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags \
                flags);
-    virtual void mouseMoveEvent(QMouseEvent* event);
-    virtual void mousePressEvent(QMouseEvent* event);
-    virtual void mouseReleaseEvent(QMouseEvent* event);
-    virtual void leaveEvent(QEvent* event);
-    virtual void startDrag(Qt::DropActions supportedActions);
-    virtual void dragMoveEvent(QDragMoveEvent* event);
-    virtual void dragLeaveEvent(QDragLeaveEvent* event);
-    virtual void dropEvent(QDropEvent* event);
-    virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers \
                modifiers);
-
-private:
-
-    class Private;
-    Private* const d;
-};
-
-} //namespace Digikam
-
-#endif // ImportKCategorizedView_H
diff --git a/utilities/cameragui/views/importkcategorizedview_p.h \
b/utilities/cameragui/views/importkcategorizedview_p.h deleted file mode 100644
index b3c468e..0000000
--- a/utilities/cameragui/views/importkcategorizedview_p.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* ============================================================
- *
- * This file is a part of digiKam project
- * http://www.digikam.org
- *
- * Date        : 2012-07-08
- * Description : Item view to list import interface items.
- *
- * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software Foundation;
- * either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * ============================================================ */
-
-#ifndef ImportKCategorizedView_P_H
-#define ImportKCategorizedView_P_H
-
-class KCategorizedSortFilterProxyModel;
-class KCategoryDrawer;
-
-namespace Digikam
-{
-
-class SparseModelIndexVector : public QVector<QModelIndex>
-{
-
-public:
-
-    SparseModelIndexVector(int rowCount, QAbstractItemModel* const model, int \
                column)
-        : QVector<QModelIndex>(rowCount), model(model), column(column)
-    {
-    }
-
-    inline QModelIndex& operator[](int i)
-    {
-        QModelIndex& index = QVector<QModelIndex>::operator[](i);
-
-        if (!index.isValid())
-        {
-            index = model->index(i, column);
-        }
-
-        return index;
-    }
-
-private:
-
-    // not to be used
-    const QModelIndex& operator[](int i) const
-    {
-        return QVector<QModelIndex>::operator[](i);
-    }
-
-private:
-
-    QAbstractItemModel* model;
-    int                 column;
-};
-
-// ------------------------------------------------------------------------------
-
-class ImportKCategorizedView::Private
-{
-public:
-
-    Private(ImportKCategorizedView* const listView);
-    ~Private();
-
-    /**
-      * Returns the list of items that intersects with @p rect
-      */
-    const QModelIndexList& intersectionSet(const QRect& rect);
-
-    /**
-      * Gets the item rect in the viewport for @p index
-      */
-    QRect visualRectInViewport(const QModelIndex& index) const;
-
-    /**
-      * Returns the category rect in the viewport for @p category
-      */
-    QRect visualCategoryRectInViewport(const QString& category) const;
-
-    /**
-      * Caches and returns the rect that corresponds to @p index
-      */
-    const QRect& cacheIndex(const QModelIndex& index);
-
-    /**
-      * Caches and returns the rect that corresponds to @p category
-      */
-    const QRect& cacheCategory(const QString& category);
-
-    /**
-      * Returns the rect that corresponds to @p index
-      * @note If the rect is not cached, it becomes cached
-      */
-    const QRect& cachedRectIndex(const QModelIndex& index);
-
-    /**
-      * Returns the rect that corresponds to @p category
-      * @note If the rect is not cached, it becomes cached
-      */
-    const QRect& cachedRectCategory(const QString& category);
-
-    /**
-      * Returns the visual rect (taking in count x and y offsets) for @p index
-      * @note If the rect is not cached, it becomes cached
-      */
-    QRect visualRect(const QModelIndex& index);
-
-    /**
-      * Returns the visual rect (taking in count x and y offsets) for @p category
-      * @note If the rect is not cached, it becomes cached
-      */
-    QRect categoryVisualRect(const QString& category);
-
-    /**
-      * Returns the contents size of this view (topmost category to bottommost index \
                + spacing)
-      */
-    QSize contentsSize();
-
-    /**
-      * This method will draw a new category represented by index
-      * @p index on the rect specified by @p option.rect, with
-      * painter @p painter
-      */
-    void drawNewCategory(const QModelIndex& index,
-                         int sortRole,
-                         const QStyleOption& option,
-                         QPainter* const painter);
-
-    /**
-      * This method will update scrollbars ranges. Called when our model changes
-      * or when the view is resized
-      */
-    void updateScrollbars();
-
-    /**
-      * This method will draw dragged items in the painting operation
-      */
-    void drawDraggedItems(QPainter* const painter);
-
-    /**
-      * This method will determine which rect needs to be updated because of a
-      * dragging operation
-      */
-    void drawDraggedItems();
-
-    /**
-      * This method will, starting from the index at begin in the given (sorted) \
                modelIndex List,
-      * find the last index having the same category as the index to begin with.
-      */
-    int categoryUpperBound(SparseModelIndexVector& modelIndexList, int begin, int \
                averageSize = 0);
-
-    /**
-      * Returns a QItemSelection for all items intersection rect.
-      */
-    QItemSelection selectionForRect(const QRect& rect);
-
-public:
-
-    // Attributes
-
-    struct ElementInfo
-    {
-        QString category;
-        int     relativeOffsetToCategory;
-    };
-
-public:
-
-    // Basic data
-    ImportKCategorizedView*           listView;
-    KCategoryDrawer*                  categoryDrawer;
-    QSize                             biggestItemSize;
-
-    // Behavior data
-    bool                              mouseButtonPressed;
-    bool                              rightMouseButtonPressed;
-    bool                              dragLeftViewport;
-    bool                              drawItemsWhileDragging;
-    QModelIndex                       hovered;
-    QString                           hoveredCategory;
-    QPoint                            initialPressPosition;
-    QPoint                            mousePosition;
-    int                               forcedSelectionPosition;
-
-    // Cache data
-    // We cannot merge some of them into structs because it would affect
-    // performance
-    QVector<struct ElementInfo>       elementsInfo;
-    QHash<int, QRect>                 elementsPosition;
-    QHash<QString, QVector<int> >     categoriesIndexes;
-    QHash<QString, QRect>             categoriesPosition;
-    QStringList                       categories;
-    QModelIndexList                   intersectedIndexes;
-    QRect                             lastDraggedItemsRect;
-    QItemSelection                    lastSelection;
-
-    // Attributes for speed reasons
-    KCategorizedSortFilterProxyModel* proxyModel;
-};
-
-}  // namespace Digikam
-
-#endif // ImportKCategorizedView_P_H


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic