Widgets - 위젯 시스템

설계 원칙: 모든 위젯은 독립 DLL로 구현되며, 문서 없이도 워크스페이스가 정상 동작합니다. 위젯이 제거되어도 문서 편집에 영향이 없는 약한 결합(loose coupling) 구조입니다.

위젯 아키텍처

문서 (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_CHANGEDColor Table 변경 알림
EVT_SET_WINDOW_CURSOR커서 모양 변경