mirror of https://github.com/buggins/dlangui.git
resizers in docks - part 1
This commit is contained in:
parent
96d19be199
commit
e1b13514c4
|
@ -31,6 +31,10 @@ class DockHost : WidgetGroupDefaultDrawing {
|
||||||
protected int _bottomSpace;
|
protected int _bottomSpace;
|
||||||
protected int _rightSpace;
|
protected int _rightSpace;
|
||||||
protected int _leftSpace;
|
protected int _leftSpace;
|
||||||
|
protected ResizerWidget _topResizer;
|
||||||
|
protected ResizerWidget _bottomResizer;
|
||||||
|
protected ResizerWidget _leftResizer;
|
||||||
|
protected ResizerWidget _rightResizer;
|
||||||
protected Widget _bodyWidget;
|
protected Widget _bodyWidget;
|
||||||
@property Widget bodyWidget() { return _bodyWidget; }
|
@property Widget bodyWidget() { return _bodyWidget; }
|
||||||
@property void bodyWidget(Widget widget) {
|
@property void bodyWidget(Widget widget) {
|
||||||
|
@ -40,13 +44,32 @@ class DockHost : WidgetGroupDefaultDrawing {
|
||||||
_bodyWidget.parent = this;
|
_bodyWidget.parent = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addDockedWindow(DockWindow dockWin) {
|
void addDockedWindow(DockWindow dockWin, int delta) {
|
||||||
addChild(dockWin);
|
addChild(dockWin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onResize(ResizerWidget source) {
|
||||||
|
}
|
||||||
|
|
||||||
this() {
|
this() {
|
||||||
super("DOCK_HOST");
|
super("DOCK_HOST");
|
||||||
styleId = STYLE_DOCK_HOST;
|
styleId = STYLE_DOCK_HOST;
|
||||||
|
_topResizer = new ResizerWidget("top_resizer", Orientation.Vertical);
|
||||||
|
_topResizer.visibility = Visibility.Gone;
|
||||||
|
_topResizer.resizeListener = &onResize;
|
||||||
|
_leftResizer = new ResizerWidget("left_resizer", Orientation.Horizontal);
|
||||||
|
_leftResizer.visibility = Visibility.Gone;
|
||||||
|
_leftResizer.resizeListener = &onResize;
|
||||||
|
_rightResizer = new ResizerWidget("right_resizer", Orientation.Horizontal);
|
||||||
|
_rightResizer.visibility = Visibility.Gone;
|
||||||
|
_rightResizer.resizeListener = &onResize;
|
||||||
|
_bottomResizer = new ResizerWidget("bottom_resizer", Orientation.Vertical);
|
||||||
|
_bottomResizer.visibility = Visibility.Gone;
|
||||||
|
_bottomResizer.resizeListener = &onResize;
|
||||||
|
addChild(_topResizer);
|
||||||
|
addChild(_leftResizer);
|
||||||
|
addChild(_rightResizer);
|
||||||
|
addChild(_bottomResizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DockWindow[] getDockedWindowList(DockAlignment alignType) {
|
protected DockWindow[] getDockedWindowList(DockAlignment alignType) {
|
||||||
|
@ -102,6 +125,31 @@ class DockHost : WidgetGroupDefaultDrawing {
|
||||||
_bottomSpace = bottom.length ? rc.height / 4 : 0;
|
_bottomSpace = bottom.length ? rc.height / 4 : 0;
|
||||||
_rightSpace = right.length ? rc.width / 4 : 0;
|
_rightSpace = right.length ? rc.width / 4 : 0;
|
||||||
_leftSpace = left.length ? rc.width / 4 : 0;
|
_leftSpace = left.length ? rc.width / 4 : 0;
|
||||||
|
int resizerWidth = 6;
|
||||||
|
if (_topSpace) {
|
||||||
|
_topResizer.visibility = Visibility.Visible;
|
||||||
|
_topResizer.layout(Rect(rc.left + _leftSpace, rc.top + _topSpace - resizerWidth, rc.right - _rightSpace, rc.top + _topSpace));
|
||||||
|
} else {
|
||||||
|
_topResizer.visibility = Visibility.Gone;
|
||||||
|
}
|
||||||
|
if (_bottomSpace) {
|
||||||
|
_bottomResizer.visibility = Visibility.Visible;
|
||||||
|
_bottomResizer.layout(Rect(rc.left + _leftSpace, rc.bottom - _bottomSpace, rc.right - _rightSpace, rc.bottom - _bottomSpace + resizerWidth));
|
||||||
|
} else {
|
||||||
|
_bottomResizer.visibility = Visibility.Gone;
|
||||||
|
}
|
||||||
|
if (_leftSpace) {
|
||||||
|
_leftResizer.visibility = Visibility.Visible;
|
||||||
|
_leftResizer.layout(Rect(rc.left + _leftSpace - resizerWidth, rc.top, rc.left + _leftSpace, rc.bottom));
|
||||||
|
} else {
|
||||||
|
_leftResizer.visibility = Visibility.Gone;
|
||||||
|
}
|
||||||
|
if (_rightSpace) {
|
||||||
|
_rightResizer.visibility = Visibility.Visible;
|
||||||
|
_rightResizer.layout(Rect(rc.right - _rightSpace, rc.top, rc.right - _rightSpace + resizerWidth, rc.bottom));
|
||||||
|
} else {
|
||||||
|
_rightResizer.visibility = Visibility.Gone;
|
||||||
|
}
|
||||||
if (_bodyWidget)
|
if (_bodyWidget)
|
||||||
_bodyWidget.layout(Rect(rc.left + _leftSpace, rc.top + _topSpace, rc.right - _rightSpace, rc.bottom - _bottomSpace));
|
_bodyWidget.layout(Rect(rc.left + _leftSpace, rc.top + _topSpace, rc.right - _rightSpace, rc.bottom - _bottomSpace));
|
||||||
layoutDocked(top, Rect(rc.left + _leftSpace, rc.top, rc.right - _rightSpace, rc.top + _topSpace), Orientation.Horizontal);
|
layoutDocked(top, Rect(rc.left + _leftSpace, rc.top, rc.right - _rightSpace, rc.top + _topSpace), Orientation.Horizontal);
|
||||||
|
|
|
@ -10,7 +10,7 @@ VerticalLayout - just LinearLayout with orientation=Orientation.Vertical
|
||||||
HorizontalLayout - just LinearLayout with orientation=Orientation.Vertical
|
HorizontalLayout - just LinearLayout with orientation=Orientation.Vertical
|
||||||
FrameLayout - children occupy the same place, usually one one is visible at a time
|
FrameLayout - children occupy the same place, usually one one is visible at a time
|
||||||
TableLayout - children aligned into rows and columns
|
TableLayout - children aligned into rows and columns
|
||||||
|
ResizerWidget - widget to resize sibling widgets
|
||||||
|
|
||||||
Synopsis:
|
Synopsis:
|
||||||
|
|
||||||
|
@ -271,6 +271,10 @@ class LayoutItems {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ResizeHandler {
|
||||||
|
void onResize(ResizerWidget source, int delta);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resizer control.
|
* Resizer control.
|
||||||
* Put it between other items in LinearLayout to allow resizing its siblings.
|
* Put it between other items in LinearLayout to allow resizing its siblings.
|
||||||
|
@ -282,16 +286,20 @@ class ResizerWidget : Widget {
|
||||||
protected Widget _nextWidget;
|
protected Widget _nextWidget;
|
||||||
protected string _styleVertical;
|
protected string _styleVertical;
|
||||||
protected string _styleHorizontal;
|
protected string _styleHorizontal;
|
||||||
|
Signal!ResizeHandler resizeListener;
|
||||||
|
|
||||||
|
/// Orientation: Vertical to resize vertically, Horizontal - to resize horizontally
|
||||||
|
@property Orientation orientation() { return _orientation; }
|
||||||
/// empty parameter list constructor - for usage by factory
|
/// empty parameter list constructor - for usage by factory
|
||||||
this() {
|
this() {
|
||||||
this(null);
|
this(null);
|
||||||
}
|
}
|
||||||
/// create with ID parameter
|
/// create with ID parameter
|
||||||
this(string ID) {
|
this(string ID, Orientation orient = Orientation.Vertical) {
|
||||||
super(ID);
|
super(ID);
|
||||||
_styleVertical = "RESIZER_VERTICAL";
|
_styleVertical = "RESIZER_VERTICAL";
|
||||||
_styleHorizontal = "RESIZER_HORIZONTAL";
|
_styleHorizontal = "RESIZER_HORIZONTAL";
|
||||||
|
_orientation = orient;
|
||||||
trackHover = true;
|
trackHover = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue