Skip to content

[FR-09] カスタムGUI(メイン画面/設定画面)実装 #72

@cos-overclock

Description

@cos-overclock

概要

docs/product.md の FR-09(カスタムGUI)を実装する。

現状の src/ui/window.rs は FR-05 検証用のヘルパーUI(単一画面)で、基準UIとして定義されている2画面構成(メイン画面 / 設定画面)および設定反映イベント契約(OpenSettings / SaveSettings / DiscardSettings)が未実装。

目的

  • FR-09: プラグイン独自GUIウィンドウを、基準UI(docs/image/*/screen.png)準拠で提供する
  • メイン画面と設定画面を同一UI状態で切り替え可能にする
  • 設定保存後にメイン画面ヘッダー(API状態・既定モデル表示)へ同期反映する

タスク分解

  • 1. 画面遷移とUI状態基盤を追加

  • ui::stateprovider_status / settings_tab / settings_dirty を追加

  • メイン画面 <-> 設定画面の遷移状態(OpenSettings, CloseSettings)を実装

  • 設定編集用のドラフト状態と、保存済み状態の差分管理を実装

  • 2. メイン画面レイアウトを基準UIへ再構成

  • Header(ロゴ、api_status_badgesettings_button)を実装

  • Prompt/Mode/Model、Input Tracks、Generated Patterns、Params、Piano Roll、Footer のエリア分割を実装

  • 既存の Generate フロー(on_generate_clicked)を新レイアウトへ移植

  • 未実装機能エリアはプレースホルダー/無効化状態を明示して段階導入可能にする

  • 3. 設定画面(API / Model Settings)を実装

  • Sidebar(API Keys / MIDI Settings / General)のタブ切替を実装

  • Provider Configuration(Anthropic/OpenAI/Custom)の入力UIを実装

  • Model Preferences(default model / context window)UIを実装

  • Footer(Cancel, Save & Close)と settings_dirty 連動を実装

  • 4. 設定反映と永続化を実装

  • SaveSettings 成功時にメイン画面ヘッダーの API状態とモデル表示を同期

  • 設定値(APIキー本体以外)の保存/復元を実装(settings_store 相当)

  • DiscardSettings でドラフト破棄してメイン画面へ戻る挙動を実装

  • 5. CLAP GUI連携をFR-09観点で整備

  • plugin::clap_adapter::gui_extension のサイズ定義とヘルパー実ウィンドウサイズを整合

  • show/hide/destroy のライフサイクルでヘルパープロセスが安定することを確認

  • ホスト起動時に独自GUIが一貫して表示される手順を確認(主要ホスト1種以上)

  • 6. テスト整備

  • Unit: settings_tab 切替 / settings_dirty 遷移 / 保存・破棄の状態遷移テストを追加

  • Integration/UI: Save & Close 後のヘッダー同期(API状態・モデル)を検証

  • Integration/UI: Cancel で未保存変更が破棄されることを検証

  • 既存 cargo fmt / cargo clippy --all-targets --all-features / cargo test を通す

  • 7. ドキュメント更新

  • docs/software-architecture.md のUI責務記述を実装状態に同期

  • docs/software-detailed-design.md の 4.7 UIコンポーネント設計とイベント契約を実装差分に同期

  • 必要に応じて FR-09 の進捗チェックリストを追記

受け入れ条件

  • メイン画面と設定画面を settings_button から遷移できる
  • 設定画面で API Keys / MIDI Settings / General の切替ができる
  • Save & Close で設定が反映され、ヘッダーAPI状態とモデル表示が更新される
  • Cancel で未保存変更が破棄される
  • CLAPホストから Sonant 独自GUIウィンドウが表示される
  • cargo fmt / cargo clippy --all-targets --all-features / cargo test が通る

参照

  • docs/product.md(FR-09、10. GUI構成)
  • docs/software-architecture.md(4.5 UI基準画面と責務分割)
  • docs/software-detailed-design.md(4.7 UIコンポーネント設計 / 4.7.3 UIイベント契約)
  • src/ui/window.rs(現行FR-05中心UI)
  • src/plugin/clap_adapter/gui_extension.rs(CLAP GUI起動・表示制御)

Sub-issues

Metadata

Metadata

Assignees

Labels

architectureCore architecture and abstractionsenhancementNew feature or requesttestTesting and quality assuranceuiUser interface and UX

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions