Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

プリセット管理ダイアログを編集可能にする #2452

Open
wants to merge 16 commits into
base: main
Choose a base branch
from

Conversation

takusea
Copy link
Contributor

@takusea takusea commented Dec 29, 2024

内容

プリセット管理ダイアログでのプリセットの編集をできるようにします。具体的には以下の変更を行います。

  • BaseSlider
    • 高さをより狭めに変更
    • ホイール操作機能を追加
  • パラメーターのラベル・テキストフィールド・スライダーをまとめたものをParameterSliderコンポーネントとして括りだし
  • PresetManageDialog
    • プリセット名変更用のテキストフィールドを追加
    • モーフィング未設定時の挙動を非表示ではなく未設定と表示するように変更
    • フッターを追加
      • 「変更をリセット」ボタンは「リセット」にするか迷ったのですが、デフォルト値にリセットするボタンかと迷いそう?と思いこうしました。単純な「リセット」でも問題ないかも?

スクリーンショット・動画など

image

その他

モーフィング機能無効時のモーフィングのパラメータ表示をどうするかちょっと迷ってます。現状は常に表示しています。

無効にしている人に対して表示すると、いきなり今まで知らなかったパラメーターが表示されていて戸惑うかも。かといって機能を有効にした状態でパラメータ登録したあと無効にした場合など、データとして存在するのに非表示にしてしまうと、ユーザーの認識とデータの実情が乖離してそれはそれで良くなさそう。候補としては、モーフィング機能無効かつ未設定時にのみ非表示とか?

@takusea takusea requested a review from a team as a code owner December 29, 2024 15:08
@takusea takusea requested review from Hiroshiba and removed request for a team December 29, 2024 15:08
@voicevox-preview-pages
Copy link

voicevox-preview-pages bot commented Dec 29, 2024

🚀 プレビュー用ページを作成しました 🚀

更新時点でのコミットハッシュ:7465270

@Hiroshiba
Copy link
Member

Hiroshiba commented Dec 29, 2024

モーフィング機能無効時のモーフィングのパラメータ表示をどうするかちょっと迷ってます

モーフィング機能無効かつ未設定時にのみ非表示が良さそうに思いました!!
常に非表示でもいいのかなと思ったのですが、↓のコメントによるとUIの方をなんとかする意思がありそうだったので、設定されている場合は表示するのが良さそう!

// FIXME: モーフィングが設定で無効化されていてもモーフィングが行われるので気づけるUIを作成する

まあモーフィング機能が無効な状態だと、設定されているモーフィングを未設定にした瞬間その UI が消えるようになるので若干不親切な気がしますが・・・
これは頑張って解決するか、TODOコメント残すか、「想定済みですがあえて何もしていない」ことをNOTEコメントするかで良さそう!

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

実は子要素があるダイアログで「編集状態」作ると、結構色々考えることがあってしんどいんですよね~~~~(辞書ダイアログでの経験)

例えば編集中にダイアログを閉じるときに「保存してませんけど保存しますか」と聞くとか、編集中に別のプリセットを選んだ時に消えてしまうからこっちも保存しますかと聞くとか。
この辺をやっていくと状態管理がなかなかに辛くなってきます 😇

ちょっと UX の提案なんですけど、保存するか聞かずに勝手に保存するのって行けますかね・・・・・・・?
実装的に行けるか気になるのと、UX的に行けそうか気になるのと・・・。

や~~UX的にどうだろう。。。
辞書ダイアログとツールバー編集ダイアログは保存ボタンがあり、オプションダイアログとショートカットキー設定ダイアログは保存ボタンがない・・・。
プリセット編集も保存ボタンなくて大丈夫な気がするんですが、でもユーザーは「保存ボタン押してないけど大丈夫かな」と思うかもしれない。。。

とりあえず実装的に難しそうだったら話が別なので、一旦そこをお聞きしたく 😇
保存ボタンなしUXの所感もあればお聞きしたいです!

@takusea
Copy link
Contributor Author

takusea commented Dec 30, 2024

まあモーフィング機能が無効な状態だと、設定されているモーフィングを未設定にした瞬間その UI が消えるようになるので若干不親切な気がしますが・・・
これは頑張って解決するか、TODOコメント残すか、「想定済みですがあえて何もしていない」ことをNOTEコメントするかで良さそう!

確かに未設定にした瞬間UIが消えるのは突然な動作すぎて戸惑うかもですね…。良い案があれば良いですが、モーフィングがついたプリセットを登録してからモーフィング機能を無効化するのはそこまで無いケースかなと思うので、コメントを残すくらいでいいかもです。

ちょっと UX の提案なんですけど、保存するか聞かずに勝手に保存するのって行けますかね・・・・・・・?
実装的に行けるか気になるのと、UX的に行けそうか気になるのと・・・。

即時反映自体は実装的には問題ないと思います。UX的には‥今のVOICEVOXだと戸惑いが生じるかもです。

