本文へスキップ

Workflow部品

アプリ側で管理する処理に進捗、空・利用不可状態、通知、navigation、responsive toolbarを加える部品です。

進捗と状態表示を含むWorkflow部品の画面。

Workflow — 進捗と状態の表示 · Galleryの操作映像を開く

#include <imkit/workflow.h>
void DrawImportProgress() {
const imkit::CircularProgressView progress{
0.42f, "42%", "素材を読み込み中"
};
imkit::CircularProgress("asset-import", progress);
}

例の種別: 公開headerの型を使う完結した関数例です。アプリのImGuiフレーム中に呼び、表示文字列は描画が終わるまで保持します。

imkit::imkitをlinkします。進捗値、取消、通知queue、texture、保存はアプリ側で管理します。

状態を描画する部品です。worker実行、完了判定、通知の保存は行いません。


<imkit/workflow.h> は、マルチステップのウィザード、進捗表示、画像ビューア、レスポンシブツールバー、および通知システムなど、制作ツールのワークフローを支える汎用UIコンポーネント群を提供します。


  • データとキューはホスト所有: 表示ラベル、画像テクスチャ、進捗率、通知キューはすべてホスト側が所有し、ImKit は描画時に借用(非所有ポインタ/参照)します。ChoiceGroupも候補と任意のIconAtlasを借用し、現在の選択値は変更せず、候補IDによる要求だけを返します。
  • イベントのバッファリング: ユーザー操作(ステップの切替、タイルのリサイズ等)はホスト提供のイベントバッファに書き込まれ、フレーム終了後にホストが処理します。

カテゴリ コンポーネント / API 主な役割と動作仕様
ナビゲーション StepNavigator
NavigationRail
ステップ形式の進行バー、縦型ナビゲーションレール。選択要求を返却
WorkspaceTabs アイコンとラベル付きのワークスペースタブ。狭幅時は自動でコンボボックスへ縮約
ChoiceGroup 見出し付きカードに候補を1〜3列で表示。列数を幅に合わせ、選択要求の安定IDを返す
ツリー・設定 HierarchyGroupHeader
HierarchyRow
シーングラフ等の階層行。表示/非表示、ロック、選択状態のトグル。行全幅で選択でき、長い名前は省略表示。accentColor で種類ごとの色線を指定できる
BeginInspectorCard
EndInspectorCard
関連コントロールを美しくまとめる境界線付きカードコンテナ
BeginCollapsibleInspectorCard
EndCollapsibleInspectorCard
開閉状態をホストが持つインスペクターカード。Beginがtrueを返したときだけEndを呼ぶ。閉じた内容は描画しない
フィードバック StatusBadge
InlineAlert
成功・警告・エラーを色とアイコンで示すアラートコンポーネント
ToastRegion 画面隅にスタック表示されるトースト通知領域(フォーカスを奪わない設計)
EmptyState
UnavailableState
データが存在しない時やオフライン時の案内画面(アイコン・見出し・再試行ボタン)
Progress
ProgressTrack
状態・割合・補足を共通表示する細い丸角バー。不定時は短い区間を表示
StageProgress 段階の状態を表示し、狭幅では現在工程と n/total に縮約
TaskProgressCard 通常・compactの処理概要カード。操作の安定IDをホストへ返す
CircularProgress 円型の進捗インジケータ。値が負または非有限なら値なし表示
画像・ビューア BeginImageViewport
EndImageViewport
パン・ズーム対応の画像表示キャンバス
ResolveImagePlacement 画像の Fit(全体表示)/ Fill(全域切り抜き)/ Stretch(引き伸ばし)の座標・UV計算
DrawOverlay 画像上の点、ポリライン、矩形、円、ラベル等の注釈描画
PreviewTile
ResizableTileStrip
水平/垂直スクロール可能なリサイズ対応プレビュータイル列

ChoiceGroupのボタン高は通常の入力欄と同じで、カードの内側には8pxの余白を取ります。最長のラベル、任意のアイコン、選択マークが収まらない場合は列数を減らします。ラベル内の##以降はImGui/UIテスト用IDとして使い、表示文字・ツールチップ・アクセシビリティ名から除きます。説明と利用不可理由はホバーまたはフォーカス時に表示します。公開API compile fixtureはtests/workflow_api_compile.cppで確認します。Dear ImGui aliasのAPI一覧とは分けて管理します。

ProgressTrackView が工程名、状態、割合またはホスト指定値、バー、補足文の共通表示を担います。Progress、TaskProgressCard、ToastViewport はこの表示を再利用し、割合や状態文を個別に組み立てません。状態は Queued、Running、Paused、Succeeded、Failed、Cancelled です。割合が負または非有限なら不定表示になり、短い区間が動くのは Running の場合だけです。Theme.motion.enabled、reducedMotion とホスト所有の AnimationState に従います。

StageProgress は渡された工程と現在IDの表示専用です。幅が狭いと現在の工程名と n/total を表示します。TaskProgressCardView の文字列と操作配列は描画中だけ借用し、TaskProgressCard は押された Command.id(要求なしは0)を返します。実際の更新はホスト側で行います。TaskProgressCardOptions::compact は説明を省き、操作ボタンの余白を詰めます。


6位置、操作、進行表示に対応した色付きカードはトーストを参照してください。既存の ToastRegion の挙動は維持します。

Gallery アプリの以下の画面で実際の挙動を確認できます:

  • Workspace shell (ページID: 15): 接続方式のChoiceGroup、ナビゲーション、ツールバー、画像ビューア、オーバーレイの統合例。
  • Progress and states: 各種アラート、プログレスバー、エンプティステートの表示例。
  • Preview tiles: 可変サイズプレビュータイルの操作例。

実装コードは examples/gallery/workflow_pages.cpp を参照してください。

Galleryの Workspace では、WorkspaceTabs、HierarchyGroupHeader/HierarchyRow、BeginInspectorCard/EndInspectorCard、SettingToggleRow、DragVector3WithUnit、ChoiceGroup、CompactActionRowを組み合わせて操作できます。要求を受けてGallery側の値を更新する実装は、既存のImGuiフレームでも利用できます。3.2の宣言と寿命の規則を参照してください。321アイコンと13テーマを利用でき、Contextやアプリのフレーム管理は引き続きホストが担当します。