[z3-checkins] r13429 - in z3/zopejam/trunk/src: zcmledit zopejam
zopejam/icons/palette zopejam/icons/palette/16x16
hathawsh at codespeak.net
hathawsh at codespeak.net
Wed Jun 15 09:00:54 CEST 2005
Author: hathawsh
Date: Wed Jun 15 09:00:46 2005
New Revision: 13429
Added:
z3/zopejam/trunk/src/zopejam/icons/palette/
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/include.xcf (contents, props changed)
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/include_glob.png (contents, props changed)
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/include_one.png (contents, props changed)
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/includeoverride_glob.png (contents, props changed)
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/includeoverride_one.png (contents, props changed)
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/package.png (contents, props changed)
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/zcmlfile.png (contents, props changed)
Modified:
z3/zopejam/trunk/src/zcmledit/include.py
z3/zopejam/trunk/src/zopejam/main.py
z3/zopejam/trunk/src/zopejam/resources.xrc
Log:
Load a complete configuration into the tree widgets.
Modified: z3/zopejam/trunk/src/zcmledit/include.py
==============================================================================
--- z3/zopejam/trunk/src/zcmledit/include.py (original)
+++ z3/zopejam/trunk/src/zcmledit/include.py Wed Jun 15 09:00:46 2005
@@ -19,17 +19,20 @@
"""
def __init__(self, element, pythonpath):
- files = element.data.get('files')
- file = element.data.get('file')
- package = element.data.get('package')
+ self.element = element
+ ns, localname = element.name
+ self.override = (localname == 'includeOverrides')
+ self.files = element.data.get('files')
+ self.file = element.data.get('file')
+ self.package = element.data.get('package')
- if files and file:
+ if self.files and self.file:
raise ValueError("Must specify only one of file or files")
- if not files and not file:
- file = 'configure.zcml'
+ if not self.files and not self.file:
+ self.file = 'configure.zcml'
# figure out the absolute package name, which may be None.
- if not package:
+ if not self.package:
try:
abs_package = element.getAbsolutePackageName()
except NoPackageError:
@@ -38,17 +41,17 @@
# referring to a file relative to the file containing
# the include directive.
abs_package = None
- elif package.startswith('.'):
+ elif self.package.startswith('.'):
# Turn the relative package name into an absolute package
# name. In this case, the directive did specify a
# package, so complain if there is no absolute package
# name in this context.
parent = element.getAbsolutePackageName()
- abs_package = join_package(parent, package)
+ abs_package = join_package(parent, self.package)
else:
- abs_package = package
+ abs_package = self.package
- fn = os.path.normpath(files or file)
+ fn = os.path.normpath(self.files or self.file)
if not os.path.isabs(fn):
# convert to an absolute path
if abs_package:
@@ -60,7 +63,7 @@
self.abs_package = abs_package
self.filename = fn
- self.glob = bool(files)
+ self.glob = bool(self.files)
def getAbsolutePackageName(self):
"""Returns the package name that included files belong to.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/include.xcf
==============================================================================
Binary file. No diff available.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/include_glob.png
==============================================================================
Binary file. No diff available.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/include_one.png
==============================================================================
Binary file. No diff available.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/includeoverride_glob.png
==============================================================================
Binary file. No diff available.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/includeoverride_one.png
==============================================================================
Binary file. No diff available.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/package.png
==============================================================================
Binary file. No diff available.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/16x16/zcmlfile.png
==============================================================================
Binary file. No diff available.
Modified: z3/zopejam/trunk/src/zopejam/main.py
==============================================================================
--- z3/zopejam/trunk/src/zopejam/main.py (original)
+++ z3/zopejam/trunk/src/zopejam/main.py Wed Jun 15 09:00:46 2005
@@ -13,12 +13,48 @@
import wx
from wx import xrc
+from zcmledit.configfile import ConfigurationFile
+
VERSION = '0.1'
restarting = False
here = os.path.abspath(os.path.dirname(__file__))
+class Project:
+
+ def __init__(self, root_zcml, pythonpath=None):
+ self.root_zcml = root_zcml # '/path/to/site.zcml'
+ self.base = os.path.dirname(root_zcml)
+ if pythonpath is None:
+ pythonpath = [os.path.join(self.base, 'src')]
+ self.pythonpath = pythonpath
+
+
+class PaletteImageList(wx.ImageList):
+
+ def __init__(self, w, h):
+ wx.ImageList.__init__(self, w, h)
+ self.indexes = {}
+ base = os.path.join(here, 'icons', 'palette', '%dx%d' % (w, h))
+ names = []
+ for name in os.listdir(base):
+ if name.lower().endswith('.png'):
+ names.append(name[:-4])
+ for name in names:
+ fn = os.path.join(base, '%s.png' % name)
+ image = wx.Image(fn)
+ bitmap = wx.BitmapFromImage(image)
+ index = self.Add(bitmap)
+ self.indexes[name] = index
+
+ def __getitem__(self, name):
+ return self.indexes[name]
+
+ def get(self, name, default=None):
+ return self.indexes.get(name, default)
+
+
class JamGUI:
_menuitem_names = [
@@ -50,16 +86,18 @@
self.commands.addFromFrame(
self.frame, self._menuitem_names, self._tool_names)
self.commands.addCallbacks(self)
+
+ self.small_palette_images = PaletteImageList(16, 16)
+ inctree = xrc.XRCCTRL(self.frame, 'include_tree')
+ inctree.SetImageList(self.small_palette_images)
+ pkgtree = xrc.XRCCTRL(self.frame, 'package_tree')
+ pkgtree.SetImageList(self.small_palette_images)
+
self.alldirs = DirectiveList(
self, xrc.XRCCTRL(self.frame, 'directive_list_panel'))
+ self.project = None
self.frame.Fit()
- # No project is open
- self.commands.newfile.disable()
- self.commands.open.disable()
- self.commands.projectproperties.disable()
- self.commands.test.disable()
-
# No files are open
self.commands.save.disable()
self.commands.saveas.disable()
@@ -80,6 +118,14 @@
# The clipboard is empty
self.commands.paste.disable()
+ self.update_commands_enabled()
+
+ def update_commands_enabled(self):
+ p = self.project is not None
+ self.commands.newfile.enable(p)
+ self.commands.open.enable(p)
+ self.commands.projectproperties.enable(p)
+ self.commands.test.enable(p)
def cmd_default(self, event, name):
wx.MessageDialog(
@@ -119,7 +165,10 @@
cancel.Bind(wx.EVT_BUTTON, lambda event: dlg.EndModal(wx.ID_CANCEL))
if dlg.ShowModal() == wx.ID_OK:
- print 'now opening project', root_zcml.GetValue()
+ fn = os.path.abspath(root_zcml.GetValue())
+ self.project = Project(fn)
+ self.populate()
+ self.update_commands_enabled()
def cmd_quit(self, event):
self.frame.Close()
@@ -157,6 +206,89 @@
restarting = True
self.frame.Close()
+ def populate(self):
+ inctree = xrc.XRCCTRL(self.frame, 'include_tree')
+ inctree.DeleteAllItems()
+ pkgtree = xrc.XRCCTRL(self.frame, 'package_tree')
+ pkgtree.DeleteAllItems()
+ if self.project is None:
+ return
+
+ images = self.small_palette_images
+ packages = {} # {package: [(filename, cfg)]}
+ incroot = inctree.AddRoot('')
+ root_config = ConfigurationFile(self.project.root_zcml)
+
+ todo = [(incroot, root_config)]
+ while todo:
+ parent, cfg = todo.pop(0)
+
+ filenames = packages.get(cfg.package_name or '')
+ if filenames is None:
+ filenames = []
+ packages[cfg.package_name or ''] = filenames
+ filenames.append((cfg.filename, cfg))
+
+ cfg.load()
+ label = os.path.basename(cfg.filename)
+ data = wx.TreeItemData(cfg)
+ image = images.get('zcmlfile', -1)
+ child = inctree.AppendItem(parent, label, image=image, data=data)
+ for dir in cfg.root.flattened():
+ if dir.isIncludeDirective():
+ resolver = dir.getIncludeResolver(self.project.pythonpath)
+ data = wx.TreeItemData(resolver)
+ f = resolver.files or resolver.file
+ if resolver.abs_package:
+ label = '[%s] %s' % (resolver.abs_package, f)
+ else:
+ label = f
+
+ image_name = '%s_%s' % (
+ resolver.override and 'includeoverride' or 'include',
+ resolver.glob and 'glob' or 'one'
+ )
+ image = images.get(image_name, -1)
+
+ gchild = inctree.AppendItem(
+ child, label, image=image, data=data)
+ for fn in resolver.listFiles():
+ cfg = ConfigurationFile(
+ fn, resolver.getAbsolutePackageName())
+ todo.append((gchild, cfg))
+
+ # expand the visible roots
+ child, cookie = inctree.GetFirstChild(incroot)
+ while child:
+ inctree.Expand(child)
+ child, cookie = inctree.GetNextChild(incroot, cookie)
+
+ # populate pkgtree
+ pkgroot = pkgtree.AddRoot('')
+ items = packages.items()
+ items.sort()
+ file_image = images.get('zcmlfile', -1)
+ pkg_image = images.get('package', -1)
+ for package, filenames in items:
+ pkgid = pkgtree.AppendItem(
+ pkgroot, package or '[no package]', image=pkg_image)
+ filenames.sort()
+ for filename, cfg in filenames:
+ if package:
+ label = os.path.basename(filename)
+ else:
+ label = self.shortenPath(filename)
+ pkgtree.AppendItem(pkgid, label, image=file_image)
+
+ def shortenPath(self, p):
+ if self.project is None:
+ return p
+ base = self.project.base
+ if p.startswith(base):
+ len_base = len(base)
+ if len(p) > len_base and p[len_base] == os.sep:
+ return p[len_base + 1:]
+ return p
class DirectiveList:
Modified: z3/zopejam/trunk/src/zopejam/resources.xrc
==============================================================================
--- z3/zopejam/trunk/src/zopejam/resources.xrc (original)
+++ z3/zopejam/trunk/src/zopejam/resources.xrc Wed Jun 15 09:00:46 2005
@@ -220,13 +220,13 @@
<object class="notebookpage">
<label>Includes</label>
<object class="wxTreeCtrl" name="include_tree">
- <style>wxSUNKEN_BORDER</style>
+ <style>wxTR_HAS_BUTTONS|wxTR_HIDE_ROOT|wxSUNKEN_BORDER</style>
</object>
</object>
<object class="notebookpage">
<label>Packages</label>
- <object class="wxTreeCtrl" name="file_tree">
- <style>wxSUNKEN_BORDER</style>
+ <object class="wxTreeCtrl" name="package_tree">
+ <style>wxTR_HAS_BUTTONS|wxTR_HIDE_ROOT|wxSUNKEN_BORDER</style>
</object>
</object>
</object>
@@ -422,6 +422,7 @@
</object>
</object>
</object>
+ <minsize>100</minsize>
</object>
<flag>wxLEFT|wxEXPAND</flag>
<border>1</border>
@@ -431,11 +432,11 @@
</object>
</object>
<orientation>vertical</orientation>
- <sashpos>250</sashpos>
- <style></style>
+ <sashpos>350</sashpos>
+ <minsize>100</minsize>
</object>
<flag>wxEXPAND</flag>
- <minsize>750, 550</minsize>
+ <minsize>950, 700</minsize>
</object>
<cols>1</cols>
<growablerows>0</growablerows>
More information about the z3-checkins
mailing list