diff --git a/archives/Accelerated_kde_for_KNOPPIX.php b/archives/Accelerated_kde_for_KNOPPIX.php index 693ef82..efdd14d 100644 --- a/archives/Accelerated_kde_for_KNOPPIX.php +++ b/archives/Accelerated_kde_for_KNOPPIX.php @@ -1,87 +1,87 @@

KDE起動の高速化方法

CDブートのKNOPPIXを前提として、KDE起動の最適化方法を考察する。

startkdeスクリプトの解析

まず、結論として、knoppix起動用のstartkde-knoppixのようなものを用意し、
そちらを起動時に使用するようにするのが最適だと思われる。

以下では、スクリプト内部の解析を行う。

ブートシーケンスの前処理部

startkdeスクリプトで行われている最初の処理

# Check if a KDE session already is running
 if dcop kdesktop >/dev/null 2>&1; then
         echo "KDE seems to be already running on this display."
         xmessage -geometry 500x100 "KDE seems to be already running on this display." > /dev/null 2>/dev/null
         exit 1
 fi

は、既にKDEが起動されているかどうかをテストしているので、KNOPPIXでは必要ない処理だと思われる。
念のためカットできないと思われる。また、バックグラウンドでの実行もできないだろう。

次の

if test -z "$XDM_MANAGED" || echo "$XDM_MANAGED" | grep ",auto" > /dev/null; then
   xsetroot -solid "#C0C0C0"
 fi

もカットできないし、おそらくすぐ実行が終わるので、カットする必要がない。

ブートシーケンスのksplash起動前

ブートシーケンスの始めで、kdehomeの設定処理があるが、$HOME/.kdeに決めうちに変更して問題ないだろう。

その後、フォントディレクトリの初期化処理が走る。

# Activate the kde font directories.
 #
 # There are 4 directories that may be used for supplying fonts for KDE.
 ... (中略)...
 # Only do usr_fdir and usr_odir if they are *not* listed in fontpaths
 test -d "$sys_odir" && xset +fp "$sys_odir"
 test $do_usr_odir -eq 1 && test -d "$usr_odir" && (mkfontdir "$usr_odir" ; xset +fp "$usr_odir")
 test $do_usr_fdir -eq 1 && test -d "$usr_fdir" && (mkfontdir "$usr_fdir" ; xset fp+ "$usr_fdir")
 test -d "$sys_fdir" && xset fp+ "$sys_fdir"
 ... (中略)...
 # Get Ghostscript to look into user's KDE fonts dir for additional Fontmap
 if test -n "$GS_LIB" ; then
     GS_LIB=$usr_fdir:$GS_LIB
     export GS_LIB
 else
     GS_LIB=$usr_fdir
     export GS_LIB
 fi

ここは、おそらくKNOPPIXの場合は環境特有の値を使って処理を簡素化できるだろう。
今後USBメモリからのブートような形で環境を変更できるようになる場合には、
ブートオプションの対応で良いと思う(フォントを追加する人は少ないだろう)。

その少し後にある、以下のkpersonilzerの実行処理は、削っても問題ないだろう。

# run KPersonalizer before the session, if this is the first login
 if kreadconfig --file kpersonalizerrc --group General --key FirstLogin --default true --type bool; then
     # start only dcopserver, don't start whole kdeinit (takes too long)
     echo 'startkde: Running kpersonalizer...'  1>&2
     dcopserver
     kwin --lock &
     kpersonalizer --before-session
     # handle kpersonalizer restarts (language change)
     while test $? -eq 1; do
         kpersonalizer --r --before-session
     done
     dcopserver_shutdown
     # shutdown will also make kwin quit, give it time to do so
     sleep 1
 fi

ksplashの起動後の処理

ここでカットできる部分は、ざっと見た限り存在しない。
簡素化するためには、kdeinit等のソースに手を入れる必要がある。

周辺機器の設定をしているところを並列にするなどできれば、 それだけで速くなるとは思うが……。

Counter: 22, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/FAQ1.php b/archives/FAQ1.php index 7f2e885..badf99c 100644 --- a/archives/FAQ1.php +++ b/archives/FAQ1.php @@ -1,53 +1,53 @@

日本語を入力できない

質問

KDEで日本語を入力することができません。
どのようにすれば解決できるでしょうか?

回答

日本語を入力する場合には、kinput2などのXIMサーバが起動されている必要があります。

また、環境変数 $LANGを"ja_JP.utf8"(古い環境では"ja_JP.eucJP")にセットし、環境変数 $XMODIFIERSを
"@im=kinput2"(kinput2を使用する場合)にセットする必要があります。
これらの環境変数の設定は、ホームディレクトリにある".bashrc"(bashの場合)や
".cshrc"(tcshの場合)で行うようにすると楽です。

(bashの例)
 LANG=ja_JP.eucJP
 export LANG
 
 XMODIFIERS="@im=kinput2"
 export XMODIFIERS

kinput2などが起動していて、環境変数もセットされているのに
日本語の入力ができない場合、qtconfigを起動して、「Interface」という
タブを開き、一番下の「XIM Input Style」をOn The Spot(またはOver The Spot)にすると
ちゃんと入力できるようになるはずです。

Counter: 32, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ10.php b/archives/FAQ10.php index 675f1d2..0d76290 100644 --- a/archives/FAQ10.php +++ b/archives/FAQ10.php @@ -1,37 +1,37 @@

KDE 3.0 と 3.5 でのプロファイルの共有

質問

ドメインを構築している環境にてKDE 3.0 と 3.5 と異なるコンピュータでデスクトップを共有しているのですがゴミ箱の共有がうまくいきません。両方の環境にて同じゴミ箱を使用するのにはどうしたらいいのでしょうか。

回答

Counter: 22, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ11.php b/archives/FAQ11.php index 94a9418..7ebbe73 100644 --- a/archives/FAQ11.php +++ b/archives/FAQ11.php @@ -1,37 +1,37 @@

Kdevelop Ver.1.4->4へのUP方法

質問

RH7.1(seawolf)AlphaでのKdevelop1.4から4へのバージョンアップはできますか?

回答

Counter: 24, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ13.php b/archives/FAQ13.php index 80dad83..7a3bd6b 100644 --- a/archives/FAQ13.php +++ b/archives/FAQ13.php @@ -1,40 +1,40 @@

インストール直後のrootパスワード。

質問

インストール直後のrootパスワードが、わかりません。 Admin mode に入れません。

回答

Counter: 30, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ2.php b/archives/FAQ2.php index aad21cc..15b999d 100644 --- a/archives/FAQ2.php +++ b/archives/FAQ2.php @@ -1,43 +1,43 @@

ウィンドウを動かすとKDEがフリーズする

質問

ウィンドウを動かそうとするとKDEがフリーズしてしまいます。

回答

KDEコントロールセンターを起動し、「ウィンドウの挙動」の「移動」タブをクリックし、
「移動中のウィンドウの内容を表示」と「サイズ変更中のウィンドウの内容を表示」
にチェックを入れることで、この問題は解消できます。

KDE-3.1.4では直っているはずです:-)

http://bugs.kde.org/show_bug.cgi?id=44881#c13 http://google.co.jp/

Counter: 21, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ3.php b/archives/FAQ3.php index b6989c4..a692d47 100644 --- a/archives/FAQ3.php +++ b/archives/FAQ3.php @@ -1,51 +1,51 @@

一部のアプリケーションのメニューが文字化け

質問

Netscape、Emacs、xmmsなどの一部のアプリケーションのメニューが
文字化けしてしまって、読むことができません。

回答

まず、KDEコントロールセンターから「色」という設定項目を探し、
「非KDEアプリケーションにも色設定を適用」のチェックを外してみて下さい。

また、ホームディレクトリに"gtkrc-kde"というファイルがある場合は、
削除、または、リネームしてみてください。

それでも解消されない場合は、ホームディレクトリに".gtkrc"というファイルを

style "gtk-default-ja" {
 fontset = "-adobe-helvetica-medium-r-normal--14-100-100-100-p-76-iso8859-1,?
 -ricoh-ms mincho-medium-r-normal--14-*-*-*-*-*-jisx0208.1983-0,?
 -misc-fixed-medium-r-normal--14-*-*-*-*-*-jisx0208.1983-0,?
 *-r-*"
 }
 class "GtkWidget" style "gtk-default-ja"

という内容で作成することで解消されるはずです。

