1
#-----------------------------------------------------------------------------
2
# Name: EditorExplorer.py
5
# Author: Riaan Booysem
8
# RCS-ID: $Id: EditorExplorer.py,v 1.8 2004/08/16 13:22:00 riaan Exp $
9
# Copyright: (c) 2002 - 2004
11
#-----------------------------------------------------------------------------
14
from wxPython import wx
16
import Preferences, Utils
19
from Models import EditorHelper
23
[wxID_EDTGOTO, wxID_EDTRELOAD, wxID_EDTCLOSE, wxID_EDTCLOSEALL, wxID_EDTMOVEUP,
24
wxID_EDTMOVEDOWN, wxID_EDTCOPYPATH] = Utils.wxNewIds(7)
26
class EditorController(ExplorerNodes.Controller):
27
closeBmp = 'Images/Editor/Close.png'
28
moveUpBmp = 'Images/Shared/up.png'
29
moveDownBmp = 'Images/Shared/down.png'
31
def __init__(self, editor, list, inspector, controllers):
32
ExplorerNodes.Controller.__init__(self, editor)
34
self.menu = wx.wxMenu()
36
self.editorMenuDef = [
37
(wxID_EDTGOTO, 'Goto', self.OnGotoModel, '-'),
39
(wxID_EDTRELOAD, 'Refresh', self.OnReloadItems, '-'),
41
(wxID_EDTCLOSE, 'Close', self.OnCloseModels, self.closeBmp),
42
(wxID_EDTCLOSEALL, 'Close all', self.OnCloseAllModels, '-'),
44
(wxID_EDTMOVEUP, 'Move up', self.OnMoveModelUp, self.moveUpBmp),
45
(wxID_EDTMOVEDOWN, 'Move down', self.OnMoveModelDown, self.moveDownBmp),
47
(wxID_EDTCOPYPATH, 'Copy filepath(s) to clipboard', self.OnCopyPath, '-'),
50
self.setupMenu(self.menu, self.list, self.editorMenuDef)
51
self.toolbarMenus = [self.editorMenuDef]
54
self.editorMenuDef = ()
55
self.toolbarMenus = ()
58
def editorUpdateNotify(self, info=''):
61
def OnReloadItems(self, event=None):
63
self.list.refreshCurrent()
65
def OnCloseModels(self, event):
67
ms = self.list.getMultiSelection()
68
nodes = self.getNodesForSelection(ms)
70
self.editor.closeModulePage(node.modulePage)
72
def moveModel(self, node, idx, direc):
73
page = self.editor.tabs.GetPage(idx)
74
text = self.editor.tabs.GetPageText(idx)
75
imgIdx = self.editor.tabs.GetPageImage(idx)
76
self.editor.tabs.RemovePage(idx)
77
self.editor.tabs.InsertPage(idx+direc, page, text, false, imgIdx)
80
for modPage in self.editor.modules.values():
81
if modPage.tIdx == idx:
82
modPage.tIdx = idx + direc
83
elif modPage.tIdx == idx + direc:
86
self.list.refreshCurrent()
87
self.list.selectItemByIdx(idx+direc-1)
89
def OnMoveModelUp(self, event):
91
ms = self.list.getMultiSelection()
92
nodes = self.getNodesForSelection(ms)
94
wx.wxLogError('Can only move 1 at a time')
97
idx = node.modulePage.tIdx
99
wx.wxLogError('Already at the beginning')
101
self.moveModel(node, idx, -1)
103
def OnMoveModelDown(self, event):
105
ms = self.list.getMultiSelection()
106
nodes = self.getNodesForSelection(ms)
108
wx.wxLogError('Can only move 1 at a time')
111
idx = node.modulePage.tIdx
112
if idx == self.editor.tabs.GetPageCount() -1:
113
wx.wxLogError('Already at the end')
115
self.moveModel(node, idx, 1)
117
def OnGotoModel(self, event):
119
ms = self.list.getMultiSelection()
120
nodes = self.getNodesForSelection(ms)
122
wx.wxLogError('Can only goto 1 at a time')
124
nodes[0].open(self.editor)
126
def OnCopyPath(self, event):
128
ms = self.list.getMultiSelection()
129
nodes = self.getNodesForSelection(ms)
132
paths.append(node.resourcepath)
133
Utils.writeTextToClipboard(os.linesep.join(paths))
135
def OnCloseAllModels(self, event):
137
for node in self.list.items:
138
self.editor.closeModulePage(node.modulePage)
140
class OpenModelsNode(ExplorerNodes.ExplorerNode):
141
protocol = 'boa.open-models'
142
def __init__(self, editor, parent):
143
ExplorerNodes.ExplorerNode.__init__(self, 'Editor', '', None,
144
EditorHelper.imgOpenEditorModels, None, {})
149
def notifyBeginLabelEdit(self, event):
152
def isFolderish(self):
155
def createChildNode(self, name, modulePage):
156
return OpenModelItemNode(modulePage.updatePageName(), name, modulePage, self)
161
for name, modPage in self.editor.modules.items():
162
mods.append( (modPage.tIdx, name, modPage) )
165
for idx, name, modPage in mods:
166
res.append(self.createChildNode(name, modPage))
170
class OpenModelItemNode(ExplorerNodes.ExplorerNode):
171
protocol = 'boa.model'
172
def __init__(self, name, resourcepath, modulePage, parent):
173
ExplorerNodes.ExplorerNode.__init__(self, name, resourcepath, None,
174
modulePage.model.imgIdx, parent, {})
175
self.modulePage = modulePage
176
self.model = modulePage.model
178
def notifyBeginLabelEdit(self, event):
181
def isFolderish(self):
184
def open(self, editor):
185
if not os.path.split(self.resourcepath)[0]:
186
# unsaved, manually get info and switch to page
187
modPage = editor.modules[self.resourcepath]
189
model = modPage.model
190
ctrlr = editor.getControllerFromModel(model)
193
return editor.openOrGotoModule(self.resourcepath)
196
class ModelViewItemNode(ExplorerNodes.ExplorerNode):
197
protocol = 'boa.view'
198
def __init__(self, name, model, parent):
199
ExplorerNodes.ExplorerNode.__init__(self, name, '', None,
200
EditorHelper.imgFolder, parent, {})
203
def notifyBeginLabelEdit(self, event):
206
def isFolderish(self):
211
for item in self.model.views[self.name].explore():
212
res.append(ViewItemNode(item, '', None, -1, self, {}))
215
class ViewItemNode(ExplorerNodes.ExplorerNode):
216
def open(self, editor):
219
#-------------------------------------------------------------------------------
221
wxID_NEWCREATE = wx.wxNewId()
222
class EditorNewController(ExplorerNodes.Controller):
223
createBmp = 'Images/Editor/Close.png'
225
def __init__(self, editor, list):
226
ExplorerNodes.Controller.__init__(self, editor)
228
self.menu = wx.wxMenu()
230
self.editorMenuDef = ( (wxID_NEWCREATE, 'Create', self.OnCreate, '-'), )
232
self.setupMenu(self.menu, self.list, self.editorMenuDef)
233
self.toolbarMenus = [self.editorMenuDef]
236
self.editorMenuDef = ()
237
self.toolbarMenus = ()
240
def OnCreate(self, event):
243
class NewPaletteNode(ExplorerNodes.ExplorerNode):
244
protocol = 'boa.new-palette'
245
def __init__(self, editor, parent):
246
ExplorerNodes.ExplorerNode.__init__(self, 'Editor', '', None,
247
EditorHelper.imgOpenEditorModels, None, {})
252
def isFolderish(self):
255
def createChildNode(self, name, modulePage):
256
return NewPaletteItemNode(modulePage.updatePageName(), name, modulePage, self)
261
for name, modPage in self.editor.modules.items():
262
mods.append( (modPage.tIdx, name, modPage) )
265
for idx, name, modPage in mods:
266
res.append(self.createChildNode(name, modPage))
270
class NewPaletteItemNode(ExplorerNodes.ExplorerNode):
271
protocol = 'boa.new-item'
272
def __init__(self, name, resourcepath, palette, newitem):
273
ExplorerNodes.ExplorerNode.__init__(self, name, resourcepath, None,
274
modulePage.model.imgIdx, parent, {})
276
def notifyBeginLabelEdit(self, event):
279
def isFolderish(self):
282
#-------------------------------------------------------------------------------
283
ExplorerNodes.register(OpenModelsNode, controller=EditorController)
1
#-----------------------------------------------------------------------------
2
# Name: EditorExplorer.py
5
# Author: Riaan Booysem
8
# RCS-ID: $Id: EditorExplorer.py,v 1.10 2005/05/13 20:41:59 riaan Exp $
9
# Copyright: (c) 2002 - 2005
11
#-----------------------------------------------------------------------------
16
import Preferences, Utils
19
from Models import EditorHelper
21
[wxID_EDTGOTO, wxID_EDTRELOAD, wxID_EDTCLOSE, wxID_EDTCLOSEALL, wxID_EDTMOVEUP,
22
wxID_EDTMOVEDOWN, wxID_EDTCOPYPATH] = Utils.wxNewIds(7)
24
class EditorController(ExplorerNodes.Controller):
25
closeBmp = 'Images/Editor/Close.png'
26
moveUpBmp = 'Images/Shared/up.png'
27
moveDownBmp = 'Images/Shared/down.png'
29
def __init__(self, editor, list, inspector, controllers):
30
ExplorerNodes.Controller.__init__(self, editor)
34
self.editorMenuDef = [
35
(wxID_EDTGOTO, 'Goto', self.OnGotoModel, '-'),
37
(wxID_EDTRELOAD, 'Refresh', self.OnReloadItems, '-'),
39
(wxID_EDTCLOSE, 'Close', self.OnCloseModels, self.closeBmp),
40
(wxID_EDTCLOSEALL, 'Close all', self.OnCloseAllModels, '-'),
42
(wxID_EDTMOVEUP, 'Move up', self.OnMoveModelUp, self.moveUpBmp),
43
(wxID_EDTMOVEDOWN, 'Move down', self.OnMoveModelDown, self.moveDownBmp),
45
(wxID_EDTCOPYPATH, 'Copy filepath(s) to clipboard', self.OnCopyPath, '-'),
48
self.setupMenu(self.menu, self.list, self.editorMenuDef)
49
self.toolbarMenus = [self.editorMenuDef]
52
self.editorMenuDef = ()
53
self.toolbarMenus = ()
56
def editorUpdateNotify(self, info=''):
59
def OnReloadItems(self, event=None):
61
self.list.refreshCurrent()
63
def OnCloseModels(self, event):
65
ms = self.list.getMultiSelection()
66
nodes = self.getNodesForSelection(ms)
68
self.editor.closeModulePage(node.modulePage)
70
def moveModel(self, node, idx, direc):
71
page = self.editor.tabs.GetPage(idx)
72
text = self.editor.tabs.GetPageText(idx)
73
imgIdx = self.editor.tabs.GetPageImage(idx)
74
self.editor.tabs.RemovePage(idx)
75
self.editor.tabs.InsertPage(idx+direc, page, text, False, imgIdx)
78
for modPage in self.editor.modules.values():
79
if modPage.tIdx == idx:
80
modPage.tIdx = idx + direc
81
elif modPage.tIdx == idx + direc:
84
self.list.refreshCurrent()
85
self.list.selectItemByIdx(idx+direc-1)
87
def OnMoveModelUp(self, event):
89
ms = self.list.getMultiSelection()
90
nodes = self.getNodesForSelection(ms)
92
wx.LogError('Can only move 1 at a time')
95
idx = node.modulePage.tIdx
97
wx.LogError('Already at the beginning')
99
self.moveModel(node, idx, -1)
101
def OnMoveModelDown(self, event):
103
ms = self.list.getMultiSelection()
104
nodes = self.getNodesForSelection(ms)
106
wx.LogError('Can only move 1 at a time')
109
idx = node.modulePage.tIdx
110
if idx == self.editor.tabs.GetPageCount() -1:
111
wx.LogError('Already at the end')
113
self.moveModel(node, idx, 1)
115
def OnGotoModel(self, event):
117
ms = self.list.getMultiSelection()
118
nodes = self.getNodesForSelection(ms)
120
wx.LogError('Can only goto 1 at a time')
122
nodes[0].open(self.editor)
124
def OnCopyPath(self, event):
126
ms = self.list.getMultiSelection()
127
nodes = self.getNodesForSelection(ms)
130
paths.append(node.resourcepath)
131
Utils.writeTextToClipboard(os.linesep.join(paths))
133
def OnCloseAllModels(self, event):
135
for node in self.list.items:
136
self.editor.closeModulePage(node.modulePage)
138
class OpenModelsNode(ExplorerNodes.ExplorerNode):
139
protocol = 'boa.open-models'
140
def __init__(self, editor, parent):
141
ExplorerNodes.ExplorerNode.__init__(self, 'Editor', '', None,
142
EditorHelper.imgOpenEditorModels, None, {})
147
def notifyBeginLabelEdit(self, event):
150
def isFolderish(self):
153
def createChildNode(self, name, modulePage):
154
return OpenModelItemNode(modulePage.updatePageName(), name, modulePage, self)
159
for name, modPage in self.editor.modules.items():
160
mods.append( (modPage.tIdx, name, modPage) )
163
for idx, name, modPage in mods:
164
res.append(self.createChildNode(name, modPage))
168
class OpenModelItemNode(ExplorerNodes.ExplorerNode):
169
protocol = 'boa.model'
170
def __init__(self, name, resourcepath, modulePage, parent):
171
ExplorerNodes.ExplorerNode.__init__(self, name, resourcepath, None,
172
modulePage.model.imgIdx, parent, {})
173
self.modulePage = modulePage
174
self.model = modulePage.model
176
def notifyBeginLabelEdit(self, event):
179
def isFolderish(self):
182
def open(self, editor):
183
if not os.path.split(self.resourcepath)[0]:
184
# unsaved, manually get info and switch to page
185
modPage = editor.modules[self.resourcepath]
187
model = modPage.model
188
ctrlr = editor.getControllerFromModel(model)
191
return editor.openOrGotoModule(self.resourcepath)
194
class ModelViewItemNode(ExplorerNodes.ExplorerNode):
195
protocol = 'boa.view'
196
def __init__(self, name, model, parent):
197
ExplorerNodes.ExplorerNode.__init__(self, name, '', None,
198
EditorHelper.imgFolder, parent, {})
201
def notifyBeginLabelEdit(self, event):
204
def isFolderish(self):
209
for item in self.model.views[self.name].explore():
210
res.append(ViewItemNode(item, '', None, -1, self, {}))
213
class ViewItemNode(ExplorerNodes.ExplorerNode):
214
def open(self, editor):
217
#-------------------------------------------------------------------------------
219
wxID_NEWCREATE = wx.NewId()
220
class EditorNewController(ExplorerNodes.Controller):
221
createBmp = 'Images/Editor/Close.png'
223
def __init__(self, editor, list):
224
ExplorerNodes.Controller.__init__(self, editor)
226
self.menu = wx.Menu()
228
self.editorMenuDef = ( (wxID_NEWCREATE, 'Create', self.OnCreate, '-'), )
230
self.setupMenu(self.menu, self.list, self.editorMenuDef)
231
self.toolbarMenus = [self.editorMenuDef]
234
self.editorMenuDef = ()
235
self.toolbarMenus = ()
238
def OnCreate(self, event):
241
class NewPaletteNode(ExplorerNodes.ExplorerNode):
242
protocol = 'boa.new-palette'
243
def __init__(self, editor, parent):
244
ExplorerNodes.ExplorerNode.__init__(self, 'Editor', '', None,
245
EditorHelper.imgOpenEditorModels, None, {})
250
def isFolderish(self):
253
def createChildNode(self, name, modulePage):
254
return NewPaletteItemNode(modulePage.updatePageName(), name, modulePage, self)
259
for name, modPage in self.editor.modules.items():
260
mods.append( (modPage.tIdx, name, modPage) )
263
for idx, name, modPage in mods:
264
res.append(self.createChildNode(name, modPage))
268
class NewPaletteItemNode(ExplorerNodes.ExplorerNode):
269
protocol = 'boa.new-item'
270
def __init__(self, name, resourcepath, palette, newitem):
271
ExplorerNodes.ExplorerNode.__init__(self, name, resourcepath, None,
272
modulePage.model.imgIdx, parent, {})
274
def notifyBeginLabelEdit(self, event):
277
def isFolderish(self):
280
#-------------------------------------------------------------------------------
281
ExplorerNodes.register(OpenModelsNode, controller=EditorController)