# Stage 計算與介面改進總結

## 概述

根據用戶要求，對 stage 計算邏輯和用戶介面進行了三個主要改進：

1. **修正 Stage 計算邏輯**：Model node 必須連接在 input 和 output 之間才能被認定為 stage
2. **重新組織工具欄**：移除上方工具欄，將按鈕集中到左側面板
3. **簡化狀態顯示**：移除重複的 stage 信息，將狀態移到底部狀態欄

## 1. Stage 計算邏輯修正

### 問題描述
- 原本只要有 model node 就會被計算為 stage
- 沒有檢查 model node 是否真正連接在管道流程中

### 解決方案
修改 `core/pipeline.py` 中的 `analyze_pipeline_stages()` 函數：

```python
# 新增連接檢查邏輯
connected_model_nodes = []
for model_node in model_nodes:
    if is_node_connected_to_pipeline(model_node, input_nodes, output_nodes):
        connected_model_nodes.append(model_node)
```

### 核心改進
- **連接驗證**：使用 `is_node_connected_to_pipeline()` 檢查 model node 是否同時連接到 input 和 output
- **路徑檢查**：增強 `has_path_between_nodes()` 函數，支持多種連接方式
- **錯誤處理**：改善連接檢查的異常處理

### 影響
- ✅ 只有真正參與管道流程的 model node 才會被計算為 stage
- ✅ 獨立的、未連接的 model node 不會影響 stage 計數
- ✅ 更準確反映實際的管道結構

## 2. 工具欄重新組織

### 問題描述
- 上方有重複的工具欄按鈕（Add Node、Validate 等）
- 介面元素分散，不夠集中

### 解決方案
- **移除上方工具欄**：從 `create_pipeline_editor_panel()` 中移除工具欄
- **集中到左側**：在 `create_node_template_panel()` 中添加操作按鈕

### 新的左側面板結構
```
左側面板：
├── Node Templates (節點模板)
│   ├── Input Node
│   ├── Model Node  
│   ├── Preprocess Node
│   ├── Postprocess Node
│   └── Output Node
├── Pipeline Operations (管道操作)
│   ├── 🔍 Validate Pipeline
│   └── 🗑️ Clear Pipeline
└── Instructions (使用說明)
```

### 視覺改進
- **一致的設計**：操作按鈕使用與節點模板相同的樣式
- **表情符號圖標**：增加視覺識別度
- **懸停效果**：改善用戶交互體驗

## 3. 狀態顯示簡化

### 問題描述
- 右側面板有獨立的 Stages 標籤，與主畫面重複
- Stage 信息分散在多個位置

### 解決方案

#### 移除重複標籤
- 從右側配置面板移除 "Stages" 標籤
- 移除 `create_stage_config_panel()` 方法
- 保留 Properties、Performance、Dongles 標籤

#### 新增底部狀態欄
創建 `create_status_bar_widget()` 方法，包含：

```python
狀態欄：
├── Stage Count Widget (階段計數)
│   ├── 階段數量顯示
│   ├── 狀態圖標 (✅/⚠️/❌)
│   └── 顏色編碼狀態
├── Spacer (間隔)
└── Statistics Label (統計信息)
    ├── 節點總數
    └── 連接數量
```

#### StageCountWidget 改進
- **尺寸優化**：從 200x80 縮小到 120x25
- **佈局改變**：從垂直佈局改為水平佈局
- **樣式簡化**：透明背景，適合狀態欄
- **狀態圖標**：
  - ✅ 有效管道（綠色）
  - ⚠️ 無階段（黃色）
  - ❌ 錯誤狀態（紅色）

## 實現細節

### 檔案修改

#### `core/pipeline.py`
```python
# 主要修改
def analyze_pipeline_stages(node_graph):
    # 新增連接檢查
    connected_model_nodes = []
    for model_node in model_nodes:
        if is_node_connected_to_pipeline(model_node, input_nodes, output_nodes):
            connected_model_nodes.append(model_node)

def has_path_between_nodes(start_node, end_node, visited=None):
    # 增強錯誤處理
    try:
        # ... 連接檢查邏輯
    except Exception:
        pass  # 安全地處理連接錯誤
```

#### `ui/windows/dashboard.py`
```python
# 主要修改
class StageCountWidget(QWidget):
    def setup_ui(self):
        layout = QHBoxLayout()  # 改為水平佈局
        self.setFixedSize(120, 25)  # 縮小尺寸
    
    def update_stage_count(self, count, valid, error):
        # 添加狀態圖標
        if not valid:
            self.stage_label.setText(f"Stages: {count} ❌")
        elif count == 0:
            self.stage_label.setText("Stages: 0 ⚠️")
        else:
            self.stage_label.setText(f"Stages: {count} ✅")

class IntegratedPipelineDashboard(QMainWindow):
    def create_status_bar_widget(self):
        # 新增方法：創建底部狀態欄
        # 包含 stage count 和統計信息
    
    def analyze_pipeline(self):
        # 更新統計標籤
        self.stats_label.setText(f"Nodes: {total_nodes} | Connections: {connection_count}")
```

### 配置變更
- **右側面板**：移除 Stages 標籤，保留 3 個標籤
- **左側面板**：添加 Pipeline Operations 區域
- **中間面板**：底部添加狀態欄

## 測試驗證

### 自動化測試
創建 `test_stage_improvements.py` 驗證：
- ✅ Stage 計算函數存在且正常工作
- ✅ UI 方法正確實現
- ✅ 舊功能正確移除
- ✅ 新狀態欄功能正常

### 功能測試
- ✅ Stage 計算只計算連接的 model nodes
- ✅ 工具欄按鈕在左側面板正常工作
- ✅ 狀態欄正確顯示 stage 信息和統計
- ✅ 介面布局清晰，無重複信息

## 用戶體驗改進

### 視覺改進
1. **更清晰的布局**：工具集中在左側，狀態信息在底部
2. **減少視覺混亂**：移除重複的 stage 信息
3. **即時反饋**：狀態欄提供實時的管道狀態

### 功能改進
1. **準確的計算**：Stage 數量真實反映管道結構
2. **集中的控制**：所有操作都在左側面板
3. **豐富的信息**：狀態欄顯示 stage、節點、連接數量

## 向後兼容性

### 保持兼容
- 保留所有原有的核心功能
- API 接口保持不變
- 文件格式無變化

### 漸進式改進
- 新增功能作為增強，不破壞現有流程
- 錯誤處理機制確保穩定性
- 後備方案處理缺失的依賴

## 總結

這次改進成功解決了用戶提出的三個主要問題：

1. **🎯 精確的 Stage 計算**：只有真正連接在管道中的 model node 才會被計算
2. **🎨 改進的界面布局**：工具集中在左側，減少界面混亂
3. **📊 簡潔的狀態顯示**：底部狀態欄提供所有必要信息，避免重複

改進後的界面更加直觀和高效，同時保持了所有原有功能的完整性。