ソフトウェアにはおそらく編集モードが存在するモーダルな実装をしているものと変更したら即時反映されるモードレスなものとで別れていて、ユーザーはこのソフトはこっちだなみたいな覚え方をしていると思います。このソフトはヒホさんのおっしゃっているように混在している状況なので、一瞬迷いそうだとも感じます。個人的にはこのダイアログをモードレスに実装して、このソフトの他の箇所もモードレスにしてしまっても良いかも…?とも思いました。

@Hiroshiba
Copy link
Member

モーフィングがついたプリセットを登録してからモーフィング機能を無効化するのはそこまで無いケースかなと思うので

たしかにプリセット登録してからオフにする人はほぼ0人な気がしますね!!
なのでコメント書くくらいで良さそう!!

個人的にはこのダイアログをモードレスに実装して、このソフトの他の箇所もモードレスにしてしまっても良いかも…?

ちょっとまだ考えきれてないかもですが、この方針が良さそうに思いました!!
少なくともダイアログ内でのプリセット保存はまだリリースしていないので、他のUIよりは混乱少ないかも。

それでも迷う方はいると思うので、1回×を押すまでイントネーション欄に表示されるツールチップみたいなのをプリセットダイアログのどこかに表示すると少しマシになるかも・・・?
無しor後で実装とかでも大丈夫そう!!

他には変更のたびに「保存しました!」的な表示をどこかに出すとかですが、結構1回の作業辺りの変更頻度は高いので目障りそうな予感。

とりあえずプリセットダイアログはモードレスが良さそうに思いました!!

@takusea
Copy link
Contributor Author

takusea commented Jan 2, 2025

OKです!モードレスな実装に変更します!
ツールチップは…どこにどう出すべきかまだ最適解が思いつけてないような気がするのでとりあえず後で…!

@takusea
Copy link
Contributor Author

takusea commented Jan 2, 2025

編集内容を即時反映する・モーフィング機能無効かつ未設定時にモーフィングの項目が非表示になるよう修正しました。
加えて以下の変更を行っています。

  • BaseSliderとBaseTextFieldに変更確定時のイベントを追加
  • ダイアログのサイドバーがプリセット名の長さに合わせて際限なく広がってしまっていたので、固定幅に変更し、長い名前の場合は末尾で省略表示するように変更

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ちょっとまだ見きれてないのですが、モードレスなので、「変更をリセット」ボタンでどこの時点にリセットで戻れるとユーザーが感じるかわからないかもと思いました!

たぶん今の実装だとプリセットが切り替わったタイミングでinitialPreset、つまり戻れる先の状態が変わると思うのですが、ユーザーはダイアログが開いたタイミングに戻れると感じるかもなぁと。
例えば少しプリセットの値を変えたあと、他のプリセットと見比べたくなって他のプリセットに移動して、戻ってから調整し、気に入らなかったときにリセットしようとしたとき、リセットで戻れるとこの実装と想定がずれるかもです。

いろんなソフトやアプリで、リセットや保存がどのようなUXで提供されてるか見てみると参考になるかも・・・?

@takusea
Copy link
Contributor Author

takusea commented Jan 3, 2025

確かにモードレスだと明確な編集開始地点がないのでどの時の状態にリセットされるかが不明瞭ですね…。

そもそもモードレスなUIだとリセット機能は無いことが多いような気もしました(ぱっと身の回りのソフトウェアを見た感じデータ編集においてモードレスかつリセット機能付きのものは見当たらなさそうでした)。元に戻せることへの重要度が低ければ必要ないかも…?一番はstoreへの反映ごとに戻せるundoのような実装をすることですが、それは実装の複雑さと効果が見合わなさそう。

でももし機能をつけたままにするなら確かにダイアログの表示時を初期値としたほうが混乱しなさそうですね…!

@Hiroshiba
Copy link
Member

元に戻せることへの重要度が低ければ必要ないかも

ちょっと実際に触らせていただいたのですが、こちら結構同感でした!
あとリセットボタンがあるのに保存ボタンがないのがちょっと不安でした。×ボタンを押すのに勇気がいる感じ。
そして保存ボタンは別プリセットへ移動できる兼ね合いで実装が難しい・・・。

難しい判断ですが、UXのことを考えると、頑張って問題のない保存・リセット機能を実装するか、モードレスとして保存・リセットボタンを実装しないか、どちらかなのかなと思いました 🙇
「問題のない保存・リセット機能」の素敵な実装が思いつけばいいのですが、今のところまだつかめていません・・・。思いつき次第実装するというのはどうでしょうか・・・?

@takusea
Copy link
Contributor Author

takusea commented Jan 9, 2025

確かにリセットボタンがあると何処かに反映前のデータがあり、反映する工程を挟まないといけないような気がして迷うかもなんですよね…

思いつき次第実装するというのはどうでしょうか・・・?

OKです!今回のPRからはリセット機能をオミットする形でいきますか…!

@takusea
Copy link
Contributor Author

takusea commented Jan 10, 2025

リセット機能を削除しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants