<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/tracdoc_jp/">
    <title>雑用</title>
    <link>http://w.atwiki.jp/tracdoc_jp/</link>
    <atom:link href="https://w.atwiki.jp/tracdoc_jp/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>雑用</description>

    <dc:language>ja</dc:language>
    <dc:date>2007-06-03T21:44:17+09:00</dc:date>
    <utime>1180874657</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/6.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/7.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/8.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/tracdoc_jp/pages/9.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/12.html">
    <title>FlashDevelop</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/12.html</link>
    <description>
      オープンソースの ActionScript 向け IDE。開発環境は .NET Framework で、[[SharpDevelop&gt;http://www.icsharpcode.net/OpenSource/SD/]] を使って開発することができます。

-本拠地 - http://www.flashdevelop.org/community/
-svn リポジトリ - http://svn1.cvsdude.com/osflash/flashdevelop/

複数ペインを持ったエディタを作る際の参考にするため、ソースコードを解読してます。

----

VS で言うところのソリューションエクスプローラに当たるのが ProjectManager。

**ProjectManager でファイルをダブルクリックし、編集画面が開かれる過程。

ProjectManager.Controls.TreeView.ProjectTreeView の DefWndProc() がウィンドウメッセージを処理します。ここで、ダブルクリックされると DoubleClick イベントが呼び出されます。DoubleClick の挙動は、ProjectManager.PluginMain.TreeDoubleClick() で定義されています。ここから色々たらいまわしにされて、ProjectManager.PluginMain.OpenFile() にたどり着きます。ダブルクリックされたファイルの条件が合えば、MainForm.OpenEditableDocument() が呼び出され、ファイルが開かれます。MainForm は PluginMain のスタティックプロパティで、IMainForm 型です。実際に参照する値は、PluginBase.MainForm で、この値は PluginBase の Initialize() の引数として渡されます。PluginBase は非常に小さなクラスで、全てのメンバ（IMainForm, IProject, Initialize() ）がスタティックです。

IMainForm が何かと言うと、文字通りメインフォームのインタフェースなのですが、興味深いことに、あくまで実装を伴わないインタフェースであり、その名前空間は PluginCore です。FlashDevelop.MainForm は、この IMainForm を実装します。つまり PluginCore ありきで FlashDevelop ができているわけです。

ここらで、なぜこれを調べていたかの理由について書きます。理想論で言えば、下位に位置するもの（今回は ProjectTreeView）は、上位に位置するもの（IMainForm）に依存しないべきです。ProjectTreeView が IMainForm に依存した実装になってしまうことで、そのクラスは IMainForm がなくなると使えなくなります。例えば、他のプロジェクトなどで ProjectTreeView を使うためには修正が要るということです。ProjectTreeView が上位のオブジェクトに何かを伝えたければ、コールバックなどの仕組みを使うのが一般的です。しかし、FlashDevelop のケースではそうではありませんでした。インタフェースという間接的な形であれ、上位のクラスについての情報を下位のクラスが持つという構造になっていました。これが現実なのかなぁというのが正直な感想です。実際、このようにしてしまったほうが生産性も上がるし、実行効率もいいと思います。

現実的なケースとして、ブラウザを考えます。ブラウザ全体の子要素として、メインとなるブラウザ部分（ビューと呼びます）や、メニューバー、ツールバー、アドレスバーなどがあります。ビューでリンクをクリックすると、アドレスバーに表示されるアドレスは変わり、ツールバーの「戻る」ボタンが押せるようになります。この処理はどのように実装されるべきでしょうか。先ほどの理想論では、ブラウザがビューに設定したコールバック関数が呼び出され、その中でアドレスバーのアドレスの変更などが行われます。

 // 初期化時
 view.AddEventListener(PAGE_CHANGED, OnPageChanged);
 
 void OnPageChanged(const string&amp; url) {
   addressBar.SetURL(url);
   toolbar.GetButton(GO_BACK).SetEnable(true);
 }

といった感じで。方や妥協案では、ビュー側でこの処理を行います。どっちがいいか、設計思想しだいですね。

----    </description>
    <dc:date>2007-06-03T21:44:17+09:00</dc:date>
    <utime>1180874657</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/1.html</link>
    <description>
      trac のドキュメントを和訳しようと思って作った wiki のはずが、すでに和訳されていることを知り愕然としたため、単なる雑用 wiki になってしまいましたとさ。

現状の方向性
-[[FlashDevelop]] のソースコード解読メモ    </description>
    <dc:date>2007-06-03T20:26:14+09:00</dc:date>
    <utime>1180869974</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/2.html</link>
    <description>
      メニュー
-[[トップページ]]
-[[プラグイン]]
-[[メニュー]]
-[[メニュー2]]

----


-[[@ウィキ ガイド&gt;http://atwiki.jp/guide/]]
-[[@wiki 便利ツール &gt;http://atwiki.jp/tools/]]
-[[@wiki&gt;http://atwiki.jp]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


**更新履歴
#recent(20)
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/3.html">
    <title>メニュー2</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/4.html">
    <title>プラグイン/ニュース</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/4.html</link>
    <description>
      * ニュース
@wikiのwikiモードでは
 #news(興味のある単語)
と入力することで、あるキーワードに関連するニュース一覧を表示することができます
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_174_ja.html


-----


たとえば、#news(wiki)と入力すると以下のように表示されます。


#news(wiki)
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/5.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/5.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_117_ja.html


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/6.html">
    <title>プラグイン/アーカイブ</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/6.html</link>
    <description>
      * アーカイブ
@wikiのwikiモードでは
 #archive_log()
と入力することで、特定のウェブページを保存しておくことができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/25_171_ja.html


-----


たとえば、#archive_log()と入力すると以下のように表示されます。
保存したいURLとサイト名を入力して&quot;アーカイブログ&quot;をクリックしてみよう


#archive_log()
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/7.html">
    <title>プラグイン/動画(Youtube)</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/7.html</link>
    <description>
      * 動画(youtube)
@wikiのwikiモードでは
 #video(動画のURL)
と入力することで、動画を貼り付けることが出来ます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_209_ja.html

また動画のURLはYoutubeのURLをご利用ください。
＝＞http://www.youtube.com/

-----


たとえば、#video(http://youtube.com/watch?v=kTV1CcS53JQ)と入力すると以下のように表示されます。


#video(http://youtube.com/watch?v=kTV1CcS53JQ)

    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/8.html">
    <title>プラグイン</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/8.html</link>
    <description>
      @wikiにはいくつかの便利なプラグインがあります。

-----


#ls

-----

これ以外のプラグインについては@wikiガイドをご覧ください
=&gt;http://atwiki.jp/guide/
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/tracdoc_jp/pages/9.html">
    <title>プラグイン/関連ブログ</title>
    <link>https://w.atwiki.jp/tracdoc_jp/pages/9.html</link>
    <description>
      * 関連ブログ
@wikiのwikiモードでは
 #bf(興味のある単語)
と入力することで、あるキーワードに関連するブログ一覧を表示することができます

詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_161_ja.html

-----


たとえば、#bf(ゲーム)と入力すると以下のように表示されます。


#bf(ゲーム)
    </description>
    <dc:date>2007-05-12T12:26:40+09:00</dc:date>
    <utime>1178940400</utime>
  </item>
  </rdf:RDF>
