You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
5.5 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkQtTreeView.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
/**
* @class vtkQtTreeView
* @brief A VTK view based on a Qt tree view.
*
*
* vtkQtTreeView is a VTK view using an underlying QTreeView.
*
* @par Thanks:
* Thanks to Brian Wylie from Sandia National Laboratories for implementing
* this class
*/
#ifndef vtkQtTreeView_h
#define vtkQtTreeView_h
#include "vtkQtView.h"
#include "vtkViewsQtModule.h" // For export macro
#include "vtkSmartPointer.h" // Needed for member variables
#include <QList> // Needed for member variables
#include <QPointer> // Needed for member variables
class QAbstractItemDelegate;
class QAbstractItemView;
class QFilterTreeProxyModel;
class QColumnView;
class QItemSelection;
class QModelIndex;
class QTreeView;
class vtkApplyColors;
class QVBoxLayout;
class vtkQtTreeModelAdapter;
class QItemSelectionModel;
class VTKVIEWSQT_EXPORT vtkQtTreeView : public vtkQtView
{
Q_OBJECT
signals:
void expanded(const QModelIndex&);
void collapsed(const QModelIndex&);
void updatePreviewWidget(const QModelIndex&);
public:
static vtkQtTreeView* New();
vtkTypeMacro(vtkQtTreeView, vtkQtView);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Get the main container of this view (a QWidget).
* The application typically places the view with a call
* to GetWidget(): something like this
* this->ui->box->layout()->addWidget(this->View->GetWidget());
*/
QWidget* GetWidget() override;
/**
* Have the view show/hide its column headers (default is ON)
*/
void SetShowHeaders(bool);
/**
* Have the view alternate its row colors (default is OFF)
*/
void SetAlternatingRowColors(bool);
/**
* Have the view alternate its row colors (default is OFF)
*/
void SetEnableDragDrop(bool);
/**
* Show the root node of the tree (default is OFF)
*/
void SetShowRootNode(bool);
/**
* Hide the column of the given index from being shown in the view
*/
void HideColumn(int i);
/**
* Show the column of the given index in the view
*/
void ShowColumn(int i);
/**
* Hide all but the first column in the view
*/
void HideAllButFirstColumn();
/**
* The column used to filter on
*/
void SetFilterColumn(int i);
/**
* The column used to filter on
*/
void SetFilterRegExp(const QRegExp& pattern);
/**
* The column used to filter on
*/
void SetFilterTreeLevel(int level);
/**
* Collapses the model item specified by the index.
*/
void Collapse(const QModelIndex& index);
/**
* Collapses all expanded items.
*/
void CollapseAll();
/**
* Expands the model item specified by the index.
*/
void Expand(const QModelIndex& index);
/**
* Expands all expandable items.
* Warning: if the model contains a large number of items,
* this function will take some time to execute.
*/
void ExpandAll();
/**
* Expands all expandable items to the given depth.
*/
void ExpandToDepth(int depth);
/**
* Resizes the column given to the size of its contents.
*/
void ResizeColumnToContents(int column);
/**
* Set whether to use a QColumnView (QTreeView is the default)
*/
void SetUseColumnView(int state);
/**
* Updates the view.
*/
void Update() override;
/**
* Set item delegate to something custom
*/
void SetItemDelegate(QAbstractItemDelegate* delegate);
//@{
/**
* The array to use for coloring items in view. Default is "color".
*/
void SetColorArrayName(const char* name);
const char* GetColorArrayName();
//@}
//@{
/**
* Whether to color vertices. Default is off.
*/
void SetColorByArray(bool vis);
bool GetColorByArray();
vtkBooleanMacro(ColorByArray, bool);
//@}
void ApplyViewTheme(vtkViewTheme* theme) override;
protected:
vtkQtTreeView();
~vtkQtTreeView() override;
void AddRepresentationInternal(vtkDataRepresentation* rep) override;
void RemoveRepresentationInternal(vtkDataRepresentation* rep) override;
private slots:
void slotQtSelectionChanged(const QItemSelection&, const QItemSelection&);
private:
void SetVTKSelection();
vtkMTimeType CurrentSelectionMTime;
vtkMTimeType LastInputMTime;
vtkSetStringMacro(ColorArrayNameInternal);
vtkGetStringMacro(ColorArrayNameInternal);
QPointer<QTreeView> TreeView;
QPointer<QColumnView> ColumnView;
QPointer<QWidget> Widget;
QPointer<QVBoxLayout> Layout;
QPointer<QItemSelectionModel> SelectionModel;
QList<int> HiddenColumns;
vtkQtTreeModelAdapter* TreeAdapter;
QAbstractItemView* View;
char* ColorArrayNameInternal;
QFilterTreeProxyModel* TreeFilter;
vtkSmartPointer<vtkApplyColors> ApplyColors;
vtkQtTreeView(const vtkQtTreeView&) = delete;
void operator=(const vtkQtTreeView&) = delete;
};
#endif