Albert
Loading...
Searching...
No Matches
item.h
1// SPDX-FileCopyrightText: 2025 Manuel Schneider
2// SPDX-License-Identifier: MIT
3
4#pragma once
5#include <QStringList>
6#include <albert/export.h>
7#include <functional>
8#include <vector>
9
10namespace albert
11{
12class Icon;
13
19class ALBERT_EXPORT Action final
20{
21public:
22
23 // ///
24 // /// Constructs an \ref Action with the contents initialized with the data passed.
25 // /// \param id_ \copybrief id
26 // /// \param text_ \copybrief text
27 // /// \param function_ \copybrief function
28 // /// \param hide_on_activation_ \copybrief hide_on_activation
29 // ///
30 // template<typename T1 = QString,
31 // typename T2 = QString,
32 // typename T3 = std::function<void()>>
33 // Action(T1 &&id_,
34 // T2 &&text_,
35 // T3 &&function_,
36 // bool hide_on_activation_ = true) noexcept :
37 // id(std::forward<T1>(id_)),
38 // text(std::forward<T2>(text_)),
39 // function(std::forward<T3>(function_)),
40 // hide_on_activation(hide_on_activation_)
41 // {}
42
44 QString id;
45
47 QString text;
48
50 std::function<void()> function;
51
53 bool hide_on_activation = true;
54};
55
56
62class ALBERT_EXPORT Item
63{
64public:
66 virtual ~Item();
67
75 virtual QString id() const = 0;
76
84 virtual QString text() const = 0;
85
91 virtual QString subtext() const = 0;
92
100 virtual QString inputActionText() const;
101
108 virtual std::unique_ptr<Icon> icon() const = 0;
109
115 virtual std::vector<Action> actions() const;
116
119 {
120 public:
122 virtual void onItemChanged(const albert::Item *item) = 0;
123 protected:
125 virtual ~Observer();
126 };
127
129 virtual void addObserver(Observer *observer);
130
132 virtual void removeObserver(Observer *observer);
133
134};
135
136namespace detail
137{
138class ALBERT_EXPORT DynamicItem : public Item
139{
140public:
141
142 DynamicItem();
143 ~DynamicItem() override;
144
145 void dataChanged() const;
146
147 void addObserver(Observer *) override;
148 void removeObserver(Observer *) override;
149
150private:
151
152 class Private;
153 std::unique_ptr<Private> d;
154
155};
156}
157
159template<typename T>
160concept ItemPtr
161 = std::is_base_of_v<Item, typename std::decay_t<T>::element_type>
162 && std::same_as<std::shared_ptr<typename std::decay_t<T>::element_type>, std::decay_t<T>>;
163
165template<typename R>
166concept ItemRange = std::ranges::range<R> && ItemPtr<std::ranges::range_value_t<R>>;
167
168} // namespace albert
169
Action used by result items (Item).
Definition item.h:20
QString text
The description.
Definition item.h:47
std::function< void()> function
The function executed on activation.
Definition item.h:50
QString id
The identifier.
Definition item.h:44
Interface class for item observers.
Definition item.h:119
virtual void onItemChanged(const albert::Item *item)=0
Notifies the observer about any changes in item.
virtual ~Observer()
Destructs the observer.
Result items displayed in the query results list.
Definition item.h:63
virtual ~Item()
Destructs the item.
virtual std::unique_ptr< Icon > icon() const =0
Returns the item icon.
virtual void removeObserver(Observer *observer)
Stops notifying observer about any changes.
virtual QString subtext() const =0
Returns the item subtext.
virtual QString id() const =0
Returns the item identifier.
virtual QString inputActionText() const
Returns the item input action text.
virtual QString text() const =0
Returns the item text.
virtual std::vector< Action > actions() const
Returns the item actions.
virtual void addObserver(Observer *observer)
Starts notifying observer about any changes.
A shared pointer to an Item or subclass thereof.
Definition item.h:161
A range of ItemPtr.
Definition item.h:166
The Albert namespace.
Definition app.h:55