HackStudio: Add TODO entries widget

This commit is contained in:
Federico Guerinoni 2021-05-22 14:14:49 +02:00 committed by Linus Groh
parent 26a7356e90
commit 935c7b2f4b
Notes: sideshowbarker 2024-07-18 11:36:56 +09:00
5 changed files with 134 additions and 0 deletions

View file

@ -44,6 +44,7 @@ set(SOURCES
ProjectTemplate.cpp
TerminalWrapper.cpp
ToDoEntries.cpp
ToDoEntriesWidget.cpp
main.cpp
)

View file

@ -22,6 +22,7 @@
#include "Project.h"
#include "ProjectDeclarations.h"
#include "TerminalWrapper.h"
#include "ToDoEntries.h"
#include <AK/LexicalPath.h>
#include <AK/StringBuilder.h>
#include <Kernel/API/InodeWatcherEvent.h>
@ -867,6 +868,7 @@ void HackStudioWidget::create_action_tab(GUI::Widget& parent)
};
m_find_in_files_widget = m_action_tab_widget->add_tab<FindInFilesWidget>("Find in files");
m_todo_entries_widget = m_action_tab_widget->add_tab<ToDoEntriesWidget>("TODO");
m_terminal_wrapper = m_action_tab_widget->add_tab<TerminalWrapper>("Build", false);
m_debug_info_widget = m_action_tab_widget->add_tab<DebugInfoWidget>("Debug");
m_disassembly_widget = m_action_tab_widget->add_tab<DisassemblyWidget>("Disassembly");
@ -875,6 +877,10 @@ void HackStudioWidget::create_action_tab(GUI::Widget& parent)
m_diff_viewer->set_content(original_content, diff);
set_edit_mode(EditMode::Diff);
});
ToDoEntries::the().on_update = [this]() {
m_todo_entries_widget->refresh();
};
}
void HackStudioWidget::create_project_tab(GUI::Widget& parent)

View file

@ -19,6 +19,7 @@
#include "Project.h"
#include "ProjectFile.h"
#include "TerminalWrapper.h"
#include "ToDoEntriesWidget.h"
#include <LibGUI/ActionGroup.h>
#include <LibGUI/Scrollbar.h>
#include <LibGUI/Splitter.h>
@ -143,6 +144,7 @@ private:
RefPtr<TerminalWrapper> m_terminal_wrapper;
RefPtr<Locator> m_locator;
RefPtr<FindInFilesWidget> m_find_in_files_widget;
RefPtr<ToDoEntriesWidget> m_todo_entries_widget;
RefPtr<DebugInfoWidget> m_debug_info_widget;
RefPtr<DisassemblyWidget> m_disassembly_widget;
RefPtr<Threading::Thread> m_debugger_thread;

View 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>();
}
}

View file

@ -0,0 +1,29 @@
/*
* Copyright (c) 2021, Federico Guerinoni <guerinoni.federico@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibGUI/Button.h>
#include <LibGUI/TableView.h>
#include <LibGUI/TextBox.h>
#include <LibGUI/Widget.h>
namespace HackStudio {
class ToDoEntriesWidget final : public GUI::Widget {
C_OBJECT(ToDoEntriesWidget)
public:
virtual ~ToDoEntriesWidget() override { }
void refresh();
private:
explicit ToDoEntriesWidget();
RefPtr<GUI::TableView> m_result_view;
};
}