wrb 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README +28 -0
- data/Rakefile +66 -0
- data/bin/wrb +41 -0
- data/bin/wrb.bat +6 -0
- data/ext/rwin/aatree.c +192 -0
- data/ext/rwin/aatree.h +55 -0
- data/ext/rwin/extconf.rb +47 -0
- data/ext/rwin/rw_api.c +2058 -0
- data/ext/rwin/rw_devices.c +215 -0
- data/ext/rwin/rw_gdiplus.h +278 -0
- data/ext/rwin/rw_graphics.c +1583 -0
- data/ext/rwin/rw_resources.c +1988 -0
- data/ext/rwin/rw_ubfuncs.c +281 -0
- data/ext/rwin/rw_windows.c +1936 -0
- data/ext/rwin/rwin.c +451 -0
- data/ext/rwin/rwin.h +442 -0
- data/lib/rwin.rb +820 -0
- data/lib/wrb.rb +20 -0
- data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
- data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
- data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
- data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
- data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
- data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
- data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
- data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
- data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
- data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
- data/lib/wrb/base.rb +1294 -0
- data/lib/wrb/combocommon.rb +77 -0
- data/lib/wrb/commctrlconst.rb +139 -0
- data/lib/wrb/commdlg.rb +77 -0
- data/lib/wrb/components/animate.rb +114 -0
- data/lib/wrb/components/bitmap.rb +116 -0
- data/lib/wrb/components/button.rb +134 -0
- data/lib/wrb/components/canvas.rb +266 -0
- data/lib/wrb/components/checkbox.rb +118 -0
- data/lib/wrb/components/choosecolordlg.rb +87 -0
- data/lib/wrb/components/choosefontdlg.rb +142 -0
- data/lib/wrb/components/clipboard.rb +174 -0
- data/lib/wrb/components/combobox.rb +282 -0
- data/lib/wrb/components/comboboxex.rb +574 -0
- data/lib/wrb/components/cursor.rb +91 -0
- data/lib/wrb/components/datetimepicker.rb +197 -0
- data/lib/wrb/components/ddeclient.rb +180 -0
- data/lib/wrb/components/ddeserver.rb +131 -0
- data/lib/wrb/components/dialog.rb +228 -0
- data/lib/wrb/components/edit.rb +412 -0
- data/lib/wrb/components/font.rb +35 -0
- data/lib/wrb/components/form.rb +65 -0
- data/lib/wrb/components/groupbox.rb +122 -0
- data/lib/wrb/components/header.rb +479 -0
- data/lib/wrb/components/hotkeyctrl.rb +72 -0
- data/lib/wrb/components/icon.rb +109 -0
- data/lib/wrb/components/imagelist.rb +396 -0
- data/lib/wrb/components/inifile.rb +97 -0
- data/lib/wrb/components/listbox.rb +149 -0
- data/lib/wrb/components/listview.rb +1467 -0
- data/lib/wrb/components/menu.rb +592 -0
- data/lib/wrb/components/menubar.rb +84 -0
- data/lib/wrb/components/monthcalender.rb +164 -0
- data/lib/wrb/components/openfilenamedlg.rb +147 -0
- data/lib/wrb/components/pager.rb +199 -0
- data/lib/wrb/components/panel.rb +103 -0
- data/lib/wrb/components/picture.rb +55 -0
- data/lib/wrb/components/printdlg.rb +148 -0
- data/lib/wrb/components/printdlgex.rb +117 -0
- data/lib/wrb/components/printer.rb +97 -0
- data/lib/wrb/components/progressbar.rb +140 -0
- data/lib/wrb/components/radiobutton.rb +49 -0
- data/lib/wrb/components/rebar.rb +830 -0
- data/lib/wrb/components/registry.rb +408 -0
- data/lib/wrb/components/richedit.rb +1181 -0
- data/lib/wrb/components/savefilenamedlg.rb +27 -0
- data/lib/wrb/components/scintilla.rb +1298 -0
- data/lib/wrb/components/scrollbar.rb +239 -0
- data/lib/wrb/components/splitter.rb +494 -0
- data/lib/wrb/components/static.rb +198 -0
- data/lib/wrb/components/statusbar.rb +490 -0
- data/lib/wrb/components/tabctrl.rb +686 -0
- data/lib/wrb/components/timer.rb +117 -0
- data/lib/wrb/components/toolbar.rb +1107 -0
- data/lib/wrb/components/tooltip.rb +651 -0
- data/lib/wrb/components/trackbar.rb +298 -0
- data/lib/wrb/components/treeview.rb +845 -0
- data/lib/wrb/components/updown.rb +198 -0
- data/lib/wrb/ddeml.rb +241 -0
- data/lib/wrb/documents/animate.html +46 -0
- data/lib/wrb/documents/bitmap.html +69 -0
- data/lib/wrb/documents/button.html +78 -0
- data/lib/wrb/documents/canvas.html +137 -0
- data/lib/wrb/documents/checkbox.html +77 -0
- data/lib/wrb/documents/choosecolordlg.html +29 -0
- data/lib/wrb/documents/choosefontdlg.html +31 -0
- data/lib/wrb/documents/clipboard.html +31 -0
- data/lib/wrb/documents/combobox.html +117 -0
- data/lib/wrb/documents/comboboxex.html +139 -0
- data/lib/wrb/documents/control.html +53 -0
- data/lib/wrb/documents/cursor.html +45 -0
- data/lib/wrb/documents/datetimepicker.html +70 -0
- data/lib/wrb/documents/ddeclient.html +33 -0
- data/lib/wrb/documents/ddeserver.html +26 -0
- data/lib/wrb/documents/dialog.html +78 -0
- data/lib/wrb/documents/edit.html +169 -0
- data/lib/wrb/documents/empty.html +11 -0
- data/lib/wrb/documents/favicon.png +0 -0
- data/lib/wrb/documents/font.html +38 -0
- data/lib/wrb/documents/form.html +63 -0
- data/lib/wrb/documents/groupbox.html +57 -0
- data/lib/wrb/documents/header.html +85 -0
- data/lib/wrb/documents/hotkeyctrl.html +42 -0
- data/lib/wrb/documents/icon.html +45 -0
- data/lib/wrb/documents/imagelist.html +101 -0
- data/lib/wrb/documents/images/button.png +0 -0
- data/lib/wrb/documents/images/checkbox.png +0 -0
- data/lib/wrb/documents/images/combobox.png +0 -0
- data/lib/wrb/documents/images/comboboxex.png +0 -0
- data/lib/wrb/documents/images/datetimepicker.png +0 -0
- data/lib/wrb/documents/images/edit.png +0 -0
- data/lib/wrb/documents/images/groupbox.png +0 -0
- data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
- data/lib/wrb/documents/images/listbox.png +0 -0
- data/lib/wrb/documents/images/listview.png +0 -0
- data/lib/wrb/documents/images/menu.png +0 -0
- data/lib/wrb/documents/images/menubar.png +0 -0
- data/lib/wrb/documents/images/monthcalender.png +0 -0
- data/lib/wrb/documents/images/progressbar.png +0 -0
- data/lib/wrb/documents/images/radiobutton.png +0 -0
- data/lib/wrb/documents/images/rebar.png +0 -0
- data/lib/wrb/documents/images/richedit.png +0 -0
- data/lib/wrb/documents/images/splitter.png +0 -0
- data/lib/wrb/documents/images/static.png +0 -0
- data/lib/wrb/documents/images/statusbar.png +0 -0
- data/lib/wrb/documents/images/tabctrl.png +0 -0
- data/lib/wrb/documents/images/toolbar.png +0 -0
- data/lib/wrb/documents/images/tooltip.png +0 -0
- data/lib/wrb/documents/images/trackbar.png +0 -0
- data/lib/wrb/documents/images/treeview.png +0 -0
- data/lib/wrb/documents/images/updown.png +0 -0
- data/lib/wrb/documents/index.html +155 -0
- data/lib/wrb/documents/inifile.html +36 -0
- data/lib/wrb/documents/license.txt +22 -0
- data/lib/wrb/documents/listbox.html +96 -0
- data/lib/wrb/documents/listview.html +277 -0
- data/lib/wrb/documents/make_doc.rb +596 -0
- data/lib/wrb/documents/menu.html +144 -0
- data/lib/wrb/documents/menubar.html +54 -0
- data/lib/wrb/documents/monthcalender.html +48 -0
- data/lib/wrb/documents/openfilenamedlg.html +36 -0
- data/lib/wrb/documents/pager.html +63 -0
- data/lib/wrb/documents/panel.html +32 -0
- data/lib/wrb/documents/picture.html +48 -0
- data/lib/wrb/documents/printdlg.html +35 -0
- data/lib/wrb/documents/printdlgex.html +35 -0
- data/lib/wrb/documents/printer.html +40 -0
- data/lib/wrb/documents/progressbar.html +69 -0
- data/lib/wrb/documents/radiobutton.html +51 -0
- data/lib/wrb/documents/rebar.html +143 -0
- data/lib/wrb/documents/registry.html +36 -0
- data/lib/wrb/documents/richedit.html +232 -0
- data/lib/wrb/documents/samples/editimg.bmp +0 -0
- data/lib/wrb/documents/samples/editimg.iml +0 -0
- data/lib/wrb/documents/samples/fileimg.bmp +0 -0
- data/lib/wrb/documents/samples/fileimg.iml +0 -0
- data/lib/wrb/documents/samples/sample_button.rb +21 -0
- data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
- data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
- data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
- data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
- data/lib/wrb/documents/samples/sample_edit.rb +25 -0
- data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
- data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
- data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
- data/lib/wrb/documents/samples/sample_listview.rb +32 -0
- data/lib/wrb/documents/samples/sample_menu.rb +21 -0
- data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
- data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
- data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
- data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
- data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
- data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
- data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
- data/lib/wrb/documents/samples/sample_static.rb +15 -0
- data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
- data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
- data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
- data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
- data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
- data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
- data/lib/wrb/documents/samples/sample_updown.rb +18 -0
- data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
- data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
- data/lib/wrb/documents/samples/samplemg16.png +0 -0
- data/lib/wrb/documents/samples/samplemg32.png +0 -0
- data/lib/wrb/documents/samples/wrb.ico +0 -0
- data/lib/wrb/documents/savefilenamedlg.html +19 -0
- data/lib/wrb/documents/scrollbar.html +60 -0
- data/lib/wrb/documents/splitter.html +96 -0
- data/lib/wrb/documents/static.html +84 -0
- data/lib/wrb/documents/statusbar.html +110 -0
- data/lib/wrb/documents/tabctrl.html +151 -0
- data/lib/wrb/documents/timer.html +43 -0
- data/lib/wrb/documents/toolbar.html +181 -0
- data/lib/wrb/documents/tooltip.html +131 -0
- data/lib/wrb/documents/trackbar.html +107 -0
- data/lib/wrb/documents/treeview.html +210 -0
- data/lib/wrb/documents/updown.html +85 -0
- data/lib/wrb/documents/wincontrol.html +258 -0
- data/lib/wrb/documents/window.html +499 -0
- data/lib/wrb/documents/wrb.css +228 -0
- data/lib/wrb/gmem.rb +26 -0
- data/lib/wrb/imecommon.rb +59 -0
- data/lib/wrb/listcommon.rb +185 -0
- data/lib/wrb/lzss.rb +126 -0
- data/lib/wrb/scrollinfo.rb +142 -0
- data/lib/wrb/toplevelcommon.rb +634 -0
- metadata +315 -0
@@ -0,0 +1,239 @@
|
|
1
|
+
require 'wrb'
|
2
|
+
require 'wrb/scrollinfo'
|
3
|
+
|
4
|
+
module WR
|
5
|
+
module RC
|
6
|
+
SBS_HORZ = 0x0000
|
7
|
+
SBS_VERT = 0x0001
|
8
|
+
SBS_TOPALIGN = 0x0002
|
9
|
+
SBS_LEFTALIGN = 0x0002
|
10
|
+
SBS_BOTTOMALIGN = 0x0004
|
11
|
+
SBS_RIGHTALIGN = 0x0004
|
12
|
+
SBS_SIZEBOX = 0x0008
|
13
|
+
SBS_SIZEGRIP = 0x0010
|
14
|
+
|
15
|
+
SBS_SIZEBOXTOPLEFTALIGN = 0x0002
|
16
|
+
SBS_SIZEBOXBOTTOMRIGHTALIGN = 0x0004
|
17
|
+
|
18
|
+
CCHILDREN_SCROLLBAR = 5
|
19
|
+
|
20
|
+
SW_SCROLLCHILDREN = 0x0001
|
21
|
+
SW_INVALIDATE = 0x0002
|
22
|
+
SW_ERASE = 0x0004
|
23
|
+
SW_SMOOTHSCROLL = 0x0010
|
24
|
+
|
25
|
+
ESB_ENABLE_BOTH = 0x0000
|
26
|
+
ESB_DISABLE_BOTH = 0x0003
|
27
|
+
ESB_DISABLE_LEFT = 0x0001
|
28
|
+
ESB_DISABLE_RIGHT = 0x0002
|
29
|
+
ESB_DISABLE_UP = 0x0001
|
30
|
+
ESB_DISABLE_DOWN = 0x0002
|
31
|
+
ESB_DISABLE_LTUP = ESB_DISABLE_LEFT
|
32
|
+
ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT
|
33
|
+
end
|
34
|
+
|
35
|
+
# This control allows the user to bring into view the portions of an object that extend beyond the borders of a window.
|
36
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
|
37
|
+
# window-controls"> Windows Control section of Microsoft Docs.</a>
|
38
|
+
class Scrollbar < WinControl
|
39
|
+
SCROLLBARINFO = API.defstruct "
|
40
|
+
DWORD cbSize;
|
41
|
+
RECT rcScrollBar;
|
42
|
+
int dxyLineButton;
|
43
|
+
int xyThumbTop;
|
44
|
+
int xyThumbBottom;
|
45
|
+
int reserved;
|
46
|
+
DWORD rgstate[#{CCHILDREN_SCROLLBAR+1}]"
|
47
|
+
|
48
|
+
SCROLLINFO = API.defstruct "
|
49
|
+
UINT cbSize;
|
50
|
+
UINT fMask;
|
51
|
+
int nMin;
|
52
|
+
int nMax;
|
53
|
+
UINT nPage;
|
54
|
+
int nPos;
|
55
|
+
int nTrackPos;"
|
56
|
+
|
57
|
+
API.defun "EnableScrollBar(HWND hWnd, UINT wSBflags, UINT wArrows)"
|
58
|
+
API.defun "GetScrollBarInfo(HWND hWnd, GetScrollInfo LONG idObject, PSCROLLBARINFO psbi)"
|
59
|
+
API.defun "GetScrollInfo(HWND hWnd, int fnBar, LPSCROLLINFO lpsi)"
|
60
|
+
API.defun "SetScrollInfo(HWND hwnd,int nBar,LPCSCROLLINFO lpsi,WINBOOL redraw)"
|
61
|
+
API.defun "ScrollDC(HDC hDC, int dx, int dy, RECT *lprcScroll, RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate)"
|
62
|
+
API.defun "ScrollWindowEx(HWND hWnd, int dx, int dy, RECT *prcScroll, RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)"
|
63
|
+
|
64
|
+
WinStyles = {
|
65
|
+
:horz => SBS_HORZ,
|
66
|
+
:vert => SBS_VERT,
|
67
|
+
:topalign => SBS_TOPALIGN,
|
68
|
+
:leftalign => SBS_LEFTALIGN,
|
69
|
+
:bottomalign => SBS_BOTTOMALIGN,
|
70
|
+
:rightalign => SBS_RIGHTALIGN,
|
71
|
+
:sizebox => SBS_SIZEBOX,
|
72
|
+
:sizegrip => SBS_SIZEGRIP,
|
73
|
+
:sizeboxtopleftalign => SBS_SIZEBOXTOPLEFTALIGN,
|
74
|
+
:sizeboxbottomrightalign => SBS_SIZEBOXBOTTOMRIGHTALIGN
|
75
|
+
}
|
76
|
+
|
77
|
+
PreDefinedEvents = {
|
78
|
+
:vscroll => [WM_VSCROLL, 'h'],
|
79
|
+
:hscroll => [WM_HSCROLL, 'h']
|
80
|
+
}
|
81
|
+
DefaultEvents = [:vscroll, :hscroll]
|
82
|
+
|
83
|
+
def initialize(*args)
|
84
|
+
super
|
85
|
+
@_classname = 'SCROLLBAR'
|
86
|
+
@_acceptable_events = PreDefinedEvents.dup
|
87
|
+
end
|
88
|
+
#
|
89
|
+
def create()
|
90
|
+
super
|
91
|
+
self.range= @_range if @_range
|
92
|
+
self.pos = @_pos if @_pos
|
93
|
+
self.page = @_page if @_page
|
94
|
+
self.trackpos = @_trackpos if @_trackpos
|
95
|
+
end
|
96
|
+
|
97
|
+
# Enables or disables one or both scroll bar arrows.
|
98
|
+
def enable(flag, arrows)
|
99
|
+
API.EnableScrollBar(self._hwnd, flag.to_i, arrows)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Gets the range of this scroll bar.
|
103
|
+
def range()
|
104
|
+
if alive?
|
105
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE]
|
106
|
+
API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
|
107
|
+
[lpsi.nMin, lpsi.nMax]
|
108
|
+
else
|
109
|
+
@_range
|
110
|
+
end
|
111
|
+
end
|
112
|
+
# Sets the range of this scroll bar.
|
113
|
+
def range=(*args)
|
114
|
+
min, max = args[0].is_a?(Array) ? args[0] : [0, args[0]]
|
115
|
+
if alive?
|
116
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE, min, max]
|
117
|
+
API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
|
118
|
+
else
|
119
|
+
@_range = [min, max]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Retrieves the position of the scroll box (thumb) in this scroll bar.
|
124
|
+
def pos()
|
125
|
+
if alive?
|
126
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS]
|
127
|
+
API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
|
128
|
+
lpsi.nPos
|
129
|
+
else
|
130
|
+
@_pos
|
131
|
+
end
|
132
|
+
end
|
133
|
+
# Sets the position of the scroll box (thumb) in this scroll bar .
|
134
|
+
def pos=(ps)
|
135
|
+
if alive?
|
136
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, ps]
|
137
|
+
API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
|
138
|
+
else
|
139
|
+
@_pos = ps
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# Retreives a page-size of this scrollbar for determine the size of scroll box.
|
144
|
+
def pagesize()
|
145
|
+
if alive?
|
146
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE]
|
147
|
+
API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
|
148
|
+
lpsi.nPage
|
149
|
+
else
|
150
|
+
@_page
|
151
|
+
end
|
152
|
+
end
|
153
|
+
# Sets a page-size of this scrollbar for determine the size of scroll box.
|
154
|
+
def pagesize=(pg)
|
155
|
+
if alive?
|
156
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE, nil, nil, pg]
|
157
|
+
API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
|
158
|
+
else
|
159
|
+
@_page = pg
|
160
|
+
end
|
161
|
+
end
|
162
|
+
# Retreives the immediate position of a scroll box that the user is dragging.
|
163
|
+
def trackpos()
|
164
|
+
if alive?
|
165
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_TRACKPOS]
|
166
|
+
API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
|
167
|
+
lpsi.nTrackPos
|
168
|
+
else
|
169
|
+
@_trackpos
|
170
|
+
end
|
171
|
+
end
|
172
|
+
# Specifies the immediate position of a scroll box that the user is dragging.
|
173
|
+
def trackpos=(tps)
|
174
|
+
if alive?
|
175
|
+
lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, nil, tps]
|
176
|
+
API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
|
177
|
+
else
|
178
|
+
@_trackpos = tps
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
protected
|
183
|
+
def _apply_options(arg)
|
184
|
+
if st=WinStyles[arg]
|
185
|
+
@_style |= st
|
186
|
+
return nil
|
187
|
+
end
|
188
|
+
super
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
module WR
|
194
|
+
class Form1 <Form
|
195
|
+
def initialize
|
196
|
+
resize 640, 480
|
197
|
+
@sb1 = controls << Scrollbar[:sb1, '', 0, 0,20,20, :vert, :range=>100, :pos=>50, :margin=>[nil, 0, 0, 20]]
|
198
|
+
@sb2 = controls << Scrollbar[:sb2, '', 0, 0,20,20, :range=>100, :pos=>50, :margin=>[0,nil, 20, 0]]
|
199
|
+
|
200
|
+
# @sb1.accept_events(:vscroll)
|
201
|
+
|
202
|
+
register_event(WM_VSCROLL, 'vscroll', 'h', self)
|
203
|
+
# register_event(WM_HSCROLL, 'hscroll', 'h', @sb2)
|
204
|
+
|
205
|
+
# events << [@sb2, :hscroll, 'hscroll2', 'h', @sb2]
|
206
|
+
|
207
|
+
def @sb1.vscroll(sval, thumbpos); dpp sval
|
208
|
+
end
|
209
|
+
|
210
|
+
def @sb2.hscroll(sval, thumbpos)
|
211
|
+
dpp sval
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
|
216
|
+
def vscroll(sval, thumbpos); dpp sval
|
217
|
+
case sval
|
218
|
+
when SB_LINEUP
|
219
|
+
@sb1.pos -= 1
|
220
|
+
when SB_LINEDOWN
|
221
|
+
@sb1.pos += 1
|
222
|
+
when SB_PAGEUP
|
223
|
+
@sb1.pos -= 10
|
224
|
+
when SB_PAGEDOWN
|
225
|
+
@sb1.pos += 10
|
226
|
+
when SB_THUMBPOSITION
|
227
|
+
@sb1.pos = thumbpos
|
228
|
+
when SB_THUMBTRACK
|
229
|
+
#dpp thumbpos
|
230
|
+
when SB_ENDSCROLL
|
231
|
+
#dpp sval, thumbpos
|
232
|
+
when SB_TOP
|
233
|
+
when SB_BOTTOM
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
self.start
|
238
|
+
end
|
239
|
+
end if __FILE__ == $0
|
@@ -0,0 +1,494 @@
|
|
1
|
+
# Splitter
|
2
|
+
# This imprementateion is original by Baonjo Koyu.
|
3
|
+
|
4
|
+
module WR
|
5
|
+
require_relative './canvas' unless defined?(Canvas) # color constants are defined in.
|
6
|
+
|
7
|
+
# A window to split a parent window into two panes such as right-left or upper-lower. (WRB original)
|
8
|
+
class Splitter < WinControl
|
9
|
+
class Pane < Array
|
10
|
+
def initialize(onr)
|
11
|
+
@owner = onr
|
12
|
+
end
|
13
|
+
|
14
|
+
def <<(arg)
|
15
|
+
if arg.is_a?(Splitter)
|
16
|
+
raise "Already other control exixts in this pane." if self.size>0
|
17
|
+
arg.mother = @owner
|
18
|
+
end
|
19
|
+
if @owner.parent && !@owner.parent.controls.index(arg)
|
20
|
+
if @owner.respond_to?(:owner)
|
21
|
+
super(@owner.owner << arg)
|
22
|
+
else
|
23
|
+
super(@owner.parent.controls << arg)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
class << arg
|
29
|
+
attr_reader :__ownedbysplitter
|
30
|
+
end
|
31
|
+
self.uniq!
|
32
|
+
@owner.__send__(:_resize_panes) if @owner.alive? #; dpp @owner.name, arg.name, arg.x
|
33
|
+
arg
|
34
|
+
end
|
35
|
+
|
36
|
+
def delete(arg)
|
37
|
+
if arg.is_a?(Splitter)
|
38
|
+
arg.delete
|
39
|
+
else
|
40
|
+
arg.margin = nil
|
41
|
+
end
|
42
|
+
class << arg
|
43
|
+
undef :__ownedbysplitter
|
44
|
+
end
|
45
|
+
super
|
46
|
+
end
|
47
|
+
|
48
|
+
def clear()
|
49
|
+
self.each{|i| i.margin=nil}
|
50
|
+
super
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
Faces = {
|
55
|
+
:none => nil,
|
56
|
+
:line =>[
|
57
|
+
Bitmap.new(1, 128, API.getSysColor(COLOR_BTNSHADOW)),
|
58
|
+
Bitmap.new(128, 1, API.getSysColor(COLOR_BTNSHADOW))],
|
59
|
+
:dot=> [
|
60
|
+
Bitmap.new(2, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
61
|
+
16.times{|i| c = i*8
|
62
|
+
cv.SetBrush API.getSysColor(COLOR_BTNSHADOW)
|
63
|
+
cv.PatBlt(0, c+4, 2, 2)}},
|
64
|
+
Bitmap.new(128, 2, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
65
|
+
16.times{|i| c = i*8
|
66
|
+
cv.SetBrush API.getSysColor(COLOR_BTNSHADOW)
|
67
|
+
cv.PatBlt(c+4, 0, 2, 2)}}
|
68
|
+
],
|
69
|
+
:bump2 => [
|
70
|
+
Bitmap.new(2, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
71
|
+
16.times{|i| c = i*8
|
72
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
73
|
+
cv.MoveTo(0, c+5)
|
74
|
+
cv.LineTo(1, c+5)
|
75
|
+
cv.LineTo(1, c+3)}},
|
76
|
+
Bitmap.new(128, 2, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
77
|
+
16.times{|i| c = i*8
|
78
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
79
|
+
cv.MoveTo(c+5, 0)
|
80
|
+
cv.LineTo(c+5, 1)
|
81
|
+
cv.LineTo(c+3, 1)}}
|
82
|
+
],
|
83
|
+
:bump3 => [
|
84
|
+
Bitmap.new(3, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
85
|
+
16.times{|i| c = i*8
|
86
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
87
|
+
cv.MoveTo(0, c+6)
|
88
|
+
cv.LineTo(2, c+6)
|
89
|
+
cv.LineTo(2, c+3)}},
|
90
|
+
Bitmap.new(128, 3, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
91
|
+
16.times{|i| c = i*8
|
92
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
93
|
+
cv.MoveTo(c+6, 0)
|
94
|
+
cv.LineTo(c+6, 2)
|
95
|
+
cv.LineTo(c+3, 2)}}
|
96
|
+
],
|
97
|
+
:bump4 => [
|
98
|
+
Bitmap.new(4, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
99
|
+
16.times{|i| c = i*8
|
100
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
101
|
+
cv.MoveTo(0, c+7)
|
102
|
+
cv.LineTo(3, c+7)
|
103
|
+
cv.LineTo(3, c+3)}},
|
104
|
+
Bitmap.new(128, 4, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
105
|
+
16.times{|i| c = i*8
|
106
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
107
|
+
cv.MoveTo(c+7, 0)
|
108
|
+
cv.LineTo(c+7, 3)
|
109
|
+
cv.LineTo(c+3, 3)}}
|
110
|
+
],
|
111
|
+
:dimple2 => [
|
112
|
+
Bitmap.new(2, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
113
|
+
16.times{|i| c = i*8
|
114
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
115
|
+
cv.MoveTo(0, c+5)
|
116
|
+
cv.LineTo(0, c+4)
|
117
|
+
cv.LineTo(2, c+4)
|
118
|
+
}
|
119
|
+
},
|
120
|
+
Bitmap.new(128, 2, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
121
|
+
16.times{|i| c = i*8
|
122
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
123
|
+
cv.MoveTo(c+4, 2)
|
124
|
+
cv.LineTo(c+4, 0)
|
125
|
+
cv.LineTo(c+6, 0)}}
|
126
|
+
],
|
127
|
+
:dimple3 => [
|
128
|
+
Bitmap.new(3, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
129
|
+
16.times{|i| c = i*8
|
130
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
131
|
+
cv.MoveTo(0, c+6)
|
132
|
+
cv.LineTo(0, c+4)
|
133
|
+
cv.LineTo(3, c+4)
|
134
|
+
}
|
135
|
+
},
|
136
|
+
Bitmap.new(128, 3, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
137
|
+
16.times{|i| c = i*8
|
138
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
139
|
+
cv.MoveTo(c+4, 3)
|
140
|
+
cv.LineTo(c+4, 0)
|
141
|
+
cv.LineTo(c+7, 0)}}
|
142
|
+
],
|
143
|
+
:dimple4 => [
|
144
|
+
Bitmap.new(4, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
145
|
+
16.times{|i| c = i*8
|
146
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
147
|
+
cv.MoveTo(0, c+7)
|
148
|
+
cv.LineTo(0, c+4)
|
149
|
+
cv.LineTo(4, c+4)
|
150
|
+
}
|
151
|
+
},
|
152
|
+
Bitmap.new(128, 4, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
|
153
|
+
16.times{|i| c = i*8
|
154
|
+
cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
|
155
|
+
cv.MoveTo(c+4, 4)
|
156
|
+
cv.LineTo(c+4, 0)
|
157
|
+
cv.LineTo(c+8, 0)}}
|
158
|
+
]
|
159
|
+
}
|
160
|
+
|
161
|
+
SplitCursorV = Cursor.loadb64 "AAAAQAAIACAQAAAA4AA4AWAAAAAC0AQBRAICAmAAEEBAADAgCAuAAAAAAAAAAAAAAAAAAEA+n+/3/AfIDuAAAACqAAAACqCAQYdXAAAAtWgAABNWQAACBQMAg4CAwGBgUTA4GCGL4D4AAD4D4AAD4gEI4AOAAAwAGAAAgADB+OAQMBAYDAwLNA=="
|
162
|
+
|
163
|
+
SplitCursorH = Cursor.loadb64 "AAAAQAAIACAQAAAA4AA4AWAAAAAC0AQBRAICAmAAEEBAADAgCAuAAAAAAAAAAAAAAAAAAEA+n+/3/AiIBIAAAACEAAAAEQNQBzgAAAfz+AAAQACAAAf8AgH/AMSAoMBwYEgwLBgaCAYOgP5/gAAPw/gAAPgfgAAPAPgAAPCAIEHcoDogGEKQAgILAgWBYMDQYHgg"
|
164
|
+
|
165
|
+
######################### Main ########################
|
166
|
+
|
167
|
+
attr_accessor :mother
|
168
|
+
|
169
|
+
def initialize(*args)
|
170
|
+
@lu_pane = @left = @upper = Pane.new(self)
|
171
|
+
@rl_pane = @right = @lower = Pane.new(self)
|
172
|
+
class << @limit = [0, 0]
|
173
|
+
def lu() self[0]; end
|
174
|
+
def lu=(v) self[0] = v; end
|
175
|
+
def rl() self[1]; end
|
176
|
+
def rl=(v) self[1] = v; end
|
177
|
+
end
|
178
|
+
@_face = :dot
|
179
|
+
|
180
|
+
super
|
181
|
+
@_classname = "RUBYWIN"
|
182
|
+
@_style = WS_VISIBLECHILD
|
183
|
+
l, t, r, b = margin.to_a #; dpp l, t, r, b
|
184
|
+
self.margin = @is_horiz ? Margin[l, nil, r, nil] : Margin[nil, t, nil, b] unless @_margin
|
185
|
+
@cursor = @is_horiz ? SplitCursorH : SplitCursorV
|
186
|
+
register_event(WM_PAINT, "__paint__", 'c', Canvas)
|
187
|
+
register_event(WM_MOUSEMOVE, "__mousemove__", 'ih')
|
188
|
+
register_event(WM_MOVE, "__move__", 'ih')
|
189
|
+
register_event(WM_LBUTTONDOWN, "__lbuttondown__", 'ih')
|
190
|
+
register_event(WM_LBUTTONUP, "__lbuttonup__", 'ih')
|
191
|
+
register_event(WM_SETCURSOR, '__setcursor__', 'ih')
|
192
|
+
end
|
193
|
+
#
|
194
|
+
def create()
|
195
|
+
unless @mother # is root
|
196
|
+
class << @_parent
|
197
|
+
attr_accessor :_root
|
198
|
+
def __resize__(w, h)
|
199
|
+
@_root.__move(0, 0, w, h)
|
200
|
+
@controls.each{|i|
|
201
|
+
i.__move(0, 0, w, h) if i.respond_to?(:__move)&&!i.respond_to?(:__ownedbysplitter)
|
202
|
+
}
|
203
|
+
end
|
204
|
+
def __move(_x, _y, _w, _h)
|
205
|
+
super
|
206
|
+
@controls.each{|i|
|
207
|
+
i.__move(0, 0, w, h) if i.respond_to?(:__move)&&!i.respond_to?(:__ownedbysplitter)
|
208
|
+
}
|
209
|
+
end
|
210
|
+
end
|
211
|
+
@_parent._root = self
|
212
|
+
end
|
213
|
+
@pw, @ph = @_parent.clientsize
|
214
|
+
super
|
215
|
+
self.face = @_face || :none
|
216
|
+
@canvas = Canvas.new(@_parent)
|
217
|
+
@_parent.SendMessage(WM_SIZE, 0, MAKELPARAM(*@_parent.size))
|
218
|
+
self
|
219
|
+
end
|
220
|
+
#
|
221
|
+
def margin=(arg)
|
222
|
+
l, t, r, b = arg.to_a
|
223
|
+
m = if @is_horiz
|
224
|
+
if t
|
225
|
+
[l.to_i, t.to_i, r.to_i, nil]
|
226
|
+
elsif b
|
227
|
+
[l.to_i, nil, r.to_i, b.to_i]
|
228
|
+
else
|
229
|
+
[l.to_i, nil, r.to_i, nil]
|
230
|
+
end
|
231
|
+
else
|
232
|
+
if l
|
233
|
+
[l.to_i, t.to_i, nil, b.to_i]
|
234
|
+
elsif r
|
235
|
+
[nil, t.to_i, r.to_i, b.to_i]
|
236
|
+
else
|
237
|
+
[nil, t.to_i, nil, b.to_i]
|
238
|
+
end
|
239
|
+
end
|
240
|
+
super(m)
|
241
|
+
end
|
242
|
+
|
243
|
+
# Retreives whether direction of this splitter is horizontal or not.
|
244
|
+
def is_horiz()
|
245
|
+
@is_horiz
|
246
|
+
end
|
247
|
+
|
248
|
+
# Gets a thickness of this splitter.
|
249
|
+
def thickness()
|
250
|
+
is_horiz ? margin.h : margin.w
|
251
|
+
end
|
252
|
+
# Sets a thickness of this splitter.
|
253
|
+
def thickness=(t)
|
254
|
+
if is_horiz
|
255
|
+
self.h = margin.h = t.to_i
|
256
|
+
else
|
257
|
+
self.w = margin.w = t.to_i
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
# Gets the limit position in which this splitter can be moved.<br>
|
262
|
+
# Retruens an array, but it's accessible by name of "lu", "rl".
|
263
|
+
def limit()
|
264
|
+
@limit
|
265
|
+
end
|
266
|
+
|
267
|
+
# Sets the limit position in which this splitter can be moved.
|
268
|
+
def limit=(args)
|
269
|
+
lu, rl = args
|
270
|
+
@limit.lu = lu.to_i
|
271
|
+
@limit.rl = rl.to_i
|
272
|
+
end
|
273
|
+
|
274
|
+
# Gets a pane positioned left side or upper side of this splitter.
|
275
|
+
def lu_pane()
|
276
|
+
@lu_pane
|
277
|
+
end
|
278
|
+
alias left lu_pane
|
279
|
+
alias upper lu_pane
|
280
|
+
|
281
|
+
# Clears the left side or upper side pane and adds controls into the pane.
|
282
|
+
def lu_pane=(arg)
|
283
|
+
@lu_pane.clear
|
284
|
+
return unless arg
|
285
|
+
arg.is_a?(Array) ? arg.each{|i| @lu_pane << i} : @lu_pane << arg
|
286
|
+
end
|
287
|
+
alias left= lu_pane=
|
288
|
+
alias upper= lu_pane=
|
289
|
+
|
290
|
+
# Gets a pane positioned right side or lower side of this splitter.
|
291
|
+
def rl_pane()
|
292
|
+
@rl_pane
|
293
|
+
end
|
294
|
+
alias right rl_pane
|
295
|
+
alias lower rl_pane
|
296
|
+
|
297
|
+
# Clears the right side or lower side pane and adds controls into the pane.
|
298
|
+
def rl_pane=(arg)
|
299
|
+
@rl_pane.clear
|
300
|
+
return unless arg
|
301
|
+
arg.is_a?(Array) ? arg.each{|i| @rl_pane << i} : @rl_pane << arg
|
302
|
+
end
|
303
|
+
alias right= rl_pane=
|
304
|
+
alias lower= rl_pane=
|
305
|
+
|
306
|
+
# Gets a bitmap of display-pattern in this splitter.
|
307
|
+
def face()
|
308
|
+
Faces.key(@_face) || @_face
|
309
|
+
end
|
310
|
+
|
311
|
+
# Sets a bitmap of display-pattern in this splitter.<br>
|
312
|
+
# Give a Bitmap as argument.
|
313
|
+
def face=(f)
|
314
|
+
if f.is_a?(Symbol)
|
315
|
+
@_face = Faces[f]
|
316
|
+
else
|
317
|
+
@_face = f
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
# Gets a direction of this splitter.
|
322
|
+
def direction()
|
323
|
+
@is_horiz ? :horiz : :vert
|
324
|
+
end
|
325
|
+
|
326
|
+
# Sets a direction of this splitter.<br>
|
327
|
+
# If given :true, :horiz or :h, then this splitter displays the horizontal direction, otherwize the vertical.
|
328
|
+
def direction=(dir)
|
329
|
+
raise "Already item exists in the panes." if !@lu_pane.empty? || !@rl_pane.empty?
|
330
|
+
@is_horiz = (dir==:horiz) || (dir==:h) || (dir==true) || dir.nil?
|
331
|
+
l, t, r, b = margin.to_a
|
332
|
+
self.margin = @is_horiz ? [l, nil, r, nil] : [nil, t, nil, b]
|
333
|
+
# @cursor = @is_horiz ? Cursor.fromsystem(IDC_SIZENS) : Cursor.fromsystem(IDC_SIZEWE)
|
334
|
+
@cursor = @is_horiz ? SplitCursorH : SplitCursorV
|
335
|
+
end
|
336
|
+
|
337
|
+
#
|
338
|
+
def x() clientpos[0]; end
|
339
|
+
#
|
340
|
+
def y() clientpos[1]; end
|
341
|
+
#
|
342
|
+
def w() windowsize[0]; end
|
343
|
+
#
|
344
|
+
def h() windowsize[1]; end
|
345
|
+
#
|
346
|
+
def delete()
|
347
|
+
@lu_pane.reverse_each{|i|@lu_pane.delete(i)}
|
348
|
+
@rl_pane.reverse_each{|i|@rl_pane.delete(i)}
|
349
|
+
super
|
350
|
+
end
|
351
|
+
|
352
|
+
#
|
353
|
+
def __move(_x, _y, _w, _h)
|
354
|
+
@pw, @ph = @_parent.clientsize if @_parent.alive?
|
355
|
+
super
|
356
|
+
_resize_panes
|
357
|
+
end
|
358
|
+
#
|
359
|
+
def __get_hrange(child)
|
360
|
+
return [x, x+w] if @is_horiz
|
361
|
+
if @lu_pane.index(child)
|
362
|
+
[@mother ? @mother.__get_hrange(self)[0] : 0, x]
|
363
|
+
else
|
364
|
+
[x+w, @mother ? @mother.__get_hrange(self)[1] : @_parent.clientsize[0]]
|
365
|
+
end
|
366
|
+
end
|
367
|
+
#
|
368
|
+
def __get_vrange(child)
|
369
|
+
return [y, y+h] unless @is_horiz
|
370
|
+
if @lu_pane.index(child)
|
371
|
+
[@mother ? @mother.__get_vrange(self)[0] : 0, y]
|
372
|
+
else
|
373
|
+
[x+w, @mother ? @mother.__get_vrange(self)[1] : @_parent.clientsize[1]]
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
# def position()
|
378
|
+
# x, y = super
|
379
|
+
# if @_is_horiz
|
380
|
+
# [x, y-__get_hrange(self)[0]]
|
381
|
+
# else
|
382
|
+
# #dpp __get_vrange(self), [x-__get_vrange(self)[0], y]
|
383
|
+
# [x-__get_vrange(self)[0], y]
|
384
|
+
# [x, y]
|
385
|
+
# end
|
386
|
+
# end
|
387
|
+
|
388
|
+
protected
|
389
|
+
def _apply_options(arg)
|
390
|
+
case arg
|
391
|
+
when :horiz, :h
|
392
|
+
@is_horiz = true
|
393
|
+
when :vert, :v
|
394
|
+
@is_horiz = nil
|
395
|
+
when :none, :line, :dot, :bump2, :bump3, :bump4, :dimple2, :dimple3, :dimple4
|
396
|
+
@_face = arg
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
private
|
401
|
+
def __lbuttonup__(state, x, y)
|
402
|
+
self.ReleaseCapture
|
403
|
+
l,t,r,b = margin.to_a
|
404
|
+
if @is_horiz
|
405
|
+
@_margin.y = self.y - (@mother ? @mother.__get_vrange(self)[0] : 0)
|
406
|
+
if @_margin.top
|
407
|
+
self.margin = l, self.y, r, b
|
408
|
+
else
|
409
|
+
self.margin = l, t, r, @_parent.clientsize[1]-self.y-self.h
|
410
|
+
end
|
411
|
+
else
|
412
|
+
@_margin.x = self.x - (@mother ? @mother.__get_hrange(self)[0] : 0)
|
413
|
+
if @_margin.left
|
414
|
+
self.margin = self.x, t, r, b
|
415
|
+
elsif @_margin.right
|
416
|
+
self.margin = l, t, @_parent.clientsize[0]-self.x-self.w, b
|
417
|
+
end
|
418
|
+
end
|
419
|
+
@_parent.refresh
|
420
|
+
end
|
421
|
+
|
422
|
+
def __lbuttondown__(state, x, y)
|
423
|
+
self.SetCapture
|
424
|
+
end
|
425
|
+
|
426
|
+
def __paint__(cv)
|
427
|
+
return unless @_face
|
428
|
+
w, h = windowsize
|
429
|
+
if @is_horiz
|
430
|
+
fc = @_face[1]
|
431
|
+
n = w / fc.width + 1
|
432
|
+
offset = (h - fc.height) / 2
|
433
|
+
offset = 0 if offset < 0
|
434
|
+
n.times{|i| cv.BitBlt(i*fc.width, offset, fc)}
|
435
|
+
else
|
436
|
+
fc = @_face[0]
|
437
|
+
n = h / fc.height + 1
|
438
|
+
offset = (w - fc.width) / 2
|
439
|
+
offset = 0 if offset < 0
|
440
|
+
n.times{|i| cv.BitBlt(offset, i*fc.height, fc)}
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
def _resize_panes()
|
445
|
+
return unless @_parent.alive?
|
446
|
+
if @is_horiz
|
447
|
+
y0, y1 = @mother ? @mother.__get_vrange(self) : [0, @_parent.clientsize[1]]
|
448
|
+
@lu_pane.each{|i| i.__move(x, y0, w, y-y0)}
|
449
|
+
@rl_pane.each{|i| i.__move(x, y+h, w, y1-y-h)}
|
450
|
+
else
|
451
|
+
x0, x1 = @mother ? @mother.__get_hrange(self) : [0, @_parent.clientsize[0]]
|
452
|
+
@lu_pane.each{|i| i.__move(x0, y, x-x0, h)}
|
453
|
+
@rl_pane.each{|i| i.__move(x+w, y, x1-x-w, h)}
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
457
|
+
def __move__(state, _x, _y)
|
458
|
+
_resize_panes()
|
459
|
+
end
|
460
|
+
|
461
|
+
def __mousemove__(state, _x, _y)
|
462
|
+
return if (state & MK_LBUTTON) == 0
|
463
|
+
if @is_horiz
|
464
|
+
ly0, ly1 = @limit
|
465
|
+
y0, y1 = @mother ? @mother.__get_vrange(self) : [0, @_parent.clientsize[1]]
|
466
|
+
# self.move(x, _y+y)
|
467
|
+
# return
|
468
|
+
if y+_y < y0+ly0
|
469
|
+
self.move(x, y0+ly0)
|
470
|
+
elsif y+_y >= (y1-ly1)
|
471
|
+
self.move(x, y1-ly1-h)
|
472
|
+
else
|
473
|
+
self.move(x, _y+y)
|
474
|
+
end
|
475
|
+
else
|
476
|
+
lx0, lx1 = @limit
|
477
|
+
x0, x1 = @mother ? @mother.__get_hrange(self) : [0, @_parent.clientsize[0]]
|
478
|
+
if x+_x < x0+lx0
|
479
|
+
self.move(x0+lx0, y)
|
480
|
+
elsif x+_x >= (x1-lx1)
|
481
|
+
self.move(x1-lx1-w, y)
|
482
|
+
else
|
483
|
+
self.move(_x+x, y)
|
484
|
+
end
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
def __setcursor__(hwnd, hittest, msg)
|
489
|
+
return unless hittest==1
|
490
|
+
APP.SetCursor @cursor
|
491
|
+
CancelDefWindowProc
|
492
|
+
end
|
493
|
+
end
|
494
|
+
end
|