スライド

拡張メソッドの例:「タブを閉じる」のアンドゥと、タブの複製

「タブを閉じる」のアンドゥ機能は、「現在のページのURI」「履歴の内容」などのタブの情報をまとめたデータを得るgetTabInfo()メソッドと、そのデータを元にまったく同じタブを再現するaddTabWithTabInfo()メソッドの二つを使って実装しています。

まず、タブを閉じるためのremoveTab()メソッドを乗っ取って、実際にタブを閉じる前にgetTabInfo()メソッドでデータを取得してキャッシュします。アンドゥの要求があった場合は、このキャッシュから順番にデータを取り出して、addTabWithTabInfo()メソッドに渡します。この一連の処理によって、「タブを閉じる操作をやり直した」という結果が得られるという具合です。

もうお気づきのことと思いますが、この処理はそのまま、タブの複製を行うduplicateTab()メソッドでも使われています。違いといえば、タブのデータをキャッシュする行程とタブを閉じる行程が行われないという点だけです。

また、キャッシュをメモリ上ではなくデータファイルに保存しておけば、一旦ウィンドウを閉じて破棄した後でも、履歴まで含めて「終了時のタブの状態」を復元することができます。(これはNavigator/Firebirdの拡張機能として実装しています)

余談ですが、このような「アンドゥ機能」の実装は、「間違ってタブを閉じてしまった」といったヒューマンエラーを回避するための最終手段としてユーザーインターフェース設計の上で重要な機能の一つと言え、そういう意味で、この機能は特に有意義な実装であると私は考えています。