00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 from ost import gui
00022 from ost import gfx
00023 from ost import info
00024 from PyQt4 import QtCore, QtGui
00025
00026
00027 class ImmutableGradientInfoHandler():
00028 def __init__(self, fileName):
00029
00030 self.FILE_NAME = fileName
00031 self.GRADIENTS_GROUP_NAME = "Gradients"
00032 self.GRADIENT_GROUP_NAME = "Gradient"
00033 self.NAME_ATTRIBUTE_NAME = "Name"
00034
00035 self.handle_ = info.LoadOrCreateInfo(self.FILE_NAME)
00036
00037 self.root_ = self.handle_.Root()
00038
00039 try:
00040 self.gradients_ = self.root_.GetGroup(self.GRADIENTS_GROUP_NAME)
00041 except UserWarning:
00042 self.gradients_ = self.root_.CreateGroup(self.GRADIENTS_GROUP_NAME)
00043
00044
00045 def GetGfxGradient(self, name):
00046 group = self.gradients_.GetGroup(name)
00047 gfx_gradient = gfx.Gradient.GradientFromInfo(group)
00048 return gfx_gradient
00049
00050 def GetQGradient(self, name):
00051 gfx_gradient = self.GetGfxGradient(name)
00052 return ImmutableGradientInfoHandler.ConvertToQGradient(gfx_gradient)
00053
00054 def GetQGradients(self):
00055 group_list = self.gradients_.GetGroups(self.GRADIENT_GROUP_NAME)
00056 q_gradients = dict()
00057
00058 for group in group_list:
00059 if group.HasAttribute(self.NAME_ATTRIBUTE_NAME):
00060 gfx_gradient = gfx.Gradient.GradientFromInfo(group)
00061 q_gradients[group.GetAttribute(self.NAME_ATTRIBUTE_NAME)] = (ImmutableGradientInfoHandler.ConvertToQGradient(gfx_gradient))
00062
00063 return q_gradients
00064
00065 @staticmethod
00066 def ConvertToQGradient(gfx_gradient):
00067 stops = gfx_gradient.GetStops()
00068 qgrad = QtGui.QLinearGradient()
00069 for stop in stops:
00070 color = stop.GetColor()
00071 qcolor = QtGui.QColor(color.Red()*255,
00072 color.Green()*255,
00073 color.Blue()*255,
00074 color.Alpha()*255)
00075 qgrad.setColorAt(stop.GetRel(), qcolor)
00076 return qgrad
00077
00078 @staticmethod
00079 def ConvertToGfxGradient(gradient):
00080 gfx_gradient = gfx.Gradient()
00081 for s in gradient.stops():
00082 rel=s[0]
00083 color=s[1]
00084 gfx_gradient.SetColorAt(s[0], gfx.Color(s[1].redF(), s[1].greenF(), s[1].blueF()));
00085 return gfx_gradient;