diff options
Diffstat (limited to 'tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp')
-rw-r--r-- | tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp deleted file mode 100644 index 961cf4e03c..0000000000 --- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp +++ /dev/null @@ -1,425 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include <QGraphicsLayout> - -#include "abstractitemview.h" -#include "abstractviewitem.h" -#include "scrollbar.h" - -AbstractItemView::AbstractItemView(QGraphicsWidget *parent) - : AbstractScrollArea(parent), - m_model(0), - m_rootIndex(), - m_container(0), - m_selectionModel(0), - m_currentIndex(), - m_scroller() -{ - setRootIndex(QModelIndex()); -} - -/*virtual*/ -AbstractItemView::~AbstractItemView() -{ -} - -/*virtual*/ -void AbstractItemView::setModel(QAbstractItemModel *model, AbstractViewItem *prototype) -{ - if (m_model == model || !model) - return; - - if (m_model) { - disconnect(m_model, SIGNAL(destroyed()), - this, SLOT(_q_modelDestroyed())); - disconnect(m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(dataChanged(QModelIndex,QModelIndex))); - disconnect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(rowsInserted(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(rowsRemoved(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(columnsInserted(QModelIndex,int,int)), - this, SLOT(columnsInserted(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)), - this, SLOT(columnsAboutToBeInserted(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)), - this, SLOT(columnsRemoved(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(columnsAboutToBeRemoved(QModelIndex,int,int))); - disconnect(m_model, SIGNAL(modelReset()), this, SLOT(reset())); - disconnect(m_model, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged())); - - m_model = 0; - } - - setSelectionModel(0); - - m_currentIndex = QModelIndex(); - m_rootIndex = QModelIndex(); - - m_model = model; - - Q_ASSERT_X(m_model->index(0,0) == m_model->index(0,0), - "AbstractItemView::setModel", - "A model should return the exact same index " - "(including its internal id/pointer) when asked for it twice in a row."); - Q_ASSERT_X(m_model->index(0,0).parent() == QModelIndex(), - "AbstractItemView::setModel", - "The parent of a top level index should be invalid"); - - - connect(m_model, SIGNAL(destroyed()), this, SLOT(modelDestroyed())); - connect(m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(dataChanged(QModelIndex,QModelIndex))); - connect(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int))); - connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(rowsInserted(QModelIndex,int,int))); - connect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int))); - connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(rowsRemoved(QModelIndex,int,int))); - connect(m_model, SIGNAL(modelReset()), this, SLOT(reset())); - connect(m_model, SIGNAL(layoutChanged()), this, SLOT(layoutChanged())); - - setSelectionModel(new QItemSelectionModel(m_model)); - - if (prototype && m_container) { - m_container->setItemPrototype(prototype); - m_container->reset(); - } -} - -/*virtual*/ -void AbstractItemView::setContainer(AbstractItemContainer *container) -{ - m_container = container; - m_container->setItemView(this); - m_container->setParentItem(viewport()); - - viewport()->setFlag( - QGraphicsItem::ItemClipsChildrenToShape, true); - m_scroller.setScrollable(this); - installEventFilter(&m_scroller); -} - -/*virtual*/ -void AbstractItemView::setRootIndex(const QModelIndex &index) -{ - m_rootIndex = index; - // TODO fix this if we change index, container should be updated? Or do we need root index? -} - -/*virtual*/ -int AbstractItemView::indexCount() const -{ - if (m_model) - return m_model->rowCount(m_rootIndex); - return 0; -} - -/*virtual*/ -QAbstractItemModel* AbstractItemView::model() const -{ - return m_model; -} - -/*virtual*/ -QModelIndex AbstractItemView::nextIndex(const QModelIndex &index) const -{ - if (!m_model) - return QModelIndex(); - - if (index.isValid()) - return m_model->index(index.row() + 1, 0, m_rootIndex); - else - return m_model->index(0, 0, m_rootIndex); -} - -/*virtual*/ -QModelIndex AbstractItemView::previousIndex(const QModelIndex &index) const -{ - if (!m_model) - return QModelIndex(); - - if (index.isValid()) - return m_model->index(index.row() - 1, 0, m_rootIndex); - else - return m_model->index(m_model->rowCount(m_rootIndex) - 1, 0, m_rootIndex); -} - -/*virtual*/ -void AbstractItemView::setItemPrototype(AbstractViewItem* prototype) -{ - if (prototype && m_container) { - m_container->setItemPrototype(prototype); - m_container->reset(); - } -} - -void AbstractItemView::setSelectionModel(QItemSelectionModel *smodel) -{ - if (smodel && smodel->model() != m_model) { - return; - } - if (m_selectionModel) { - disconnect(m_selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - this, SLOT(currentSelectionChanged(QItemSelection,QItemSelection))); - - disconnect(m_selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), - this, SLOT(currentIndexChanged(QModelIndex,QModelIndex))); - - delete m_selectionModel; - m_selectionModel = 0; - } - - m_selectionModel = smodel; - - if (m_selectionModel) { - connect(m_selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - this, SLOT(currentSelectionChanged(QItemSelection,QItemSelection))); - connect(m_selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), - this, SLOT(currentIndexChanged(QModelIndex,QModelIndex))); - } -} - -/*virtual*/ -void AbstractItemView::currentIndexChanged(const QModelIndex ¤t, const QModelIndex &previous) -{ - Q_UNUSED(previous) - - if (current != m_currentIndex) - m_currentIndex = current; -} - -/*virtual*/ -void AbstractItemView::currentSelectionChanged(const QItemSelection &selected, - const QItemSelection &deselected) -{ - Q_UNUSED(selected) - Q_UNUSED(deselected) -} - -/*virtual*/ -void AbstractItemView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) -{ - Q_UNUSED(topLeft) - Q_UNUSED(bottomRight) - // TODO implement if we like to edit view items. -} - -/*virtual*/ -void AbstractItemView::rowsAboutToBeInserted(const QModelIndex &index, int start, int end) -{ - Q_UNUSED(index) - Q_UNUSED(start) - Q_UNUSED(end) - - // TODO implement -} - -/*virtual*/ -void AbstractItemView::rowsAboutToBeRemoved(const QModelIndex &index,int start, int end) -{ - Q_UNUSED(index) - Q_UNUSED(start) - Q_UNUSED(end) -} - -/*virtual*/ -void AbstractItemView::rowsRemoved(const QModelIndex &parent,int start, int end) -{ - Q_UNUSED(parent) - Q_UNUSED(start) - Q_UNUSED(end) - - if (start <= m_currentIndex.row() && m_currentIndex.row() <= end) { - QModelIndex newCurrentIndex = m_model->index(start, 0, m_rootIndex); - if (!newCurrentIndex.isValid()) { - newCurrentIndex = m_model->index(qMax(0,start - 1), 0, m_rootIndex); - } - - if (m_selectionModel) { - m_selectionModel->setCurrentIndex(newCurrentIndex, QItemSelectionModel::NoUpdate); - } - } - for (int i = end; i >= start; --i) //The items are already removed from the model. - m_container->removeItem(QModelIndex()); // Indexes are already invalid. -} - -/*virtual*/ -void AbstractItemView::reset() -{ - m_rootIndex = QModelIndex(); - - if (m_container) - m_container->reset(); - - setCurrentIndex(QModelIndex()); - - ScrollBar *sb = verticalScrollBar(); - - if (sb) - sb->setSliderSize(0); -} - -/*virtual*/ -void AbstractItemView::rowsInserted(const QModelIndex &parent, int start, int end) -{ - if (!m_container) - return; - - for (int i = start; i <= end; ++i) - m_container->addItem(m_model->index(i, 0, parent)); - - refreshContainerGeometry(); -} - -/*virtual*/ -void AbstractItemView::modelDestroyed() -{ - m_model = 0; - setSelectionModel(0); - reset(); -} - -/*virtual*/ -void AbstractItemView::layoutChanged() -{ - m_container->reset(); -} - -bool AbstractItemView::event(QEvent *e) -{ - bool result = AbstractScrollArea::event(e); - if (e && e->type()==QEvent::LayoutRequest) { - refreshContainerGeometry(); - result = true; - } - if (e && e->type()==QEvent::GraphicsSceneResize) { - m_scroller.stopScrolling(); - refreshContainerGeometry(); - - m_container->resize(this->size().width()-verticalScrollBar()->size().width(), - m_container->preferredHeight()); - - if (verticalScrollBar()->sliderPosition() > verticalScrollBar()->sliderSize()) - verticalScrollBar()->setSliderPosition(verticalScrollBar()->sliderSize()); - - result = true; - } - return result; -} - -void AbstractItemView::setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags selectionFlag) -{ - if (m_selectionModel) - m_selectionModel->setCurrentIndex(index, selectionFlag); -} - -void AbstractItemView::refreshContainerGeometry() -{ - if (!m_container || !m_model) - return; - - if (m_container->layout() && !m_container->layout()->isActivated()) - m_container->layout()->activate(); - - ScrollBar *sb = verticalScrollBar(); - - if (sb) { - AbstractViewItem *item = m_container->itemAt(0); - if (item) { - qreal oneItemH = item->size().height(); - sb->setSliderSize(oneItemH*m_model->rowCount(m_rootIndex)-size().height()); - } - if (!sb->isVisible() && verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff && - contentsRect().height() < m_container->boundingRect().height()) - sb->show(); - } -} - -void AbstractItemView::scrollContentsBy(qreal dx, qreal dy) -{ - AbstractScrollArea::scrollContentsBy(dx, dy); - - if (!viewport() || !m_container || (m_container && m_container->itemCount() <= 0) || - !m_model || (m_model && m_model->rowCount() <= 0) || - (viewport() && viewport()->boundingRect().height() < contentsRect().height())) - return; - - qreal itemH = 1; - - AbstractViewItem *item = m_container->itemAt(0); - if (item && item->size().height() > 1) { - itemH = item->size().height(); - } else if (item && item->preferredHeight() > 1) { - itemH = item->preferredHeight(); - } - - qreal vpx = m_container->pos().x(); - qreal vpy = m_container->pos().y(); - - if ((vpy+m_container->size().height()-dy > pos().y()+size().height()) && - (qAbs(dy) < itemH) && (vpy-dy <= 0)) { - m_container->setPos(vpx, vpy-dy); - } else { - qreal vPos = verticalScrollBar()->sliderPosition(); - int startRow = m_model->index(vPos/itemH, 0).row(); - int itemsInContainer = m_container->itemCount(); - - for (int i = 0; i<itemsInContainer; ++i) { - AbstractViewItem *changedItem = m_container->itemAt(i); - changedItem->setModelIndex(m_model->index(startRow+i,0)); - m_container->setListItemCaching(listItemCaching(), i); - } - - qreal diff = vPos-startRow*itemH; - - if (diff < 0) - m_container->setPos(vpx, diff); - else - m_container->setPos(vpx, -diff); - } -} - -void AbstractItemView::changeTheme() -{ - if (m_container) - m_container->themeChange(); -} - -void AbstractItemView::updateViewContent() -{ - if (m_container) - m_container->updateContent(); -} |