Yet another update of XRCed. Fixes some display issues and some minor
buglets. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14494 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -144,7 +144,7 @@ class ParamColour(PPanel):
|
|||||||
self.ID_BUTTON = wxNewId()
|
self.ID_BUTTON = wxNewId()
|
||||||
self.SetBackgroundColour(panel.GetBackgroundColour())
|
self.SetBackgroundColour(panel.GetBackgroundColour())
|
||||||
sizer = wxBoxSizer()
|
sizer = wxBoxSizer()
|
||||||
self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=buttonSize)
|
self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=(65,-1))
|
||||||
sizer.Add(self.text, 0, wxRIGHT, 5)
|
sizer.Add(self.text, 0, wxRIGHT, 5)
|
||||||
self.button = wxPanel(self, self.ID_BUTTON, wxDefaultPosition, wxSize(40, -1))
|
self.button = wxPanel(self, self.ID_BUTTON, wxDefaultPosition, wxSize(40, -1))
|
||||||
sizer.Add(self.button, 0, wxGROW)
|
sizer.Add(self.button, 0, wxGROW)
|
||||||
@@ -156,11 +156,10 @@ class ParamColour(PPanel):
|
|||||||
EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
|
EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
|
||||||
EVT_LEFT_DOWN(self.button, self.OnLeftDown)
|
EVT_LEFT_DOWN(self.button, self.OnLeftDown)
|
||||||
def GetValue(self):
|
def GetValue(self):
|
||||||
return self.value
|
return self.text.GetValue()
|
||||||
def SetValue(self, value):
|
def SetValue(self, value):
|
||||||
self.freeze = true
|
self.freeze = true
|
||||||
if not value: value = '#FFFFFF'
|
if not value: value = '#FFFFFF'
|
||||||
self.value = value
|
|
||||||
self.text.SetValue(str(value)) # update text ctrl
|
self.text.SetValue(str(value)) # update text ctrl
|
||||||
colour = wxColour(int(value[1:3], 16), int(value[3:5], 16), int(value[5:7], 16))
|
colour = wxColour(int(value[1:3], 16), int(value[3:5], 16), int(value[5:7], 16))
|
||||||
self.button.SetBackgroundColour(colour)
|
self.button.SetBackgroundColour(colour)
|
||||||
@@ -169,7 +168,6 @@ class ParamColour(PPanel):
|
|||||||
def OnChange(self, evt):
|
def OnChange(self, evt):
|
||||||
if self.freeze: return
|
if self.freeze: return
|
||||||
self.SetModified()
|
self.SetModified()
|
||||||
self.textModified = true
|
|
||||||
evt.Skip()
|
evt.Skip()
|
||||||
def OnPaintButton(self, evt):
|
def OnPaintButton(self, evt):
|
||||||
dc = wxPaintDC(self.button)
|
dc = wxPaintDC(self.button)
|
||||||
@@ -179,11 +177,12 @@ class ParamColour(PPanel):
|
|||||||
size = self.button.GetSize()
|
size = self.button.GetSize()
|
||||||
dc.DrawRectangle(0, 0, size.x, size.y)
|
dc.DrawRectangle(0, 0, size.x, size.y)
|
||||||
def OnLeftDown(self, evt):
|
def OnLeftDown(self, evt):
|
||||||
dlg = wxColourDialog(self)
|
data = wxColourData()
|
||||||
|
data.SetColour(self.GetValue())
|
||||||
|
dlg = wxColourDialog(self, data)
|
||||||
if dlg.ShowModal() == wxID_OK:
|
if dlg.ShowModal() == wxID_OK:
|
||||||
self.SetValue('#%02X%02X%02X' % dlg.GetColourData().GetColour().Get())
|
self.SetValue('#%02X%02X%02X' % dlg.GetColourData().GetColour().Get())
|
||||||
self.SetModified()
|
self.SetModified()
|
||||||
self.textModified = false
|
|
||||||
dlg.Destroy()
|
dlg.Destroy()
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
from wxPython.wx import *
|
from wxPython.wx import *
|
||||||
from wxPython.xrc import *
|
from wxPython.xrc import *
|
||||||
from wxPython.html import *
|
from wxPython.html import wxHtmlWindow
|
||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
import os
|
import os
|
||||||
import getopt
|
import getopt
|
||||||
@@ -27,7 +27,7 @@ else:
|
|||||||
modernFont = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
|
modernFont = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
|
||||||
|
|
||||||
progname = 'XRCed'
|
progname = 'XRCed'
|
||||||
version = '0.0.7-2'
|
version = '0.0.7-3'
|
||||||
|
|
||||||
# Local modules
|
# Local modules
|
||||||
from xxx import *
|
from xxx import *
|
||||||
@@ -183,6 +183,8 @@ class Panel(wxNotebook):
|
|||||||
else:
|
else:
|
||||||
# Remove page if exists
|
# Remove page if exists
|
||||||
if self.GetPageCount() == 2:
|
if self.GetPageCount() == 2:
|
||||||
|
self.SetSelection(0)
|
||||||
|
self.page1.Refresh()
|
||||||
self.RemovePage(1)
|
self.RemovePage(1)
|
||||||
def Clear(self):
|
def Clear(self):
|
||||||
self.SetData(None)
|
self.SetData(None)
|
||||||
@@ -370,12 +372,13 @@ class StylePage(ParamPage):
|
|||||||
present = param in xxx.params.keys()
|
present = param in xxx.params.keys()
|
||||||
check = self.checks[param]
|
check = self.checks[param]
|
||||||
check.SetValue(present)
|
check.SetValue(present)
|
||||||
control = self.controls[param]
|
w = self.controls[param]
|
||||||
|
w.modified = false
|
||||||
if present:
|
if present:
|
||||||
control.SetValue(xxx.params[param].value())
|
w.SetValue(xxx.params[param].value())
|
||||||
else:
|
else:
|
||||||
control.SetValue('')
|
w.SetValue('')
|
||||||
control.Enable(present)
|
w.Enable(present)
|
||||||
self.SetModified(false)
|
self.SetModified(false)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@@ -422,7 +425,7 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
self.SetBackgroundColour(wxColour(224, 248, 224))
|
self.SetBackgroundColour(wxColour(224, 248, 224))
|
||||||
EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
|
EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
|
||||||
# One works on Linux, another on Windows
|
# One works on Linux, another on Windows
|
||||||
if wxGetOsVersion()[1] == 1:
|
if wxGetOsVersion()[0] == wxGTK:
|
||||||
EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
|
EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
|
||||||
else:
|
else:
|
||||||
EVT_LEFT_DCLICK(self, self.OnDClick)
|
EVT_LEFT_DCLICK(self, self.OnDClick)
|
||||||
@@ -523,7 +526,6 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
except:
|
except:
|
||||||
print 'ERROR: MakeXXXFromDom(%s, %s)' % (xxxParent, node)
|
print 'ERROR: MakeXXXFromDom(%s, %s)' % (xxxParent, node)
|
||||||
raise
|
raise
|
||||||
# return
|
|
||||||
treeObj = xxx.treeObject()
|
treeObj = xxx.treeObject()
|
||||||
# Append tree item
|
# Append tree item
|
||||||
item = self.AppendItem(itemParent, treeObj.treeName(),
|
item = self.AppendItem(itemParent, treeObj.treeName(),
|
||||||
@@ -609,8 +611,8 @@ class XML_Tree(wxTreeCtrl):
|
|||||||
if panel.IsModified():
|
if panel.IsModified():
|
||||||
self.Apply(xxx, oldItem)
|
self.Apply(xxx, oldItem)
|
||||||
#if conf.autoRefresh:
|
#if conf.autoRefresh:
|
||||||
if testWin and not tree.IsHighlatable(oldItem):
|
if testWin:
|
||||||
if testWin.highLight:
|
if testWin.highLight and not tree.IsHighlatable(oldItem):
|
||||||
testWin.highLight.Remove()
|
testWin.highLight.Remove()
|
||||||
self.needUpdate = true
|
self.needUpdate = true
|
||||||
status = 'Changes were applied'
|
status = 'Changes were applied'
|
||||||
@@ -998,13 +1000,7 @@ class Frame(wxFrame):
|
|||||||
icon = wxIcon(os.path.join(sys.path[0], 'xrced.ico'), wxBITMAP_TYPE_ICO)
|
icon = wxIcon(os.path.join(sys.path[0], 'xrced.ico'), wxBITMAP_TYPE_ICO)
|
||||||
self.SetIcon(icon)
|
self.SetIcon(icon)
|
||||||
|
|
||||||
# Defaults
|
# Idle flag
|
||||||
self.sashPos = 100
|
|
||||||
self.panelX = self.panelY = -1
|
|
||||||
self.panelWidth = 300
|
|
||||||
self.panelHeight = 200
|
|
||||||
|
|
||||||
# Idle flas
|
|
||||||
self.inIdle = false
|
self.inIdle = false
|
||||||
|
|
||||||
# Make menus
|
# Make menus
|
||||||
@@ -1075,11 +1071,12 @@ class Frame(wxFrame):
|
|||||||
'Refresh', 'Refresh view')
|
'Refresh', 'Refresh view')
|
||||||
tb.AddSimpleTool(self.ID_AUTO_REFRESH, images.getAutoRefreshBitmap(),
|
tb.AddSimpleTool(self.ID_AUTO_REFRESH, images.getAutoRefreshBitmap(),
|
||||||
'Auto-refresh', 'Toggle auto-refresh mode', true)
|
'Auto-refresh', 'Toggle auto-refresh mode', true)
|
||||||
if wxGetOsVersion()[1] == 1:
|
if wxGetOsVersion()[0] == wxGTK:
|
||||||
tb.AddSeparator() # otherwise auto-refresh sticks in status line
|
tb.AddSeparator() # otherwise auto-refresh sticks in status line
|
||||||
tb.ToggleTool(self.ID_AUTO_REFRESH, conf.autoRefresh)
|
tb.ToggleTool(self.ID_AUTO_REFRESH, conf.autoRefresh)
|
||||||
tb.Realize()
|
tb.Realize()
|
||||||
self.tb = tb
|
self.tb = tb
|
||||||
|
self.minWidth = tb.GetSize()[0] # minimal width is the size of toolbar
|
||||||
|
|
||||||
# File
|
# File
|
||||||
EVT_MENU(self, wxID_NEW, self.OnNew)
|
EVT_MENU(self, wxID_NEW, self.OnNew)
|
||||||
@@ -1527,20 +1524,35 @@ class Frame(wxFrame):
|
|||||||
conf.embedPanel = evt.IsChecked()
|
conf.embedPanel = evt.IsChecked()
|
||||||
if conf.embedPanel:
|
if conf.embedPanel:
|
||||||
# Remember last dimentions
|
# Remember last dimentions
|
||||||
self.panelWidth, self.panelHeight = panel.GetSize()
|
conf.panelX, conf.panelY = self.miniFrame.GetPosition()
|
||||||
|
conf.panelWidth, conf.panelHeight = self.miniFrame.GetSize()
|
||||||
|
size = self.GetSize()
|
||||||
|
pos = self.GetPosition()
|
||||||
|
sizePanel = panel.GetSize()
|
||||||
panel.Reparent(self.splitter)
|
panel.Reparent(self.splitter)
|
||||||
self.miniFrame.GetSizer().RemoveWindow(panel)
|
self.miniFrame.GetSizer().RemoveWindow(panel)
|
||||||
self.splitter.SplitVertically(tree, panel, self.sashPos)
|
wxYield()
|
||||||
|
# Widen
|
||||||
|
self.SetDimensions(pos.x, pos.y, size.x + sizePanel.x, size.y)
|
||||||
|
self.splitter.SplitVertically(tree, panel, conf.sashPos)
|
||||||
self.miniFrame.Show(false)
|
self.miniFrame.Show(false)
|
||||||
else:
|
else:
|
||||||
self.sashPos = self.splitter.GetSashPosition()
|
conf.sashPos = self.splitter.GetSashPosition()
|
||||||
|
pos = self.GetPosition()
|
||||||
|
size = self.GetSize()
|
||||||
|
sizePanel = panel.GetSize()
|
||||||
self.splitter.Unsplit(panel)
|
self.splitter.Unsplit(panel)
|
||||||
sizer = self.miniFrame.GetSizer()
|
sizer = self.miniFrame.GetSizer()
|
||||||
panel.Reparent(self.miniFrame)
|
panel.Reparent(self.miniFrame)
|
||||||
panel.Show(true)
|
panel.Show(true)
|
||||||
sizer.Add(panel, 1, wxEXPAND)
|
sizer.Add(panel, 1, wxEXPAND)
|
||||||
self.miniFrame.Show(true)
|
self.miniFrame.Show(true)
|
||||||
self.miniFrame.SetSize((self.panelWidth, self.panelHeight))
|
self.miniFrame.SetDimensions(conf.panelX, conf.panelY,
|
||||||
|
conf.panelWidth, conf.panelHeight)
|
||||||
|
wxYield()
|
||||||
|
# Reduce width
|
||||||
|
self.SetDimensions(pos.x, pos.y,
|
||||||
|
max(size.x - sizePanel.x, self.minWidth), size.y)
|
||||||
|
|
||||||
def OnTest(self, evt):
|
def OnTest(self, evt):
|
||||||
if not tree.selection: return # key pressed event
|
if not tree.selection: return # key pressed event
|
||||||
@@ -1694,8 +1706,6 @@ class Frame(wxFrame):
|
|||||||
evt.Enable((self.clipboard and tree.selection) != None)
|
evt.Enable((self.clipboard and tree.selection) != None)
|
||||||
elif evt.GetId() == self.ID_TEST:
|
elif evt.GetId() == self.ID_TEST:
|
||||||
evt.Enable(tree.selection != tree.root)
|
evt.Enable(tree.selection != tree.root)
|
||||||
elif evt.GetId() == self.ID_REFRESH:
|
|
||||||
evt.Enable(testWin != None)
|
|
||||||
|
|
||||||
def OnIdle(self, evt):
|
def OnIdle(self, evt):
|
||||||
if self.inIdle: return # Recursive call protection
|
if self.inIdle: return # Recursive call protection
|
||||||
@@ -1724,16 +1734,13 @@ class Frame(wxFrame):
|
|||||||
if testWin: testWin.Destroy()
|
if testWin: testWin.Destroy()
|
||||||
# Destroy cached windows
|
# Destroy cached windows
|
||||||
panel.cacheParent.Destroy()
|
panel.cacheParent.Destroy()
|
||||||
# for w in panel.styleCache.values(): w.Destroy()
|
|
||||||
if not panel.GetPageCount() == 2:
|
if not panel.GetPageCount() == 2:
|
||||||
panel.page2.Destroy()
|
panel.page2.Destroy()
|
||||||
conf.x, conf.y = self.GetPosition()
|
conf.x, conf.y = self.GetPosition()
|
||||||
conf.width, conf.height = self.GetSize()
|
conf.width, conf.height = self.GetSize()
|
||||||
if conf.embedPanel:
|
if conf.embedPanel:
|
||||||
conf.sashPos = self.splitter.GetSashPosition()
|
conf.sashPos = self.splitter.GetSashPosition()
|
||||||
conf.panelWidth, conf.panelHeight = self.panelWidth, self.panelHeight
|
|
||||||
else:
|
else:
|
||||||
conf.sashPos = self.sashPos
|
|
||||||
conf.panelX, conf.panelY = self.miniFrame.GetPosition()
|
conf.panelX, conf.panelY = self.miniFrame.GetPosition()
|
||||||
conf.panelWidth, conf.panelHeight = self.miniFrame.GetSize()
|
conf.panelWidth, conf.panelHeight = self.miniFrame.GetSize()
|
||||||
evt.Skip()
|
evt.Skip()
|
||||||
@@ -1792,12 +1799,15 @@ class Frame(wxFrame):
|
|||||||
self.OnRefresh(wxCommandEvent())
|
self.OnRefresh(wxCommandEvent())
|
||||||
f = open(path, 'w')
|
f = open(path, 'w')
|
||||||
# Make temporary copy
|
# Make temporary copy
|
||||||
self.domCopy = domCopy = tree.dom.cloneNode(true)
|
# !!! We can't clone dom node, it works only once
|
||||||
self.Indent(domCopy.getElementsByTagName('resource')[0])
|
#self.domCopy = tree.dom.cloneNode(true)
|
||||||
domCopy.writexml(f)
|
self.domCopy = minidom.Document()
|
||||||
# domCopy.unlink()
|
mainNode = self.domCopy.appendChild(tree.mainNode.cloneNode(true))
|
||||||
self.domCopy = None
|
self.Indent(mainNode)
|
||||||
|
self.domCopy.writexml(f)
|
||||||
f.close()
|
f.close()
|
||||||
|
self.domCopy.unlink()
|
||||||
|
self.domCopy = None
|
||||||
self.modified = false
|
self.modified = false
|
||||||
panel.SetModified(false)
|
panel.SetModified(false)
|
||||||
except:
|
except:
|
||||||
|
@@ -11,11 +11,19 @@ import wxPython.lib.wxpTag
|
|||||||
|
|
||||||
from params import *
|
from params import *
|
||||||
|
|
||||||
# Parameter value class
|
# Base class for interface parameter classes
|
||||||
class xxxParam:
|
class xxxNode:
|
||||||
# Standard use: for text nodes
|
|
||||||
def __init__(self, node):
|
def __init__(self, node):
|
||||||
self.node = node
|
self.node = node
|
||||||
|
def remove(self):
|
||||||
|
self.node.parentNode.removeChild(self.node)
|
||||||
|
self.node.unlink()
|
||||||
|
|
||||||
|
# Generic (text) parameter class
|
||||||
|
class xxxParam(xxxNode):
|
||||||
|
# Standard use: for text nodes
|
||||||
|
def __init__(self, node):
|
||||||
|
xxxNode.__init__(self, node)
|
||||||
if not node.hasChildNodes():
|
if not node.hasChildNodes():
|
||||||
# If does not have child nodes, create empty text node
|
# If does not have child nodes, create empty text node
|
||||||
text = tree.dom.createTextNode('')
|
text = tree.dom.createTextNode('')
|
||||||
@@ -29,9 +37,6 @@ class xxxParam:
|
|||||||
return self.textNode.data
|
return self.textNode.data
|
||||||
def update(self, value):
|
def update(self, value):
|
||||||
self.textNode.data = value
|
self.textNode.data = value
|
||||||
def remove(self):
|
|
||||||
self.node.parentNode.removeChild(self.node)
|
|
||||||
self.node.unlink()
|
|
||||||
|
|
||||||
# Integer parameter
|
# Integer parameter
|
||||||
class xxxParamInt(xxxParam):
|
class xxxParamInt(xxxParam):
|
||||||
@@ -48,9 +53,9 @@ class xxxParamInt(xxxParam):
|
|||||||
self.textNode.data = str(value)
|
self.textNode.data = str(value)
|
||||||
|
|
||||||
# Content parameter
|
# Content parameter
|
||||||
class xxxParamContent:
|
class xxxParamContent(xxxNode):
|
||||||
def __init__(self, node):
|
def __init__(self, node):
|
||||||
self.node = node
|
xxxNode.__init__(self, node)
|
||||||
data, l = [], [] # data is needed to quicker value retrieval
|
data, l = [], [] # data is needed to quicker value retrieval
|
||||||
nodes = node.childNodes[:] # make a copy of the child list
|
nodes = node.childNodes[:] # make a copy of the child list
|
||||||
for n in nodes:
|
for n in nodes:
|
||||||
@@ -92,9 +97,9 @@ class xxxParamContent:
|
|||||||
self.data = value
|
self.data = value
|
||||||
|
|
||||||
# Content parameter for checklist
|
# Content parameter for checklist
|
||||||
class xxxParamContentCheckList:
|
class xxxParamContentCheckList(xxxNode):
|
||||||
def __init__(self, node):
|
def __init__(self, node):
|
||||||
self.node = node
|
xxxNode.__init__(self, node)
|
||||||
data, l = [], [] # data is needed to quicker value retrieval
|
data, l = [], [] # data is needed to quicker value retrieval
|
||||||
nodes = node.childNodes[:] # make a copy of the child list
|
nodes = node.childNodes[:] # make a copy of the child list
|
||||||
for n in nodes:
|
for n in nodes:
|
||||||
@@ -213,12 +218,13 @@ class xxxObject:
|
|||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# This is a little special
|
# This is a little special: it is both xxxObject and xxxNode
|
||||||
class xxxParamFont(xxxObject):
|
class xxxParamFont(xxxObject, xxxNode):
|
||||||
allParams = ['size', 'style', 'weight', 'family', 'underlined',
|
allParams = ['size', 'style', 'weight', 'family', 'underlined',
|
||||||
'face', 'encoding']
|
'face', 'encoding']
|
||||||
def __init__(self, parent, element):
|
def __init__(self, parent, element):
|
||||||
xxxObject.__init__(self, parent, element)
|
xxxObject.__init__(self, parent, element)
|
||||||
|
xxxNode.__init__(self, element)
|
||||||
self.parentNode = parent # required to behave similar to DOM node
|
self.parentNode = parent # required to behave similar to DOM node
|
||||||
v = []
|
v = []
|
||||||
for p in self.allParams:
|
for p in self.allParams:
|
||||||
@@ -248,9 +254,6 @@ class xxxParamFont(xxxObject):
|
|||||||
self.data = v
|
self.data = v
|
||||||
def value(self):
|
def value(self):
|
||||||
return self.data
|
return self.data
|
||||||
def remove(self):
|
|
||||||
self.parentNode.removeChild(self.element)
|
|
||||||
self.element.unlink()
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user