QGIS API Documentation  3.20.0-Odense (decaadbb31)
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 
21 QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidget *parent, int type )
22  : QTreeWidgetItem( parent, type )
23 {}
24 
26  : QTreeWidgetItem( type )
27 {}
28 
29 QgsTreeWidgetItem::QgsTreeWidgetItem( const QStringList &strings, int type )
30  : QTreeWidgetItem( strings, type )
31 {}
32 
33 QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidget *view, const QStringList &strings, int type )
34  : QTreeWidgetItem( view, strings, type )
35 {}
36 
37 QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidget *view, QTreeWidgetItem *after, int type )
38  : QTreeWidgetItem( view, after, type )
39 {}
40 
41 QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidgetItem *parent, int type )
42  : QTreeWidgetItem( parent, type )
43 {}
44 
45 QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidgetItem *parent, const QStringList &strings, int type )
46  : QTreeWidgetItem( parent, strings, type )
47 {}
48 
49 QgsTreeWidgetItem::QgsTreeWidgetItem( QTreeWidgetItem *parent, QTreeWidgetItem *after, int type )
50  : QTreeWidgetItem( parent, after, type )
51 {}
52 
53 void QgsTreeWidgetItem::setSortData( int column, const QVariant &value )
54 {
55  setData( column, CustomSortRole, value );
56 }
57 
58 QVariant QgsTreeWidgetItem::sortData( int column ) const
59 {
60  return data( column, CustomSortRole );
61 }
62 
64 {
65  setData( 0, AlwaysOnTopPriorityRole, priority );
66 }
67 
69 {
70  QVariant val = data( 0, AlwaysOnTopPriorityRole );
71  return val.isValid() ? val.toInt() : -1;
72 }
73 
74 bool QgsTreeWidgetItem::operator<( const QTreeWidgetItem &other ) const
75 {
76  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  QVariant priority1 = data( 0, AlwaysOnTopPriorityRole );
81  QVariant priority2 = other.data( 0, AlwaysOnTopPriorityRole );
82  if ( priority1.isValid() && priority2.isValid() )
83  {
84  int i1 = priority1.toInt();
85  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 
134 QgsTreeWidgetItemObject::QgsTreeWidgetItemObject( QTreeWidget *parent, int type )
135  : QgsTreeWidgetItem( parent, type )
136 {}
137 
138 // override setData to emit signal when edited. By default the itemChanged signal fires way too often
139 void 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:127