《付録》dirComposite.xaml

<!--
#    Copyright (C) 2000-2008, (^.^) piyo-piyo Tamago-Club
#
# History: WPF examples
#    2008/01/25, IronPython 1.1.1 (download)
#    2008/08/22, IronPython 1.1.2 (download)
#    2008/03/16, ver.2.0, WPF
#    2008/00/00, ver.2.1, IronPython 1.1.2 
-->
<DockPanel LastChildFill="True"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/sparkle">

  <Button Name="button" DockPanel.Dock="Top"> Open </Button>
  <Label Name="total" DockPanel.Dock="Bottom" />
  <TextBox Name="textView" VerticalScrollBarVisibility="Auto" />
</DockPanel>

第1章 Composite パターン 1/5

記事一覧 C#.use(better, IronPython=”WPF”)《IronPython2.6》
# IronPython で学ぶ WPF プログラミングの世界

Composite パターン

《著》本間りす+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第3版♪2008/04/28

Composite パターンには、いくつの効能があります。ここでは、if/else に象徴される典型的なハードコーディングの問題点を回避するとともに、動的な問題解決が可能になる事例を紹介します。

適用事例: Composite パターン

木構造を持つオブジェクトの集合体を管理したいときに、すぐに思い浮かぶのは古典的な〈GoF〉Composite パターンです。最初は、既存のコントロールに頼らずに、このパターンを適用した事例から紹介します。
まず、パターンの復習から始めます。古典的な Composite パターンを踏襲するための布石が、dirComposite.py です。このとき、複合/単一オブジェクトの違いを意識せずに、オブジェクトの集合体を一様に扱うための工夫が必要になります。


>ipy.exe dirComposite.py

アプリケーションを起動すると、ウィンドウが現れます。1)ボタン〔Open...〕をクリックすると、次のようなダイアログが現れます。



任意のファイルを選択すると、



選択したファイルを含むフォルダーの木構造が、ビューに表示されます。ここでは、選択したファイル CompiledModule.cs を含むフォルダー Compiler を頂点とする、木構造が得られます。
その項目がフォルダーなら、名前に続いて、その傘下にあるファイルサイズの合計が表示されます。その項目がファイルなら、名前に続いて、そのサイズが表示されます。たとえば、フォルダー Compiler の傘下にあるファイルの合計が 759110 バイトであり、ファイル Binder.cs のサイズが 14248 バイトであるのが分かります。

何が問題か:大量のスクロール

テキストボックス内には、次のような情報が表示されます。ところが、全体を眺めるには、何度もスクロークする必要があり、実用的ではありません。そこで、既存のコントロールの中から、何か利用できるものがないか、探りたくなります。

+-- Compiler [759110]
    +-- AST [237712]
        +-- Binder.cs [14248]
        +-- ClassDef.cs [6750]
        +-- Expressions.cs [39651]
        +-- FlowChecker.cs [15439]
        +-- FuncDef.Generated.cs [2245]
        +-- FuncDef.cs [28715]
        +-- Node.cs [3518]
        +-- Operator.Generated.cs [5466]
        +-- Operator.cs [6216]
        +-- ScopeStatement.Generated.cs [2607]
        +-- ScopeStatement.cs [21505]
        +-- Statements.cs [67752]
        +-- Walker.Generated.cs [23600]
    +-- CompiledModule.cs [4887]
    +-- CompilerContext.cs [3912]
    +-- CompilerHelpers.cs [3066]
    +-- Generation [256579]
        +-- AssemblyGen.cs [11034]
        +-- CodeGen.cs [68231]
        +-- EnvironmentFactory.cs [3547]
        +-- EnvironmentNamespace.cs [4428]
        +-- EnvironmentReference.cs [3102]
        +-- Namespace.cs [4008]
        +-- NewSubtypeMaker.cs [3449]
        +-- NewTypeMaker.cs [48446]
        +-- OutputGenerator.cs [23332]
        +-- Slot.cs [22294]
        +-- SlotFactory.cs [4765]
        +-- TypeGen.cs [11418]
        +-- UserTypeGenerator.cs [48525]
    +-- MethodBinder.cs [55094]
    +-- MethodTracker.cs [5645]
    +-- NameConverter.cs [7151]
    +-- NameEnv.cs [2707]
    +-- NewTypeInfo.cs [3285]
    +-- Options.cs [9858]
    +-- Parser.cs [96070]
    +-- ParserSink.cs [1866]
    +-- Token.cs [6316]
    +-- TokenKind.Generated.cs [22274]
    +-- Tokenizer.Generated.cs [6289]
    +-- Tokenizer.cs [36399]

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/11/20