Robot Framework Integrated Development Environment (RIDE)
__init__.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 import wx
17 from wx import Colour
18 
19 from .editorcreator import EditorCreator
20 from ..pluginapi import (Plugin, ActionInfoCollection, TreeAwarePluginMixin)
21 from ..publish import (RideTreeSelection, RideNotebookTabChanging, RideNotebookTabChanged, RideSaving)
22 from ..publish.messages import RideDataFileRemoved
23 from ..utils import overrides
24 from ..widgets import PopupCreator
25 
26 
29 _EDIT = """
30 [Edit]
31 &Undo | Undo last modification | Ctrlcmd-Z
32 &Redo | Redo modification | Ctrlcmd-Y
33 ---
34 Cu&t | Cut | Ctrlcmd-X
35 &Copy | Copy | Ctrlcmd-C
36 &Paste | Paste | Ctrlcmd-V
37 &Insert | Insert | Shift-Ctrl-V
38 &Delete | Delete | Del
39 ---
40 Comment Rows | Comment selected rows | Ctrlcmd-3
41 CommentCells | Comment cells with # | Ctrlcmd-Shift-3
42 Uncomment Rows | Uncomment selected rows | Ctrlcmd-4
43 UncommentCells | Uncomment cells with # | Ctrlcmd-Shift-4
44 ---
45 Insert Cells | Insert Cells | Ctrlcmd-Shift-I
46 Delete Cells | Delete Cells | Ctrlcmd-Shift-D
47 Insert Rows | Insert Rows | Ctrlcmd-I
48 Delete Rows | Delete Rows | Ctrlcmd-D
49 [Tools]
50 Content Assistance (Ctrl-Space or Ctrl-Alt-Space) | Show possible keyword and variable completions | | | POSITION-70
51 """
52 
53 
54 
59 class EditorPlugin(Plugin, TreeAwarePluginMixin):
60  def __init__(self, application):
61  Plugin.__init__(self, application)
62  self._tab_tab = None
63  self._grid_popup_creator_grid_popup_creator = PopupCreator()
64  self._creator_creator = EditorCreator(self.register_editor)
65  self._editor_editor = None
66 
67  def enable(self):
68  self._creator_creator.register_editors()
69  self._show_editor_show_editor()
70  self.register_actions(
71  ActionInfoCollection(_EDIT, self._tab_tab, self._tab_tab))
72  self.subscribe(self.OnTreeItemSelectedOnTreeItemSelected, RideTreeSelection)
73  self.subscribe(self.OnTabChangedOnTabChanged, RideNotebookTabChanged)
74  self.subscribe(self.OnTabChangingOnTabChanging, RideNotebookTabChanging)
75  self.subscribe(self.OnSaveToModelOnSaveToModel, RideSaving)
76  self.subscribe(self.OnFileDeletedOnFileDeleted, RideDataFileRemoved)
77  self.add_self_as_tree_aware_plugin()
78 
79  def disable(self):
80  self.remove_self_from_tree_aware_plugins()
81  self.unsubscribe_all()
82  self.delete_tab(self._tab_tab)
83  wx.CallLater(500, self.unregister_actions())
84  self._tab_tab = None
85  self._editor_editor = None
86 
87  def is_focused(self):
88  return self.tab_is_visible(self._tab_tab)
89 
90  def highlight_cell(self, obj, row, column):
91  self.showshow()
92  self._editor_editor.highlight_cell(obj, row, column)
93 
94  def highlight(self, text):
95  self.showshow()
96  self._editor_editor.highlight(text)
97 
98  def show(self):
99  self.show_tab(self._tab_tab)
100 
101 
109  self._grid_popup_creator_grid_popup_creator.add_hook(hook)
110 
112  self._grid_popup_creator_grid_popup_creator.remove_hook(hook)
113 
114  def _show_editor(self):
115  if not self._tab_tab:
116  self._tab_tab = _EditorTab(self)
117  self.add_tab(self._tab_tab, 'Edit', allow_closing=False)
118  if self.is_focusedis_focused():
119  self._editor_editor = self._create_editor_create_editor()
120  self._tab_tab.show_editor(self._editor_editor)
121 
122  def _create_editor(self):
123  return self._creator_creator.editor_for(self, self._tab_tab, self.tree)
124 
125  def OnTreeItemSelected(self, message):
126  self._show_editor_show_editor()
127  if not self.is_focusedis_focused() and \
128  not self.is_focus_on_tree_aware_plugin() and \
129  (not message or not message.silent):
130  self._editor_editor = self._create_editor_create_editor()
131  self._tab_tab.show_editor(self._editor_editor)
132  self.showshow()
133  if self._editor_editor:
134  self._editor_editor.tree_item_selected(message.item)
135 
136  @overrides(Plugin)
138  if self._editor_editor and self._editor_editor.controller:
139  return self._editor_editor.controller.datafile
140  return Plugin.get_selected_datafile(self)
141 
142  def OnOpenEditor(self, event):
143  self._show_editor_show_editor()
144 
145  def OnTabChanged(self, message):
146  self._show_editor_show_editor()
147 
148  def OnTabChanging(self, message):
149  if 'Edit' in message.oldtab:
150  self._tab_tab.save()
151 
152  def OnSaveToModel(self, message):
153  if self._tab_tab:
154  self._tab_tab.save()
155 
156  def OnFileDeleted(self, message):
157  self._create_editor_create_editor()
158 
159 
160 class _EditorTab(wx.Panel):
161 
162  def __init__(self, plugin):
163  wx.Panel.__init__(self, plugin.notebook, style=wx.SUNKEN_BORDER)
164  self.pluginplugin = plugin
165  self.sizersizer = wx.BoxSizer(wx.VERTICAL)
166  self.SetSizer(self.sizersizer)
167  """
168  self.SetBackgroundColour(Colour(200, 222, 40))
169  self.SetOwnBackgroundColour(Colour(200, 222, 40))
170  self.SetForegroundColour(Colour(7, 0, 70))
171  self.SetOwnForegroundColour(Colour(7, 0, 70))
172  """
173  self.Refresh(True)
174  self.editoreditor = None
175 
176  def show_editor(self, editor):
177  if editor is None:
178  return
179  if editor is self.editoreditor:
180  self.Show(True)
181  return
182  self.sizersizer.Clear()
183  self.editoreditor = editor
184  self.sizersizer.Add(self.editoreditor, 1, wx.ALL | wx.EXPAND)
185  self.Layout()
186  self.Show(True)
187 
188  def hide_editor(self):
189  self.Show(False)
190 
191  def OnSave(self, event):
192  self.pluginplugin.save_selected_datafile()
193 
194  def OnUndo(self, event):
195  self.editoreditor.undo()
196 
197  def OnRedo(self, event):
198  self.editoreditor.redo()
199 
200  def OnCut(self, event):
201  self.editoreditor.cut()
202 
203  def OnCopy(self, event):
204  self.editoreditor.copy()
205 
206  def OnPaste(self, event):
207  self.editoreditor.paste()
208 
209  def OnInsert(self, event):
210  self.editoreditor.insert()
211 
212  def OnInsertCells(self, event):
213  self.editoreditor.insert_cells()
214 
215  def OnDeleteCells(self, event):
216  # print("DEBUG init delete cells call")
217  self.editoreditor.delete_cells()
218 
219  def OnInsertRows(self, event):
220  self.editoreditor.insert_rows()
221 
222  def OnDeleteRows(self, event):
223  wx.CallAfter(self.editoreditor.delete_rows)
224 
225  def OnDelete(self, event):
226  self.editoreditor.delete()
227 
228  def OnCommentRows(self, event):
229  self.editoreditor.comment_rows()
230 
231  def OnUncommentRows(self, event):
232  self.editoreditor.uncomment_rows()
233 
234  def OnCommentCells(self, event):
235  self.editoreditor.comment_cells()
236 
237  def OnUncommentCells(self, event):
238  self.editoreditor.uncomment_cells()
239 
240  def OnContentAssistance(self, event):
241  self.editoreditor.show_content_assist()
242 
243  def save(self, message=None):
244  if self.editoreditor:
245  self.editoreditor.save()
246 
247  def OnKey(self, *args):
248  pass
The default editor plugin.
Definition: __init__.py:59
def OnTabChanged(self, message)
Definition: __init__.py:145
def OnSaveToModel(self, message)
Definition: __init__.py:152
def OnFileDeleted(self, message)
Definition: __init__.py:156
def unregister_context_menu_hook_to_grid(self, hook)
Definition: __init__.py:111
def __init__(self, application)
Definition: __init__.py:60
def highlight(self, text)
Definition: __init__.py:94
def OnOpenEditor(self, event)
Definition: __init__.py:142
def register_context_menu_hook_to_grid(self, hook)
Used to register own items to grid's right click context menu.
Definition: __init__.py:108
def highlight_cell(self, obj, row, column)
Definition: __init__.py:90
def OnTreeItemSelected(self, message)
Definition: __init__.py:125
def OnTabChanging(self, message)
Definition: __init__.py:148
def OnDeleteCells(self, event)
Definition: __init__.py:215
def OnDeleteRows(self, event)
Definition: __init__.py:222
def OnInsertRows(self, event)
Definition: __init__.py:219
def OnCommentCells(self, event)
Definition: __init__.py:234
def OnCopy(self, event)
Definition: __init__.py:203
def __init__(self, plugin)
Definition: __init__.py:162
def OnUncommentRows(self, event)
Definition: __init__.py:231
def show_editor(self, editor)
Definition: __init__.py:176
def OnInsertCells(self, event)
Definition: __init__.py:212
def OnCut(self, event)
Definition: __init__.py:200
def OnUncommentCells(self, event)
Definition: __init__.py:237
def OnInsert(self, event)
Definition: __init__.py:209
def OnRedo(self, event)
Definition: __init__.py:197
def OnDelete(self, event)
Definition: __init__.py:225
def OnUndo(self, event)
Definition: __init__.py:194
def save(self, message=None)
Definition: __init__.py:243
def OnContentAssistance(self, event)
Definition: __init__.py:240
def OnCommentRows(self, event)
Definition: __init__.py:228
def OnPaste(self, event)
Definition: __init__.py:206
def OnSave(self, event)
Definition: __init__.py:191
def OnKey(self, *args)
Definition: __init__.py:247
def ActionInfoCollection(data, event_handler, container=None)
Parses the data into a list of ActionInfo and SeparatorInfo objects.
Definition: actioninfo.py:106