- 기본 스타일을 위한 UTKDefaultStyle.uss파일을 생성했습니다. - UIToolkit 설정 구성을 위한 UTKSettings.asset 파일을 추가했습니다. - 포괄적인 색상 정의를 포함하는 다크 및 라이트 테마 스타일(UTKThemeDark.uss, UTKThemeLight.uss)을 도입했습니다. - 테마에 독립적인 레이아웃 및 크기 변수를 위한 UTKVariables.uss를 구현했습니다. - 스타일 및 이벤트 처리를 통해 열거형 선택을 위한 사용자 지정 드롭다운 컴포넌트(UTKEnumDropDown)를 개발했습니다. - 사용자 지정 스타일 및 이벤트 관리를 통해 각각 이중 입력 필드와 긴 입력 필드를 위한 UTKDoubleField 및 UTKLongField 컴포넌트를 생성했습니다.
247 lines
6.7 KiB
Plaintext
247 lines
6.7 KiB
Plaintext
/*
|
|
* NWChart.uss - NW 네트워크 다이어그램 스타일시트
|
|
*
|
|
* [개요]
|
|
* 네트워크 다이어그램(Network Diagram)의 스타일을 정의합니다.
|
|
* 노드, 연결선, 타임라인 헤더 등의 스타일을 포함합니다.
|
|
*
|
|
* [스타일 구조]
|
|
* 1. 레이아웃 기본 설정
|
|
* - :root, .nw-container, .header-container, .header, .header-timeline
|
|
* 2. 네트워크 캔버스
|
|
* - .network-canvas, .grid-layer, .lines-layer, .nodes-layer
|
|
* 3. 노드 스타일
|
|
* - .nw-node (기본), .nw-node-end (종료), .nw-node-critical (크리티컬)
|
|
* - .nw-node-completed (완료), .nw-node-dragging (드래그 중)
|
|
* 4. 연결선 스타일
|
|
* - .connection-line, .connection-arrow
|
|
* 5. 버튼 스타일
|
|
* - .expand-btn
|
|
*
|
|
* [색상 팔레트]
|
|
* - 배경: rgb(245, 245, 245) - 밝은 회색
|
|
* - 기본 노드: rgb(51, 153, 230) - 파란색
|
|
* - 종료 노드: rgb(230, 204, 51) - 노란색
|
|
* - 크리티컬 노드: rgb(230, 80, 80) - 빨간색
|
|
* - 완료 노드: rgb(80, 180, 80) - 초록색
|
|
* - 연결선: rgb(80, 80, 80) - 진한 회색
|
|
*
|
|
* [노드 상태]
|
|
* - 기본: 파란색 배경, 호버 시 밝아짐
|
|
* - 드래그 중: 1.1배 확대, 흰색 테두리, cursor: move
|
|
* - 종료/크리티컬/완료: 각각 다른 색상
|
|
*
|
|
* [연관 파일]
|
|
* - NWChart.uxml : UI 레이아웃
|
|
* - NWChart.cs : C# 컨트롤러 (노드 생성, 연결선 렌더링)
|
|
*/
|
|
|
|
/* ===================================
|
|
루트 요소 기본 설정
|
|
Flexbox 레이아웃 초기화
|
|
=================================== */
|
|
:root {
|
|
flex-grow: 1;
|
|
flex-shrink: 1;
|
|
flex-basis: 0;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* ===================================
|
|
네트워크 다이어그램 메인 컨테이너
|
|
세로 방향 Flexbox 레이아웃
|
|
=================================== */
|
|
.nw-container {
|
|
flex-grow: 1;
|
|
flex-shrink: 1;
|
|
flex-direction: column;
|
|
background-color: rgb(245, 245, 245); /* 밝은 회색 배경 */
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
height: 100%;
|
|
}
|
|
|
|
/* ===================================
|
|
헤더 영역 스타일
|
|
타임라인 헤더를 담는 컨테이너
|
|
=================================== */
|
|
.header-container {
|
|
flex-grow: 0;
|
|
height: 56px; /* 2단 헤더 높이 (36 + 18 + 2px 테두리) */
|
|
min-height: 56px;
|
|
flex-shrink: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.header {
|
|
flex-grow: 0;
|
|
height: 56px;
|
|
flex-direction: row;
|
|
min-height: 56px;
|
|
flex-shrink: 0;
|
|
position: relative;
|
|
}
|
|
|
|
.header-timeline {
|
|
flex-grow: 0;
|
|
flex-shrink: 0;
|
|
background-color: rgb(240, 240, 240); /* 밝은 회색 배경 */
|
|
height: 56px;
|
|
border-bottom-width: 1px;
|
|
border-bottom-color: rgb(141, 141, 141);
|
|
}
|
|
|
|
/* 타임라인 행 (월, 일) */
|
|
.timeline-row {
|
|
flex-grow: 0;
|
|
height: 18px; /* 기본 높이 (일 레이어) */
|
|
flex-shrink: 0;
|
|
flex-direction: row;
|
|
border-bottom-width: 1px;
|
|
border-bottom-color: rgb(255, 255, 255);
|
|
}
|
|
|
|
/* ===================================
|
|
스크롤 영역 스타일
|
|
=================================== */
|
|
.content-scroll {
|
|
flex-grow: 1;
|
|
}
|
|
|
|
/* ===================================
|
|
네트워크 캔버스 스타일
|
|
노드와 연결선이 그려지는 영역
|
|
=================================== */
|
|
.network-canvas {
|
|
flex-grow: 0;
|
|
flex-shrink: 0;
|
|
position: relative; /* 자식 요소의 절대 위치 기준 */
|
|
background-image: resource('SHI/Images/bg_task_cell_18x18'); /* 그리드 배경 */
|
|
background-repeat: repeat repeat;
|
|
background-size: 18px 18px; /* 일 단위 그리드 */
|
|
}
|
|
|
|
/* 그리드 레이어 (가장 아래) */
|
|
.grid-layer {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
}
|
|
|
|
/* 연결선 레이어 (중간) */
|
|
.lines-layer {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
}
|
|
|
|
/* 노드 레이어 (최상단) */
|
|
.nodes-layer {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
}
|
|
|
|
/* ===================================
|
|
확장 버튼 스타일
|
|
전체 화면으로 확장하는 버튼
|
|
=================================== */
|
|
.expand-btn {
|
|
position: absolute;
|
|
top: 20px;
|
|
left: 10px;
|
|
width: 36px;
|
|
height: 36px;
|
|
margin: 0;
|
|
padding: 0;
|
|
border-width: 0;
|
|
background-color: rgba(255, 255, 255, 0); /* 투명 배경 */
|
|
background-image: resource('SHI/Images/btn_expand_36');
|
|
}
|
|
|
|
/* ===================================
|
|
노드 스타일
|
|
네트워크 다이어그램의 작업 노드
|
|
=================================== */
|
|
.nw-node {
|
|
background-color: rgb(51, 153, 230); /* 파란색 (기본) */
|
|
border-radius: 4px; /* 둥근 모서리 */
|
|
border-width: 1px;
|
|
border-color: rgba(51, 51, 51, 0.5); /* 반투명 회색 테두리 */
|
|
justify-content: center;
|
|
align-items: center;
|
|
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
|
|
transition-duration: 0.15s; /* 호버 애니메이션 */
|
|
}
|
|
|
|
/* 노드 호버 상태 */
|
|
.nw-node:hover {
|
|
background-color: rgb(71, 173, 250); /* 밝은 파란색 */
|
|
}
|
|
|
|
/* 노드 드래그 중 상태 */
|
|
.nw-node-dragging {
|
|
scale: 1.1; /* 10% 확대 */
|
|
border-width: 2px;
|
|
border-color: rgb(255, 255, 255); /* 흰색 테두리 */
|
|
cursor: move; /* 이동 커서 */
|
|
}
|
|
|
|
/* 노드 라벨 스타일 */
|
|
.nw-node-label {
|
|
-unity-text-align: middle-center;
|
|
font-size: 9px;
|
|
color: rgb(255, 255, 255); /* 흰색 텍스트 */
|
|
-unity-font-style: bold;
|
|
margin: 0;
|
|
padding: 2px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis; /* 긴 텍스트 말줄임 */
|
|
white-space: nowrap;
|
|
-unity-font-definition: resource('Fonts/Pretendard/Pretendard-Bold');
|
|
}
|
|
|
|
/* ===================================
|
|
연결선 스타일
|
|
노드 간 의존성을 표시하는 선
|
|
=================================== */
|
|
.connection-line {
|
|
background-color: rgb(80, 80, 80); /* 진한 회색 */
|
|
}
|
|
|
|
.connection-arrow {
|
|
background-color: transparent; /* 화살표 머리 (투명) */
|
|
}
|
|
|
|
/* ===================================
|
|
노드 상태별 색상
|
|
=================================== */
|
|
|
|
/* 종료 노드 (노란색) */
|
|
.nw-node-end {
|
|
background-color: rgb(230, 204, 51);
|
|
}
|
|
|
|
.nw-node-end:hover {
|
|
background-color: rgb(250, 224, 71);
|
|
}
|
|
|
|
/* 크리티컬 노드 (빨간색) - 일정이 촉박한 작업 */
|
|
.nw-node-critical {
|
|
background-color: rgb(230, 80, 80);
|
|
}
|
|
|
|
.nw-node-critical:hover {
|
|
background-color: rgb(250, 100, 100);
|
|
}
|
|
|
|
/* 완료 노드 (초록색) */
|
|
.nw-node-completed {
|
|
background-color: rgb(80, 180, 80);
|
|
}
|
|
|
|
.nw-node-completed:hover {
|
|
background-color: rgb(100, 200, 100);
|
|
}
|