Exemplo n.º 1
0
class ErasingPanel:  # copied for ideas for the morph panel
    def __init__(self, target, erase_radius=128):
        self.busy = True
        self.erase_radius = erase_radius
        self.target = weakref.ref(target)
        self.erase_rad_edit = None
        self.widget = None
        self.busy = False

    def set_erase_radius(self, erase_rad_edit):
        self.busy = True
        self.erase_radius = erase_rad_edit
        if self.erase_rad_edit != None:
            self.erase_rad_edit.setValue(erase_rad_edit)
        self.busy = False

    def get_widget(self):
        if self.widget == None:
            from PyQt4 import QtCore, QtGui, Qt
            self.widget = QtGui.QWidget()
            vbl = QtGui.QVBoxLayout(self.widget)
            vbl.setMargin(0)
            vbl.setSpacing(6)
            vbl.setObjectName("vbl")

            hbl = QtGui.QHBoxLayout()
            hbl.addWidget(QtGui.QLabel("Erase Radius:"))
            from valslider import ValSlider
            self.erase_rad_edit = ValSlider(None, (0.0, 1000.0), "")
            self.erase_rad_edit.setValue(int(self.erase_radius))
            self.erase_rad_edit.setEnabled(True)
            hbl.addWidget(self.erase_rad_edit)

            self.unerase = QtGui.QCheckBox("Unerase")
            self.unerase.setChecked(False)

            vbl.addLayout(hbl)
            vbl.addWidget(self.unerase)
            QtCore.QObject.connect(self.erase_rad_edit,
                                   QtCore.SIGNAL("sliderReleased"),
                                   self.new_erase_radius)
            QtCore.QObject.connect(self.unerase,
                                   QtCore.SIGNAL("clicked(bool)"),
                                   self.unerase_checked)

        return self.widget

    def new_erase_radius(self, erase_rad_edit):
        if self.busy: return
        self.target().set_erase_radius(erase_rad_edit)

    def unerase_checked(self, val):
        if self.busy: return
        self.target().toggle_unerase(val)
Exemplo n.º 2
0
class ErasingPanel: # copied for ideas for the morph panel

	def __init__(self,target,erase_radius=128):
		self.busy = True
		self.erase_radius = erase_radius
		self.target = weakref.ref(target)
		self.erase_rad_edit = None
		self.widget = None
		self.busy = False

	def set_erase_radius(self, erase_rad_edit):
		self.busy=True
		self.erase_radius = erase_rad_edit
		if self.erase_rad_edit != None: self.erase_rad_edit.setValue(erase_rad_edit)
		self.busy=False

	def get_widget(self):
		if self.widget == None:
			from PyQt4 import QtCore, QtGui, Qt
			self.widget = QtGui.QWidget()
			vbl = QtGui.QVBoxLayout(self.widget)
			vbl.setMargin(0)
			vbl.setSpacing(6)
			vbl.setObjectName("vbl")

			hbl = QtGui.QHBoxLayout()
			hbl.addWidget(QtGui.QLabel("Erase Radius:"))
			from valslider import ValSlider
			self.erase_rad_edit = ValSlider(None,(0.0,1000.0),"")
			self.erase_rad_edit.setValue(int(self.erase_radius))
			self.erase_rad_edit.setEnabled(True)
			hbl.addWidget(self.erase_rad_edit)

			self.unerase = QtGui.QCheckBox("Unerase")
			self.unerase.setChecked(False)

			vbl.addLayout(hbl)
			vbl.addWidget(self.unerase)
			QtCore.QObject.connect(self.erase_rad_edit,QtCore.SIGNAL("sliderReleased"),self.new_erase_radius)
			QtCore.QObject.connect(self.unerase,QtCore.SIGNAL("clicked(bool)"),self.unerase_checked)

		return self.widget

	def new_erase_radius(self, erase_rad_edit):
		if self.busy: return
		self.target().set_erase_radius(erase_rad_edit)

	def unerase_checked(self,val):
		if self.busy: return
		self.target().toggle_unerase(val)
