xxxParamBitmap, support for wxArtProvider bitmaps
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@19025 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,3 +1,21 @@
|
||||
0.0.9-4
|
||||
-------
|
||||
|
||||
Implemented standard bitmap selection.
|
||||
|
||||
Fixed a bug in FlexGridSizer code.
|
||||
|
||||
0.0.9-3
|
||||
-------
|
||||
|
||||
File browsing (for bitmaps/icons, etc.) had a small problem when current
|
||||
file was not saved yet.
|
||||
|
||||
0.0.9-2
|
||||
-------
|
||||
|
||||
Small bug fix for initial don't panic message.
|
||||
|
||||
0.0.9-1
|
||||
-------
|
||||
|
||||
|
@@ -16,7 +16,7 @@ else:
|
||||
modernFont = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
|
||||
|
||||
progname = 'XRCed'
|
||||
version = '0.0.9-1'
|
||||
version = '0.0.9-4'
|
||||
|
||||
# Global variables
|
||||
|
||||
|
@@ -170,6 +170,8 @@ class ParamPage(wxPanel):
|
||||
# Some classes are special
|
||||
if param == 'font':
|
||||
xxx.params[param] = xxxParamFont(xxx.element, elem)
|
||||
elif param in xxxObject.bitmapTags:
|
||||
xxx.params[param] = xxxParamBitmap(elem)
|
||||
else:
|
||||
xxx.params[param] = xxxParam(elem)
|
||||
# Find place to put new element: first present element after param
|
||||
@@ -247,7 +249,7 @@ class PropPage(ParamPage):
|
||||
label = wxStaticText(self, -1, 'XML ID:', size=(100,-1))
|
||||
control = ParamText(self, name='XML_name')
|
||||
sizer.AddMany([ (label, 0, wxALIGN_CENTER_VERTICAL),
|
||||
(control, 0, wxALIGN_CENTER_VERTICAL) ])
|
||||
(control, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 5) ])
|
||||
self.controlName = control
|
||||
for param in xxx.allParams:
|
||||
present = xxx.params.has_key(param)
|
||||
|
@@ -8,6 +8,7 @@ import string
|
||||
import os.path
|
||||
from globals import *
|
||||
from types import *
|
||||
from wxPython.xrc import *
|
||||
|
||||
genericStyles = ['wxSIMPLE_BORDER', 'wxDOUBLE_BORDER',
|
||||
'wxSUNKEN_BORDER', 'wxRAISED_BORDER',
|
||||
@@ -305,7 +306,7 @@ class ParamInt(PPanel):
|
||||
self.freeze = false
|
||||
|
||||
class ParamText(PPanel):
|
||||
def __init__(self, parent, name, textWidth=200):
|
||||
def __init__(self, parent, name, textWidth=260):
|
||||
PPanel.__init__(self, parent, name)
|
||||
self.ID_TEXT_CTRL = wxNewId()
|
||||
# We use sizer even here to have the same size of text control
|
||||
@@ -334,8 +335,9 @@ class ParamPosSize(ParamText):
|
||||
|
||||
class ContentDialog(wxDialogPtr):
|
||||
def __init__(self, parent, value):
|
||||
# Is this normal???
|
||||
# Load from resource
|
||||
w = g.frame.res.LoadDialog(parent, 'DIALOG_CONTENT')
|
||||
# Perform initialization with class pointer
|
||||
wxDialogPtr.__init__(self, w.this)
|
||||
self.thisown = 1
|
||||
self.Center()
|
||||
@@ -385,7 +387,6 @@ class ContentDialog(wxDialogPtr):
|
||||
|
||||
class ContentCheckListDialog(wxDialogPtr):
|
||||
def __init__(self, parent, value):
|
||||
# Is this normal???
|
||||
w = g.frame.res.LoadDialog(parent, 'DIALOG_CONTENT_CHECK_LIST')
|
||||
wxDialogPtr.__init__(self, w.this)
|
||||
self.thisown = 1
|
||||
@@ -684,6 +685,83 @@ class ParamFile(PPanel):
|
||||
self.textModified = false
|
||||
dlg.Destroy()
|
||||
|
||||
class ParamBitmap(PPanel):
|
||||
def __init__(self, parent, name):
|
||||
# Load from resource
|
||||
w = g.frame.res.LoadPanel(parent, 'PANEL_BITMAP')
|
||||
# Perform initialization with class pointer
|
||||
wxPanelPtr.__init__(self, w.this)
|
||||
self.thisown = 1
|
||||
self.modified = self.freeze = false
|
||||
self.SetBackgroundColour(g.panel.GetBackgroundColour())
|
||||
self.radio_std = self.FindWindowByName('RADIO_STD')
|
||||
self.radio_file = self.FindWindowByName('RADIO_FILE')
|
||||
self.combo = self.FindWindowByName('COMBO_STD')
|
||||
self.text = self.FindWindowByName('TEXT_FILE')
|
||||
self.button = self.FindWindowByName('BUTTON_BROWSE')
|
||||
self.textModified = false
|
||||
self.SetAutoLayout(true)
|
||||
self.GetSizer().SetMinSize((260, -1))
|
||||
self.GetSizer().Fit(self)
|
||||
EVT_RADIOBUTTON(self, XMLID('RADIO_STD'), self.OnRadioStd)
|
||||
EVT_RADIOBUTTON(self, XMLID('RADIO_FILE'), self.OnRadioFile)
|
||||
EVT_BUTTON(self, XMLID('BUTTON_BROWSE'), self.OnButtonBrowse)
|
||||
EVT_COMBOBOX(self, XMLID('COMBO_STD'), self.OnCombo)
|
||||
EVT_TEXT(self, XMLID('COMBO_STD'), self.OnChange)
|
||||
EVT_TEXT(self, XMLID('TEXT_FILE'), self.OnChange)
|
||||
def OnRadioStd(self, evt):
|
||||
self.SetModified()
|
||||
self.SetValue('')
|
||||
def OnRadioFile(self, evt):
|
||||
self.SetModified()
|
||||
self.SetValue(['',''])
|
||||
def updateRadios(self):
|
||||
if self.value[0]:
|
||||
self.text.Enable(false)
|
||||
self.button.Enable(false)
|
||||
self.combo.Enable(true)
|
||||
else:
|
||||
self.text.Enable(true)
|
||||
self.button.Enable(true)
|
||||
self.combo.Enable(false)
|
||||
def OnChange(self, evt):
|
||||
PPanel.OnChange(self, evt)
|
||||
self.textModified = true
|
||||
def OnCombo(self, evt):
|
||||
PPanel.OnChange(self, evt)
|
||||
self.value[0] = self.combo.GetValue()
|
||||
def GetValue(self):
|
||||
if self.textModified: # text has newer value
|
||||
return [self.combo.GetValue(), self.text.GetValue()]
|
||||
return self.value
|
||||
def SetValue(self, value):
|
||||
self.freeze = true
|
||||
if not value:
|
||||
self.value = ['wxART_MISSING_IMAGE', '']
|
||||
else:
|
||||
self.value = value
|
||||
self.combo.SetValue(self.value[0])
|
||||
self.text.SetValue(self.value[1]) # update text ctrl
|
||||
self.updateRadios()
|
||||
self.freeze = false
|
||||
def OnButtonBrowse(self, evt):
|
||||
if self.textModified: # text has newer value
|
||||
self.value[1] = self.text.GetValue()
|
||||
dlg = wxFileDialog(self,
|
||||
defaultDir = os.path.abspath(os.path.dirname(self.value[1])),
|
||||
defaultFile = os.path.basename(self.value[1]))
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
# Get common part of selected path and current
|
||||
if g.frame.dataFile:
|
||||
curpath = os.path.abspath(g.frame.dataFile)
|
||||
else:
|
||||
curpath = os.path.join(os.getcwd(), '')
|
||||
common = os.path.commonprefix([curpath, dlg.GetPath()])
|
||||
self.SetValue(['', dlg.GetPath()[len(common):]])
|
||||
self.SetModified()
|
||||
self.textModified = false
|
||||
dlg.Destroy()
|
||||
|
||||
paramDict = {
|
||||
'flag': ParamFlag,
|
||||
'style': ParamStyle, 'exstyle': ParamExStyle,
|
||||
@@ -696,6 +774,6 @@ paramDict = {
|
||||
'min': ParamInt, 'max': ParamInt,
|
||||
'fg': ParamColour, 'bg': ParamColour, 'font': ParamFont,
|
||||
'enabled': ParamBool, 'focused': ParamBool, 'hidden': ParamBool,
|
||||
'tooltip': ParamText, 'bitmap': ParamFile, 'icon': ParamFile,
|
||||
'tooltip': ParamText, 'bitmap': ParamBitmap, 'icon': ParamBitmap,
|
||||
}
|
||||
|
||||
|
@@ -232,4 +232,87 @@
|
||||
</object>
|
||||
<style>wxRESIZE_BORDER</style>
|
||||
</object>
|
||||
<object class="wxPanel" name="PANEL_BITMAP">
|
||||
<object class="wxStaticBoxSizer">
|
||||
<label></label>
|
||||
<orient>wxVERTICAL</orient>
|
||||
<object class="sizeritem">
|
||||
<object class="wxFlexGridSizer">
|
||||
<cols>2</cols>
|
||||
<rows>2</rows>
|
||||
<object class="sizeritem">
|
||||
<object class="wxRadioButton" name="RADIO_STD">
|
||||
<label>art:</label>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<object class="wxComboBox" name="COMBO_STD">
|
||||
<content>
|
||||
<item>wxART_ADD_BOOKMARK</item>
|
||||
<item>wxART_DEL_BOOKMARK</item>
|
||||
<item>wxART_HELP_SIDE_PANEL</item>
|
||||
<item>wxART_HELP_SETTINGS</item>
|
||||
<item>wxART_HELP_BOOK</item>
|
||||
<item>wxART_HELP_FOLDER</item>
|
||||
<item>wxART_HELP_PAGE</item>
|
||||
<item>wxART_GO_BACK</item>
|
||||
<item>wxART_GO_FORWARD</item>
|
||||
<item>wxART_GO_UP</item>
|
||||
<item>wxART_GO_DOWN</item>
|
||||
<item>wxART_GO_TO_PARENT</item>
|
||||
<item>wxART_GO_HOME</item>
|
||||
<item>wxART_FILE_OPEN</item>
|
||||
<item>wxART_PRINT</item>
|
||||
<item>wxART_HELP</item>
|
||||
<item>wxART_TIP</item>
|
||||
<item>wxART_REPORT_VIEW</item>
|
||||
<item>wxART_LIST_VIEW</item>
|
||||
<item>wxART_NEW_DIR</item>
|
||||
<item>wxART_FOLDER</item>
|
||||
<item>wxART_GO_DIR_UP</item>
|
||||
<item>wxART_EXECUTABLE_FILE</item>
|
||||
<item>wxART_NORMAL_FILE</item>
|
||||
<item>wxART_TICK_MARK</item>
|
||||
<item>wxART_CROSS_MARK</item>
|
||||
<item>wxART_ERROR</item>
|
||||
<item>wxART_QUESTION</item>
|
||||
<item>wxART_WARNING</item>
|
||||
<item>wxART_INFORMATION</item>
|
||||
<item>wxART_MISSING_IMAGE</item>
|
||||
</content>
|
||||
</object>
|
||||
<flag>wxRIGHT|wxEXPAND</flag>
|
||||
<border>5</border>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<object class="wxRadioButton" name="RADIO_FILE">
|
||||
<label>file:</label>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<object class="wxBoxSizer">
|
||||
<orient>wxHORIZONTAL</orient>
|
||||
<object class="sizeritem">
|
||||
<object class="wxTextCtrl" name="TEXT_FILE"/>
|
||||
<option>1</option>
|
||||
<flag>wxRIGHT|wxEXPAND</flag>
|
||||
<border>5</border>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<object class="wxButton" name="BUTTON_BROWSE">
|
||||
<label>Browse...</label>
|
||||
<size>55,-1</size>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<flag>wxRIGHT|wxEXPAND</flag>
|
||||
<border>5</border>
|
||||
</object>
|
||||
<vgap>2</vgap>
|
||||
<growablecols>1</growablecols>
|
||||
</object>
|
||||
<flag>wxEXPAND</flag>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</resource>
|
@@ -151,6 +151,21 @@ class xxxParamContentCheckList(xxxNode):
|
||||
self.l[i][1].setAttribute('checked', str(value[i][1]))
|
||||
self.data = value
|
||||
|
||||
# Bitmap parameter
|
||||
class xxxParamBitmap(xxxParam):
|
||||
def __init__(self, node):
|
||||
xxxParam.__init__(self, node)
|
||||
self.stock_id = node.getAttribute('stock_id')
|
||||
def value(self):
|
||||
return [self.stock_id, xxxParam.value(self)]
|
||||
def update(self, value):
|
||||
self.stock_id = value[0]
|
||||
if self.stock_id:
|
||||
self.node.setAttribute('stock_id', self.stock_id)
|
||||
else:
|
||||
self.node.removeAttribute('stock_id')
|
||||
xxxParam.update(self, value[1])
|
||||
|
||||
################################################################################
|
||||
|
||||
# Classes to interface DOM objects
|
||||
@@ -165,6 +180,8 @@ class xxxObject:
|
||||
styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'tooltip']
|
||||
# Special parameters
|
||||
specials = []
|
||||
# Bitmap tags
|
||||
bitmapTags = ['bitmap', 'bitmap2', 'icon']
|
||||
# Required paremeters: none by default
|
||||
required = []
|
||||
# Default parameters with default values
|
||||
@@ -204,6 +221,9 @@ class xxxObject:
|
||||
self.params[tag] = xxxParamContent(node)
|
||||
elif tag == 'font': # has children
|
||||
self.params[tag] = xxxParamFont(element, node)
|
||||
elif tag in self.bitmapTags:
|
||||
# Can have attributes
|
||||
self.params[tag] = xxxParamBitmap(node)
|
||||
else: # simple parameter
|
||||
self.params[tag] = xxxParam(node)
|
||||
else:
|
||||
@@ -327,7 +347,7 @@ class xxxFrame(xxxContainer):
|
||||
class xxxTool(xxxObject):
|
||||
allParams = ['bitmap', 'bitmap2', 'toggle', 'tooltip', 'longhelp']
|
||||
required = ['bitmap']
|
||||
paramDict = {'bitmap2': ParamFile, 'toggle': ParamBool}
|
||||
paramDict = {'bitmap2': ParamBitmap, 'toggle': ParamBool}
|
||||
hasStyle = false
|
||||
|
||||
class xxxToolBar(xxxContainer):
|
||||
@@ -346,6 +366,7 @@ class xxxBitmap(xxxObject):
|
||||
allParams = ['bitmap']
|
||||
required = ['bitmap']
|
||||
|
||||
# Just like bitmap
|
||||
class xxxIcon(xxxObject):
|
||||
allParams = ['icon']
|
||||
required = ['icon']
|
||||
@@ -530,7 +551,8 @@ class xxxGridSizer(xxxSizer):
|
||||
|
||||
# For repeated parameters
|
||||
class xxxParamMulti:
|
||||
def __init__(self):
|
||||
def __init__(self, node):
|
||||
self.node = node
|
||||
self.l, self.data = [], []
|
||||
def append(self, param):
|
||||
self.l.append(param)
|
||||
@@ -550,7 +572,8 @@ class xxxFlexGridSizer(xxxGridSizer):
|
||||
# (they are represented by several nodes)
|
||||
def special(self, tag, node):
|
||||
if not self.params.has_key(tag):
|
||||
self.params[tag] = xxxParamMulti()
|
||||
# Create new multi-group
|
||||
self.params[tag] = xxxParamMulti(node)
|
||||
self.params[tag].append(xxxParamInt(node))
|
||||
def setSpecial(self, param, value):
|
||||
# Straightforward implementation: remove, add again
|
||||
|
Reference in New Issue
Block a user