UIPainterView.st
changeset 2392 59128c4b9cae
parent 2390 07303d4b4e78
child 2395 9f9cf71a311c
equal deleted inserted replaced
2391:8a02cfb5da94 2392:59128c4b9cae
  1772 
  1772 
  1773     self groupSelectionWithLayout: false
  1773     self groupSelectionWithLayout: false
  1774 !
  1774 !
  1775 
  1775 
  1776 groupSelectionWithLayout: withLayout
  1776 groupSelectionWithLayout: withLayout
  1777     | spec rect views box layout specs canvas view oldSelection cS nViews menu item xOffset yOffset |
  1777     |minViews specs spec menu newView target keepLyt keepPos rectangle|
       
  1778 
       
  1779     self canGroup ifFalse:[^ self ].
       
  1780 
       
  1781     keepLyt := withLayout.
       
  1782     keepPos := true.
  1778 
  1783 
  1779     menu := Menu new.
  1784     menu := Menu new.
  1780     menu receiver: self.
  1785     menu receiver: self.
  1781     item := MenuItem label:'Box' value:[spec := ViewSpec new].
  1786     menu addItem:(MenuItem label:'Box' value:[spec := ViewSpec new]).
  1782     menu addItem: item.
  1787     menu addItem:(MenuItem label:'TBox' value:[spec := TBoxSpec new]).
  1783     item := MenuItem label:'TBox' value:[spec := TBoxSpec new].
  1788     menu addItem:(MenuItem label:'FramedBox' value:[spec := FramedBoxSpec new]).
  1784     menu addItem: item.
  1789 
  1785     item := MenuItem label:'FramedBox' value:[spec := FramedBoxSpec new].
  1790     menu addItem:(MenuItem label:'HorizontalPanel'
  1786     menu addItem: item.
  1791                     value:[
  1787     item := MenuItem label:'HorizontalPanel' value:[spec := HorizontalPanelViewSpec new].
  1792                         keepLyt := keepPos := false.
  1788     menu addItem: item.
  1793                         spec := HorizontalPanelViewSpec new.
  1789     item := MenuItem label:'VerticalPanel' value:[spec := VerticalPanelViewSpec new].
  1794                         spec verticalLayout: #fit.
  1790     menu addItem: item.
  1795                         spec horizontalLayout: #leftSpace.
  1791     (MenuPanel menu: menu) startUp.
  1796                     ]).
  1792     canvas := self painter.
  1797     menu addItem:(MenuItem label:'VerticalPanel'
  1793     cS := canvas getSelectedViewsAndSpecs.
  1798                     value:[
  1794     cS isNil ifTrue:[^self].
  1799                         keepLyt := keepPos := false.
  1795     views := cS first.
  1800                         spec := VerticalPanelViewSpec new.
  1796     specs := cS last.
  1801                         spec verticalLayout: #topSpace.
  1797     rect := views first frame.
  1802                         spec horizontalLayout: #fit.
  1798     2 to: views size do:[:i| rect := rect merge: (views at: i) frame].
  1803                     ]).
  1799     layout := LayoutFrame leftFraction:0.0 offset: rect origin x
  1804 
  1800 			 rightFraction:0.0 offset: rect corner x + 1
  1805     menu startUp.
  1801 			   topFraction:0.0 offset: rect origin y
  1806     spec isNil ifTrue:[^ self].
  1802 			bottomFraction:0.0 offset:rect corner y + 1.
  1807 
  1803     oldSelection := canvas selection.
  1808     minViews := self minClosedViewSetFor:(self selection).
  1804     canvas select: views first superView.
  1809     minViews size > 1 ifFalse:[^ self].
  1805     spec layout: layout.
  1810 
  1806     spec class == VerticalPanelViewSpec ifTrue:[
  1811     specs     := OrderedCollection new.
  1807 	spec verticalLayout: #topSpace.
  1812     rectangle := minViews first frame copy.
  1808 	spec horizontalLayout: #fit.
  1813 
  1809     ].
  1814     minViews do:[:eachView|
  1810     spec class == HorizontalPanelViewSpec ifTrue:[
  1815         specs add:(self fullSpecWithAbsolutePositionFor:eachView).
  1811 	spec verticalLayout: #fit.
  1816         rectangle := rectangle quickMerge:(eachView frame).
  1812 	spec horizontalLayout: #leftSpace.
  1817     ].
  1813     ].
  1818     spec layout:rectangle.
  1814 
  1819 
  1815     box := self pasteSpecifications:spec keepLayout:true at:nil.
  1820     target := self findContainerOfView:(minViews first).
  1816 
  1821 
  1817     xOffset := box origin x.
  1822     self withinTransaction:#group objects:(Array with:target) do:[ |widgets|
  1818     yOffset := box origin y.
  1823         self deleteSelectionBuffered:false.
  1819     withLayout ifFalse:[
  1824 
  1820 	1 to: specs size do:[:i|
  1825         spec otherAttributeAt:#uiPainterAttributes put:(Dictionary new
  1821 	    view := views at: i.
  1826                 at:#origin put:(rectangle origin);
  1822 	    layout :=  LayoutFrame leftFraction:0.0 offset: (view origin x - xOffset)
  1827                 at:#extent put:(rectangle extent);
  1823 				  rightFraction:0.0 offset: (view corner x - xOffset + 1)
  1828                 at:#absOrigin put:(rectangle origin);
  1824 				    topFraction:0.0 offset: (view origin y - yOffset )
  1829                 yourself).
  1825 				 bottomFraction:0.0 offset: (view corner y - yOffset + 1).
  1830 
  1826 	    (specs at: i) layout: layout.
  1831         newView := self pasteSpecifications:(Array with:spec) 
  1827 	].
  1832                     into:target
  1828     ].
  1833                     keepLayout:true
  1829     canvas selection: oldSelection.
  1834                     keepPosition:true
  1830     canvas deleteSelection.
  1835                     at:#keep.
  1831     canvas selection:box.
  1836 
  1832     nViews := canvas pasteSpecifications:specs keepLayout:true.
  1837         widgets := self pasteSpecifications:specs
  1833     canvas selection: box.
  1838                 into:newView
       
  1839                 keepLayout:keepLyt
       
  1840                 keepPosition:keepPos
       
  1841                 at:nil.
       
  1842     ].
       
  1843     self select:newView.
  1834 !
  1844 !
  1835 
  1845 
  1836 groupWithLayout
  1846 groupWithLayout
  1837 
  1847 
  1838     self groupSelectionWithLayout: true
  1848     self groupSelectionWithLayout: true
  1844 !
  1854 !
  1845 
  1855 
  1846 ungroupSelectionWithLayout: withLayout
  1856 ungroupSelectionWithLayout: withLayout
  1847 
  1857 
  1848     | canvas cS views specs frame view layout superView|
  1858     | canvas cS views specs frame view layout superView|
       
  1859 
       
  1860     self canUngroup ifFalse:[^ self ].
  1849 
  1861 
  1850     canvas := self painter.
  1862     canvas := self painter.
  1851     cS := canvas getSelectedViewsAndSpecs.
  1863     cS := canvas getSelectedViewsAndSpecs.
  1852     cS isNil ifTrue:[^self].
  1864     cS isNil ifTrue:[^self].
  1853     views := cS first first subViews copy.
  1865     views := cS first first subViews copy.
  1856     cS last first component collection isEmpty ifTrue:[^self].
  1868     cS last first component collection isEmpty ifTrue:[^self].
  1857     specs := cS last first component collection copy.
  1869     specs := cS last first component collection copy.
  1858     frame := cS first first frame.
  1870     frame := cS first first frame.
  1859     canvas deleteSelection.
  1871     canvas deleteSelection.
  1860     withLayout ifFalse:[
  1872     withLayout ifFalse:[
  1861 	1 to: specs size do:[:i|
  1873         1 to: specs size do:[:i|
  1862 	    view := views at: i.
  1874             view := views at: i.
  1863 	    layout :=  LayoutFrame leftFraction:0.0 offset: (view origin x + frame origin x)
  1875             layout :=  LayoutFrame leftFraction:0.0 offset: (view origin x + frame origin x)
  1864 				  rightFraction:0.0 offset: (view corner x + frame origin x + 1)
  1876                                   rightFraction:0.0 offset: (view corner x + frame origin x + 1)
  1865 				    topFraction:0.0 offset: (view origin y + frame origin y )
  1877                                     topFraction:0.0 offset: (view origin y + frame origin y )
  1866 				 bottomFraction:0.0 offset: (view corner y + frame origin y + 1).
  1878                                  bottomFraction:0.0 offset: (view corner y + frame origin y + 1).
  1867 	    (specs at: i) layout: layout.
  1879             (specs at: i) layout: layout.
  1868 	].
  1880         ].
  1869     ].
  1881     ].
  1870     canvas selection: superView.
  1882     canvas selection: superView.
  1871     canvas pasteSpecifications:specs keepLayout:true.
  1883     canvas pasteSpecifications:specs keepLayout:true.
  1872     canvas selection: superView.
  1884     canvas selection: superView.
  1873 !
  1885 !
  2254     sel isNil ifTrue:[^self].
  2266     sel isNil ifTrue:[^self].
  2255     treeView canvasSelection: sel.
  2267     treeView canvasSelection: sel.
  2256     self selection: sel.
  2268     self selection: sel.
  2257 !
  2269 !
  2258 
  2270 
       
  2271 selectedNodes
       
  2272     ^ treeView model selectedNodes
       
  2273 !
       
  2274 
  2259 updateSelectionFromModel:aSelOrNil
  2275 updateSelectionFromModel:aSelOrNil
  2260     "update selection from a new selection
  2276     "update selection from a new selection
  2261     "
  2277     "
  2262     |list|
  2278     |list|
  2263 
  2279 
  2547     ].
  2563     ].
  2548     ^ self canMoveOrAlignSelection
  2564     ^ self canMoveOrAlignSelection
  2549 
  2565 
  2550 !
  2566 !
  2551 
  2567 
       
  2568 canGroup
       
  2569     "test whether selected elements can be grouped; minimum two elements
       
  2570      must be selected and all must have the same parent"
       
  2571 
       
  2572     |selectedNodes parent|
       
  2573 
       
  2574     selectedNodes := self selectedNodes.
       
  2575 
       
  2576     selectedNodes size < 2ifTrue:[ ^ false ].
       
  2577 
       
  2578     parent := selectedNodes first parent.
       
  2579     parent isNil ifTrue:[ ^ false ].    "/ test whether not the canvas itself is selected
       
  2580 
       
  2581     selectedNodes do:[:each|
       
  2582         each parent ~~ parent ifTrue:[^ false ].
       
  2583     ].
       
  2584 
       
  2585     ^true
       
  2586 !
       
  2587 
  2552 canKeepLayoutInSelection
  2588 canKeepLayoutInSelection
  2553     "returns true if layout can be kept during a paste operation
  2589     "returns true if layout can be kept during a paste operation
  2554     "
  2590     "
  2555     |prop|
  2591     |prop|
  2556 
  2592 
  2574 canMoveOrAlignSelection
  2610 canMoveOrAlignSelection
  2575     "returns true if a selection exists and all elements in the selection
  2611     "returns true if a selection exists and all elements in the selection
  2576      can be moved or aligned
  2612      can be moved or aligned
  2577     "
  2613     "
  2578     ^ self canMove:(self selection)
  2614     ^ self canMove:(self selection)
       
  2615 !
       
  2616 
       
  2617 canUngroup
       
  2618     "test whether the selected element can be ungrouped; only one
       
  2619      element is selected and has children"
       
  2620 
       
  2621     "/ the #ungroupSelectionWithLayout: dosnot work yet - so disable
       
  2622 
       
  2623 "/    |selectedNodes node|
       
  2624 "/
       
  2625 "/    selectedNodes := self selectedNodes.
       
  2626 "/
       
  2627 "/
       
  2628 "/    selectedNodes size == 1 ifTrue:[
       
  2629 "/        node := selectedNodes first.
       
  2630 "/        node parent isNil ifTrue:[ ^ false ].    "/ test whether not the canvas itself is selected
       
  2631 "/
       
  2632 "/        ^ node hasChildren
       
  2633 "/    ].
       
  2634     ^ false
  2579 ! !
  2635 ! !
  2580 
  2636 
  2581 !UIPainterView methodsFor:'transaction'!
  2637 !UIPainterView methodsFor:'transaction'!
  2582 
  2638 
  2583 transaction:aType objects:something do:aOneArgBlock
  2639 transaction:aType objects:something do:aOneArgBlock