- More significant work on label_list and music playscreen

This commit is contained in:
noisymime 2008-05-13 13:45:59 +00:00
parent 3a5822db37
commit 87c681cb3b
9 changed files with 121 additions and 37 deletions

View File

@ -138,7 +138,9 @@ class Module:
elif self.current_context == self.CONTEXT_PLAY_SCR:
if (event.keyval == clutter.keysyms.Escape):
self.current_context = self.previous_context
self.play_screen.hide()
self.play_screen.undisplay()
else:
self.play_screen.on_key_press_event(stage, event)
#Fills self.list2 with songs from an album
def process_songlist_from_album(self, list_item, album):

View File

@ -26,6 +26,12 @@ class PlayScreen(clutter.Group):
self.main_img_theme = self.glossMgr.themeMgr.get_imageFrame("music_playing_image")
self.img_size = self.main_img_theme.img_size
def on_key_press_event(self, stage, event):
if (event.keyval == clutter.keysyms.Up):
self.song_list.input_queue.input(event)
elif (event.keyval == clutter.keysyms.Down):
self.song_list.input_queue.input(event)
def append_playlist(self, playlist):
self.playlist.add_songs(playlist.songs)
@ -68,6 +74,7 @@ class PlayScreen(clutter.Group):
self.song_list.add_item(song.name)
self.opacity_behaviour.apply(self.song_list)
self.song_list.set_opacity(0)
self.song_list.select_first()
self.song_list.show()
self.add(self.song_list)
@ -76,5 +83,6 @@ class PlayScreen(clutter.Group):
self.timeline.start()
def hide(self):
pass
def undisplay(self):
self.playlist.stop()
self.hide()

View File

@ -34,6 +34,10 @@ class Playlist:
self.position += 1
self.play()
def stop(self):
if self.is_playing:
self.audio_controller.stop_audio()
def add_song(self, song):
self.songs.append(song)

View File

@ -339,7 +339,7 @@ class ThemeMgr:
if not use_reflections is None:
use_reflections = (use_reflections.upper() == "TRUE")
else:
#Gotta have some default value. In reality if this is running, someone else has stuffed up by not providing the size in the theme
#Gotta have some default value.
use_reflections = True
quality = self.find_child_value(element, "quality")
@ -354,7 +354,7 @@ class ThemeMgr:
#Default value
quality = ImageFrame.QUALITY_NORMAL
else:
#Gotta have some default value. In reality if this is running, someone else has stuffed up by not providing the size in the theme
#Gotta have some default value.
quality = ImageFrame.QUALITY_NORMAL
#Setup the pixbuf

BIN
themes/Pear/down.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -29,8 +29,11 @@
<y>50%</y>
</position>
<item_gap>0</item_gap>
<num_visible_elements>4</num_visible_elements>
<!-- This determines the height of each item based on a percentage of the font size.
Eg: 1.00 means that each item will be the same height as the font,
1.50 means that the item will be 1.x times the height as the font etc
-->
<item_height_percent>1.00</item_height_percent>
<!-- These are the opacity and scale values for the 3 possible steps in the menu
Make all the values the same if you do not want these effects -->
@ -65,8 +68,11 @@
<y>50%</y>
</position>
<item_gap>0</item_gap>
<num_visible_elements>8</num_visible_elements>
<!-- This determines the height of each item based on a percentage of the font size.
Eg: 1.00 means that each item will be the same height as the font,
1.50 means that the item will be 1.x times the height as the font etc
-->
<item_height_percent>1.00</item_height_percent>
<!-- These are the opacity and scale values for the 3 possible steps in the menu
Make all the values the same if you do not want these effects -->

View File

@ -14,12 +14,15 @@
<height>40%</height>
</dimensions>
<position type="relativeToStage">
<x>40%</x>
<y>20%</y>
<x>50%</x>
<y>25%</y>
</position>
<item_gap>0</item_gap>
<num_visible_elements>4</num_visible_elements>
<!-- This determines the height of each item based on a percentage of the font size.
Eg: 1.00 means that each item will be the same height as the font,
1.50 means that the item will be 1.x times the height as the font etc
-->
<item_height_percent>1.00</item_height_percent>
<!-- These are the opacity and scale values for the 3 possible steps in the menu
Make all the values the same if you do not want these effects -->
@ -44,7 +47,33 @@
<y>0</y>
</position>
</texture>
<texture id="image_up">
<image>up.png</image>
<dimensions type="relativeToStage">
<width>3%</width>
<height>3%</height>
</dimensions>
<position type="relativeToSelf">
<x>0</x>
<y>0</y>
</position>
</texture>
<texture id="image_down">
<image>down.png</image>
<dimensions type="relativeToStage">
<width>3%</width>
<height>3%</height>
</dimensions>
<position type="blah">
<x>0</x>
<y>0</y>
</position>
</texture>
<inactive_background>music/songlist_off.png</inactive_background>
</label_list>
@ -59,7 +88,7 @@
</dimensions>
<position type="relativeToStage">
<x>10%</x>
<y>40%</y>
<y>35%</y>
</position>
</image_frame>