Counter: 19, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ4.php b/archives/FAQ4.php index 3b5d31c..0a5eb0d 100644 --- a/archives/FAQ4.php +++ b/archives/FAQ4.php @@ -1,46 +1,46 @@

画面にごみが残る

質問

Konsoleを使っていると画面にごみが残ってしまいます。

回答

現状では解決の見込みが少ないです。 kterm, krxvt, mlterm等を使うのが賢明です。

是非解決を訴えましょう。 voteをお願いします。 http://bugs.kde.org/show_bug.cgi?id=41744

これも関係していると思います。 http://bugs.kde.org/show_bug.cgi?id=59162
3.1.3では直っているはずですが。Gentooではまだでてないので、未確認です。(Ken)

Counter: 19, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ5.php b/archives/FAQ5.php index 3ea14df..433da5e 100644 --- a/archives/FAQ5.php +++ b/archives/FAQ5.php @@ -1,40 +1,40 @@

横スクロールバーが不必要な時に出る

質問

3.1.3になって横スクロールバーが不必要な時に出るのですが。

回答

バグとして報告されており、対処するためのパッチが出ています。
また、CVSでは解決されています。
http://bugs.kde.org/show_bug.cgi?id=61730

Counter: 18, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ6.php b/archives/FAQ6.php index d98b185..11f877b 100644 --- a/archives/FAQ6.php +++ b/archives/FAQ6.php @@ -1,50 +1,50 @@

googleの検索結果で上部のテーブルがつぶれる

質問

googleで検索を行うと、検索結果の上の方に表示される "ウェブ"、"イメージ"、"グループ"、"ディレクトリ"の表示が つぶれた感じに表示されてしまう。

回答

bus.kde.orgに報告されていて、CVSでは直っています。

<table width="1%"><tr><td>日本語</td></tr></table>
などのときに、テーブル内の文字の幅がゼロになっているのが原因らしいです。

別解

CSSを設定することによってこの現象を回避できます。(対症療法ですが・・・)

-
body > table > tr > td > center { 
-	display: inline; 
+
body > table > tr > td > center {
+	display: inline;
 }

このような内容のCSSファイルを用意して、Konqueror設定パネルで
上記のファイルをユーザ定義スタイルシートとして指定します。
http://forums.gentoo.org/viewtopic.php?p=346652#346652

Counter: 39, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ7.php b/archives/FAQ7.php index 45b845a..a5860af 100644 --- a/archives/FAQ7.php +++ b/archives/FAQ7.php @@ -1,42 +1,42 @@

googleの検索ページで日本語入力モードにならない

質問

KDE3.1.1 の環境なのですが、googleの検索ページhttp://www.google.co.jp を表示させた直後にSHIFT+Space で日本語入力のモードになりません。英数字の入力を1文字でも行えば、日本語入力モードになります。なぜでしょうか?

ちなみに、Excite, yahoo等ではおこりません。

回答

入力そのものができないのは、入力スタイルがOn The Spotとなっているためでしょう。Over The Spotに変更すれば、入力ができるようになるはずです。ただ、その場合も確定前の文字列(preedit)が表示されないため、まともに使うためには英数字を入力する必要があります。

Mozillaなどの他のブラウザで問題がないことから、このような挙動となっているのは、KDE側の問題ではないかと思われます。具体的には、KDEのHTMLレンダリングエンジンであるKHTMLか、Konqueror自体の問題ではないかと考えられます。関連するバグがすでにレポートされています(Bug52685)。


なお、入力スタイルの変更は、FAQ/1を参考にしてください。

Counter: 32, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ8.php b/archives/FAQ8.php index 3d1b288..6138e73 100644 --- a/archives/FAQ8.php +++ b/archives/FAQ8.php @@ -1,38 +1,38 @@

KDevelopでメモリのダンプ

質問

MS社のVisualStudio?では、メモリ領域のダンプが出来ますが、 KDevelopで同じことは出来ますか?

回答

Counter: 22, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FAQ9.php b/archives/FAQ9.php index 3f8c936..210d7b6 100644 --- a/archives/FAQ9.php +++ b/archives/FAQ9.php @@ -1,37 +1,37 @@

保存先の指定

質問

WEBサイトのファイルを保存しようとすると、保存はしますが、そのファイルがどこに保存されたかが解りません。しかもなぜかファイル名も変わっているみたいなので検索する名前もわかりません。どなたか回答していただければ幸いです。

回答

Counter: 27, today: 1, yesterday: 0

コメント


- \ No newline at end of file + diff --git a/archives/FrontPage.php b/archives/FrontPage.php index 2f5f916..3181958 100644 --- a/archives/FrontPage.php +++ b/archives/FrontPage.php @@ -1,37 +1,37 @@

JKUG Wiki

このPukiWikiでは、QtおよびKDEのインストールについての情報様々なアプリケーションについての説明FAQTipsや、開発に関するドキュメントなどを扱っています。

各ページの編集・新規ページの追加とも、自由に行ってください。 ただし、初めて"新規ページの作成"を行う際には、一度こちらをご覧ください。 なお、このJKUG Wikiの運営についてはこちらをご覧下さい。

現在翻訳のプロセスに関する意見を求めています。

メニュー

- \ No newline at end of file + diff --git a/archives/KBabel.php b/archives/KBabel.php index db3ec06..e1a8a36 100644 --- a/archives/KBabel.php +++ b/archives/KBabel.php @@ -1,80 +1,80 @@

KBabel は古いアプリケーションです。Lokalize を使用してください。

kdesdk?

本家ページ : http://i18n.kde.org/tools/kbabel/ …はもうリンク切れのようです…。

解説

ここではKBabelの最低限の設定と使用法について説明します。
Debianユーザの方は、こちらも参考にしてください。

KBabelとは

KBabelはKDEの翻訳チームが使用している翻訳補助ツールです。検索機能、使い勝手、UTF8エンコーディング、エラーチェック機能などの面において、強力な機能を持っています。KDEだけでなく他の翻訳プロジェクトの人にも有用なツールでしょう。

インストール

ここではKBabel-1.0.2(KDE3.1.xに含まれているもの)を対象として説明します。KBabelはkdesdkに含まれていますので、通常は、ディストリビュータで配布されているパッケージをインストールするのが良いでしょう。もし自分でコンパイルしてインストール場合には、libdb-4.xなどが必要になります。

コンパイル手順は以下の通りです。 ./configure --prefix=$KDEDIR make su make install

KBabelの設定

KBabel本体の設定

KBabelを立ち上げると魚のスプラッシュスクリーンの後にKBabelが立ち上がります。
初回立ち上げ時は、下の画像のような設定の入力を求めるダイアログが出て来ます。

around,画面1:設定の入力を求めるダイアログ]
画面1:設定の入力を求めるダイアログ

「OK」を押すと次の画面になります。

画面2:設定ダイアログ - 個人情報
画面2:KBabelの設定ダイアログ - 個人情報

ここには自分の名前とメールアドレスを入力して下さい。「ローカルな名前」もローマ字のままで問題ないでしょう。
そのほかの情報は上の画面を参考にして下さい。

個人情報の他の設定項目としては「編集」、「保存」、「スペルチェック」、「差異表示(Diff)」、「ソース」、「その他」があります。
そのうち「編集」、「スペルチェック」、「差異表示(Diff)」、「ソース」、「その他」に関しては特に変更する必要はないでしょう。


次に「保存」の設定です。ここでは、「一般」についての設定をします。
その他の「ヘッダ」と「著作権表示」については、変更する必要はないでしょう。

画面4:KBabelの設定ダイアログ - 保存(一般)
画面4:KBabelの設定ダイアログ - 保存(一般)

ここで重要なのはエンコーディングです。これは必ずUTF8にして下さい。KDE3.xではほとんどの文字を
内部でUTF8で扱っています。メッセージカタログもja.poは全てUTF8になっています。KBabelで
メッセージカタログを扱う分にはほとんど意識しないで済むので、ここは必ずUTF8にして下さい。


次に「検索」の設定を行います。

画面3:KBabelの設定ダイアログ - 検索
画面3:KBabelの設定ダイアログ - 検索

検索は、翻訳中にデータベース(3種類ありますがこれの設定は後で説明します)の中から検索してきて
操作画面の右下部に表示してくれるという機能です。「自動的に検索を開始」にチェックを入れておくと、
次のメッセージに移動したときに自動的に検索を開始して表示してくれます。

ちなみに3種類というのは以下の通りです。

相当遅いマシンならともかく、普通のマシンなら数分でインデックスを作成できるので
翻訳データベースを使用するのがよいでしょう。

