QGIS API Documentation 4.1.0-Master (60fea48833c)
Loading...
Searching...
No Matches
qgshistoryentrynode.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgshistoryentrynode.cpp
3 --------------------------
4 begin : April 2023
5 copyright : (C) 2023 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16#include "qgshistoryentrynode.h"
17
18//
19// QgsHistoryEntryNode
20//
21
23
25{
26 return 0;
27}
28
30{
31 return QString();
32}
33
35{
36 return nullptr;
37}
38
40{
41 return false;
42}
43
46
47bool QgsHistoryEntryNode::matchesString( const QString &string ) const
48{
49 if ( string.isEmpty() )
50 return true;
51
52 return data( Qt::DisplayRole ).toString().contains( string, Qt::CaseInsensitive );
53}
54
55
56//
57// QgsHistoryEntryGroup
58//
59
61
63{
64 if ( !child )
65 return;
66
67 Q_ASSERT( !child->mParent );
68 child->mParent = this;
69
70 mChildren.emplace_back( child );
71}
72
74{
75 if ( !child )
76 return;
77
78 Q_ASSERT( !child->mParent );
79 child->mParent = this;
80
81 mChildren.insert( mChildren.begin() + index, std::unique_ptr<QgsHistoryEntryNode>( child ) );
82}
83
85{
86 if ( child->mParent != this )
87 return -1;
88
89 auto it = std::find_if( mChildren.begin(), mChildren.end(), [&]( const std::unique_ptr<QgsHistoryEntryNode> &p ) { return p.get() == child; } );
90 if ( it != mChildren.end() )
91 return static_cast<int>( std::distance( mChildren.begin(), it ) );
92 return -1;
93}
94
96{
97 if ( static_cast<std::size_t>( index ) >= mChildren.size() )
98 return nullptr;
99
100 return mChildren[index].get();
101}
102
104{
105 if ( static_cast<std::size_t>( index ) >= mChildren.size() )
106 return;
107
108 mChildren.erase( mChildren.begin() + index );
109}
110
112{
113 mChildren.clear();
114}
115
117{
118 return static_cast<int>( mChildren.size() );
119}
int childCount() const final
Returns the number of child nodes owned by this node.
void addChild(QgsHistoryEntryNode *child)
Adds a child node to this node.
void removeChildAt(int index)
Removes the child at the specified index.
~QgsHistoryEntryGroup() override
QgsHistoryEntryNode * childAt(int index)
Returns the child at the specified index.
int indexOf(QgsHistoryEntryNode *child) const
Returns the index of the specified child node.
void insertChild(int index, QgsHistoryEntryNode *child)
Inserts a child node at the specified index.
void clear()
Clears the group, removing all its children.
std::deque< std::unique_ptr< QgsHistoryEntryNode > > mChildren
virtual QWidget * createWidget(const QgsHistoryWidgetContext &context)
Returns a new widget which should be shown to users when selecting the node.
virtual QString html(const QgsHistoryWidgetContext &context) const
Returns a HTML formatted text string which should be shown to a user when selecting the node.
virtual ~QgsHistoryEntryNode()
virtual bool matchesString(const QString &searchString) const
Returns true if the node matches the specified searchString, and should be shown in filtered results ...
virtual QVariant data(int role=Qt::DisplayRole) const =0
Returns the node's data for the specified model role.
virtual void populateContextMenu(QMenu *menu, const QgsHistoryWidgetContext &context)
Allows the node to populate a context menu before display to the user.
QgsHistoryEntryNode()=default
virtual int childCount() const
Returns the number of child nodes owned by this node.
virtual bool doubleClicked(const QgsHistoryWidgetContext &context)
Called when the node is double-clicked.
Contains settings which reflect the context in which a history widget is shown, e....