Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F4558
ui.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
ui.py
View Options
from
k.ui
import
*
import
k.db
as
kdb
from
.core
import
get_size_to_fit
PRECT
=
pygame
.
Rect
((
WIDTH
-
PWIDTH
,
0
),
(
PWIDTH
,
HEIGHT
))
MOD_MAN
=
666
class
Player
(
KPanel
):
def
__init__
(
self
,
k
,
tracker
,
thumbnail
=
None
,
loop
=
None
,
jumps
=
None
):
super
()
.
__init__
(
k
,
relative_rect
=
PRECT
,
visible
=
1
)
self
.
trk
=
tracker
self
.
progress
=
pygame_gui
.
elements
.
UIHorizontalSlider
(
start_value
=
0
,
value_range
=
(
0
,
self
.
trk
.
frames
-
1
),
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
0
,
315
),
(
PWIDTH
,
20
)))
self
.
btn_pp
=
pygame_gui
.
elements
.
UIButton
(
text
=
''
,
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
10
,
335
),
(
80
,
-
1
)))
if
hasattr
(
self
,
'save'
):
self
.
btn_save
=
pygame_gui
.
elements
.
UIButton
(
text
=
'Save*'
,
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
110
,
335
),
(
80
,
-
1
)))
else
:
self
.
btn_save
=
None
if
hasattr
(
self
,
'clip'
):
self
.
btn_clip
=
pygame_gui
.
elements
.
UIButton
(
text
=
'Clip'
,
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
200
,
335
),
(
60
,
-
1
)))
else
:
self
.
btn_clip
=
None
if
hasattr
(
self
,
'seq'
):
self
.
btn_seq
=
pygame_gui
.
elements
.
UIButton
(
text
=
'Seq'
,
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
260
,
335
),
(
50
,
-
1
)))
else
:
self
.
btn_seq
=
None
self
.
lbl_frame
=
pygame_gui
.
elements
.
UILabel
(
text
=
''
,
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
420
,
335
),
(
-
1
,
-
1
)))
if
loop
:
loop
=
loop
.
split
(
','
)
self
.
loop
=
True
if
int
(
loop
[
0
])
==
1
else
False
self
.
loop_begin
=
int
(
loop
[
1
])
self
.
loop_end
=
int
(
loop
[
2
])
else
:
self
.
loop
=
False
self
.
loop_begin
=
0
self
.
loop_end
=
self
.
trk
.
frames
-
1
if
jumps
:
self
.
jumps
=
[
int
(
j
)
for
j
in
jumps
.
split
(
','
)]
else
:
self
.
jumps
=
[]
for
j
in
range
(
1
,
10
):
self
.
jumps
.
append
(
int
(
j
*
self
.
trk
.
frames
/
10
))
self
.
lbl_jumps
=
[]
for
j
,
frame
in
enumerate
(
self
.
jumps
):
x
=
28
+
round
((
PWIDTH
-
65
)
*
frame
/
self
.
trk
.
frames
)
self
.
lbl_jumps
.
append
(
pygame_gui
.
elements
.
UILabel
(
text
=
str
(
j
+
1
),
manager
=
k
.
gui
,
container
=
self
.
container
,
relative_rect
=
pygame
.
Rect
((
x
,
295
),
(
-
1
,
-
1
))))
self
.
loop_bar
=
pygame
.
Surface
((
PWIDTH
,
3
))
self
.
draw_loop_bar
()
self
.
thumb_orig
=
thumbnail
self
.
thumb
=
self
.
thumb_orig
self
.
reset
()
def
reset
(
self
):
self
.
progress
.
disable
()
self
.
progress
.
set_current_value
(
0
)
self
.
btn_pp
.
set_text
(
'Play'
)
self
.
lbl_frame
.
set_text
(
f
'[{self.trk.frames}]'
)
#self.holding = 0
self
.
holding
=
[
]
self
.
pdrag
=
False
self
.
trk
.
reset
()
self
.
img
=
None
self
.
playing
=
None
def
kill
(
self
,
replace
=
False
):
self
.
stop
(
replace
)
self
.
progress
.
kill
()
self
.
btn_pp
.
kill
()
if
self
.
btn_save
:
self
.
btn_save
.
kill
()
if
self
.
btn_clip
:
self
.
btn_clip
.
kill
()
if
self
.
btn_seq
:
self
.
btn_seq
.
kill
()
self
.
lbl_frame
.
kill
()
for
lbl_jump
in
self
.
lbl_jumps
:
lbl_jump
.
kill
()
super
()
.
kill
()
def
play
(
self
):
if
self
.
playing
:
return
self
.
op_start
()
self
.
progress
.
enable
()
self
.
btn_pp
.
set_text
(
'Pause'
)
self
.
trk
.
play
()
self
.
playing
=
True
def
pause
(
self
):
if
not
self
.
playing
:
return
self
.
op_stop
()
self
.
btn_pp
.
set_text
(
'Resume'
)
self
.
trk
.
pause
()
self
.
playing
=
False
def
stop
(
self
,
replace
=
False
):
if
self
.
playing
is
None
:
return
self
.
reset
()
if
not
replace
:
self
.
op_stop
()
self
.
k
.
replay_break
()
def
seek
(
self
,
frame
):
if
self
.
playing
and
self
.
pdrag
\
and
frame
+
self
.
trk
.
begin
==
self
.
trk
.
end
:
frame
-=
1
self
.
trk
.
seek
(
frame
+
self
.
trk
.
begin
)
self
.
update_frame
(
frame
)
if
self
.
playing
and
not
self
.
pdrag
and
self
.
holding
:
self
.
op_seek
()
def
update_frame
(
self
,
frame
):
self
.
progress
.
set_current_value
(
frame
)
self
.
lbl_frame
.
set_text
(
str
(
frame
))
def
tick
(
self
):
if
self
.
playing
is
not
None
:
pframe
=
round
(
self
.
progress
.
get_current_value
())
if
pframe
!=
self
.
trk
.
frame
-
self
.
trk
.
begin
:
#print(f'seeking pframe {pframe}')
self
.
seek
(
pframe
)
elif
self
.
playing
and
self
.
pdrag
:
self
.
seek
(
self
.
trk
.
frame
-
self
.
trk
.
begin
-
1
)
#elif self.holding < 0:
# self.seek(self.flast)
elif
self
.
holding
:
if
len
(
self
.
holding
)
>
1
:
self
.
seek
(
self
.
flast
)
for
key
in
self
.
holding
:
self
.
keydown
(
key
,
MOD_MAN
)
elif
self
.
holding
[
0
]
==
pygame
.
K_KP_PERIOD
:
self
.
seek
(
self
.
flast
)
elif
self
.
loop
and
(
pframe
<
self
.
loop_begin
\
or
pframe
>
self
.
loop_end
):
#if self.holding == 0:
if
not
self
.
holding
:
self
.
seek
(
self
.
loop_begin
)
tock
=
self
.
trk
.
tick
()
if
tock
is
None
:
self
.
stop
()
elif
tock
is
not
False
:
self
.
img
=
tock
self
.
update_frame
(
self
.
trk
.
frame
-
self
.
trk
.
begin
)
self
.
paint
()
def
paint
(
self
):
if
not
self
.
k
.
player
.
big
:
self
.
paint_loop_bar
()
if
self
.
playing
is
None
:
if
self
.
thumb
is
not
None
:
self
.
paint_thumb
()
else
:
self
.
paint_video
()
def
paint_thumb
(
self
):
self
.
paint_image
(
self
.
thumb
,
self
.
thumb
.
get_width
(),
self
.
thumb
.
get_height
())
def
paint_video
(
self
):
self
.
paint_image
(
self
.
img
,
self
.
trk
.
size
[
0
],
self
.
trk
.
size
[
1
])
def
paint_image
(
self
,
img
,
w
,
h
):
if
self
.
k
.
player
.
big
:
x
=
int
((
WIDTH
-
w
)
/
2
)
y
=
int
((
HEIGHT
-
STATUS
-
h
)
/
2
)
else
:
x
=
PRECT
[
0
]
y
=
PRECT
[
1
]
if
img
is
True
:
self
.
trk
.
res
.
ie
.
speed
(
self
.
trk
.
res
,
self
.
trk
.
frame
,
(
x
,
y
),
(
w
,
h
))
else
:
self
.
k
.
blit
(
img
,
(
x
,
y
))
def
paint_loop_bar
(
self
):
self
.
k
.
blit
(
self
.
loop_bar
,
(
PRECT
[
0
],
313
))
def
draw_loop_bar
(
self
):
self
.
loop_bar
.
fill
(
BLACK
)
color
=
RED
if
self
.
loop
else
GREEN
width
=
PWIDTH
-
65
x_begin
=
round
(
width
*
self
.
loop_begin
/
self
.
trk
.
frames
)
x_end
=
round
(
width
*
(
1
+
self
.
loop_end
)
/
self
.
trk
.
frames
)
if
x_begin
>
width
-
3
:
x_begin
=
width
-
3
if
x_end
-
x_begin
<
3
:
x_end
=
x_begin
+
3
pygame
.
draw
.
rect
(
self
.
loop_bar
,
color
,
pygame
.
Rect
((
32
+
x_begin
,
0
),
(
x_end
-
x_begin
,
3
)))
def
size_to_fit
(
self
,
width
,
height
):
self
.
trk
.
size_to_fit
(
width
,
height
)
bg
=
pygame
.
Surface
((
width
,
height
))
bg
.
fill
((
9
,
81
,
18
))
if
self
.
thumb_orig
:
size
=
get_size_to_fit
(
self
.
thumb_orig
.
get_size
(),
(
width
,
height
))
self
.
thumb
=
pygame
.
transform
.
smoothscale
(
self
.
thumb_orig
,
size
)
tw
=
self
.
thumb
.
get_width
()
th
=
self
.
thumb
.
get_height
()
if
tw
<
width
or
th
<
height
:
x
=
int
((
width
-
tw
)
/
2
)
y
=
int
((
height
-
th
)
/
2
)
bg
.
blit
(
self
.
thumb
,
(
x
,
y
))
self
.
thumb
=
bg
else
:
self
.
thumb
=
bg
def
click
(
self
,
element
,
target
=
None
):
if
element
==
self
.
btn_pp
:
if
self
.
playing
:
self
.
pause
()
else
:
self
.
play
()
elif
element
==
self
.
btn_save
:
self
.
k
.
job
(
self
.
save
)
elif
element
==
self
.
btn_clip
:
self
.
k
.
job
(
self
.
clip
)
elif
element
==
self
.
btn_seq
:
self
.
k
.
job
(
self
.
seq
)
def
mouse_down
(
self
,
event
):
if
self
.
playing
is
None
:
return
if
event
.
button
!=
pygame
.
BUTTON_LEFT
:
return
pos
=
event
.
pos
prect
=
self
.
progress
.
get_relative_rect
()
srect
=
self
.
progress
.
sliding_button
.
get_relative_rect
()
bw
=
self
.
progress
.
arrow_button_width
if
pos
[
0
]
>
PRECT
[
0
]
+
prect
[
0
]
+
bw
\
and
pos
[
0
]
<
PRECT
[
0
]
+
prect
[
0
]
+
prect
[
2
]
-
bw
\
and
pos
[
1
]
>
PRECT
[
1
]
+
prect
[
1
]
\
and
pos
[
1
]
<
PRECT
[
1
]
+
prect
[
1
]
+
prect
[
3
]:
self
.
pdrag
=
True
self
.
op_hold
()
if
not
(
pos
[
0
]
>=
PRECT
[
0
]
+
srect
[
0
]
\
and
pos
[
0
]
<=
PRECT
[
0
]
+
srect
[
0
]
+
srect
[
2
]):
x
=
pos
[
0
]
-
PRECT
[
0
]
-
bw
w
=
prect
[
2
]
-
2
*
bw
f
=
int
((
x
/
w
)
*
self
.
trk
.
frames
)
self
.
seek
(
f
)
def
mouse_up
(
self
,
event
):
if
event
.
button
!=
pygame
.
BUTTON_LEFT
:
return
self
.
pdrag
=
False
if
self
.
playing
:
self
.
op_seek
()
def
keydown
(
self
,
key
,
mod
):
#print(f'{self.holding} DOWN {key}')
man
=
False
alt
=
False
ctrl
=
False
shift
=
False
if
mod
==
MOD_MAN
:
man
=
True
else
:
alt
=
mod
&
pygame
.
KMOD_ALT
ctrl
=
mod
&
pygame
.
KMOD_CTRL
shift
=
mod
&
pygame
.
KMOD_SHIFT
or
mod
&
pygame
.
KMOD_LSHIFT
\
or
mod
&
pygame
.
KMOD_RSHIFT
nomod
=
not
alt
and
not
ctrl
and
not
shift
if
key
==
pygame
.
K_KP_ENTER
:
if
self
.
playing
:
self
.
pause
()
else
:
self
.
play
()
elif
key
==
pygame
.
K_HOME
:
self
.
stop
()
self
.
play
()
elif
key
==
pygame
.
K_END
:
self
.
stop
()
elif
key
==
pygame
.
K_UP
:
if
not
man
:
self
.
keyhold
(
key
)
if
self
.
playing
:
if
nomod
:
self
.
seek
(
self
.
trk
.
frame
+
3
)
elif
ctrl
:
self
.
seek
(
self
.
trk
.
frame
+
42
)
elif
shift
:
self
.
seek
(
self
.
trk
.
frame
+
666
)
else
:
if
nomod
:
self
.
seek
(
self
.
trk
.
frame
+
1
)
elif
ctrl
:
self
.
seek
(
self
.
trk
.
frame
+
3333
)
elif
shift
:
self
.
seek
(
self
.
trk
.
frame
+
10000
)
elif
key
==
pygame
.
K_DOWN
:
if
not
man
:
self
.
keyhold
(
key
)
if
self
.
playing
:
if
nomod
:
self
.
seek
(
self
.
trk
.
frame
-
3
)
elif
ctrl
:
self
.
seek
(
self
.
trk
.
frame
-
42
)
elif
shift
:
self
.
seek
(
self
.
trk
.
frame
-
666
)
else
:
if
nomod
:
self
.
seek
(
self
.
trk
.
frame
-
1
)
elif
ctrl
:
self
.
seek
(
self
.
trk
.
frame
-
3333
)
elif
shift
:
self
.
seek
(
self
.
trk
.
frame
-
10000
)
elif
key
==
pygame
.
K_LEFT
:
if
not
man
:
self
.
keyhold
(
key
)
if
nomod
:
self
.
seek
(
self
.
trk
.
frame
-
10
)
elif
ctrl
:
self
.
seek
(
self
.
trk
.
frame
-
100
)
elif
shift
:
self
.
seek
(
self
.
trk
.
frame
-
1000
)
elif
key
==
pygame
.
K_RIGHT
:
if
not
man
:
self
.
keyhold
(
key
)
if
nomod
:
self
.
seek
(
self
.
trk
.
frame
+
10
)
elif
ctrl
:
self
.
seek
(
self
.
trk
.
frame
+
100
)
elif
shift
:
self
.
seek
(
self
.
trk
.
frame
+
1000
)
elif
key
==
pygame
.
K_KP0
:
if
nomod
:
if
not
man
:
self
.
keyhold
(
key
,
True
)
if
self
.
loop
:
self
.
seek
(
0
)
else
:
self
.
seek
(
self
.
loop_begin
)
elif
key
>=
pygame
.
K_KP1
and
key
<=
pygame
.
K_KP9
:
if
nomod
:
if
not
man
:
self
.
keyhold
(
key
,
True
)
self
.
seek
(
self
.
jumps
[
key
-
pygame
.
K_KP1
])
elif
ctrl
and
not
man
:
idx
=
key
-
pygame
.
K_KP1
frame
=
self
.
trk
.
frame
-
self
.
trk
.
begin
self
.
jumps
[
idx
]
=
frame
self
.
lbl_jumps
[
idx
]
.
set_relative_position
(
(
28
+
int
((
PWIDTH
-
65
)
*
frame
/
self
.
trk
.
frames
),
295
))
elif
key
==
pygame
.
K_KP_PERIOD
:
if
self
.
playing
:
#if self.holding == 0 or self.holding is None:
# self.op_hold()
# self.flast = self.trk.frame
# self.holding = -1 * key
#elif self.holding > 0:
# self.op_hold()
# self.holding = -1 * self.holding
#else:
# #print('how did this happen (key already down)?')
# pass
if
man
:
self
.
seek
(
self
.
flast
)
else
:
self
.
keyhold
(
key
,
True
)
#self.holding.append(key)
elif
key
==
pygame
.
K_KP_DIVIDE
:
if
nomod
:
self
.
loop_begin
=
self
.
trk
.
frame
-
self
.
trk
.
begin
if
self
.
loop_begin
>
self
.
loop_end
:
self
.
loop_end
=
self
.
trk
.
end
-
self
.
trk
.
begin
self
.
draw_loop_bar
()
#if self.btn_save:
# self.btn_save.enable()
elif
key
==
pygame
.
K_KP_MULTIPLY
:
if
nomod
:
self
.
loop_end
=
self
.
trk
.
frame
-
self
.
trk
.
begin
if
self
.
loop_end
<
self
.
loop_begin
:
self
.
loop_begin
=
0
self
.
draw_loop_bar
()
#if self.btn_save:
# self.btn_save.enable()
elif
key
==
pygame
.
K_KP_PLUS
:
if
nomod
:
if
not
self
.
loop
:
self
.
loop
=
True
self
.
draw_loop_bar
()
#if self.btn_save:
# self.btn_save.enable()
#self.keyhold(key)
self
.
seek
(
self
.
loop_begin
)
elif
key
==
pygame
.
K_KP_MINUS
:
if
nomod
:
if
self
.
loop
:
self
.
loop
=
False
self
.
draw_loop_bar
()
#if self.btn_save:
# self.btn_save.enable()
if
not
man
:
self
.
keyhold
(
key
)
self
.
seek
(
self
.
loop_end
)
def
keyup
(
self
,
key
,
mod
):
#print(f'{self.holding} UP {key}')
if
key
==
pygame
.
K_ESCAPE
:
self
.
k
.
player
.
killall
()
return
#if self.holding < 0:
# self.holding = -1 * self.holding
# if self.holding == key:
# self.holding = 0
# self.op_unhold()
#elif self.holding == 0:
# if key == pygame.K_KP0:
# self.seek(self.loop_begin)
# elif key >= pygame.K_KP1 and key <= pygame.K_KP9:
# self.seek(self.jumps[key - pygame.K_KP1])
#else:
# self.holding = 0
while
key
in
self
.
holding
:
idx
=
self
.
holding
.
index
(
key
)
del
self
.
holding
[
idx
]
if
idx
>
0
:
if
self
.
loop
and
key
==
pygame
.
K_KP_PERIOD
:
self
.
seek
(
self
.
flast
)
else
:
self
.
keydown
(
self
.
holding
[
idx
-
1
],
MOD_MAN
)
def
keyhold
(
self
,
key
,
magic
=
False
):
#if self.holding < 0:
# self.holding = -1 * key
#elif magic and self.holding == 0:
# self.flast = self.trk.frame - self.trk.begin
# self.holding = key
#elif magic and (self.holding >= pygame.K_KP1 \
# and self.holding <= pygame.K_KP9) \
# or self.holding == pygame.K_KP0:
# self.holding = -1 * self.holding
#else:
# self.holding = key
if
magic
:
self
.
flast
=
self
.
trk
.
frame
-
self
.
trk
.
begin
self
.
holding
.
append
(
key
)
def
op_start
(
self
):
#self.k.replay_op(self.trk.res.video_id, kdb.OP_START,
# self.trk.frame + self.trk.begin)
pass
def
op_stop
(
self
):
#self.k.replay_op(self.trk.res.video_id, kdb.OP_STOP,
# self.trk.frame + self.trk.begin)
pass
def
op_seek
(
self
):
self
.
op_start
()
def
op_hold
(
self
):
#self.k.replay_op(self.trk.res.video_id, kdb.OP_HOLD,
# self.trk.frame + self.trk.begin)
pass
def
op_unhold
(
self
):
self
.
op_start
()
File Metadata
Details
Attached
Mime Type
text/x-script.python
Expires
Wed, Sep 16, 8:14 PM (4 d, 20 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3724
Default Alt Text
ui.py (16 KB)
Attached To
Mode
rK Media System
Attached
Detach File
Event Timeline
Log In to Comment