設定については、辞書の設定のところで説明します。


以上で本体の設定は終了です。なおこれらはメニューバーの「設定」→「KBabelの設定」から再設定できます。


カタログマネージャの設定

まず、メニューバーの「ツール」→「カタログマネージャ」で、カタログマネージャを起動します。

すると、カタログマネージャの起動とともに、下のようなダイアログが出てきます。

画面5:カタログマネージャの設定を求めるダイアログ
画面5:カタログマネージャの設定を求めるダイアログ

「OK」を押し、カタログマネージャのメニューバーから「設定」→「カタログマネージャの設定」を選ぶと、次の画面になります。

画面6:カタログマネージャの設定ダイアログ
画面6:カタログマネージャの設定ダイアログ

まずテンプレートと日本語メッセージファイルをここからダウンロードします。
基本的に、最新のものを選んでくればOKです。
(ダウンロードするものは、「kde-i18n-ja」と「kde-i18n-templates」です。)

そして展開したディレクトリをそれぞれ上に指定します。
例えば/usr/local/extend/kde-i18nというディレクトリでこれらのファイルを
展開した場合は上の画面のようにします。

そして「OK」をクリックすると、指定したディレクトリが存在すれば下の画面のように、
翻訳の進捗状況の情報が生成されます。

画面7:カタログマネージャの進捗状況の生成画面
画面7:進捗状況の情報の生成画面


辞書の設定

続いては、辞書の設定です。
辞書の設定はメニューバーの「設定」→「辞書の設定」で行います。


・翻訳データベースの設定
「辞書の設定」から「翻訳データベース」を選択すると設定ダイアログが現れます。

-
t r > / t b o d y > / t a b l e > / d i v > -
画面8:辞書 翻訳データベースの設定ダイアログ
画面8:辞書 翻訳データベースの設定ダイアログ
\ No newline at end of file +
t r > / t b o d y > / t a b l e > / d i v > +
画面8:辞書 翻訳データベースの設定ダイアログ
画面8:辞書 翻訳データベースの設定ダイアログ
diff --git a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%A5%B7%A5%B9%A5%C6%A5%E0%A5%EA%A5%BD%A1%BC%A5%B9%A4%D8%A4%CE%A5%A2%A5%A.php_KVP b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%A5%B7%A5%B9%A5%C6%A5%E0%A5%EA%A5%BD%A1%BC%A5%B9%A4%D8%A4%CE%A5%A2%A5%A.php_KVP index 1fedb7b..b39e480 100644 --- a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%A5%B7%A5%B9%A5%C6%A5%E0%A5%EA%A5%BD%A1%BC%A5%B9%A4%D8%A4%CE%A5%A2%A5%A.php_KVP +++ b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%A5%B7%A5%B9%A5%C6%A5%E0%A5%EA%A5%BD%A1%BC%A5%B9%A4%D8%A4%CE%A5%A2%A5%A.php_KVP @@ -1,79 +1,79 @@

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);
- \ No newline at end of file + diff --git a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%A5%E9%A5%A4%A.php b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%A5%E9%A5%A4%A.php index 11939a5..8741a40 100644 --- a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%A5%E9%A5%A4%A.php +++ b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%A5%E9%A5%A4%A.php @@ -1,52 +1,52 @@

KDE 3.0 アーキテクチャ

オリジナル : http://techbase.kde.org/Development/Architecture/KDE3/Library_Structure

KDEライブラリ構造の概観

グループ化されたクラス

\ No newline at end of file + diff --git a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%CA%A3%BB%A8%A.php b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%CA%A3%BB%A8%A.php index 6385b6a..93b83cc 100644 --- a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%CA%A3%BB%A8%A.php +++ b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3%2F%B3%AB%C8%AF%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF%2F%CA%A3%BB%A8%A.php @@ -1,47 +1,47 @@

KDE 3.0 アーキテクチャ

オリジナル : http://developer.kde.org/documentation/library/kdeqt/kde3arch/khtml/index.html *1

※古すぎるのであまり参考にはならないかと思われます。


KHTML - KDE's HTML library

概観

KHTMLはDOM,Java,JavaScript?,Cascading Style Sheets(CSS)に対応したXML/HTML4準拠のHTMLライブラリです。

現在のKHTMLができることについての概観をここで得られます。

Small example

KHTMLをプログラム中で使うのは非常に簡単です。
下の例はすでにwebブラウズが可能なアプリケーションを示しています。

#コード例が古かったのでコチラを見て下さい。

この例はすでにwebにアクセスできる機能的なブラウザを示しています。(リモートファイルにアクセスするためのkio_httpが必要ですが)
testkhtmlでhttp://kde.orgを試して見て下さい。ウィジットにはKDEのホームページが表示されるでしょう。

Document Object Model (DOM)

KHTMLはほとんど完璧なDom Level1, Level2の実装を提供しています。

DOMは文書のデータを保持するために使われる内部的なクラスです。
DOMにアクセスするクラスはデータ保持の為にrefcounting schemeを用います。
よってDOMはメモリ管理を行ないます。
使う方は、文書のパーツにアクセスするためには、DOM header fileに定義されているクラスを使用するだけでよいのです。
ポインタを使わない限り、メモリリークが起きることはないでしょう。(ライブラリのバグを覗いてはね。。。;-)

表示されている文書には KHTMLWidget::document() 関数を用いて文書のどの部分にでも簡単にアクセスできます。

Java

有難い事にRichard Mooreによって、KHTMLはJava appletを表示できるようになりました。
Javaは標準では有効になっていませんが、メソッドを使って有効にできます。
CLASSPATHは以下のように設定して下さい。

CLASSPATH=$KDEDIR/share/apps/kjava/kjava-classes.zip:$JDK_DIR/lib

JDKをインストールすることが必要です。JDK-1.1.7では試しましたが、Kaffeや他のバージョンのJDKで動くかはわかりません。

JavaScript? (ECMA-Script)

JavaScript?サポートはECMAScript Language specification ECMA-262 3rd edition準拠です。
これはJavaScript1.5相当です。

Cascading Style Sheets (CSS)

Cascading style sheets 2.1 はほとんどサポートされています。

Counter: 24, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3.php b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3.php index 26a071c..1a15fec 100644 --- a/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3.php +++ b/archives/KDE%203.0%20%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3.php @@ -1,74 +1,74 @@

開発者向けドキュメント

オリジナル:KDE 3.0 architecture

開発フレームワーク

デスクトップフレームワーク

マルチメディアフレームワーク

コンポーネントアーキテクチャ

KOfficeアーキテクチャ

プロトコル

開発ツール

Development HOWTOs

Counter: 32, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/KIO%A4%CE%B1%BF%CD%D1%CB%A1.php b/archives/KIO%A4%CE%B1%BF%CD%D1%CB%A1.php index 96cd378..d2855a1 100644 --- a/archives/KIO%A4%CE%B1%BF%CD%D1%CB%A1.php +++ b/archives/KIO%A4%CE%B1%BF%CD%D1%CB%A1.php @@ -1,47 +1,47 @@

kio

void startJob() {
     SomeJob* job = KIO::operation(url);
     QObject::connect(job, SIGNAL(result(KIO::Job *)),
                      this, SLOT(slotJobFinished(KIO::Job *)));
 }
 
 void slotJobFinished(KIO::Job *job) {
    if( job->error() ){
 	job->showErrorDialog();
 	return;
    }
 }

KIO::operationの箇所には自分の行いたい処理を記述します。API参照


Counter: 35, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/KIO_get_samples.php b/archives/KIO_get_samples.php index 5a1892d..767c35d 100644 --- a/archives/KIO_get_samples.php +++ b/archives/KIO_get_samples.php @@ -1,115 +1,115 @@

KIOの運用法

簡単にコードの解説を。

kiosample::kiosample()
    : KMainWindow( 0, "kiosample" )
 {
     // set the shell's ui resource file
     setXMLFile("kiosampleui.rc");
 
     setupGUI();
 
     isDownloading = false;
 }
 
 kiosample::~kiosample()
 {
 }

コンストラクタ、デストラクタです。 デストラクタで何の処理も行っていないのは、下でnewするオブジェクト(QBuffer* downloadDateは除く)はすべてQOBjectを継承したクラスで、親を持っているので終了時にQtの機能としていもづる式にdeleteするためです。 参照:Qt/KDEでのdeleteの挙動

