KDE 3.0 アーキテクチャ/システムリソースへのアクセス/標準のリソース - 旧 Wiki アーカイブ
オリジナル : http://developer.kde.org/documentation/library/kdeqt/kde3arch/resources.html
標準リソースディレクトリへのアクセス
KDEは、データが実際どこにあるのかということを気にしないで、アプリケーションがインストールしたファイルにアクセスするためのいくつかの方法を提供しています。
またKDEはユーザー(ほとんどの場合は管理者ですが)が適切と思う場所にファイルを移動するのを許可する為に、異なるサーチパスが割り当てられている異なるリソースタイプのリストを提供しています。
実行ファイルを探すためのPATH環境変数やman pageを探すためのMANPATH環境変数の事を訊いたことが有るでしょう。
でもmanにPATHの中でmanpageを探すようには期待しないでしょう。
この概念に似たような感じで、KDEは、特定のリソースのためにパスを加えることをシンプルにするために、サーチパスを区別しています。
これによって他のリソースを探して不必要に遅くなったり、すべてのものをひとつのディレクトリに入れる必要が無くなります。
KDEが提供しているリソースのタイプは、
- apps - アプリケーションメニュー(.desktop files)
- cgi - khelpcenterから実行されるcgi
- config - 設定ファイル
- data - アプリケーションがどこにデータを保持しているか
- exe - KDEの為にインストールされた実行ファイル
- html - HTML文書
- icon - ウィンドウマネージャーやパネルに表示されるアイコン
- lib - dlopenされるライブラリ
- locale - KLocaleの為の翻訳ファイル
- mime - mime types
- sound - application sounds
- toolbar - toolbar pictures
- wallpaper - 壁紙
KDEのための開発ツール(例えばKDevelop)によって作られたconfigureが生成したMakefileのaliasにもこれらすべてが存在しています。
KStandardDirs?
基本的なサービスを提供するので、このクラスはkdelibsの中でも最も中心的なクラスです。
このクラスはユーザーのハードディスクのどこにファイルが有るのかを分かっています。ユーザとアプリケーションの両者に対して出来る限り実際のファイルのありかをtransparentにするためです。
これによってアプリケーションからの全ての情報をカプセル化し、またアプリケーションは常にリソースタイプ(例:apps)やファイルネーム(例:Home.desktop)でファイルにアクセスします。
理想的なのは、アプリケーションが、ファイルがどこにあるのかを配慮せず、この能力を用いるために作業をKStandardDirs?::findResource("apps", "Home.desktop")に任せることです。
KStandartDir?の主要な考えは、ファイルの前につくプレフィックスはいくつかあるということです。
プレフィックスとは、例えばユーザーがkdelibsをインストールした場所であったり、アプリケーションがインストールされた場所であったり、$HOME/.kdeであったりします。実際にはもっとあるでしょう。
こういったプレフィックスの後には、特定のリソースタイプがみつかるであろうサフィックスがよく定義されます。
例えばツールバーアイコンならば share/toolbarやshare/apps/<appname>/picsでしょう。
だから、ファイルを探すためのアルゴリズムは基本的には指定されたサフィックスにプレフィックスをつなげて、ファイルがあるかどうかを調べるということです。
複雑な事を言うと、前述のステップを踏むことなくKStandardDir?が調べるための絶対パスも登録できます。
これはユーザーが例えば$HOME/.kde以外のディレクトリにアイコンを置く等、特定のディレクトリにファイルをおきたい場合に有功です。
On the usage of locate and locateLocal
locateとlocateLocalは、両方ともKStandartDir?を出来る限りシンプルに活用するために便利な機能です。
もちろんこれを使わずにKStandartDir?のパワーを充分に用いることもできます。
通常のKDEアプリケーションは次の3つの内、どれか1つの方法を用いてリソースファイルをしようします。
1
この場合、リソースファイルは読み込み専用です。
システムではデフォルトの設定を提供しますが、ユーザーは.kdeディレクトリでこのデフォルトを上書きできます。
// Code example myFile = locate("appdata", "groups.lst") myData = myReadGroups(myFile);
2
この場合リソースファイルは読み込みも書き込みもできます。
ユーザーが指定しない場合、システムのデフォルトが用いられます。
この時、リソースファイルは常に.kdeディレクトリに書き込まれます。
// Code example myFile = locate("appdata", "groups.lst") myData = myReadGroups(myFile); ... doSomething(myData); ... myFile = locateLocal("appdata", "groups.lst"); myWriteGroups(myFile, myData);
3 上と同じですが、システムのデフォルトは使われません。
// Code example myFile = locateLocal("appdata", "groups.lst"); myData = myReadGroups(myFile); ... doSomething(myData); ... myFile = locateLocal("appdata", "groups.lst"); myWriteGroups(myFile, myData);