1 import pygame
, os
, random
, string
, cfg
2 from pygame
.locals import *
4 # GuiObject is everything (pictures, labels...) you see on the gui
6 class GuiObject(pygame
.sprite
.Sprite
):
7 def __init__(self
, name
, xpos
, ypos
, layer
):
8 pygame
.sprite
.Sprite
.__init
__(self
)
15 self
.rect
= xpos
,ypos
,0,0
20 self
.contentkey
= None
21 self
.contentkeyarg
= None
27 if self
.xpos
!= self
.rect
[0] or self
.ypos
!= self
.rect
[1]:
28 if self
.fx
and cfg
.cf
['disablefx'] == '0':
32 self
.rect
= self
.xpos
, self
.ypos
, self
.rect
[2], self
.rect
[3]
39 def _changeimage(self
):
43 if self
.fx
== 'm_slide':
52 self
.rect
= x
, y
, self
.rect
[2], self
.rect
[3]
54 if self
.fx
== 's_scroll':
58 if self
.font
.size(text
)[0] > int(self
.width
):
59 image
= self
.font
.render(text
, 1, self
.color
)
60 w
, h
= image
.get_size()
62 choprect
= 0, h
, self
.scrollcount
, h
63 image
= pygame
.transform
.chop(image
, choprect
)
64 choprect
= self
.width
, h
, int(cfg
.th
['resolution'][0]), h
65 image
= pygame
.transform
.chop(image
, choprect
)
66 self
.image
= image
.convert_alpha()
67 w
, h
= self
.image
.get_size()
68 self
.rect
= self
.rect
[0], self
.rect
[1], w
, h
69 if orgwidth
< self
.width
+ self
.scrollcount
:
71 elif self
.scrollcount
== 0:
72 self
.scrollinv
= False
73 if self
.scrollinv
: self
.scrollcount
-= self
.fxspeed
74 else: self
.scrollcount
+= self
.fxspeed
76 class Image(GuiObject
):
77 def __init__(self
, name
, xpos
, ypos
, layer
, imagefile
, size
=None, alpha
=None, hflip
=False, vflip
=False, degree
=None):
78 GuiObject
.__init
__(self
, name
, xpos
, ypos
, layer
)
85 self
.imagefile
= imagefile
89 self
.image
= pygame
.image
.load(self
.imagefile
)
90 self
.image
= pygame
.transform
.flip(self
.image
, self
.hflip
, self
.vflip
)
91 if self
.size
: self
.image
= pygame
.transform
.scale(self
.image
, (self
.size
, self
.size
))
92 if self
.alpha
: self
.image
.set_alpha(self
.alpha
)
93 if self
.degree
: self
.image
= pygame
.transform
.rotate(self
.image
, self
.degree
)
94 self
.image
= self
.image
.convert_alpha()
95 w
,h
= self
.image
.get_size()
96 self
.rect
= self
.xpos
, self
.ypos
, w
, h
98 def _changeimage(self
):
100 if self
.imagefile
!= self
.change
:
101 oldimagefile
= self
.image
102 self
.imagefile
= self
.change
106 self
.imagefile
= oldimagefile
109 class ListBar(Image
):
110 def __init__(self
, name
, xpos
, ypos
, layer
, imagefile
, xoff
, yoff
):
111 Image
.__init
__(self
, name
, xpos
+xoff
, ypos
+yoff
, layer
, imagefile
)
115 class Label(GuiObject
):
116 def __init__(self
, name
, xpos
, ypos
, layer
, font
, (r
,g
,b
), text
=' ', width
=None, extra
=None):
117 GuiObject
.__init
__(self
, name
, xpos
, ypos
, layer
)
126 self
.scrollinv
= False
129 def _makeimage(self
):
131 while self
.font
.size(self
.text
)[0] > self
.width
:
132 self
.text
= self
.text
[0:-1]
133 if self
.extra
and self
.text
!= ' ':
134 self
.text
= self
.text
+ self
.extra
135 self
.image
= self
.font
.render(str(self
.text
), int(cfg
.cf
['fontaa']), self
.color
)
136 self
.image
= self
.image
.convert_alpha()
138 def _changeimage(self
):
140 if self
.orgtext
!= self
.change
:
141 self
.orgtext
= self
.change
142 self
.text
= self
.change
144 self
.scrollinv
= False
147 # self.font = pygame.font.Font(ttf, int(size))
150 def __init__(self
, name
, xpos
, ypos
, layer
, font
, (r
,g
,b
), maxlen
, space
, width
, listbar
):
163 self
.bar
.fx
= 'm_slide'
164 self
.bar
.fxspeed
= space
/2
170 self
.contentkey
= None
171 self
.contentkeyarg
= None
172 for g
in range(self
.maxlen
):
173 y
= g
*self
.space
+self
.ypos
174 self
.labels
.append(Label('lbl'+str(g
), self
.xpos
, y
, self
.layer
, self
.font
, self
.color
, ' ', self
.width
))
178 for label
in self
.labels
:
184 self
.list[self
.liststart
+ self
.selected
].press()
192 def add(self
, text
, value
, onpress
, onselect
):
193 self
.list.append(ListItem(text
, value
, onpress
, onselect
))
196 if self
.selected
< 0: self
.selected
= 0
197 if self
.liststart
< 0: self
.liststart
= 0
198 if self
.liststart
+ self
.selected
> len(self
.list)-1:
201 if len(self
.list[self
.liststart
:]) < self
.maxlen
:
202 for i
in range(self
.maxlen
- len(self
.list[self
.liststart
:])):
203 self
.labels
[i
+len(self
.list[self
.liststart
:])].change
= ' '
207 for item
in self
.list[self
.liststart
:]:
208 self
.labels
[i
].change
= item
.text
210 if i
== self
.maxlen
: break
211 self
.list[self
.liststart
+ self
.selected
].select()
213 def _updbar(self
, straight
=False):
215 self
.bar
.rect
= self
.bar
.rect
[0],self
.selected
* self
.space
+ (self
.ypos
+ self
.bar
.yoff
),self
.bar
.rect
[2],self
.bar
.rect
[3]
216 self
.bar
.ypos
= self
.selected
* self
.space
+ (self
.ypos
+ self
.bar
.yoff
)
217 for line
in self
.labels
: #!!!!!!
219 self
.list[self
.liststart
+ self
.selected
].select()
220 self
.labels
[self
.selected
].fx
= 's_scroll'
221 self
.labels
[self
.selected
].fxspeed
= 2
223 def select_next(self
):
224 if self
.selected
< self
.maxlen
-1 and self
.liststart
+self
.selected
< len(self
.list)-1:
230 def select_last(self
):
231 if self
.selected
> 0:
239 if self
.liststart
> len(self
.list) - self
.maxlen
:
242 self
.liststart
+= self
.maxlen
246 self
.selected
= self
.maxlen
-1
247 if self
.liststart
== 0:
248 self
.liststart
= len(self
.list)-self
.maxlen
250 self
.liststart
-= self
.maxlen
256 def __init__(self
, text
, value
, onpress
, onselect
):
258 if os
.path
.isdir(value
):
259 self
.text
= '[' + text
+ ']'
260 elif os
.path
.isfile(value
):
261 self
.text
, ext
= os
.path
.splitext(text
)
263 self
.pressaction
= onpress
264 self
.selectaction
= onselect
267 return self
.pressaction(self
.value
)
270 return self
.selectaction(self
.value
)