void kiosample::setupGUI()
 {
    QVBox* mainVBox = new QVBox(this);
 
    QHBox* srcHBox = new QHBox(mainVBox);
    QLabel* srcLabel = new QLabel("Source URL", srcHBox);
    srcEdit = new KLineEdit(srcHBox);
 
    QHBox* targetHBox = new QHBox(mainVBox);
    QLabel* targetLabel = new QLabel("Target URL", targetHBox);
    targetEdit = new KURLRequester(targetHBox);
 
    startGetButton = new KPushButton("Start Getting!", mainVBox);
    QObject::connect(startGetButton, SIGNAL(clicked()),
                     this, SLOT(slotGetStart()) );
 
    setCentralWidget(mainVBox);
 }

このメソッドでは各種のGUI部品を作っています。 レイアウトに関しては、LabelとEditを横にならべ(QHBox)、そしてそれらを縦に並べる(QVBox)という構成になっています。 またボタンがクリックされるとslotGetStart?()を呼び出すようにSignal&Slotを設定します。

void kiosample::slotGetStart()
-{    
+{
    if (srcEdit->text().isEmpty() || targetEdit->url().isEmpty())
        return;
    if (isDownloading)
        return; //ダウンロード中
    kdDebug() << "kiosample : slotGetStart()" << endl;
 
    downloadData = new QBuffer;
    downloadData->open(IO_WriteOnly);
 
    /* ダウンロード開始 */
    KIO::TransferJob* job = KIO::get(KURL(srcEdit->text()), false, false);
    QObject::connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)),
                     this, SLOT(slotData(KIO::Job *, const QByteArray &)));
    QObject::connect(job, SIGNAL(result(KIO::Job *)),
                     this, SLOT(slotJobFinished(KIO::Job *)));
 
    isDownloading = true;
 }

ここが肝心のKIO::getを呼び出しているところです。 まずAPIを参照してTransferJob?を作り、そのjobが発信するsignalと下で説明するslotを接続しています。 また、job->addMetaData?("UserAgent?", "kiosample")等とすることによってjobに付加情報も与えることができます。

void kiosample::slotData(KIO::Job *job, const QByteArray& data)
 {
    if(data.isEmpty())
        return;
 
    /*
     *データをバッファに一時保存
     *slotDataは複数回呼ばれる可能性が有ります
     */
    downloadData->writeBlock(data.data(), data.size());
 }

KIO::getが他のoperationと違う点は、データを受け取って来るという点です。 そしてそのデータを受け取っている部分がここです。 slotDataは先程jobのdataシグナルと結びつけました。 また、この部分は複数回呼ばれる可能性があるため、QBufferオブジェクトに一時的に受け取ったデータを書き込んでいます。

void kiosample::slotJobFinished(KIO::Job *job)
 {
    if( job->error() ){
 	job->showErrorDialog();
        isDownloading = false;
 	return;
    }
 
    //ファイルに書き込み
    QFile file(targetEdit->url());
    file.open(IO_WriteOnly);
    file.writeBlock(downloadData->buffer());
 
    //一時データを削除
    delete downloadData;
    downloadData = 0;
 
    isDownloading = false;
 
    KMessageBox::information(this, "Download Finished!");
 }

jobが処理を終了したというシグナルを発するとこのスロットが呼ばれます。(上で呼ばれるようにしました) まずはエラーが起きていないかどうかをチェックし、それから先程受け取ったデータをファイルに書き込みます。 また、一時データをnewしたことを忘れないで下さい。newしたものは必ずdeleteしなければいけません。QObjectの子クラス以外は。

Counter: 33, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/Kastle%202003%A1%A7Qt4%A4%CB%B2%BF%A4%F2%B4%FC%C2%D4%A4%B9%A4%EB%A4%AB.php b/archives/Kastle%202003%A1%A7Qt4%A4%CB%B2%BF%A4%F2%B4%FC%C2%D4%A4%B9%A4%EB%A4%AB.php index 3a9cc0f..0887f0f 100644 --- a/archives/Kastle%202003%A1%A7Qt4%A4%CB%B2%BF%A4%F2%B4%FC%C2%D4%A4%B9%A4%EB%A4%AB.php +++ b/archives/Kastle%202003%A1%A7Qt4%A4%CB%B2%BF%A4%F2%B4%FC%C2%D4%A4%B9%A4%EB%A4%AB.php @@ -1,63 +1,63 @@

元記事:"Kastle 2003: What to expect from Qt 4"

間違いを見つけたら、どんどん修正しちゃってください。
また、直接編集しにくい場合には、一番下のコメント投稿機能を利用してみてください。

翻訳

日曜日の午後、Qtの開発ディレクターであるMatthias Ettrich氏は、Nové Hradyで開催されたKDE Developers' Conference 2003において、企業(Trolltech)のプレゼンテーションとは別に、the KDE/FreeQt FoundationとQtの開発におけるのこれまでとQt4に対する展望について話をする機会を与えられた。Qt4は、2004年にリリースされる予定であり、スタートアップや実行時におけるパフォーマンスの向上、より高い柔軟性と生産性、そして、学習プロセスの簡素化のための変更などが提供されるはずです。Matthias氏の自作のプレゼンテーションプログラムを使って表示されたスライドショーからのより多くの引用を読んで下さい。


Qt4は、大概は、検索や置換や「互換モード」といったコンパイルスイッチをほとんど使うことなく、ソースコード互換性が維持されるように試みられています。より多くのポーティングは、メタオブジェクトシステムを直接使うようなスタイルとコードにとって必須でしょう。

シンボルの削減、データの読み書きを減らし、静的な初期化をより僅かにすることで、スタートアップのパフォーマンスの向上が達成されるでしょう。また、mallocの回数の低下、より速くそしてさらに最適化されたツールクラス、メモリ消費の減少によって実行時のパフォーマンスが向上し、今日のデスクトップコンピュータよりも遅く、少ないメモリしか積んでないような組み込みデバイス上でもQt4が動作することが可能になるでしょう。


これらの発言を確固としたものにするために、Matthias氏は、Qt4でコンパイルするために必要なだけの変更をし、ポーティングしたQtデザイナーについて、いくつかの数字を提供しました。その内容は次の通りです。libqtのサイズは5%減少し、Qtデザイナーのリロケーションの数は30%減少し、mallocの回数は51%減少し、メモリの使用量は15%減少しました。また、正確に計ったQtデザイナーの起動時間は、18%減少しました。


Qt4は、1つのライブラリにはならず、より細かい粒度を可能とするよう、複数のライブラリによって構成されるようになります。例えば、以下の通り。

Qt4の新機能で、現時点で公開されているものの一部としては、以下のものがあります。


軽くて安全で使いやすい値ベースのコンテナ・ツールのクラスの、一貫した新しいセットをQt4は提供するでしょう。また、このコンテナ・ツールのクラスは、明示的に分けられ、スピードとメモリの使い方双方の点で高度に最適化されているでしょう。これを使うことは、Qt3.xやSTLの場合と比較されるようなわずかなコードまで拡大されていくでしょう。STLは、よりQtと共に使える状態になっているでしょう。


QStringとQByteArray?は、APIの改善の他に、パフォーマンスとメモリ使用の点について最適化されています。(そのAPIの改善における)重要な変更は、isNull()が無くなり、互換モードでのみ用意されます。latin1()のような関数は、常に妥当な値を返し、nullポインタを返すことは無くなるでしょう。この変更は、KDE開発者の間での議論となり反感をかいましたが、Matthias氏は、isEmpty()関数と演算子"!()"が存在していることを指摘しました。


Qt4は、来年中に最終リリース前の短いパブリックベータの期間を経て、1年以内に利用できるでしょう。これに加えて、Matthias氏がKDE開発者に対して質問をしました。その内容は、「KDEはQt4に移行するのか? 移行するとすればいつか?」、「KDEが移行するとき誰がどこで最初のポーティングを行うのか?」、「KDEのアーキテクチャのいくつかを書き直す機会としても使いますか?」といったものでした。多くのKDE開発者からの返答としては、hackfest週間において、KDEに必要とされていて長期間見あたらないと分かっているような追加されたクラスや機能について、Trolltech開発者にたずねるというものでしょう。

Counter: 44, today: 1, yesterday: 0

直接編集しにくい場合には、こちらからコメントを投稿してください。

お名前
サマリ 要旨を簡潔にお願いします。
コメント

コメントのリスト

