- Converted image_previewer to use thumbnailMgr

- Added selector bar to label_list
This commit is contained in:
noisymime 2008-06-07 00:29:53 +00:00
parent 3d1e7aeb3f
commit 29fdfe23f0
6 changed files with 59 additions and 49 deletions

View File

@ -3,6 +3,15 @@ import copy
from utils.themeMgr import ThemeMgr from utils.themeMgr import ThemeMgr
from ui_elements.message import Message from ui_elements.message import Message
"""The core control class for Gloss
GlossMgr handles and controls the input. It maintains the status of any modules / plugins
as well as the interface that is to be used. All input goes through GlossMgr, which in turns passes it
to the correct module. It also stores certain global properties (Eg a 'debug' flag). The GlossMgr instance is passed to all modules so that they my reference this data
"""
__author__ = 'Josh Stewart (noisymime)'
__version__= '0.1'
class GlossMgr: class GlossMgr:
theme_dir = "themes/" theme_dir = "themes/"

View File

@ -488,7 +488,7 @@ class Module:
#print imgPath #print imgPath
#Only add a max of 15 images to the previewer #Only add a max of 15 images to the previewer
if preview_count < 15: if preview_count < 10:
img_previewer.add_texture(imgPath) img_previewer.add_texture(imgPath)
preview_count += 1 preview_count += 1

View File

@ -6,6 +6,7 @@ import random
import math import math
from ReflectionTexture import Texture_Reflection from ReflectionTexture import Texture_Reflection
from ui_elements.image_frame import ImageFrame from ui_elements.image_frame import ImageFrame
from utils.ThumbnailMgr import ThumbnailMgr
class image_previewer(clutter.Group): class image_previewer(clutter.Group):
tex1 = None tex1 = None
@ -56,6 +57,8 @@ class image_previewer(clutter.Group):
self.behaviour_depth2 = clutter.BehaviourDepth(depth_start=-800, depth_end=200, alpha=self.alpha2) self.behaviour_depth2 = clutter.BehaviourDepth(depth_start=-800, depth_end=200, alpha=self.alpha2)
self.behaviour_depth3 = clutter.BehaviourDepth(depth_start=-800, depth_end=200, alpha=self.alpha3) self.behaviour_depth3 = clutter.BehaviourDepth(depth_start=-800, depth_end=200, alpha=self.alpha3)
self.thumbMgr = ThumbnailMgr()
#This max boundaries for the preview image size #This max boundaries for the preview image size
def set_max_img_dimensions(self, width, height): def set_max_img_dimensions(self, width, height):
self.max_img_width = width self.max_img_width = width
@ -69,8 +72,9 @@ class image_previewer(clutter.Group):
img_size = self.max_img_width img_size = self.max_img_width
try: try:
pixbuf = gtk.gdk.pixbuf_new_from_file(texture_src) #pixbuf = gtk.gdk.pixbuf_new_from_file(texture_src)
texture = ImageFrame(pixbuf, img_size, use_reflection = True, quality = ImageFrame.QUALITY_FAST) #texture = ImageFrame(pixbuf, img_size, use_reflection = True, quality = ImageFrame.QUALITY_FAST)
texture = self.thumbMgr.get_image_frame(texture_src, img_size)
self.textures.append(texture) self.textures.append(texture)
except gobject.GError, e: except gobject.GError, e:
print "Could not load file: %s" % texture_src print "Could not load file: %s" % texture_src
@ -114,7 +118,7 @@ class image_previewer(clutter.Group):
self.behaviour_opacity.apply(self.tex1) self.behaviour_opacity.apply(self.tex1)
if self.text1.get_parent() is None: self.add(self.tex1) if self.tex1.get_parent() is None: self.add(self.tex1)
parent = self.get_parent() parent = self.get_parent()
if parent is None: if parent is None:

View File

