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 |
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 ! |
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 |