QGIS API Documentation 3.27.0-Master (75dc696944)
qgstreewidgetitem.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgstreewidgetitem.cpp
3 ---------------------
4 begin : 06 Nov, 2005
5 copyright : (C) 2005 by Brendan Morley
6 email : morb at ozemail dot com dot au
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgstreewidgetitem.h"
19#include "qgis.h"
20
21QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidget *parent, int type )
22 : QTreeWidgetItem( parent, type )
23{}
24
26 : QTreeWidgetItem( type )
27{}
28
29QgsTreeWidgetItem::QgsTreeWidgetItem( const QStringList &strings, int type )
30 : QTreeWidgetItem( strings, type )
31{}
32
33QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidget *view, const QStringList &strings, int type )
34 : QTreeWidgetItem( view, strings, type )
35{}
36
37QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidget *view, QTreeWidgetItem *after, int type )
38 : QTreeWidgetItem( view, after, type )
39{}
40
41QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidgetItem *parent, int type )
42 : QTreeWidgetItem( parent, type )
43{}
44
45QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidgetItem *parent, const QStringList &strings, int type )
46 : QTreeWidgetItem( parent, strings, type )
47{}
48
49QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidgetItem *parent, QTreeWidgetItem *after, int type )
50 : QTreeWidgetItem( parent, after, type )
51{}
52
53void QgsTreeWidgetItem::setSortData( int column, const QVariant &value )
54{
55 setData( column, CustomSortRole, value );
56}
57
58QVariant QgsTreeWidgetItem::sortData( int column ) const
59{
60 return data( column, CustomSortRole );
61}
62
64{
65 setData( 0, AlwaysOnTopPriorityRole, priority );
66}
67
69{
70 const QVariant val = data( 0, AlwaysOnTopPriorityRole );
71 return val.isValid() ? val.toInt() : -1;
72}
73
74bool QgsTreeWidgetItem::operator<( const QTreeWidgetItem &other ) const
75{
76 const int column = treeWidget()->sortColumn();
77
78 // check always on top priority - note - no way of determining sort order from tree widget, so
79 // these will sometimes be incorrectly placed at the bottom
80 const QVariant priority1 = data( 0, AlwaysOnTopPriorityRole );
81 const QVariant priority2 = other.data( 0, AlwaysOnTopPriorityRole );
82 if ( priority1.isValid() && priority2.isValid() )
83 {
84 const int i1 = priority1.toInt();
85 const int i2 = priority2.toInt();
86 if ( i1 != i2 )
87 return priority1.toInt() < priority2.toInt();
88 }
89 else if ( priority1.isValid() )
90 {
91 return true;
92 }
93 else if ( priority2.isValid() )
94 {
95 return false;
96 }
97
98 // no always on top priorities, check data
99 bool ok1, ok2, val;
100
101 // prefer the custom sort role, but fall back to display text
102 QVariant val1 = data( column, CustomSortRole );
103 if ( !val1.isValid() )
104 val1 = text( column );
105 QVariant val2 = other.data( column, CustomSortRole );
106 if ( !val2.isValid() )
107 val2 = other.text( column );
108
109 if ( !val1.isNull() && !val2.isNull() )
110 {
111 val = val1.toDouble( &ok1 ) < val2.toDouble( &ok2 );
112 if ( ok1 && ok2 )
113 {
114 return val;
115 }
116 else if ( ok1 || ok2 )
117 {
118 // sort numbers before strings
119 return ok1;
120 }
121 }
122
123 return qgsVariantLessThan( val1, val2 );
124}
125
126//
127// QgsTreeWidgetItemObject
128//
129
131 : QgsTreeWidgetItem( type )
132{}
133
135 : QgsTreeWidgetItem( parent, type )
136{}
137
138// override setData to emit signal when edited. By default the itemChanged signal fires way too often
139void QgsTreeWidgetItemObject::setData( int column, int role, const QVariant &value )
140{
141 QgsTreeWidgetItem::setData( column, role, value );
142 if ( role == Qt::EditRole )
143 {
144 emit itemEdited( this, column );
145 }
146}
void itemEdited(QTreeWidgetItem *item, int column)
Emitted when the contents of the column in the specified item has been edited by the user.
QgsTreeWidgetItemObject(int type=Type)
Constructor for QgsTreeWidgetItemObject.
void setData(int column, int role, const QVariant &value) override
Sets the value for the item's column and role to the given value.
QTreeWidgetItem subclass with custom handling for item sorting.
void setAlwaysOnTopPriority(int priority)
Sets a the item to display always on top of other items in the widget, regardless of the sort column ...
int alwaysOnTopPriority() const
Returns the item's priority when it is set to show always on top.
void setSortData(int column, const QVariant &value)
Sets the custom sort data for a specified column.
bool operator<(const QTreeWidgetItem &other) const override
Returns true if this item should appear before another item when sorting a list of items.
QVariant sortData(int column) const
Returns the custom sort data for a specified column.
QgsTreeWidgetItem(QTreeWidget *view, int type=Type)
Constructor for QgsTreeWidgetItem.
bool qgsVariantLessThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is less than the second.
Definition: qgis.cpp:119