Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Main
Synchronet
Commits
0b5ff711
Commit
0b5ff711
authored
May 05, 2020
by
echicken
Browse files
Mouse support.
parent
e2ce2364
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
144 additions
and
134 deletions
+144
-134
exec/avatar_chooser.js
exec/avatar_chooser.js
+144
-134
No files found.
exec/avatar_chooser.js
View file @
0b5ff711
...
...
@@ -8,10 +8,12 @@ load('event-timer.js');
load
(
'
ansiedit.js
'
);
const
sauce_lib
=
load
({},
'
sauce_lib.js
'
);
if
(
bbs
.
mods
.
avatar_lib
)
if
(
bbs
.
mods
.
avatar_lib
)
{
avatar_lib
=
bbs
.
mods
.
avatar_lib
;
else
}
else
{
avatar_lib
=
load
({},
'
avatar_lib.js
'
);
}
require
(
"
mouse_getkey.js
"
,
"
mouse_getkey
"
);
const
ansiterm
=
load
({},
'
ansiterm_lib.js
'
);
const
BORDER
=
[
BLUE
,
LIGHTBLUE
,
CYAN
,
LIGHTCYAN
,
WHITE
];
...
...
@@ -92,6 +94,11 @@ Frame.prototype.blit = function (bin, w, h, x, y, str, sc) {
}
}
function
mouse_enable
(
enable
)
{
if
(
!
console
.
term_supports
(
USER_ANSI
))
return
;
ansiterm
.
send
(
'
mouse
'
,
enable
?
'
set
'
:
'
clear
'
,
'
normal_tracking
'
);
}
function
bury_cursor
()
{
console
.
gotoxy
(
console
.
screen_columns
,
console
.
screen_rows
);
}
...
...
@@ -167,12 +174,10 @@ function CollectionBrowser(filename, parent_frame) {
}
function
draw_collection
(
offset
)
{
const
f
=
new
File
(
filename
);
f
.
open
(
'
rb
'
);
const
avatars
=
f
.
read
();
f
.
close
();
var
x
=
1
,
y
=
2
;
for
(
var
a
=
0
;
a
<
collection
.
count
;
a
++
)
{
frames
.
container
.
blit
(
avatars
.
substr
(
a
*
avatar_lib
.
size
,
avatar_lib
.
size
),
avatar_lib
.
defs
.
width
,
avatar_lib
.
defs
.
height
,
x
,
y
,
collection
.
descriptions
[
a
],
WHITE
);
...
...
@@ -182,9 +187,7 @@ function CollectionBrowser(filename, parent_frame) {
y
+=
avatar_lib
.
defs
.
height
+
2
;
}
}
highlight
();
}
function
highlight
()
{
...
...
@@ -243,53 +246,79 @@ function CollectionBrowser(filename, parent_frame) {
this
.
getcmd
=
function
(
cmd
)
{
var
ret
=
null
;
switch
(
cmd
.
toLowerCase
())
{
case
KEY_LEFT
:
if
(
cmd
.
mouse
!==
null
&&
cmd
.
mouse
.
press
&&
cmd
.
mouse
.
x
>=
frames
.
container
.
x
&&
cmd
.
mouse
.
x
<
frames
.
container
.
x
+
frames
.
container
.
width
&&
cmd
.
mouse
.
y
>=
frames
.
container
.
y
&&
cmd
.
mouse
.
y
<
frames
.
container
.
y
+
frames
.
container
.
height
)
{
if
(
cmd
.
mouse
.
button
==
0
)
{
var
mx
=
cmd
.
mouse
.
x
-
frames
.
container
.
x
;
var
my
=
cmd
.
mouse
.
y
-
frames
.
container
.
y
;
var
mcol
=
Math
.
min
(
Math
.
floor
(
mx
/
(
avatar_lib
.
defs
.
width
+
2
)),
state
.
cols
);
var
mrow
=
Math
.
min
(
Math
.
floor
(
my
/
(
avatar_lib
.
defs
.
height
+
2
)),
state
.
rows
);
var
sel
=
(
mcol
+
(
state
.
cols
*
mrow
));
if
(
sel
<
collection
.
count
)
{
state
.
selected
=
sel
;
highlight
();
flashy_flashy
();
ret
=
state
.
selected
;
}
}
else
if
(
cmd
.
mouse
.
button
==
64
)
{
if
(
state
.
selected
>
0
)
{
state
.
selected
--
;
highlight
();
}
break
;
case
KEY_RIGHT
:
}
else
if
(
cmd
.
mouse
.
button
==
65
)
{
if
(
state
.
selected
<
collection
.
count
-
1
)
{
state
.
selected
++
;
highlight
();
}
break
;
case
KEY_UP
:
if
(
state
.
selected
-
state
.
cols
>=
0
)
{
state
.
selected
-=
state
.
cols
;
highlight
();
}
break
;
case
KEY_DOWN
:
if
(
state
.
selected
+
state
.
cols
<
collection
.
count
)
{
state
.
selected
+=
state
.
cols
;
highlight
();
}
break
;
case
KEY_HOME
:
if
(
state
.
selected
>
0
)
{
state
.
selected
=
0
;
highlight
();
}
break
;
case
KEY_END
:
if
(
state
.
selected
<
collection
.
count
-
1
)
{
state
.
selected
=
collection
.
count
-
1
;
highlight
();
}
break
;
case
'
\r
'
:
case
'
\n
'
:
flashy_flashy
();
ret
=
state
.
selected
;
break
;
case
'
q
'
:
ret
=
-
1
;
break
;
default
:
break
;
}
}
else
{
switch
(
cmd
.
key
.
toLowerCase
())
{
case
KEY_LEFT
:
if
(
state
.
selected
>
0
)
{
state
.
selected
--
;
highlight
();
}
break
;
case
KEY_RIGHT
:
if
(
state
.
selected
<
collection
.
count
-
1
)
{
state
.
selected
++
;
highlight
();
}
break
;
case
KEY_UP
:
if
(
state
.
selected
-
state
.
cols
>=
0
)
{
state
.
selected
-=
state
.
cols
;
highlight
();
}
break
;
case
KEY_DOWN
:
if
(
state
.
selected
+
state
.
cols
<
collection
.
count
)
{
state
.
selected
+=
state
.
cols
;
highlight
();
}
break
;
case
KEY_HOME
:
if
(
state
.
selected
>
0
)
{
state
.
selected
=
0
;
highlight
();
}
break
;
case
KEY_END
:
if
(
state
.
selected
<
collection
.
count
-
1
)
{
state
.
selected
=
collection
.
count
-
1
;
highlight
();
}
break
;
case
'
\r
'
:
case
'
\n
'
:
flashy_flashy
();
ret
=
state
.
selected
;
break
;
case
'
q
'
:
ret
=
-
1
;
break
;
default
:
break
;
}
}
return
ret
;
}
...
...
@@ -405,7 +434,7 @@ function CollectionLister(dir, parent_frame) {
state
.
tree
.
colors
.
kfg
=
LIGHTCYAN
;
var
first_collection
=
null
;
directory
(
dir
+
'
/*.bin
'
).
forEach
(
function
(
e
,
i
)
{
function
(
e
)
{
if
(
e
.
search
(
EXCLUDE_FILES
)
>
-
1
)
return
;
const
sauce
=
sauce_lib
.
read
(
e
);
if
(
!
sauce
)
return
;
...
...
@@ -452,20 +481,20 @@ function CollectionLister(dir, parent_frame) {
state
.
collection
=
null
;
}
}
else
{
if
(
cmd
.
toLowerCase
()
==
'
q
'
)
{
if
(
cmd
.
key
.
toLowerCase
()
==
'
q
'
)
{
return
false
;
}
else
if
(
cmd
==
KEY_LEFT
)
{
}
else
if
(
cmd
.
key
==
KEY_LEFT
)
{
var
num_avatars
=
Math
.
floor
(
state
.
tree
.
currentItem
.
sauce
.
filesize
/
avatar_lib
.
size
);
state
.
preview
=
state
.
preview
-
1
;
if
(
state
.
preview
<
0
)
state
.
preview
=
num_avatars
-
1
;
display_preview
(
state
.
tree
.
currentItem
.
file
,
state
.
preview
);
}
else
if
(
cmd
==
KEY_RIGHT
)
{
}
else
if
(
cmd
.
key
==
KEY_RIGHT
)
{
var
num_avatars
=
Math
.
floor
(
state
.
tree
.
currentItem
.
sauce
.
filesize
/
avatar_lib
.
size
);
state
.
preview
=
(
state
.
preview
+
1
)
%
num_avatars
;
display_preview
(
state
.
tree
.
currentItem
.
file
,
state
.
preview
);
}
else
if
(
(
state
.
tree
.
index
>
0
||
cmd
!=
KEY_UP
)
&&
(
state
.
tree
.
index
<
state
.
tree
.
items
.
length
-
1
||
cmd
!=
KEY_DOWN
)
&&
(
state
.
tree
.
index
>
0
||
cmd
.
key
!=
KEY_UP
)
&&
(
state
.
tree
.
index
<
state
.
tree
.
items
.
length
-
1
||
cmd
.
key
!=
KEY_DOWN
)
&&
state
.
tree
.
getcmd
(
cmd
)
)
{
frames
.
info
.
clear
();
...
...
@@ -565,7 +594,7 @@ function AvatarEditor(parent_frame, on_exit) {
}
this
.
getcmd
=
function
(
cmd
)
{
editor
.
getcmd
(
cmd
);
editor
.
getcmd
(
cmd
.
key
);
}
this
.
cycle
=
function
()
{
...
...
@@ -589,22 +618,22 @@ function MainMenu(parent_frame) {
const
user_fname
=
avatar_lib
.
localuser_fname
(
user
.
number
);
const
frames
=
{
parent
:
parent_frame
,
container
:
null
,
tree
:
null
,
info
:
null
,
user_avatar
:
null
parent
:
parent_frame
,
container
:
null
,
tree
:
null
,
info
:
null
,
user_avatar
:
null
};
const
state
=
{
ae
:
null
,
cl
:
null
,
tree
:
null
,
ed_item
:
null
,
timer
:
new
Timer
(),
utime
:
file_exists
(
user_fname
)
?
file_date
(
user_fname
)
:
-
1
,
user_avatar
:
null
,
opt_out_item
:
null
ae
:
null
,
cl
:
null
,
tree
:
null
,
ed_item
:
null
,
timer
:
new
Timer
(),
utime
:
file_exists
(
user_fname
)
?
file_date
(
user_fname
)
:
-
1
,
user_avatar
:
null
,
opt_out_item
:
null
};
function
load_user_avatar
()
{
...
...
@@ -618,11 +647,9 @@ function MainMenu(parent_frame) {
'
My Avatar
'
,
WHITE
);
state
.
user_avatar
=
{};
Object
.
keys
(
user_avatar
).
forEach
(
function
(
e
)
{
if
(
e
!==
'
data
'
)
state
.
user_avatar
[
e
]
=
user_avatar
[
e
];
}
);
Object
.
keys
(
user_avatar
).
forEach
(
function
(
e
)
{
if
(
e
!==
'
data
'
)
state
.
user_avatar
[
e
]
=
user_avatar
[
e
];
});
if
(
state
.
user_avatar
.
disabled
)
{
for
(
var
y
=
1
;
y
<
frames
.
user_avatar
.
data
.
length
-
2
;
y
++
)
{
if
(
!
Array
.
isArray
(
frames
.
user_avatar
.
data
[
y
]))
continue
;
...
...
@@ -710,51 +737,40 @@ function MainMenu(parent_frame) {
state
.
tree
.
colors
.
lfg
=
WHITE
;
state
.
tree
.
colors
.
lbg
=
BG_BLUE
;
state
.
tree
.
colors
.
kfg
=
LIGHTCYAN
;
state
.
tree
.
addItem
(
'
Select an avatar
'
,
function
()
{
state
.
tree
.
close
();
state
.
cl
=
new
CollectionLister
(
avatar_lib
.
local_library
(),
frames
.
parent
);
state
.
cl
.
open
();
}
);
state
.
tree
.
addItem
(
'
Upload an avatar
'
,
function
()
{
console
.
clear
(
WHITE
);
console
.
putmsg
(
'
Your avatar must be 10 x 6 characters in size and saved in binary format.
\r\n
'
);
if
(
upload_avatar
())
{
console
.
putmsg
(
'
Your avatar has been updated.
'
);
}
else
{
console
.
putmsg
(
'
An error was encountered. Your avatar has nto been updated.
'
);
}
console
.
clear
(
LIGHTGRAY
);
frames
.
parent
.
invalidate
();
}
);
state
.
tree
.
addItem
(
'
Download your avatar
'
,
function
()
{
console
.
clear
(
WHITE
);
console
.
putmsg
(
'
Avatars are
'
+
avatar_lib
.
defs
.
width
+
'
x
'
+
avatar_lib
.
defs
.
height
+
'
characters in size, and are sent in binary format.
\r\n
'
);
download_avatar
();
console
.
clear
(
LIGHTGRAY
);
frames
.
parent
.
invalidate
();
}
);
state
.
tree
.
addItem
(
'
Edit your avatar
'
,
function
()
{
state
.
ae
=
new
AvatarEditor
(
frames
.
parent
,
function
()
{
state
.
ae
.
close
();
state
.
ae
=
null
;
}
);
state
.
ae
.
open
();
state
.
tree
.
addItem
(
'
Select an avatar
'
,
function
()
{
state
.
tree
.
close
();
state
.
cl
=
new
CollectionLister
(
avatar_lib
.
local_library
(),
frames
.
parent
);
state
.
cl
.
open
();
});
state
.
tree
.
addItem
(
'
Upload an avatar
'
,
function
()
{
console
.
clear
(
WHITE
);
console
.
putmsg
(
'
Your avatar must be 10 x 6 characters in size and saved in binary format.
\r\n
'
);
if
(
upload_avatar
())
{
console
.
putmsg
(
'
Your avatar has been updated.
'
);
}
else
{
console
.
putmsg
(
'
An error was encountered. Your avatar has nto been updated.
'
);
}
);
console
.
clear
(
LIGHTGRAY
);
frames
.
parent
.
invalidate
();
});
state
.
tree
.
addItem
(
'
Download your avatar
'
,
function
()
{
console
.
clear
(
WHITE
);
console
.
putmsg
(
'
Avatars are
'
+
avatar_lib
.
defs
.
width
+
'
x
'
+
avatar_lib
.
defs
.
height
+
'
characters in size, and are sent in binary format.
\r\n
'
);
download_avatar
();
console
.
clear
(
LIGHTGRAY
);
frames
.
parent
.
invalidate
();
});
state
.
tree
.
addItem
(
'
Edit your avatar
'
,
function
()
{
state
.
ae
=
new
AvatarEditor
(
frames
.
parent
,
function
()
{
state
.
ae
.
close
();
state
.
ae
=
null
;
});
state
.
ae
.
open
();
});
state
.
ed_item
=
state
.
tree
.
addItem
(
tree_strings
[
state
.
user_avatar
!==
null
&&
state
.
user_avatar
.
disabled
?
'
enable
'
:
'
disable
'
],
enable_disable
...
...
@@ -762,14 +778,12 @@ function MainMenu(parent_frame) {
if
(
state
.
user_avatar
===
null
)
{
state
.
ed_item
.
disable
();
state
.
ed_item
.
hide
();
state
.
opt_out_item
=
state
.
tree
.
addItem
(
"
I don't want an avatar
"
,
function
()
{
avatar_lib
.
update_localuser
(
user
.
number
,
''
);
avatar_lib
.
enable_localuser
(
user
.
number
,
false
);
state
.
opt_out_item
.
hide
();
state
.
tree
.
getcmd
(
KEY_UP
);
}
);
state
.
opt_out_item
=
state
.
tree
.
addItem
(
"
I don't want an avatar
"
,
function
()
{
avatar_lib
.
update_localuser
(
user
.
number
,
''
);
avatar_lib
.
enable_localuser
(
user
.
number
,
false
);
state
.
opt_out_item
.
hide
();
state
.
tree
.
getcmd
(
KEY_UP
);
});
}
state
.
tree
.
open
();
...
...
@@ -792,7 +806,7 @@ function MainMenu(parent_frame) {
state
.
opt_out_item
.
hide
();
}
}
}
else
if
(
cmd
.
toLowerCase
()
==
'
q
'
)
{
}
else
if
(
cmd
.
key
.
toLowerCase
()
==
'
q
'
)
{
return
false
;
}
else
{
state
.
tree
.
getcmd
(
cmd
);
...
...
@@ -821,18 +835,21 @@ function MainMenu(parent_frame) {
var
sys_status
,
console_attr
;
function
init
()
{
sys_status
=
bbs
.
sys_status
;
console_attr
=
console
.
attributes
;
bbs
.
sys_status
|=
SS_MOFF
;
console
.
clear
(
LIGHTGRAY
);
ansiterm
.
send
(
"
ext_mode
"
,
"
clear
"
,
"
cursor
"
);
js
.
on_exit
(
"
console.ctrlkey_passthru =
"
+
console
.
ctrlkey_passthru
);
js
.
on_exit
(
"
ansiterm.send('ext_mode', 'set', 'cursor')
"
);
js
.
on_exit
(
"
mouse_enable(false);
"
);
js
.
on_exit
(
"
bbs.sys_status =
"
+
bbs
.
sys_status
+
"
;
"
);
js
.
on_exit
(
"
console.attributes =
"
+
console
.
attributes
+
"
;
"
);
js
.
on_exit
(
"
console.clear();
"
);
console
.
ctrlkey_passthru
|=
(
1
<<
11
);
// Disable Ctrl-K handling in sbbs
console
.
ctrlkey_passthru
|=
(
1
<<
16
);
// Disable Ctrl-P handling in sbbs
console
.
ctrlkey_passthru
|=
(
1
<<
20
);
// Disable Ctrl-T handling in sbbs
console
.
ctrlkey_passthru
|=
(
1
<<
21
);
// Disable Ctrl-U handling in sbbs
console
.
ctrlkey_passthru
|=
(
1
<<
26
);
// Disable Ctrl-Z handling in sbbs
mouse_enable
(
true
);
}
function
main
()
{
...
...
@@ -848,8 +865,8 @@ function main() {
const
menu
=
new
MainMenu
(
frame
);
menu
.
open
();
while
(
true
)
{
var
i
=
console
.
inkey
(
K_NONE
);
if
(
i
!==
''
&&
!
menu
.
getcmd
(
i
))
break
;
var
i
=
mouse_getkey
(
K_NONE
,
5
,
true
);
//
console.inkey(K_NONE);
if
(
!
menu
.
getcmd
(
i
))
break
;
menu
.
cycle
();
if
(
frame
.
cycle
())
bury_cursor
();
}
...
...
@@ -858,12 +875,5 @@ function main() {
}
function
clean_up
()
{
bbs
.
sys_status
=
sys_status
;
console
.
attributes
=
console_attr
;
console
.
clear
();
}
init
();
main
();
clean_up
();
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment