mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:02:45 +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
	
	 Andreas Kling
						Andreas Kling