Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamEdit.activity/Edit/rm/PageBankView.py
blob: fedadef9a420008b68e1be815be021da55d258a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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