Exemplo n.º 3
0
class EMFontInspector(QtGui.QWidget, EMLightsInspectorBase):
	def __init__(self,target) :
		QtGui.QWidget.__init__(self,None)
		EMLightsInspectorBase.__init__(self)
		self.target=weakref.ref(target)
		self.transform_panel = EMTransformPanel(target,self)
		self.transform_vbl = None # This will eventually be a vertical box layout for the transform panel
		self.init_fonts()

		self.vbl = QtGui.QVBoxLayout(self)
		self.vbl.setMargin(0)
		self.vbl.setSpacing(6)
		self.vbl.setObjectName("vbl")

		self.hbl = QtGui.QHBoxLayout()
		self.hbl.setMargin(0)
		self.hbl.setSpacing(6)
		self.hbl.setObjectName("hbl")
		self.vbl.addLayout(self.hbl)

		self.vbl2 = QtGui.QVBoxLayout()
		self.vbl2.setMargin(0)
		self.vbl2.setSpacing(6)
		self.vbl2.setObjectName("vbl2")
		self.hbl.addLayout(self.vbl2)

		self.wiretog = QtGui.QPushButton("Wire")
		self.wiretog.setCheckable(1)
		self.vbl2.addWidget(self.wiretog)

		self.lighttog = QtGui.QPushButton("Light")
		self.lighttog.setCheckable(1)
		self.vbl2.addWidget(self.lighttog)

		self.tabwidget2 = QtGui.QTabWidget()
		self.maintab = None
		self.tabwidget2.addTab(self.get_main_tab(), "Main")
		#self.tabwidget2.addTab(self.get_GL_tab(),"GL")
		self.tabwidget2.addTab(self.get_format_tab(),"Formatting")
		self.tabwidget2.addTab(self.get_light_tab(), "Lights")
		self.vbl.addWidget(self.tabwidget2)
		self.n3_showing = False

		QtCore.QObject.connect(self.cbb, QtCore.SIGNAL("currentIndexChanged(QString)"), target.setColor)
		QtCore.QObject.connect(self.wiretog, QtCore.SIGNAL("toggled(bool)"), target.toggle_wire)
		QtCore.QObject.connect(self.lighttog, QtCore.SIGNAL("toggled(bool)"), target.toggle_light)
		QtCore.QObject.connect(self.glcontrast, QtCore.SIGNAL("valueChanged"), target.set_GL_contrast)
		QtCore.QObject.connect(self.glbrightness, QtCore.SIGNAL("valueChanged"), target.set_GL_brightness)
		QtCore.QObject.connect(self.combo, QtCore.SIGNAL("currentIndexChanged (const QString&)"), self.on_combo_change)
		QtCore.QObject.connect(self.text, QtCore.SIGNAL("textChanged(const QString&)"), self.on_text_change)
		QtCore.QObject.connect(self.lspacing, QtCore.SIGNAL("valueChanged"), self.set_GL_lspacing)
		QtCore.QObject.connect(self.length, QtCore.SIGNAL("valueChanged"), self.set_GL_length)
		QtCore.QObject.connect(self.tsize, QtCore.SIGNAL("valueChanged(int)"), self.set_GL_tsize)
		QtCore.QObject.connect(self.Dfont, QtCore.SIGNAL("currentIndexChanged (const QString&)"), self.on_Dfont_change)
		QtCore.QObject.connect(self.bgR, QtCore.SIGNAL("valueChanged"), self.set_GL_bgR)
		QtCore.QObject.connect(self.bgG, QtCore.SIGNAL("valueChanged"), self.set_GL_bgG)
		QtCore.QObject.connect(self.bgB, QtCore.SIGNAL("valueChanged"), self.set_GL_bgB)
		QtCore.QObject.connect(self.bg_a, QtCore.SIGNAL("valueChanged"), self.set_GL_bg_a)
	
	def get_transform_layout(self):
		return self.transform_vbl
		
	def set_GL_bgR(self,bgR):
		self.target().set_bg_r(bgR)
		self.target().updateGL()

	def set_GL_bgG(self,bgG):
		self.target().set_bg_g(bgG)
		self.target().updateGL()

	def set_GL_bgB(self,bgB):
		self.target().set_bg_b(bgB)
		self.target().updateGL()

	def set_GL_bg_a(self,bg_a):
		self.target().set_bg_a(bg_a)
		self.target().updateGL()

	def init_fonts(self):
		self.d = {}
		self.l = []
		platform = get_platform()
		if platform == "Linux":
			f_dir = "/usr/share/fonts/"
		elif platform == "Windows" or platform == "win32":
			f_dir = ":/windows/fonts/"
		elif platform in ["Apple", "Darwin"]:
			f_dir = "/Library/Fonts/"
		else:
			raise RuntimeError("Platform %s is not supported" %platform )
		
		for root, dirs, files in os.walk(f_dir):
			for name in files:
				if name.find("ttf")!=-1:
					filename = os.path.join(root, name)
					self.d[name] = filename
					self.l.extend([name])
		return self.l, self.d

	def on_Dfont_change(self,Dfont):
		self.target().font_renderer.set_font_file_name(self.d[str(Dfont)])
		self.target().updateGL()

	def set_GL_lspacing(self,lspacing):
		self.target().set_lspacing(lspacing)
		#THE FOLLOWING IF STATEMENT DOES IS NOT EFFECTIVE
		if len(self.target().render_string.split("\n")) != 1:
			self.lspacing.setEnabled(True)
		else:
			self.lspacing.setEnabled(False)
		self.target().updateGL()

	def set_GL_length(self,length):
		self.target().font_renderer.set_depth(int(length))	
		self.target().updateGL()

	def set_GL_tsize(self,tsize):
		self.target().font_renderer.set_face_size(tsize)
		self.target().updateGL()

	def on_text_change(self,text):
		try:
			evalt=str(eval(str(text)))
			self.target().set_render_string(evalt)
		except:
			self.target().set_render_string(str(text))
			
		if len(self.target().render_string.split("\n")) != 1:
			self.lspacing.setEnabled(True)
		else:
			self.lspacing.setEnabled(False)
		self.target().updateGL()

	def on_combo_change(self,mode):
		d = {}
		d["Extrude"] = FTGLFontMode.EXTRUDE
		d["Pixmap"] = FTGLFontMode.PIXMAP
		d["Bitmap"] = FTGLFontMode.BITMAP
		d["Polygon"] = FTGLFontMode.POLYGON
		d["Outline"] = FTGLFontMode.OUTLINE
		d["Texture"] = FTGLFontMode.TEXTURE
		self.target().font_renderer.set_font_mode(d[str(mode)])
		if mode == "Extrude":
			self.length.setEnabled(True)
		else:
			self.length.setEnabled(False)
		self.target().updateGL()

	def update_rotations(self,t3d):
		self.transform_panel.update_rotations(t3d)

	def set_scale(self,val):
		self.transform_panel.set_scale(val)

	def set_xy_trans(self, x, y):
		self.transform_panel.set_xy_trans(x,y)

	def set_xyz_trans(self,x,y,z):
		self.transform_panel.set_xyz_trans(x,y,z)	

	def get_GL_tab(self):
		self.gltab = QtGui.QWidget()
		gltab = self.gltab

		gltab.vbl = QtGui.QVBoxLayout(self.gltab)
		gltab.vbl.setMargin(0)
		gltab.vbl.setSpacing(6)
		gltab.vbl.setObjectName("Main")

		self.glcontrast = ValSlider(gltab,(1.0,5.0),"GLShd:")
		self.glcontrast.setObjectName("GLShade")
		self.glcontrast.setValue(1.0)
		gltab.vbl.addWidget(self.glcontrast)

		self.glbrightness = ValSlider(gltab,(-1.0,0.0),"GLBst:")
		self.glbrightness.setObjectName("GLBoost")
		self.glbrightness.setValue(0.1)
		self.glbrightness.setValue(0.0)
		gltab.vbl.addWidget(self.glbrightness)

		return gltab

	def get_main_tab(self):
		if ( self.maintab == None ):
			self.maintab = QtGui.QWidget()
			maintab = self.maintab
			maintab.vbl = QtGui.QVBoxLayout(self.maintab)
			maintab.vbl.setMargin(0)
			maintab.vbl.setSpacing(6)
			maintab.vbl.setObjectName("Main")
			
			self.transform_vbl = QtGui.QVBoxLayout()
			self.transform_panel.addWidgets(self.transform_vbl)
			maintab.vbl.addLayout(self.transform_vbl)
			self.glwidget = QtGui.QTabWidget()
			self.glwidget.addTab(self.get_GL_tab(),"GL")
			maintab.vbl.addWidget(self.glwidget)

		return maintab

	def get_format_tab(self):
		self.formattab = QtGui.QWidget()
		formattab = self.formattab
		formattab.vbl = QtGui.QVBoxLayout(self.formattab)
		formattab.vbl.setMargin(0)
		formattab.vbl.setSpacing(6)
		formattab.vbl.setObjectName("Format")

		self.hbl1 = QtGui.QHBoxLayout()
		self.text = QtGui.QLineEdit()
		self.text.setText("hello world")
		text_label = QtGui.QLabel("Enter Text:",self)
		text_label.setToolTip("Enters quotes to evaluate new line e.g. \"hello\\nworld\". Evaluates numerical expressions e.g. 9*9 (with out quotes)")
		self.hbl1.addWidget(text_label)
		self.hbl1.addWidget(self.text)
		formattab.vbl.addLayout(self.hbl1)

		self.hbl1 = QtGui.QHBoxLayout()
		self.Dfont = QtGui.QComboBox()
		for k in self.l: self.Dfont.addItem(k)
		self.hbl1.addWidget(QtGui.QLabel("Fonts:",self))
		self.hbl1.addWidget(self.Dfont)
		formattab.vbl.addLayout(self.hbl1)

		self.hbl1 = QtGui.QHBoxLayout()
		self.tsize = QtGui.QSpinBox()
		self.tsize.setRange(0,500)
		self.tsize.setValue(32)
		self.hbl1.addWidget(QtGui.QLabel("Size:",self),Qt.AlignLeft)
		self.hbl1.addWidget(self.tsize,Qt.AlignRight)
		self.combo = QtGui.QComboBox()
		self.items = ["Extrude","Pixmap","Bitmap","Polygon","Outline","Texture"]
		for k in self.items: self.combo.addItem(k)
		self.hbl1.addWidget(QtGui.QLabel("Style:",self),Qt.AlignLeft)
		self.hbl1.addWidget(self.combo,Qt.AlignRight)
		formattab.vbl.addLayout(self.hbl1)

		self.hbl1 = QtGui.QHBoxLayout()
		self.lspacing = ValSlider(self,(-100.0,100.0),"Line Spacing:")
		self.lspacing.setObjectName("Length")
		self.lspacing.setValue(75.0)
		self.lspacing.setEnabled(False)
		self.hbl1.addWidget(self.lspacing)
		formattab.vbl.addLayout(self.hbl1)

		self.hbl1 = QtGui.QHBoxLayout()
		self.length = ValSlider(self,(0.0,500.0),"Length:")
		self.length.setObjectName("Length")
		self.length.setValue(75.0)
		self.hbl1.addWidget(self.length)
		formattab.vbl.addLayout(self.hbl1)

		self.hbl1 = QtGui.QHBoxLayout()
		self.cbb = QtGui.QComboBox()
		self.hbl1.addWidget(QtGui.QLabel("Material:",self))
		self.hbl1.addWidget(self.cbb)
		formattab.vbl.addLayout(self.hbl1)

		self.hbl1 = QtGui.QHBoxLayout()
		self.bgtabwidget = QtGui.QTabWidget()
		self.maintab = None
		self.bgtabwidget.addTab(self.get_bgRGB_tab(), "BG RGB")
		self.hbl1.addWidget(self.bgtabwidget)
		self.n3_showing = False
		formattab.vbl.addLayout(self.hbl1)

		return formattab

	def get_bgRGB_tab(self):
		self.bgRGBtab = QtGui.QWidget()
		bgRGBtab = self.bgRGBtab
		bgRGBtab.vbl2 = QtGui.QVBoxLayout(self.bgRGBtab)
		bgRGBtab.vbl2.setMargin(0)
		bgRGBtab.vbl2.setSpacing(6)
		bgRGBtab.vbl2.setObjectName("BG RGB")

		self.hbl2 = QtGui.QHBoxLayout()
		self.bgR = ValSlider(self,(0,1),"R:")
		self.bgR.setObjectName("R")
		self.bgR.setValue(0.5)
		self.hbl2.addWidget(self.bgR)
		bgRGBtab.vbl2.addLayout(self.hbl2)

		self.hbl2 = QtGui.QHBoxLayout()
		self.bgG = ValSlider(self,(0,1),"G:")
		self.bgG.setObjectName("G")
		self.bgG.setValue(0.5)
		self.hbl2.addWidget(self.bgG)
		bgRGBtab.vbl2.addLayout(self.hbl2)

		self.hbl2 = QtGui.QHBoxLayout()
		self.bgB = ValSlider(self,(0,1),"B:")
		self.bgB.setObjectName("B")
		self.bgB.setValue(0.5)
		self.hbl2.addWidget(self.bgB)
		bgRGBtab.vbl2.addLayout(self.hbl2)		

		self.hbl2 = QtGui.QHBoxLayout()
		self.bg_a = ValSlider(self,(0,1),"Alpha:")
		self.bg_a.setObjectName("Alpha")
		self.bg_a.setValue(1.0)
		self.hbl2.addWidget(self.bg_a)
		bgRGBtab.vbl2.addLayout(self.hbl2)

		return bgRGBtab

