伝説のツール「NotesPeek」をQtでリメイクする(その3・その2の補足)

ここでは、その2で紹介したコードについて、ファイル検索以外の点について補足します。

ntlxライブラリ

QString Status::toMessage()

StatusクラスにtoMessageメソッドを追加しました。以前は、

QString msg = Lmbcs(status).toQString();

としていましたが、

QString msg = status.toMessage();

と、Status単独でステータス値からメッセージを取得することができます。

IStatusクラス

メソッドとしては値を返り値にしたいが、関数が処理したステータスも重要な場合、いちいち引数にStatusのポインタを置くのも面倒です。そんな時、クラスにこのインターフェースクラスを多重継承します。メソッド内部で取得したステータスをメンバ変数lastStatus_に預けることで、メソッドから戻ってきてもステータス値を失うことなく処理を継続できます。

initEx関数、term関数

NotesInitExtended関数、NotesTerm関数のラッパー関数です。

PathSetクラス、NetPathクラス

Notesデータベースへのパスに使用するクラスです。PathSetは、パス、サーバ名、ポート名を一度に扱えるクラスです。NetPathはLmbcsクラスを継承して、Notes状のフルパスである「ネットパス」に対応しています。Databaseクラスを使って、データベースをオープンする場合、次のように書けます。

Database db1(PathSet("names.nsf", "Server1")); // PathSet使用
Database db2(PathSet("names.nsf", "Server2").toNetPath()); // NetPathに変換してもOK

PathSetからNetPathへはPathSet::toNetPathを使用しますが、NetPathからPathSetにする場合はNetPath::toPathSetを使うことができます。

DbInfoクラス

データベースのタイトルやカテゴリを取得する場合、Lmbcsから継承したDbInfoクラスを使用します。データベース情報はタイトル、カテゴリ、DBクラス、設計元DBクラスの4つの情報を有していますが、実体は128バイトしかないLMBCS文字列です。そこで、この文字列をDbInfo内に置き、メソッドによってタイトルなどの各情報を取得することができるようにしました。以前はDatabaseクラスに組み込まれていましたが、NSFSearch関数によって取得したサマリーバッファでも、データベース情報のパースが必要になることがわかったので、Databaseクラスから切り離し、DbInfoクラスとして独立させることにしました。