/[eiffelstudio]/branches/Eiffel_57_docking/Src/Eiffel/interface/new_graphical/windows/eb_development_window.e
ViewVC logotype

Annotation of /branches/Eiffel_57_docking/Src/Eiffel/interface/new_graphical/windows/eb_development_window.e

Parent Directory Parent Directory | Revision Log Revision Log


Revision 58951 - (hide annotations)
Sun May 14 00:32:48 2006 UTC (13 years, 9 months ago) by jasonw
Original Path: trunk/Src/Eiffel/interface/new_graphical/windows/eb_development_window.e
File size: 130985 byte(s)
1. Extracted some interface text into INTERFACE_NAMES
2. Fixed a bug that caused menu item "External commands..." was always disabled.
3. Enabled shortcut keys for specified external commands.
1 manus 26913 indexing
2     description : "Window holding a project tool"
3 manus 56535 legal: "See notice at end of class."
4     status: "See notice at end of class."
5 manus 26913 date : "$Date$"
6     revision : "$Revision$"
7 jfiat 54401 author : "$Author$"
8 manus 26913
9     class
10     EB_DEVELOPMENT_WINDOW
11    
12     inherit
13     EB_TOOL_MANAGER
14     redefine
15     make,
16     init_size_and_position,
17 rogers 40708 window_displayed,
18 manus 26913 init_commands,
19     build_menu_bar,
20     build_menus,
21     build_file_menu,
22     build_edit_menu,
23     build_view_menu,
24     build_tools_menu,
25     build_favorites_menu,
26     refresh,
27 xavier 27860 recycle,
28 manus 26913 destroy_imp,
29 tedf 55179 destroy,
30     position,
31     pos_container
32 manus 26913 end
33    
34     EB_FILEABLE
35 tedf 55179 export {NONE}
36     set_position,
37     set_pos_container
38 manus 26913 redefine
39     set_stone,
40     reset,
41     stone,
42     on_text_saved,
43     perform_check_before_save,
44     check_passed,
45 tedf 55179 update_save_symbol,
46     position,
47     pos_container
48 manus 26913 select
49     set_stone
50     end
51    
52     EB_FILEABLE
53     rename
54     set_stone as old_set_stone
55     export {NONE}
56 tedf 55179 old_set_stone,
57     set_position,
58     set_pos_container
59 manus 26913 redefine
60     reset,
61     stone,
62     on_text_saved,
63     perform_check_before_save,
64     check_passed,
65 tedf 55179 update_save_symbol,
66     position,
67     pos_container
68 manus 26913 end
69    
70    
71     -- Shared tools & contexts
72    
73     SHARED_EIFFEL_PROJECT
74    
75     PROJECT_CONTEXT
76    
77     EB_SHARED_MANAGERS
78    
79     EB_SHARED_GRAPHICAL_COMMANDS
80    
81 neilc 49534 EB_SHARED_PREFERENCES
82 xavier 30020 export
83     {NONE} all
84     end
85 manus 26913
86     EV_STOCK_PIXMAPS
87    
88     EB_CONFIRM_SAVE_CALLBACK
89    
90     -- Errors
91     EB_GRAPHICAL_ERROR_MANAGER
92    
93     TEXT_OBSERVER
94     redefine
95 manus 51111 on_text_reset, on_text_edited,
96 xavier 27840 on_text_back_to_its_last_saved_state,
97 xavier 29812 on_text_fully_loaded, on_cursor_moved
98 manus 26913 end
99 manus 51111
100 manus 26913 EV_KEY_CONSTANTS
101     export
102     {NONE} All
103     end
104 manus 51111
105 neilc 49534 EIFFEL_ENV
106     export
107     {NONE} All
108     end
109 manus 51111
110 manus 47824 SHARED_TEXT_ITEMS
111     export
112     {NONE} All
113     end
114 manus 26913
115 julieng 37686 create {EB_WINDOW_MANAGER}
116 manus 26913 make,
117 king 55319 make_with_session_data,
118 manus 26913 make_as_context_tool,
119     make_as_editor
120    
121     feature {NONE} -- Initialization
122    
123     make_as_context_tool is
124     -- Create a new development window and expand the context tool.
125     do
126     make
127 rogers 40708 -- Perform window setting from `show_actions', as the
128     -- resizing executed as a result only works correctly
129     -- while the window is displayed.
130     window.show_actions.extend (agent set_context_mode)
131     end
132 manus 51111
133 rogers 40708 set_context_mode is
134     -- Set `current' into context mode, that is the context tool
135     -- maximized, and the non editor panel is hidden.
136     do
137 manus 26913 if not context_tool.shown then
138     context_tool.show
139     end
140     if not unified_stone then
141     toggle_stone_cmd.execute
142     end
143     context_tool.explorer_bar_item.maximize
144 rogers 40708 close_all_bars_except (right_panel)
145 manus 26913 end
146    
147     make_as_editor is
148     -- Create a new development window and expand the editor tool.
149     do
150     make
151 rogers 40708 -- Perform window setting from `show_actions', as the resizing executed
152     -- must be performed after `current' is displayed.
153     window.show_actions.extend (agent (editor_tool.explorer_bar_item).maximize)
154     window.show_actions.extend (agent close_all_bars_except (right_panel))
155 manus 26913 end
156    
157 king 55319 make_with_session_data (a_session_data: EB_DEVELOPMENT_WINDOW_SESSION_DATA) is
158     -- Recreate a previously existing development window using `a_session_data'.
159     local
160     l_class_i: CLASS_I
161     l_class_c_stone: CLASSC_STONE
162     l_cluster_string, l_class_string, l_feature_string: STRING
163     do
164     internal_development_window_data := a_session_data
165 manus 55527 make
166 king 55319 -- Attempt to reload last edited class of `Current'.
167     if a_session_data.file_name /= Void then
168 patrickr 57792 conf_todo
169     -- l_class_i := eiffel_universe.class_with_file_name (a_session_data.file_name)
170 king 55319 if l_class_i /= Void and then l_class_i.compiled then
171     -- Create compiled class stone and target `Current' to it.
172     create l_class_c_stone.make (l_class_i.compiled_class)
173     set_stone_after_check (l_class_c_stone)
174     if a_session_data.editor_position > 0 then
175     editor_tool.text_area.display_line_when_ready (a_session_data.editor_position, False)
176     end
177     end
178     end
179     if context_tool /= Void then
180     -- Presumption is made that if the strings are not void then they represent
181     -- valid entities in the project.
182     l_cluster_string := a_session_data.context_cluster_string
183     l_class_string := a_session_data.context_class_string
184     l_feature_string := a_session_data.context_feature_string
185     if l_feature_string /= Void then
186     context_tool.address_manager.feature_address.set_text (l_feature_string)
187     context_tool.address_manager.class_address.set_text (l_class_string)
188     context_tool.address_manager.execute_with_feature
189     elseif l_class_string /= Void then
190     context_tool.address_manager.class_address.set_text (l_class_string)
191     context_tool.address_manager.execute_with_class
192     elseif l_cluster_string /= Void then
193     context_tool.address_manager.cluster_address.set_text (l_cluster_string)
194     context_tool.address_manager.execute_with_cluster
195     end
196     -- Set the appropriate notebook tab
197 manus 56322 context_tool.notebook.select_item (context_tool.notebook.i_th (a_session_data.context_tab_index))
198 king 55319 end
199     end
200    
201 manus 26913 make is
202     -- Create a new development window.
203     do
204 neilc 50976 unified_stone := preferences.development_window_data.context_unified_stone
205 manus 26913 -- Build the history manager, the address manager, ...
206     create history_manager.make (Current)
207     create address_manager.make (Current, False)
208     build_formatters
209     address_manager.set_formatters (managed_main_formatters)
210    
211     -- Init commands, build interface, build menus, ...
212     Precursor
213    
214     initialized := False -- Reset the flag since initialization is not yet complete.
215 xavier 28303 set_up_accelerators
216 manus 51111
217 neilc 51796 window.focus_in_actions.extend(agent on_focus)
218    
219 xavier 28514 -- Create the toolbars.
220     build_toolbars_area
221     container.put_front (toolbars_area)
222     container.disable_item_expand (toolbars_area)
223 manus 26913
224     -- Update widgets visibilities
225 rogers 40708 window.show_actions.extend (agent update)
226 xavier 29812 status_bar.remove_cursor_position
227 xavier 29871 address_manager.set_output_line (status_bar.label)
228 manus 26913
229     -- Finish initializing the main editor formatters
230     end_build_formatters
231 manus 51111
232 xavier 28280 address_manager.disable_formatters
233 xavier 28303 if Eiffel_project.manager.is_project_loaded then
234 xavier 28304 on_project_created
235 xavier 28303 on_project_loaded
236 xavier 28304 elseif Eiffel_project.manager.is_created then
237     on_project_unloaded
238     on_project_created
239 xavier 28303 else
240     on_project_unloaded
241     end
242 manus 51111
243 neilc 33858 -- Create feature position table
244     create feature_positions.make (1)
245     feature_positions.compare_objects
246 manus 51111
247 rogers 40708 window.move_actions.force_extend (agent window_moved)
248 manus 26913
249     initialized := True
250     is_destroying := False
251     end
252 manus 51111
253 manus 26913 init_size_and_position is
254     -- Initialize window size.
255     local
256 manus 52172 screen: EB_STUDIO_SCREEN
257     l_x, l_y: INTEGER
258 manus 26913 do
259     create screen
260 manus 51180 window.set_size (
261 king 55319 development_window_data.width.min (screen.width),
262     development_window_data.height.min (screen.height))
263     l_x := development_window_data.x_position
264 manus 52172 if l_x < screen.virtual_left or l_x > screen.virtual_right then
265     -- Somehow screens have changed, reset it to 0
266     l_x := 0
267     end
268 king 55319 l_y := development_window_data.y_position
269 manus 52172 if l_y < screen.virtual_top or l_y > screen.virtual_bottom then
270     -- Somehow screens have changed, reset it to 0
271     l_y := 0
272     end
273     window.set_position (l_x, l_y)
274 rogers 40708 end
275 manus 51111
276 rogers 40708 window_displayed is
277     -- `Current' has been displayed on screen.
278     do
279 king 55319 -- Minimize or Maximize window if needed.
280     if development_window_data.is_maximized then
281 manus 26913 window.maximize
282 king 55319 elseif development_window_data.is_minimized then
283     window.minimize
284 manus 26913 end
285     end
286    
287     init_commands is
288     -- Initialize commands.
289 xavier 27498 local
290     accel: EV_ACCELERATOR
291 manus 26913 do
292     Precursor
293     create toolbarable_commands.make (15)
294    
295     -- Open, save, ...
296     toolbarable_commands.extend (new_editor_cmd)
297    
298     toolbarable_commands.extend (new_context_tool_cmd)
299    
300     create open_cmd.make (Current)
301     toolbarable_commands.extend (open_cmd)
302    
303     create save_cmd.make (Current)
304     toolbarable_commands.extend (save_cmd)
305    
306     create save_as_cmd.make (Current)
307     if editor_tool = Void or else editor_tool.text_area.is_empty then
308     save_as_cmd.disable_sensitive
309     else
310     save_as_cmd.enable_sensitive
311     end
312    
313     create shell_cmd.make (Current)
314     toolbarable_commands.extend (shell_cmd)
315    
316     create print_cmd.make (Current)
317     if is_empty then
318     print_cmd.disable_sensitive
319     else
320     print_cmd.enable_sensitive
321     end
322     toolbarable_commands.extend (print_cmd)
323    
324     -- Compilation
325     create c_workbench_compilation_cmd.make_workbench (Current)
326     create c_finalized_compilation_cmd.make_finalized (Current)
327 xavier 27549 if has_dll_generation then
328     create show_dynamic_lib_tool.make
329 manus 51111 show_dynamic_lib_tool.set_menu_name (Interface_names.m_new_dynamic_lib)
330 manus 36309 show_dynamic_lib_tool.add_agent (agent show_dynamic_library_dialog)
331 xavier 27549 end
332     if has_profiler then
333     create show_profiler
334     end
335 manus 26913
336     -- Undo/redo, cut, copy, paste.
337     create undo_cmd.make (Current)
338     toolbarable_commands.extend (undo_cmd)
339    
340     create redo_cmd.make (Current)
341     toolbarable_commands.extend (redo_cmd)
342    
343     create editor_paste_cmd.make (Current)
344     toolbarable_commands.extend (editor_paste_cmd)
345    
346     create new_cluster_cmd.make (Current)
347     toolbarable_commands.extend (new_cluster_cmd)
348    
349     create new_class_cmd.make (Current)
350     toolbarable_commands.extend (new_class_cmd)
351    
352     create delete_class_cluster_cmd.make (Current)
353     toolbarable_commands.extend (delete_class_cluster_cmd)
354    
355     create new_feature_cmd.make (Current)
356     toolbarable_commands.extend (new_feature_cmd)
357 manus 51111
358 alexk 51136 create toggle_feature_alias_cmd.make (Current)
359     toolbarable_commands.extend (toggle_feature_alias_cmd)
360    
361 jfiat 42965 create toggle_feature_signature_cmd.make (Current)
362 jfiat 42973 toolbarable_commands.extend (toggle_feature_signature_cmd)
363 manus 26913
364 alexk 51887 create toggle_feature_assigner_cmd.make (Current)
365     toolbarable_commands.extend (toggle_feature_assigner_cmd)
366    
367 manus 26913 create toggle_stone_cmd.make (Current)
368     toolbarable_commands.extend (toggle_stone_cmd)
369    
370     create send_stone_to_context_cmd.make
371 king 56761 send_stone_to_context_cmd.set_pixmap (Pixmaps.Icon_send_stone_down)
372 manus 51111 send_stone_to_context_cmd.set_tooltip (Interface_names.e_send_stone_to_context)
373     send_stone_to_context_cmd.set_menu_name (Interface_names.m_send_stone_to_context)
374 manus 26913 send_stone_to_context_cmd.set_name ("Send_to_context")
375 manus 51111 send_stone_to_context_cmd.set_tooltext (Interface_names.b_send_stone_to_context)
376 manus 36309 send_stone_to_context_cmd.add_agent (agent send_stone_to_context)
377 xavier 27498 create accel.make_with_key_combination (
378 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_down), False, True, False
379 xavier 27498 )
380 manus 36309 accel.actions.extend (agent send_stone_to_context)
381 xavier 27498 send_stone_to_context_cmd.set_accelerator (accel)
382 manus 26913 send_stone_to_context_cmd.disable_sensitive
383     toolbarable_commands.extend (send_stone_to_context_cmd)
384    
385     toolbarable_commands.extend (window_manager.minimize_all_cmd)
386     window_manager.minimize_all_cmd.enable_sensitive
387     toolbarable_commands.extend (window_manager.raise_all_cmd)
388     window_manager.raise_all_cmd.enable_sensitive
389    
390     toolbarable_commands.extend (New_development_window_cmd)
391     -- Show tool/toolbar commands (will be filled when tools will
392     -- be created)
393     create show_tool_commands.make (7)
394     create show_toolbar_commands.make (3)
395    
396 xavier 28303 new_feature_cmd.disable_sensitive
397 alexk 51136 toggle_feature_alias_cmd.disable_sensitive
398 jfiat 42965 toggle_feature_signature_cmd.disable_sensitive
399 alexk 51887 toggle_feature_assigner_cmd.disable_sensitive
400 xavier 28303
401     create editors.make (5)
402 larryl 54857 estudio_debug_cmd.set_main_window (window)
403 xavier 28303 end
404    
405     set_up_accelerators is
406     -- Fill the accelerator of `window' with the accelerators of the `toolbarable_commands'.
407 jfiat 56447 local
408     cmds: ARRAYED_LIST [EB_TOOLBARABLE_COMMAND]
409 xavier 28303 do
410 jfiat 54580 --| Accelerators related to toolbarable_commands
411 manus 26913 from
412 jfiat 56447 cmds := toolbarable_commands
413     cmds.start
414 manus 26913 until
415 jfiat 56447 cmds.after
416 manus 26913 loop
417 jfiat 56447 if cmds.item.accelerator /= Void then
418     window.accelerators.extend (cmds.item.accelerator)
419 manus 26913 end
420 jfiat 56447 cmds.forth
421 manus 26913 end
422    
423 jfiat 54580 --| Accelerators related to debugging toolbarable_commands
424 manus 26913 from
425 jfiat 56447 cmds := Eb_debugger_manager.toolbarable_commands
426     cmds.start
427 manus 26913 until
428 jfiat 56447 cmds.after
429 manus 26913 loop
430     if
431 jfiat 56447 cmds.item.accelerator /= Void
432 manus 26913 then
433 jfiat 56447 window.accelerators.extend (cmds.item.accelerator)
434 manus 26913 end
435 jfiat 56447 cmds.forth
436 manus 26913 end
437     end
438    
439     build_formatters is
440     -- Build all formatters used.
441     local
442     form: EB_CLASS_TEXT_FORMATTER
443     accel: EV_ACCELERATOR
444     do
445 neilc 33294 create managed_class_formatters.make (17)
446 manus 26913 managed_class_formatters.extend (create {EB_CLICKABLE_FORMATTER}.make (Current))
447     managed_class_formatters.extend (create {EB_FLAT_FORMATTER}.make (Current))
448     managed_class_formatters.extend (create {EB_SHORT_FORMATTER}.make (Current))
449     managed_class_formatters.extend (create {EB_FLAT_SHORT_FORMATTER}.make (Current))
450     managed_class_formatters.extend (Void)
451     managed_class_formatters.extend (create {EB_ANCESTORS_FORMATTER}.make (Current))
452     managed_class_formatters.extend (create {EB_DESCENDANTS_FORMATTER}.make (Current))
453     managed_class_formatters.extend (create {EB_CLIENTS_FORMATTER}.make (Current))
454     managed_class_formatters.extend (create {EB_SUPPLIERS_FORMATTER}.make (Current))
455     managed_class_formatters.extend (Void)
456     managed_class_formatters.extend (create {EB_ATTRIBUTES_FORMATTER}.make (Current))
457     managed_class_formatters.extend (create {EB_ROUTINES_FORMATTER}.make (Current))
458 manus 54560 managed_class_formatters.extend (create {EB_INVARIANTS_FORMATTER}.make (Current))
459 manus 54538 managed_class_formatters.extend (create {EB_CREATORS_FORMATTER}.make (Current))
460 manus 26913 managed_class_formatters.extend (create {EB_DEFERREDS_FORMATTER}.make (Current))
461     managed_class_formatters.extend (create {EB_ONCES_FORMATTER}.make (Current))
462     managed_class_formatters.extend (create {EB_EXTERNALS_FORMATTER}.make (Current))
463     managed_class_formatters.extend (create {EB_EXPORTED_FORMATTER}.make (Current))
464    
465 manus 48565 create managed_feature_formatters.make (12)
466 manus 26913 managed_feature_formatters.extend (create {EB_BASIC_FEATURE_FORMATTER}.make (Current))
467     managed_feature_formatters.extend (create {EB_ROUTINE_FLAT_FORMATTER}.make (Current))
468     managed_feature_formatters.extend (Void)
469 manus 48565 managed_feature_formatters.extend (create {EB_CALLERS_FORMATTER}.make (Current, 0))
470     managed_feature_formatters.extend (create {EB_CALLERS_FORMATTER}.make (Current,
471 manus 49446 {DEPEND_UNIT}.is_in_assignment_flag))
472 manus 51111 managed_feature_formatters.extend (create {EB_CALLERS_FORMATTER}.make (Current,
473 manus 49446 {DEPEND_UNIT}.is_in_creation_flag))
474 manus 48565 managed_feature_formatters.extend (Void)
475 manus 26913 managed_feature_formatters.extend (create {EB_IMPLEMENTERS_FORMATTER}.make (Current))
476     managed_feature_formatters.extend (create {EB_ROUTINE_ANCESTORS_FORMATTER}.make (Current))
477     managed_feature_formatters.extend (create {EB_ROUTINE_DESCENDANTS_FORMATTER}.make (Current))
478 manus 48565 managed_feature_formatters.extend (Void)
479 manus 26913 managed_feature_formatters.extend (create {EB_HOMONYMS_FORMATTER}.make (Current))
480    
481 manus 51111
482 neilc 33294 create managed_main_formatters.make (6)
483 manus 51111
484 manus 26913 create {EB_BASIC_TEXT_FORMATTER} form.make (Current)
485     create accel.make_with_key_combination (
486 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_t),
487 manus 26913 True, False, True)
488 manus 36309 accel.actions.extend (agent form.execute)
489 manus 26913 form.set_accelerator (accel)
490     managed_main_formatters.extend (form)
491    
492     create {EB_CLICKABLE_FORMATTER} form.make (Current)
493     create accel.make_with_key_combination (
494 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_c),
495 manus 26913 True, False, True)
496 manus 36309 accel.actions.extend (agent form.execute)
497 manus 26913 form.set_accelerator (accel)
498     managed_main_formatters.extend (form)
499    
500     create {EB_FLAT_FORMATTER} form.make (Current)
501     create accel.make_with_key_combination (
502 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_f),
503 manus 26913 True, False, True)
504 manus 36309 accel.actions.extend (agent form.execute)
505 manus 26913 form.set_accelerator (accel)
506     managed_main_formatters.extend (form)
507    
508     create {EB_SHORT_FORMATTER} form.make (Current)
509     create accel.make_with_key_combination (
510 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_o),
511 manus 26913 True, False, True)
512 manus 36309 accel.actions.extend (agent form.execute)
513 manus 26913 form.set_accelerator (accel)
514     managed_main_formatters.extend (form)
515    
516     create {EB_FLAT_SHORT_FORMATTER} form.make (Current)
517     create accel.make_with_key_combination (
518 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_i),
519 manus 26913 True, False, True)
520 manus 36309 accel.actions.extend (agent form.execute)
521 manus 26913 form.set_accelerator (accel)
522 manus 51111 managed_main_formatters.extend (form)
523 manus 26913 end
524    
525     end_build_formatters is
526 manus 33315 -- Finish initialization of formatters (associate them with editor
527     -- and select a formatter).
528 manus 26913 local
529     f_ind: INTEGER
530     do
531     from
532     managed_class_formatters.start
533     until
534     managed_class_formatters.after
535     loop
536     if managed_class_formatters.item /= Void then
537     managed_class_formatters.item.set_manager (context_tool)
538     end
539     managed_class_formatters.forth
540     end
541     from
542     managed_feature_formatters.start
543     until
544     managed_feature_formatters.after
545     loop
546     if managed_feature_formatters.item /= Void then
547     managed_feature_formatters.item.set_manager (context_tool)
548     end
549     managed_feature_formatters.forth
550     end
551     from
552     managed_main_formatters.start
553     until
554     managed_main_formatters.after
555     loop
556     managed_main_formatters.item.set_editor (editor_tool.text_area)
557     managed_main_formatters.item.on_shown
558     if managed_main_formatters.item.accelerator /= Void then
559     window.accelerators.extend (managed_main_formatters.item.accelerator)
560     end
561     managed_main_formatters.forth
562     end
563    
564     (managed_main_formatters @ 1).enable_select;
565 manus 51111
566 manus 26913 -- We now select the correct class formatter.
567 neilc 53432 f_ind := preferences.context_tool_data.default_class_formatter_index
568 manus 26913 --| This takes the formatter separators in consideration.
569 neilc 33365 if f_ind > 4 then
570 manus 26913 f_ind := f_ind + 1
571     end
572 neilc 33365 if f_ind > 8 then
573 manus 26913 f_ind := f_ind + 1
574     end
575     if f_ind < 1 or f_ind > managed_class_formatters.count then
576 neilc 33365 f_ind := 6
577 manus 26913 end
578 manus 51111 (managed_class_formatters @ f_ind).enable_select;
579 manus 26913 -- We now select the correct feature formatter.
580 neilc 53432 f_ind := preferences.context_tool_data.default_feature_formatter_index
581 manus 26913 if f_ind > 2 then
582     f_ind := f_ind + 1
583     end
584     if f_ind < 1 or f_ind > managed_feature_formatters.count then
585     f_ind := 2
586     end
587 manus 33315 managed_class_formatters.i_th (f_ind).enable_select
588 manus 26913 end
589    
590     build_tools is
591     -- Build all tools that can take place in this window and put them
592     -- in `left_tools' or `bottom_tools'.
593     local
594     show_cmd: EB_SHOW_TOOL_COMMAND
595 tedf 56390 l_accel: EV_ACCELERATOR
596     l_shortcut_preference: SHORTCUT_PREFERENCE
597 manus 26913 do
598 rogers 43098 lock_update
599 manus 26913 -- Build the features tool
600 jfiat 48452 create features_tool.make (Current)
601     features_tool.attach_to_explorer_bar (left_panel)
602 manus 26913 left_tools.extend (features_tool.explorer_bar_item)
603     create show_cmd.make (Current, features_tool.explorer_bar_item)
604     show_tool_commands.extend (show_cmd)
605     toolbarable_commands.extend (show_cmd)
606     add_recyclable (features_tool)
607    
608 jfiat 54610 -- Build the breakpoints tool
609     create breakpoints_tool.make (Current)
610     breakpoints_tool.attach_to_explorer_bar (left_panel)
611     left_tools.extend (breakpoints_tool.explorer_bar_item)
612     create show_cmd.make (Current, breakpoints_tool.explorer_bar_item)
613     show_tool_commands.extend (show_cmd)
614     toolbarable_commands.extend (show_cmd)
615     add_recyclable (breakpoints_tool)
616    
617 manus 26913 -- Build the cluster tool
618 jfiat 48452 create cluster_tool.make (Current, Current)
619     cluster_tool.attach_to_explorer_bar (left_panel)
620 manus 26913 left_tools.extend (cluster_tool.explorer_bar_item)
621     create show_cmd.make (Current, cluster_tool.explorer_bar_item)
622     show_tool_commands.extend (show_cmd)
623     toolbarable_commands.extend (show_cmd)
624     add_recyclable (cluster_tool)
625    
626     -- Build the favorites tool
627 jfiat 48452 create favorites_tool.make (Current, favorites_manager)
628     favorites_tool.attach_to_explorer_bar (left_panel)
629 manus 26913 left_tools.extend (favorites_tool.explorer_bar_item)
630     create show_cmd.make (Current, favorites_tool.explorer_bar_item)
631     show_tool_commands.extend (show_cmd)
632     toolbarable_commands.extend (show_cmd)
633     add_recyclable (favorites_tool)
634    
635     -- Build the windows tool (formerly known as Selector tool)
636 jfiat 48452 create windows_tool.make (Current)
637     windows_tool.attach_to_explorer_bar (left_panel)
638 manus 26913 left_tools.extend (windows_tool.explorer_bar_item)
639     create show_cmd.make (Current, windows_tool.explorer_bar_item)
640     show_tool_commands.extend (show_cmd)
641     toolbarable_commands.extend (show_cmd)
642     add_recyclable (windows_tool)
643 manus 55527
644 tedf 55179 -- Build the search tool
645 tedf 56390 create search_tool.make (Current)
646 tedf 55179 search_tool.attach_to_explorer_bar (right_panel)
647     bottom_tools.extend (search_tool.explorer_bar_item)
648     create show_cmd.make (Current, search_tool.explorer_bar_item)
649 tedf 56390 l_shortcut_preference := preferences.editor_data.shortcuts.item ("show_search_panel")
650     create l_accel.make_with_key_combination (l_shortcut_preference.key, l_shortcut_preference.is_ctrl, l_shortcut_preference.is_alt, l_shortcut_preference.is_shift)
651     l_accel.actions.extend (agent search_tool.prepare_search)
652     show_cmd.set_accelerator (l_accel)
653 tedf 55179 show_tool_commands.extend (show_cmd)
654     toolbarable_commands.extend (show_cmd)
655     add_recyclable (search_tool)
656 manus 26913
657     -- Build the editor tool
658 jfiat 48452 create editor_tool.make (Current)
659     editor_tool.attach_to_explorer_bar (right_panel)
660 manus 26913 bottom_tools.extend (editor_tool.explorer_bar_item)
661     editor_tool.text_area.add_edition_observer(save_cmd)
662     editor_tool.text_area.add_edition_observer(save_as_cmd)
663     editor_tool.text_area.add_edition_observer(print_cmd)
664     editor_tool.text_area.add_edition_observer(Current)
665 tedf 55179 editor_tool.text_area.add_edition_observer(search_tool)
666 manus 36309 editor_tool.text_area.drop_actions.set_veto_pebble_function (agent can_drop)
667 xavier 29812 editor_tool.text_area.add_cursor_observer (Current)
668 tedf 55179 create show_cmd.make(Current, editor_tool.explorer_bar_item)
669     show_tool_commands.extend (show_cmd)
670     toolbarable_commands.extend (show_cmd)
671 manus 51111
672 rogers 40708 -- The minimim height masks a bug on windows to do with the sizing of the editors
673     -- scroll bars, which were affecting the resizing although they should not have done so.
674     -- Having a default minimum height on the editor is perfectly reasonable.
675     editor_tool.widget.set_minimum_height (20)
676 manus 26913 add_recyclable (editor_tool)
677    
678     -- Build the context tool
679 jfiat 48452 create context_tool.make (Current)
680     context_tool.attach_to_explorer_bar (right_panel)
681 manus 26913 bottom_tools.extend (context_tool.explorer_bar_item)
682     create show_cmd.make (Current, context_tool.explorer_bar_item)
683     show_tool_commands.extend (show_cmd)
684     toolbarable_commands.extend (show_cmd)
685     add_recyclable (context_tool)
686    
687 patrickr 56781 -- Build the refactoring tools
688     toolbarable_commands.extend (refactoring_manager.pull_command)
689     toolbarable_commands.extend (refactoring_manager.rename_command)
690     toolbarable_commands.extend (refactoring_manager.undo_command)
691     toolbarable_commands.extend (refactoring_manager.redo_command)
692    
693 manus 26913 -- Set the flag "Tools initialized"
694     tools_initialized := True
695 manus 51111
696 manus 26913 -- Initialize undo / redo accelerators
697 manus 51111 create undo_accelerator.make_with_key_combination (
698     create {EV_KEY}.make_with_code (Key_z), True, False, False)
699 xavier 27549 if has_case then
700     undo_accelerator.actions.extend (agent (context_tool.editor.undo_cmd).on_ctrl_z)
701     end
702 manus 26913 undo_accelerator.actions.extend (agent undo_cmd.accelerator_execute)
703 manus 51111 create redo_accelerator.make_with_key_combination (
704     create {EV_KEY}.make_with_code (Key_y), True, False, False)
705 xavier 27549 if has_case then
706     redo_accelerator.actions.extend (agent (context_tool.editor.redo_cmd).on_ctrl_y)
707     end
708 manus 26913 redo_accelerator.actions.extend (agent redo_cmd.accelerator_execute)
709     window.accelerators.extend (undo_accelerator)
710     window.accelerators.extend (redo_accelerator)
711 rogers 43098 unlock_update
712 manus 26913 end
713    
714     feature -- Access
715    
716 manus 57886 group: CONF_GROUP is
717     -- Group of current class. Void if none.
718 manus 26913 local
719     classi_stone: CLASSI_STONE
720     cluster_stone: CLUSTER_STONE
721     do
722 manus 57886 classi_stone ?= stone
723     if classi_stone /= Void then
724     Result := classi_stone.group
725     end
726     cluster_stone ?= stone
727     if cluster_stone /= Void then
728     Result := cluster_stone.group
729     end
730 manus 26913 end
731    
732     class_name: STRING is
733     -- Name of the current class, Void if none.
734     local
735     class_stone: CLASSI_STONE
736     do
737     class_stone ?= stone
738     if class_stone /= Void then
739     Result := class_stone.class_name
740     end
741     end
742    
743     feature_name: STRING is
744     -- Name of the current feature, Void if none.
745     local
746     feature_stone: FEATURE_STONE
747     do
748     feature_stone ?= stone
749     if feature_stone /= Void then
750     Result := feature_stone.feature_name
751     end
752     end
753 manus 51111
754 xavier 30005 feature -- Status setting
755    
756     disable_sensitive is
757     -- Disable sensitivity of all widgets.
758     do
759     window.disable_sensitive
760     end
761    
762     enable_sensitive is
763     -- Enable sensitivity of all widgets.
764     do
765     window.enable_sensitive
766     end
767    
768 manus 26913 feature -- Window Settings
769    
770     set_initialized is
771     -- Set `initialized' to True.
772     do
773     initialized := True
774     end
775    
776     set_text (a_text: STRING) is
777     -- Assign `a_text' to `text'.
778     require
779     a_text_not_void: a_text /= Void
780     do
781 neilc 49534 editor_tool.text_area.set_editor_text (a_text)
782 manus 26913 ensure
783     --| FIXME This needs to work: text_assigned: text.is_equal (a_text)
784     --| FIXME changed_flag_set: changed
785     end
786    
787     feature -- Window Properties
788    
789     changed: BOOLEAN is
790     -- Has something been changed and not yet been saved?
791     do
792     Result := editor_tool.changed
793     end
794    
795     is_empty: BOOLEAN is
796     -- Does `Current's text is empty?
797     do
798     Result := editor_tool = Void or else editor_tool.text_area.is_empty
799     end
800    
801     text: STRING is
802     -- Text representing Current
803     do
804     Result := editor_tool.text_area.text
805     end
806    
807     pixmap: EV_PIXMAP is
808     -- Pixmap representing Current window.
809     do
810     Result := Pixmaps.Icon_development_window
811     end
812    
813     feature -- Pulldown Menus
814    
815     metric_menu: EV_MENU
816     -- Menu for entries of metric tool.
817 manus 51111
818 manus 26913 format_menu: EV_MENU
819     -- ID Menu for formats.
820     -- Only used during debugging
821    
822     compile_menu: EV_MENU
823     -- Compile ID menu.
824    
825     debug_menu: EV_MENU
826     -- Debug ID menu.
827 manus 55527
828 jfiat 54577 debugging_tools_menu: EV_MENU
829     -- Debugging tools menu item
830 manus 26913
831     active_menus (erase: BOOLEAN) is
832     -- Enable all the menus and if `erase' clean
833     -- the content of the Project tool.
834     do
835     compile_menu.enable_sensitive
836     if erase then
837     output_manager.clear
838     end
839     end
840    
841     disable_menus is
842     -- Disable all the menus.
843     do
844     compile_menu.disable_sensitive
845     end
846 manus 55527
847 jfiat 54577 update_debug_menu is
848     -- Update debug menu
849     do
850 jfiat 56447 Eb_debugger_manager.update_debugging_tools_menu_from (Current)
851 jfiat 54577 end
852 manus 26913
853     feature -- Modifiable menus
854    
855     melt_menu_item: EV_MENU_ITEM
856     -- Melt menu entry
857    
858     freeze_menu_item: EV_MENU_ITEM
859     -- Freeze menu entry
860    
861     finalize_menu_item: EV_MENU_ITEM
862     -- Finalize menu entry
863    
864     feature -- Update
865    
866     synchronize is
867     -- Synchronize stones.
868     local
869     st: STONE
870 patrickr 56804 l_text_area: EB_SMART_EDITOR
871 manus 26913 do
872     during_synchronization := True
873     favorites_manager.refresh
874     context_tool.synchronize
875     cluster_tool.synchronize
876     history_manager.synchronize
877     features_tool.synchronize
878 jfiat 54610 breakpoints_tool.synchronize
879 alexk 53977 -- Update main views
880     managed_main_formatters.i_th (2).invalidate
881     managed_main_formatters.i_th (3).invalidate
882     managed_main_formatters.i_th (4).invalidate
883     managed_main_formatters.i_th (5).invalidate
884 manus 26913 if stone /= Void then
885     st := stone.synchronized_stone
886     end
887 patrickr 56804 l_text_area := editor_tool.text_area
888     l_text_area.update_click_list (False)
889     if l_text_area.file_loaded then
890     editor_tool.text_area.check_document_modifications_and_reload
891     end
892 manus 26913 set_stone (st)
893     update_save_symbol
894     address_manager.refresh
895     during_synchronization := False
896 tedf 58075 search_tool.rebuild_scope_list
897 manus 26913 end
898 manus 55527
899 manus 26913 synchronize_routine_tool_to_default is
900     -- Synchronize the editor tool to the debug format.
901     do
902     --| FIXME ARNAUD: To be implemented
903     end
904    
905     clear_object_tool is
906     -- Clear the contents of the object tool if shown.
907     do
908     --| FIXME ARNAUD: To be implemented
909     end
910    
911     build_menus is
912     -- Build all menus displayed in the development window.
913     do
914     -- Build each menu
915     build_file_menu
916     build_edit_menu
917     build_view_menu
918     build_favorites_menu
919     build_project_menu
920     build_debug_menu
921     build_tools_menu
922     build_window_menu
923 manus 55527 build_help_menu
924 manus 26913 -- Build the menu bar.
925     build_menu_bar
926     end
927    
928     build_debug_menu is
929     -- Build the `Debug' menu through the debugger_manager.
930     local
931     conv_mit: EB_COMMAND_MENU_ITEM
932     do
933 jfiat 56447 debug_menu := Eb_debugger_manager.new_debug_menu
934 manus 26913 from
935     debug_menu.start
936     until
937     debug_menu.after
938     loop
939     conv_mit ?= debug_menu.item
940     if conv_mit /= Void then
941     add_recyclable (conv_mit)
942     end
943     debug_menu.forth
944     end
945 jfiat 54577 --| Debugging tools menu
946 jfiat 56447 debugging_tools_menu := Eb_debugger_manager.new_debugging_tools_menu
947 jfiat 54577 debug_menu.extend (create {EV_MENU_SEPARATOR})
948     debug_menu.extend (debugging_tools_menu)
949     update_debug_menu
950 manus 26913 end
951    
952     build_menu_bar is
953     -- Build the menu bar
954     local
955     mb: EV_MENU_BAR
956     do
957     check
958     window.menu_bar /= Void implies not window.menu_bar.is_empty
959     -- If a menu bar was already present, it shouldn't be empty.
960     end
961     if window.menu_bar /= Void then
962     mb := window.menu_bar
963     from
964     mb.start
965     mb.forth
966     until
967     mb.after
968     loop
969     mb.remove
970     end
971     else
972     create mb
973     window.set_menu_bar (mb)
974     mb.extend (file_menu)
975     end
976    
977     if Eiffel_project.manager.is_created then
978     mb.extend (edit_menu)
979     mb.extend (view_menu)
980     mb.extend (favorites_menu)
981     mb.extend (project_menu)
982     mb.extend (debug_menu)
983     else
984     mb.extend (view_menu)
985     end
986     mb.extend (tools_menu)
987     mb.extend (window_menu)
988     mb.extend (help_menu)
989 larryl 54857 estudio_debug_cmd.build_menu_bar
990 manus 26913 end
991    
992     feature -- Graphical Interface
993    
994     build_general_toolbar is
995     -- Set up the general toolbar (New, Save, Search, Shell, Undo, Redo, ...)
996     local
997     cell: EV_CELL
998     hsep: EV_HORIZONTAL_SEPARATOR
999     hbox: EV_HORIZONTAL_BOX
1000     do
1001     -- Create the toolbar.
1002     create general_toolbar
1003 king 55319 general_customizable_toolbar := development_window_data.retrieve_general_toolbar (toolbarable_commands)
1004     if development_window_data.show_text_in_general_toolbar then
1005 king 46348 general_customizable_toolbar.enable_important_text
1006 king 55319 elseif development_window_data.show_all_text_in_general_toolbar then
1007 manus 26913 general_customizable_toolbar.enable_text_displayed
1008     end
1009 manus 51111
1010 manus 26913 create hbox
1011     hbox.extend (general_customizable_toolbar.widget)
1012     hbox.disable_item_expand (general_customizable_toolbar.widget)
1013    
1014     -- Generate the toolbar.
1015     general_customizable_toolbar.update_toolbar
1016    
1017     -- Cell to fill in empty space and receive the right click menu holder.
1018     create cell
1019 manus 36309 cell.pointer_button_release_actions.extend (agent toolbar_right_click_action)
1020 manus 26913 hbox.extend (cell)
1021    
1022     -- Create the vertical layout (separator + toolbar)
1023     create hsep
1024     general_toolbar.set_padding (2)
1025     general_toolbar.extend (hsep)
1026     general_toolbar.disable_item_expand (hsep)
1027     general_toolbar.extend (hbox)
1028    
1029     -- Create the command to show/hide this toolbar.
1030 manus 51111 create show_general_toolbar_command.make (general_toolbar, Interface_names.m_general_toolbar)
1031 manus 26913 show_toolbar_commands.extend (show_general_toolbar_command)
1032 king 55319 if development_window_data.show_general_toolbar then
1033 manus 26913 show_general_toolbar_command.enable_visible
1034     else
1035     show_general_toolbar_command.disable_visible
1036     end
1037    
1038     end
1039    
1040     build_address_toolbar is
1041     -- Set up the address toolbar (Back, Forward, Current, Class name, feature name, ...)
1042     local
1043     tb: EV_TOOL_BAR
1044     -- address_bar: EV_HORIZONTAL_BOX -- Contains "Class" + Combobox + "Feature" + Combobox + "Format" + Combobox
1045     hsep: EV_HORIZONTAL_SEPARATOR
1046     hbox: EV_HORIZONTAL_BOX -- Contains HistoryToolbar (back, forth, current) + `address_bar'
1047     cell: EV_CELL
1048 xavier 27498 accel: EV_ACCELERATOR
1049 manus 26913 do
1050     -- Create the toolbar
1051     create address_toolbar
1052     create hsep
1053     create hbox
1054     -- create address_bar
1055     create tb
1056     address_toolbar.set_padding (2)
1057     address_toolbar.extend (hsep)
1058     address_toolbar.disable_item_expand (hsep)
1059     address_toolbar.extend (hbox)
1060    
1061     hbox.extend (tb)
1062     hbox.disable_item_expand (tb)
1063     -- hbox.extend (address_bar)
1064     -- hbox.disable_item_expand (address_bar)
1065    
1066     -- Back icon
1067 king 56761 tb.extend (history_manager.back_command.new_toolbar_item (False))
1068 manus 26913
1069     -- Forward icon
1070 king 56761 tb.extend (history_manager.forth_command.new_toolbar_item (False))
1071 manus 51111
1072 xavier 27498 -- Set up the accelerators.
1073     create accel.make_with_key_combination (
1074 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_right), False, True, False
1075 xavier 27498 )
1076 manus 36309 accel.actions.extend (agent on_forth)
1077 xavier 27498 window.accelerators.extend (accel)
1078 manus 51111
1079 xavier 27498 create accel.make_with_key_combination (
1080 king 56761 create {EV_KEY}.make_with_code ({EV_KEY_CONSTANTS}.Key_left), False, True, False
1081 xavier 27498 )
1082 manus 36309 accel.actions.extend (agent on_back)
1083 xavier 27498 window.accelerators.extend (accel)
1084 manus 26913
1085     ------------------------------------------
1086     -- Address bar (Class name & feature name)
1087     ------------------------------------------
1088     hbox.extend (address_manager.widget)
1089 neilc 49534 -- editor_tool.text_area.add_cursor_observer (address_manager)
1090 manus 26913
1091     -- Create the command to show/hide this toolbar.
1092 manus 51111 create show_address_toolbar_command.make (address_toolbar, Interface_names.m_address_toolbar)
1093 manus 26913 show_toolbar_commands.extend (show_address_toolbar_command)
1094    
1095 king 55319 if development_window_data.show_address_toolbar then
1096 manus 26913 show_address_toolbar_command.enable_visible
1097     else
1098     show_address_toolbar_command.disable_visible
1099     end
1100    
1101     -- Cell to fill in empty space and receive the right click menu holder.
1102     create cell
1103 manus 36309 cell.pointer_button_release_actions.extend (agent toolbar_right_click_action)
1104 manus 26913 hbox.extend (cell)
1105     end
1106    
1107     build_project_toolbar is
1108     -- Build toolbar corresponding to the project options bar
1109     local
1110     cell: EV_CELL
1111     hsep: EV_HORIZONTAL_SEPARATOR
1112     hbox: EV_HORIZONTAL_BOX
1113     do
1114     create project_toolbar
1115     create hsep
1116     project_toolbar.extend (hsep)
1117     project_toolbar.disable_item_expand (hsep)
1118    
1119     -- Generate the toolbar.
1120     create hbox
1121 jfiat 56447 project_customizable_toolbar := Eb_debugger_manager.new_toolbar
1122 manus 26913 hbox.extend (project_customizable_toolbar.widget)
1123     hbox.disable_item_expand (project_customizable_toolbar.widget)
1124    
1125     project_customizable_toolbar.update_toolbar
1126    
1127     -- Create the command to show/hide this toolbar.
1128 manus 51111 create show_project_toolbar_command.make (project_toolbar, Interface_names.m_project_toolbar)
1129 manus 26913 show_toolbar_commands.extend (show_project_toolbar_command)
1130 king 55319 if development_window_data.show_project_toolbar then
1131 manus 26913 show_project_toolbar_command.enable_visible
1132     else
1133     show_project_toolbar_command.disable_visible
1134     end
1135    
1136     -- Cell to fill in empty space and receive the right click menu holder.
1137     create cell
1138 manus 36309 cell.pointer_button_release_actions.extend (agent toolbar_right_click_action)
1139 manus 26913 hbox.extend (cell)
1140     project_toolbar.extend (hbox)
1141     end
1142    
1143 patrickr 56781 build_refactoring_toolbar is
1144     -- Build refactoring toolbar.
1145     local
1146     cell: EV_CELL
1147     hsep: EV_HORIZONTAL_SEPARATOR
1148     hbox: EV_HORIZONTAL_BOX
1149     do
1150     -- Create the toolbar.
1151     create refactoring_toolbar
1152     refactoring_customizable_toolbar := development_window_data.retrieve_refactoring_toolbar (toolbarable_commands)
1153     if development_window_data.show_text_in_refactoring_toolbar then
1154     refactoring_customizable_toolbar.enable_important_text
1155     elseif development_window_data.show_all_text_in_refactoring_toolbar then
1156     refactoring_customizable_toolbar.enable_text_displayed
1157     end
1158    
1159     create hbox
1160     hbox.extend (refactoring_customizable_toolbar.widget)
1161     hbox.disable_item_expand (refactoring_customizable_toolbar.widget)
1162    
1163     -- Generate the toolbar.
1164     refactoring_customizable_toolbar.update_toolbar
1165    
1166     -- Cell to fill in empty space and receive the right click menu holder.
1167     create cell
1168     cell.pointer_button_release_actions.extend (agent toolbar_right_click_action)
1169     hbox.extend (cell)
1170    
1171     -- Create the vertical layout (separator + toolbar)
1172     create hsep
1173     refactoring_toolbar.set_padding (2)
1174     refactoring_toolbar.extend (hsep)
1175     refactoring_toolbar.disable_item_expand (hsep)
1176     refactoring_toolbar.extend (hbox)
1177    
1178     -- Create the command to show/hide this toolbar.
1179     create show_refactoring_toolbar_command.make (refactoring_toolbar, Interface_names.m_refactoring_toolbar)
1180     show_toolbar_commands.extend (show_refactoring_toolbar_command)
1181     if development_window_data.show_refactoring_toolbar then
1182     show_refactoring_toolbar_command.enable_visible
1183     else
1184     show_refactoring_toolbar_command.disable_visible
1185     end
1186     end
1187    
1188    
1189 manus 45562 feature {NONE} -- Menu Building
1190 manus 26913
1191     build_file_menu is
1192     -- Build the file menu.
1193     local
1194     new_project_cmd: EB_NEW_PROJECT_COMMAND
1195     open_project_cmd: EB_OPEN_PROJECT_COMMAND
1196     send_to_menu: EV_MENU
1197     menu_item: EV_MENU_ITEM
1198     command_menu_item: EB_COMMAND_MENU_ITEM
1199     do
1200 manus 51111 create file_menu.make_with_text (Interface_names.m_file)
1201 manus 26913
1202     -- New
1203     command_menu_item := New_development_window_cmd.new_menu_item
1204     add_recyclable (command_menu_item)
1205     file_menu.extend (command_menu_item)
1206    
1207     -- New editor
1208     command_menu_item := New_editor_cmd.new_menu_item
1209     add_recyclable (command_menu_item)
1210     file_menu.extend (command_menu_item)
1211    
1212     -- New context tool
1213     command_menu_item := New_context_tool_cmd.new_menu_item
1214     add_recyclable (command_menu_item)
1215     file_menu.extend (command_menu_item)
1216    
1217     -- Open
1218     command_menu_item := open_cmd.new_menu_item
1219     add_recyclable (command_menu_item)
1220     file_menu.extend (command_menu_item)
1221    
1222     -- Close
1223 manus 51111 create menu_item.make_with_text (Interface_names.m_close)
1224 manus 36309 menu_item.select_actions.extend (agent destroy)
1225 manus 26913 file_menu.extend (menu_item)
1226    
1227     -- Separator --------------------------------------
1228     file_menu.extend (create {EV_MENU_SEPARATOR})
1229    
1230     -- Save
1231     command_menu_item := save_cmd.new_menu_item
1232     add_recyclable (command_menu_item)
1233     file_menu.extend (command_menu_item)
1234    
1235     -- Save as
1236     command_menu_item := save_as_cmd.new_menu_item
1237     add_recyclable (command_menu_item)
1238     file_menu.extend (command_menu_item)
1239    
1240     -- Sent to
1241 manus 51111 create send_to_menu.make_with_text (Interface_names.m_send_to)
1242 manus 26913 -- External editor
1243     command_menu_item := shell_cmd.new_menu_item
1244     add_recyclable (command_menu_item)
1245     send_to_menu.extend (command_menu_item)
1246     file_menu.extend (send_to_menu)
1247    
1248     -- Separator --------------------------------------
1249     file_menu.extend (create {EV_MENU_SEPARATOR})
1250     command_menu_item := print_cmd.new_menu_item
1251     add_recyclable (command_menu_item)
1252     file_menu.extend (command_menu_item)
1253    
1254     -- Separator --------------------------------------
1255     file_menu.extend (create {EV_MENU_SEPARATOR})
1256    
1257     -- New Project
1258     create new_project_cmd.make_with_parent (window)
1259 manus 51111 create menu_item.make_with_text (Interface_names.m_new_project)
1260 manus 36309 menu_item.select_actions.extend (agent new_project_cmd.execute)
1261 manus 26913 file_menu.extend (menu_item)
1262    
1263     -- Open Project
1264     create open_project_cmd.make_with_parent (window)
1265 manus 51111 create menu_item.make_with_text (Interface_names.m_open_project)
1266 manus 26913 menu_item.select_actions.extend (agent open_project_cmd.execute)
1267     file_menu.extend (menu_item)
1268    
1269     -- Recent Projects
1270     recent_projects_menu := recent_projects_manager.new_menu
1271     add_recyclable (recent_projects_menu)
1272     file_menu.extend (recent_projects_menu)
1273    
1274     -- Separator --------------------------------------
1275     file_menu.extend (create {EV_MENU_SEPARATOR})
1276    
1277     -- Exit
1278     command_menu_item := Exit_application_cmd.new_menu_item
1279     add_recyclable (Command_menu_item)
1280     file_menu.extend (command_menu_item)
1281     end
1282    
1283     build_class_info_menu: EV_MENU is
1284     -- Build the class format sub-menu.
1285     local
1286     form: EB_CLASS_INFO_FORMATTER
1287     empty_menu: EV_MENU_ITEM
1288     i: INTEGER
1289     do
1290 manus 51111 create Result.make_with_text (Interface_names.m_class_info)
1291 manus 26913 i := 1
1292    
1293 manus 51111 create empty_menu.make_with_text (Interface_names.m_formatter_separators @ i)
1294 manus 26913 i := i + 1
1295     empty_menu.disable_sensitive
1296     Result.extend (empty_menu)
1297     from
1298     managed_class_formatters.start
1299     until
1300     managed_class_formatters.after
1301     loop
1302     form := managed_class_formatters.item
1303     if form /= Void then
1304     Result.extend (form.new_menu_item)
1305     else
1306 manus 51111 create empty_menu.make_with_text (Interface_names.m_formatter_separators @ i)
1307 manus 26913 i := i + 1
1308     empty_menu.disable_sensitive
1309     Result.extend (empty_menu)
1310     end
1311     managed_class_formatters.forth
1312     end
1313     end
1314    
1315     build_feature_info_menu: EV_MENU is
1316     -- Build the feature format sub-menu.
1317     local
1318     form: EB_FEATURE_INFO_FORMATTER
1319     do
1320 manus 51111 create Result.make_with_text (Interface_names.m_feature_info)
1321 manus 26913 from
1322     managed_feature_formatters.start
1323     until
1324     managed_feature_formatters.after
1325     loop
1326     form := managed_feature_formatters.item
1327     if form /= Void then
1328     Result.extend (form.new_menu_item)
1329     end
1330     managed_feature_formatters.forth
1331     end
1332     end
1333    
1334     build_edit_menu is
1335     -- Create and build `edit_menu'
1336     local
1337     command_menu_item: EB_COMMAND_MENU_ITEM
1338     sub_menu: EV_MENU
1339     cmd: EB_EDITOR_COMMAND
1340     os_cmd: EB_ON_SELECTION_COMMAND
1341     editor: EB_SMART_EDITOR
1342 neilc 53728 ln_cmd: EB_TOGGLE_LINE_NUMBERS_COMMAND
1343 manus 26913 do
1344     editor := editor_tool.text_area
1345 xavier 28303 create command_controller.make
1346 manus 26913
1347 manus 51111 create edit_menu.make_with_text (Interface_names.m_edit)
1348 manus 26913
1349     -- Undo
1350     command_menu_item := undo_cmd.new_menu_item
1351     add_recyclable (command_menu_item)
1352     edit_menu.extend (command_menu_item)
1353    
1354     -- Redo
1355     command_menu_item := redo_cmd.new_menu_item
1356     add_recyclable (command_menu_item)
1357     edit_menu.extend (command_menu_item)
1358    
1359     -- Separator --------------------------------------
1360     edit_menu.extend (create {EV_MENU_SEPARATOR})
1361    
1362     -- Cut
1363 xavier 28303 create os_cmd.make (Current)
1364     os_cmd.set_menu_name (Interface_names.M_cut)
1365 king 56761 os_cmd.set_pixmap (pixmaps.icon_cut)
1366 xavier 28303 os_cmd.set_name ("Editor_cut")
1367     os_cmd.set_tooltip (interface_names.f_cut)
1368 manus 36309 os_cmd.add_agent (agent cut_selection)
1369 manus 51111 os_cmd.set_tooltext (Interface_names.b_cut)
1370 xavier 28303 toolbarable_commands.extend (os_cmd)
1371     os_cmd.set_needs_editable (True)
1372     command_controller.add_selection_command (os_cmd)
1373     command_menu_item := os_cmd.new_menu_item
1374 manus 26913 add_recyclable (command_menu_item)
1375     edit_menu.extend (command_menu_item)
1376    
1377     -- Copy
1378 xavier 28303 create os_cmd.make (Current)
1379     os_cmd.set_menu_name (Interface_names.M_copy)
1380 king 56761 os_cmd.set_pixmap (pixmaps.icon_copy)
1381 xavier 28303 os_cmd.set_name ("Editor_copy")
1382     os_cmd.set_tooltip (interface_names.f_copy)
1383 manus 51111 os_cmd.set_tooltext (Interface_names.b_copy)
1384 manus 36309 os_cmd.add_agent (agent copy_selection)
1385 xavier 28303 toolbarable_commands.extend (os_cmd)
1386     os_cmd.set_needs_editable (False)
1387     command_controller.add_selection_command (os_cmd)
1388     command_menu_item := os_cmd.new_menu_item
1389 manus 26913 add_recyclable (command_menu_item)
1390     edit_menu.extend (command_menu_item)
1391    
1392     -- Paste
1393     command_menu_item := editor_paste_cmd.new_menu_item
1394     add_recyclable (command_menu_item)
1395     edit_menu.extend (command_menu_item)
1396    
1397     -- Separator --------------------------------------
1398     edit_menu.extend (create {EV_MENU_SEPARATOR})
1399    
1400     -- Select all
1401     create cmd.make
1402     cmd.set_menu_name (Interface_names.m_select_all)
1403 manus 36309 cmd.add_agent (agent select_all)
1404 manus 26913 command_menu_item := cmd.new_menu_item
1405 xavier 28303 command_controller.add_edition_command (cmd)
1406 manus 26913 add_recyclable (command_menu_item)
1407     edit_menu.extend (command_menu_item)
1408    
1409     -- Separator --------------------------------------
1410     edit_menu.extend (create {EV_MENU_SEPARATOR})
1411    
1412 neilc 49534 -- Line numbers
1413 neilc 53728 create ln_cmd.make
1414     command_menu_item := ln_cmd.new_menu_item
1415 neilc 49534 add_recyclable (command_menu_item)
1416     edit_menu.extend (command_menu_item)
1417 neilc 53728 window.accelerators.extend (ln_cmd.accelerator)
1418 neilc 49534
1419 manus 55527
1420 neilc 49534 -- Separator --------------------------------------
1421     edit_menu.extend (create {EV_MENU_SEPARATOR})
1422    
1423 manus 26913 -- Search
1424     create cmd.make
1425 neilc 55887 cmd.set_menu_name (Interface_names.m_search + "%T" + preferences.editor_data.shortcuts.item ("show_search_panel").display_string)
1426 manus 36309 cmd.add_agent (agent search)
1427 manus 26913 command_menu_item := cmd.new_menu_item
1428 xavier 28303 command_controller.add_edition_command (cmd)
1429 manus 26913 add_recyclable (command_menu_item)
1430     edit_menu.extend (command_menu_item)
1431    
1432 neilc 49534 -- Go to
1433     create cmd.make
1434 manus 51111 cmd.set_menu_name (Interface_names.m_go_to)
1435 neilc 49534 cmd.add_agent (agent goto)
1436     cmd.set_needs_editable (True)
1437     command_menu_item := cmd.new_menu_item
1438     command_controller.add_edition_command (cmd)
1439     add_recyclable (command_menu_item)
1440     edit_menu.extend (command_menu_item)
1441    
1442 manus 26913 -- Replace
1443     create cmd.make
1444 neilc 55887 cmd.set_menu_name (Interface_names.m_replace + "%T" + preferences.editor_data.shortcuts.item ("show_search_and_replace_panel").display_string)
1445 manus 36309 cmd.add_agent (agent editor.replace)
1446 xavier 27860 cmd.set_needs_editable (True)
1447 manus 26913 command_menu_item := cmd.new_menu_item
1448 xavier 28303 command_controller.add_edition_command (cmd)
1449 manus 26913 add_recyclable (command_menu_item)
1450     edit_menu.extend (command_menu_item)
1451    
1452     -- Find sub menu
1453    
1454 manus 51111 create sub_menu.make_with_text (Interface_names.m_find)
1455 manus 26913
1456     -- Find next
1457     create cmd.make
1458 neilc 55887 cmd.set_menu_name (Interface_names.m_find_next + "%T" + preferences.editor_data.shortcuts.item ("search_last").display_string)
1459 manus 36309 cmd.add_agent (agent find_next)
1460 manus 26913 command_menu_item := cmd.new_menu_item
1461 xavier 28303 command_controller.add_edition_command (cmd)
1462 manus 26913 add_recyclable (command_menu_item)
1463     sub_menu.extend (command_menu_item)
1464    
1465     -- Find previous
1466     create cmd.make
1467 neilc 55887 cmd.set_menu_name (Interface_names.m_find_previous + "%T" + preferences.editor_data.shortcuts.item ("search_backward").display_string)
1468 manus 36309 cmd.add_agent (agent find_previous)
1469 manus 26913 command_menu_item := cmd.new_menu_item
1470 xavier 28303 command_controller.add_edition_command (cmd)
1471 manus 26913 add_recyclable (command_menu_item)
1472     sub_menu.extend (command_menu_item)
1473    
1474     -- Find selection
1475     create os_cmd.make (Current)
1476 neilc 55887 os_cmd.set_menu_name (Interface_names.m_find_selection + "%T" + preferences.editor_data.shortcuts.item ("search_selection").display_string)
1477 manus 36309 os_cmd.add_agent (agent find_selection)
1478 manus 26913 command_menu_item := os_cmd.new_menu_item
1479 xavier 28303 command_controller.add_selection_command (os_cmd)
1480 manus 26913 add_recyclable (command_menu_item)
1481     sub_menu.extend (command_menu_item)
1482    
1483     edit_menu.extend (sub_menu)
1484    
1485    
1486     -- Separator --------------------------------------
1487     edit_menu.extend (create {EV_MENU_SEPARATOR})
1488    
1489 manus 51111 create sub_menu.make_with_text (Interface_names.m_advanced)
1490 manus 26913
1491     create os_cmd.make (Current)
1492 xavier 27860 os_cmd.set_needs_editable (True)
1493 xavier 28303 command_controller.add_selection_command (os_cmd)
1494 manus 51111 os_cmd.set_menu_name (Interface_names.m_indent)
1495 manus 36309 os_cmd.add_agent (agent editor.indent_selection)
1496 manus 26913 command_menu_item := os_cmd.new_menu_item
1497     add_recyclable (command_menu_item)
1498     sub_menu.extend (command_menu_item)
1499    
1500     create os_cmd.make (Current)
1501 xavier 27860 os_cmd.set_needs_editable (True)
1502 xavier 28303 command_controller.add_selection_command (os_cmd)
1503 manus 51111 os_cmd.set_menu_name (Interface_names.m_unindent)
1504 manus 36309 os_cmd.add_agent (agent editor.unindent_selection)
1505 manus 26913 command_menu_item := os_cmd.new_menu_item
1506     add_recyclable (command_menu_item)
1507     sub_menu.extend (command_menu_item)
1508    
1509     create os_cmd.make (Current)
1510 xavier 27860 os_cmd.set_needs_editable (True)
1511 xavier 28303 command_controller.add_selection_command (os_cmd)
1512 manus 51111 os_cmd.set_menu_name (Interface_names.m_to_lower)
1513 manus 36309 os_cmd.add_agent (agent editor.set_selection_case (True))
1514 manus 26913 command_menu_item := os_cmd.new_menu_item
1515     add_recyclable (command_menu_item)
1516     sub_menu.extend (command_menu_item)
1517    
1518     create os_cmd.make (Current)
1519 xavier 27860 os_cmd.set_needs_editable (True)
1520 xavier 28303 command_controller.add_selection_command (os_cmd)
1521 manus 51111 os_cmd.set_menu_name (Interface_names.m_to_upper)
1522 manus 36309 os_cmd.add_agent (agent editor.set_selection_case (False))
1523 manus 26913 command_menu_item := os_cmd.new_menu_item
1524     add_recyclable (command_menu_item)
1525     sub_menu.extend (command_menu_item)
1526    
1527     create cmd.make
1528 xavier 27860 cmd.set_needs_editable (True)
1529 manus 51111 cmd.set_menu_name (Interface_names.m_comment)
1530 manus 36309 cmd.add_agent (agent editor.comment_selection)
1531 manus 26913 command_menu_item := cmd.new_menu_item
1532 xavier 28303 command_controller.add_edition_command (cmd)
1533 manus 26913 add_recyclable (command_menu_item)
1534     sub_menu.extend (command_menu_item)
1535    
1536     create cmd.make
1537 xavier 27860 cmd.set_needs_editable (True)
1538 manus 51111 cmd.set_menu_name (Interface_names.m_uncomment)
1539 manus 36309 cmd.add_agent (agent editor.uncomment_selection)
1540 manus 26913 command_menu_item := cmd.new_menu_item
1541 xavier 28303 command_controller.add_edition_command (cmd)
1542 manus 26913 add_recyclable (command_menu_item)
1543     sub_menu.extend (command_menu_item)
1544    
1545     -- Separator --------------------------------------
1546     sub_menu.extend (create {EV_MENU_SEPARATOR})
1547    
1548     -- Insert if block
1549     create cmd.make
1550 xavier 27860 cmd.set_needs_editable (True)
1551 manus 51111 cmd.set_menu_name (Interface_names.m_if_block)
1552 manus 36309 cmd.add_agent (agent editor.embed_in_block("if then", 3))
1553 manus 26913 command_menu_item := cmd.new_menu_item
1554 xavier 28303 command_controller.add_edition_command (cmd)
1555 manus 26913 add_recyclable (command_menu_item)
1556     sub_menu.extend (command_menu_item)
1557    
1558     -- Insert debug block
1559     create cmd.make
1560 xavier 27860 cmd.set_needs_editable (True)
1561 manus 26913 cmd.set_menu_name (Interface_names.m_debug_block)
1562 manus 36309 cmd.add_agent (agent editor.embed_in_block("debug", 5))
1563 manus 26913 command_menu_item := cmd.new_menu_item
1564 xavier 28303 command_controller.add_edition_command (cmd)
1565 manus 26913 add_recyclable (command_menu_item)
1566     sub_menu.extend (command_menu_item)
1567    
1568    
1569     -- Separator --------------------------------------
1570     sub_menu.extend (create {EV_MENU_SEPARATOR})
1571    
1572     -- Complete word
1573     create cmd.make
1574 xavier 27860 cmd.set_needs_editable (True)
1575 neilc 55887 cmd.set_menu_name (Interface_names.m_complete_word + "%T" + preferences.editor_data.shortcuts.item ("autocomplete").display_string)
1576 manus 26913 command_menu_item := cmd.new_menu_item
1577 xavier 28303 command_controller.add_edition_command (cmd)
1578 manus 36309 cmd.add_agent (agent editor.complete_feature_name)
1579 manus 26913
1580     add_recyclable (command_menu_item)
1581     sub_menu.extend (command_menu_item)
1582    
1583 etienne 27163 -- Complete class name
1584     create cmd.make
1585 xavier 27860 cmd.set_needs_editable (True)
1586 neilc 55887 cmd.set_menu_name (Interface_names.m_complete_class_name + "%T" + preferences.editor_data.shortcuts.item ("class_autocomplete").display_string)
1587 etienne 27163 command_menu_item := cmd.new_menu_item
1588 xavier 28303 command_controller.add_edition_command (cmd)
1589 manus 36309 cmd.add_agent (agent editor.complete_class_name)
1590 etienne 27163
1591     add_recyclable (command_menu_item)
1592     sub_menu.extend (command_menu_item)
1593    
1594 manus 26913 sub_menu.extend (create {EV_MENU_SEPARATOR})
1595    
1596     -- show/hide formatting marks.
1597     create cmd.make
1598     if editor_tool.text_area.view_invisible_symbols then
1599 manus 51111 cmd.set_menu_name (Interface_names.m_hide_formatting_marks)
1600 manus 26913 else
1601 manus 51111 cmd.set_menu_name (Interface_names.m_show_formatting_marks)
1602 manus 26913 end
1603     formatting_marks_command_menu_item := cmd.new_menu_item
1604 xavier 28303 command_controller.add_edition_command (cmd)
1605 manus 36309 cmd.add_agent (agent toggle_formatting_marks)
1606 manus 26913
1607     add_recyclable (formatting_marks_command_menu_item)
1608     sub_menu.extend (formatting_marks_command_menu_item)
1609    
1610     edit_menu.extend (sub_menu)
1611     end
1612    
1613     build_view_menu is
1614     -- Build the view menu.
1615     local
1616     form: EB_CLASS_INFO_FORMATTER
1617     new_menu_item: EB_COMMAND_MENU_ITEM
1618     new_basic_item: EV_MENU_ITEM
1619     do
1620     Precursor
1621    
1622     new_menu_item := toggle_stone_cmd.new_menu_item
1623     view_menu.extend (new_menu_item)
1624     add_recyclable (new_menu_item)
1625    
1626     new_menu_item := send_stone_to_context_cmd.new_menu_item
1627     view_menu.extend (new_menu_item)
1628     add_recyclable (new_menu_item)
1629     -- Go to menu
1630     new_basic_item := history_manager.new_menu
1631     view_menu.extend (new_basic_item)
1632    
1633     -- Separator --------------------------------------
1634     view_menu.extend (create {EV_MENU_SEPARATOR})
1635     view_menu.extend (build_class_info_menu)
1636     view_menu.extend (build_feature_info_menu)
1637    
1638     -- Separator --------------------------------------
1639     view_menu.extend (create {EV_MENU_SEPARATOR})
1640    
1641     from
1642     managed_main_formatters.start
1643     until
1644     managed_main_formatters.after
1645     loop
1646     form := managed_main_formatters.item
1647     new_basic_item := form.new_menu_item
1648 manus 36309 new_basic_item.select_actions.put_front (agent form.invalidate)
1649 manus 26913 view_menu.extend (new_basic_item)
1650     --add_recyclable (new_basic_item)
1651     managed_main_formatters.forth
1652     end
1653     end
1654 manus 51111
1655 manus 26913 build_favorites_menu is
1656     -- Build the favorites menu
1657     do
1658     Precursor {EB_TOOL_MANAGER}
1659 manus 51111
1660 manus 26913 create show_favorites_menu_item
1661     update_show_favorites_menu_item
1662 manus 36309 show_favorites_menu_item.select_actions.extend (agent execute_show_favorites)
1663 manus 51111
1664 manus 26913 favorites_menu.start
1665     favorites_menu.put_right (show_favorites_menu_item)
1666 manus 36309 favorites_menu.select_actions.extend (agent update_show_favorites_menu_item)
1667 manus 26913 end
1668 manus 51111
1669 jasonw 54933 -- Jason Wei modified the following on Aug 31 2005
1670 manus 26913 build_project_menu is
1671     -- Build the project menu.
1672     local
1673     command_menu_item: EB_COMMAND_MENU_ITEM
1674     do
1675 manus 51111 create project_menu.make_with_text (Interface_names.m_project)
1676 manus 26913
1677     -- Melt
1678     command_menu_item := Melt_project_cmd.new_menu_item
1679     add_recyclable (command_menu_item)
1680     project_menu.extend (command_menu_item)
1681    
1682 xavier 29812 -- Quick melt
1683     command_menu_item := Quick_melt_project_cmd.new_menu_item
1684     add_recyclable (command_menu_item)
1685     project_menu.extend (command_menu_item)
1686    
1687 manus 26913 -- Freeze
1688     command_menu_item := Freeze_project_cmd.new_menu_item
1689     add_recyclable (command_menu_item)
1690     project_menu.extend (command_menu_item)
1691    
1692     -- Finalize
1693     command_menu_item := Finalize_project_cmd.new_menu_item
1694     add_recyclable (command_menu_item)
1695     project_menu.extend (command_menu_item)
1696    
1697     -- Precompile
1698     command_menu_item := precompilation_cmd.new_menu_item
1699     add_recyclable (command_menu_item)
1700     project_menu.extend (command_menu_item)
1701 manus 55527
1702 king 55319 -- Cancel
1703     command_menu_item := project_cancel_cmd.new_menu_item
1704     add_recyclable (command_menu_item)
1705     project_menu.extend (command_menu_item)
1706 manus 26913
1707     -- Separator -------------------------------------------------
1708     project_menu.extend (create {EV_MENU_SEPARATOR})
1709    
1710     -- Compile Workbench C code
1711     command_menu_item := c_workbench_compilation_cmd.new_menu_item
1712     add_recyclable (command_menu_item)
1713     project_menu.extend (command_menu_item)
1714    
1715     -- Compile Finalized C code
1716     command_menu_item := c_finalized_compilation_cmd.new_menu_item
1717     add_recyclable (command_menu_item)
1718     project_menu.extend (command_menu_item)
1719    
1720 jasonw 54933 -- Jason Wei
1721     -- Terminate C compilation
1722     command_menu_item := Terminate_c_compilation_cmd.new_menu_item
1723     add_recyclable (command_menu_item)
1724     project_menu.extend (command_menu_item)
1725     -- Jason Wei
1726 manus 55527
1727 manus 26913 -- Execute Finalized code
1728     command_menu_item := run_finalized_cmd.new_menu_item
1729     add_recyclable (command_menu_item)
1730     project_menu.extend (command_menu_item)
1731    
1732     -- Separator -------------------------------------------------
1733     project_menu.extend (create {EV_MENU_SEPARATOR})
1734    
1735     -- System Tool window
1736     command_menu_item := system_cmd.new_menu_item
1737     add_recyclable (command_menu_item)
1738     project_menu.extend (command_menu_item)
1739    
1740     -- System information
1741     command_menu_item := system_info_cmd.new_menu_item
1742     add_recyclable (command_menu_item)
1743     project_menu.extend (command_menu_item)
1744    
1745     -- Error information
1746     command_menu_item := display_error_help_cmd.new_menu_item
1747     add_recyclable (command_menu_item)
1748     project_menu.extend (command_menu_item)
1749    
1750 xavier 27549 if has_documentation_generation or has_xmi_generation then
1751     -- Separator -------------------------------------------------
1752     project_menu.extend (create {EV_MENU_SEPARATOR})
1753     end
1754 manus 26913
1755 xavier 27549 if has_documentation_generation then
1756     -- Generate Documentation
1757     command_menu_item := document_cmd.new_menu_item
1758     add_recyclable (command_menu_item)
1759     project_menu.extend (command_menu_item)
1760     end
1761 manus 26913
1762 xavier 27549 if has_xmi_generation then
1763     -- Export XMI
1764     command_menu_item := export_cmd.new_menu_item
1765     add_recyclable (command_menu_item)
1766     project_menu.extend (command_menu_item)
1767     end
1768 manus 26913 end
1769    
1770 jasonw 54933 ------- This is the original version
1771     -- build_project_menu is
1772     -- -- Build the project menu.
1773     -- local
1774     -- command_menu_item: EB_COMMAND_MENU_ITEM
1775     -- do
1776     -- create project_menu.make_with_text (Interface_names.m_project)
1777     --
1778     -- -- Melt
1779     -- command_menu_item := Melt_project_cmd.new_menu_item
1780     -- add_recyclable (command_menu_item)
1781     -- project_menu.extend (command_menu_item)
1782     --
1783     -- -- Quick melt
1784     -- command_menu_item := Quick_melt_project_cmd.new_menu_item
1785     -- add_recyclable (command_menu_item)
1786     -- project_menu.extend (command_menu_item)
1787     --
1788     -- -- Freeze
1789     -- command_menu_item := Freeze_project_cmd.new_menu_item
1790     -- add_recyclable (command_menu_item)
1791     -- project_menu.extend (command_menu_item)
1792     --
1793     -- -- Finalize
1794     -- command_menu_item := Finalize_project_cmd.new_menu_item
1795     -- add_recyclable (command_menu_item)
1796     -- project_menu.extend (command_menu_item)
1797     --
1798     -- -- Precompile
1799     -- command_menu_item := precompilation_cmd.new_menu_item
1800     -- add_recyclable (command_menu_item)
1801     -- project_menu.extend (command_menu_item)
1802     --
1803     -- -- Separator -------------------------------------------------
1804     -- project_menu.extend (create {EV_MENU_SEPARATOR})
1805     --
1806     -- -- Compile Workbench C code
1807     -- command_menu_item := c_workbench_compilation_cmd.new_menu_item
1808     -- add_recyclable (command_menu_item)
1809     -- project_menu.extend (command_menu_item)
1810     --
1811     -- -- Compile Finalized C code
1812     -- command_menu_item := c_finalized_compilation_cmd.new_menu_item
1813     -- add_recyclable (command_menu_item)
1814     -- project_menu.extend (command_menu_item)
1815     --
1816     -- -- Execute Finalized code
1817     -- command_menu_item := run_finalized_cmd.new_menu_item
1818     -- add_recyclable (command_menu_item)
1819     -- project_menu.extend (command_menu_item)
1820     --
1821     -- -- Separator -------------------------------------------------
1822     -- project_menu.extend (create {EV_MENU_SEPARATOR})
1823     --
1824     -- -- System Tool window
1825     -- command_menu_item := system_cmd.new_menu_item
1826     -- add_recyclable (command_menu_item)
1827     -- project_menu.extend (command_menu_item)
1828     --
1829     -- -- System information
1830     -- command_menu_item := system_info_cmd.new_menu_item
1831     -- add_recyclable (command_menu_item)
1832     -- project_menu.extend (command_menu_item)
1833     --
1834     -- -- Error information
1835     -- command_menu_item := display_error_help_cmd.new_menu_item
1836     -- add_recyclable (command_menu_item)
1837     -- project_menu.extend (command_menu_item)
1838     --
1839     -- if has_documentation_generation or has_xmi_generation then
1840     -- -- Separator -------------------------------------------------
1841     -- project_menu.extend (create {EV_MENU_SEPARATOR})
1842     -- end
1843     --
1844     -- if has_documentation_generation then
1845     -- -- Generate Documentation
1846     -- command_menu_item := document_cmd.new_menu_item
1847     -- add_recyclable (command_menu_item)
1848     -- project_menu.extend (command_menu_item)
1849     -- end
1850     --
1851     -- if has_xmi_generation then
1852     -- -- Export XMI
1853     -- command_menu_item := export_cmd.new_menu_item
1854     -- add_recyclable (command_menu_item)
1855     -- project_menu.extend (command_menu_item)
1856     -- end
1857     -- end
1858     -- Jason Wei modified the above on Aug 31 2005
1859    
1860 manus 26913 build_tools_menu is
1861     -- Create and build `tools_menu'
1862     local
1863     command_menu_item: EB_COMMAND_MENU_ITEM
1864     menu_item: EV_MENU_ITEM
1865     do
1866 manus 51111 create tools_menu.make_with_text (Interface_names.m_tools)
1867 manus 26913
1868 xavier 28240 -- New Cluster command.
1869     command_menu_item := new_cluster_cmd.new_menu_item
1870     add_recyclable (command_menu_item)
1871     tools_menu.extend (command_menu_item)
1872 manus 26913
1873 xavier 28240 -- New Class command.
1874     command_menu_item := new_class_cmd.new_menu_item
1875     add_recyclable (command_menu_item)
1876     tools_menu.extend (command_menu_item)
1877    
1878     -- New Feature command.
1879     command_menu_item := new_feature_cmd.new_menu_item
1880     add_recyclable (command_menu_item)
1881     tools_menu.extend (command_menu_item)
1882 manus 51111
1883 xavier 28240 -- Delete class/cluster command.
1884     command_menu_item := delete_class_cluster_cmd.new_menu_item
1885     add_recyclable (command_menu_item)
1886     tools_menu.extend (command_menu_item)
1887    
1888     -- Separator --------------------------------------
1889     tools_menu.extend (create {EV_MENU_SEPARATOR})
1890    
1891    
1892 xavier 27549 if has_metrics then
1893     -- Metric tool
1894 xavier 28693 create metric_menu.make_with_text (interface_names.metric_metrics)
1895 xavier 27549 create menu_item.make_with_text (interface_names.metric_calculate)
1896     metric_menu.extend (menu_item)
1897     create menu_item.make_with_text (interface_names.metric_add)
1898     metric_menu.extend (menu_item)
1899     create menu_item.make_with_text (interface_names.metric_delete)
1900     metric_menu.extend (menu_item)
1901     create menu_item.make_with_text (interface_names.metric_details)
1902     metric_menu.extend (menu_item)
1903     create menu_item.make_with_text (interface_names.metric_new_metrics)
1904     metric_menu.extend (menu_item)
1905     create menu_item.make_with_text (interface_names.metric_management)
1906     metric_menu.extend (menu_item)
1907     create menu_item.make_with_text (interface_names.metric_archive)
1908     metric_menu.extend (menu_item)
1909     metric_menu.disable_sensitive
1910     tools_menu.extend (metric_menu)
1911     end
1912 manus 51111
1913 xavier 27549 if has_profiler then
1914     -- Profiler Window
1915     command_menu_item := show_profiler.new_menu_item
1916     add_recyclable (command_menu_item)
1917     tools_menu.extend (command_menu_item)
1918     end
1919 manus 26913
1920     -- Precompile Wizard
1921     command_menu_item := wizard_precompile_cmd.new_menu_item
1922     add_recyclable (command_menu_item)
1923     tools_menu.extend (command_menu_item)
1924    
1925 xavier 27549 if has_dll_generation then
1926     -- Dynamic Library Window
1927     command_menu_item := show_dynamic_lib_tool.new_menu_item
1928     add_recyclable (command_menu_item)
1929     tools_menu.extend (command_menu_item)
1930     end
1931 manus 26913
1932     -- Separator -------------------------------------------------
1933     tools_menu.extend (create {EV_MENU_SEPARATOR})
1934    
1935     -- Preferences
1936     command_menu_item := Show_preferences_cmd.new_menu_item
1937     add_recyclable (command_menu_item)
1938     tools_menu.extend (command_menu_item)
1939 xavier 30005
1940     -- External commands editor
1941     command_menu_item := Edit_external_commands_cmd.new_menu_item
1942     add_recyclable (command_menu_item)
1943     tools_menu.extend (command_menu_item)
1944    
1945     rebuild_tools_menu
1946 manus 26913 end
1947 manus 55527
1948 manus 26913 feature -- Stone process
1949    
1950     stone: STONE
1951     -- Current stone
1952    
1953     toggle_unified_stone is
1954     -- Change the stone management mode.
1955     do
1956     unified_stone := not unified_stone
1957     if unified_stone then
1958     send_stone_to_context
1959     send_stone_to_context_cmd.disable_sensitive
1960     context_tool.link_to_development_window
1961     else
1962     if stone /= Void then
1963     send_stone_to_context_cmd.enable_sensitive
1964     end
1965     context_tool.cut_from_development_window
1966     end
1967     end
1968    
1969     set_stone (a_stone: STONE) is
1970 xavier 29993 -- Change the currently focused stone.
1971     local
1972 xavier 30037 cd: STANDARD_DISCARDABLE_CONFIRMATION_DIALOG
1973 xavier 29993 cv_cst: CLASSI_STONE
1974 neilc 49534 ef_stone: EXTERNAL_FILE_STONE
1975 xavier 29993 l: LIST [EB_DEVELOPMENT_WINDOW]
1976 neilc 49534 l_filename: STRING
1977 xavier 29993 do
1978     cv_cst ?= a_stone
1979     if cv_cst /= Void then
1980 neilc 49534 l_filename := cv_cst.class_i.name
1981     else
1982     ef_stone ?= a_stone
1983     if ef_stone /= Void then
1984     l_filename := ef_stone.file_name.string
1985     end
1986     end
1987 manus 51111
1988 neilc 49534 if cv_cst /= Void or ef_stone /= Void then
1989     l := Window_manager.development_windows_with_class (l_filename)
1990     if l.is_empty or else l.has (Current) then
1991 xavier 29993 -- We're not editing the class in another window.
1992     set_stone_after_first_check (a_stone)
1993     else
1994 manus 51111 create cd.make_initialized (2,
1995     preferences.dialog_data.already_editing_class_string,
1996     warning_messages.w_class_already_edited,
1997     Interface_names.l_do_not_show_again,
1998     preferences.preferences)
1999 manus 36309 cd.set_ok_action (agent set_stone_after_first_check (a_stone))
2000 xavier 29993 cd.show_modal_to_window (window)
2001     end
2002 manus 50607 else
2003     set_stone_after_first_check (a_stone)
2004 xavier 29993 end
2005     end
2006    
2007 manus 50607 set_stone_after_first_check (a_stone: STONE) is
2008     -- Display text associated with `a_stone', if any and if possible
2009     local
2010     feature_stone: FEATURE_STONE
2011     old_class_stone: CLASSI_STONE
2012     test_stone: CLASSI_STONE
2013     same_class: BOOLEAN
2014     conv_ferrst: FEATURE_ERROR_STONE
2015     ef_stone: EXTERNAL_FILE_STONE
2016 tedf 55179 cluster_st: CLUSTER_STONE
2017     new_class_stone: CLASSI_STONE
2018     conv_ace: ACE_SYNTAX_STONE
2019     conv_errst: ERROR_STONE
2020     conv_brkstone: BREAKABLE_STONE
2021 manus 50607 do
2022     old_class_stone ?= stone
2023     feature_stone ?= a_stone
2024     ef_stone ?= a_stone
2025 tedf 55179 new_class_stone ?= a_stone
2026     cluster_st ?= a_stone
2027 manus 55527
2028 tedf 55179 -- Update the history.
2029     conv_brkstone ?= a_stone
2030     conv_errst ?= a_stone
2031     conv_ace ?= a_stone
2032 manus 55527 if
2033 tedf 55179 conv_brkstone = Void and
2034     conv_errst = Void and
2035     conv_ace = Void and
2036 manus 55527 ef_stone = Void
2037 tedf 55179 then
2038     if
2039     new_class_stone /= Void
2040     then
2041     history_manager.extend (new_class_stone)
2042     elseif
2043     cluster_st /= Void
2044     then
2045     history_manager.extend (cluster_st)
2046     end
2047     end
2048 manus 55527
2049 manus 50607 if old_class_stone /= Void then
2050     create test_stone.make (old_class_stone.class_i)
2051     same_class := test_stone.same_as (a_stone)
2052     -- We need to compare classes. If `old_class_stone' is a FEATURE_STONE
2053     -- `same_as' will compare features. Therefore, we need `test_stone' to be sure
2054     -- we have a CLASSI_STONE.
2055     if same_class and then feature_stone /= Void then
2056     same_class := False
2057     -- if the stone corresponding to a feature of currently opened class is dropped
2058     -- we attempt to scroll to the feature without asking to save the file
2059     -- except if it is during a resynchronization, in which case we do not scroll at all.
2060     if editor_tool.text_area.text_is_fully_loaded then
2061 manus 26913 if not during_synchronization then
2062 tedf 55441 scroll_to_feature (feature_stone.e_feature, new_class_stone.class_i)
2063 tedf 55673 feature_stone_already_processed := True
2064 manus 50607 else
2065     feature_stone_already_processed := True
2066 manus 26913 end
2067 manus 50607 conv_ferrst ?= feature_stone
2068     if feature_stone_already_processed and conv_ferrst /= Void then
2069     -- Scroll to the line of the error.
2070     if not during_synchronization then
2071     editor_tool.text_area.display_line_when_ready (conv_ferrst.line_number, True)
2072     end
2073     end
2074 manus 26913 end
2075     end
2076 manus 50607 elseif ef_stone /= Void then
2077 manus 26913 end
2078 manus 51111
2079 manus 50607 -- first, let's check if there is already something in this window
2080     -- if there's nothing, there's no need to save anything...
2081     if stone = Void or else not changed or else feature_stone_already_processed or else same_class then
2082     set_stone_after_check (a_stone)
2083     feature_stone_already_processed := False
2084     else
2085     -- there is something to be saved
2086     -- if user chooses to save, current file will be parsed
2087 manus 51111 -- if there is a syntax_error, new file is not loaded
2088 manus 50607 save_and (agent set_stone_after_check (a_stone))
2089     if text_saved and then not syntax_is_correct then
2090     text_saved := False
2091     during_synchronization := True
2092     set_stone_after_check (stone)
2093     during_synchronization := False
2094     address_manager.refresh
2095     end
2096     end
2097 tedf 56832 if not editor_tool.text_area.has_focus then
2098     ev_application.idle_actions.extend_kamikaze (agent editor_tool.set_focus)
2099     end
2100 neilc 49534 end
2101 manus 50607
2102     force_stone (s: STONE) is
2103     -- make `s' the new value of `stone', and
2104     -- change the display accordingly. Try to
2105     -- extract a class from `s' whenever possible.
2106     do
2107     if s.is_storable then
2108     set_stone (s)
2109     if not unified_stone then
2110     context_tool.advanced_set_stone (s)
2111     end
2112 manus 26913 end
2113     end
2114    
2115 manus 50607 process_class (s: CLASSI_STONE) is
2116     -- Process class stone
2117     do
2118 neilc 49534 set_stone (s)
2119 manus 50607 end
2120 manus 51111
2121 manus 50607 process_feature_error (s: FEATURE_ERROR_STONE) is
2122     -- Process feature error stone.
2123     local
2124     cl_stone: CLASSC_STONE
2125     e_class: CLASS_C
2126     do
2127     set_default_format
2128     e_class := s.e_feature.written_class
2129     create cl_stone.make (e_class)
2130     set_stone (cl_stone)
2131     editor_tool.text_area.deselect_all
2132     if s.line_number > 0 then
2133     editor_tool.text_area.highlight_selected (s.line_number, s.line_number)
2134 manus 26913 end
2135     end
2136    
2137 manus 50607
2138     process_class_syntax (s: CL_SYNTAX_STONE) is
2139     -- Process class syntax.
2140     local
2141     cl_stone: CLASSC_STONE
2142     do
2143     -- call set_stone to ensure the proper class is displayed
2144     create cl_stone.make (s.e_class)
2145     set_stone (cl_stone)
2146     editor_tool.text_area.deselect_all
2147     editor_tool.text_area.highlight_when_ready (s.line, s.line)
2148 manus 26913 end
2149 manus 51111
2150 manus 50607 refresh is
2151     -- Synchronize clickable elements with text, if possible.
2152     do
2153     --| FIXME ARNAUD
2154     -- synchronise_stone
2155     --| END FIXME
2156     --| FIXME XR: Refresh current display in the editor.
2157     editor_tool.text_area.update_click_list (False)
2158     update_save_symbol
2159     address_manager.refresh
2160     -- The cluster manager should already be refreshed by the window manager.
2161     -- cluster_manager.refresh
2162     -- context_tool.refresh
2163     end
2164 manus 26913
2165 manus 52526 quick_refresh_editors is
2166     -- Redraw editors' drawing area.
2167 manus 50607 do
2168     editor_tool.text_area.refresh
2169 manus 52526 context_tool.quick_refresh_editors
2170 manus 50607 end
2171 manus 26913
2172 manus 52526 quick_refresh_margins is
2173     -- Redraw the main editor's drawing area.
2174     do
2175     editor_tool.text_area.margin.refresh
2176     context_tool.quick_refresh_margins
2177     end
2178    
2179 manus 50607 set_default_format is
2180     -- Default format of windows.
2181     --| FIXME ARNAUD: To be implemented.
2182     -- local
2183     -- f: EB_FORMATTER
2184     do
2185     -- if stone /= Void then
2186     -- if stone.class_i.hide_implementation then
2187     -- f := format_list.precompiled_default_format
2188     -- else
2189     -- f := format_list.default_format
2190     -- end
2191     -- else
2192     -- f := format_list.default_format
2193     -- end
2194     -- set_last_format (f)
2195     --| END FIXME
2196     end
2197 manus 26913
2198 tedf 55179 feature -- Position provider
2199    
2200     position: like position_internal is
2201     -- Currently shown text position in the editor
2202     do
2203     Result := editor_tool.text_area.first_line_displayed
2204 manus 55527 end
2205    
2206 tedf 55179 pos_container: like pos_container_internal is
2207     -- Current selected formatter
2208     local
2209     l_end : BOOLEAN
2210 tedf 58064 l_formatter: like managed_main_formatters
2211 tedf 55179 do
2212 tedf 58064 l_formatter := managed_main_formatters.twin
2213 tedf 55179 from
2214 tedf 58064 l_formatter.start
2215 tedf 55179 until
2216 tedf 58064 l_formatter.after or l_end
2217 tedf 55179 loop
2218 tedf 58064 if l_formatter.item.selected then
2219 tedf 55179 l_end := true
2220 tedf 58064 Result := l_formatter.item
2221 tedf 55179 end
2222 tedf 58064 l_formatter.forth
2223 tedf 55179 end
2224     end
2225    
2226 manus 51111 feature -- Resource Update
2227 manus 26913
2228 manus 50607 update is
2229     -- Update Current with the registered resources.
2230     do
2231     lock_update
2232     -- Show/hide general toolbar
2233 king 55319 if development_window_data.show_general_toolbar then
2234 manus 50607 show_general_toolbar_command.enable_visible
2235     else
2236     show_general_toolbar_command.disable_visible
2237     end
2238 manus 26913
2239 manus 50607 -- Show/hide address toolbar
2240 king 55319 if development_window_data.show_address_toolbar then
2241 manus 50607 show_address_toolbar_command.enable_visible
2242     else
2243     show_address_toolbar_command.disable_visible
2244     end
2245 manus 26913
2246 manus 50607 -- Show/hide project toolbar
2247 king 55319 if development_window_data.show_project_toolbar then
2248 manus 50607 show_project_toolbar_command.enable_visible
2249     else
2250     show_project_toolbar_command.disable_visible
2251     end
2252    
2253 patrickr 56781 -- Show/hide refactoring toolbar
2254     if development_window_data.show_refactoring_toolbar then
2255     show_refactoring_toolbar_command.enable_visible
2256     else
2257     show_refactoring_toolbar_command.disable_visible
2258     end
2259    
2260 king 55319 left_panel.load_from_resource (development_window_data.left_panel_layout)
2261     right_panel.load_from_resource (development_window_data.right_panel_layout)
2262     splitter_position := development_window_data.left_panel_width
2263 manus 50607 update_splitters
2264     unlock_update
2265 manus 26913 end
2266    
2267 manus 50607 update_splitters is
2268 manus 51111 -- Refresh the position of the splitter on screen according to
2269 manus 50607 -- our internal values.
2270     do
2271     -- Set the interior layout
2272     if panel.full then
2273     panel.set_split_position (splitter_position.max (panel.minimum_split_position))
2274     end
2275 manus 26913 end
2276    
2277 manus 50607 register is
2278     -- Register to preferences we want notification of.
2279     do
2280 manus 26913 end
2281    
2282 manus 50607 unregister is
2283     -- unregister to preferences we want notification of.
2284     do
2285 manus 26913 end
2286    
2287 manus 50607 reset is
2288     -- Reset the window contents
2289     do
2290     Precursor
2291     address_manager.reset
2292 manus 26913
2293 manus 50607 --| FIXME ARNAUD, multiformat not yet implemented.
2294     -- format_list.enable_imp_formats_sensitive
2295     --| END FIXME
2296     end
2297 neilc 49534
2298 manus 50607 rebuild_tools_menu is
2299     -- Refresh the list of external commands.
2300     local
2301     ms: LIST [EB_COMMAND_MENU_ITEM]
2302 jasonw 58951 l_external_cmds: LIST [EB_EXTERNAL_COMMAND]
2303     l_accelerators: ARRAY [EV_ACCELERATOR]
2304 paulb 52511 l_sep: EV_MENU_SEPARATOR
2305 jasonw 58951 i: INTEGER
2306     l_accelerator: EV_ACCELERATOR
2307     l_window_acc: EV_ACCELERATOR_LIST
2308     done: BOOLEAN
2309 manus 50607 do
2310     -- Remove all the external commands, which are at the end of the menu.
2311     from
2312     tools_menu.go_i_th (tools_menu.count + 1 - number_of_displayed_external_commands)
2313     until
2314     tools_menu.after
2315     loop
2316     tools_menu.remove
2317     end
2318     ms := Edit_external_commands_cmd.menus
2319 jasonw 58951 l_external_cmds := edit_external_commands_cmd.existing_commands
2320     l_accelerators := edit_external_commands_cmd.accelerators.twin
2321     l_accelerators.compare_objects
2322 manus 50607 number_of_displayed_external_commands := ms.count
2323 manus 55527
2324 paulb 52511 if not ms.is_empty and not tools_menu.is_empty then
2325     l_sep ?= tools_menu.last
2326     if l_sep = Void then
2327     create l_sep
2328     tools_menu.extend (l_sep)
2329     number_of_displayed_external_commands := number_of_displayed_external_commands + 1
2330     end
2331     end
2332    
2333 jasonw 58951 l_window_acc := window.accelerators
2334 manus 50607 from
2335 jasonw 58951 l_window_acc.start
2336     until
2337     l_window_acc.after or done
2338     loop
2339     l_accelerator := l_window_acc.item
2340     if l_accelerators.has (l_accelerator) then
2341     l_window_acc.remove
2342     else
2343     l_window_acc.forth
2344     end
2345     end
2346     from
2347 manus 50607 ms.start
2348 jasonw 58951 l_external_cmds.start
2349 manus 50607 until
2350     ms.after
2351     loop
2352     tools_menu.extend (ms.item)
2353     add_recyclable (ms.item)
2354 jasonw 58951 l_window_acc.extend (l_external_cmds.item.accelerator_key)
2355 manus 50607 ms.forth
2356 jasonw 58951 l_external_cmds.forth
2357 manus 50607 end
2358     end
2359 neilc 49534
2360 manus 50607 syntax_is_correct: BOOLEAN is
2361     -- file was successfully parsed.
2362     do
2363     Result := editor_tool.text_area.syntax_is_correct
2364     end
2365 manus 26913
2366 manus 50607 on_project_created is
2367     -- Inform tools that the current project has been loaded or re-loaded.
2368     do
2369     build_menu_bar
2370     enable_commands_on_project_created
2371     context_tool.on_project_created
2372     address_manager.on_project_created
2373     if has_dll_generation then
2374     show_dynamic_lib_tool.enable_sensitive
2375     end
2376     if has_profiler then
2377     show_profiler.enable_sensitive
2378     end
2379 xavier 30005 end
2380 manus 50607
2381     on_project_loaded is
2382     -- Inform tools that the current project has been loaded or re-loaded.
2383     do
2384 jfiat 54577 -- cluster_manager.on_project_loaded
2385 manus 50607 enable_commands_on_project_loaded
2386     cluster_tool.on_project_loaded
2387     context_tool.on_project_loaded
2388 jfiat 54610 breakpoints_tool.on_project_loaded
2389 manus 26913 end
2390    
2391 manus 50607 on_project_unloaded is
2392     -- Inform tools that the current project will soon been unloaded.
2393     do
2394 jfiat 54577 -- cluster_manager.on_project_unloaded
2395 manus 50607 disable_commands_on_project_unloaded
2396     cluster_tool.on_project_unloaded
2397     context_tool.on_project_unloaded
2398     address_manager.on_project_unloaded
2399     build_menu_bar
2400     if has_dll_generation then
2401     show_dynamic_lib_tool.disable_sensitive
2402     end
2403     if has_profiler then
2404     show_profiler.disable_sensitive
2405     end
2406 manus 26913 end
2407    
2408 jasonw 56245 on_c_compilation_starts is
2409     -- Enable commands when freezing or finalizing starts.
2410     do
2411     c_workbench_compilation_cmd.disable_sensitive
2412     c_finalized_compilation_cmd.disable_sensitive
2413     end
2414    
2415     on_c_compilation_stops is
2416     -- Disable commands when freezing or finalizing stops.
2417     do
2418     c_workbench_compilation_cmd.enable_sensitive
2419     c_finalized_compilation_cmd.enable_sensitive
2420     end
2421    
2422 manus 50607 save_before_compiling is
2423     -- save the text but do not update clickable positions
2424     do
2425     save_only := True
2426     save_text
2427 manus 26913 end
2428    
2429 manus 50607 perform_check_before_save is
2430     -- Perform any pre-save operations/checks
2431     local
2432     dial: EV_CONFIRMATION_DIALOG
2433     do
2434 tedf 56466 -- Remove trailing blanks.
2435 tedf 55338 if preferences.editor_data.auto_remove_trailing_blank_when_saving then
2436     editor_tool.text_area.text_displayed.remove_trailing_blanks
2437 tedf 56466 else
2438     editor_tool.text_area.text_displayed.remove_trailing_fake_blanks
2439 tedf 55302 end
2440 tedf 56466 editor_tool.text_area.refresh_now
2441    
2442 manus 50607 if editor_tool.text_area.open_backup then
2443 manus 51111 create dial.make_with_text(Warning_messages.w_save_backup)
2444 manus 50607 dial.set_buttons_and_actions(<<"Continue", "Cancel">>, <<agent continue_save, agent cancel_save>>)
2445     dial.set_default_push_button(dial.button("Continue"))
2446     dial.set_default_cancel_button(dial.button("Cancel"))
2447     dial.set_title ("Save Backup")
2448     dial.show_modal_to_window (window)
2449     else
2450     check_passed := True
2451     end
2452 manus 26913 end
2453 manus 50607
2454     continue_save is
2455     -- continue saving
2456     do
2457 manus 26913 check_passed := True
2458     end
2459    
2460 manus 50607 cancel_save is
2461     -- cancel saving
2462     do
2463     check_passed := False
2464     end
2465 manus 26913
2466 manus 50607 process is
2467     -- process the user entry in the address bar
2468 tedf 55839 local
2469     l_class_stone: CLASSI_STONE
2470     l_multi_search_tool: EB_MULTI_SEARCH_TOOL
2471 manus 50607 do
2472     save_canceled := False
2473 tedf 55839 l_class_stone ?= stone
2474     if l_class_stone /= Void then
2475     l_multi_search_tool ?= search_tool
2476     if l_multi_search_tool /= Void then
2477     l_multi_search_tool.class_changed (l_class_stone.class_i)
2478     end
2479     end
2480 manus 50607 end
2481 manus 26913
2482 manus 50607 on_text_saved is
2483     -- Notify the editor that the text has been saved
2484     local
2485     str: STRING
2486     do
2487     Precursor
2488     editor_tool.on_text_saved
2489     text_saved := True
2490     if not save_only then
2491     editor_tool.text_area.update_click_list (True)
2492     end
2493     save_only := False
2494     str := title.twin
2495     if str @ 1 = '*' then
2496     str.keep_tail (str.count - 2)
2497     set_title (str)
2498     end
2499     update_formatters
2500     if editor_tool.text_area.syntax_is_correct then
2501     status_bar.display_message ("")
2502     else
2503     status_bar.display_message (Interface_names.L_syntax_error)
2504     end
2505     text_edited := False
2506 manus 26913 end
2507    
2508 neilc 51796 on_focus is
2509     -- Focus gained
2510 neilc 51830 local
2511     editor: TEXT_PANEL
2512 neilc 51796 do
2513 neilc 51830 editor ?= editor_tool.text_area
2514     if editor /= Void then
2515     editor.on_focus
2516     end
2517 neilc 51796 end
2518    
2519 manus 50607 save_and (an_action: PROCEDURE [ANY, TUPLE]) is
2520     local
2521     save_dialog: EB_CONFIRM_SAVE_DIALOG
2522     do
2523     save_canceled := True
2524     text_saved := False
2525     create save_dialog.make_and_launch (Current,Current)
2526     if not save_canceled and then syntax_is_correct then
2527     an_action.call(Void)
2528     end
2529 manus 26913 end
2530    
2531 manus 51111 feature -- Window management
2532 manus 26913
2533 manus 50607 show_window is
2534     -- Show the window
2535     do
2536     show
2537     end
2538 manus 26913
2539 manus 50607 raise_window is
2540     -- Show the window and set the focus to it.
2541     do
2542     show
2543     --| FIXME, set the focus.
2544     end
2545 manus 26913
2546 manus 50607 hide_window is
2547     -- Hide the window
2548     do
2549     hide
2550     end
2551 manus 26913
2552 manus 50607 destroy_window is
2553     -- Destroy the window.
2554     do
2555     destroy
2556     end
2557 manus 26913
2558 manus 50607 give_focus is
2559     -- Give the focus to the address manager.
2560     do
2561     address_manager.set_focus
2562 manus 26913 end
2563 manus 51111
2564 manus 50607 save_layout is
2565     -- Store layout of `current'.
2566     do
2567 king 55319 save_layout_to_window_data (development_window_data)
2568     -- Commit saves
2569 jfiat 56527 preferences.preferences.save_preferences
2570 king 55319 end
2571    
2572     save_layout_to_session (a_session: ES_SESSION) is
2573     -- Save session data of `Current' to session object `a_session'.
2574     local
2575     a_window_data: EB_DEVELOPMENT_WINDOW_SESSION_DATA
2576     a_class_i: CLASSI_STONE
2577     do
2578     create a_window_data.make_from_window_data (preferences.development_window_data)
2579 manus 55527
2580 king 55319 a_class_i ?= stone
2581     if a_class_i /= Void then
2582     a_window_data.save_filename (a_class_i.file_name)
2583     a_window_data.save_editor_position (editor_tool.text_area.current_cursor_position)
2584     end
2585 manus 55527
2586 king 55319 if context_tool /= Void then
2587     a_window_data.save_context_data (
2588     context_tool.address_manager.cluster_label_text,
2589     context_tool.address_manager.class_label_text,
2590     context_tool.address_manager.feature_label_text,
2591     context_tool.notebook.selected_item_index
2592     )
2593     end
2594    
2595     save_layout_to_window_data (a_window_data)
2596 manus 55527
2597 king 55319 -- Add the session data of `Current' to the session object.
2598     a_session.window_session_data.extend (a_window_data)
2599     end
2600    
2601     save_layout_to_window_data (a_window_data: EB_DEVELOPMENT_WINDOW_DATA) is
2602     -- Store window data of `Current' in `a_window_data'.
2603     require
2604     a_window_data_not_void: a_window_data /= Void
2605     do
2606 manus 50607 -- Now save the windows's layout, but only if the
2607     -- debugger is not displayed in `Current'. By saving the layout,
2608     -- we ensure that future windows may use exactly the same layout.
2609 king 55319 -- If the debugger is displayed, the previous layout is already saved,
2610 manus 50607 -- and this is the one that must be used, as only one debugger is ever displayed.
2611 jfiat 56447 if
2612     (Eb_debugger_manager.application_is_executing and Eb_debugger_manager.debugging_window /= Current)
2613     or not Eb_debugger_manager.application_is_executing
2614     then
2615 king 55319 a_window_data.save_left_panel_layout (left_panel.save_to_resource)
2616     a_window_data.save_right_panel_layout (right_panel.save_to_resource)
2617     a_window_data.save_left_panel_width (panel.split_position)
2618 manus 50607 -- Save width & height.
2619 king 55319 a_window_data.save_size (window.width, window.height)
2620     a_window_data.save_window_state (window.is_minimized, window.is_maximized)
2621     a_window_data.save_position (window.x_position, window.y_position)
2622 manus 50607 end
2623 manus 55527 a_window_data.save_show_search_options (search_tool.options_shown)
2624 manus 50607 end
2625 manus 26913
2626 manus 55527
2627 manus 51111 feature -- Tools & Controls
2628 manus 26913
2629 manus 50607 editor_tool: EB_EDITOR_TOOL
2630 manus 26913
2631 manus 50607 favorites_tool: EB_FAVORITES_TOOL
2632 manus 26913
2633 manus 50607 cluster_tool: EB_CLUSTER_TOOL
2634 manus 26913
2635 tedf 56390 search_tool: EB_MULTI_SEARCH_TOOL
2636 manus 26913
2637 manus 50607 features_tool: EB_FEATURES_TOOL
2638 manus 26913
2639 manus 55527 breakpoints_tool: ES_BREAKPOINTS_TOOL
2640    
2641 manus 50607 windows_tool: EB_WINDOWS_TOOL
2642 manus 26913
2643 manus 50607 context_tool: EB_CONTEXT_TOOL
2644     -- Context explorer for current class and system.
2645 manus 26913
2646 manus 50607 address_manager: EB_ADDRESS_MANAGER
2647     -- Text field in the toolbar
2648     -- Allow user to enter the name
2649     -- of the class he wants to edit.
2650 manus 26913
2651 manus 50607 project_manager: EB_PROJECT_MANAGER is
2652     -- Project manager associated to the project the user is working on.
2653     do
2654     Result := Eiffel_project.manager
2655     end
2656 manus 26913
2657 manus 50607 managed_class_formatters: ARRAYED_LIST [EB_CLASS_INFO_FORMATTER]
2658     -- All formatters that operate on a class.
2659 manus 26913
2660 manus 50607 managed_feature_formatters: ARRAYED_LIST [EB_FEATURE_INFO_FORMATTER]
2661     -- All formatters that operate on a class.
2662 manus 26913
2663 manus 50607 managed_main_formatters: ARRAYED_LIST [EB_CLASS_TEXT_FORMATTER]
2664     -- All formatters that can be displayed in the main editor frame.
2665 manus 26913
2666 manus 50607 unified_stone: BOOLEAN
2667     -- Is the stone common with the context tool or not?
2668 manus 51111
2669 manus 50607 arguments_dialog: EB_ARGUMENT_DIALOG
2670     -- The arguments dialog for current, if any
2671 manus 51111
2672 manus 50607 goto_dialog: EB_GOTO_DIALOG
2673     -- The goto dialog for line number access
2674 manus 26913
2675 manus 51111 feature -- Multiple editor management
2676 manus 26913
2677 manus 50607 add_editor_to_list (an_editor: EB_EDITOR) is
2678     -- adds `an_editor' to `editors'
2679     do
2680     editors.extend (an_editor)
2681     end
2682 neilc 49534
2683 manus 50607 current_editor: EB_EDITOR is
2684     -- current editor, if none, main editor
2685     do
2686     if current_editor_index /= 0 then
2687     Result := editors @ current_editor_index
2688     else
2689     Result := editors.first
2690     end
2691 manus 26913 end
2692 manus 51111
2693 manus 50607 set_current_editor (an_editor: EB_EDITOR) is
2694     -- set `an_editor' as main editor
2695     local
2696     old_index: INTEGER
2697     new_index: INTEGER
2698     do
2699     old_index := current_editor_index
2700     new_index := editors.index_of (an_editor, 1)
2701     if
2702     editors.valid_index (new_index) and
2703     old_index /= new_index
2704     then
2705     current_editor_index := new_index
2706     update_paste_cmd
2707     -- Last thing, update the menu entry for the formatting marks.
2708     if current_editor.view_invisible_symbols then
2709 manus 51111 formatting_marks_command_menu_item.set_text (Interface_names.m_hide_formatting_marks)
2710 manus 50607 else
2711 manus 51111 formatting_marks_command_menu_item.set_text(Interface_names.m_show_formatting_marks)
2712 manus 50607 end
2713     command_controller.set_current_editor (an_editor)
2714 xavier 27840 end
2715 manus 50607 end
2716    
2717     update_paste_cmd is
2718     -- Update `editor_paste_cmd'. To be performed when an editor grabs the focus.
2719     do
2720     if
2721     not current_editor.is_empty and then
2722     current_editor.is_editable and then
2723     current_editor.clipboard.has_text
2724     then
2725     editor_paste_cmd.enable_sensitive
2726 xavier 27860 else
2727 manus 50607 editor_paste_cmd.disable_sensitive
2728 xavier 27860 end
2729     end
2730 neilc 49534
2731 manus 51111 feature {NONE} -- Multiple editor management
2732    
2733 manus 50607 editors: ARRAYED_LIST [EB_EDITOR]
2734     -- editor contained in `Current'
2735    
2736     current_editor_index: INTEGER
2737     -- Index in `editors' of the editor that has the focus.
2738 manus 51111
2739     feature {EB_FEATURES_TOOL, EB_FEATURES_TREE, DOTNET_CLASS_AS, DOTNET_CLASS_CONTEXT} -- Feature Clauses
2740    
2741 manus 50607 set_feature_clauses (a_features: ARRAYED_LIST [DOTNET_FEATURE_CLAUSE_AS [CONSUMED_ENTITY]]; a_type: STRING) is
2742     -- Set 'features' to 'a_features' and store in hash table with key 'a_type' denoting name of consumed
2743     -- type pertinent to 'a_features'.
2744     require
2745     a_features_not_void: a_features /= Void
2746     do
2747     if feature_clauses = Void then
2748     create feature_clauses.make (5)
2749     end
2750     feature_clauses.put (a_features, a_type)
2751 neilc 49534 end
2752 manus 51111
2753 tedf 56237 set_feature_locating (a_locating: BOOLEAN) is
2754     -- Set `feature_locating' with `a_locating'.
2755     do
2756     feature_locating := a_locating
2757     end
2758    
2759 manus 50607 get_feature_clauses (a_type: STRING): ARRAYED_LIST [DOTNET_FEATURE_CLAUSE_AS [CONSUMED_ENTITY]] is
2760     -- Get list of feature clauses relevant to .NET type with name 'a_type'.
2761     require
2762     a_type_not_void: a_type /= Void
2763     has_type_clauses: feature_clauses.has (a_type)
2764     do
2765     Result := feature_clauses.item (a_type)
2766     ensure
2767     result_not_void: Result /= Void
2768 neilc 33858 end
2769 manus 51111
2770 manus 50607 feature_clauses: HASH_TABLE [ARRAYED_LIST [DOTNET_FEATURE_CLAUSE_AS [CONSUMED_ENTITY]], STRING]
2771     -- List of features clauses for Current window hashed by the .NET name of the consumed_type.
2772 manus 51111
2773 manus 50607 feature_positions: HASH_TABLE [INTEGER, E_FEATURE]
2774     -- Features indexed by line position in class text (for .NET features).
2775 manus 26913
2776 tedf 56237 feature_locating: BOOLEAN
2777     -- Is feature tool locating a feature?
2778    
2779 manus 51111 feature {EB_WINDOW_MANAGER} -- Window management / Implementation
2780 manus 26913
2781 manus 50607 destroy_imp is
2782     -- Destroy window.
2783     do
2784     -- To avoid reentrance
2785     if not is_destroying then
2786     is_destroying := True
2787     -- If a launched application is still running, kill it.
2788 jfiat 56447 if
2789     Eb_debugger_manager.application_is_executing
2790     and then Eb_debugger_manager.debugging_window = Current
2791     then
2792     Eb_debugger_manager.Application.kill
2793 manus 50607 else
2794 king 55319 development_window_data.save_left_panel_layout (left_panel.save_to_resource)
2795     development_window_data.save_right_panel_layout (right_panel.save_to_resource)
2796 manus 50607 end
2797 king 55319 development_window_data.save_left_panel_width (panel.split_position)
2798 manus 50607 -- Save width & height.
2799 king 55319 development_window_data.save_size (window.width, window.height)
2800     development_window_data.save_window_state (window.is_minimized, window.is_maximized)
2801     development_window_data.save_position (window.x_position, window.y_position)
2802 manus 50607 left_panel.wipe_out
2803     right_panel.wipe_out
2804 king 55319 development_window_data.save_show_search_options (search_tool.options_shown)
2805 manus 50607 hide
2806 manus 26913
2807 manus 50607 -- Commit saves
2808 jfiat 56527 preferences.preferences.save_preferences
2809 manus 26913
2810 manus 50607 toolbars_area.wipe_out
2811     address_manager.recycle
2812     project_customizable_toolbar.recycle
2813 patrickr 56781 refactoring_customizable_toolbar.recycle
2814 manus 50607 Precursor {EB_TOOL_MANAGER}
2815 manus 26913
2816 manus 50607 managed_class_formatters.wipe_out
2817     managed_feature_formatters.wipe_out
2818     managed_main_formatters.wipe_out
2819     toolbarable_commands.wipe_out
2820     editors.wipe_out
2821     stone := Void
2822 neilc 49534 end
2823     end
2824    
2825 jasonw 56493 feature -- C output pixmap management
2826    
2827     start_c_output_pixmap_timer is
2828     -- Start timer to draw c output pixmap.
2829     do
2830     if context_tool /= Void then
2831     context_tool.start_c_output_pixmap_timer
2832     end
2833     end
2834    
2835     stop_c_output_pixmap_timer is
2836     -- Stop timer to draw c output pixmap.
2837     do
2838     if context_tool /= Void then
2839     context_tool.stop_c_output_pixmap_timer
2840     end
2841     end
2842    
2843 manus 51111 feature {NONE} -- Implementation
2844 neilc 49534
2845 manus 50607 set_stone_after_check (a_stone: STONE) is
2846     local
2847     old_stone: STONE
2848     new_class_stone: CLASSI_STONE
2849     old_class_stone: CLASSI_STONE
2850     conv_classc: CLASSC_STONE
2851     conv_brkstone: BREAKABLE_STONE
2852     cluster_st: CLUSTER_STONE
2853 tedf 55179 old_cluster_st: CLUSTER_STONE
2854 manus 50607 feature_stone: FEATURE_STONE
2855     conv_ferrst: FEATURE_ERROR_STONE
2856 manus 51111
2857 manus 50607 ef_stone: EXTERNAL_FILE_STONE
2858     f: FILE
2859 manus 51111
2860 manus 50607 conv_errst: ERROR_STONE
2861 alexk 51083 cl_syntax_stone: CL_SYNTAX_STONE
2862     error_line: INTEGER
2863 manus 50607 class_file: RAW_FILE
2864     class_text_exists: BOOLEAN
2865     same_class: BOOLEAN
2866     test_stone: CLASSI_STONE
2867     conv_ace: ACE_SYNTAX_STONE
2868     externali: EXTERNAL_CLASS_I
2869     external_cons: CONSUMED_TYPE
2870     str: STRING
2871     dotnet_class: BOOLEAN
2872     l_short_formatter: EB_SHORT_FORMATTER
2873     l_flat_formatter: EB_FLAT_SHORT_FORMATTER
2874 tedf 55179 l_main_formatter: EB_CLASS_TEXT_FORMATTER
2875 jfiat 56447 app_exec: APPLICATION_EXECUTION
2876 manus 50607 do
2877     -- the text does not change if the text was saved with syntax errors
2878     cur_wid := window
2879     if cur_wid = Void then
2880     --| Do nothing.
2881 manus 26913 else
2882 manus 50607 if old_cur = Void then
2883     old_cur := cur_wid.pointer_style
2884     end
2885     -- cur_wid.enable_capture
2886     cur_wid.set_pointer_style (Wait_cursor)
2887 neilc 49534 end
2888 manus 26913
2889 manus 50607 conv_brkstone ?= a_stone
2890     conv_errst ?= a_stone
2891     conv_ace ?= a_stone
2892     ef_stone ?= a_stone
2893     if conv_brkstone /= Void then
2894 jfiat 56447 app_exec := Debugger_manager.application
2895     if app_exec.is_breakpoint_enabled (conv_brkstone.routine, conv_brkstone.index) then
2896     app_exec.remove_breakpoint (conv_brkstone.routine, conv_brkstone.index)
2897 manus 50607 else
2898 jfiat 56447 app_exec.set_breakpoint (conv_brkstone.routine, conv_brkstone.index)
2899 manus 26913 end
2900 jfiat 55044 Debugger_manager.notify_breakpoints_changes
2901 manus 50607 elseif conv_errst /= Void then
2902     display_error_help_cmd.execute_with_stone (conv_errst)
2903     elseif conv_ace /= Void then
2904     --| FIXME XR: What should we do?!
2905     elseif ef_stone /= Void then
2906     f := ef_stone.file
2907     f.make_open_read (f.name)
2908     f.read_stream (f.count)
2909     f.close
2910 tedf 58663 editor_tool.text_area.set_stone (a_stone)
2911 manus 50607 editor_tool.text_area.load_text (f.last_string)
2912     else
2913     -- Remember previous stone.
2914     old_stone := stone
2915     old_class_stone ?= stone
2916 tedf 55179 old_cluster_st ?= stone
2917 manus 51111
2918 manus 50607 -- New stone properties
2919     new_class_stone ?= a_stone
2920    
2921     -- Set the stone.
2922     old_set_stone (a_stone)
2923     cluster_st ?= a_stone
2924 manus 51111
2925 manus 50607 new_feature_cmd.disable_sensitive
2926 alexk 51136 toggle_feature_alias_cmd.disable_sensitive
2927 manus 50607 toggle_feature_signature_cmd.disable_sensitive
2928 alexk 51887 toggle_feature_assigner_cmd.disable_sensitive
2929 manus 51111
2930 manus 50607 -- We update the state of the `Add to Favorites' command.
2931     if new_class_stone /= Void then
2932     favorites_menu.first.enable_sensitive
2933     else
2934     favorites_menu.first.disable_sensitive
2935 neilc 49534 end
2936 manus 26913
2937 manus 50607 -- Update the address manager if needed.
2938     address_manager.refresh
2939     if new_class_stone /= Void then
2940 manus 54781 -- Text is now editable.
2941     editor_tool.text_area.set_read_only (False)
2942    
2943 manus 50607 -- class stone was dropped
2944     create class_file.make (new_class_stone.class_i.file_name)
2945     class_text_exists := class_file.exists
2946     feature_stone ?= a_stone
2947     --| We have to create a classi_stone to check whether the stones are really similar.
2948     --| Otherwise a redefinition of same_as may be called.
2949     create test_stone.make (new_class_stone.class_i)
2950     if test_stone.same_as (old_class_stone) then
2951     same_class := True
2952     end
2953     if not feature_stone_already_processed then
2954 manus 51111 if same_class and then text_saved then
2955 manus 50607 -- nothing changed in the editor
2956     -- we only have to update click_list
2957     if editor_tool.text_area.is_editable then
2958     editor_tool.text_area.update_click_list (False)
2959     end
2960 manus 26913 else
2961 manus 50607 if changed then
2962     -- user has already chosen not to save the file
2963     -- do not ask again
2964     Feature_positions.wipe_out
2965     editor_tool.text_area.no_save_before_next_load
2966     end
2967 manus 26913 end
2968     end
2969 manus 55527
2970 tedf 55179 conv_classc ?= new_class_stone
2971 neilc 49534
2972 tedf 55179 -- First choose possible formatter
2973     l_main_formatter ?= new_class_stone.pos_container
2974     if l_main_formatter /= Void and not during_synchronization then
2975 manus 55527 if
2976 tedf 55179 not (conv_classc /= Void and class_text_exists and (not changed or not same_class))
2977     then
2978     l_main_formatter.enable_select
2979 manus 55527 elseif feature_stone = Void then
2980 tedf 55179 if l_main_formatter /= pos_container then
2981     l_main_formatter.enable_select
2982     end
2983 tedf 55267 if new_class_stone.position > 0 then
2984     editor_tool.text_area.display_line_at_top_when_ready (new_class_stone.position)
2985 manus 55527 end
2986 tedf 55179 end
2987     end
2988 manus 55527
2989 manus 50607 if conv_classc = Void or else
2990     conv_classc.e_class.is_external or else
2991 manus 51111 feature_stone /= Void and not
2992 manus 50607 feature_stone_already_processed and not
2993     (same_class and context_tool.sending_stone) then
2994     -- If a classi_stone or a feature_stone or a external call
2995     -- has been dropped, check to see if a .NET class.
2996     if class_text_exists then
2997     if new_class_stone.class_i.is_external_class then
2998     externali ?= new_class_stone.class_i
2999 manus 52122 check
3000     externali_not_void: externali /= Void
3001     end
3002     external_cons := externali.external_consumed_type
3003 manus 50607 if external_cons /= Void then
3004     -- A .NET class.
3005     dotnet_class := True
3006     l_short_formatter ?= managed_main_formatters.i_th (4)
3007     l_flat_formatter ?= managed_main_formatters.i_th (5)
3008     if l_short_formatter /= Void then
3009     l_short_formatter.set_dotnet_mode (True)
3010     end
3011     if l_flat_formatter /= Void then
3012     l_flat_formatter.set_dotnet_mode (True)
3013     end
3014 manus 51111 end
3015 tedf 55267 elseif feature_stone /= Void then
3016     from
3017     managed_main_formatters.start
3018     until
3019     managed_main_formatters.after
3020     loop
3021     managed_main_formatters.item.set_stone (new_class_stone)
3022     managed_main_formatters.forth
3023     end
3024 manus 50607 else
3025     managed_main_formatters.first.set_stone (new_class_stone)
3026     managed_main_formatters.first.execute
3027     end
3028     else
3029     editor_tool.text_area.clear_window
3030     editor_tool.text_area.display_message (
3031     Warning_messages.w_file_not_exist (
3032     new_class_stone.class_i.file_name))
3033 neilc 33365 end
3034 manus 50607 end
3035     if conv_classc = Void then
3036     --| The dropped class is not compiled.
3037     --| Display only the textual formatter.
3038     if dotnet_class then
3039     managed_main_formatters.i_th (4).set_stone (new_class_stone)
3040     managed_main_formatters.i_th (5).set_stone (new_class_stone)
3041 manus 51111 managed_main_formatters.i_th (4).execute
3042 manus 50607 end
3043     address_manager.disable_formatters
3044 neilc 33365 else
3045 manus 50607 --| We have a compiled class.
3046     if
3047     class_text_exists and then
3048     Eiffel_project.Workbench.last_reached_degree <= 2
3049     then
3050     new_feature_cmd.enable_sensitive
3051 alexk 51136 toggle_feature_alias_cmd.enable_sensitive
3052 manus 50607 toggle_feature_signature_cmd.enable_sensitive
3053 alexk 51887 toggle_feature_assigner_cmd.enable_sensitive
3054 manus 50607 end
3055    
3056     --address_manager.enable_formatters
3057     update_formatters
3058     if not class_text_exists then
3059     --| Disable the textual formatter.
3060     managed_main_formatters.first.disable_sensitive
3061     from
3062     managed_main_formatters.start
3063     until
3064     managed_main_formatters.after
3065     loop
3066     managed_main_formatters.item.set_stone (new_class_stone)
3067     managed_main_formatters.forth
3068     end
3069 tedf 58064 if not is_stone_external then
3070     managed_main_formatters.i_th (2).execute
3071     end
3072 manus 50607 else
3073     if not changed or not same_class then
3074     --| Enable all formatters.
3075     if
3076 tedf 55267 (not feature_stone_already_processed or
3077 manus 55527 not managed_main_formatters.first.selected) and
3078 tedf 55267 feature_stone = Void
3079 manus 50607 then
3080     from
3081     managed_main_formatters.start
3082     until
3083     managed_main_formatters.after
3084     loop
3085     managed_main_formatters.item.set_stone (new_class_stone)
3086     managed_main_formatters.forth
3087     end
3088     end
3089     else
3090 tedf 55673 if not feature_stone_already_processed then
3091     address_manager.disable_formatters
3092     from
3093     managed_main_formatters.start
3094     until
3095     managed_main_formatters.after
3096     loop
3097     managed_main_formatters.item.set_stone (new_class_stone)
3098     managed_main_formatters.forth
3099     end
3100 xavier 28693 end
3101 manus 26913 end
3102     end
3103     end
3104 tedf 57463 if not managed_main_formatters.first.selected then
3105 tedf 56214 editor_tool.text_area.set_read_only (true)
3106     end
3107 manus 50607 else
3108 manus 51111 -- not a class text : cannot be edited
3109 manus 53708 editor_tool.text_area.set_read_only (True)
3110 manus 50607 address_manager.disable_formatters
3111 manus 26913
3112 manus 50607 --| Disable all formatters.
3113     from
3114     managed_main_formatters.start
3115     until
3116     managed_main_formatters.after
3117     loop
3118     managed_main_formatters.item.set_stone (Void)
3119     managed_main_formatters.forth
3120     end
3121 patrickr 58188 if cluster_st /= Void and then cluster_st.is_cluster then
3122 manus 50607 --| FIXME XR: Really manage cluster display in the main editor
3123 tedf 57426 formatted_context_for_cluster (cluster_st.cluster_i)
3124 tedf 55179 if cluster_st.position > 0 then
3125     editor_tool.text_area.display_line_at_top_when_ready (cluster_st.position)
3126     end
3127 manus 50607 --| END FIXME
3128     end
3129 neilc 49534 end
3130 alexk 51083 if class_text_exists then
3131     if feature_stone /= Void and not feature_stone_already_processed and not (same_class and context_tool.sending_stone) then
3132     conv_ferrst ?= feature_stone
3133     if conv_ferrst /= Void then
3134     error_line := conv_ferrst.line_number
3135     else
3136     -- if a feature_stone has been dropped
3137     -- scroll to the corresponding feature in the basic text format
3138     if not during_synchronization then
3139     scroll_to_feature (feature_stone.e_feature, new_class_stone.class_i)
3140     end
3141     end
3142 manus 50607 else
3143 alexk 51083 cl_syntax_stone ?= a_stone
3144     if cl_syntax_stone /= Void then
3145     error_line := cl_syntax_stone.line
3146 manus 50607 end
3147 manus 26913 end
3148 alexk 51083 if error_line > 0 then
3149     -- Scroll to the line of the error.
3150     editor_tool.text_area.display_line_when_ready (error_line, True)
3151     end
3152 manus 26913 end
3153 manus 50607 -- Update the title of the window
3154     if a_stone /= Void then
3155     if changed then
3156     str := a_stone.header.twin
3157     str.prepend ("* ")
3158     set_title (str)
3159     else
3160     set_title (a_stone.header)
3161     end
3162 neilc 49534 else
3163 manus 51111 set_title (Interface_names.t_empty_development_window)
3164 manus 26913 end
3165 manus 50607
3166     -- Refresh the tools.
3167     features_tool.set_stone (a_stone)
3168     cluster_tool.set_stone (a_stone)
3169     -- Update the context tool.
3170     if unified_stone then
3171     context_tool.set_stone (a_stone)
3172     end
3173    
3174 neilc 49534 end
3175 manus 50607 if
3176     stone /= Void and then
3177     not unified_stone
3178     then
3179     send_stone_to_context_cmd.enable_sensitive
3180 manus 26913 else
3181 manus 50607 send_stone_to_context_cmd.disable_sensitive
3182 manus 26913 end
3183 manus 50607 if cur_wid = Void then
3184     --| Do nothing.
3185 manus 51111 else
3186 manus 50607 cur_wid.set_pointer_style (old_cur)
3187     old_cur := Void
3188     -- cur_wid.disable_capture
3189     cur_wid := Void
3190 manus 26913 end
3191     end
3192    
3193 tedf 57426 formatted_context_for_cluster (a_cluster: CLUSTER_I) is
3194 jfiat 54401 -- Formatted context representing the list of classes inside `a_cluster'.
3195     require
3196     a_cluster_not_void: a_cluster /= Void
3197     local
3198 jfiat 54437 l_assembly: ASSEMBLY_I
3199 jfiat 54402 l_sorted_cluster: EB_SORTED_CLUSTER
3200 manus 58520 l_classes: DS_ARRAYED_LIST [CLASS_I]
3201 patrickr 58010 l_subclu: DS_LIST [EB_SORTED_CLUSTER]
3202 manus 58520 l_cl_i, l_overridden_class: CLASS_I
3203 jfiat 54401 l_cluster: CLUSTER_I
3204     l_assert_level: ASSERTION_I
3205 tedf 57426 l_format_context: TEXT_FORMATTER_DECORATOR
3206 manus 58520 l_description: STRING
3207 jfiat 54401 do
3208 tedf 57426 create l_format_context.make_for_case (editor_tool.text_area.text_displayed)
3209     editor_tool.text_area.handle_before_processing (false)
3210     l_format_context.process_keyword_text (ti_indexing_keyword, Void)
3211 jfiat 54401 l_format_context.put_new_line
3212     l_format_context.indent
3213 jfiat 54437 if a_cluster.is_assembly then
3214     l_assembly ?= a_cluster
3215     check l_assembly /= Void end
3216 tedf 57426 l_format_context.process_indexing_tag_text ("assembly_name")
3217     l_format_context.set_without_tabs
3218     l_format_context.process_symbol_text (ti_colon)
3219 jfiat 54437 l_format_context.put_space
3220     l_format_context.put_quoted_string_item (l_assembly.assembly_name)
3221     l_format_context.put_new_line
3222 tedf 57426 l_format_context.process_indexing_tag_text ("assembly_path")
3223     l_format_context.set_without_tabs
3224     l_format_context.process_symbol_text (ti_colon)
3225 jfiat 54437 l_format_context.put_space
3226 manus 58520 l_format_context.put_quoted_string_item (l_assembly.location.evaluated_path)
3227 jfiat 54437 l_format_context.put_new_line
3228 manus 55527
3229 jfiat 54437 end
3230 tedf 57426 l_format_context.process_indexing_tag_text ("cluster")
3231     l_format_context.set_without_tabs
3232     l_format_context.process_symbol_text (ti_colon)
3233 jfiat 54401 l_format_context.put_space
3234     l_format_context.put_quoted_string_item (a_cluster.cluster_name)
3235    
3236     l_format_context.put_new_line
3237 tedf 57426 l_format_context.process_indexing_tag_text ("cluster_path")
3238     l_format_context.set_without_tabs
3239     l_format_context.process_symbol_text (ti_colon)
3240 jfiat 54401 l_format_context.put_space
3241     l_format_context.put_quoted_string_item (a_cluster.path)
3242     l_format_context.put_new_line
3243 manus 58520
3244     -- Now try to get the description of the cluster, and if not
3245     -- we take the one from its target.
3246     if a_cluster.description /= Void then
3247     l_description := a_cluster.description
3248     elseif a_cluster.target.description /= Void then
3249     l_description := a_cluster.target.description
3250     end
3251     if l_description /= Void then
3252     l_format_context.process_indexing_tag_text ("description")
3253     l_format_context.set_without_tabs
3254     l_format_context.process_symbol_text (ti_colon)
3255     l_format_context.put_space
3256     l_format_context.set_in_indexing_clause (True)
3257