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 |