mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 20:28:11 +00:00
HackStudio: Add TODO entries widget
This commit is contained in:
parent
26a7356e90
commit
935c7b2f4b
5 changed files with 134 additions and 0 deletions
96
Userland/DevTools/HackStudio/ToDoEntriesWidget.cpp
Normal file
96
Userland/DevTools/HackStudio/ToDoEntriesWidget.cpp
Normal file
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Federico Guerinoni <guerinoni.federico@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "ToDoEntriesWidget.h"
|
||||
#include "HackStudio.h"
|
||||
#include "Project.h"
|
||||
#include "ToDoEntries.h"
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <LibGUI/BoxLayout.h>
|
||||
#include <LibGUI/Button.h>
|
||||
#include <LibGUI/TableView.h>
|
||||
#include <LibGUI/TextBox.h>
|
||||
#include <LibGfx/FontDatabase.h>
|
||||
|
||||
namespace HackStudio {
|
||||
|
||||
class ToDoEntriesModel final : public GUI::Model {
|
||||
public:
|
||||
enum Column {
|
||||
Filename,
|
||||
Text,
|
||||
__Count
|
||||
};
|
||||
|
||||
explicit ToDoEntriesModel(const Vector<ToDoEntryPair>&& matches)
|
||||
: m_matches(move(matches))
|
||||
{
|
||||
}
|
||||
|
||||
virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return m_matches.size(); }
|
||||
virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; }
|
||||
|
||||
virtual String column_name(int column) const override
|
||||
{
|
||||
switch (column) {
|
||||
case Column::Filename:
|
||||
return "Filename";
|
||||
case Column::Text:
|
||||
return "Text";
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
virtual GUI::Variant data(const GUI::ModelIndex& index, GUI::ModelRole role) const override
|
||||
{
|
||||
if (role == GUI::ModelRole::TextAlignment)
|
||||
return Gfx::TextAlignment::CenterLeft;
|
||||
if (role == GUI::ModelRole::Font) {
|
||||
if (index.column() == Column::Text)
|
||||
return Gfx::FontDatabase::default_fixed_width_font();
|
||||
return {};
|
||||
}
|
||||
if (role == GUI::ModelRole::Display) {
|
||||
auto& match = m_matches.at(index.row());
|
||||
switch (index.column()) {
|
||||
case Column::Filename:
|
||||
return match.filename;
|
||||
case Column::Text:
|
||||
return match.comment;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
virtual void update() override { }
|
||||
virtual GUI::ModelIndex index(int row, int column = 0, const GUI::ModelIndex& = GUI::ModelIndex()) const override
|
||||
{
|
||||
if (row < 0 || row >= (int)m_matches.size())
|
||||
return {};
|
||||
if (column < 0 || column >= Column::__Count)
|
||||
return {};
|
||||
return create_index(row, column, &m_matches.at(row));
|
||||
}
|
||||
|
||||
private:
|
||||
Vector<ToDoEntryPair> m_matches;
|
||||
};
|
||||
|
||||
void ToDoEntriesWidget::refresh()
|
||||
{
|
||||
const auto& entries = ToDoEntries::the().get_entries();
|
||||
auto results_model = adopt_ref(*new ToDoEntriesModel(move(entries)));
|
||||
m_result_view->set_model(results_model);
|
||||
}
|
||||
|
||||
ToDoEntriesWidget::ToDoEntriesWidget()
|
||||
{
|
||||
set_layout<GUI::VerticalBoxLayout>();
|
||||
m_result_view = add<GUI::TableView>();
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue