# 画面設計書 2-QuickInfo オプション設定画面

## 概要

本ドキュメントは、Visual Studio の F# 言語サービスにおける QuickInfo（ツールチップ・ホバー情報）機能の動作設定を行う「QuickInfo オプション設定画面」の設計仕様を記述するものです。

### 本画面の処理概要

この画面は、F# コードエディタにおける QuickInfo 機能（コード上にマウスをホバーした際に表示されるツールチップ情報）の表示スタイルや内容をカスタマイズするためのオプションページです。

**業務上の目的・背景**：F# 開発者がコードのホバー情報表示機能を自身の好みに合わせてカスタマイズするために必要な画面です。ナビゲーションリンクの下線スタイル、説明文の幅、remarks セクションの表示可否を設定することで、コードリーディング時の情報取得効率を最適化できます。視覚的な好みや画面サイズに応じた調整が可能です。

**画面へのアクセス方法**：Visual Studio のメニューバーから「ツール」→「オプション」を選択し、オプションダイアログを開きます。左側のツリーから「テキストエディター」→「F#」→「Quick Info」を選択することで本画面にアクセスできます。

**主要な操作・処理内容**：
1. ナビゲーションリンクの表示有無設定
2. ナビゲーションリンクの下線スタイル選択（実線、点線、破線）
3. 説明文の推奨幅設定（文字数単位）
4. remarks セクションの表示設定

**画面遷移**：
- 遷移元：Visual Studio オプションダイアログ
- 遷移先画面：同じ F# オプションカテゴリ内の他のページ（IntelliSense、Code Fixes、Advanced、Performance、Formatting）へタブ切替で遷移可能

**権限による表示制御**：特になし。Visual Studio のユーザー設定として保存され、すべてのユーザーが設定を変更可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 62 | QuickInfo | 主機能 | ホバー時の情報表示機能の設定（ナビゲーションリンクのスタイル、説明幅、remarks の表示） |

## 画面種別

設定画面（オプションページ）

## URL/ルーティング

Visual Studio 内部ダイアログのため、URLは存在しません。
- GUIDパス: `{Guids.quickInfoOptionPageIdString}`
- オプションツリーパス: `テキストエディター` > `F#` > `Quick Info`

## 入出力項目

| 項目名 | 項目種別 | データ型 | 必須 | 説明 |
|--------|----------|----------|------|------|
| DisplayLinks | 入力（チェックボックス） | bool | - | ナビゲーションリンクを表示するかどうか |
| UnderlineStyle | 入力（ラジオボタン） | QuickInfoUnderlineStyle | - | ナビゲーションリンクの下線スタイル（Solid / Dot / Dash） |
| DescriptionWidth | 入力（テキストボックス） | int option | - | 説明文の推奨幅（文字数） |
| ShowRemarks | 入力（チェックボックス） | bool | - | Quick Info に remarks セクションを表示するかどうか |

## 表示項目

| 項目名 | 表示形式 | 説明 |
|--------|----------|------|
| Navigation links グループ | GroupBox | ナビゲーションリンク関連の設定をグループ化 |
| リンク表示設定 | CheckBox | `displayLinks` - ナビゲーションリンクの表示切替 |
| 実線下線 | RadioButton | `solid` - Solid underline スタイル |
| 点線下線 | RadioButton | `dot` - Dot underline スタイル |
| 破線下線 | RadioButton | `dash` - Dash underline スタイル |
| Formatting グループ | GroupBox | フォーマット関連の設定をグループ化 |
| 説明幅設定 | Label + TextBox | `descriptionWidth` - 文字数単位での幅設定 |
| remarks 表示設定 | CheckBox | `showRemarks` - remarks セクションの表示切替 |

## イベント仕様

### 1-ナビゲーションリンク表示チェック変更

ユーザーが「ナビゲーションリンクを表示」チェックボックスをオフにした場合、下線スタイルを選択するラジオボタン群が無効化されます（IsEnabled がバインドされているため）。

### 2-設定値の保存

OK ボタン押下時、設定値は Visual Studio の SettingsStore を通じて永続化されます。設定は `QuickInfoOptions` レコード型として管理されます。

### 3-設定値の読み込み

画面表示時、`EditorOptions` クラスの `QuickInfo` プロパティから現在の設定値が読み込まれ、各コントロールにバインドされます。

## データベース更新仕様

本画面はデータベースを使用しません。設定値は Visual Studio のユーザー設定ストア（レジストリまたは設定ファイル）に保存されます。

### 操作別データベース影響一覧

該当なし（Visual Studio 内部設定ストアを使用）

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|--------------|------|----------------|----------|
| - | - | 本画面固有のメッセージはありません | - |

## 例外処理

