diff options
Diffstat (limited to 'TamTamEdit.activity/Edit/rm/PageBankView.py')
-rw-r--r-- | TamTamEdit.activity/Edit/rm/PageBankView.py | 85 |
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 + |