daboide Commit
Revision 584
Date: 2006-05-29 15:31:22 -0700 (Mon, 29 May 2006)
Author: ed
Changed:
U trunk/ClassDesigner.py
U trunk/ClassDesignerControlMixin.py
U trunk/ClassDesignerEditor.py
U trunk/ClassDesignerFormMixin.py
U trunk/ClassDesignerMenu.py
U trunk/ClassDesignerPropSheet.py
Log:
Added the ability to specify class-wide import statements.
Also cleaned up some stray non-localized strings.
Diff:
Modified: trunk/ClassDesigner.py
===================================================================
--- trunk/ClassDesigner.py 2006-05-29 01:02:30 UTC (rev 583)
+++ trunk/ClassDesigner.py 2006-05-29 22:31:22 UTC (rev 584)
@@ -52,6 +52,7 @@
self._srcObj = None
self._codeDict = {}
self._classPropDict = {}
+ self._classImportDict = {}
self._classDefaultVals = {}
self._mixedControlClasses = {}
# self.isClosing = False
@@ -116,7 +117,7 @@
{"name" : "Line", "class" : dui.dLine, "order"
: 130},
{"name" : "ListBox", "class" : dui.dListBox,
"order" : 140},
{"name" : "ListControl", "class" :
dui.dListControl, "order" : 150},
-# {"name" : "RadioGroup", "class" :
dui.dRadioGroup, "order" : 160},
+ {"name" : "RadioList", "class" :
dui.dRadioList, "order" : 160},
{"name" : "Panel", "class" : dui.dPanel,
"order" : 170},
{"name" : "ScrollPanel", "class" :
dui.dScrollPanel, "order" : 180},
{"name" : "PageFrame", "class" :
dui.dPageFrame, "order" : 190},
@@ -245,7 +246,7 @@
dct = defVals.copy()
self._sizerDefaults[dui.dOkCancelDialog] = dct
dct = defVals.copy()
- self._sizerDefaults[dui.dRadioGroup] = dct
+ self._sizerDefaults[dui.dRadioList] = dct
dct = defVals.copy()
self._sizerDefaults[dui.dPage] = {}
dct.update({"HAlign" : "center", "VAlign" : "middle"})
@@ -303,9 +304,9 @@
dui.dGauge, dui.dGrid, dui.dImage, dui.dLabel,
dui.dLine,
dui.dListBox, dui.dListControl, dui.dPanel,
dui.dScrollPanel, dui.dPage, dui.dPageFrame,
dui.dPageList,
- dui.dPageSelect, dui.dPageFrameNoTabs,
dui.dSlider, dui.dSpinner,
- dui.dSplitter, dui.dTextBox, dui.dToggleButton,
dui.dTreeView)
-# dui.dRadioGroup,
+ dui.dPageSelect, dui.dPageFrameNoTabs,
dui.dRadioList,
+ dui.dSlider, dui.dSpinner, dui.dSplitter,
dui.dTextBox,
+ dui.dToggleButton, dui.dTreeView)
def evtsForClass(cls):
ret = []
@@ -443,7 +444,10 @@
# Each method will be a separate dict
for mthd, cd in code.items():
cd = cd.replace("\n]", "]")
- self._codeDict[frm][mthd] = cd
+ if mthd == "importStatements":
+ self._classImportDict[frm] = cd
+ else:
+ self._codeDict[frm][mthd] = cd
# Do the same for the properties
propDefs = clsd.get("properties", {})
# Restore any prop definitions.
@@ -675,7 +679,55 @@
self._srcObj = currPnl
return ret
+
+ def onDeclareImports(self, evt):
+ """Show a dialog that enables the user to edit the import
statements
+ that will be included with the code when this class is run.
+ """
+ frm = self.currentForm
+ txt = self._classImportDict.get(frm)
+ if not txt:
+ self._classImportDict[frm] = ""
+ # Create the dialog
+ class ImportEditDialog(dui.dOkCancelDialog):
+ def addControls(self):
+ self.AutoSize = False
+ self.Caption = _("Import Declarations")
+ self.Size = (400, 300)
+ self.edtImport = dui.dEditBox(self)
+ self.Sizer.append1x(self.edtImport, border=12)
+ dlg = ImportEditDialog(None)
+ dlg.edtImport.Value = txt
+ dlg.show()
+ if dlg.Accepted:
+ self._classImportDict[frm] = dlg.edtImport.Value
+ dlg.release()
+
+
+ def addToImportDict(self, txt):
+ """Adds the passed line(s) to the import statements."""
+ if isinstance(txt, (list, tuple)):
+ for stmnt in txt:
+ self.addToImportDict(stmnt)
+ else:
+ frm = self.currentForm
+ imp = self._classImportDict.get(frm, "")
+ impLines = imp.splitlines()
+ if txt not in impLines:
+ imp += "\n%s" % txt
+ self._classImportDict[frm] = imp
+
+
+ def getImportDict(self, frm=None):
+ """Returns the import statements for the requested form,
+ or the current form if no form is specified.
+ """
+ if frm is None:
+ frm = self.currentForm
+ return self._classImportDict.get(frm, "")
+
+
def setProp(self, obj, prop, val, typ):
if prop == "Font":
obj.Font = val
@@ -902,7 +954,7 @@
# the values in propDict.
self._sizerObj = obj
dlg = SizerEditDlg(fillDlg)
- dlg.Caption = "Sizer Settings"
+ dlg.Caption = _("Sizer Settings")
self.currentForm.bringToFront()
# This is used to determine if anything has changed in
# the dialog, so we know whether to update or not.
@@ -1134,18 +1186,17 @@
chc = ["dForm", "dPanel", "dScrollPanel",
"dPageFrame", "dPageList", "dPageSelect",
"dPageNoTabs", "dBox",
"dBitmap", "dBitmapButton", "dButton", "dCheckBox",
"dComboBox", "dDateTextBox",
"dDropdownList", "dEditBox", "dGauge", "dGrid",
- "dImage", "dLabel", "dLine",
"dListBox", "dListControl", "dSlider",
+ "dImage", "dLabel", "dLine",
"dListBox", "dListControl", "dRadioList", "dSlider",
"dSpinner", "dSplitter",
"dTextBox", "dToggleButton", "dTreeView"]
-# "dRadioGroup",
self.dd = dabo.ui.dDropdownList(self,
Choices=chc, Value="dForm")
# self.dd.Value = "dForm"
self.Sizer.appendSpacer(25)
- self.Sizer.append(dabo.ui.dLabel(self,
Caption="Select the class to create:"),
+ self.Sizer.append(dabo.ui.dLabel(self,
Caption=_("Select the class to create:")),
halign="center")
self.Sizer.append1x(self.dd, halign="Center",
border=40)
self.Sizer.appendSpacer(25)
- dlg = NewClassPicker(Caption="New Class")
+ dlg = NewClassPicker(Caption=_("New Class"))
dlg.show()
if dlg.Accepted:
newClassName = dlg.dd.StringValue
@@ -1178,8 +1229,8 @@
code = self.miniAppTemplate() % fname
out = os.path.splitext(nm)[0] + ".py"
open(out, "w").write(code)
- dui.info("You can run your form by running the file\n%s"
- % out, title="Runnable App Saved")
+ dui.info(_("You can run your form by running the file\n%s")
+ % out, title=_("Runnable App Saved"))
def onRevert(self, evt):
@@ -1449,7 +1500,7 @@
"\tself._%s = val" %
propertyAtt]
setCodeText = os.linesep.join(setCode)
cd[setMethod] = setCodeText
-
+
if delMethod is None:
if oldData:
oldMethod = oldData["deller"]
@@ -1696,8 +1747,8 @@
szit = pnl.ControllingSizerItem
if szit is None:
# Something is wrong; write it to the log and return
- dabo.errorLog.write(_("Attempted to add an object of
class %s to parent %s, "
- "but parent has no sizer information.")
% (cls, pnl))
+ dabo.errorLog.write(_("Attempted to add an object of
class %s to parent %s, but parent has no sizer information.")
+ % (cls, pnl))
return
# Get the defaults for this class of control.
@@ -1734,7 +1785,7 @@
super(PageInfoDialog,
self).__init__(*args, **kwargs)
def addControls(self):
- self.Caption = "Paged Control Settings"
+ self.Caption = _("Paged Control
Settings")
gsz = dui.dGridSizer(maxCols=2, hgap=5,
vgap=12)
lbl = dui.dLabel(self,
Caption=_("Number of pages:"))
spn = dui.dSpinner(self,
DataSource="form",
@@ -1783,8 +1834,8 @@
newCols = None
if not props.has_key("ColumnCount"):
try:
- newCols = int(dui.getString("How many
columns?",
- "New Grid Control",
"3"))
+ newCols = int(dui.getString(_("How many
columns?"),
+ _("New Grid Control"),
_("3")))
except:
newCols = 3
@@ -1904,51 +1955,51 @@
self._srcObj = srcObj
mainpop = dui.dMenu()
pop = dui.dMenu(Caption=_("Sizers"))
- pop.append("Add New Vertical Sizer", bindfunc=self.onNewVert)
- pop.append("Add New Horizontal Sizer", bindfunc=self.onNewHoriz)
- pop.append("Add New Spacer", bindfunc=self.onNewSpacer)
- pop.append("Add New Grid Sizer", bindfunc=self.onNewGridSizer)
+ pop.append(_("Add New Vertical Sizer"), bindfunc=self.onNewVert)
+ pop.append(_("Add New Horizontal Sizer"),
bindfunc=self.onNewHoriz)
+ pop.append(_("Add New Spacer"), bindfunc=self.onNewSpacer)
+ pop.append(_("Add New Grid Sizer"),
bindfunc=self.onNewGridSizer)
mainpop.appendMenu(pop)
if not justSizers:
pop = dui.dMenu(Caption=_("Data Controls"))
- pop.append("Add CheckBox", bindfunc=self.onNewCheckBox)
- pop.append("Add ComboBox", bindfunc=self.onNewComboBox)
- pop.append("Add DateTextBox",
bindfunc=self.onNewDateTextBox)
- pop.append("Add DropdownList",
bindfunc=self.onNewDropdownList)
- pop.append("Add EditBox", bindfunc=self.onNewEditBox)
- pop.append("Add Grid", bindfunc=self.onNewGrid)
- pop.append("Add ListBox", bindfunc=self.onNewListBox)
- pop.append("Add ListControl",
bindfunc=self.onNewListControl)
-# pop.append("Add RadioGroup",
bindfunc=self.onNewRadioGroup)
- pop.append("Add Spinner", bindfunc=self.onNewSpinner)
- pop.append("Add TextBox", bindfunc=self.onNewTextBox)
- pop.append("Add ToggleButton",
bindfunc=self.onNewToggleButton)
+ pop.append(_("Add CheckBox"),
bindfunc=self.onNewCheckBox)
+ pop.append(_("Add ComboBox"),
bindfunc=self.onNewComboBox)
+ pop.append(_("Add DateTextBox"),
bindfunc=self.onNewDateTextBox)
+ pop.append(_("Add DropdownList"),
bindfunc=self.onNewDropdownList)
+ pop.append(_("Add EditBox"), bindfunc=self.onNewEditBox)
+ pop.append(_("Add Grid"), bindfunc=self.onNewGrid)
+ pop.append(_("Add ListBox"), bindfunc=self.onNewListBox)
+ pop.append(_("Add ListControl"),
bindfunc=self.onNewListControl)
+ pop.append(_("Add RadioList"),
bindfunc=self.onNewRadioList)
+ pop.append(_("Add Spinner"), bindfunc=self.onNewSpinner)
+ pop.append(_("Add TextBox"), bindfunc=self.onNewTextBox)
+ pop.append(_("Add ToggleButton"),
bindfunc=self.onNewToggleButton)
mainpop.appendMenu(pop)
pop = dui.dMenu(Caption=_("Display Controls"))
- pop.append("Add Box", bindfunc=self.onNewBox)
- pop.append("Add Bitmap", bindfunc=self.onNewBitmap)
- pop.append("Add Image", bindfunc=self.onNewImage)
- pop.append("Add Label", bindfunc=self.onNewLabel)
- pop.append("Add Line", bindfunc=self.onNewLine)
- pop.append("Add Panel", bindfunc=self.onNewPanel)
- pop.append("Add ScrollPanel",
bindfunc=self.onNewScrollPanel)
- pop.append("Add Splitter", bindfunc=self.onNewSplitter)
+ pop.append(_("Add Box"), bindfunc=self.onNewBox)
+ pop.append(_("Add Bitmap"), bindfunc=self.onNewBitmap)
+ pop.append(_("Add Image"), bindfunc=self.onNewImage)
+ pop.append(_("Add Label"), bindfunc=self.onNewLabel)
+ pop.append(_("Add Line"), bindfunc=self.onNewLine)
+ pop.append(_("Add Panel"), bindfunc=self.onNewPanel)
+ pop.append(_("Add ScrollPanel"),
bindfunc=self.onNewScrollPanel)
+ pop.append(_("Add Splitter"),
bindfunc=self.onNewSplitter)
mainpop.appendMenu(pop)
pop = dui.dMenu(Caption=_("Interactive Controls"))
- pop.append("Add BitmapButton",
bindfunc=self.onNewBitmapButton)
- pop.append("Add Button", bindfunc=self.onNewButton)
- pop.append("Add Gauge", bindfunc=self.onNewGauge)
- pop.append("Add Slider", bindfunc=self.onNewSlider)
- pop.append("Add TreeView", bindfunc=self.onNewTreeView)
+ pop.append(_("Add BitmapButton"),
bindfunc=self.onNewBitmapButton)
+ pop.append(_("Add Button"), bindfunc=self.onNewButton)
+ pop.append(_("Add Gauge"), bindfunc=self.onNewGauge)
+ pop.append(_("Add Slider"), bindfunc=self.onNewSlider)
+ pop.append(_("Add TreeView"),
bindfunc=self.onNewTreeView)
mainpop.appendMenu(pop)
pop = dui.dMenu(Caption=_("Paged Controls"))
- pop.append("Add PageFrame",
bindfunc=self.onNewPageFrame)
- pop.append("Add PageList", bindfunc=self.onNewPageList)
- pop.append("Add PageSelect",
bindfunc=self.onNewPageSelect)
- pop.append("Add PageNoTabs",
bindfunc=self.onNewPageNoTabs)
+ pop.append(_("Add PageFrame"),
bindfunc=self.onNewPageFrame)
+ pop.append(_("Add PageList"),
bindfunc=self.onNewPageList)
+ pop.append(_("Add PageSelect"),
bindfunc=self.onNewPageSelect)
+ pop.append(_("Add PageNoTabs"),
bindfunc=self.onNewPageNoTabs)
mainpop.appendMenu(pop)
pop = dui.dMenu(Caption=self._customClassCaption)
- pop.append("Select...", bindfunc=self.onSelectClass)
+ pop.append(_("Select..."), bindfunc=self.onSelectClass)
self.onMenuOpenMRU(pop)
mainpop.appendMenu(pop)
return mainpop
@@ -2055,7 +2106,7 @@
try:
exec "obj.%s = '%s'" % (att,
escVal)
except:
- raise ValueError, "Could not
set attribute '%s' to value: %s" % (att, val)
+ raise ValueError, _("Could not
set attribute '%s' to value: %s") % (att, val)
# If the item has children, set their atts, too.
isSizer = isinstance(obj, dui.dSizerMixin)
if isSizer:
@@ -2137,8 +2188,8 @@
dui.callAfter(self.addNewControl, None, dui.dListBox)
def onNewListControl(self, evt):
dui.callAfter(self.addNewControl, None, dui.dListControl)
- def onNewRadioGroup(self, evt):
- dui.callAfter(self.addNewControl, None, dui.dRadioGroup)
+ def onNewRadioList(self, evt):
+ dui.callAfter(self.addNewControl, None, dui.dRadioList)
def onNewPanel(self, evt):
dui.callAfter(self.addNewControl, None, dui.dPanel)
def onNewScrollPanel(self, evt):
@@ -2460,38 +2511,38 @@
obj = self._srcObj
# for obj in self._selection:
if isinstance(obj, (LayoutPanel, dui.dPanel)):
- funcDict = {"Vert. Sizer" : self.onNewVert,
- "Horiz. Sizer" : self.onNewHoriz,
- "Grid Sizer" : self.onNewGridSizer,
- "Box" : self.onNewBox,
- "Bitmap" : self.onNewBitmap,
- "BitmapButton" :
self.onNewBitmapButton,
- "Button" : self.onNewButton,
- "CheckBox" : self.onNewCheckBox,
- "ComboBox" : self.onNewComboBox,
- "DateTextBox" : self.onNewDateTextBox,
- "DropdownList" :
self.onNewDropdownList,
- "EditBox" : self.onNewEditBox,
- "Gauge" : self.onNewGauge,
- "Grid" : self.onNewGrid,
- "Image" : self.onNewImage,
- "Label" : self.onNewLabel,
- "Line" : self.onNewLine,
- "ListBox" : self.onNewListBox,
- "ListControl" : self.onNewListControl,
-# "RadioGroup" : self.onNewRadioGroup,
- "Panel" : self.onNewPanel,
- "ScrollPanel" : self.onNewScrollPanel,
- "PageFrame" : self.onNewPageFrame,
- "PageList" : self.onNewPageList,
- "PageSelect" : self.onNewPageSelect,
- "PageNoTabs" : self.onNewPageNoTabs,
- "Slider" : self.onNewSlider,
- "Spinner" : self.onNewSpinner,
- "Splitter" : self.onNewSplitter,
- "TextBox" : self.onNewTextBox,
- "ToggleButton" :
self.onNewToggleButton,
- "TreeView" : self.onNewTreeView}
+ funcDict = {_("Vert. Sizer") : self.onNewVert,
+ _("Horiz. Sizer") : self.onNewHoriz,
+ _("Grid Sizer") : self.onNewGridSizer,
+ _("Box") : self.onNewBox,
+ _("Bitmap") : self.onNewBitmap,
+ _("BitmapButton") :
self.onNewBitmapButton,
+ _("Button") : self.onNewButton,
+ _("CheckBox") : self.onNewCheckBox,
+ _("ComboBox") : self.onNewComboBox,
+ _("DateTextBox") :
self.onNewDateTextBox,
+ _("DropdownList") :
self.onNewDropdownList,
+ _("EditBox") : self.onNewEditBox,
+ _("Gauge") : self.onNewGauge,
+ _("Grid") : self.onNewGrid,
+ _("Image") : self.onNewImage,
+ _("Label") : self.onNewLabel,
+ _("Line") : self.onNewLine,
+ _("ListBox") : self.onNewListBox,
+ _("ListControl") :
self.onNewListControl,
+ _("RadioList") : self.onNewRadioList,
+ _("Panel") : self.onNewPanel,
+ _("ScrollPanel") :
self.onNewScrollPanel,
+ _("PageFrame") : self.onNewPageFrame,
+ _("PageList") : self.onNewPageList,
+ _("PageSelect") : self.onNewPageSelect,
+ _("PageNoTabs") : self.onNewPageNoTabs,
+ _("Slider") : self.onNewSlider,
+ _("Spinner") : self.onNewSpinner,
+ _("Splitter") : self.onNewSplitter,
+ _("TextBox") : self.onNewTextBox,
+ _("ToggleButton") :
self.onNewToggleButton,
+ _("TreeView") : self.onNewTreeView}
func = funcDict[ctlCap]
func(evt)
@@ -2668,13 +2719,13 @@
sz.append(10)
# Now add the control buttons
- ctls = (_("Box"), _("Bitmap"), _("BitmapButton"),
_("Button"), _("CheckBox"),
- _("ComboBox"), _("DateTextBox"),
_("DropdownList"), _("EditBox"), _("Gauge"),
- _("Grid"), _("Image"), _("Label"),
_("Line"), _("ListBox"), _("ListControl"),
- _("Panel"), _("ScrollPanel"),
_("PageFrame"), _("PageList"),
- _("PageSelect"), _("PageNoTabs"),
_("Slider"), _("Spinner"), _("Splitter"),
- _("TextBox"), _("ToggleButton"),
_("TreeView"))
-# _("RadioGroup"),
+ ctls = (_("Box"), _("Bitmap"), _("BitmapButton"),
_("Button"), _("CheckBox"),
+ _("ComboBox"), _("DateTextBox"),
_("DropdownList"), _("EditBox"),
+ _("Gauge"), _("Grid"), _("Image"),
_("Label"), _("Line"), _("ListBox"),
+ _("ListControl"), _("Panel"),
_("ScrollPanel"), _("PageFrame"),
+ _("PageList"), _("PageSelect"),
_("PageNoTabs"), _("RadioList"),
+ _("Slider"), _("Spinner"),
_("Splitter"), _("TextBox"), _("ToggleButton"),
+ _("TreeView"))
for ctl in ctls:
btn = paletteButton(cp, Caption=ctl)
btn.bindEvent(dEvents.Hit, self.onPaletteClick)
Modified: trunk/ClassDesignerControlMixin.py
===================================================================
--- trunk/ClassDesignerControlMixin.py 2006-05-29 01:02:30 UTC (rev 583)
+++ trunk/ClassDesignerControlMixin.py 2006-05-29 22:31:22 UTC (rev 584)
@@ -498,10 +498,11 @@
pass
elif isinstance(self, dabo.ui.dMenuItem):
ret.update(captionProps)
- elif isinstance(self, dabo.ui.dRadioGroup):
+ elif isinstance(self, dabo.ui.dRadioList):
ret.update(colorProps)
ret.update(captionProps)
ret.update(fontProps)
+ ret.update(choiceProps)
elif isinstance(self, (dabo.ui.dPageFrame, dabo.ui.dPageList,
dabo.ui.dPageSelect, dabo.ui.dPageFrameNoTabs)):
ret.update(colorProps)
Modified: trunk/ClassDesignerEditor.py
===================================================================
--- trunk/ClassDesignerEditor.py 2006-05-29 01:02:30 UTC (rev 583)
+++ trunk/ClassDesignerEditor.py 2006-05-29 22:31:22 UTC (rev 584)
@@ -16,7 +16,7 @@
obj = self.Form.getEditedObject()
if not obj:
# Should never happen!
- dabo.ErrorLog.write("Bad object ref returned to
_makeContainingClassIntoSelf()")
+ dabo.ErrorLog.write(_("Bad object ref returned to
_makeContainingClassIntoSelf()"))
return None
try:
args = "dabo.ui.%s" %
str(obj.BaseClass).split("'")[1].split(".")[-1]
@@ -29,9 +29,13 @@
def _namespaceHacks(self):
"""We'll want to be able to use 'dabo.' and 'dui.' to bring up
- intellisense for those two modules.
+ intellisense for those two modules. We also want to add any
class-wide
+ import statements into the namespace.
"""
exec "import dabo\ndui = dabo.ui" in self._namespaces
+ imp = self.Application.getImportDict()
+ if imp:
+ exec imp in self._namespaces
@@ -119,19 +123,31 @@
self.Sizer.append1x(pnl)
sz = pnl.Sizer = dabo.ui.dSizer("v")
- dui.dLabel(pnl, Caption="Object:", RegID="lblObj")
+ dui.dLabel(pnl, Caption=_("Object:"), RegID="lblObj")
dui.dDropdownList(pnl, RegID="ddObject")
- dui.dLabel(pnl, Caption="Method:", RegID="lblMethod")
+ dui.dLabel(pnl, Caption=_("Method:"), RegID="lblMethod")
dui.dDropdownList(pnl, RegID="ddMethod")
- hs = dui.dSizer("h", DefaultBorder=8)
+ hs = dui.dSizer("h", DefaultBorder=8, DefaultBorderTop=True,
+ DefaultBorderBottom=True)
+ hs.appendSpacer(8)
hs.append(self.lblObj, 0, valign="middle")
+ hs.appendSpacer(2)
hs.append(self.ddObject, 0)
- hs.appendSpacer(1,1)
+ hs.appendSpacer(8)
hs.append(self.lblMethod, 0, valign="middle")
+ hs.appendSpacer(2)
hs.append(self.ddMethod, 0)
- dui.dButton(pnl, Caption="New", RegID="btnNewMethod")
- hs.appendSpacer(1,1)
+ hs.appendSpacer(4)
+ dui.dButton(pnl, Caption=_("New"), RegID="btnNewMethod")
hs.append(self.btnNewMethod, 0)
+ hs.appendSpacer(8)
+ hs.append(dui.dLine(pnl, Height=self.btnNewMethod.Height,
Width=2),
+ valign="middle")
+ hs.appendSpacer(8)
+ dui.dButton(pnl, Caption=_("Manage Imports"),
RegID="btnImports")
+ hs.append(self.btnImports, 0)
+
+
sz.append(hs, 0, "x")
dui.dPageFrameNoTabs(pnl, RegID="pgf")
sz.append1x(self.pgf)
@@ -199,13 +215,13 @@
def setEditorCaption(self):
obj = self.ddObject.KeyValue
if obj is None:
- nm = "No object"
+ nm = _("No object")
else:
nm = obj.Name
mthd = self.ddMethod.StringValue
if not mthd:
- mthd = "no method"
- self.Caption = "Editing: %s, %s" % (nm, mthd)
+ mthd = _("no method")
+ self.Caption = _("Editing: %s, %s") % (nm, mthd)
def onHit_ddObject(self, evt):
@@ -219,12 +235,12 @@
def onHit_btnNewMethod(self, evt):
- nm = dabo.ui.getString("Name of method?")
+ nm = dabo.ui.getString(_("Name of method?"))
if nm:
# Make sure that it's legal
nm = nm.strip()
if not re.match("[a-zA-Z_][a-zA-Z_0-9]*", nm):
- dabo.ui.stop("Illegal name: %s" % nm,
title="Illegal Name")
+ dabo.ui.stop(_("Illegal name: %s") % nm,
title=_("Illegal Name"))
return
# Default to the currently selected object
@@ -235,6 +251,10 @@
self.edit(obj, nm, True)
+ def onHit_btnImports(self, evt):
+ self.app.onDeclareImports(evt)
+
+
def refreshStatus(self):
dui.callAfter(self.setEditorCaption)
self.populateMethodList()
@@ -373,12 +393,33 @@
# % (mthd, obj.Name, e))
# Add it to the repository.
if objCode:
+ txt = self._extractImports(txt)
objCode[mthd] = txt
else:
rep[obj] = {}
rep[obj][mthd] = txt
+ # Update the page
+ if pg.Text != txt:
+ pg.Text = txt
+ pg.refresh()
+ curr = self.StatusText
+ self.StatusText = _("Code Updated")
+ dabo.ui.setAfterInterval(4000, self, "StatusText", curr)
+ def _extractImports(self, cd):
+ codeLines = cd.splitlines()
+ for pos, ln in enumerate(codeLines):
+ if ln.lstrip()[:4] == "def ":
+ break
+ if pos > 0:
+ self.app.addToImportDict(codeLines[:pos])
+ ret = "\n".join(codeLines[pos:])
+ else:
+ ret = "\n".join(codeLines)
+ return ret
+
+
def _getCodeRepository(self):
return self.app.getCodeDict()
Modified: trunk/ClassDesignerFormMixin.py
===================================================================
--- trunk/ClassDesignerFormMixin.py 2006-05-29 01:02:30 UTC (rev 583)
+++ trunk/ClassDesignerFormMixin.py 2006-05-29 22:31:22 UTC (rev 584)
@@ -23,7 +23,7 @@
class ClassDesignerFormMixin(LayoutSaverMixin):
def __init__(self, parent=None, properties=None, *args, **kwargs):
if not self.Caption:
- self.Caption = "Dabo Class Designer"
+ self.Caption = _("Dabo Class Designer")
self._controls = []
self._namedConnection = ""
@@ -181,6 +181,13 @@
self.app.saveAllProps = True
propDict = self.getClassDesignerDict(obj)
self.app.saveAllProps = False
+
+ imp = self.app._classImportDict.get(self, "")
+ if imp:
+ cd = propDict.get("code", {})
+ cd.update({"importStatements": imp})
+ propDict["code"] = cd
+
xml = dicttoxml(propDict)
# Try opening the file. If it is read-only, it will raise an
# IOError that the calling method can catch.
@@ -261,7 +268,7 @@
try:
self.onSaveDesign(None)
except IOError, e:
- dabo.ui.info(_("Cannot write file"), title="Write
Error")
+ dabo.ui.info(_("Cannot write file"), title=_("Write
Error"))
if not self._classFile or not os.path.isfile(self._classFile):
# Nothing was saved
return
@@ -276,7 +283,7 @@
obj = frm.addObject(self._classFile)
if frm.Sizer:
frm.Sizer.append1x(obj)
- frm.Caption = "Test form for: %s" %
os.path.split(self._classFile)[1]
+ frm.Caption = _("Test form for: %s") %
os.path.split(self._classFile)[1]
frm.layout()
frm.isDemoTest = True
frm.Visible = True
Modified: trunk/ClassDesignerMenu.py
===================================================================
--- trunk/ClassDesignerMenu.py 2006-05-29 01:02:30 UTC (rev 583)
+++ trunk/ClassDesignerMenu.py 2006-05-29 22:31:22 UTC (rev 584)
@@ -59,6 +59,9 @@
help=_("Re-load the form from disk,
losing any pending changes"))
fm.prepend(_("Save Runnable App"), bindfunc=app.onSaveRunnable,
help=_("Create a mini app to run your
form"))
+ fm.prependSeparator()
+ itm = fm.prepend(_("&Import Declarations...\tCtrl-I"),
bindfunc=app.onDeclareImports,
+ help=_("Edit the import statements for
the code for this class"))
itm = fm.prepend(_("Save as C&lass\tCtrl+Shift+S"),
bindfunc=app.onSaveClassDesign,
help=_("Save the ClassDesigner contents
as a class"))
itm.DynamicEnabled = app.shouldEnableSaveAsClass
Modified: trunk/ClassDesignerPropSheet.py
===================================================================
--- trunk/ClassDesignerPropSheet.py 2006-05-29 01:02:30 UTC (rev 583)
+++ trunk/ClassDesignerPropSheet.py 2006-05-29 22:31:22 UTC (rev 584)
@@ -359,7 +359,7 @@
obj = objs[0]
class MultiListDialog(dabo.ui.dOkCancelDialog):
def addControls(self):
- self.Caption = "Border Sides"
+ self.Caption = _("Border Sides")
lbl = dabo.ui.dLabel(self,
Caption=_("Select the sides to
which the border will apply:"))
self.Sizer.append(lbl, halign="center")
@@ -442,7 +442,7 @@
for row in range(self.RowCount):
pd = self.getPropDictForRow(row)
if not isinstance(pd, dict):
- print "BAD PROP DICT:", pd, type(pd), "ROW", row
+ print _("BAD PROP DICT:"), pd, type(pd),
_("ROW"), row
continue
typ = pd["type"]
rnd = self.stringRendererClass
@@ -475,9 +475,9 @@
if not isinstance(pd, dict):
if pd is None:
- print "None PROP DICT:, ROW=",
+ print _("None PROP DICT:, ROW="),
else:
- print "BAD PROP DICT:", pd, type(pd),
"ROW=",
+ print _("BAD PROP DICT:"), pd,
type(pd), _("ROW="),
else:
if pd["type"] == "multi":
# This is a catch-all setting for props
such as 'Value' that
@@ -736,8 +736,8 @@
Props = property(_getProps, _setProps)
btnClass = getControlClass(TestButton)
- b1 = btnClass(self, Caption="First Button")
- b2 = btnClass(self, Caption="Second Button")
+ b1 = btnClass(self, Caption=_("First Button"))
+ b2 = btnClass(self, Caption=_("Second Button"))
vs = LayoutSizer("v")
sz.append(vs, 1, "x")
vs.append1x(b1)
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev