mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 13:05:09 +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:
parent
322f49caec
commit
bff5b71467
6 changed files with 41 additions and 2 deletions
|
@ -19,6 +19,15 @@ void ProcessTableView::timer_event(GTimerEvent&)
|
|||
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
|
||||
{
|
||||
return model().selected_pid();
|
||||
|
|
|
@ -15,6 +15,9 @@ public:
|
|||
|
||||
Function<void(String)> on_status_message;
|
||||
|
||||
protected:
|
||||
virtual void model_notification(const GModelNotification&) override;
|
||||
|
||||
private:
|
||||
virtual void timer_event(GTimerEvent&) override;
|
||||
|
||||
|
|
|
@ -165,4 +165,3 @@ public:
|
|||
private:
|
||||
int m_timer_id;
|
||||
};
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue