1 |
--- ./packages/fv/src/views.pas.orig 2009-11-04 19:45:26.000000000 +0300 |
2 |
+++ ./packages/fv/src/views.pas 2014-02-21 22:51:40.000000000 +0400 |
3 |
@@ -1897,9 +1897,16 @@ |
4 |
END; |
5 |
|
6 |
PROCEDURE GrowI (Var I: Sw_Integer); |
7 |
+ VAR |
8 |
+ Z: Sw_Integer; |
9 |
BEGIN |
10 |
If (GrowMode AND gfGrowRel = 0) Then Inc(I, D) |
11 |
- Else I := (I * S + (S - D) SHR 1) DIV (S - D); { Calc grow value } |
12 |
+ Else BEGIN { Calc grow value } |
13 |
+ I := (I * S + (S - D) SHR 1); |
14 |
+ Z := (S - D); |
15 |
+ If Z < 1 THEN Z := 1; |
16 |
+ I :=I DIV Z; |
17 |
+ END; |
18 |
END; |
19 |
|
20 |
BEGIN |
21 |
@@ -3128,6 +3135,7 @@ |
22 |
{---------------------------------------------------------------------------} |
23 |
PROCEDURE TScrollBar.HandleEvent (Var Event: TEvent); |
24 |
VAR Tracking: Boolean; I, P, S, ClickPart, Iv: Sw_Integer; |
25 |
+ Z: LONGINT; |
26 |
Mouse: TPoint; Extent: TRect; |
27 |
|
28 |
FUNCTION GetPartCode: Sw_Integer; |
29 |
@@ -3230,14 +3238,18 @@ |
30 |
If (I > S) Then I := S; { Check overflow } |
31 |
End Else I := GetPos; { Get position } |
32 |
If (I <> P) Then Begin |
33 |
+ Z := S + Min; |
34 |
+ IF Z = 0 Then Z := 1; |
35 |
SetValue(LongInt((LongInt(I)*(Max-Min)) |
36 |
- +(S SHR 1)) DIV S + Min); { Set new value } |
37 |
+ +(S SHR 1)) DIV Z); { Set new value } |
38 |
P := I; { Hold new position } |
39 |
End; |
40 |
Until NOT MouseEvent(Event, evMouseMove); { Until not moving } |
41 |
+ Z := S + Min; |
42 |
+ IF Z = 0 THEN Z := 1; |
43 |
If Tracking AND (S > 0) Then { Tracking mouse } |
44 |
SetValue(LongInt((LongInt(P)*(Max-Min))+ |
45 |
- (S SHR 1)) DIV S + Min); { Set new value } |
46 |
+ (S SHR 1)) DIV Z); { Set new value } |
47 |
If (Iv <> Value) Then Clicked; { Scroll has moved } |
48 |
End; |
49 |
ClearEvent(Event); { Clear the event } |
50 |
@@ -3434,6 +3446,7 @@ |
51 |
CONSTRUCTOR TListViewer.Init (Var Bounds: TRect; ANumCols: Sw_Word; AHScrollBar, |
52 |
AVScrollBar: PScrollBar); |
53 |
VAR ArStep, PgStep: Sw_Integer; |
54 |
+Z: LONGINT; |
55 |
BEGIN |
56 |
Inherited Init(Bounds); { Call ancestor } |
57 |
Options := Options OR (ofFirstClick+ofSelectable); { Set options } |
58 |
@@ -3449,8 +3462,10 @@ |
59 |
End; |
60 |
AVScrollBar^.SetStep(PgStep, ArStep); { Set scroll values } |
61 |
End; |
62 |
+ Z := NumCols; |
63 |
+ If Z = 0 Then Z := 1; |
64 |
If (AHScrollBar <> Nil) Then |
65 |
- AHScrollBar^.SetStep(Size.X DIV NumCols, 1); { Set step size } |
66 |
+ AHScrollBar^.SetStep(Size.X DIV Z, 1); { Set step size } |
67 |
HScrollBar := AHScrollBar; { Horz scrollbar held } |
68 |
VScrollBar := AVScrollBar; { Vert scrollbar held } |
69 |
END; |
70 |
@@ -3503,8 +3518,11 @@ |
71 |
VAR I, J, ColWidth, Item, Indent, CurCol: Sw_Integer; |
72 |
Color: Word; SCOff: Byte; |
73 |
Text: String; B: TDrawBuffer; |
74 |
+ Z: LongInt; |
75 |
BEGIN |
76 |
- ColWidth := Size.X DIV NumCols + 1; { Calc column width } |
77 |
+ Z := NumCols; |
78 |
+ IF Z = 0 Then Z := 1; |
79 |
+ ColWidth := Size.X DIV Z + 1; { Calc column width } |
80 |
If (HScrollBar = Nil) Then Indent := 0 Else { Set indent to zero } |
81 |
Indent := HScrollBar^.Value; { Fetch any indent } |
82 |
For I := 0 To Size.Y - 1 Do Begin { For each line } |
83 |
@@ -3549,16 +3567,20 @@ |
84 |
{ FocusItem -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Jul99 LdB } |
85 |
{---------------------------------------------------------------------------} |
86 |
PROCEDURE TListViewer.FocusItem (Item: Sw_Integer); |
87 |
+VAR |
88 |
+YY: LongInt; |
89 |
BEGIN |
90 |
+ YY := Size.Y; |
91 |
+ If YY = 0 Then YY := 1; |
92 |
Focused := Item; { Set focus to item } |
93 |
If (VScrollBar <> Nil) Then |
94 |
VScrollBar^.SetValue(Item); { Scrollbar to value } |
95 |
If (Item < TopItem) Then { Item above top item } |
96 |
If (NumCols = 1) Then TopItem := Item { Set top item } |
97 |
- Else TopItem := Item - Item MOD Size.Y { Set top item } |
98 |
+ Else TopItem := Item - Item MOD YY { Set top item } |
99 |
Else If (Item >= TopItem + (Size.Y*NumCols)) Then { Item below bottom } |
100 |
If (NumCols = 1) Then TopItem := Item-Size.Y+1 { Set new top item } |
101 |
- Else TopItem := Item - Item MOD Size.Y - |
102 |
+ Else TopItem := Item - Item MOD YY - |
103 |
(Size.Y*(NumCols-1)); { Set new top item } |
104 |
END; |
105 |
|
106 |
@@ -3635,6 +3657,7 @@ |
107 |
PROCEDURE TListViewer.HandleEvent (Var Event: TEvent); |
108 |
CONST MouseAutosToSkip = 4; |
109 |
VAR Oi, Ni: Sw_Integer; Ct, Cw: Word; Mouse: TPoint; |
110 |
+Z, YY: LongInt; |
111 |
|
112 |
PROCEDURE MoveFocus (Req: Sw_Integer); |
113 |
BEGIN |
114 |
@@ -3683,7 +3706,11 @@ |
115 |
End; |
116 |
End; |
117 |
evMouseDown: Begin { Mouse down event } |
118 |
- Cw := Size.X DIV NumCols + 1; { Column width } |
119 |
+ Z := NumCols; |
120 |
+ |
121 |
+ IF Z = 0 Then Z := 1; |
122 |
+ Cw := Size.X DIV Z + 1; { Column width } |
123 |
+ IF Cw = 0 Then Cw := 1; |
124 |
Oi := Focused; { Hold focused item } |
125 |
MakeLocal(Event.Where, Mouse); { Localize mouse } |
126 |
If MouseInView(Event.Where) Then Ni := Mouse.Y |
127 |
@@ -3709,11 +3736,13 @@ |
128 |
Ni := Focused-Size.Y; { Move down 1 column } |
129 |
If (Mouse.X >= Size.X) Then { Mouse x above width } |
130 |
Ni := Focused+Size.Y; { Move up 1 column } |
131 |
+ YY := Size.Y; |
132 |
+ If YY = 0 Then YY := 1; |
133 |
If (Mouse.Y < 0) Then { Mouse y below zero } |
134 |
- Ni := Focused-Focused MOD Size.Y; { Move up one item } |
135 |
+ Ni := Focused-Focused MOD YY; { Move up one item } |
136 |
If (Mouse.Y > Size.Y) Then { Mouse y above height } |
137 |
Ni := Focused-Focused MOD |
138 |
- Size.Y+Size.Y-1; { Move down one item } |
139 |
+ YY+Size.Y-1; { Move down one item } |
140 |
End; |
141 |
End; |
142 |
End Else Ni := Mouse.Y + (Size.Y*(Mouse.X |
143 |
@@ -3732,10 +3761,14 @@ |
144 |
{ ChangeBounds -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 30Jul99 LdB } |
145 |
{---------------------------------------------------------------------------} |
146 |
PROCEDURE TListViewer.ChangeBounds (Var Bounds: TRect); |
147 |
+VAR |
148 |
+Z: LongInt; |
149 |
BEGIN |
150 |
+ Z := NumCols; |
151 |
+ IF Z = 0 Then Z := 1; |
152 |
Inherited ChangeBounds(Bounds); { Call ancestor } |
153 |
If (HScrollBar <> Nil) Then { Valid horz scrollbar } |
154 |
- HScrollBar^.SetStep(Size.X DIV NumCols, |
155 |
+ HScrollBar^.SetStep(Size.X DIV Z, |
156 |
HScrollBar^.ArStep); { Update horz bar } |
157 |
If (VScrollBar <> Nil) Then { Valid vert scrollbar } |
158 |
VScrollBar^.SetStep(Size.Y * NumCols, |