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

Make it possible to sort a GTableModel by column+order.

This is accomplished by putting a GSortingProxyTableModel between the model
and the view. It's pretty simplistic but it works for this use case. :^)
This commit is contained in:
Andreas Kling 2019-03-09 13:33:52 +01:00
parent 0680fe2383
commit 7d1142c7d9
16 changed files with 278 additions and 40 deletions

View file

@ -3,19 +3,6 @@
#include <stdio.h>
#include <pwd.h>
enum Column {
Icon = 0,
Name,
CPU,
State,
Priority,
User,
PID,
Linear,
Physical,
__Count
};
ProcessTableModel::ProcessTableModel()
{
setpwent();

View file

@ -8,6 +8,19 @@
class ProcessTableModel final : public GTableModel {
public:
enum Column {
Icon = 0,
Name,
CPU,
State,
Priority,
User,
PID,
Linear,
Physical,
__Count
};
ProcessTableModel();
virtual ~ProcessTableModel() override;

View file

@ -1,11 +1,15 @@
#include "ProcessTableView.h"
#include "ProcessTableModel.h"
#include <LibGUI/GSortingProxyTableModel.h>
#include <stdio.h>
ProcessTableView::ProcessTableView(GWidget* parent)
: GTableView(parent)
{
set_model(make<ProcessTableModel>());
auto process_model = make<ProcessTableModel>();
m_model = process_model.ptr();
set_model(make<GSortingProxyTableModel>(move(process_model)));
GTableView::model()->set_key_column_and_sort_order(ProcessTableModel::Column::CPU, GSortOrder::Descending);
start_timer(1000);
model().update();
}
@ -32,13 +36,3 @@ pid_t ProcessTableView::selected_pid() const
{
return model().selected_pid();
}
inline ProcessTableModel& ProcessTableView::model()
{
return static_cast<ProcessTableModel&>(*GTableView::model());
}
inline const ProcessTableModel& ProcessTableView::model() const
{
return static_cast<const ProcessTableModel&>(*GTableView::model());
}

View file

@ -21,7 +21,9 @@ protected:
private:
virtual void timer_event(GTimerEvent&) override;
ProcessTableModel& model();
const ProcessTableModel& model() const;
ProcessTableModel& model() { return *m_model; }
const ProcessTableModel& model() const { return *m_model; }
ProcessTableModel* m_model { nullptr };
};