1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:07:35 +00:00

LibGUI: Add a GModelNotification class that views will receive.

I don't want to use GEvent here since these need to be synchronous
and mixing sync and async GEvents would be stupid.
This commit is contained in:
Andreas Kling 2019-02-28 21:30:17 +01:00
parent 322f49caec
commit bff5b71467
6 changed files with 41 additions and 2 deletions

View file

@ -165,4 +165,3 @@ public:
private:
int m_timer_id;
};

View file

@ -10,6 +10,27 @@
class GTableView;
class GModelNotification {
public:
enum Type {
Invalid = 0,
ModelUpdated,
};
explicit GModelNotification(Type type, const GModelIndex& index = GModelIndex())
: m_type(type)
, m_index(index)
{
}
Type type() const { return m_type; }
GModelIndex index() const { return m_index; }
private:
Type m_type { Invalid };
GModelIndex m_index;
};
class GTableModel {
public:
struct ColumnMetadata {

View file

@ -65,10 +65,15 @@ int GTableView::content_width() const
return width;
}
void GTableView::model_notification(const GModelNotification&)
{
}
void GTableView::did_update_model()
{
update_scrollbar_ranges();
update();
model_notification(GModelNotification(GModelNotification::ModelUpdated));
}
Rect GTableView::row_rect(int item_index) const

View file

@ -1,11 +1,11 @@
#pragma once
#include <LibGUI/GTableModel.h>
#include <LibGUI/GWidget.h>
#include <AK/Function.h>
#include <AK/HashMap.h>
class GScrollBar;
class GTableModel;
class GTableView : public GWidget {
public:
@ -25,6 +25,8 @@ public:
int horizontal_padding() const { return m_horizontal_padding; }
private:
virtual void model_notification(const GModelNotification&);
virtual void paint_event(GPaintEvent&) override;
virtual void resize_event(GResizeEvent&) override;
virtual void mousedown_event(GMouseEvent&) override;