Software Requirements Specification (SRS)
1. Purpose
본 문서는 ged 모듈의 Software Requirements Specification을 정의한다.
ged 모듈은 에디터 기능을 제공하는 라이브러리이며 다음 구성요소를 포함한다.
- Editor
- EditorState
- Tool system
- Command system
- UndoStack
- UI root 및 panel 구조
본 문서는 실제 코드에 정의된 타입과 클래스만을 기준으로 작성한다.
2. Scope
ged 모듈은 다음 기능을 제공한다.
- Editor 객체 제공
- Tool 기반 사용자 조작 처리
- Command 기반 작업 실행
- Undo / Redo 관리
- Editor 상태 관리
- UI 루트 및 패널 구조
본 모듈은 다음 타입을 사용한다.
gcore::Event
3. Module Structure
ged/ ├─ CMakeLists.txt ├─ ged.hpp │ ├─ editor/ │ ├─ editor.hpp │ ├─ editor.cpp │ └─ editor_state.hpp │ ├─ ui/ │ ├─ ui_root.hpp │ ├─ dockspace.hpp │ │ │ └─ panels/ │ ├─ viewport_panel.hpp │ ├─ outliner_panel.hpp │ └─ properties_panel.hpp │ ├─ tools/ │ ├─ tool.hpp │ ├─ select_tool.hpp │ ├─ select_tool.cpp │ ├─ transform_tool.hpp │ └─ transform_tool.cpp │ ├─ command/ │ ├─ command.hpp │ ├─ undo_stack.hpp │ ├─ undo_stack.cpp │ │ │ ├─ select_command.hpp │ └─ transform_command.hpp │ └─ tests/ └─ smoke.cpp
4. Public API
외부 모듈은 다음 방식으로 ged 모듈을 사용한다.
#include <ged/ged.hpp>
ged::Editor editor;
ged.hpp는 외부에서 사용하는 단일 엔트리 헤더이다.
5. Editor
Type
class Editor
Responsibility
Editor는 에디터 시스템의 중심 객체이다.
Editor는 다음 기능을 수행한다.
- Tool 관리
- 이벤트 라우팅
- UndoStack 관리
- EditorState 관리
Tool 설정
void set_tool(EditorState::ToolMode mode);
현재 활성 Tool을 설정한다.
Event 처리
void on_event(const gcore::Event& e);
Editor는 이벤트를 활성 Tool로 전달한다.
6. EditorState
Type
struct EditorState
Responsibility
EditorState는 에디터 상태 데이터를 저장한다.
저장되는 데이터
- selection
- active_object
- tool_mode
Fields
std::unordered_set<ObjectId> selection;
선택된 객체 집합
ObjectId active_object;
현재 활성 객체
ToolMode tool_mode;
현재 활성 Tool
7. Tool System
Tool 시스템은 사용자 입력을 처리한다.
Base Type
class Tool
Function
virtual void on_event(const gcore::Event& e) = 0;
Tool Implementations
다음 Tool 구현이 존재한다.
SelectTool TransformTool
8. Command System
Command 시스템은 작업 실행과 Undo/Redo를 지원한다.
Base Type
class Command
Required Functions
virtual void apply() = 0; virtual void revert() = 0;
Command Implementations
다음 Command가 정의되어 있다.
SelectCommand TransformCommand
9. UndoStack
UndoStack은 Command 히스토리를 관리한다.
Type
class UndoStack
Functions
void push(std::unique_ptr<Command> cmd);
void undo();
void redo();
void clear();
UndoStack Behaviour
Command push 시 다음 동작이 수행된다.
cmd->apply(); undo_.push_back(std::move(cmd));
Undo 동작
cmd->revert(); redo_.push_back(std::move(cmd));
Redo 동작
cmd->apply(); undo_.push_back(std::move(cmd));
10. UI System
UI 시스템은 에디터 패널 구조를 정의한다.
Root
UiRoot
Layout
Dockspace
Panels
다음 패널이 정의되어 있다.
ViewportPanel OutlinerPanel PropertiesPanel
11. Event Routing
Editor는 이벤트를 Tool로 전달한다.
void Editor::on_event(const gcore::Event& e) { if (active_tool_) { active_tool_->on_event(e); } }
12. Test
tests/smoke.cpp는 기본 동작 검증을 수행한다.
테스트 항목
- Editor 생성
- SelectCommand 실행
- Undo 동작
- Redo 동작
- Tool 동작
- TransformTool 실행