diff --git a/Applications/ProcessManager/ProcessTableModel.cpp b/Applications/ProcessManager/ProcessTableModel.cpp index 8d447e9543..864849dc1c 100644 --- a/Applications/ProcessManager/ProcessTableModel.cpp +++ b/Applications/ProcessManager/ProcessTableModel.cpp @@ -7,7 +7,7 @@ enum Column { State, Priority, Linear, - Committed, + Physical, CPU, Name, __Count @@ -38,23 +38,23 @@ String ProcessTableModel::column_name(int column) const case Column::State: return "State"; case Column::Priority: return "Priority"; case Column::Linear: return "Linear"; - case Column::Committed: return "Committed"; + case Column::Physical: return "Physical"; case Column::CPU: return "CPU"; case Column::Name: return "Name"; default: ASSERT_NOT_REACHED(); } } -int ProcessTableModel::column_width(int column) const +GTableModel::ColumnMetadata ProcessTableModel::column_metadata(int column) const { switch (column) { - case Column::PID: return 30; - case Column::State: return 80; - case Column::Priority: return 80; - case Column::Linear: return 80; - case Column::Committed: return 80; - case Column::CPU: return 30; - case Column::Name: return 200; + case Column::PID: return { 30, TextAlignment::CenterRight }; + case Column::State: return { 80, TextAlignment::CenterLeft }; + case Column::Priority: return { 80, TextAlignment::CenterLeft }; + case Column::Linear: return { 70, TextAlignment::CenterRight }; + case Column::Physical: return { 70, TextAlignment::CenterRight }; + case Column::CPU: return { 30, TextAlignment::CenterRight }; + case Column::Name: return { 200, TextAlignment::CenterLeft }; default: ASSERT_NOT_REACHED(); } } @@ -85,7 +85,7 @@ String ProcessTableModel::data(int row, int column) const case Column::State: return process.current_state.state; case Column::Priority: return process.current_state.priority; case Column::Linear: return pretty_byte_size(process.current_state.linear); - case Column::Committed: return pretty_byte_size(process.current_state.committed); + case Column::Physical: return pretty_byte_size(process.current_state.physical); case Column::CPU: return String::format("%d", (int)process.current_state.cpu_percent); case Column::Name: return process.current_state.name; } @@ -131,7 +131,7 @@ void ProcessTableModel::update() state.name = parts[11]; state.linear = parts[12].to_uint(ok); ASSERT(ok); - state.committed = parts[13].to_uint(ok); + state.physical = parts[13].to_uint(ok); ASSERT(ok); { diff --git a/Applications/ProcessManager/ProcessTableModel.h b/Applications/ProcessManager/ProcessTableModel.h index 009c9bcabe..4449a2bbc7 100644 --- a/Applications/ProcessManager/ProcessTableModel.h +++ b/Applications/ProcessManager/ProcessTableModel.h @@ -14,7 +14,7 @@ public: virtual int row_count() const override; virtual int column_count() const override; virtual String column_name(int column) const override; - virtual int column_width(int column) const override; + virtual ColumnMetadata column_metadata(int column) const override; virtual GModelIndex selected_index() const override; virtual void set_selected_index(GModelIndex) override; virtual String data(int row, int column) const override; @@ -30,8 +30,8 @@ private: String state; String user; String priority; - unsigned linear; - unsigned committed; + size_t linear; + size_t physical; float cpu_percent; }; diff --git a/LibGUI/GTableModel.h b/LibGUI/GTableModel.h index c1548718da..7a5d71e815 100644 --- a/LibGUI/GTableModel.h +++ b/LibGUI/GTableModel.h @@ -5,18 +5,24 @@ #include #include #include +#include class GTableView; class GTableModel { public: + struct ColumnMetadata { + int preferred_width { 0 }; + TextAlignment text_alignment { TextAlignment::CenterLeft }; + }; + virtual ~GTableModel(); virtual int row_count() const = 0; virtual int column_count() const = 0; virtual String row_name(int) const { return { }; } virtual String column_name(int) const { return { }; } - virtual int column_width(int) const { return 0; } + virtual ColumnMetadata column_metadata(int) const { return { }; } virtual String data(int row, int column) const = 0; virtual void set_selected_index(GModelIndex) { } virtual GModelIndex selected_index() const { return GModelIndex(); } diff --git a/LibGUI/GTableView.cpp b/LibGUI/GTableView.cpp index b2c4011128..6d236ac9e1 100644 --- a/LibGUI/GTableView.cpp +++ b/LibGUI/GTableView.cpp @@ -87,9 +87,11 @@ void GTableView::paint_event(GPaintEvent&) int x_offset = 0; for (int column_index = 0; column_index < m_model->column_count(); ++column_index) { - Rect cell_rect(horizontal_padding + x_offset, y, m_model->column_width(column_index), item_height()); - painter.draw_text(cell_rect, m_model->data(row_index, column_index), TextAlignment::CenterLeft, text_color); - x_offset += m_model->column_width(column_index) + horizontal_padding; + auto column_metadata = m_model->column_metadata(column_index); + int column_width = column_metadata.preferred_width; + Rect cell_rect(horizontal_padding + x_offset, y, column_width, item_height()); + painter.draw_text(cell_rect, m_model->data(row_index, column_index), column_metadata.text_alignment, text_color); + x_offset += column_width + horizontal_padding; } ++painted_item_index; }; @@ -103,9 +105,11 @@ void GTableView::paint_event(GPaintEvent&) painter.fill_rect({ 0, 0, width(), header_height() }, Color::LightGray); int x_offset = 0; for (int column_index = 0; column_index < m_model->column_count(); ++column_index) { - Rect cell_rect(x_offset, 0, m_model->column_width(column_index) + horizontal_padding, item_height()); + auto column_metadata = m_model->column_metadata(column_index); + int column_width = column_metadata.preferred_width; + Rect cell_rect(x_offset, 0, column_width + horizontal_padding, item_height()); painter.draw_text(cell_rect.translated(horizontal_padding, 0), m_model->column_name(column_index), TextAlignment::CenterLeft, Color::Black); - x_offset += m_model->column_width(column_index) + horizontal_padding; + x_offset += column_width + horizontal_padding; painter.draw_line(cell_rect.top_left(), cell_rect.bottom_left(), Color::White); painter.draw_line(cell_rect.top_right(), cell_rect.bottom_right(), Color::DarkGray); } diff --git a/SharedGraphics/Painter.h b/SharedGraphics/Painter.h index 62c5303c33..022a9e27e7 100644 --- a/SharedGraphics/Painter.h +++ b/SharedGraphics/Painter.h @@ -4,6 +4,7 @@ #include "Point.h" #include "Rect.h" #include "Size.h" +#include #include class CharacterBitmap; @@ -16,8 +17,6 @@ class GWidget; class GWindow; #endif -enum class TextAlignment { TopLeft, CenterLeft, Center, CenterRight }; - class Painter { public: #ifdef USERLAND diff --git a/SharedGraphics/TextAlignment.h b/SharedGraphics/TextAlignment.h new file mode 100644 index 0000000000..da7fa18021 --- /dev/null +++ b/SharedGraphics/TextAlignment.h @@ -0,0 +1,3 @@ +#pragma once + +enum class TextAlignment { TopLeft, CenterLeft, Center, CenterRight };