Widgets - 위젯 시스템
설계 원칙: 모든 위젯은 독립 DLL로 구현되며, 문서 없이도 워크스페이스가 정상 동작합니다. 위젯이 제거되어도 문서 편집에 영향이 없는 약한 결합(loose coupling) 구조입니다.
위젯 아키텍처
문서 (Document)
c_cadframe_document
c_cadframe_document
↓ c_async_event_manager::push()
이벤트 큐 (Event Queue)
비동기 통신
비동기 통신
↓ 이벤트 수신
위젯 DLL
독립 동적 라이브러리
독립 동적 라이브러리
↑ Lua 콜백
문서 (Document)
위젯→문서 간접 호출
위젯→문서 간접 호출
위젯 모듈
widget_project_dll 핵심
프로젝트 탐색기 및 파일 관리. 프로젝트 트리 구조와 컨텍스트 메뉴를 제공합니다.
- c_project_tree - 트리 노드 렌더링
- c_widget_project - 위젯 컨테이너
widget_console_dll
로그 출력 및 명령 입력 컨솔. c_console 메시지를 실시간으로 표시합니다.
- 로그 레벨 필터링 (Info/Warn/Error)
- Lua 명령 입력 및 실행
widget_filemgr_dll
파일 시스템 탐색기. 디렉토리 트리와 파일 목록을 제공합니다.
- c_filemgr_tree - 파일 트리 네비게이션
- 드래그&드롭 파일 열기
widget_layermgr_dll
PCB 레이어 관리기. 레이어 가시성/색상/순서를 제어합니다.
- EyeToggle - 레이어 가시성 토글
- Color Table 연동
widget_propinsp_dll 핵심
Object Inspector. 선택된 객체의 속성을 표시/편집합니다.
- PROP_DISPLAY_ORDER 기반 정렬
- 단위 인식 입력 (mil/mm 자동 변환)
widget_schlibmgr_dll
심별 라이브러리 관리기. 부품 검색 및 선택 기능을 제공합니다.
- c_getpart_dialog - 부품 선택 다이얼로그
- .imslib / .imsym 형식 지원
widget_fplibmgr_dll
풋프린트 라이브러리 관리기. 풋프린트 검색/미리보기를 제공합니다.
- c_getfootprint_dialog - 풋프린트 선택
- .imflib 데이터베이스 기반
widget_ai_dll AI
AI 어시스턴트 위젯. 데이터시트 분석, 부품 추천 등 AI 기능을 제공합니다.
- imai_service_dll 연동
- RAG VectorDB 기반 검색
통신 패턴
| 방향 | 방법 | 설명 |
|---|---|---|
| 문서 → 위젯 | c_async_event_manager::push() | 비동기 이벤트 큐를 통한 단방향 통신 |
| 위젯 → 문서 | Lua 콜백 | Lua 스크립트를 통한 간접 호출 |
| 엔진 → 위젯 | c_face::FireEvent() | JSON 문자열 기반 이벤트 |
주요 이벤트
| 이벤트 | 설명 |
|---|---|
EVT_QUEUE_ACTION | 액션 실행 요청 |
EVT_EXECUTE_ACTION | 액션 즉시 실행 |
EVT_SET_MODIFIED | 문서 수정 상태 변경 |
EVT_COLORTABLE_CHANGED | Color Table 변경 알림 |
EVT_SET_WINDOW_CURSOR | 커서 모양 변경 |