# generated by flconvert
# Don't edit by hand.

from fltk import *

# global object names


class stxcc:

    def make_window(self):
        global window
        global grpLogo
        global tabs
        global grpCat
        global pckCat
        global grpHelp
        global txtHelp
        global grpIcons

        window = Fl_Double_Window(414, 268, 740, 560, """STX Control Centre""")

        grpLogo = Fl_Group(3, 473, 735, 65)
        grpLogo.align(17)
        grpLogo.end()

        tabs = Fl_Tabs(15, 15, 185, 360)

        grpCat = Fl_Group(15, 40, 185, 320, """    Categories    """)

        pckCat = Fl_Pack(20, 50, 175, 300)
        pckCat.labelcolor(7)
        self.show_categories(self.basedir + "items/")   # extra code
        pckCat.end()
        grpCat.box(FL_RFLAT_BOX)
        grpCat.color(96)
        grpCat.label('''    Categories    ''')
        grpCat.selection_color(96)
        grpCat.labelsize(12)
        grpCat.labelcolor(7)
        grpCat.end()

        grpHelp = Fl_Group(15, 40, 185, 320, """    Help    """)

        txtHelp = Fl_Text_Display(20, 50, 175, 300)
        txtHelp.color(96)
        txtHelp.labelcolor(7)
        txtHelp.box(FL_NO_BOX)
        grpHelp.labelcolor(7)
        grpHelp.box(FL_RFLAT_BOX)
        grpHelp.color(96)
        grpHelp.label('''    Help    ''')
        grpHelp.selection_color(96)
        grpHelp.labelsize(12)
        grpHelp.end()
        tabs.selection_color(96)
        tabs.align(0)
        tabs.box(FL_NO_BOX)
        tabs.color(138)
        tabs.end()

        grpIcons = Fl_Group(250, 40, 445, 405)
        grpIcons.align(145)
        grpIcons.labelcolor(7)
        grpIcons.labelfont(1)
        grpIcons.end()
        window.align(0)
        window.color(137)
        window.label('''STX Control Centre''')
        window.end()

        return window

    def __init__(self):
        global sys, os, stat, desktop
        import sys, os, stat, desktop
        from ConfigParser import SafeConfigParser
        
        self.basedir = "/usr/share/stxcc/"
        self.winMain = self.make_window()
        self.imgWelcome = Fl_PNG_Image(self.basedir + "welcome.png")
        grpLogo.image(Fl_PNG_Image(self.basedir + "stxcc.png"))
        grpIcons.image(self.imgWelcome)
        
        self.config = SafeConfigParser()
        self.config.read(self.basedir + "stxcc.theme")
        self.apply_theme()
        
        bufHelp = Fl_Text_Buffer(1000)
        txtHelp.buffer(bufHelp)
        txtHelp.wrap_mode(1, 0)
        self.load_help(self.basedir + "items/help.txt")
        self.show_categories(self.basedir + "items/")
        self.prevButton = None
        self.winMain.show()


    def show_categories(self, dir):
        fileList = os.listdir(dir)
        dirList = []
        self.names = []
        for file in fileList:
        	mode = os.stat(dir + "/" + file)[stat.ST_MODE]
        	if stat.S_ISDIR(mode):
        		dirList.append(file)
        for item in dirList:
        	dirItem = desktop.DirItem(dir + "/" + item, self)
        	self.make_category(dirItem)


    def make_category(self, item):
        try:
        	imageFile = item.get("icon")
        	button = Fl_Button(0, 0, 100, 50, item.get("name"))
        	image = Fl_PNG_Image(imageFile)
        	button.image(image)
        	button.labelcolor(255)
        	button.labelsize(12)
        	button.box(FL_NO_BOX)
        	button.down_box(FL_FLAT_BOX)
        	button.selection_color(fl_rgb_color(0, 66, 163))
        	button.callback(self.select_category, item)
        except: 
        	print "Unable to display control center item. (Malformed .desktop file?)"


    def select_category(self, button, category):
        grpIcons.clear()
        dir = category.get("dirname")
        fileList = os.listdir(dir)
        deskList = []
        dirList = []
        self.names = []
        self.iconX = 250
        self.iconY = 60
        helpFile = None
        
        if dir == self.basedir + "items/":
        	grpIcons.image(self.imgWelcome)
        	grpIcons.label(None)
        	grpIcons.align(FL_ALIGN_TOP|FL_ALIGN_INSIDE)
        	self.load_help(dir + "/help.txt")
        	return
        else:   
        	grpIcons.image(None)
        	grpIcons.align(FL_ALIGN_TOP)
        	grpIcons.label(category.get("name"))
        
        for file in fileList:
        	if file.find(".desktop") == (len(file) - 8) and file.find(".desktop") > 0:
        		deskList.append(file)
        		continue
        	if file == "help.txt":
        		helpFile = file
        		continue
        	mode = os.stat(dir + "/" + file)[stat.ST_MODE]
        	if stat.S_ISDIR(mode):
        		dirList.append(file)
        
        if not dir == "items":
        	dirItem = desktop.DirItem(dir + "/..", self)
        	self.show_item(dirItem)
        
        for item in dirList:
        	dirItem = desktop.DirItem(dir + "/" + item, self)
        	if not dir == "items":
        		print dir
        		self.show_item(dirItem)
        
        for item in deskList:
        	deskItem = desktop.DeskItem(dir + "/" + item)
        	self.show_item(deskItem)
                  
        
        if helpFile:
        	self.load_help(dir + "/help.txt")
        else:
        	self.load_help(None)


    def show_item(self, item):
        try:
        	self.names.append(item.get("name"))
        	currentName = len(self.names) - 1
        	image = Fl_PNG_Image(item.get("icon"))
        	button = Fl_Button(self.iconX, self.iconY, 150, 64, self.names[currentName])
        	self.iconX += 155
        	if self.iconX > 645:
        		self.iconX = 250
        		self.iconY += 70
        	button.image(image)
        	button.box(FL_NO_BOX)
        	button.down_box(FL_FLAT_BOX)
        	button.labelcolor(self.get_config("button", "text", 0))
        	button.labelsize(self.get_config("button", "size", 12))
        	button.selection_color(self.get_config("button", "select", 255))
        	button.tooltip(item.get("genericname"))
        	button.callback(item.clicked)
        	grpIcons.add(button)
        except: 
        	print "Unable to display control center item. (Malformed .desktop file?)"


    def load_help(self, helpFile):
        if helpFile:
        	help = open(helpFile).readlines()
        	helpStr = ""
        	for line in help:
        		helpStr += line
        else:
        	helpStr = "Sorry, no help is available for this category."
        
        bufHelp = txtHelp.buffer()
        bufHelp.replace(0, 1000, helpStr)


    def apply_theme(self):
        helptext = self.get_config("help", "text", 0)
        txtHelp.textcolor(helptext)
        helpsize = self.get_config("help", "size", 12)
        txtHelp.textsize(helpsize)
        helpselect = self.get_config("help", "select", 255)
        txtHelp.selection_color(helpselect)
        helpbackground = self.get_config("help", "background", 0)
        txtHelp.color(helpbackground)
        grpHelp.color(helpbackground)
        
        catbackground = self.get_config("categories", "background", 0)
        grpCat.color(catbackground)
        
        tabsbackground = self.get_config("tabs", "background", 0)
        tabs.color(tabsbackground)
        tabsselect = self.get_config("tabs", "select", 255)
        tabs.selection_color(tabsselect)
        
        mainbackground = self.get_config("main", "background", 0)
        window.color(mainbackground)
        
        titletext = self.get_config("title", "text", 0)
        grpIcons.labelcolor(titletext)
        titlesize = self.get_config("title", "size", 14)
        grpIcons.labelsize(titlesize)


    def get_config(self, section, option, default):
        try:	tmp = self.config.get(section, option)
        except:	return default
        
        try:
        	tmp = int(tmp)
        	return tmp
        except:
        	try:	r, g, b = tmp.split(", ")
        	except:
        		try:	r, g, b = tmp.split(",")
        		except:	return default
        
        r = int(int(r) / 2)
        g = int(g)
        b = int(b)
        tmp = fl_rgb_color(r, g, b)
        return tmp


# end of class stxcc

