[z3-checkins] r14870 - in z3/zopejam/trunk/src/zopejam: .
icons/palette/12x12 icons/palette/16x16
hathawsh at codespeak.net
hathawsh at codespeak.net
Thu Jul 21 17:00:45 CEST 2005
Author: hathawsh
Date: Thu Jul 21 17:00:40 2005
New Revision: 14870
Added:
z3/zopejam/trunk/src/zopejam/icons/palette/12x12/
z3/zopejam/trunk/src/zopejam/icons/palette/12x12/sort_down.png
z3/zopejam/trunk/src/zopejam/icons/palette/12x12/sort_up.png
Removed:
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/sort_down.png
z3/zopejam/trunk/src/zopejam/icons/palette/16x16/sort_up.png
Modified:
z3/zopejam/trunk/src/zopejam/main.py
z3/zopejam/trunk/src/zopejam/propbook.py
z3/zopejam/trunk/src/zopejam/resources.xrc
Log:
Added popup menu to grid. Also fixed a platform issue: Zope Jam was
loading 12x12 icons as 16x16, which Windows will not like.
Added: z3/zopejam/trunk/src/zopejam/icons/palette/12x12/sort_down.png
==============================================================================
Files (empty file) and z3/zopejam/trunk/src/zopejam/icons/palette/12x12/sort_down.png Thu Jul 21 17:00:40 2005 differ
Added: z3/zopejam/trunk/src/zopejam/icons/palette/12x12/sort_up.png
==============================================================================
Files (empty file) and z3/zopejam/trunk/src/zopejam/icons/palette/12x12/sort_up.png Thu Jul 21 17:00:40 2005 differ
Deleted: /z3/zopejam/trunk/src/zopejam/icons/palette/16x16/sort_down.png
==============================================================================
Binary file. No diff available.
Deleted: /z3/zopejam/trunk/src/zopejam/icons/palette/16x16/sort_up.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 Thu Jul 21 17:00:40 2005
@@ -85,6 +85,7 @@
self.commands.addCallbacks(self)
self.small_palette_images = PaletteImageList(16, 16)
+ self.tiny_palette_images = PaletteImageList(12, 12)
inctree = xrc.XRCCTRL(self.frame, 'structure_tree')
inctree.SetImageList(self.small_palette_images)
pkgtree = xrc.XRCCTRL(self.frame, 'package_tree')
@@ -434,6 +435,13 @@
return p
+ def selectDirectives(self, directives):
+ self.dir_list.selectDirectives(directives)
+
+ def ensureDirectiveVisible(self, directive):
+ self.dir_list.ensureDirectiveVisible(directive)
+
+
class DirectiveList(wx.ListCtrl, listctrl.ListCtrlAutoWidthMixin,
listctrl.ColumnSorterMixin):
@@ -446,7 +454,7 @@
self.filter = Filter(gui, xrc.XRCCTRL(self.gui.frame, 'filter_panel'))
self.columns = columns.create_default_columns()
- self.SetImageList(self.gui.small_palette_images, wx.IMAGE_LIST_SMALL)
+ self.SetImageList(self.gui.tiny_palette_images, wx.IMAGE_LIST_SMALL)
listctrl.ListCtrlAutoWidthMixin.__init__(self)
self.initColumnSorter(len(self.columns))
@@ -456,6 +464,7 @@
self.SortListItems(0, 1)
+ self.suppress_select_event = False
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onSelectChange)
self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.onSelectChange)
self.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.onSelectChange)
@@ -464,6 +473,8 @@
self.select_timer.Bind(wx.EVT_TIMER, self.onSelectTimeout)
def onSelectChange(self, event):
+ if self.suppress_select_event:
+ return
self.select_timer.Stop()
self.select_timer.Start(300, wx.TIMER_ONE_SHOT)
@@ -479,6 +490,36 @@
item = self.GetNextSelected(item)
self.gui.book.onSelect(selected)
+ def selectDirectives(self, selected):
+ """Selects a specific set of directives"""
+ self.suppress_select_event = True
+ try:
+ d = {}
+ for dir in selected:
+ d[dir] = True
+ for i, directive_index in enumerate(self.indexes):
+ dir = self.directives[directive_index]
+ want_sel = d.has_key(dir)
+ flag = wx.LIST_STATE_SELECTED
+ state = self.GetItemState(i, flag)
+ if want_sel and not state:
+ self.SetItemState(i, flag, flag)
+ elif not want_sel and state:
+ self.SetItemState(i, 0, flag)
+ self.gui.book.onSelect(selected)
+ finally:
+ self.suppress_select_event = False
+
+ def ensureDirectiveVisible(self, directive):
+ try:
+ directive_index = self.directives.index(directive)
+ item = self.indexes.index(directive_index)
+ except ValueError:
+ # Not in list
+ return
+ else:
+ self.EnsureVisible(item)
+
def populate(self):
self.itemDataMap = {}
@@ -523,8 +564,8 @@
return self
def GetSortImages(self):
- return (self.gui.small_palette_images['sort_up'],
- self.gui.small_palette_images['sort_down'])
+ return (self.gui.tiny_palette_images['sort_up'],
+ self.gui.tiny_palette_images['sort_down'])
def SortItems(self, sorter=None):
"""A SortItem implementation that works with virtual lists.
Modified: z3/zopejam/trunk/src/zopejam/propbook.py
==============================================================================
--- z3/zopejam/trunk/src/zopejam/propbook.py (original)
+++ z3/zopejam/trunk/src/zopejam/propbook.py Thu Jul 21 17:00:40 2005
@@ -29,29 +29,132 @@
sizer = wx.BoxSizer(wx.VERTICAL)
self.grid_page.SetSizer(sizer)
self.notebook.AddPage(self.grid_page, "Grid")
- self.grid_table = PropertyGridTable()
+ self.pgrid = PropertyGrid(self.gui, self.grid_page)
self.source_page = wx.Panel(self.notebook)
self.notebook.AddPage(self.source_page, "Source")
def onSelect(self, directives):
- self.grid_page.DestroyChildren()
- sizer = self.grid_page.GetSizer()
+ self.pgrid.onSelect(directives)
+
+
+class PropertyGrid:
+
+ def __init__(self, gui, panel):
+ self.gui = gui
+ self.panel = panel
+ self.table = PropertyGridTable()
+ self.next_resize_column = None
+ self.resize_timer = wx.Timer()
+ self.resize_timer.Bind(wx.EVT_TIMER, self.resizeOneColumn)
+ self.grid = None
+
+ def onSelect(self, directives):
+ self.panel.DestroyChildren()
+ sizer = self.panel.GetSizer()
if directives:
# Display the grid
- self.grid_table.populate(directives)
- self.grid = wx.grid.Grid(self.grid_page, -1)
- self.grid.SetTable(self.grid_table)
- if len(directives) < 50:
- self.grid.AutoSizeColumns(setAsMin=False)
- # else resizing would take a while.
+ self.table.populate(directives)
+ self.grid = wx.grid.Grid(self.panel, -1)
+ self.grid.SetTable(self.table)
+ self.resizeColumns()
sizer.Add(self.grid, proportion=1, flag=wx.EXPAND)
+ self.grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK,
+ self.onRightClickCell)
+ self.grid.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK,
+ self.onRightClickLabel)
+ self.grid.Bind(wx.grid.EVT_GRID_SELECT_CELL,
+ self.onSelectCell)
else:
label = wx.StaticText(
- self.grid_page, -1, "No directives selected.")
+ self.panel, -1, "No directives selected.")
sizer.Add(label, flag=wx.EXPAND|wx.ALL, border=4)
- self.grid_page.Layout()
-
+ self.panel.Layout()
+
+ def resizeColumns(self):
+ if self.grid.GetNumberRows() < 50:
+ self.grid.AutoSizeColumns(setAsMin=False)
+ else:
+ # resize one column at a time.
+ self.next_resize_column = 0
+ self.resize_timer.Start(100, oneShot=True)
+
+ def resizeOneColumn(self, event):
+ cols = self.grid.GetNumberCols()
+ if self.next_resize_column < cols:
+ self.grid.AutoSizeColumn(self.next_resize_column, setAsMin=False)
+ self.panel.Layout()
+ self.grid.ForceRefresh()
+ self.next_resize_column += 1
+ if self.next_resize_column < cols:
+ self.resize_timer.Start(100, oneShot=True)
+
+ def onRightClickCell(self, event):
+ if not self.grid.IsInSelection(event.GetRow(), event.GetCol()):
+ self.grid.SetGridCursor(event.GetRow(), event.GetCol())
+ self.grid.SelectBlock(
+ event.GetRow(), event.GetCol(),
+ event.GetRow(), event.GetCol(),
+ addToSelected=False)
+ menu = self.gui.resources.LoadMenu('grid_popup')
+ for name in ['show_selected', 'resize', 'cut',
+ 'copy', 'paste', 'clear']:
+ id = xrc.XRCID(name)
+ menu.Bind(wx.EVT_MENU, getattr(self, 'on_menu_%s' % name), id=id)
+ self.grid.PopupMenu(menu, event.GetPosition())
+ menu.Destroy()
+
+ def onRightClickLabel(self, event):
+ row = event.GetRow()
+ if row < 0:
+ return
+ if not self.grid.IsInSelection(event.GetRow(), 0):
+ self.grid.SelectRow(row)
+ menu = wx.Menu()
+ menu.Append(xrc.XRCID('show_selected'), "&Show selected directive(s)")
+ for name in ['show_selected']:
+ id = xrc.XRCID(name)
+ menu.Bind(wx.EVT_MENU, getattr(self, 'on_menu_%s' % name), id=id)
+ self.grid.PopupMenu(menu, event.GetPosition())
+ menu.Destroy()
+
+ def onSelectCell(self, event):
+ directive = self.table.directives[event.GetRow()]
+ self.gui.ensureDirectiveVisible(directive)
+ event.Skip()
+
+ def on_menu_show_selected(self, event):
+ # Make a dictionary containing all rows with anything selected
+ rows = {}
+ for (top, left), (bottom, right) in zip(
+ self.grid.GetSelectionBlockTopLeft(),
+ self.grid.GetSelectionBlockBottomRight()):
+ for row in range(top, bottom + 1):
+ rows[row] = True
+ for row, col in self.grid.GetSelectedCells():
+ rows[row] = True
+ for row in self.grid.GetSelectedRows():
+ rows[row] = True
+
+ selected = []
+ for row in rows.keys():
+ selected.append(self.table.directives[row])
+ self.gui.selectDirectives(selected)
+
+ def on_menu_resize(self, event):
+ self.resizeColumns()
+
+ def on_menu_cut(self, event):
+ pass
+
+ def on_menu_copy(self, event):
+ pass
+
+ def on_menu_paste(self, event):
+ pass
+
+ def on_menu_clear(self, event):
+ pass
class PropertyGridTable(wx.grid.PyGridTableBase):
Modified: z3/zopejam/trunk/src/zopejam/resources.xrc
==============================================================================
--- z3/zopejam/trunk/src/zopejam/resources.xrc (original)
+++ z3/zopejam/trunk/src/zopejam/resources.xrc Thu Jul 21 17:00:40 2005
@@ -733,4 +733,34 @@
</object>
<bg>#000000</bg>
</object>
+ <object class="wxMenu" name="grid_popup">
+ <label></label>
+ <object class="wxMenuItem" name="show_selected">
+ <label>&Show selected directive(s)</label>
+ </object>
+ <object class="wxMenuItem" name="resize">
+ <label>&Resize columns</label>
+ </object>
+ <object class="separator"/>
+ <object class="wxMenuItem" name="cut">
+ <label>Cut</label>
+ <bitmap>icons/menu/editcut.png</bitmap>
+ <accel>Ctrl+X</accel>
+ </object>
+ <object class="wxMenuItem" name="copy">
+ <label>&Copy</label>
+ <bitmap>icons/menu/editcopy.png</bitmap>
+ <accel>Ctrl+C</accel>
+ </object>
+ <object class="wxMenuItem" name="paste">
+ <label>&Paste</label>
+ <bitmap>icons/menu/editpaste.png</bitmap>
+ <accel>Ctrl+V</accel>
+ </object>
+ <object class="wxMenuItem" name="clear">
+ <label>C&lear</label>
+ <bitmap>icons/menu/editdelete.png</bitmap>
+ <accel>Ctrl+D</accel>
+ </object>
+ </object>
</resource>
More information about the z3-checkins
mailing list