投稿者サマリ投稿日
Daisuke Kamedaコメント投稿のテスト2003-08-31 (日) 16:11:53
- \ No newline at end of file + diff --git a/archives/Konqueror.php b/archives/Konqueror.php index 8983ca4..44ced73 100644 --- a/archives/Konqueror.php +++ b/archives/Konqueror.php @@ -1,32 +1,32 @@

kdebase?

本家サイト : http://www.konqueror.org/

Konquerorの機能

ファイルマネージャとしてもブラウザとしても動作します。

起動時間

silent機能を持っており、常にバックグラウンドで待機させることができます。これによって起動時間が格段に速くなります。

また待機させる数はKControlで設定することができます。(もちろん切ることもできます)

Web ショートカット

こちら

Tips

- \ No newline at end of file + diff --git a/archives/Konstruct-JP.php b/archives/Konstruct-JP.php index 9474880..03ce6cf 100644 --- a/archives/Konstruct-JP.php +++ b/archives/Konstruct-JP.php @@ -1,46 +1,46 @@

Konstruct

Konstruct-JPはKonstructに日本語パッチを付属して配布するものです。

現在、KDE/Qt関連のパッチが非常に散乱した状態に有る上、パッチを当ててまで問題を直そうとするユーザーは少ないと思われます。
そこでインストールする段階から組込んでおけば有る程度はパッチを作った人達の努力も報われるのではと思った次第です。 御意見やこのパッチも加えたらいいんじゃねえの等有りましたら是非寄せて頂きたいと思います。

対象パッケージパッチ名内容

今(3.2.1リリース)は特に当てるべきパッチが存在しません。 もし有りましたらコメント下さい。


パッチの加え方

3つの作業をするだけです。

  1. packagedir/filesにパッチを追加
  2. packagedir/checksumsを更新
  3. packagedir/Makefileにパッチを追加

また、パッチは↓の様に、 work/packagename-versinon/path/to/file という様に編集する必要が有ります。

 --- work/kdelibs-3.2.0/khtml/rendering/bidi.cpp 2004-02-05 13:44:14.000000000 +0900
 +++ tmp/kdelibs-3.2.0.new/khtml/rendering/bidi.cpp      2004-02-05 13:48:49.000000000 +0900

Counter: 34, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/Konstruct.php b/archives/Konstruct.php index 1bc5564..2d31b05 100644 --- a/archives/Konstruct.php +++ b/archives/Konstruct.php @@ -1,108 +1,108 @@

アプリケーションの紹介 インストール方法

  1. 本家サイト : http://developer.kde.org/build/Konstruct

KonstructはGARを用いたKDEのビルド補助ツールです。

cd meta/kde;make installというコマンドだけでKDE全体をインストールできます。

現在のversionは次の通りです。

stable版3.3.2

概要

  1. Konstructをダウンロード
  2. READMEの設定の項を見ながら gar.conf.mk を設定します(↓の訳を参考にして下さい)。
    1. 特にQtの項目は注意しましょう。時間が大幅に短縮されます。
  3. kde/category.mk, apps/category.mkを編集します。
    1. MASTER_SITES += ftp://ftp.kde.gr.jp/pub/kde/stable/3.2.3/src を追加。
    2. ビルド時の最適化を参考にOWN_CFLAGSを編集し、LD_FLAGSを追加。
    3. 以下のコマンドを実行。*1
      cd meta/kde;make install
       cd i18n/kde-i18n-ja;make install
  4. $KDEDIR, $QTDIR, $PATH, $LD_LIBRARY_PATHを設定
    export KDEDIR=~/kde$version
     export QTDIR=~/kde$version
     export LD_LIBRARY_PATH=~/kde$version/lib
     export PATH=~/kde$version/bin:$PATH

make installを実行するとringサーバーや他の場所からtar玉、そしてpatchのダウンロードが始まり、自動的にビルドが始まります。

他に入れたい物があればディレクトリを探索しましょう。一番下にも一部のせています。 以上。楽でしょう?

READMEの訳

(注)kde$versionとなっている所はkde3.1等と任意に解釈して下さい。

"Konstruct"はKDEとその関連アプリケーションのインストールを補助するビルドシステムです。

ソースのtarballをダウンロードし、状態をチェックし、解凍し、パッチをあて、configureを実行し、ビルドを行ない、そしてインストールします。

KDEを完全にインストールするには、"cd meta/kde;make install"とするだけという簡単さです。

オプションとしてKOffice?KDevelopそしてQuanta?といったソフトウェアも例えばkofficeの場合"cd apps/koffice; make install"と打つだけでインストールすることができます。

デフォルトではKonstcurtは"~/kde$version"ディレクトリにソフトウェアをインストールします。

これは、インストールするのにルート権限が必要なく、システムを汚すことも無く、Konstructを用いてインストールされたKDEは他のKDEには影響しないということです。

↓のテーブルは何MBのtarballがダウンロードされるかを示しています:

  Directory/Target  |   Size  | Description
  -------------------+---------+---------------------------------------------
   kde/kdebase       |   40MB  | ブラウザ、エディタ、ターミナル等
   meta/kmail-crypto |   48MB  | [[kdenetwork]]とcryptoライブラリ
   meta/kde          |  105MB  | "KDE $version"に属する全てのパッケージ
   meta/everything   |  177MB  | 本体に加えたすべてのアプリケーション。↓の表を見て下さい。

↓のテーブルはmeta/everythingに含まれない物を示しています。

  Directory/Target       | Reason
  ------------------------+---------------------------------------------------
   apps-unstable/         | Development versions, conflicting with apps/
   i18n/                  | Nobody needs everything, just pick your language
   kde/kdebindings        | Only needed for developing with non-C++ language

すでにQT3.1をインストールしている場合は、環境変数 HAVE_QT_3_1_INSTALLED("設定"を見て下さい)を設定してください。上記の表からダウンロードすべきMBが12MBずつ引かれます。(falseではなくコメントアウトして下さい。)

母国語にローカライズされたKDEをインストールしたいなら、i18n/ディレクトリを覗き、母国語のディレクトリに入って"make install"としてください。KOfficeをローカライズするには、"i18n/koffice-i18n-<language-code>"パッケージをインストールしてください。

