Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamEdit.activity/Edit/rm/PageBankView.py
diff options
context:
space:
mode:
Diffstat (limited to 'TamTamEdit.activity/Edit/rm/PageBankView.py')
-rw-r--r--TamTamEdit.activity/Edit/rm/PageBankView.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/TamTamEdit.activity/Edit/rm/PageBankView.py b/TamTamEdit.activity/Edit/rm/PageBankView.py
new file mode 100644
index 0000000..fedadef
--- /dev/null
+++ b/TamTamEdit.activity/Edit/rm/PageBankView.py
@@ -0,0 +1,85 @@
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+
+from GUI.GUIConstants import GUIConstants
+from GUI.Core.PageView import PageView
+
+class PageBankView( gtk.Frame ):
+
+ NO_PAGE = -1
+
+ def __init__( self, selectPageCallback, pageDropCallback ):
+ gtk.Frame.__init__( self )
+ self.table = gtk.Table( 1, GUIConstants.NUMBER_OF_PAGE_BANK_COLUMNS )
+ self.add( self.table )
+ self.drag_dest_set( gtk.DEST_DEFAULT_ALL, [ ( "tune page", gtk.TARGET_SAME_APP, 11 )], gtk.gdk.ACTION_COPY|gtk.gdk.ACTION_MOVE )
+ self.connect( "drag_data_received", self.dragDataReceived )
+ self.selectPageCallback = selectPageCallback
+ self.pageDropCallback = pageDropCallback
+ self.selectedPageIds = set([])
+ self.pageIndexDictionary = {}
+ self.pageViews = {}
+
+ def dragDataReceived( self, widget, context, x, y, selectionData, info, time):
+ self.pageDropCallback( selectionData.data )
+
+ def addPage( self, pageId, invokeCallback = True ):
+ pageIndex = len( self.pageViews.keys() )
+ self.pageIndexDictionary[ pageIndex ] = pageId
+
+ #TODO: resize table to suit number of pages?
+ #if pageIndex > ( self.table.n-rows * self.table.n_columns ):
+ # self.table.resize( self.table.n_rows + 1, self.table.n_columns )
+
+ pageView = PageView( pageIndex, self.selectPage, True )
+ self.pageViews[ pageIndex ] = pageView
+
+ columnIndex = pageIndex % GUIConstants.NUMBER_OF_PAGE_BANK_COLUMNS
+ rowIndex = int( pageIndex / GUIConstants.NUMBER_OF_PAGE_BANK_COLUMNS )
+ self.table.attach( pageView, columnIndex, columnIndex + 1, rowIndex, rowIndex + 1, gtk.SHRINK, gtk.SHRINK )
+
+ self.updateSize( pageView )
+
+ pageView.drag_source_set( gtk.gdk.BUTTON1_MASK,
+ [ ( "bank page", gtk.TARGET_SAME_APP, 10 ) ],
+ gtk.gdk.ACTION_COPY )
+
+ self.selectPage( pageId, True, invokeCallback )
+
+ pageView.show()
+
+ def set_size_request( self, width, height ):
+ gtk.Frame.set_size_request( self, width, height )
+ self.table.set_size_request( width, height )
+ for pageId in self.pageViews.keys():
+ self.updateSize( self.pageViews[ pageId ] )
+
+ def updateSize( self, pageView ):
+ pageView.set_size_request( self.get_allocation().width / GUIConstants.NUMBER_OF_PAGE_BANK_COLUMNS,
+ GUIConstants.PAGE_HEIGHT - 1 )
+
+ def selectPage( self, selectedPageId, invokeCallback = True, deselectOthers = True ):
+ if deselectOthers:
+ for pageId in self.pageViews.keys():
+ self.pageViews[ pageId ].setSelected( pageId == selectedPageId )
+ if pageId != selectedPageId:
+ self.selectedPageIds.discard( pageId )
+ else:
+ self.selectedPageIds.add( pageId )
+ #nb: pageId might be NO_PAGE, and selectedPageIds can be empty here
+
+ else:
+ self.pageViews[ selectedPageId ].toggleSelected()
+ if self.pageViews[ selectedPageId ].selected:
+ self.selectedPageIds.add( selectedPageId )
+ else:
+ self.selectedPageIds.discard( selectedPageId )
+
+ if invokeCallback:
+ self.selectPageCallback( selectedPageId )
+
+ def getSelectedPageIds( self ):
+ rval = filter( lambda id: self.pageViews[id].selected == True, self.pageViews.keys())
+ return rval
+