@ -35,7 +35,7 @@ class LabelList(clutter.Group):
#There are 3 subgroups: #There are 3 subgroups:
# 1) item_group: Contains the labels themselves # 1) item_group: Contains the labels themselves
# 2) background_group: Contains the background images # 2) background_group: Contains the background images
# 3) display_group: Contains groups 1 & 2 # 3) display_group: Contains groups 1 & 2. Display group can optionally have a clip applied to it
# Group 3 is then added to self # Group 3 is then added to self
self.item_group = clutter.Group() self.item_group = clutter.Group()
self.item_group.show() self.item_group.show()
@ -48,11 +48,8 @@ class LabelList(clutter.Group):
self.display_group.add(self.item_group) self.display_group.add(self.item_group)
self.inactive_item_background = None self.inactive_item_background = None
self.image_down = None self.image_down = None
self.image_up = None self.image_up = None
#Selector bar image, moves with selections to show current item #Selector bar image, moves with selections to show current item
self.selector_bar = None self.selector_bar = None
@ -87,10 +84,11 @@ class LabelList(clutter.Group):
themeMgr.setup_actor(self, element, parent) themeMgr.setup_actor(self, element, parent)
(self.width, self.height) = themeMgr.get_dimensions(element, parent) (self.width, self.height) = themeMgr.get_dimensions(element, parent)
#Set the up/down images #Set the up/down images + the selector bar
#This assumes images go in the bottom right corner, will add flexibility later #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_up = themeMgr.find_element(img_element, "id", "image_up")
img_element_down = themeMgr.find_element(img_element, "id", "image_down") img_element_down = themeMgr.find_element(img_element, "id", "image_down")
img_element_selector_bar = themeMgr.find_element(img_element, "id", "selector_bar")
if not img_element_up is None: if not img_element_up is None:
img_element_up = img_element_up.childNodes img_element_up = img_element_up.childNodes
self.image_up = themeMgr.get_texture("image_up", self, element = img_element_up) self.image_up = themeMgr.get_texture("image_up", self, element = img_element_up)
@ -105,6 +103,11 @@ class LabelList(clutter.Group):
self.image_down.set_position( self.width-self.image_down.get_width()-self.image_up.get_width(), self.height+1) 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.image_down.show()
self.add(self.image_down) self.add(self.image_down)
if not img_element_selector_bar is None:
img_element_selector_bar = img_element_selector_bar.childNodes
self.selector_bar = themeMgr.get_texture("selector_bar", parent=self, element=img_element_selector_bar)
self.selector_bar.show()
self.add(self.selector_bar)
self.display_group.set_clip(0, 0, self.width, self.height) self.display_group.set_clip(0, 0, self.width, self.height)
@ -193,10 +196,6 @@ class LabelList(clutter.Group):
def display(self): def display(self):
if self.displayMax > len(self.items): if self.displayMax > len(self.items):
self.displayMax = len(self.items) self.displayMax = len(self.items)
#self.displaySize = self.displayMax - self.displayMin
#for i in range(self.displaySize):
# self.menuItems[i].show()
self.show() self.show()
@ -222,14 +221,20 @@ class LabelList(clutter.Group):
#This horrible loop does all the scaling #This horrible loop does all the scaling
#This includes, the selected item and the ones on either side of it #This includes, the selected item and the ones on either side of it
for i in range(len(self.items)): for i in range(len(self.items)):
#print str(i)
if i == self.selected: if i == self.selected:
#Currently selected item
self.items[i].scaleLabel(ListItem.SCALE_FULL, self.timeline) self.items[i].scaleLabel(ListItem.SCALE_FULL, self.timeline)
elif (i == self.selected-1) and (i >= self.displayMin): elif (i == self.selected-1) and (i >= self.displayMin):
#Item above the selected
self.items[i].scaleLabel(ListItem.SCALE_MEDIUM, self.timeline) self.items[i].scaleLabel(ListItem.SCALE_MEDIUM, self.timeline)
elif (i == self.selected+1) and (i <= self.displayMax-1): elif (i == self.selected+1) and (i <= self.displayMax-1):
#Item below the selected
self.items[i].scaleLabel(ListItem.SCALE_MEDIUM, self.timeline) self.items[i].scaleLabel(ListItem.SCALE_MEDIUM, self.timeline)
elif (i < self.displayMin) or (i > self.displayMax):
#Item is off screen
self.items[i].scaleLabel(ListItem.SCALE_OFFSCREEN, self.timeline)
else: else:
#All other items
self.items[i].scaleLabel(ListItem.SCALE_NONE, self.timeline) self.items[i].scaleLabel(ListItem.SCALE_NONE, self.timeline)
#Check we're at the top of the viewable list #Check we're at the top of the viewable list
@ -241,10 +246,12 @@ class LabelList(clutter.Group):
elif (self.selected > self.roll_point_max) and (self.displayMax < (len(self.items)-1)): elif (self.selected > self.roll_point_max) and (self.displayMax < (len(self.items)-1)):
#self.rollList( self.items[self.displayMax+1], self.items[self.displayMin-1], self.DIRECTION_DOWN, self.timeline) #self.rollList( self.items[self.displayMax+1], self.items[self.displayMin-1], self.DIRECTION_DOWN, self.timeline)
self.rollList( self.DIRECTION_DOWN, self.timeline) self.rollList( self.DIRECTION_DOWN, self.timeline)
else:
if not self.selector_bar is None: if not self.selector_bar is None:
#move the selection bar #move the selector bar
self.selector_bar().selectItem(self.menuItems[self.selected], self.timeline) abs_item = self.selected - self.displayMin
abs_y = abs_item * self.item_height
self.selector_bar().selectItem(self.menuItems[self.selected], self.timeline)
self.timeline.start() self.timeline.start()
@ -363,7 +370,7 @@ class ListItem(clutter.Group):
gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
} }
SCALE_NONE, SCALE_MEDIUM, SCALE_FULL = range(3) SCALE_NONE, SCALE_MEDIUM, SCALE_FULL, SCALE_OFFSCREEN = range(4)
#Default values for zoom and opacity #Default values for zoom and opacity
opacity_step_full = 255 opacity_step_full = 255
@ -373,8 +380,8 @@ class ListItem(clutter.Group):
scale_step_medium = 0.5 scale_step_medium = 0.5
scale_step_none = 0.4 scale_step_none = 0.4
def __init__ (self, font, label_left = "", label_right = "", label_list = None, max_width = None): def __init__ (self, font, label_left="", label_right="", label_list=None, max_width=None):
clutter.Group.__init__ (self) #, menu, itemLabel, y) clutter.Group.__init__ (self)
self.set_anchor_point_from_gravity(clutter.GRAVITY_WEST) self.set_anchor_point_from_gravity(clutter.GRAVITY_WEST)
self.label_left = clutter.Label() self.label_left = clutter.Label()
@ -401,14 +408,9 @@ class ListItem(clutter.Group):
self.currentOpacity = 255 self.currentOpacity = 255
self.data = label_left #By default the items data is simply its label self.data = label_left #By default the items data is simply its label
#The width is the length of the selector bar minus its offset
#width = self.glossMgr.get_selector_bar().get_width() + self.glossMgr.get_selector_bar().get_x_offset()
#self.set_width(width)
self.label_left.set_ellipsize(pango.ELLIPSIZE_END) self.label_left.set_ellipsize(pango.ELLIPSIZE_END)
#Text is actually scaled down in 'regular' position so that it doesn't get jaggies when zoomed in #Text is actually scaled down in 'regular' position so that it doesn't get jaggies when zoomed in
#self.set_scale(self.zoomLevel, self.zoomLevel)
self.currentZoom = self.scale_step_medium self.currentZoom = self.scale_step_medium
self.currentOpacity = self.opacity_step_medium self.currentOpacity = self.opacity_step_medium
self.set_scale(self.currentZoom, self.currentZoom) self.set_scale(self.currentZoom, self.currentZoom)
@ -418,12 +420,6 @@ class ListItem(clutter.Group):
if not max_width is None: if not max_width is None:
self.label_left.set_width( max_width - self.label_right.get_width() ) self.label_left.set_width( max_width - self.label_right.get_width() )
self.label_left.set_ellipsize(pango.ELLIPSIZE_END) self.label_left.set_ellipsize(pango.ELLIPSIZE_END)
"""
#(label_width, label_height) = self.label.get_size()
label_x = 0 #x #self.stage.get_width() - label_width - 50
label_y = y #self.stage.get_height() - label_height
self.set_position(0, y)
"""
def scaleLabel(self, level, timeline): def scaleLabel(self, level, timeline):
@ -433,18 +429,21 @@ class ListItem(clutter.Group):
if level == self.SCALE_FULL: if level == self.SCALE_FULL:
zoomTo = self.scale_step_full #self.menu.zoomStep0 zoomTo = self.scale_step_full
opacityTo = self.opacity_step_full #self.menu.opacityStep0 opacityTo = self.opacity_step_full
self.emit("selected") self.emit("selected")
if level == self.SCALE_MEDIUM: elif level == self.SCALE_MEDIUM:
zoomTo = self.scale_step_medium #self.menu.zoomStep1 zoomTo = self.scale_step_medium
opacityTo = self.opacity_step_medium #self.menu.opacityStep1 opacityTo = self.opacity_step_medium
self.emit("deselected") self.emit("deselected")
#self.itemTexturesGroup.hide_all() elif level == self.SCALE_NONE:
if level == self.SCALE_NONE: zoomTo = self.scale_step_none
zoomTo = self.scale_step_none #self.menu.zoomStep2 opacityTo = self.opacity_step_none
opacityTo = self.opacity_step_none #self.menu.opacityStep2 elif level == self.SCALE_OFFSCREEN:
zoomTo = self.scale_step_none
opacityTo = 0
#Do a check for any actual changes. If there's no change, just return without applying any behaviours
if (zoomTo == self.currentZoom) and (opacityTo == self.currentOpacity): if (zoomTo == self.currentZoom) and (opacityTo == self.currentOpacity):
return None return None
@ -454,12 +453,8 @@ class ListItem(clutter.Group):
self.behaviourScale.apply(self) self.behaviourScale.apply(self)
self.behaviourOpacity.apply(self) self.behaviourOpacity.apply(self)
#timeline.connect('completed', self.scale_end_event, zoomTo, opacityTo)
self.currentZoom = zoomTo self.currentZoom = zoomTo
self.currentOpacity = opacityTo self.currentOpacity = opacityTo
def scale_end_event(self, data, zoomTo, opacityTo):
pass
def get_zoom_level(self): def get_zoom_level(self):
return self.zoomLevel return self.zoomLevel

