Common DLL - 공통 인프라
common_dll은 imapp의 모든 모듈이 공유하는 핵심 인프라 라이브러리입니다. 애플리케이션 시작 시 항상 로딩되며, 액션 관리, 이벤트 시스템, 파일시스템 추상화, 다국어 지원, UI 메트릭스 등의 기반 서비스를 제공합니다.
c_action_manager - 액션 시스템
모든 사용자 명령을 통합 관리합니다. 액션 ID: action_<category>_<name>
액션 ID 형식
action_<category>_<name> (소문자). 설정: install/conf/actions/*.json
액션 실행
Ribbon UI, 단축키, 컨텍스트 메뉴, Lua 등 다양한 진입점에서 실행 가능.
액션 실행 예시
c_async_event_manager::push("EVT_QUEUE_ACTION", "action_edit_copy");
c_action_manager::Get().Execute("action_file_save");c_async_event_manager - 비동기 이벤트
모듈 간 느슨한 결합을 위한 비동기 이벤트 시스템입니다.
설계 원칙: 위젯 없이도 문서 작업이 100% 정상 동작해야 합니다.
이벤트 발행/구독
c_async_event_manager::push("EVT_SELECTION_CHANGED", jsonPayload);
c_async_event_manager::subscribe("EVT_SELECTION_CHANGED",
[this](const std::string& payload) { /* 처리 */ });주요 이벤트
| 이벤트명 | 방향 | 설명 |
|---|---|---|
EVT_QUEUE_ACTION | Engine → App | 액션 큐잉 |
EVT_SET_MODIFIED | Engine → App | 문서 수정 상태 |
EVT_SELECTION_CHANGED | Engine → Widget | 선택 변경 |
EVT_COLORTABLE_CHANGED | App → All | 색상 테이블 변경 |
c_console - 콘솔 로깅
사용자 메시지: c_console, 디버깅: c_udpmsg
사용 구분
c_console::Info("파일을 저장했습니다: {}", filePath);
c_udpmsg::printf("Debug: count = {}", count);c_filesystem & c_paths - 파일시스템 추상화
모든 파일 I/O와 경로 관리를 담당합니다.
| 영역 | 기반 경로 | 용도 | 주요 메서드 |
|---|---|---|---|
| Root | install/ | 읽기 위주 | root_dir(), conf_dir(), data_dir() |
| User | AppData/Local/ImEDA/ | 읽기/쓰기 | user_local_dir(), user_conf_dir(), user_temp_dir() |
c_filesystem API
std::string content = c_filesystem::ReadFile(path);
json j = c_filesystem::ReadJson(path);
c_filesystem::WriteJson(path, j);c_mlts - 다국어 시스템
모든 UI 문자열은 c_mlts::T()를 통해 접근합니다.
번역 파일
en.sql, ko.sql 관리.
폴백 체인
현재 언어 → English → 키 자체
c_image_manager - 이미지 관리
SVG/PNG 로딩 및 OpenGL 텍스처 관리.
c_ui_metrics - UI 치수
| 메서드 | 설명 | 기본값 |
|---|---|---|
default_font_size() | 기본 폰트 크기 | 21.0f |
dpi_scale() | DPI 스케일 | 시스템 DPI |
toggle_size() | 토글 크기 | DPI 연동 |
c_color_utils - BGRA 색상 변환
BGRA: A(31:24)|R(23:16)|G(15:8)|B(7:0). bgraToRGBA()/rgbaToBGRA()
Named Color: 복원 시
GetNamedColorStr로 재취득 필수.c_imgui_widgets - ImGui 위젯 헬퍼
| 위젯 | 용도 | 대체 |
|---|---|---|
CalcButtonWidth() | 버튼 폭 계산 | 고정 폭 |
EyeToggle() / CircleToggle() | 토글 | Checkbox |
c_imgui_input_text | 텍스트 입력 (IME) | InputText |
ID 네이밍: ##<type>.<component>.<name>
| 타입 | 위젯 | 예시 |
|---|---|---|
wnd | Window | ##wnd.inspector.props |
btn | Button | ##btn.dialog.ok |
pop | Popup | ##pop.project_tree |
inp | Input | ##inp.search.query |