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_ACTIONEngine → App액션 큐잉
EVT_SET_MODIFIEDEngine → App문서 수정 상태
EVT_SELECTION_CHANGEDEngine → Widget선택 변경
EVT_COLORTABLE_CHANGEDApp → All색상 테이블 변경

c_console - 콘솔 로깅

사용자 메시지: c_console, 디버깅: c_udpmsg

사용 구분

c_console::Info("파일을 저장했습니다: {}", filePath);
c_udpmsg::printf("Debug: count = {}", count);

c_filesystem & c_paths - 파일시스템 추상화

모든 파일 I/O와 경로 관리를 담당합니다.

영역기반 경로용도주요 메서드
Rootinstall/읽기 위주root_dir(), conf_dir(), data_dir()
UserAppData/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>

타입위젯예시
wndWindow##wnd.inspector.props
btnButton##btn.dialog.ok
popPopup##pop.project_tree
inpInput##inp.search.query