-
-"""
-Example showing how to make a grid a drop target for files.
-
-"""
-
-import wx
-import wx.grid as gridlib
-
-#---------------------------------------------------------------------------
-# Set VIRTUAL to 1 to use a virtual grid
-VIRTUAL = 1
-#---------------------------------------------------------------------------
-
-class GridFileDropTarget(wx.FileDropTarget):
- def __init__(self, grid):
- wx.FileDropTarget.__init__(self)
- self.grid = grid
-
- def OnDropFiles(self, x, y, filenames):
- # the x,y coordinates here are Unscrolled coordinates. They must be changed
- # to scrolled coordinates.
- x, y = self.grid.CalcUnscrolledPosition(x, y)
-
- # now we need to get the row and column from the grid
- # but we need to first remove the RowLabel and ColumnLabel
- # bounding boxes
- # Why this isn't done for us, I'll never know...
- x = x - self.grid.GetGridRowLabelWindow().GetRect().width
- y = y - self.grid.GetGridColLabelWindow().GetRect().height
- col = self.grid.XToCol(x)
- row = self.grid.YToRow(y)
-
- if row > -1 and col > -1:
- self.grid.SetCellValue(row, col, filenames[0])
- self.grid.AutoSizeColumn(col)
- self.grid.Refresh()
-
-
-
-class FooTable(gridlib.PyGridTableBase):
- def __init__(self):
- gridlib.PyGridTableBase.__init__(self)
- self.dropTargets = {(0,0):"Drag",
- (1,0):"A",
- (2,0):"File",
- (3,0):"To",
- (4,0):"A",
- (5,0):"Cell"}
- def GetNumberCols(self):
- return 100
- def GetNumberRows(self):
- return 100
- def GetValue(self, row, col):
- return self.dropTargets.get((row, col), "")
-
-
-class SimpleGrid(gridlib.Grid):
- def __init__(self, parent, log):
- gridlib.Grid.__init__(self, parent, -1)
- self.log = log
- self.moveTo = None
-
- if VIRTUAL:
- self.table = FooTable()
- self.SetTable(self.table)
- else:
- self.CreateGrid(25, 25)
-
- # set the drag and drop target
- dropTarget = GridFileDropTarget(self)
- self.SetDropTarget(dropTarget)
- self.EnableDragRowSize()
- self.EnableDragColSize()
-
- def SetCellValue(self, row, col, value):
- if VIRTUAL:
- self.table.dropTargets[row, col] = value
- else:
- gridlib.Grid.SetCellValue(self, row, col, value)
-
-
-class TestFrame(wx.Frame):
- def __init__(self, parent, log):
- wx.Frame.__init__(self, parent, -1, "DragAndDrop Grid", size=(640,480))
- grid = SimpleGrid(self, log)
-
-
-
-#---------------------------------------------------------------------------
-
-if __name__ == '__main__':
- import sys
- app = wx.PySimpleApp()
- frame = TestFrame(None, sys.stdout)
- frame.Show(True)
- app.MainLoop()
-
-
-#---------------------------------------------------------------------------
-
-
-
-