Undo/Redoの挙動および実装を改善 – 開発日記(52)

2023/09/13

Undo/Redo周りを整備する手始めとして、Undo/Redoボタンを画面上側のツールバーに移動した。

画面の一番上にUndo/Redoボタンを配置した
これまではサブツールバーにUndo/Redoがあった(画面左下)

Undo/Redoボタンの位置はどこが正解かという問題はあるが、押す頻度を踏まえて画面上部に持ってくることにした。

2023/09/14

ドラッグ&ドロップ周りと、Undo/Redo周りの挙動を修正。

Undo/Redoは、複数のコマンドをUndo/Redoする「グルーピング」の仕組みを実装できた。(内部的に)

どういうことか。
例えば何も無いエリアにアイディアをドラッグするとしたらプログラムとしては下記のコマンドを連続して実行する。

  1. 対象エリアを実体化させる
  2. 実体化したエリアにアイディアを移動する
  3. 移動したアイディアにフォーカスする

Undoしたときはそれを逆の順番で行わないといけない。しかも各ステップのUndo処理の中身は結構複雑。その上この例では 1.の実行前にアイディアのフォーカス状態を覚えておき、Undo時にはそれを復帰させる処理も行わないと不自然になる。

この上記1~3を1つのコマンドグループとして実行できる仕組みを作ったことで、Undo/Redoが柔軟に行いやすくなった。

これまでUndo/Redo周りの実装はバグりやすく非常にストレスがかかり、複数の処理を横断した場合本当に辛かった。しかしこの仕組みが出来てから1つずつのコマンドをきちんと作ることに集中でき、随分気持ちが随分楽になった。

エリアにアイディアをドラッグしているイメージ

他にはキーボード関連の処理が色々な所に分散していたのでCanvasでの管理に一元化したかったが、処理がかえって複雑化したので、結局元に戻したりした……。(具体的にはCanvasのShortcutActivatorで KeyEventResult.ignored を指定しても、アイディアのTextField側に信号が戻っていかないなど)


※開発日記は当時の記録をもとに作成し、必要に応じて加筆・補足しています

この記事はアイディア整理ソフト「idea Lane」の開発記録です

どなたでも、ユーザ登録だけで無料ですぐに使えます
テキストベースの思考整理ツール「idea Lane」


コメント

タイトルとURLをコピーしました