UIPainterView.st
changeset 2231 ae58d3ccbbfd
parent 2229 21727bdd8221
child 2244 580cac31c444
equal deleted inserted replaced
2230:33c98cefa7e6 2231:ae58d3ccbbfd
  1819     ].
  1819     ].
  1820     ^ nil
  1820     ^ nil
  1821 !
  1821 !
  1822 
  1822 
  1823 propertyOfName:aString
  1823 propertyOfName:aString
  1824     "returns property assigned to name
  1824     "returns the property for a given widgets name (name in tree)"
  1825     "
  1825 
  1826     |name|
  1826     |name|
  1827 
  1827 
  1828     aString isNil ifFalse:[
  1828     aString isNil ifFalse:[
  1829 	name := aString string withoutSeparators.
  1829         name := aString string withoutSeparators.
  1830       ^ treeView propertyDetect:[:p| p name = name ].
  1830         ^ treeView propertyDetect:[:p| p name = name ].
  1831     ].
  1831     ].
  1832     ^ nil
  1832     ^ nil
  1833 !
  1833 !
  1834 
  1834 
  1835 propertyOfParentForView:aSubView
  1835 propertyOfParentForView:aSubView
  1857     ].
  1857     ].
  1858     ^ nil
  1858     ^ nil
  1859 !
  1859 !
  1860 
  1860 
  1861 uniqueNameFor:aSpecOrString
  1861 uniqueNameFor:aSpecOrString
  1862     "generate and return an unique name for a class
  1862     "generate and return a unique name for a specClass or an items name.
  1863     "
  1863      (unique name in the tree)"
  1864     |next name size|
  1864 
  1865 
  1865     |maxUsedIndex name nameLen|
  1866     aSpecOrString isString ifFalse:[name := aSpecOrString userFriendlyName]
  1866 
  1867 			    ifTrue:[name := aSpecOrString].
  1867     name := aSpecOrString isString 
  1868 
  1868                 ifFalse:[aSpecOrString userFriendlyName]
  1869     size  := name size + 1.
  1869                 ifTrue:[aSpecOrString].
  1870     next  := 0.
  1870 
       
  1871     nameLen := name size.
       
  1872     maxUsedIndex := 0.
  1871 
  1873 
  1872     treeView propertiesDo:[:p|
  1874     treeView propertiesDo:[:p|
  1873 	|n|
  1875         |thisName|
  1874 	n := p name.
  1876 
  1875 
  1877         thisName := p name.
  1876 	(n size >= size and:[n startsWith:name]) ifTrue:[
  1878 
  1877 	    next := next max:(p extractNumberStartingAt:size)
  1879         (thisName size > nameLen and:[thisName startsWith:name]) ifTrue:[
  1878 	]
  1880             maxUsedIndex := maxUsedIndex max:(p extractNumberStartingAt:nameLen+1)
  1879     ].
  1881         ]
  1880     next := next + 1.
  1882     ].
  1881     name := name, next printString.
  1883     ^ name, (maxUsedIndex+1) printString.
  1882   ^ name
       
  1883 
       
  1884 
       
  1885 
       
  1886 
       
  1887 !
  1884 !
  1888 
  1885 
  1889 uniqueNameOf:aView
  1886 uniqueNameOf:aView
  1890     |prop|
  1887     |prop|
  1891 
  1888 
  2012         aBuilder applicationClass:cls.
  2009         aBuilder applicationClass:cls.
  2013     ].
  2010     ].
  2014 
  2011 
  2015     "/ remember view<->spec associations to tree
  2012     "/ remember view<->spec associations to tree
  2016     aBuilder componentCreationHook:[:aView :aSpec :builder|
  2013     aBuilder componentCreationHook:[:aView :aSpec :builder|
  2017         |sv p s n|
  2014         |newProperty copyOfSpec nameOfSpec|
  2018 
  2015 
  2019         p := ViewProperty new.
  2016         newProperty := ViewProperty new.
  2020         s := aSpec copy.
  2017         copyOfSpec := aSpec copy.
  2021         p spec:s.
  2018         newProperty spec:copyOfSpec.
  2022         p view:aView.
  2019         newProperty view:aView.
  2023 
  2020 
  2024         "/ break refs to child-specs
  2021         "/ break refs to child-specs
  2025         "/ (not needed, as we keep the child info in the view hierarchy)
  2022         "/ (not needed, as we keep the child info in the view hierarchy)
  2026         s class supportsSubComponents ifTrue:[
  2023         copyOfSpec class supportsSubComponents ifTrue:[
  2027             s component:nil
  2024             copyOfSpec component:nil
  2028         ].
  2025         ].
  2029 
  2026 
  2030         n := s name.
  2027         nameOfSpec := copyOfSpec name.
  2031 
  2028 
  2032         (n isNil or:[(self propertyOfName:n) notNil]) ifTrue:[
  2029         (nameOfSpec isNil or:[(self propertyOfName:nameOfSpec) notNil]) ifTrue:[
  2033             s name:(self uniqueNameFor:s)
  2030             copyOfSpec name:(self uniqueNameFor:copyOfSpec)
  2034         ].
  2031         ].
  2035         treeView addProperty:p.
  2032         treeView addProperty:newProperty.
  2036     ].
  2033     ].
  2037     ^ aSpecification buildViewWithLayoutFor:aBuilder in:aFrame.
  2034     ^ aSpecification buildViewWithLayoutFor:aBuilder in:aFrame.
  2038 
  2035 
  2039     "Modified: 4.7.1997 / 23:48:55 / cg"
  2036     "Modified: 4.7.1997 / 23:48:55 / cg"
  2040 !
  2037 !
  2433 ! !
  2430 ! !
  2434 
  2431 
  2435 !UIPainterView::ViewProperty methodsFor:'misc'!
  2432 !UIPainterView::ViewProperty methodsFor:'misc'!
  2436 
  2433 
  2437 extractNumberStartingAt:anIndex
  2434 extractNumberStartingAt:anIndex
  2438     "return the number from the name starting at anIndex or 0.
  2435     "return the number from the name starting at anIndex (or 0 if there is no number)."
  2439     "
  2436 
  2440     |val|
  2437     "/ cg: code cleanup.
  2441 
  2438     ^ Integer 
  2442     val := 0.
  2439         readFrom:(self name readStream skip:(anIndex-1))
  2443 
  2440         onError:0
  2444     self name from:anIndex do:[:c|
  2441 
  2445 	c isDigit ifTrue:[val := val * 10 + c digitValue]
  2442 "/    |val|
  2446 		 ifFalse:[^ 0]
  2443 "/
  2447     ].
  2444 "/    val := 0.
  2448     ^ val
  2445 "/
  2449 
  2446 "/    self name from:anIndex do:[:c|
       
  2447 "/        c isDigit ifTrue:[val := val * 10 + c digitValue]
       
  2448 "/                 ifFalse:[^ 0]
       
  2449 "/    ].
       
  2450 "/    ^ val
       
  2451 
       
  2452     "
       
  2453      (self basicNew spec:(ButtonSpec new name:'button12')) extractNumberStartingAt:7 
       
  2454     "
  2450 ! !
  2455 ! !
  2451 
  2456 
  2452 !UIPainterView::ViewProperty methodsFor:'spec messages'!
  2457 !UIPainterView::ViewProperty methodsFor:'spec messages'!
  2453 
  2458 
  2454 doesNotUnderstand:aMessage
  2459 doesNotUnderstand:aMessage