#	def slider_rotate(self):
#		self.target.load_rotation(self.get_current_rotation())

#	def set_xy_trans(self, x, y):
#		self.x_trans.setValue(x)
#		self.y_trans.setValue(y)

#	def set_translate_scale(self, xscale,yscale,zscale):
#		self.x_trans.setSingleStep(xscale)
#		self.y_trans.setSingleStep(yscale)
#		self.z_trans.setSingleStep(zscale)

#	def update_rotations(self,t3d):
#		rot = t3d.get_rotation(self.src_map[str(self.src.itemText(self.src.currentIndex()))])
#		
#		convention = self.src.currentText()
#		if ( self.src_map[str(convention)] == EULER_SPIN ):
#			self.n3.setValue(rot[self.n3.getLabel()],True)
#		
#		self.az.setValue(rot[self.az.getLabel()],True)
#		self.alt.setValue(rot[self.alt.getLabel()],True)
#		self.phi.setValue(rot[self.phi.getLabel()],True)

#	def slider_rotate(self):
#		self.target.load_rotation(self.get_current_rotation())

#	def get_current_rotation(self):
#		convention = self.src.currentText()
#		rot = {}
#		if ( self.current_src == EULER_SPIN ):
#			rot[self.az.getLabel()] = self.az.getValue()
#			
#			n1 = self.alt.getValue()
#			n2 = self.phi.getValue()
#			n3 = self.n3.getValue()
#			
#			norm = sqrt(n1*n1 + n2*n2 + n3*n3)
#			
#			n1 /= norm
#			n2 /= norm
#			n3 /= norm
#			
#			rot[self.alt.getLabel()] = n1
#			rot[self.phi.getLabel()] = n2
#			rot[self.n3.getLabel()] = n3
#
#		else:
#			rot[self.az.getLabel()] = self.az.getValue()
#			rot[self.alt.getLabel()] = self.alt.getValue()
#			rot[self.phi.getLabel()] = self.phi.getValue()
#		
#		return Transform(self.current_src, rot)

	def setColors(self,colors,current_color):
		a = 0
		for i in colors:
			self.cbb.addItem(i)
			if ( i == current_color):
				self.cbb.setCurrentIndex(a)
			a += 1
