Compare commits

...

2 Commits

Author SHA1 Message Date
jordi fita mas c795effd3d Set reservation’s rectangle color based on status 2025-01-14 22:06:32 +01:00
jordi fita mas e404727c45 Show the reservation’s holder name in timelineview
TimelineView is not a general control that can be used with any model,
thus i do not need the complexity of Qt’s QQmlDelegateModel incubation
task to initialize required properties.  I _would_ have used it if it
were available in C++, but since it is not, what i mean is that i do not
need to _reimplement_ all of it for my case: i already know what
required properties there are.
2025-01-14 21:46:02 +01:00
3 changed files with 50 additions and 12 deletions

View File

@ -80,9 +80,35 @@ Page {
viewportX: ListView.view.contentX viewportX: ListView.view.contentX
delegate: Rectangle { delegate: Rectangle {
id: booking
required property string holder
required property string reservationStatus
function reservationStatusColor(status) {
switch (status) {
case "created":
return "#cbebff";
case "cancelled":
return "#ffbaa6";
case "confirmed":
return "#ffe673";
case "checked-in":
return "#9fefb9";
case "invoiced":
return "#e1dbd6";
}
}
border.color: "black" border.color: "black"
border.width: 1 border.width: 1
color: "blue" color: reservationStatusColor(reservationStatus)
Label {
anchors.fill: parent
elide: Text.ElideRight
text: booking.holder
}
} }
} }
header: Pane { header: Pane {

View File

@ -167,16 +167,28 @@ void TimelineView::componentComplete()
populate(); populate();
} }
TimelineView::Item *TimelineView::createItem(qint64 day, qint64 len) TimelineView::Item *TimelineView::createItem(qint64 day, const TimelineModel::Item &modelItem)
{ {
QQuickItem *item = m_reusableItems.isEmpty() ? qobject_cast<QQuickItem *>(m_delegate->create( QQuickItem *item;
m_delegate->creationContext()))
: m_reusableItems.takeLast(); if (m_reusableItems.isEmpty()) {
if (!item) { QVariantMap initialProperties{
qmlWarning(m_delegate) << TimelineView::tr("Delegate must be of Item type"); {"holder", modelItem.holder},
return nullptr; {"reservationStatus", modelItem.status},
};
item = qobject_cast<QQuickItem *>(
m_delegate->createWithInitialProperties(initialProperties,
m_delegate->creationContext()));
if (!item) {
qmlWarning(m_delegate) << TimelineView::tr("Delegate must be of Item type");
return nullptr;
}
} else {
item = m_reusableItems.takeLast();
item->setProperty("holder", modelItem.holder);
item->setProperty("reservationStatus", modelItem.status);
} }
auto *viewItem = new TimelineView::Item(day, len, *item, *this); auto *viewItem = new TimelineView::Item(day, modelItem.nights, *item, *this);
return viewItem; return viewItem;
} }
@ -235,7 +247,7 @@ void TimelineView::populate()
if (!m_items.isEmpty() && m_items.first()->day <= day) { if (!m_items.isEmpty() && m_items.first()->day <= day) {
continue; continue;
} }
TimelineView::Item *viewItem = createItem(day, item->nights); TimelineView::Item *viewItem = createItem(day, *item);
if (!viewItem) { if (!viewItem) {
break; break;
} }
@ -263,7 +275,7 @@ void TimelineView::populate()
if (!m_items.isEmpty() && m_items.last()->day >= day) { if (!m_items.isEmpty() && m_items.last()->day >= day) {
continue; continue;
} }
TimelineView::Item *viewItem = createItem(day, item->nights); TimelineView::Item *viewItem = createItem(day, *item);
if (!viewItem) { if (!viewItem) {
break; break;
} }

View File

@ -61,7 +61,7 @@ private:
struct Item; struct Item;
Item *createItem(qint64 day, qint64 len); Item *createItem(qint64 day, const TimelineModel::Item &modelItem);
void releaseItem(Item *item); void releaseItem(Item *item);
void drainItems(); void drainItems();