Mercurial > traipse_dev
diff orpg/tools/orpg_settings.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children | 69149263026d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orpg/tools/orpg_settings.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,409 @@ +# Copyright (C) 2000-2001 The OpenRPG Project +# +# openrpg-dev@lists.sourceforge.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# -- +# +# File: orpg_settings.py +# Author: Dj Gilcrease +# Maintainer: +# Version: +# $Id: orpg_settings.py,v 1.51 2007/07/15 14:25:12 digitalxero Exp $ +# +# Description: classes for orpg settings +# + +from orpg.orpg_windows import * +import orpg.dirpath +from rgbhex import * +import sys +import os + +class orpgSettings: + def __init__(self): + self.validate = open_rpg.get_component("validate") + self.xml = open_rpg.get_component("xml") + self.log = open_rpg.get_component("log") + self.changes = [] + self.validate.config_file("settings.xml","default_settings.xml") + self.filename = orpg.dirpath.dir_struct["user"] + "settings.xml" + temp_file = open(self.filename) + txt = temp_file.read() + temp_file.close() + self.xml_dom = self.xml.parseXml(txt) + + if self.xml_dom is None: + self.rebuildSettings() + self.xml_dom = self.xml_dom._get_documentElement() + + def rebuildSettings(self): + self.log.log("Settings file has be corrupted, rebuilding settings.", ORPG_INFO, True) + try: + os.remove(self.filename) + except: + pass + + self.validate.config_file("settings.xml","default_settings.xml") + temp_file = open(self.filename) + txt = temp_file.read() + temp_file.close() + self.xml_dom = self.xml.parseXml(txt) + + def get_setting(self, name): + try: + return self.xml_dom.getElementsByTagName(name)[0].getAttribute("value") + except: + return 0 + + def get_setting_keys(self): + keys = [] + tabs = self.xml_dom.getElementsByTagName("tab") + for i in xrange(0, len(tabs)): + if tabs[i].getAttribute("type") == 'grid': + children = tabs[i]._get_childNodes() + for c in children: + keys.append(c._get_tagName()) + return keys + + def set_setting(self, name, value): + self.xml_dom.getElementsByTagName(name)[0].setAttribute("value", value) + + def add_setting(self, tab, setting, value, options, help): + if len(self.xml_dom.getElementsByTagName(setting)) > 0: + return False + tabs = self.xml_dom.getElementsByTagName("tab") + newsetting = self.xml.parseXml('<' + setting + ' value="' + value + '" options="' + options + '" help="' + help + '" />')._get_documentElement() + for i in xrange(0, len(tabs)): + if tabs[i].getAttribute("name") == tab and tabs[i].getAttribute("type") == 'grid': + tabs[i].appendChild(newsetting) + return True + return False + + def add_tab(self, parent, tabname, tabtype): + tab_xml = '<tab ' + if tabtype == 'text': + tab_xml += 'name="' + tabname + '" type="text" />' + else: + tab_xml += 'name="' + tabname + '" type="' + tabtype + '"></tab>' + newtab = self.xml.parseXml(tab_xml)._get_documentElement() + if parent != None: + tabs = self.xml_dom.getElementsByTagName("tab") + for i in xrange(0, len(tabs)): + if tabs[i].getAttribute("name") == parent and tabs[i].getAttribute("type") == 'tab': + children = tabs[i]._get_childNodes() + for c in children: + if c.getAttribute("name") == tabname: + return False + tabs[i].appendChild(newtab) + return True + else: + children = self.xml_dom._get_childNodes() + for c in children: + if c.getAttribute("name") == tabname: + return False + self.xml_dom.appendChild(newtab) + return True + return False + + def updateIni(self): + defaultFile = orpg.dirpath.dir_struct['template'] + 'default_settings.xml' + temp_file = open(defaultFile) + txt = temp_file.read() + temp_file.close() + default_dom = self.xml.parseXml(txt)._get_documentElement() + for child in default_dom.getChildren(): + if child._get_tagName() == 'tab' and child.hasChildNodes(): + self.proccessChildren(child) + default_dom.unlink() + + def proccessChildren(self, dom, parent=None): + if dom._get_tagName() == 'tab': + self.add_tab(parent, dom.getAttribute("name"), dom.getAttribute("type")) + + for child in dom.getChildren(): + if child._get_tagName() == 'tab' and child.hasChildNodes(): + self.proccessChildren(child, dom.getAttribute("name")) + else: + self.add_setting(dom.getAttribute("name"), child._get_tagName(), child.getAttribute("value"), child.getAttribute("options"), child.getAttribute("help")) + + def save(self): + temp_file = open(self.filename, "w") + temp_file.write(self.xml.toxml(self.xml_dom,1)) + temp_file.close() + +class orpgSettingsWnd(wx.Dialog): + def __init__(self, parent): + wx.Dialog.__init__(self,parent,-1,"OpenRPG Preferences",wx.DefaultPosition,size = wx.Size(-1,-1), style=wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION) + self.Freeze() + self.validate = open_rpg.get_component("validate") + self.settings = open_rpg.get_component("settings") + self.chat = open_rpg.get_component("chat") + self.changes = [] + self.SetMinSize((545,500)) + self.tabber = orpgTabberWnd(self, style=FNB.FNB_NO_X_BUTTON) + self.build_gui() + self.tabber.SetSelection(0) + winsizer = wx.BoxSizer(wx.VERTICAL) + sizer = wx.BoxSizer(wx.HORIZONTAL) + sizer.Add(wx.Button(self, wx.ID_OK, "OK"), 1, wx.EXPAND) + sizer.Add(wx.Size(10,10)) + sizer.Add(wx.Button(self, wx.ID_CANCEL, "Cancel"), 1, wx.EXPAND) + winsizer.Add(self.tabber, 1, wx.EXPAND) + winsizer.Add(sizer, 0, wx.EXPAND | wx.ALIGN_BOTTOM) + self.winsizer = winsizer + self.SetSizer(self.winsizer) + self.SetAutoLayout(True) + self.Fit() + self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK) + self.Thaw() + + def on_size(self,evt): + (w,h) = self.GetClientSizeTuple() + self.winsizer.SetDimension(0,0,w,h-25) + + def build_gui(self): + self.validate.config_file("settings.xml","default_settings.xml") + filename = open_rpg.get_component("dir_struct")["user"] + "settings.xml" + temp_file = open(filename) + temp_file.close() + children = self.settings.xml_dom._get_childNodes() + for c in children: + self.build_window(c,self.tabber) + + def build_window(self, xml_dom, parent_wnd): + name = xml_dom._get_nodeName() + #container = 0 + if name=="tab": + temp_wnd = self.do_tab_window(xml_dom,parent_wnd) + return temp_wnd + + def do_tab_window(self, xml_dom, parent_wnd): + type = xml_dom.getAttribute("type") + name = xml_dom.getAttribute("name") + + if type == "grid": + temp_wnd = self.do_grid_tab(xml_dom, parent_wnd) + parent_wnd.AddPage(temp_wnd, name, False) + elif type == "tab": + temp_wnd = orpgTabberWnd(parent_wnd, style=FNB.FNB_NO_X_BUTTON) + children = xml_dom._get_childNodes() + for c in children: + if c._get_nodeName() == "tab": + self.do_tab_window(c, temp_wnd) + temp_wnd.SetSelection(0) + parent_wnd.AddPage(temp_wnd, name, False) + elif type == "text": + temp_wnd = wx.TextCtrl(parent_wnd,-1) + parent_wnd.AddPage(temp_wnd, name, False) + else: + temp_wnd = None + return temp_wnd + + def do_grid_tab(self, xml_dom, parent_wnd): + settings = [] + children = xml_dom._get_childNodes() + for c in children: + name = c._get_nodeName() + value = c.getAttribute("value") + help = c.getAttribute("help") + options = c.getAttribute("options") + settings.append([name, value, options, help]) + temp_wnd = settings_grid(parent_wnd, settings, self.changes) + return temp_wnd + + def onOk(self, evt): + #This will write the settings back to the XML + self.session = open_rpg.get_component("session") + tabbedwindows = open_rpg.get_component("tabbedWindows") + new = [] + for wnd in tabbedwindows: + try: + style = wnd.GetWindowStyleFlag() + new.append(wnd) + except: + pass + tabbedwindows = new + open_rpg.add_component("tabbedWindows", tabbedwindows) + rgbconvert = RGBHex() + + for i in xrange(0,len(self.changes)): + self.settings.set_setting(self.changes[i][0], self.changes[i][1]) + top_frame = open_rpg.get_component('frame') + + if self.changes[i][0] == 'bgcolor' or self.changes[i][0] == 'textcolor': + self.chat.chatwnd.SetPage(self.chat.ResetPage()) + self.chat.chatwnd.scroll_down() + if self.settings.get_setting('ColorTree') == '1': + top_frame.tree.SetBackgroundColour(self.settings.get_setting('bgcolor')) + top_frame.tree.SetForegroundColour(self.settings.get_setting('textcolor')) + top_frame.tree.Refresh() + top_frame.players.SetBackgroundColour(self.settings.get_setting('bgcolor')) + top_frame.players.SetForegroundColour(self.settings.get_setting('textcolor')) + top_frame.players.Refresh() + else: + top_frame.tree.SetBackgroundColour('white') + top_frame.tree.SetForegroundColour('black') + top_frame.tree.Refresh() + top_frame.players.SetBackgroundColour('white') + top_frame.players.SetForegroundColour('black') + top_frame.players.Refresh() + + if self.changes[i][0] == 'ColorTree': + if self.changes[i][1] == '1': + top_frame.tree.SetBackgroundColour(self.settings.get_setting('bgcolor')) + top_frame.tree.SetForegroundColour(self.settings.get_setting('textcolor')) + top_frame.tree.Refresh() + top_frame.players.SetBackgroundColour(self.settings.get_setting('bgcolor')) + top_frame.players.SetForegroundColour(self.settings.get_setting('textcolor')) + top_frame.players.Refresh() + else: + top_frame.tree.SetBackgroundColour('white') + top_frame.tree.SetForegroundColour('black') + top_frame.tree.Refresh() + top_frame.players.SetBackgroundColour('white') + top_frame.players.SetForegroundColour('black') + top_frame.players.Refresh() + + if self.changes[i][0] == 'GMWhisperTab' and self.changes[i][1] == '1': + self.chat.parent.create_gm_tab() + self.toggleToolBars(self.chat, self.changes[i]) + try: + self.toggleToolBars(self.chat.parent.GMChatPanel, self.changes[i]) + except: + pass + for panel in self.chat.parent.whisper_tabs: + self.toggleToolBars(panel, self.changes[i]) + for panel in self.chat.parent.group_tabs: + self.toggleToolBars(panel, self.changes[i]) + for panel in self.chat.parent.null_tabs: + self.toggleToolBars(panel, self.changes[i]) + + if self.changes[i][0] == 'player': + self.session.name = self.changes[i][1] + + if (self.changes[i][0] == 'TabTheme' and (self.changes[i][1] == 'customflat' or self.changes[i][1] == 'customslant')) or\ + (self.changes[i][0] == 'TabTextColor' and (self.settings.get_setting('TabTheme') == 'customflat' or self.settings.get_setting('TabTheme') == 'customslant')) or\ + (self.changes[i][0] == 'TabGradientFrom' and (self.settings.get_setting('TabTheme') == 'customflat' or self.settings.get_setting('TabTheme') == 'customslant')) or\ + (self.changes[i][0] == 'TabGradientTo' and (self.settings.get_setting('TabTheme') == 'customflat' or self.settings.get_setting('TabTheme') == 'customslant')): + gfrom = self.settings.get_setting('TabGradientFrom') + (fred, fgreen, fblue) = rgbconvert.rgb_tuple(gfrom) + + gto = self.settings.get_setting('TabGradientTo') + (tored, togreen, toblue) = rgbconvert.rgb_tuple(gto) + + tabtext = self.settings.get_setting('TabTextColor') + (tred, tgreen, tblue) = rgbconvert.rgb_tuple(tabtext) + for wnd in tabbedwindows: + style = wnd.GetWindowStyleFlag() + # remove old tabs style + mirror = ~(FNB.FNB_VC71 | FNB.FNB_VC8 | FNB.FNB_FANCY_TABS | FNB.FNB_COLORFUL_TABS) + style &= mirror + if self.settings.get_setting('TabTheme') == 'customslant': + style |= FNB.FNB_VC8 + else: + style |= FNB.FNB_FANCY_TABS + wnd.SetWindowStyleFlag(style) + wnd.SetGradientColourTo(wx.Color(tored, togreen, toblue)) + wnd.SetGradientColourFrom(wx.Color(fred, fgreen, fblue)) + wnd.SetNonActiveTabTextColour(wx.Color(tred, tgreen, tblue)) + wnd.Refresh() + + if self.changes[i][0] == 'TabBackgroundGradient': + for wnd in tabbedwindows: + (red, green, blue) = rgbconvert.rgb_tuple(self.changes[i][1]) + wnd.SetTabAreaColour(wx.Color(red, green, blue)) + wnd.Refresh() + self.settings.save() + self.Destroy() + + def toggleToolBars(self, panel, changes): + if changes[0] == 'AliasTool_On': + panel.toggle_alias(changes[1]) + elif changes[0] == 'DiceButtons_On': + panel.toggle_dice(changes[1]) + elif changes[0] == 'FormattingButtons_On': + panel.toggle_formating(changes[1]) + +class settings_grid(wx.grid.Grid): + """grid for gen info""" + def __init__(self, parent, settings, changed = []): + wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) + self.setting_data = changed + self.Bind(wx.EVT_SIZE, self.on_size) + self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) + self.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.on_left_click) + self.CreateGrid(len(settings),3) + self.SetRowLabelSize(0) + self.SetColLabelValue(0,"Setting") + self.SetColLabelValue(1,"Value") + self.SetColLabelValue(2,"Available Options") + self.settings = settings + for i in range(len(settings)): + self.SetCellValue(i,0,settings[i][0]) + self.SetCellValue(i,1,settings[i][1]) + if settings[i][1] and settings[i][1][0] == '#': + self.SetCellBackgroundColour(i,1,settings[i][1]) + self.SetCellValue(i,2,settings[i][2]) + + def on_left_click(self,evt): + row = evt.GetRow() + col = evt.GetCol() + if col == 2: + return + elif col == 0: + name = self.GetCellValue(row,0) + str = self.settings[row][3] + msg = wx.MessageBox(str,name) + return + elif col == 1: + setting = self.GetCellValue(row,0) + value = self.GetCellValue(row,1) + if value and value[0] == '#': + hexcolor = orpg.tools.rgbhex.RGBHex().do_hex_color_dlg(self) + if hexcolor: + self.SetCellValue(row,2, hexcolor) + self.SetCellBackgroundColour(row,1,hexcolor) + self.Refresh() + setting = self.GetCellValue(row,0) + self.setting_data.append([setting, hexcolor]) + else: + evt.Skip() + + def on_cell_change(self,evt): + row = evt.GetRow() + col = evt.GetCol() + if col != 1: + return + setting = self.GetCellValue(row,0) + value = self.GetCellValue(row,1) + self.setting_data.append([setting, value]) + + def get_h(self): + (w,h) = self.GetClientSizeTuple() + rows = self.GetNumberRows() + minh = 0 + for i in range (0,rows): + minh += self.GetRowSize(i) + minh += 120 + return minh + + def on_size(self,evt): + (w,h) = self.GetClientSizeTuple() + cols = self.GetNumberCols() + col_w = w/(cols) + for i in range(0,cols): + self.SetColSize(i,col_w) + self.Refresh()