Exemplo n.º 4
0
class EMFontInspector(QtGui.QWidget, EMLightsInspectorBase):
    def __init__(self, target):
        QtGui.QWidget.__init__(self, None)
        EMLightsInspectorBase.__init__(self)
        self.target = weakref.ref(target)
        self.transform_panel = EMTransformPanel(target, self)
        self.transform_vbl = None  # This will eventually be a vertical box layout for the transform panel
        self.init_fonts()

        self.vbl = QtGui.QVBoxLayout(self)
        self.vbl.setMargin(0)
        self.vbl.setSpacing(6)
        self.vbl.setObjectName("vbl")

        self.hbl = QtGui.QHBoxLayout()
        self.hbl.setMargin(0)
        self.hbl.setSpacing(6)
        self.hbl.setObjectName("hbl")
        self.vbl.addLayout(self.hbl)

        self.vbl2 = QtGui.QVBoxLayout()
        self.vbl2.setMargin(0)
        self.vbl2.setSpacing(6)
        self.vbl2.setObjectName("vbl2")
        self.hbl.addLayout(self.vbl2)

        self.wiretog = QtGui.QPushButton("Wire")
        self.wiretog.setCheckable(1)
        self.vbl2.addWidget(self.wiretog)

        self.lighttog = QtGui.QPushButton("Light")
        self.lighttog.setCheckable(1)
        self.vbl2.addWidget(self.lighttog)

        self.tabwidget2 = QtGui.QTabWidget()
        self.maintab = None
        self.tabwidget2.addTab(self.get_main_tab(), "Main")
        #self.tabwidget2.addTab(self.get_GL_tab(),"GL")
        self.tabwidget2.addTab(self.get_format_tab(), "Formatting")
        self.tabwidget2.addTab(self.get_light_tab(), "Lights")
        self.vbl.addWidget(self.tabwidget2)
        self.n3_showing = False

        QtCore.QObject.connect(self.cbb,
                               QtCore.SIGNAL("currentIndexChanged(QString)"),
                               target.setColor)
        QtCore.QObject.connect(self.wiretog, QtCore.SIGNAL("toggled(bool)"),
                               target.toggle_wire)
        QtCore.QObject.connect(self.lighttog, QtCore.SIGNAL("toggled(bool)"),
                               target.toggle_light)
        QtCore.QObject.connect(self.glcontrast, QtCore.SIGNAL("valueChanged"),
                               target.set_GL_contrast)
        QtCore.QObject.connect(self.glbrightness,
                               QtCore.SIGNAL("valueChanged"),
                               target.set_GL_brightness)
        QtCore.QObject.connect(
            self.combo, QtCore.SIGNAL("currentIndexChanged (const QString&)"),
            self.on_combo_change)
        QtCore.QObject.connect(self.text,
                               QtCore.SIGNAL("textChanged(const QString&)"),
                               self.on_text_change)
        QtCore.QObject.connect(self.lspacing, QtCore.SIGNAL("valueChanged"),
                               self.set_GL_lspacing)
        QtCore.QObject.connect(self.length, QtCore.SIGNAL("valueChanged"),
                               self.set_GL_length)
        QtCore.QObject.connect(self.tsize, QtCore.SIGNAL("valueChanged(int)"),
                               self.set_GL_tsize)
        QtCore.QObject.connect(
            self.Dfont, QtCore.SIGNAL("currentIndexChanged (const QString&)"),
            self.on_Dfont_change)
        QtCore.QObject.connect(self.bgR, QtCore.SIGNAL("valueChanged"),
                               self.set_GL_bgR)
        QtCore.QObject.connect(self.bgG, QtCore.SIGNAL("valueChanged"),
                               self.set_GL_bgG)
        QtCore.QObject.connect(self.bgB, QtCore.SIGNAL("valueChanged"),
                               self.set_GL_bgB)
        QtCore.QObject.connect(self.bg_a, QtCore.SIGNAL("valueChanged"),
                               self.set_GL_bg_a)

    def get_transform_layout(self):
        return self.transform_vbl

    def set_GL_bgR(self, bgR):
        self.target().set_bg_r(bgR)
        self.target().updateGL()

    def set_GL_bgG(self, bgG):
        self.target().set_bg_g(bgG)
        self.target().updateGL()

    def set_GL_bgB(self, bgB):
        self.target().set_bg_b(bgB)
        self.target().updateGL()

    def set_GL_bg_a(self, bg_a):
        self.target().set_bg_a(bg_a)
        self.target().updateGL()

    def init_fonts(self):
        self.d = {}
        self.l = []
        platform = get_platform()
        if platform == "Linux":
            f_dir = "/usr/share/fonts/"
        elif platform == "Windows" or platform == "win32":
            f_dir = ":/windows/fonts/"
        elif platform in ["Apple", "Darwin"]:
            f_dir = "/Library/Fonts/"
        else:
            raise RuntimeError("Platform %s is not supported" % platform)

        for root, dirs, files in os.walk(f_dir):
            for name in files:
                if name.find("ttf") != -1:
                    filename = os.path.join(root, name)
                    self.d[name] = filename
                    self.l.extend([name])
        return self.l, self.d

    def on_Dfont_change(self, Dfont):
        self.target().font_renderer.set_font_file_name(self.d[str(Dfont)])
        self.target().updateGL()

    def set_GL_lspacing(self, lspacing):
        self.target().set_lspacing(lspacing)
        #THE FOLLOWING IF STATEMENT DOES IS NOT EFFECTIVE
        if len(self.target().render_string.split("\n")) != 1:
            self.lspacing.setEnabled(True)
        else:
            self.lspacing.setEnabled(False)
        self.target().updateGL()

    def set_GL_length(self, length):
        self.target().font_renderer.set_depth(int(length))
        self.target().updateGL()

    def set_GL_tsize(self, tsize):
        self.target().font_renderer.set_face_size(tsize)
        self.target().updateGL()

    def on_text_change(self, text):
        try:
            evalt = str(eval(str(text)))
            self.target().set_render_string(evalt)
        except:
            self.target().set_render_string(str(text))

        if len(self.target().render_string.split("\n")) != 1:
            self.lspacing.setEnabled(True)
        else:
            self.lspacing.setEnabled(False)
        self.target().updateGL()

    def on_combo_change(self, mode):
        d = {}
        d["Extrude"] = FTGLFontMode.EXTRUDE
        d["Pixmap"] = FTGLFontMode.PIXMAP
        d["Bitmap"] = FTGLFontMode.BITMAP
        d["Polygon"] = FTGLFontMode.POLYGON
        d["Outline"] = FTGLFontMode.OUTLINE
        d["Texture"] = FTGLFontMode.TEXTURE
        self.target().font_renderer.set_font_mode(d[str(mode)])
        if mode == "Extrude":
            self.length.setEnabled(True)
        else:
            self.length.setEnabled(False)
        self.target().updateGL()

    def update_rotations(self, t3d):
        self.transform_panel.update_rotations(t3d)

    def set_scale(self, val):
        self.transform_panel.set_scale(val)

    def set_xy_trans(self, x, y):
        self.transform_panel.set_xy_trans(x, y)

    def set_xyz_trans(self, x, y, z):
        self.transform_panel.set_xyz_trans(x, y, z)

    def get_GL_tab(self):
        self.gltab = QtGui.QWidget()
        gltab = self.gltab

        gltab.vbl = QtGui.QVBoxLayout(self.gltab)
        gltab.vbl.setMargin(0)
        gltab.vbl.setSpacing(6)
        gltab.vbl.setObjectName("Main")

        self.glcontrast = ValSlider(gltab, (1.0, 5.0), "GLShd:")
        self.glcontrast.setObjectName("GLShade")
        self.glcontrast.setValue(1.0)
        gltab.vbl.addWidget(self.glcontrast)

        self.glbrightness = ValSlider(gltab, (-1.0, 0.0), "GLBst:")
        self.glbrightness.setObjectName("GLBoost")
        self.glbrightness.setValue(0.1)
        self.glbrightness.setValue(0.0)
        gltab.vbl.addWidget(self.glbrightness)

        return gltab

    def get_main_tab(self):
        if (self.maintab == None):
            self.maintab = QtGui.QWidget()
            maintab = self.maintab
            maintab.vbl = QtGui.QVBoxLayout(self.maintab)
            maintab.vbl.setMargin(0)
            maintab.vbl.setSpacing(6)
            maintab.vbl.setObjectName("Main")

            self.transform_vbl = QtGui.QVBoxLayout()
            self.transform_panel.addWidgets(self.transform_vbl)
            maintab.vbl.addLayout(self.transform_vbl)
            self.glwidget = QtGui.QTabWidget()
            self.glwidget.addTab(self.get_GL_tab(), "GL")
            maintab.vbl.addWidget(self.glwidget)

        return maintab

    def get_format_tab(self):
        self.formattab = QtGui.QWidget()
        formattab = self.formattab
        formattab.vbl = QtGui.QVBoxLayout(self.formattab)
        formattab.vbl.setMargin(0)
        formattab.vbl.setSpacing(6)
        formattab.vbl.setObjectName("Format")

        self.hbl1 = QtGui.QHBoxLayout()
        self.text = QtGui.QLineEdit()
        self.text.setText("hello world")
        text_label = QtGui.QLabel("Enter Text:", self)
        text_label.setToolTip(
            "Enters quotes to evaluate new line e.g. \"hello\\nworld\". Evaluates numerical expressions e.g. 9*9 (with out quotes)"
        )
        self.hbl1.addWidget(text_label)
        self.hbl1.addWidget(self.text)
        formattab.vbl.addLayout(self.hbl1)

        self.hbl1 = QtGui.QHBoxLayout()
        self.Dfont = QtGui.QComboBox()
        for k in self.l:
            self.Dfont.addItem(k)
        self.hbl1.addWidget(QtGui.QLabel("Fonts:", self))
        self.hbl1.addWidget(self.Dfont)
        formattab.vbl.addLayout(self.hbl1)

        self.hbl1 = QtGui.QHBoxLayout()
        self.tsize = QtGui.QSpinBox()
        self.tsize.setRange(0, 500)
        self.tsize.setValue(32)
        self.hbl1.addWidget(QtGui.QLabel("Size:", self), Qt.AlignLeft)
        self.hbl1.addWidget(self.tsize, Qt.AlignRight)
        self.combo = QtGui.QComboBox()
        self.items = [
            "Extrude", "Pixmap", "Bitmap", "Polygon", "Outline", "Texture"
        ]
        for k in self.items:
            self.combo.addItem(k)
        self.hbl1.addWidget(QtGui.QLabel("Style:", self), Qt.AlignLeft)
        self.hbl1.addWidget(self.combo, Qt.AlignRight)
        formattab.vbl.addLayout(self.hbl1)

        self.hbl1 = QtGui.QHBoxLayout()
        self.lspacing = ValSlider(self, (-100.0, 100.0), "Line Spacing:")
        self.lspacing.setObjectName("Length")
        self.lspacing.setValue(75.0)
        self.lspacing.setEnabled(False)
        self.hbl1.addWidget(self.lspacing)
        formattab.vbl.addLayout(self.hbl1)

        self.hbl1 = QtGui.QHBoxLayout()
        self.length = ValSlider(self, (0.0, 500.0), "Length:")
        self.length.setObjectName("Length")
        self.length.setValue(75.0)
        self.hbl1.addWidget(self.length)
        formattab.vbl.addLayout(self.hbl1)

        self.hbl1 = QtGui.QHBoxLayout()
        self.cbb = QtGui.QComboBox()
        self.hbl1.addWidget(QtGui.QLabel("Material:", self))
        self.hbl1.addWidget(self.cbb)
        formattab.vbl.addLayout(self.hbl1)

        self.hbl1 = QtGui.QHBoxLayout()
        self.bgtabwidget = QtGui.QTabWidget()
        self.maintab = None
        self.bgtabwidget.addTab(self.get_bgRGB_tab(), "BG RGB")
        self.hbl1.addWidget(self.bgtabwidget)
        self.n3_showing = False
        formattab.vbl.addLayout(self.hbl1)

        return formattab

    def get_bgRGB_tab(self):
        self.bgRGBtab = QtGui.QWidget()
        bgRGBtab = self.bgRGBtab
        bgRGBtab.vbl2 = QtGui.QVBoxLayout(self.bgRGBtab)
        bgRGBtab.vbl2.setMargin(0)
        bgRGBtab.vbl2.setSpacing(6)
        bgRGBtab.vbl2.setObjectName("BG RGB")

        self.hbl2 = QtGui.QHBoxLayout()
        self.bgR = ValSlider(self, (0, 1), "R:")
        self.bgR.setObjectName("R")
        self.bgR.setValue(0.5)
        self.hbl2.addWidget(self.bgR)
        bgRGBtab.vbl2.addLayout(self.hbl2)

        self.hbl2 = QtGui.QHBoxLayout()
        self.bgG = ValSlider(self, (0, 1), "G:")
        self.bgG.setObjectName("G")
        self.bgG.setValue(0.5)
        self.hbl2.addWidget(self.bgG)
        bgRGBtab.vbl2.addLayout(self.hbl2)

        self.hbl2 = QtGui.QHBoxLayout()
        self.bgB = ValSlider(self, (0, 1), "B:")
        self.bgB.setObjectName("B")
        self.bgB.setValue(0.5)
        self.hbl2.addWidget(self.bgB)
        bgRGBtab.vbl2.addLayout(self.hbl2)

        self.hbl2 = QtGui.QHBoxLayout()
        self.bg_a = ValSlider(self, (0, 1), "Alpha:")
        self.bg_a.setObjectName("Alpha")
        self.bg_a.setValue(1.0)
        self.hbl2.addWidget(self.bg_a)
        bgRGBtab.vbl2.addLayout(self.hbl2)

        return bgRGBtab

