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