[Commits] (capps) First pass at in-place editing. Still need to
clean up fonts, control size and magic numbers.
commits at osafoundation.org
commits at osafoundation.org
Wed Feb 9 13:39:16 PST 2005
Commit by: capps
Modified files:
chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py 1.28 1.29
chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py 1.18 1.19
Log message:
First pass at in-place editing. Still need to clean up fonts, control size and magic numbers.
ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py.diff?r1=text&tr1=1.28&r2=text&tr2=1.29
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py.diff?r1=text&tr1=1.18&r2=text&tr2=1.19
Index: chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py
diff -u chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py:1.28 chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py:1.29
--- chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py:1.28 Sat Feb 5 13:51:33 2005
+++ chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py Wed Feb 9 13:39:15 2005
@@ -1,8 +1,8 @@
""" Canvas for calendaring blocks
"""
-__version__ = "$Revision: 1.28 $"
-__date__ = "$Date: 2005/02/05 21:51:33 $"
+__version__ = "$Revision: 1.29 $"
+__date__ = "$Date: 2005/02/09 21:39:15 $"
__copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -240,6 +240,8 @@
self.fixed = True
def OnInit(self):
+ self.editor = wxInPlaceEditor(self, -1)
+
# Setup the navigation buttons
today = DateTime.today()
@@ -479,6 +481,15 @@
item.startTime.minute))
self.Refresh()
+ def GrabFocusHack(self):
+ self.editor.Hide()
+
+ def OnEditItem(self, box):
+ position = box.bounds.GetPosition()
+ size = box.bounds.GetSize()
+
+ self.editor.SetItem(box.getItem(), position, size)
+
def getDateTimeFromPosition(self, position):
startDay = self.parent.blockItem.rangeStart
# @@@ hack hack bug fix (Bug#1831)
@@ -503,6 +514,8 @@
self.Refresh()
def OnInit(self):
+ self.editor = wxInPlaceEditor(self, -1)
+
# @@@ rationalize drawing calculations...
self.SetVirtualSize((self.GetVirtualSize().width, 40*24))
self.SetScrollRate(0, 10)
@@ -530,7 +543,7 @@
# Paint the entire background
dc.SetBrush(wx.WHITE_BRUSH)
- dc.DrawRectangle(0, 0, self.size.width, self.size.height)
+ dc.DrawRectangle(0, 0, self.size.width, self.size.height + 10)
# Set text properties for legend
dc.SetTextForeground(wx.Colour(153, 153, 153))
@@ -663,6 +676,18 @@
# handle mouse related actions: move, resize, create, select
+ def GrabFocusHack(self):
+ self.editor.Hide()
+
+ def OnEditItem(self, box):
+ position = self.CalcScrolledPosition(box.bounds.GetPosition())
+ size = box.bounds.GetSize()
+
+ textPos = wx.Point(position.x + 8, position.y + 15)
+ textSize = wx.Size(size.width - 13, size.height - 20)
+
+ self.editor.SetItem(box.getItem(), textPos, textSize)
+
def OnSelectItem(self, item):
self.parent.blockItem.selection = item
self.parent.blockItem.postSelectItemBroadcast()
@@ -749,6 +774,7 @@
def initAttributes(self):
if not self.hasLocalAttributeValue('rangeStart'):
+ self.dayMode = False
self.setRange(DateTime.today())
if not self.hasLocalAttributeValue('rangeIncrement'):
self.rangeIncrement = DateTime.RelativeDateTime(days=self.daysPerView)
@@ -770,8 +796,54 @@
else:
# otherwise, stick with the given date
self.rangeStart = date
- self.dayMode = False
- self.selectedDate = self.rangeStart
+
+ if self.dayMode:
+ self.selectedDate = date
+ else:
+ self.selectedDate = self.rangeStart
+
+class wxInPlaceEditor(wx.TextCtrl):
+ def __init__(self, *arguments, **keywords):
+ super(wxInPlaceEditor, self).__init__(style=wx.TE_PROCESS_ENTER | wx.NO_BORDER,
+ *arguments, **keywords)
+
+ self.item = None
+ self.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter)
+ self.Bind(wx.EVT_KILL_FOCUS, self.OnTextEnter)
+ self.Hide()
+
+ #self.editor.Bind(wx.EVT_CHAR, self.OnChar)
+ parent = self.GetParent()
+ parent.Bind(wx.EVT_SIZE, self.OnSize)
+
+ def OnTextEnter(self, event):
+ if self.item != None:
+ self.item.displayName = self.GetValue()
+ self.Hide()
+ event.Skip()
+
+ def OnChar(self, event):
+ if (event.KeyCode() == wx.WXK_RETURN):
+ if self.item != None:
+ self.item.displayName = self.GetValue()
+ self.Hide()
+ event.Skip()
+
+ def SetItem(self, item, position, size):
+ self.item = item
+ self.SetValue(item.displayName)
+
+ self.SetSize(size)
+ self.Move(position)
+
+ self.SetInsertionPointEnd()
+ self.SetSelection(-1, -1)
+ self.Show()
+ self.SetFocus()
+
+ def OnSize(self, event):
+ self.Hide()
+ event.Skip()
class wxMonthCanvas(CollectionCanvas.wxCollectionCanvas, CalendarEventHandler):
def __init__(self, *arguments, **keywords):
@@ -831,7 +903,7 @@
# Draw the background
dc.SetBrush(wx.WHITE_BRUSH)
- dc.DrawRectangle(0, 0, self.size.width, self.size.height)
+ dc.DrawRectangle(0, 0, self.size.width, self.size.height + 10)
# Set up pen for drawing the grid
dc.SetPen(wx.Pen(wx.Colour(204, 204, 204)))
@@ -983,6 +1055,8 @@
weekday=(DateTime.Sunday, 0))
return startDay
+
+
Index: chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py
diff -u chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py:1.18 chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py:1.19
--- chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py:1.18 Sat Feb 5 13:51:33 2005
+++ chandler/parcels/osaf/framework/blocks/calendar/CollectionCanvas.py Wed Feb 9 13:39:15 2005
@@ -1,8 +1,8 @@
""" Canvas block for displaying item collections
"""
-__version__ = "$Revision: 1.18 $"
-__date__ = "$Date: 2005/02/05 21:51:33 $"
+__version__ = "$Revision: 1.19 $"
+__date__ = "$Date: 2005/02/09 21:39:15 $"
__copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -294,7 +294,7 @@
middleRect = rect.width / 2
middleText = textExtent[0] / 2
dc.DrawText(text, rect.x + middleRect - middleText, rect.y)
-
+
# Mouse movement
def OnMouseEvent(self, event):
@@ -305,6 +305,14 @@
3. Resizing an item
"""
+ # @@@ wxPanels don't ever get the focus if they have a child window.
+ # This causes us problems as we are using controls as in-place editors.
+ # The current hack is to notice when the panel might want to grab
+ # focus from the control, and hide the control. Entertaining better
+ # solutions...
+ if event.ButtonDown():
+ self.GrabFocusHack()
+
position = event.GetPosition()
unscrolledPosition = self.CalcUnscrolledPosition(position)
@@ -349,7 +357,14 @@
# create an item on double click
if event.LeftDClick():
- self.OnCreateItem(unscrolledPosition, False)
+ hitBox = None
+ for box in self.canvasItemList:
+ if box.isHit(unscrolledPosition):
+ hitBox = box
+ if hitBox:
+ self.OnEditItem(hitBox)
+ else:
+ self.OnCreateItem(unscrolledPosition, False)
# handle selection if mouse down event, set up drag
elif event.LeftDown():
@@ -358,12 +373,6 @@
if box.isHit(unscrolledPosition):
hitBox = box
- if hoverResize and not hitBox:
- print "error condition, methinks"
- print unscrolledPosition
- for box in self.canvasItemList:
- print box.bounds, box._resizeTopBounds, box._resizeLowBounds
-
if hitBox:
self.OnSelectItem(hitBox.getItem())
self._dragBox = hitBox
@@ -407,6 +416,8 @@
self._dragStart = None
self._dragBox = None
+ def GrabFocusHack(self):
+ pass
def OnCreateItem(self, position, createOnDrag):
""" Creates a new item on the canvas.
@@ -467,6 +478,11 @@
Subclasses can define to handle dragging
"""
pass
+
+ def OnEditItem(self, hitBox):
+ """
+ """
+ pass
# Painting and drawing
More information about the Commits
mailing list