BIN
themes/Pear/up.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -12,7 +12,7 @@ class LabelList(clutter.Group):
#Default font
font_string = "Tahoma 30"
item_gap = 0
item_height_percent = 1.00
width = 0
def __init__(self, length):
@ -29,22 +29,28 @@ class LabelList(clutter.Group):
self.displayMax = length
self.displaySize = self.displayMax - self.displayMin
self.item_group = clutter.Group()
self.item_group.show()
self.inactive_item_background = None
self.background_group = clutter.Group()
self.background_group.show()
self.add(self.background_group)
self.image_down = None
self.image_up = None
#Selector bar image, moves with selections to show current item
self.selector_bar = None
def setup_from_theme_id(self, themeMgr, id):
element = themeMgr.search_docs("label_list", id).childNodes
img_element = themeMgr.search_docs("label_list", id).getElementsByTagName("texture")
#Quick check to make sure we found something
if element is None:
return None
self.item_gap = int(themeMgr.find_child_value(element, "item_gap"))
self.displayMax = int(themeMgr.find_child_value(element, "num_visible_elements"))
self.item_height_percent = float(themeMgr.find_child_value(element, "item_height_percent"))
#Grab the font
font_node = themeMgr.get_subnode(element, "font")
@ -62,18 +68,37 @@ class LabelList(clutter.Group):
self.fps = int(themeMgr.find_child_value(element, "transition_fps"))
self.frames = int(themeMgr.find_child_value(element, "transition_frames"))
themeMgr.setup_actor(self, element, themeMgr.stage)
(self.width, self.height) = themeMgr.get_dimensions(element, themeMgr.stage)
print "Label List width: %s" % self.get_width()
#Set the up/down images
#This assumes images go in the bottom right corner, will add flexibility later
img_element_up = themeMgr.find_element(img_element, "id", "image_up")
img_element_down = themeMgr.find_element(img_element, "id", "image_down")
if not img_element_up is None:
img_element_up = img_element_up.childNodes
self.image_up = themeMgr.get_texture("image_up", self, element = img_element_up)
self.image_up.set_opacity(180)
self.image_up.set_position( self.width-self.image_up.get_width(), self.height+1)
self.image_up.show()
self.add(self.image_up)
if not img_element_down is None:
img_element_down = img_element_down.childNodes
self.image_down = themeMgr.get_texture("image_up", self, element = img_element_down)
self.image_down.set_opacity(180)
self.image_down.set_position( self.width-self.image_down.get_width()-self.image_up.get_width(), self.height+1)
self.image_down.show()
self.add(self.image_down)
img_element = themeMgr.search_docs("label_list", id).getElementsByTagName("texture")
img_element = themeMgr.find_element(img_element, "id", "inactive_background")
if not img_element is None:
img_element = img_element.childNodes
self.inactive_item_background = themeMgr.get_texture("inactive_background", self, element = img_element)
self.item_group.set_clip(0, 0, self.width, self.height)
self.background_group.set_clip(0, 0, self.width, self.height)
#Get the item background img
img_element_item = themeMgr.find_element(img_element, "id", "inactive_background")
if not img_element_item is None:
img_element_item = img_element_item.childNodes
self.inactive_item_background = themeMgr.get_texture("inactive_background", self, element = img_element_item)
def on_key_press_event (self, event):
self.input_queue.input(event)
@ -87,32 +112,42 @@ class LabelList(clutter.Group):
tempLabel.set_text("S")
self.label_height = tempLabel.get_height()
self.item_height = int(self.label_height * self.item_height_percent)
self.displayMax = self.height / self.label_height
label_width = 0
#This has to go hear for layering purposes
if self.item_group.get_parent() is None:
self.add(self.item_group)
label_y = len(self.items) * (self.label_height + self.item_gap)
item_y = len(self.items) * self.item_height
label_y = item_y + ((self.item_height - self.label_height)/2)
label_y = int(label_y)
#If a background pic is specified in the theme, clone it and add
if not self.inactive_item_background is None:
bg_img = clutter.CloneTexture(self.inactive_item_background)
bg_img.set_height(self.label_height)
bg_img.set_height(self.item_height)
bg_img.set_width(self.width)
bg_img.set_position(0, label_y)
bg_img.show()
bg_img.set_position(0, item_y)
self.background_group.add(bg_img)
newItem = ListItem(self.font_string, itemLabel, label_list = self, max_width = self.width)
newItem.set_position(0, label_y)
newItem.show()
if len(self.items) < self.displaySize:
newItem.show()
if not self.image_down is None: self.image_down.set_opacity(255)
if not self.inactive_item_background is None: bg_img.show()
self.items.append(newItem)
self.add(newItem)
self.item_group.add(newItem)
return newItem
#Removes all items from the list
def clear(self):
for item in self.items:
self.remove(item)
self.item_group.remove(item)
item = None
self.items = []
self.selected = 0
@ -121,7 +156,7 @@ class LabelList(clutter.Group):
def display(self):
if self.displayMax > len(self.items):
self.displayMax = len(self.items)
self.displaySize = self.displayMax - self.displayMin
#self.displaySize = self.displayMax - self.displayMin
#for i in range(self.displaySize):
# self.menuItems[i].show()
@ -249,14 +284,14 @@ class LabelList(clutter.Group):
(group_x, new_y )\
)
alpha = clutter.Alpha(timeline, clutter.ramp_inc_func)
self.behaviour1 = clutter.BehaviourPath(alpha, knots)
self.behaviour2 = clutter.BehaviourOpacity(opacity_start=outgoingMenuItem.get_opacity(), opacity_end=0, alpha=alpha)
self.behaviour_path = clutter.BehaviourPath(alpha, knots)
self.behaviour_opacity = clutter.BehaviourOpacity(opacity_start=outgoingMenuItem.get_opacity(), opacity_end=0, alpha=alpha)
#print "Going to: "+ str(new_y)
#print behaviour1.get_knots()
self.behaviour1.apply(self)
self.behaviour2.apply(outgoingMenuItem)
self.behaviour_path.apply(self.item_group)
self.behaviour_opacity.apply(outgoingMenuItem)
import gobject
class ListItem(clutter.Group):