| ... | ... |
@@ -99,8 +99,8 @@ BRK |
| 99 | 99 |
#41 .Mouse/state DEI #01 = + .Screen/sprite DEO |
| 100 | 100 |
|
| 101 | 101 |
( select choice ) |
| 102 |
- .Mouse/y DEI2 |
|
| 103 |
- 10// NIP #01 - ;select-file JSR2 |
|
| 102 |
+ .Mouse/y DEI2 .browser/y LDZ2 -- |
|
| 103 |
+ 10// NIP ;select-file JSR2 |
|
| 104 | 104 |
|
| 105 | 105 |
.Mouse/state DEI #00 = ,&no-click JCN |
| 106 | 106 |
.browser/sel LDZ ;run-file JSR2 |
| ... | ... |
@@ -180,6 +180,8 @@ RTN |
| 180 | 180 |
POP RTN |
| 181 | 181 |
&has-changed |
| 182 | 182 |
|
| 183 |
+ DUP ;scroll-browser JSR2 |
|
| 184 |
+ |
|
| 183 | 185 |
.browser/x LDZ2 #0018 -- .browser/y LDZ2 [ .browser/sel LDZ TOS 10** ++ ] |
| 184 | 186 |
#0010 #0010 |
| 185 | 187 |
;hand-icn #00 ;draw-icn JSR2 |
| ... | ... |
@@ -201,6 +203,29 @@ RTN |
| 201 | 203 |
|
| 202 | 204 |
RTN |
| 203 | 205 |
|
| 206 |
+( Scroll the browser to accomodate off-screen line items ) |
|
| 207 |
+@scroll-browser ( id -- ) |
|
| 208 |
+ ( Check whether the selection moved up or down ) |
|
| 209 |
+ .browser/last LDZ OVR SWP SUB #80 AND ,&negative JCN |
|
| 210 |
+ |
|
| 211 |
+ &positive ( The selection moved down ) |
|
| 212 |
+ ( Calculate the id currently at the bottom of the screen ) |
|
| 213 |
+ .Screen/height DEI2 .browser/y LDZ2 #0010 ++ -- 10// NIP |
|
| 214 |
+ GTH ,&scroll-up JCN [ RTN ] |
|
| 215 |
+ &scroll-up |
|
| 216 |
+ .browser/y LDZ2k #0010 -- ROT STZ2 |
|
| 217 |
+ RTN |
|
| 218 |
+ |
|
| 219 |
+ &negative ( The selection moved up ) |
|
| 220 |
+ ( Calculate the id currently at the top of the screen ) |
|
| 221 |
+ ( TODO make a macro constant for y initial pos ) |
|
| 222 |
+ #0010 .browser/y LDZ2 -- 10// NIP |
|
| 223 |
+ |
|
| 224 |
+ LTH ,&scroll-down JCN [ RTN ] |
|
| 225 |
+ &scroll-down |
|
| 226 |
+ .browser/y LDZ2k #0010 ++ ROT STZ2 ( Decrement y by 0x10 ) |
|
| 227 |
+ RTN |
|
| 228 |
+ |
|
| 204 | 229 |
@run-file ( id -- ) |
| 205 | 230 |
|
| 206 | 231 |
SEL-ENTRY LDA2 |
| ... | ... |
@@ -236,11 +261,13 @@ RTN |
| 236 | 261 |
.browser/y LDZ2 .Screen/y DEO2 |
| 237 | 262 |
SEL-ENTRY ;dir/entries |
| 238 | 263 |
&outer ( selected-entry* this-entry* ) |
| 264 |
+ .Screen/y DEI2 #0010 LTH2 ,&inc JCN ( Don't draw anything in the first row ) |
|
| 239 | 265 |
EQU2k #0c * #01 + STH |
| 240 | 266 |
LDA2k ORAk #00 = ,&end JCN |
| 267 |
+ ,&clear JSR |
|
| 241 | 268 |
STHr ,&draw-one JSR |
| 242 | 269 |
.browser/x LDZ2 .Screen/x DEO2 |
| 243 |
- .Screen/y DEI2 #0010 ++ .Screen/y DEO2 |
|
| 270 |
+ &inc .Screen/y DEI2 #0010 ++ .Screen/y DEO2 |
|
| 244 | 271 |
INC2 INC2 ,&outer JMP |
| 245 | 272 |
&end |
| 246 | 273 |
POP2 POP2 POP2 POPr |
| ... | ... |
@@ -261,6 +288,20 @@ RTN |
| 261 | 288 |
POP2 POPr |
| 262 | 289 |
RTN |
| 263 | 290 |
|
| 291 |
+ &clear ( -- ) |
|
| 292 |
+ .Screen/x DEI2k ( Stash the current x pos ) |
|
| 293 |
+ #ff00 |
|
| 294 |
+ &clear-loop |
|
| 295 |
+ #00 .Screen/sprite DEO |
|
| 296 |
+ .Screen/y DEI2k #0008 ++ ROT DEO2 |
|
| 297 |
+ #00 .Screen/sprite DEO |
|
| 298 |
+ .Screen/y DEI2k #0008 -- ROT DEO2 |
|
| 299 |
+ .Screen/x DEI2k #0008 ++ ROT DEO2 |
|
| 300 |
+ INC NEQk ,&clear-loop JCN |
|
| 301 |
+ POP2 |
|
| 302 |
+ ROT DEO2 |
|
| 303 |
+RTN |
|
| 304 |
+ |
|
| 264 | 305 |
@draw-time ( -- ) |
| 265 | 306 |
|
| 266 | 307 |
.DateTime/day DEI |