View File

@ -44,7 +44,7 @@ class InputQueue(gobject.GObject):
self.action_west = None self.action_west = None
self.current_acceleration_step = 0 self.current_acceleration_step = 0
self.stage = clutter.stage_get_default() #self.stage = clutter.stage_get_default()
self.poll_time = None self.poll_time = None
self.release_timeout_id = None self.release_timeout_id = None
self.timeline = None self.timeline = None
@ -179,7 +179,7 @@ class InputQueue(gobject.GObject):
#print "Acceleration finished" #print "Acceleration finished"
return False return False
def decelerate(self, actor = None, event = None): def decelerate(self, actor=None, event=None):
#print "Key released: %s" % str(gtk.gdk.keyval_name(event.keyval)) #print "Key released: %s" % str(gtk.gdk.keyval_name(event.keyval))
if self.current_acceleration_step > 0: if self.current_acceleration_step > 0:
self.current_acceleration_step -= 1 self.current_acceleration_step -= 1

View File

@ -291,10 +291,12 @@ class ThemeMgr:
colour = clutter.Color(r, g, b) colour = clutter.Color(r, g, b)
return colour return colour
def get_texture(self, name, parent, texture = None, element = None): def get_texture(self, name, parent=None, texture=None, element=None):
texture_src = None texture_src = None
if texture is None: if texture is None:
texture = clutter.Texture() texture = clutter.Texture()
if parent is None:
parent = self.stage
#Element can be supplied but if not, we search through everything #Element can be supplied but if not, we search through everything
if element is None: element = self.search_docs("texture", name).childNodes if element is None: element = self.search_docs("texture", name).childNodes