#	def slider_rotate(self):
#		self.target.load_rotation(self.get_current_rotation())

#	def set_xy_trans(self, x, y):
#		self.x_trans.setValue(x)
#		self.y_trans.setValue(y)

#	def set_translate_scale(self, xscale,yscale,zscale):
#		self.x_trans.setSingleStep(xscale)
#		self.y_trans.setSingleStep(yscale)
#		self.z_trans.setSingleStep(zscale)

#	def update_rotations(self,t3d):
#		rot = t3d.get_rotation(self.src_map[str(self.src.itemText(self.src.currentIndex()))])
#
#		convention = self.src.currentText()
#		if ( self.src_map[str(convention)] == EULER_SPIN ):
#			self.n3.setValue(rot[self.n3.getLabel()],True)
#
#		self.az.setValue(rot[self.az.getLabel()],True)
#		self.alt.setValue(rot[self.alt.getLabel()],True)
#		self.phi.setValue(rot[self.phi.getLabel()],True)

#	def slider_rotate(self):
#		self.target.load_rotation(self.get_current_rotation())

#	def get_current_rotation(self):
#		convention = self.src.currentText()
#		rot = {}
#		if ( self.current_src == EULER_SPIN ):
#			rot[self.az.getLabel()] = self.az.getValue()
#
#			n1 = self.alt.getValue()
#			n2 = self.phi.getValue()
#			n3 = self.n3.getValue()
#
#			norm = sqrt(n1*n1 + n2*n2 + n3*n3)
#
#			n1 /= norm
#			n2 /= norm
#			n3 /= norm
#
#			rot[self.alt.getLabel()] = n1
#			rot[self.phi.getLabel()] = n2
#			rot[self.n3.getLabel()] = n3
#
#		else:
#			rot[self.az.getLabel()] = self.az.getValue()
#			rot[self.alt.getLabel()] = self.alt.getValue()
#			rot[self.phi.getLabel()] = self.phi.getValue()
#
#		return Transform(self.current_src, rot)

    def setColors(self, colors, current_color):
        a = 0
        for i in colors:
            self.cbb.addItem(i)
            if (i == current_color):
                self.cbb.setCurrentIndex(a)
            a += 1