1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """
24 This module contains classes that allow the user to select tiles from tile sets
25 """
26
27 __docformat__ = "epytext"
28
29 import logging
30 import os
31
32 import gtk
33 import cairo
34
35 import mapcontroller
36 import tilegrid
37 import editortools
38 import graphics
39
41 """
42 Manages TilePalette instances.
43 Outside code should use the widget returned from getWidget
44 """
45
47 """
48 @type controller: MapController
49 @param controller: the map controller
50 """
51 mapcontroller.MapListener.__init__(self, controller)
52
53
54 self.tileNotebook = gtk.Notebook()
55 self.tileNotebook.set_scrollable(True)
56
57
58 self.__palettes = []
59
60
61
62 self.openButton = gtk.Button()
63 self.openButton.set_image(gtk.image_new_from_stock(gtk.STOCK_OPEN,
64 gtk.ICON_SIZE_MENU))
65 self.openButton.set_relief(gtk.RELIEF_NONE)
66 self.openButton.connect("clicked", self.tilePalleteOpen)
67 self.openButton.set_sensitive(False)
68
69
70
71 scrolledWindow = gtk.ScrolledWindow()
72 scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
73 self.tileNotebook.append_page(scrolledWindow, self.openButton)
74
76 """
77 Gets the PaletteManager ready for use. This is called when a file
78 is opened
79 sel = the selection to use
80 """
81 self.openButton.set_sensitive(True)
82
84 """
85 The inverse of initialize. This is called when the map file is closed.
86 """
87 self.openButton.set_sensitive(False)
88 self.closeAll()
89
92
100
102 for palette in self.__palettes:
103 palette.toggleGrid()
104
106 """ Closes a tab in the notebook """
107 index = self.tileNotebook.page_num(tilePalette)
108 self.tileNotebook.remove_page(index)
109
111 """ This is called when self.openButton is clicked """
112
113 dialog = gtk.FileChooserDialog("Open Tileset",
114 self.tileNotebook.get_toplevel(), gtk.FILE_CHOOSER_ACTION_OPEN,
115 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
116 gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT))
117
118
119
120
121 filter = graphics.getFileFilter()
122 dialog.add_filter(filter)
123
124 response = dialog.run()
125 if response == gtk.RESPONSE_ACCEPT:
126 self.addTileSet(dialog.get_filename())
127 dialog.destroy()
128
130 """Closes all the palettes """
131
132 for i in range(self.tileNotebook.get_n_pages() - 1):
133 self.tileNotebook.remove_page(i)
134 self.__palettes = []
135
137 """ Opens the file specified in fileName in a TilePalette """
138
139 tabCloseButton = gtk.Button()
140 tabCloseButton.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE,
141 gtk.ICON_SIZE_MENU))
142 tabCloseButton.set_relief(gtk.RELIEF_NONE)
143 tabLabel = gtk.Label(os.path.basename(fileName)[0:6] + "..." )
144 tabBox = gtk.HBox()
145 tabBox.pack_start(tabLabel)
146 tabBox.pack_end(tabCloseButton)
147 tabBox.show_all()
148
149 palette = TilePalette(self.getController(), fileName)
150 self.__palettes.append(palette)
151 scrolledWindow = gtk.ScrolledWindow(None, None)
152 scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
153 scrolledWindow.add_with_viewport(palette.getWidget())
154 self.tileNotebook.prepend_page(scrolledWindow, tabBox)
155 tabCloseButton.connect("clicked", self.closeTilePalette,
156 scrolledWindow)
157 self.tileNotebook.show_all()
158
159 self.tileNotebook.set_current_page(0)
160
161
162 -class TilePalette(tilegrid.TileGrid, mapcontroller.MapListener):
163 """
164 Class for allowing images to be used as tile sets. Handles selection
165 and other related tasks
166 """
167
168 - def __init__(self, controller, fileName):
186
188 """ See TileGrid.specialRedraw """
189 context.set_source_surface(self.tileImage)
190 context.paint()
191