Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Edit/TuneInterface.py
diff options
context:
space:
mode:
authoramartin <olpc@localhost.localdomain>2007-02-09 01:58:04 (GMT)
committer amartin <olpc@localhost.localdomain>2007-02-09 01:58:04 (GMT)
commit34df2f3075dad2b2a91d3ad2f7d5201d73ad07b9 (patch)
tree5c218ac84f2dcd83759edef8af313075e6313524 /Edit/TuneInterface.py
parentdbf0e2d924840be32f60611ae7ae8e09111a8740 (diff)
track delete/duplicate, note delete/duplicate, page predrawing, misc bug fixes
Diffstat (limited to 'Edit/TuneInterface.py')
-rw-r--r--Edit/TuneInterface.py89
1 files changed, 59 insertions, 30 deletions
diff --git a/Edit/TuneInterface.py b/Edit/TuneInterface.py
index e6790b9..d1d5481 100644
--- a/Edit/TuneInterface.py
+++ b/Edit/TuneInterface.py
@@ -58,6 +58,8 @@ class TuneInterface( gtk.EventBox ):
self.dragMode = None
self.dropAt = -1
+ self.add_events(gtk.gdk.POINTER_MOTION_MASK|gtk.gdk.POINTER_MOTION_HINT_MASK)
+
self.connect( "size-allocate", self.size_allocated )
self.drawingArea.connect( "expose-event", self.draw )
self.connect( "button-press-event", self.handleButtonPress )
@@ -90,15 +92,23 @@ class TuneInterface( gtk.EventBox ):
def handleButtonPress( self, widget, event ):
ind = int(event.x-self.pageOffset)//self.pageSpacing
if ind >= self.noteDB.getPageCount():
- self.dragMode = self.DRAG_BLOCK
+ if self.dragMode != self.DRAG_MOVE:
+ self.dragMode = self.DRAG_BLOCK
return
if ind < 0: ind = 0
-
+
self.clickX = event.x
id = self.noteDB.getPageByIndex( ind )
-
- if event.type == gtk.gdk._2BUTTON_PRESS: # double click -> exclusive select
+
+ if event.state & gtk.gdk.BUTTON2_MASK:
+ # bring up properties or something
+ return
+
+ if event.type == gtk.gdk._3BUTTON_PRESS: # triple click -> select all
+ self.selectAll()
+ self.owner.displayPage( id )
+ elif event.type == gtk.gdk._2BUTTON_PRESS: # double click -> exclusive select
self.selectPage( id )
self.owner.displayPage( id )
else:
@@ -120,38 +130,54 @@ class TuneInterface( gtk.EventBox ):
self.owner.setContext( CONTEXT.PAGE )
def handleButtonRelease( self, widget, event ):
-
- if self.dragMode == self.DRAG_MOVE:
+ if self.dragMode == self.DRAG_MOVE \
+ and event.button == 1:
self.invalidate_rect( 0, 0, self.width, self.height ) # drop head
if self.dropAt > 0: after = self.noteDB.getPageByIndex( self.dropAt-1 )
else: after = False
self.noteDB.movePages( self.selectedIds, after )
+
self.dropAt = -1
- self.dragMode = None
+ self.dragMode = None
def handleMotion( self, widget, event ):
- if Config.ModKeys.ctrlDown and (self.dragMode == None or self.dragMode == self.DRAG_MOVE):
- self.dropAt = -1
- self.dragMode = self.DRAG_SELECT
-
- if self.dragMode == self.DRAG_SELECT: # select on drag
- ind = int(event.x-self.pageOffset)//self.pageSpacing
- if ind < self.noteDB.getPageCount(): self.selectPage( self.noteDB.getPageByIndex(ind), False )
- elif self.dragMode == self.DRAG_DESELECT: # deselect on drag
+ if event.is_hint:
+ x, y, state = self.window.get_pointer()
+ event.x = float(x)
+ event.y = float(y)
+ event.state = state
+
+ if event.state & gtk.gdk.BUTTON1_MASK: # clicking
+ if Config.ModKeys.ctrlDown and (self.dragMode == None or self.dragMode == self.DRAG_MOVE):
+ self.dropAt = -1
+ self.dragMode = self.DRAG_SELECT
+
+ if self.dragMode == self.DRAG_SELECT: # select on drag
+ ind = int(event.x-self.pageOffset)//self.pageSpacing
+ if ind < self.noteDB.getPageCount(): self.selectPage( self.noteDB.getPageByIndex(ind), False )
+ elif self.dragMode == self.DRAG_DESELECT: # deselect on drag
+ ind = int(event.x-self.pageOffset)//self.pageSpacing
+ if ind < self.noteDB.getPageCount(): self.deselectPage( self.noteDB.getPageByIndex(ind) )
+ elif self.dragMode == None and abs(self.clickX-event.x) > 20: # drag and drop
+ self.dragMode = self.DRAG_MOVE
+
+ if self.dragMode == self.DRAG_MOVE:
+ self.dropAt = int(event.x-self.pageOffset+Config.PAGE_THUMBNAIL_WIDTH_DIV2)//self.pageSpacing
+ c = self.noteDB.getPageCount()
+ if self.dropAt > c: self.dropAt = c
+ self.invalidate_rect( 0, 0, self.width, self.height )
+
+ else: # hovering
ind = int(event.x-self.pageOffset)//self.pageSpacing
- if ind < self.noteDB.getPageCount(): self.deselectPage( self.noteDB.getPageByIndex(ind) )
- elif self.dragMode == None and abs(self.clickX-event.x) > 20: # drag and drop
- self.dragMode = self.DRAG_MOVE
+ if 0 <= ind < self.noteDB.getPageCount():
+ id = self.noteDB.getPageByIndex(ind)
+ if id != self.displayedPage:
+ self.owner.predrawPage( id )
- if self.dragMode == self.DRAG_MOVE:
- self.dropAt = int(event.x-self.pageOffset+Config.PAGE_THUMBNAIL_WIDTH_DIV2)//self.pageSpacing
- c = self.noteDB.getPageCount()
- if self.dropAt > c: self.dropAt = c
- self.invalidate_rect( 0, 0, self.width, self.height )
def displayPage( self, id, scroll ):
if self.displayedPage == id: return -1
@@ -160,12 +186,12 @@ class TuneInterface( gtk.EventBox ):
if id not in self.selectedIds:
self.selectPage( id )
-
+
ind = self.noteDB.getPageIndex( id )
-
+
startX = self.pageOffset + ind*self.pageSpacing
stopX = startX + self.pageSpacing
-
+
self.invalidate_rect( 0, 0, self.width, self.height )
if scroll > startX: scroll = startX
@@ -176,7 +202,7 @@ class TuneInterface( gtk.EventBox ):
return -1
else:
scroll = stopX - self.baseWidth
-
+
return scroll
def selectPage( self, id, exclusive = True ):
@@ -213,11 +239,14 @@ class TuneInterface( gtk.EventBox ):
return True # page removed from the selection
+ def selectAll( self ):
+ self.selectedIds = self.noteDB.getTune()[:]
+ self.invalidate_rect( 0, 0, self.width, self.height )
+
def clearSelection( self ):
self.selectedIds = []
-
self.invalidate_rect( 0, 0, self.width, self.height )
-
+
def getSelectedIds( self ):
return self.selectedIds
@@ -249,7 +278,7 @@ class TuneInterface( gtk.EventBox ):
# Drawing
def draw( self, drawingArea, event ):
-
+
startX = event.area.x
startY = event.area.y
stopX = event.area.x + event.area.width