Skip to content

Commit

Permalink
LibGUI: JsonArrayModel update without invalidating indices
Browse files Browse the repository at this point in the history
Add function to update a JsonArrayModel without invalidating it. Now,
for example in the SystemMonitor in the Network tab, a selected line
will not be deselected whenever the data is updated.
  • Loading branch information
martinfalisse authored and awesomekling committed Feb 17, 2022
1 parent fd24782 commit b6c3fad
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ NetworkStatisticsWidget::NetworkStatisticsWidget()

void NetworkStatisticsWidget::update_models()
{
m_adapter_model->invalidate();
m_tcp_socket_model->invalidate();
m_udp_socket_model->invalidate();
m_adapter_model->update();
m_tcp_socket_model->update();
m_udp_socket_model->update();
}
18 changes: 18 additions & 0 deletions Userland/Libraries/LibGUI/JsonArrayModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,24 @@ void JsonArrayModel::invalidate()
did_update();
}

void JsonArrayModel::update()
{
auto file = Core::File::construct(m_json_path);
if (!file->open(Core::OpenMode::ReadOnly)) {
dbgln("Unable to open {}", file->filename());
m_array.clear();
did_update();
return;
}

auto json = JsonValue::from_string(file->read_all()).release_value_but_fixme_should_propagate_errors();

VERIFY(json.is_array());
m_array = json.as_array();

did_update(GUI::Model::UpdateFlag::DontInvalidateIndices);
}

bool JsonArrayModel::store()
{
auto file = Core::File::construct(m_json_path);
Expand Down
1 change: 1 addition & 0 deletions Userland/Libraries/LibGUI/JsonArrayModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class JsonArrayModel final : public Model {
virtual String column_name(int column) const override { return m_fields[column].column_name; }
virtual Variant data(const ModelIndex&, ModelRole = ModelRole::Display) const override;
virtual void invalidate() override;
virtual void update();

const String& json_path() const { return m_json_path; }
void set_json_path(const String& json_path);
Expand Down

0 comments on commit b6c3fad

Please sign in to comment.