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:
Roman Rolinsky
2003-01-30 18:16:03 +00:00
parent 0b02859ebf
commit dd92c92cc4
6 changed files with 213 additions and 9 deletions

View File

@@ -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
-------

View File

@@ -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

View File

@@ -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)

View File

@@ -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,
}

View File

@@ -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>

View File

@@ -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