1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 14:55:06 +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

@ -19,6 +19,15 @@ void ProcessTableView::timer_event(GTimerEvent&)
model().update(); model().update();
} }
void ProcessTableView::model_notification(const GModelNotification& notification)
{
if (notification.type() == GModelNotification::ModelUpdated) {
if (on_status_message)
on_status_message(String::format("%d processes", model().row_count()));
return;
}
}
pid_t ProcessTableView::selected_pid() const pid_t ProcessTableView::selected_pid() const
{ {
return model().selected_pid(); return model().selected_pid();

View file

@ -15,6 +15,9 @@ public:
Function<void(String)> on_status_message; Function<void(String)> on_status_message;
protected:
virtual void model_notification(const GModelNotification&) override;
private: private:
virtual void timer_event(GTimerEvent&) override; virtual void timer_event(GTimerEvent&) override;

View file

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

View file

@ -10,6 +10,27 @@
class GTableView; 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 { class GTableModel {
public: public:
struct ColumnMetadata { struct ColumnMetadata {

View file

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

View file

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