...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

DFL: トースト通知のデータバインディング

トースト通知にプログレスバーを表示できるようにして、さらにデータバインディングにも対応しました。 要するに一度表示したトースト通知を後から書き換えられるようになりました。

それと、データバインディングに対応したことの副作用として、タグとグループが使えるようになりました。 トースト通知するときにタグとグループを設定しておくことで、 後から変更するときにそのトースト通知を特定することができます。

WinRT だとトースト通知のデータ(内容)を表すクラスとして NotificationData があって、 新しい NotificationData オブジェクトを作成して ToastNotifier に与えることで トースト通知を変更する仕組みになっているのですが、 DFL では ToastNotifier のプロパティとして各データが直接公開されているので、 それらのプロパティを変更してから update() を呼ぶことで変更できるようにしています。 どうせ XmlDocument とかも隠ぺいしてあるのでユーザーに公開する API は簡単なものでいいかなと。

それでは今回は簡単な差分の説明だけしておきます。

// プログレスバーを作って ToastNotifier にセット
auto progressBar = new ToastProgressBar("Processing..."w, 0.6);
progressBar.title = "Download"w;
progressBar.valueStringOverride = "60/100 files"w;
_notifier.progressBar = progressBar;
// テキストもセット
_notifier.headline = "Hello ToastNotifier with DFL!";
_notifier.text = "ToastNotifierのサンプルコードです。";
_notifier.subtext = "2025-09-22";
// トーストの内容を変化させる度にカウントアップする番号の初期値をセット
_notifier.sequenceNumber = 1;
// トースト通知を表示
// タグとグループでトースト通知を後から特定できるようにする
_notifier.show("tag", "group");
// プログレスバーの設定を変更
_notifier.progressBar.value = 1.0;
_notifier.progressBar.status = "Completed!"w;
_notifier.progressBar.title = "Downloaded"w;
_notifier.progressBar.valueStringOverride = "100/100 files"w;
// テキストの設定を変更
_notifier.headline = "Updated headline!";
_notifier.text = "Updated text!";
_notifier.subtext = "2025-09-23";
// トーストの内容を変化させるので1から2にカウントアップしてセット
// 変化させる度に1,2,3,4,...とカウントアップしてセットします
_notifier.sequenceNumber = 2;
// トースト通知を変更
// タグとグループでトースト通知を特定する
_notifier.update("tag", "group");

参考文献