7#include "toolbarlayoutdelegate.h"
9#include "loggingcategory.h"
10#include "toolbarlayout.h"
14 , m_component(component)
19void ToolBarDelegateIncubator::setStateCallback(std::function<
void(
QQuickItem *)> callback)
21 m_stateCallback = callback;
24void ToolBarDelegateIncubator::setCompletedCallback(std::function<
void(ToolBarDelegateIncubator *)> callback)
26 m_completedCallback = callback;
29void ToolBarDelegateIncubator::create()
31 m_component->create(*
this, m_context);
34bool ToolBarDelegateIncubator::isFinished()
39void ToolBarDelegateIncubator::setInitialState(
QObject *
object)
41 auto item = qobject_cast<QQuickItem *>(
object);
43 m_stateCallback(item);
50 qCWarning(KirigamiLayoutsLog) <<
"Could not create delegate for ToolBarLayout";
52 for (
const auto &error : e) {
53 qCWarning(KirigamiLayoutsLog) <<
error;
59 m_completedCallback(
this);
64ToolBarLayoutDelegate::ToolBarLayoutDelegate(
ToolBarLayout *parent)
70ToolBarLayoutDelegate::~ToolBarLayoutDelegate()
72 if (m_fullIncubator) {
73 m_fullIncubator->clear();
74 delete m_fullIncubator;
76 if (m_iconIncubator) {
77 m_iconIncubator->clear();
78 delete m_iconIncubator;
81 m_full->disconnect(
this);
85 m_icon->disconnect(
this);
90QObject *ToolBarLayoutDelegate::action()
const
95void ToolBarLayoutDelegate::setAction(
QObject *action)
97 if (action == m_action) {
102 QObject::disconnect(m_action, SIGNAL(visibleChanged()),
this, SLOT(actionVisibleChanged()));
103 QObject::disconnect(m_action, SIGNAL(displayHintChanged()),
this, SLOT(displayHintChanged()));
108 if (m_action->property(
"visible").isValid()) {
109 QObject::connect(m_action, SIGNAL(visibleChanged()),
this, SLOT(actionVisibleChanged()));
110 m_actionVisible = m_action->property(
"visible").toBool();
113 if (m_action->property(
"displayHint").isValid()) {
114 QObject::connect(m_action, SIGNAL(displayHintChanged()),
this, SLOT(displayHintChanged()));
115 m_displayHint = DisplayHint::DisplayHints{m_action->property(
"displayHint").toInt()};
122 m_fullIncubator =
new ToolBarDelegateIncubator(fullComponent, qmlContext(fullComponent));
123 m_fullIncubator->setStateCallback(callback);
124 m_fullIncubator->setCompletedCallback([
this](ToolBarDelegateIncubator *incubator) {
126 qCWarning(KirigamiLayoutsLog) <<
"Could not create delegate for ToolBarLayout";
127 const auto errors = incubator->
errors();
128 for (
const auto &error : errors) {
129 qCWarning(KirigamiLayoutsLog) <<
error;
135 m_full->setVisible(
false);
144 m_parent->relayout();
148 m_iconIncubator =
new ToolBarDelegateIncubator(iconComponent, qmlContext(iconComponent));
149 m_iconIncubator->setStateCallback(callback);
150 m_iconIncubator->setCompletedCallback([
this](ToolBarDelegateIncubator *incubator) {
152 qCWarning(KirigamiLayoutsLog) <<
"Could not create delegate for ToolBarLayout";
153 const auto errors = incubator->
errors();
154 for (
const auto &error : errors) {
155 qCWarning(KirigamiLayoutsLog) <<
error;
161 m_icon->setVisible(
false);
170 m_parent->relayout();
175 m_fullIncubator->create();
176 m_iconIncubator->create();
179bool ToolBarLayoutDelegate::isReady()
const
184bool ToolBarLayoutDelegate::isActionVisible()
const
186 return m_actionVisible;
189bool ToolBarLayoutDelegate::isHidden()
const
191 return DisplayHint::isDisplayHintSet(m_displayHint, DisplayHint::AlwaysHide);
194bool ToolBarLayoutDelegate::isIconOnly()
const
196 return DisplayHint::isDisplayHintSet(m_displayHint, DisplayHint::IconOnly);
199bool ToolBarLayoutDelegate::isKeepVisible()
const
201 return DisplayHint::isDisplayHintSet(m_displayHint, DisplayHint::KeepVisible);
204bool ToolBarLayoutDelegate::isVisible()
const
206 return m_iconVisible || m_fullVisible;
209void ToolBarLayoutDelegate::hide()
211 m_iconVisible =
false;
212 m_fullVisible =
false;
213 ensureItemVisibility();
216void ToolBarLayoutDelegate::showFull()
218 m_iconVisible =
false;
219 m_fullVisible =
true;
222void ToolBarLayoutDelegate::showIcon()
224 m_iconVisible =
true;
225 m_fullVisible =
false;
228void ToolBarLayoutDelegate::show()
230 ensureItemVisibility();
233void ToolBarLayoutDelegate::setPosition(qreal x, qreal y)
241void ToolBarLayoutDelegate::setHeight(qreal height)
243 m_full->setHeight(height);
244 m_icon->setHeight(height);
247void ToolBarLayoutDelegate::resetHeight()
249 m_full->resetHeight();
250 m_icon->resetHeight();
253qreal ToolBarLayoutDelegate::width()
const
256 return m_icon->width();
258 return m_full->width();
261qreal ToolBarLayoutDelegate::height()
const
264 return m_icon->height();
266 return m_full->height();
269qreal ToolBarLayoutDelegate::implicitWidth()
const
272 return m_icon->implicitWidth();
274 return m_full->implicitWidth();
277qreal ToolBarLayoutDelegate::implicitHeight()
const
280 return m_icon->implicitHeight();
282 return m_full->implicitHeight();
285qreal ToolBarLayoutDelegate::maxHeight()
const
287 return std::max(m_full->implicitHeight(), m_icon->implicitHeight());
290qreal ToolBarLayoutDelegate::iconWidth()
const
292 return m_icon->width();
295qreal ToolBarLayoutDelegate::fullWidth()
const
297 return m_full->width();
300void ToolBarLayoutDelegate::actionVisibleChanged()
302 m_actionVisible = m_action->property(
"visible").toBool();
303 m_parent->relayout();
306void ToolBarLayoutDelegate::displayHintChanged()
308 m_displayHint = DisplayHint::DisplayHints{m_action->property(
"displayHint").toInt()};
309 m_parent->relayout();
312void ToolBarLayoutDelegate::cleanupIncubators()
314 if (m_fullIncubator && m_fullIncubator->isFinished()) {
315 delete m_fullIncubator;
316 m_fullIncubator =
nullptr;
319 if (m_iconIncubator && m_iconIncubator->isFinished()) {
320 delete m_iconIncubator;
321 m_iconIncubator =
nullptr;
325void ToolBarLayoutDelegate::triggerRelayout()
327 m_parent->relayout();
330#include "moc_toolbarlayoutdelegate.cpp"
Q_SCRIPTABLE CaptureState status()
void error(QWidget *parent, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options=Notify)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect(const QMetaObject::Connection &connection)
T qobject_cast(QObject *object)
QList< QQmlError > errors() const const
bool isError() const const
QObject * object() const const
Status status() const const
void implicitHeightChanged()
void implicitWidthChanged()