| 例外状況 | 処理内容 |
|----------|----------|
| 設定読み込み失敗 | デフォルト値（QuickInfoOptions.Default）が使用される |
| 設定保存失敗 | Visual Studio 標準のエラーハンドリングに従う |
| 無効な幅入力 | 整数として解釈できない値は無視される |

## 備考

- 本画面は WPF UserControl として実装されています（`QuickInfoOptionControl.xaml`）
- 設定値は `QuickInfoOptions` レコード型で管理され、MEF を通じて他のコンポーネントからアクセス可能です
- デフォルト値は以下の通りです：
  - DisplayLinks: true
  - UnderlineStyle: Solid
  - DescriptionWidth: None（未設定）
  - ShowRemarks: true
- 説明幅の設定は、シグネチャを指定幅に合わせて改行するために使用されます

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、画面で扱う設定データの構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | `QuickInfoOptions` レコード型（46-60行目）の定義を確認。4つのフィールドとデフォルト値を把握する |
| 1-2 | EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | `QuickInfoUnderlineStyle` 列挙型（39-43行目）の3つの値を確認 |

**読解のコツ**: `DescriptionWidth` フィールドは `int option` 型で、未設定の場合は `None` となります。

#### Step 2: エントリーポイントを理解する

オプションページとして Visual Studio に登録される仕組みを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | `QuickInfoOptionPage` クラス（198-211行目）が Visual Studio オプションページとして登録される |

**主要処理フロー**:
1. **198行目**: `[<Guid(Guids.quickInfoOptionPageIdString)>]` 属性で GUID を指定
2. **199行目**: `AbstractOptionPage<QuickInfoOptions>` を継承してオプションページを定義
3. **202-211行目**: `CreateView()` メソッドで UI コントロールを生成し、ラジオボタンとチェックボックスのバインディングを設定

#### Step 3: UI 定義を理解する

XAML で定義された UI コントロールの構造を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | QuickInfoOptionControl.xaml | `vsintegration/src/FSharp.UIResources/QuickInfoOptionControl.xaml` | UserControl の全体構造（GroupBox、CheckBox、RadioButton、TextBox の配置） |

**主要処理フロー**:
- **23-42行目**: Navigation links グループ内のコントロール定義
- **26行目**: `displayLinks` チェックボックス
- **29-40行目**: 下線スタイル選択のラジオボタン（displayLinks の IsChecked にバインドされた IsEnabled）
- **44-51行目**: Formatting グループ内の説明幅設定
- **53-55行目**: `showRemarks` チェックボックス

#### Step 4: リソース文字列を理解する

UI に表示される文字列リソースを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | Strings.resx | `vsintegration/src/FSharp.UIResources/Strings.resx` | `Navigation_links`、`Solid_underline`、`Dot_underline`、`Dash_underline`、`Preferred_description_width_in_characters` などのリソースキー |

### プログラム呼び出し階層図

```
Visual Studio オプションダイアログ
    │
    ├─ QuickInfoOptionPage (EditorOptions.fs:198-211)
    │      │
    │      └─ CreateView()
    │             │
    │             ├─ QuickInfoOptionControl (XAML)
    │             │      │
    │             │      ├─ DataContext: QuickInfoOptions
    │             │      └─ バインディング設定
    │             │
    │             └─ bindRadioButton / bindCheckBox (UIHelpers)
    │
    └─ EditorOptions (EditorOptions.fs:151-174)
           │
           ├─ QuickInfo プロパティ (164行目)
           └─ SettingsStore.Get<QuickInfoOptions>()
```

### データフロー図

```
[入力]                    [処理]                         [出力]

ユーザー操作 ───▶ QuickInfoOptionControl ───▶ QuickInfoOptions
(CheckBox/                     │                         │
 RadioButton/                  │                         │
 TextBox)                      ▼                         ▼
                    SettingsStore.Register() ───▶ Visual Studio 設定ストア
                               │
                               ▼
                    EditorOptions.QuickInfo ───▶ QuickInfo プロバイダ
                                                 (ホバー情報表示)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| QuickInfoOptionControl.xaml | `vsintegration/src/FSharp.UIResources/QuickInfoOptionControl.xaml` | XAML | UI レイアウト定義 |
| EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | ソース | オプションデータ構造とオプションページ登録 |
| Strings.resx | `vsintegration/src/FSharp.UIResources/Strings.resx` | リソース | UI 表示文字列の定義 |
| OptionPageStyle.xaml | `vsintegration/src/FSharp.UIResources/OptionPageStyle.xaml` | XAML | 共通スタイル定義 |
| UIHelpers.fs | `vsintegration/src/FSharp.Editor/Options/UIHelpers.fs` | ソース | データバインディングヘルパー（bindRadioButton, bindCheckBox, bindDescriptionWidthTextBox） |
| SettingsStore.fs | `vsintegration/src/FSharp.Editor/Options/SettingsStore.fs` | ソース | 設定の永続化処理 |
