KDE 3.0 アーキテクチャ/システムリソースへのアクセス/標準のリソース - 旧 Wiki アーカイブ

!

このページは10年以上前の非常に古いものであり、歴史的資料保存を目的として維持しています。
現在の状況とは大きく異なる場合がありますので、原則として参考にはしないで下さい。

KDE 3.0 アーキテクチャ

オリジナル : http://developer.kde.org/documentation/library/kdeqt/kde3arch/resources.html


標準リソースディレクトリへのアクセス

KDEは、データが実際どこにあるのかということを気にしないで、アプリケーションがインストールしたファイルにアクセスするためのいくつかの方法を提供しています。
またKDEはユーザー(ほとんどの場合は管理者ですが)が適切と思う場所にファイルを移動するのを許可する為に、異なるサーチパスが割り当てられている異なるリソースタイプのリストを提供しています。

実行ファイルを探すためのPATH環境変数やman pageを探すためのMANPATH環境変数の事を訊いたことが有るでしょう。
でもmanにPATHの中でmanpageを探すようには期待しないでしょう。

この概念に似たような感じで、KDEは、特定のリソースのためにパスを加えることをシンプルにするために、サーチパスを区別しています。
これによって他のリソースを探して不必要に遅くなったり、すべてのものをひとつのディレクトリに入れる必要が無くなります。

KDEが提供しているリソースのタイプは、

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);