"Konstruct"はStephan Binner(binner@kde.org)によってメンテナンスされています。 またNick Moffitt(http://www.lnx-bbc.org/garchitecture.html)によるGAR portsシステムに依っており、Jeff WaughによるGARNOME(http://www.gnome.org/~jdub/garnome/)に刺激を受けて開発されました。

準備

GNU tool(gcc, GNU make, flex, BSD yacc, gettext, patch etc.)とgzip and bzip2, md5sum, patch, wgetが必要です。

他の基本的なライブラリや、追加機能を可能にするライブラリは"Konstruct"には含まれていません。

http://www.kde.org/info/requirements/3.1.htmlに示されています。 "-dev"や"-devel"に含まれるヘッダファイルをインストールしなければならないことに注意して下さい。

設定

好きなように gar.conf.mk を変更してください。便利なオプションは、:

 GARCHIVEDIR すでにソースファイルをダウンロードしている場合はそのディレクトリを指定して下さい。
  prefix      どこにKDEをインストールするか。デフォルトでは"~/kde$VERSION/"です。
  OWN_CFLAGS  コンパイラフラグを設定します。
  HAVE_QT_3_1_INSTALLED  (moc, uic, headerを含む)Qt3.1をインストールしているかどうかを
                         設定します。Qtのインストールを省くことができます。
  BUILD_CLEAN ディスクの空き容量が少ない場合はセットして下さい。

使い方

まずインターネットに接続できることが必要です。

次にビルドしたいターゲットを選び、それが定義されたディレクトリに移動して下さい。(例えば kdebase? なら "cd kde/kdebase")

そして次に紹介するコマンドを入力して下さい。通常は"make install"と入力すればよいです。

それぞれのパッケージにGARシステムは7つのMakeターゲットを提供しています。

commanddescription
fetchパッケージをコンパイルするのに必要なすべてのファイルとパッチをダウンロードします。通常はtarball一つだけですが、たまにパッチが伴うことがあります。
checksummd5sumを使用してダウンロードしたファイルがメンテナーのものと適合するかどうかを確かめます。
extract必要なすべてのソースファイルが作業ディレクトリにあるかどうかを確かめます。
patchパッチ(3rdパーティーのパッチもしくはメンテナーのパッチ)を当てる必要がある場合はパッチを当てます。
configureパッケージをconfigureします。一般的にはautoconfやImake等を実行します。
build通常のコンパイル過程を行います。
install適切な場所にファイルを配置し、必要なすべての処理を仕上げます。

インストール後

インストール後はKDEのバイナリとライブラリをシステムに探させるためにいくつかの変数を設定します。Bashの例:

 export QTDIR=~/kde$version
  export KDEDIRS=~/kde$version
  export LD_LIBRARY_PATH=~/kde$version/lib
  export PATH=~/kde$version/bin:$PATH

KDEHOMEも設定してください。例えば"export KDEHOME=~/.kdetest"とすると設定をこのディレクトリに保存するようになるので、デフォルトの~/.kdeディレクトリには影響を及ぼしません。

KDEをスタートするには"startkde"を実行します。ほとんどのディストリビューションではこれをWINDOWMANAGER変数にセットするとKDEがスタートします。

-

最新のKonstructを入手するには r . j p / p u k i w i k i / i n d e x . p h p ? K o n s t r u c t # p f 3 d 1 5 7 e " t i t l e = " p f 3 d 1 5 7 e " > &d a g g e r ; / a > / h 3 > -

\ No newline at end of file +

最新のKonstructを入手するには r . j p / p u k i w i k i / i n d e x . p h p ? K o n s t r u c t # p f 3 d 1 5 7 e " t i t l e = " p f 3 d 1 5 7 e " > &d a g g e r ; / a > / h 3 > +

diff --git a/archives/Kplayer.php b/archives/Kplayer.php index 0739df0..df7fdaa 100644 --- a/archives/Kplayer.php +++ b/archives/Kplayer.php @@ -1,29 +1,29 @@

KDE 用のマルチメディアプレーヤー。

mplayer を利用しているため、以下のようなフォーマットを再生できる。

(まだまだある…)

当然、このアプリを利用するには mplayer のインストールが必要。

他の KDE 用のマルティメディアプレーヤーには kdemultimedia に標準で入っている noatun、mplayer に加え xine を利用する kmplayer などがある(kmplayer の利用には xine やmplayer に加え kdemultimedia のインストールが必要)。

kplayer ホームページ:http://kplayer.sourceforge.net/
mplayer ホームページ:http://www.MPlayerHQ.hu/homepage/

注意 ~

MPEG 等には特許の問題があるので、そのあたりは自己責任で…

Counter: 49, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/Lokalize.php b/archives/Lokalize.php index b1903bb..7b65be7 100644 --- a/archives/Lokalize.php +++ b/archives/Lokalize.php @@ -1,49 +1,49 @@

Lokalize ホームページ : http://userbase.kde.org/Lokalize

日本語翻訳の方法 TranslationAssignments

ここではLokalizeの最低限の設定と使用法について説明します。

Lokalizeとは

LokalizeはKDEの翻訳チームが使用しているKDE4向け(KDE3ではKBabelというツールを使用していました)の翻訳補助ツールです。翻訳メモリ(Translation Memory)による類似翻訳検索、編集の面において、強力な機能を持っています。翻訳メモリは共通フォーマットを使用しているため、PO/POTやXLIFFを使用している他の翻訳プロジェクトの人にも有用なツールでしょう。

インストールと設定

Lokalizeの設定(必須設定)

"設定"→"Lokalizeを設定..."にて設定ダイアログを開きます。 翻訳者と言語の情報を以下のように入力して下さい。(MLはKdeveloper宛にして下さい)

画面1:Lokalizeの設定画面
画面1:Lokalizeの設定画面

翻訳メモリ(TM)の設定(推奨設定)

"作成"で新たなTMを作成します。ここでのディレクトリはダウンロードした"trunk/l10n-support/ja/messages"の"messages"があるフォルダを指定します。

画面2:翻訳メモリ設定画面
画面2:翻訳メモリ

プロジェクトの設定(オプション設定)

ここでもルートフォルダとしてダウンロードした"trunk/l10n-support/ja/messages"の"messages"があるフォルダを指定します。

画面3:プロジェクトの設定画面
画面3:プロジェクトの設定画面

このようにプロジェクトの設定を行った場合、以下のようにリアルタイムの翻訳状況が確認できるようになります。

画面4:プロジェクトの概要表示
画面4:プロジェクトの概要表示

使用法

画面5:Lokalizeのメイン画面
画面5:Lokalizeのメイン画面

よく使うショートカット

以下のショートカットを覚えていくと作業がはかどります。

- \ No newline at end of file + diff --git a/archives/NetAccess%A4%CE%B1%BF%CD%D1%CB%A1.php b/archives/NetAccess%A4%CE%B1%BF%CD%D1%CB%A1.php index c33122c..fdcf718 100644 --- a/archives/NetAccess%A4%CE%B1%BF%CD%D1%CB%A1.php +++ b/archives/NetAccess%A4%CE%B1%BF%CD%D1%CB%A1.php @@ -1,21 +1,21 @@

kio

NetAccess?はKIOを簡単に使うためのインターフェースクラスです。 これを使う事によって一連のネットワーク処理を行う事ができます。 ただし、NetAccess?は同期的です。つまり、ネットワーク処理が終わるまで次の処理が行われません。この点は注意して下さい。

NetAccess?のリファレンス : http://developer.kde.org/documentation/library/cvs-api/kio/html/classKIO_1_1NetAccess.html

Counter: 14, today: 1, yesterday: 0
- \ No newline at end of file + diff --git a/archives/faq_for_kde_developers.php b/archives/faq_for_kde_developers.php index a4bf164..cf56ea8 100644 --- a/archives/faq_for_kde_developers.php +++ b/archives/faq_for_kde_developers.php @@ -1,90 +1,90 @@

KDE developer のための FAQ

これは http://techbase.kde.org/Development/FAQs を訳したものです。かなり昔に訳されたものなので、最新版と同期がとれていない可能性があります。内容は近々本家 Wiki にコミットされ、このページ自体は削除される予定です。

一般的な質問

新しいアプリケーションを書き始めたいのですが、何かアドバイスはありますか?

新たに書かなければいけない KDE アプリケーションがたくさんあるのは間違いありません。しかし、 あなたの助けを必要とする既存の KDE アプリケーションがたくさんあるのも確かです。

どの分野に助けが必要か知るには、このページをチェックしてください。

新しいアプリケーションを書き始める前に、apps.kde.comkde-devel@kde.org のメーリングリストで、誰かが似たようなプロジェクトをしていないかどうか確かるのは良いことです。

私は開発者です。どうすれば KDE に貢献できますか?

job list でオープンな仕事をチェックして下さい。あなたができる仕事は必ず1つはあるでしょう。

KOffice や Kdevelop などは高く評価されているにもかかわらず、開発者がとても少ないです。ですからそのあたりをチェックすると良いかも知れません。KDE のプロジェクトを手助けするのに、KDE のコアの開発者になる必要はりません。KDE は非常にうまくモジュール化されているので、全体のシステムがどうなっているか知らなくても、1つの分野を改良することができます。

また、kde-devel メーリングリストで、誰かがアプリケーション上での手助けを必要としているか質問することができます。

最新の KDE を使い必要とされていることを見付けて下さい。テーマジェネレータですか?konsole のスキーマエディタですか?ゲームの改良ですか?いつも小さな特徴が抜けているものです。実装してしまいましょう。

特定の分野に関してくわしかったり、興味があったりしますか?あなたの手助けが役に立つその分野に関連するアプリケーションがないかチェックして下さい。もしくはそのようなアプリを書いて下さい。KDE はおたく向けではないアプリケーションをもっと必要としています。

私は開発者ではありません。どうすればお手伝いできますか?

開発者のスキルを必要としない仕事がたくさんあります。KDE の促進のためにアプリケーションのレビューを書いたり(kde-promo メーリングリストを見て下さい)、ドキュメントチームを手伝ったり(i18n.kde.org/doc を見て下さい)、翻訳を手伝ったり(i18n.kde.orgを見て下さい)、新しく出てくるバグをフィルタリングするのを手伝って下さい(bugs.kde.org を見て下さい)。

Konqui dragon の画像はどこで手に入れることができますか?

ftp://ftp.kde.org/pub/kde/devel/konqi_sdk.tar.bz2 で入手可能です。

KDE に貢献するのに必要なスキルのレベルはどの程度ですか?何を学んでおくべきですか?何を読んでおくべきですか?

-

\ No newline at end of file +

diff --git a/support/documents/document/kde-tutorial-en.html b/support/documents/document/kde-tutorial-en.html index 5bdefee..c6ccccf 100644 --- a/support/documents/document/kde-tutorial-en.html +++ b/support/documents/document/kde-tutorial-en.html @@ -1,715 +1,715 @@ GUI Building with KDE

GUI Building with KDE

Richard J. Moore


Introduction

Creating GUIs with the KDE Desktop Environment is very easy thanks to the large number of preexisting GUI components that are available for you to use, and to the framework Qt provides for developers. Unfortunately while there is a large body of public domain source code (for example the entire KDE), and detailed class documentation to learn from, there has not been a tutorial that explains how to put things together to create a GUI. The aim of this document is to provide such a tutorial. To make this discussion concrete I will develop a very simple KDE application adding such details as `Drag and Drop', URL support and online help. This document does not try to explain C++ or basic compilation issues, it is only concerned with how to put a GUI together.

To begin with we'll just create a very simple GUI consisting only of a menubar containing a single menu. The only item in the menu will be the `Exit' command. From this rather humble beginning we'll extend our application into a simple but functional text editor. This may seem like a rather formidable task for a tutorial, but as you will see by reusing the existing components provided by Qt and KDE it is made very simple in practice.  I'll give the code first then go through it in detail afterwards. All of the example code is available free for download from the KDE development website at http://developer.kde.org/examples.tar.gz.
 

A Minimal Application

We'll now examine in detail a minimal KDE Application. The application only provides a single function `Exit', but already supports floating menubars, session management and internationalisation.
 
 #ifndef EDIT_H
 #define EDIT_H
 
 #include <ktopwidget.h>
 
 class Edit : public KTopLevelWidget
 {
   Q_OBJECT
 
 public:
   Edit();
 
   ~Edit();
 
 public slots:
  void commandCallback(int id_);
 
 private:
   // Child widgets
   KMenuBar *menu;
 };
 #endif // EDIT_H
 
Edit class declaration 
 
  The first thing to look at is the class declaration, as you can see our application is implemented as the class Edit. Edit is a subclass of KTopLevelWidget (KTLW) which is the baseclass of all KDE applications. KTLW manages an applications menu bar, status bar and toolbars, and provides support for session management. The next thing in the class declaration is the `Q_OBJECT' macro, this is needed in order to support the important Qt features of `signals' and `slots'. The only slot in the Edit class is the commandCallback() method, it has been declared as a slot with `public' access by the line that reads `public slots:'. A slot is essentially a sort of typesafe callback method, it will be called by objects that the Edit class has expressed an interest in using the connect() method. The rest of the class declaration is like any other C++ class.
 
 #include <kapp.h>
 #include <kmenubar.h>
 #include "edit.h"
 
 const int ID_EXIT= 111;
 
 Edit::Edit()
 {
   QPopupMenu *file = new QPopupMenu;
 
   file->insertItem(klocale->translate("Exit"), ID_EXIT);
 
   menu = new KMenuBar( this );
   CHECK_PTR( menu );
   menu->insertItem( klocale->translate("File"), file );
   menu->show();
   setMenu(menu);
 
   // Connect things together
   connect (file, SIGNAL (activated (int)), SLOT (commandCallback (int)));
 }
 
 Edit::~Edit()
 {
 
 }
 
 void Edit::commandCallback(int id_)
 {
   switch(id_) {
   case ID_EXIT:
     exit(0);
     break;
   }
 }
 
 #include "edit.moc"
 
Edit class implementation

Now we'll study the implementation of our Edit class, looking first at the constructor. The constructor creates a QPopupMenu object, this is the File menu. We add the `Exit' item using the insertItem() method. The first parameter is the string to be displayed in the menu, the second is an integer id (you can find out about all the methods of a class by looking at it's class documentation). In order to prepare the applet for translation we call klocale->translate() rather than just setting the label to the literal string 'Exit', this should be done for any string the user will see. We don't have to create our own KLocale object as KApplication (the base class of all KDE application objects) creates one for us. We access the KLocate object using the klocale macro provided by kapp.h.

The next thing we need to do is create a menubar to contain our menu, we do this using a KMenuBar widget. The CHECK_PTR macro used to ensure the widget was created successfully is a Qt provided macro that checks it's parameter is not 0 (if the parameter is 0 it terminates the application with an error message). We create the 'File' item in almost the same way as we created the menu entry (the similarity should come as no suprise once you know that QPopupMenu and KMenuBar have a common baseclass QMenuData). Again we need to call KLocale as string 'File' will be visible to the user. We display our menu by calling its show() method then tell KTLW to manage our menu with setMenu().

The final stage in making our applet work is to connect the menubar entry to some code to exit the application, that's what the connect() call does. Qt applications (and hence KDE applications) use signals and slots to wire one widget to another. A widget (or any other QObject) will emit a signal whenever it's state changes, our applet uses the activated() signal that a QPopupMenu emits when a user selects a menu item. This signal must be connected to the commandCallback() slot we declared in the Edit class. As you can see the commandCallback() slot looks no different to a normal method, the only difference is the declaration that this method is a slot in the header file. commandCallback() exits the program if the id_ parameter it was passed is the constand ID_EXIT - the same constant we used to identify the 'Exit' menu item. Signals and slots can have parameters and they are treated like those of any other method. Qt checks that the type signature of the signal matches that of the slot (and reports the error if they do not match). Now we can take a look at the connect() method call in the Edit constructor.
 
   connect (file, SIGNAL (activated (int)), SLOT (commandCallback (int)));
 
Connecting a signal to a slot

The first parameter is the object that will omit the signal, in our case it's the QPopupMenu file. The next parameter is the signal to be connected, you must specify the name of the signal and the types of it's parameters (as they appear in the class header file or class documentation) using the SIGNAL() macro. The last parameter connect() takes is the slot specified using the SLOT() macro and specifying it's parameters as before. Qt will inform you at run time if the connection is invalid. QObject provides a number of other overloaded versions of the connect() method, you should look at the Qt class documentation for more details. It is perfectly acceptable to connect a signal to more than one slot or to connect more than one signal to a single slot.

The last feature to note about this simple applet is that we include the file edit.moc at the end of the class implementation. The `moc' file is the output of the moc preprocessor that must must be applied to any class that inherits QObject. You normally invoke moc via a makefile rather than directly and you must ensure that its output is compiled and linked to your application. The easiest way to ensure this is to simply include the moc output in the class implementation which is the approach used here. It is important to ensure that moc is rerun if you change the class declaration or you may get strange errors.

You may think that this was a lot of work just to create a completely useless applet, but we've come a long way already: We've learned about session management, creating menus, internationalisation and the basis of Qt, signals and slots. The next stage will be to make our applet actually do something!

Adding functionality

Now that we know the basics we can move on a bit more quickly, so I won't be covering the code in quite as much detail as in the last section. Our aim now is to make the applet do something, in our case we want to be able to edit text.

You can see the complete code for this version of Edit as example2 in the source files for this tutorial.

Qt provides us with QMultiLineEdit, a widget for editing text, this will form the core of our editor applet. We declare a member variable to hold the widget in the Edit class declaration like this:
 
   QMultiLineEdit *view;
 
Declaring the editor widget
All we need to do now is create the widget in Edits constructor and tell KTLW to manage it.
 
   view= new QMultiLineEdit(this, "Main View");
   setView(view);
 
Creating the editor widget

We already know how to add menu items, so adding some new ones for load and save is easy. The code is almost the same as that for the 'Exit' item (note that we now need some more constants like ID_SAVE to identify the new commands).
 
   file->insertItem(klocale->translate("Open..."), ID_OPEN );
   file->insertItem(klocale->translate("Save"), ID_SAVE);
   file->insertItem(klocale->translate("Save As..."), ID_SAVEAS);
 
Adding some more menu items
Notice that these entries all end in an ellipsis ('...'), this indicates that selecting this item will cause a dialog to be displayed for the user to give more information. Using an ellipsis in this way is almost universal across all GUIs and you should follow this convention religiously.

Now that we've created the menu items, all that remains is to make them do something. The code required is very straight forward. We'll look first at the `Open' command. All we need to do is create a new case in the switch statement of the commandCallback() slot, and then add the code to open a file.
 
   case ID_OPEN:
     name= QFileDialog::getOpenFileName();
     if (!name.isEmpty()) {
       load(name);
     }
     break;
 
Opening a file in Edit
The new code makes use of a static method of the QFileDialog class to pop up a modal file dialog and get a filename. If the user pressed the `Cancel' button then the empty string is returned so we test for this case and do nothing. If the user selected a filename then we read the file into the editor widget by calling the load method.

The load method uses the QFile class to read the contents of the selected file. The QFile class is provided by Qt and provides an easy to use platform independent way to access files. It is used here in combination with QTestStream which lets us read the contents of the file a line at time. Each line is appended to the text widget as it is read. It is important to keep track of the name of the current file name (so we can implement `Save') so we add a new instance variable filename_ to the Edit class. This value is set by the load method.
 
   void Edit::load(const char *filename) {
       QFile f( filename );
       if ( !f.open( IO_ReadOnly ) )
 	  return;
 
       view->setAutoUpdate( FALSE );
       view->clear();
 
       QTextStream t(&f);
       while ( !t.eof() ) {
   	QString s = t.readLine();
 	view->append( s );
       }
       f.close();
 
       view->setAutoUpdate( TRUE );
       view->repaint();
       filename_= filename;
   }
 
The implementation of the load() method.
One feature of this method to note is the use of setAutoUpdate() to prevent flickering and improve performance. The effect is to disable redraws for the text widget until the entire file is read in - otherwise the widget would be repainted for each line. It is very important not to leave a widget in this state, so when we have finished reading the file we call setAutoUpdate() again to re-enable updates. We also call repaint() to ensure the widget is properly redrawn.

The 'Save As' command is almost the same as the 'Open' command. We now use the getSaveFileName() which unlike getOpenFileName() does not require that the filename choosen should be that of an existing file. The save command is also easy: if we already know the filename then save the text, if not then call the saveAs() command.
 
     case ID_SAVE:
       if (!filename_.isEmpty())
         saveAs(filename_);
       else {
         name= QFileDialog::getSaveFileName();
         if (!name.isEmpty())
           saveAs(name);
       }
       break;
     case ID_SAVEAS:
       name= QFileDialog::getSaveFileName();
       if (!name.isEmpty())
         saveAs(name);
       break;
 
Saving a file in Edit
The code to actually save the file is simple, we use QFile as before, but this time we open the file with the IO_WriteOnly flag to indicate we want to open the file for output. We write the whole text as a single (multiline) string obtained with the text() method of QMultiLineEdit;
 
   void Edit::saveAs(const char *filename) {
       QFile f( filename );
       if ( !f.open( IO_WriteOnly ) )
 	  return;
 
       QTextStream t(&f);
       t << view->text();
       f.close();
 
       setHint(filename);
       filename_= filename;
   }
 
The implementation of the saveAs() method.
The last feature of this version of the example is an `About' box. This is a dialog box usually accessed using the `About...' entry in the `Help' menu. This is implemented here by calling the static method QMessageBox::about(). `About' boxes are usually used to display information such as the version number, author and vendor of an application.


 
     case ID_ABOUT:
       QMessageBox::about(this, "About Edit",
 	  	         "This is a simple text editor example program.");
       break;
 
The implementation of the saveAs() method.

Improving the user interface

Our applet is now capable of performing useful tasks, but its user interface is rather poor. There are a number of deficiencies such as the lack of a warning if you exit without saving changes, the lack of any display of the name of the currently open file, and a lack of keyboard shortcuts. We'll now try to rectify some of these defects.

The first thing we'll tackle is adding a status bar to our applet, we'll use it to display the name of the currently open file. KDE provides a status bar widget, KStatusBar, and KTLW knows how to manage it, so there's not much left for us to do. KStatusBar has an API very similar to that of the menu widgets so you should be able to figure out what's going on. Note that after showing our status bar we tell KTLW to manage it. We can change the string displayed on the status bar using the id constant ID_HINTTEXT, this is implemented in the slot setHint().
 
   void Edit::initStatusBar()
   {
     statusbar= new KStatusBar(this);
     statusbar->insertItem("Welcome to Edit", ID_HINTTEXT);
     statusbar->show();
     setStatusBar(statusbar);
   }
 
   void Edit::setHint(const char *text)
   {
     statusbar->changeItem(text, ID_HINTTEXT);
   }
 
 
Adding a status bar.

We set the string in the status bar when the user invokes any method that changes the filename, for example loading and saving.

We'll now add a toolbar to Edit, this is slightly more complicated as we need to assign icons to the buttons and setup the tooltips. We make use of the KIconLoader class to handle loading (and caching) of the toolbar icons. This class searches in the directories specified by the KDE File System Standard for an icon, which as we're only using standard icons, suits us fine. We use a macro provided by kapp.h to access the icon loader created by KApplication.
 
   void Edit::initToolBar()
   {
     KIconLoader *loader = kapp->getIconLoader();
     toolbar = new KToolBar(this);
 
     toolbar->insertButton(loader->loadIcon("filenew.xpm"),
 			  ID_NEW, TRUE,
 			  klocale->translate("Create a new file"));
     toolbar->insertButton(loader->loadIcon("fileopen.xpm"),
-	 		  ID_OPEN, FALSE, 
+	 		  ID_OPEN, FALSE,
 			  klocale->translate("Open a file"));
     toolbar->insertButton(loader->loadIcon("filefloppy.xpm"),
-			  ID_SAVE, FALSE, 
+			  ID_SAVE, FALSE,
 			  klocale->translate("Save the current file"));
 
     addToolBar(toolbar);
     toolbar->setBarPos(KToolBar::Top);
     toolbar->show();
     connect(toolbar, SIGNAL(clicked(int)), SLOT(commandCallback(int)));
   }
 
 
Adding a toolbar.
Each toolbar item is created by a call to insertButton(). This method takes the icon (accessed using KIconLoader), the command id, a flag to indicated if the button is enabled and the text for the tooltip as parameters. As usual we allow for i18n support and wrap the tooltip in a call to klocale->translate().

We connect the toolbars clicked signal to the same slot as we use for the menus. This is perfectly safe as we are using the same id numbers for commands in each, and we are free to connect as many signals as we want to a slot.

It is generally good practice when designing a user interface to prevent the user invoking an operation that cannot be performed. We do this in Qt by enabling and disabling widgets depending on the state of the application. For example if you have made no changes to a document then saving to its original file makes no sense (though saving it to a different file is often useful). All Qt and KDE widgets have a method setEnabled() which is used to `grey out' the widget and disable it.

KMenuBar and KToolbar both make the process of enabling and disabling their entries easy by providing a method which will set the state of an entry specified by its command id. We call both of these in the implementation of enableCommand().
 
   void Edit::enableCommand(int id) //SLOT
   {
     toolbar->setItemEnabled(id, true);
     menu->setItemEnabled(id, true);
   }
 
   void Edit::disableCommand(int id) // SLOT
   {
     toolbar->setItemEnabled(id, false);
     menu->setItemEnabled(id, false);
   }
 
Enabling and disabling commands.
We shall now use these methods to implement context sensitive enabling and disabling of commands. To make the `Save' command disabled when there are no changes to save we need to keep track of when the text is modified, this is dome using the textChanged() signal emitted by QMultiLineEdit when the user edits the text. Using this signal we can create a flag to indicate if the text has been changed. This is handled by the textChanged() slot defined by the Edit class. This slot also updates the state of the commands.
 
 void Edit::textChanged()
 {
   modified= true;
   enableCommand(ID_SAVE);
   enableCommand(ID_SAVEAS);
 }
 
The definition of the textChanged() slot.
Note that the load and save methods must also be modified to keep the flag up to date, and to enable or disable commands. You can see these changes for yourself by looking at the example programs.

The final thing we will add to our editor in this section is a confirmation dialog to be shown when the user tries to exit when there are unsaved changes in the editor. The dialog is a standard Qt warning dialog.

The dialog is implemented using the exit() method. This method simply tests the flag we created to indicate modifications, and uses another static method of QMessageBox to display a warning dialog.


 
   int Edit::exit()
   {
     int die= 0;
- 
+
     if (!modified)
       die= 1;
     else
       if (QMessageBox::warning(this, klocale->translate("Unsaved Changes"),
   			       "You have unsaved changes, you will loose "
 			       "them if you exit now.",
 			       "Exit", "Cancel",
 			       0, 1, 1))
          die= 0;
       else
         die= 1;
 
     return die;
   }
 
The definition of the exit() method.

Forthcoming...


This document is Copyright Richard J. Moore 1997-1998 (rich@kde.org)
You are free to distribute the examples given here in any form what so ever, and under any license terms. You are however NOT free to do the same with the text of the tutorial itself. You are permitted to distribute the text of the tutorial in electronic formats as long as it is distributed in its entirity. You may not charge for this document, though you may recoup packaging costs. You may make paper copies for personal use only. If you want to distribute this under other terms then drop me a mail.