Files
ResInsight/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeSelectionQModel.h
Magne Sjaastad 1d57b9032b Custom vfp plot (#11450)
* AppFwk: When clearing a tree selection, make sure all values are cleared
* Fix deprecated implicit lambda
* Add support for using the closest value in addition to exact match
* Add table data source object and add plot with multiple data sources
Delete the temporary RimVfpDeck class
Add RimVfpTable to represent a table in a data source
Add plot able to show data from multiple tables

* AppFwk: Make it possible to call resolveReferences multiple times
Use case: Vfp tables are stored in files. Multiple tables can be present in one file. Pdm table objects are created after resolve references is done as part of parsing file. When the Pdm object are created, resolveReferences can be called once more.

* Call resolveReferencesRecursively() after RimVfpTable objects are created
2024-05-29 12:55:45 +02:00

117 lines
4.5 KiB
C++

//##################################################################################################
//
// Custom Visualization Core library
//
// This library may be used under the terms of either the GNU General Public License or
// the GNU Lesser General Public License as follows:
//
// GNU General Public License Usage
// This library 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 3 of the License, or
// (at your option) any later version.
//
// This library 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 at <<http://www.gnu.org/licenses/gpl.html>>
// for more details.
//
// GNU Lesser General Public License Usage
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library 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 Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
// for more details.
//
//##################################################################################################
#pragma once
#include "cafPdmUiFieldEditorHandle.h"
#include "cafUiTreeItem.h"
#include <QAbstractItemModel>
#include <map>
#include <vector>
namespace caf
{
class PdmOptionItemInfo;
class PdmUiFieldHandle;
//==================================================================================================
///
//==================================================================================================
class PdmUiTreeSelectionQModel : public QAbstractItemModel
{
Q_OBJECT
public:
explicit PdmUiTreeSelectionQModel( QObject* parent = nullptr );
~PdmUiTreeSelectionQModel() override;
static int headingRole();
static int optionItemValueRole();
void setCheckedStateForItems( const QModelIndexList& indices, bool checked );
void invertCheckedStateForItems( const QModelIndexList& indices );
void unselectAllItems();
void enableSingleSelectionMode( bool enable );
int optionItemCount() const;
void setOptions( caf::PdmUiFieldEditorHandle* field, const QList<caf::PdmOptionItemInfo>& options );
void setUiValueCache( const QVariant* uiValuesCache );
void resetUiValueCache();
bool isReadOnly( const QModelIndex& index ) const;
bool isChecked( const QModelIndex& index ) const;
bool hasGrandChildren() const;
Qt::ItemFlags flags( const QModelIndex& index ) const override;
QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override;
int columnCount( const QModelIndex& parent = QModelIndex() ) const override;
QModelIndex parent( const QModelIndex& child ) const override;
int rowCount( const QModelIndex& parent = QModelIndex() ) const override;
QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole ) override;
QModelIndex indexForLastUncheckedItem() const;
void clearIndexForLastUncheckedItem();
// Consider moving these functions to PdmUiFieldHandle
static bool isSingleValueField( const QVariant& fieldValue );
static bool isMultipleValueField( const QVariant& fieldValue );
private:
typedef caf::UiTreeItem<int> TreeItemType;
const caf::PdmOptionItemInfo* optionItem( const QModelIndex& index ) const;
int optionIndex( const QModelIndex& index ) const;
void buildOptionItemTree( int optionIndex, TreeItemType* parentNode );
void notifyChangedForAllModelIndices();
void recursiveNotifyChildren( const QModelIndex& index );
private:
QList<caf::PdmOptionItemInfo> m_options;
QPointer<caf::PdmUiFieldEditorHandle> m_uiFieldHandle;
const QVariant* m_uiValueCache;
TreeItemType* m_tree;
bool m_singleSelectionMode;
QModelIndex m_indexForLastUncheckedItem;
};
} // end namespace caf