HackStudio: Add TODO entries widget
This commit is contained in:
parent
26a7356e90
commit
935c7b2f4b
Notes:
sideshowbarker
2024-07-18 11:36:56 +09:00
Author: https://github.com/guerinoni Commit: https://github.com/SerenityOS/serenity/commit/935c7b2f4b1 Pull-request: https://github.com/SerenityOS/serenity/pull/6614 Reviewed-by: https://github.com/alimpfard Reviewed-by: https://github.com/itamar8910 ✅ Reviewed-by: https://github.com/linusg
5 changed files with 134 additions and 0 deletions
Userland/DevTools/HackStudio
|
@ -44,6 +44,7 @@ set(SOURCES
|
|||
ProjectTemplate.cpp
|
||||
TerminalWrapper.cpp
|
||||
ToDoEntries.cpp
|
||||
ToDoEntriesWidget.cpp
|
||||
main.cpp
|
||||
)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
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>();
|
||||
}
|
||||
|
||||
}
|
29
Userland/DevTools/HackStudio/ToDoEntriesWidget.h
Normal file
29
Userland/DevTools/HackStudio/ToDoEntriesWidget.h
Normal 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;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue