/[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 56804 - (hide annotations)
Mon Jan 30 19:29:46 2006 UTC (14 years ago) by patrickr
Original Path: trunk/Src/bench/Eiffel/interface/new_graphical/windows/eb_development_window.e
File size: 128711 byte(s)
-Always check if a loaded file has been modified, during synchronization.
-Fixed synchronization after undo/redo of refactoring.

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 neilc 49534 end
2096 manus 50607
2097     force_stone (s: STONE) is
2098     -- make `s' the new value of `stone', and
2099     -- change the display accordingly. Try to
2100     -- extract a class from `s' whenever possible.
2101     do
2102     if s.is_storable then
2103     set_stone (s)
2104     if not unified_stone then
2105     context_tool.advanced_set_stone (s)
2106     end
2107 manus 26913 end
2108     end
2109    
2110 manus 50607 process_class (s: CLASSI_STONE) is
2111     -- Process class stone
2112     do
2113 neilc 49534 set_stone (s)
2114 manus 50607 end
2115 manus 51111
2116 manus 50607 process_feature_error (s: FEATURE_ERROR_STONE) is
2117     -- Process feature error stone.
2118     local
2119     cl_stone: CLASSC_STONE
2120     e_class: CLASS_C
2121     do
2122     set_default_format
2123     e_class := s.e_feature.written_class
2124     create cl_stone.make (e_class)
2125     set_stone (cl_stone)
2126     editor_tool.text_area.deselect_all
2127     if s.line_number > 0 then
2128     editor_tool.text_area.highlight_selected (s.line_number, s.line_number)
2129 manus 26913 end
2130     end
2131    
2132 manus 50607
2133     process_class_syntax (s: CL_SYNTAX_STONE) is
2134     -- Process class syntax.
2135     local
2136     cl_stone: CLASSC_STONE
2137     do
2138     -- call set_stone to ensure the proper class is displayed
2139     create cl_stone.make (s.e_class)
2140     set_stone (cl_stone)
2141     editor_tool.text_area.deselect_all
2142     editor_tool.text_area.highlight_when_ready (s.line, s.line)
2143 manus 26913 end
2144 manus 51111
2145 manus 50607 refresh is
2146     -- Synchronize clickable elements with text, if possible.
2147     do
2148     --| FIXME ARNAUD
2149     -- synchronise_stone
2150     --| END FIXME
2151     --| FIXME XR: Refresh current display in the editor.
2152     editor_tool.text_area.update_click_list (False)
2153     update_save_symbol
2154     address_manager.refresh
2155     -- The cluster manager should already be refreshed by the window manager.
2156     -- cluster_manager.refresh
2157     -- context_tool.refresh
2158     end
2159 manus 26913
2160 manus 52526 quick_refresh_editors is
2161     -- Redraw editors' drawing area.
2162 manus 50607 do
2163     editor_tool.text_area.refresh
2164 manus 52526 context_tool.quick_refresh_editors
2165 manus 50607 end
2166 manus 26913
2167 manus 52526 quick_refresh_margins is
2168     -- Redraw the main editor's drawing area.
2169     do
2170     editor_tool.text_area.margin.refresh
2171     context_tool.quick_refresh_margins
2172     end
2173    
2174 manus 50607 set_default_format is
2175     -- Default format of windows.
2176     --| FIXME ARNAUD: To be implemented.
2177     -- local
2178     -- f: EB_FORMATTER
2179     do
2180     -- if stone /= Void then
2181     -- if stone.class_i.hide_implementation then
2182     -- f := format_list.precompiled_default_format
2183     -- else
2184     -- f := format_list.default_format
2185     -- end
2186     -- else
2187     -- f := format_list.default_format
2188     -- end
2189     -- set_last_format (f)
2190     --| END FIXME
2191     end
2192 manus 26913
2193 tedf 55179 feature -- Position provider
2194    
2195     position: like position_internal is
2196     -- Currently shown text position in the editor
2197     do
2198     Result := editor_tool.text_area.first_line_displayed
2199 manus 55527 end
2200    
2201 tedf 55179 pos_container: like pos_container_internal is
2202     -- Current selected formatter
2203     local
2204     l_end : BOOLEAN
2205     do
2206     from
2207     managed_main_formatters.start
2208     until
2209     managed_main_formatters.after or l_end
2210     loop
2211     if managed_main_formatters.item.selected then
2212     l_end := true
2213     Result := managed_main_formatters.item
2214     end
2215     managed_main_formatters.forth
2216     end
2217     end
2218    
2219 manus 51111 feature -- Resource Update
2220 manus 26913
2221 manus 50607 update is
2222     -- Update Current with the registered resources.
2223     do
2224     lock_update
2225     -- Show/hide general toolbar
2226 king 55319 if development_window_data.show_general_toolbar then
2227 manus 50607 show_general_toolbar_command.enable_visible
2228     else
2229     show_general_toolbar_command.disable_visible
2230     end
2231 manus 26913
2232 manus 50607 -- Show/hide address toolbar
2233 king 55319 if development_window_data.show_address_toolbar then
2234 manus 50607 show_address_toolbar_command.enable_visible
2235     else
2236     show_address_toolbar_command.disable_visible
2237     end
2238 manus 26913
2239 manus 50607 -- Show/hide project toolbar
2240 king 55319 if development_window_data.show_project_toolbar then
2241 manus 50607 show_project_toolbar_command.enable_visible
2242     else
2243     show_project_toolbar_command.disable_visible
2244     end
2245    
2246 patrickr 56781 -- Show/hide refactoring toolbar
2247     if development_window_data.show_refactoring_toolbar then
2248     show_refactoring_toolbar_command.enable_visible
2249     else
2250     show_refactoring_toolbar_command.disable_visible
2251     end
2252    
2253 king 55319 left_panel.load_from_resource (development_window_data.left_panel_layout)
2254     right_panel.load_from_resource (development_window_data.right_panel_layout)
2255     splitter_position := development_window_data.left_panel_width
2256 manus 50607 update_splitters
2257     unlock_update
2258 manus 26913 end
2259    
2260 manus 50607 update_splitters is
2261 manus 51111 -- Refresh the position of the splitter on screen according to
2262 manus 50607 -- our internal values.
2263     do
2264     -- Set the interior layout
2265     if panel.full then
2266     panel.set_split_position (splitter_position.max (panel.minimum_split_position))
2267     end
2268 manus 26913 end
2269    
2270 manus 50607 register is
2271     -- Register to preferences we want notification of.
2272     do
2273 manus 26913 end
2274    
2275 manus 50607 unregister is
2276     -- unregister to preferences we want notification of.
2277     do
2278 manus 26913 end
2279    
2280 manus 50607 reset is
2281     -- Reset the window contents
2282     do
2283     Precursor
2284     address_manager.reset
2285 manus 26913
2286 manus 50607 --| FIXME ARNAUD, multiformat not yet implemented.
2287     -- format_list.enable_imp_formats_sensitive
2288     --| END FIXME
2289     end
2290 neilc 49534
2291 manus 50607 rebuild_tools_menu is
2292     -- Refresh the list of external commands.
2293     local
2294     ms: LIST [EB_COMMAND_MENU_ITEM]
2295 paulb 52511 l_sep: EV_MENU_SEPARATOR
2296 manus 50607 do
2297     -- Remove all the external commands, which are at the end of the menu.
2298     from
2299     tools_menu.go_i_th (tools_menu.count + 1 - number_of_displayed_external_commands)
2300     until
2301     tools_menu.after
2302     loop
2303     tools_menu.remove
2304     end
2305     ms := Edit_external_commands_cmd.menus
2306     number_of_displayed_external_commands := ms.count
2307 manus 55527
2308 paulb 52511 if not ms.is_empty and not tools_menu.is_empty then
2309     l_sep ?= tools_menu.last
2310     if l_sep = Void then
2311     create l_sep
2312     tools_menu.extend (l_sep)
2313     number_of_displayed_external_commands := number_of_displayed_external_commands + 1
2314     end
2315     end
2316    
2317 manus 50607 from
2318     ms.start
2319     until
2320     ms.after
2321     loop
2322     tools_menu.extend (ms.item)
2323     add_recyclable (ms.item)
2324     ms.forth
2325     end
2326     end
2327 neilc 49534
2328 manus 50607 syntax_is_correct: BOOLEAN is
2329     -- file was successfully parsed.
2330     do
2331     Result := editor_tool.text_area.syntax_is_correct
2332     end
2333 manus 26913
2334 manus 50607 on_project_created is
2335     -- Inform tools that the current project has been loaded or re-loaded.
2336     do
2337     build_menu_bar
2338     enable_commands_on_project_created
2339     context_tool.on_project_created
2340     address_manager.on_project_created
2341     if has_dll_generation then
2342     show_dynamic_lib_tool.enable_sensitive
2343     end
2344     if has_profiler then
2345     show_profiler.enable_sensitive
2346     end
2347 xavier 30005 end
2348 manus 50607
2349     on_project_loaded is
2350     -- Inform tools that the current project has been loaded or re-loaded.
2351     do
2352 jfiat 54577 -- cluster_manager.on_project_loaded
2353 manus 50607 enable_commands_on_project_loaded
2354     cluster_tool.on_project_loaded
2355     context_tool.on_project_loaded
2356 jfiat 54610 breakpoints_tool.on_project_loaded
2357 manus 26913 end
2358    
2359 manus 50607 on_project_unloaded is
2360     -- Inform tools that the current project will soon been unloaded.
2361     do
2362 jfiat 54577 -- cluster_manager.on_project_unloaded
2363 manus 50607 disable_commands_on_project_unloaded
2364     cluster_tool.on_project_unloaded
2365     context_tool.on_project_unloaded
2366     address_manager.on_project_unloaded
2367     build_menu_bar
2368     if has_dll_generation then
2369     show_dynamic_lib_tool.disable_sensitive
2370     end
2371     if has_profiler then
2372     show_profiler.disable_sensitive
2373     end
2374 manus 26913 end
2375    
2376 jasonw 56245 on_c_compilation_starts is
2377     -- Enable commands when freezing or finalizing starts.
2378     do
2379     c_workbench_compilation_cmd.disable_sensitive
2380     c_finalized_compilation_cmd.disable_sensitive
2381     end
2382    
2383     on_c_compilation_stops is
2384     -- Disable commands when freezing or finalizing stops.
2385     do
2386     c_workbench_compilation_cmd.enable_sensitive
2387     c_finalized_compilation_cmd.enable_sensitive
2388     end
2389    
2390 manus 50607 save_before_compiling is
2391     -- save the text but do not update clickable positions
2392     do
2393     save_only := True
2394     save_text
2395 manus 26913 end
2396    
2397 manus 50607 perform_check_before_save is
2398     -- Perform any pre-save operations/checks
2399     local
2400     dial: EV_CONFIRMATION_DIALOG
2401     do
2402     debug ("EDITOR")
2403     if editor_tool.text_area.current_text /= Void and then changed then
2404     io.error.put_string ("%N Warning: Attempting to save a non editable format%N")
2405     end
2406 tedf 55302 end
2407 tedf 56466 -- Remove trailing blanks.
2408 tedf 55338 if preferences.editor_data.auto_remove_trailing_blank_when_saving then
2409     editor_tool.text_area.text_displayed.remove_trailing_blanks
2410 tedf 56466 else
2411     editor_tool.text_area.text_displayed.remove_trailing_fake_blanks
2412 tedf 55302 end
2413 tedf 56466 editor_tool.text_area.refresh_now
2414    
2415 manus 50607 if editor_tool.text_area.open_backup then
2416 manus 51111 create dial.make_with_text(Warning_messages.w_save_backup)
2417 manus 50607 dial.set_buttons_and_actions(<<"Continue", "Cancel">>, <<agent continue_save, agent cancel_save>>)
2418     dial.set_default_push_button(dial.button("Continue"))
2419     dial.set_default_cancel_button(dial.button("Cancel"))
2420     dial.set_title ("Save Backup")
2421     dial.show_modal_to_window (window)
2422     else
2423     check_passed := True
2424     end
2425 manus 26913 end
2426 manus 50607
2427     continue_save is
2428     -- continue saving
2429     do
2430 manus 26913 check_passed := True
2431     end
2432    
2433 manus 50607 cancel_save is
2434     -- cancel saving
2435     do
2436     check_passed := False
2437     end
2438 manus 26913
2439 manus 50607 process is
2440     -- process the user entry in the address bar
2441 tedf 55839 local
2442     l_class_stone: CLASSI_STONE
2443     l_multi_search_tool: EB_MULTI_SEARCH_TOOL
2444 manus 50607 do
2445     save_canceled := False
2446 tedf 55839 l_class_stone ?= stone
2447     if l_class_stone /= Void then
2448     l_multi_search_tool ?= search_tool
2449     if l_multi_search_tool /= Void then
2450     l_multi_search_tool.class_changed (l_class_stone.class_i)
2451     end
2452     end
2453 manus 50607 end
2454 manus 26913
2455 manus 50607 on_text_saved is
2456     -- Notify the editor that the text has been saved
2457     local
2458     str: STRING
2459     do
2460     Precursor
2461     editor_tool.on_text_saved
2462     text_saved := True
2463     if not save_only then
2464     editor_tool.text_area.update_click_list (True)
2465     end
2466     save_only := False
2467     str := title.twin
2468     if str @ 1 = '*' then
2469     str.keep_tail (str.count - 2)
2470     set_title (str)
2471     end
2472     update_formatters
2473     if editor_tool.text_area.syntax_is_correct then
2474     status_bar.display_message ("")
2475     else
2476     status_bar.display_message (Interface_names.L_syntax_error)
2477     end
2478     text_edited := False
2479 manus 26913 end
2480    
2481 neilc 51796 on_focus is
2482     -- Focus gained
2483 neilc 51830 local
2484     editor: TEXT_PANEL
2485 neilc 51796 do
2486 neilc 51830 editor ?= editor_tool.text_area
2487     if editor /= Void then
2488     editor.on_focus
2489     end
2490 neilc 51796 end
2491    
2492 manus 50607 save_and (an_action: PROCEDURE [ANY, TUPLE]) is
2493     local
2494     save_dialog: EB_CONFIRM_SAVE_DIALOG
2495     do
2496     save_canceled := True
2497     text_saved := False
2498     create save_dialog.make_and_launch (Current,Current)
2499     if not save_canceled and then syntax_is_correct then
2500     an_action.call(Void)
2501     end
2502 manus 26913 end
2503    
2504 manus 51111 feature -- Window management
2505 manus 26913
2506 manus 50607 show_window is
2507     -- Show the window
2508     do
2509     show
2510     end
2511 manus 26913
2512 manus 50607 raise_window is
2513     -- Show the window and set the focus to it.
2514     do
2515     show
2516     --| FIXME, set the focus.
2517     end
2518 manus 26913
2519 manus 50607 hide_window is
2520     -- Hide the window
2521     do
2522     hide
2523     end
2524 manus 26913
2525 manus 50607 destroy_window is
2526     -- Destroy the window.
2527     do
2528     destroy
2529     end
2530 manus 26913
2531 manus 50607 give_focus is
2532     -- Give the focus to the address manager.
2533     do
2534     address_manager.set_focus
2535 manus 26913 end
2536 manus 51111
2537 manus 50607 save_layout is
2538     -- Store layout of `current'.
2539     do
2540 king 55319 save_layout_to_window_data (development_window_data)
2541     -- Commit saves
2542 jfiat 56527 preferences.preferences.save_preferences
2543 king 55319 end
2544    
2545     save_layout_to_session (a_session: ES_SESSION) is
2546     -- Save session data of `Current' to session object `a_session'.
2547     local
2548     a_window_data: EB_DEVELOPMENT_WINDOW_SESSION_DATA
2549     a_class_i: CLASSI_STONE
2550     do
2551     create a_window_data.make_from_window_data (preferences.development_window_data)
2552 manus 55527
2553 king 55319 a_class_i ?= stone
2554     if a_class_i /= Void then
2555     a_window_data.save_filename (a_class_i.file_name)
2556     a_window_data.save_editor_position (editor_tool.text_area.current_cursor_position)
2557     end
2558 manus 55527
2559 king 55319 if context_tool /= Void then
2560     a_window_data.save_context_data (
2561     context_tool.address_manager.cluster_label_text,
2562     context_tool.address_manager.class_label_text,
2563     context_tool.address_manager.feature_label_text,
2564     context_tool.notebook.selected_item_index
2565     )
2566     end
2567    
2568     save_layout_to_window_data (a_window_data)
2569 manus 55527
2570 king 55319 -- Add the session data of `Current' to the session object.
2571     a_session.window_session_data.extend (a_window_data)
2572     end
2573    
2574     save_layout_to_window_data (a_window_data: EB_DEVELOPMENT_WINDOW_DATA) is
2575     -- Store window data of `Current' in `a_window_data'.
2576     require
2577     a_window_data_not_void: a_window_data /= Void
2578     do
2579 manus 50607 -- Now save the windows's layout, but only if the
2580     -- debugger is not displayed in `Current'. By saving the layout,
2581     -- we ensure that future windows may use exactly the same layout.
2582 king 55319 -- If the debugger is displayed, the previous layout is already saved,
2583 manus 50607 -- and this is the one that must be used, as only one debugger is ever displayed.
2584 jfiat 56447 if
2585     (Eb_debugger_manager.application_is_executing and Eb_debugger_manager.debugging_window /= Current)
2586     or not Eb_debugger_manager.application_is_executing
2587     then
2588 king 55319 a_window_data.save_left_panel_layout (left_panel.save_to_resource)
2589     a_window_data.save_right_panel_layout (right_panel.save_to_resource)
2590     a_window_data.save_left_panel_width (panel.split_position)
2591 manus 50607 -- Save width & height.
2592 king 55319 a_window_data.save_size (window.width, window.height)
2593     a_window_data.save_window_state (window.is_minimized, window.is_maximized)
2594     a_window_data.save_position (window.x_position, window.y_position)
2595 manus 50607 end
2596 manus 55527 a_window_data.save_show_search_options (search_tool.options_shown)
2597 manus 50607 end
2598 manus 26913
2599 manus 55527
2600 manus 51111 feature -- Tools & Controls
2601 manus 26913
2602 manus 50607 editor_tool: EB_EDITOR_TOOL
2603 manus 26913
2604 manus 50607 favorites_tool: EB_FAVORITES_TOOL
2605 manus 26913
2606 manus 50607 cluster_tool: EB_CLUSTER_TOOL
2607 manus 26913
2608 tedf 56390 search_tool: EB_MULTI_SEARCH_TOOL
2609 manus 26913
2610 manus 50607 features_tool: EB_FEATURES_TOOL
2611 manus 26913
2612 manus 55527 breakpoints_tool: ES_BREAKPOINTS_TOOL
2613    
2614 manus 50607 windows_tool: EB_WINDOWS_TOOL
2615 manus 26913
2616 manus 50607 context_tool: EB_CONTEXT_TOOL
2617     -- Context explorer for current class and system.
2618 manus 26913
2619 manus 50607 address_manager: EB_ADDRESS_MANAGER
2620     -- Text field in the toolbar
2621     -- Allow user to enter the name
2622     -- of the class he wants to edit.
2623 manus 26913
2624 manus 50607 project_manager: EB_PROJECT_MANAGER is
2625     -- Project manager associated to the project the user is working on.
2626     do
2627     Result := Eiffel_project.manager
2628     end
2629 manus 26913
2630 manus 50607 managed_class_formatters: ARRAYED_LIST [EB_CLASS_INFO_FORMATTER]
2631     -- All formatters that operate on a class.
2632 manus 26913
2633 manus 50607 managed_feature_formatters: ARRAYED_LIST [EB_FEATURE_INFO_FORMATTER]
2634     -- All formatters that operate on a class.
2635 manus 26913
2636 manus 50607 managed_main_formatters: ARRAYED_LIST [EB_CLASS_TEXT_FORMATTER]
2637     -- All formatters that can be displayed in the main editor frame.
2638 manus 26913
2639 manus 50607 unified_stone: BOOLEAN
2640     -- Is the stone common with the context tool or not?
2641 manus 51111
2642 manus 50607 arguments_dialog: EB_ARGUMENT_DIALOG
2643     -- The arguments dialog for current, if any
2644 manus 51111
2645 manus 50607 goto_dialog: EB_GOTO_DIALOG
2646     -- The goto dialog for line number access
2647 manus 26913
2648 manus 51111 feature -- Multiple editor management
2649 manus 26913
2650 manus 50607 add_editor_to_list (an_editor: EB_EDITOR) is
2651     -- adds `an_editor' to `editors'
2652     do
2653     editors.extend (an_editor)
2654     end
2655 neilc 49534
2656 manus 50607 current_editor: EB_EDITOR is
2657     -- current editor, if none, main editor
2658     do
2659     if current_editor_index /= 0 then
2660     Result := editors @ current_editor_index
2661     else
2662     Result := editors.first
2663     end
2664 manus 26913 end
2665 manus 51111
2666 manus 50607 set_current_editor (an_editor: EB_EDITOR) is
2667     -- set `an_editor' as main editor
2668     local
2669     old_index: INTEGER
2670     new_index: INTEGER
2671     do
2672     old_index := current_editor_index
2673     new_index := editors.index_of (an_editor, 1)
2674     if
2675     editors.valid_index (new_index) and
2676     old_index /= new_index
2677     then
2678     current_editor_index := new_index
2679     update_paste_cmd
2680     -- Last thing, update the menu entry for the formatting marks.
2681     if current_editor.view_invisible_symbols then
2682 manus 51111 formatting_marks_command_menu_item.set_text (Interface_names.m_hide_formatting_marks)
2683 manus 50607 else
2684 manus 51111 formatting_marks_command_menu_item.set_text(Interface_names.m_show_formatting_marks)
2685 manus 50607 end
2686     command_controller.set_current_editor (an_editor)
2687 xavier 27840 end
2688 manus 50607 end
2689    
2690     update_paste_cmd is
2691     -- Update `editor_paste_cmd'. To be performed when an editor grabs the focus.
2692     do
2693     if
2694     not current_editor.is_empty and then
2695     current_editor.is_editable and then
2696     current_editor.clipboard.has_text
2697     then
2698     editor_paste_cmd.enable_sensitive
2699 xavier 27860 else
2700 manus 50607 editor_paste_cmd.disable_sensitive
2701 xavier 27860 end
2702     end
2703 neilc 49534
2704 manus 51111 feature {NONE} -- Multiple editor management
2705    
2706 manus 50607 editors: ARRAYED_LIST [EB_EDITOR]
2707     -- editor contained in `Current'
2708    
2709     current_editor_index: INTEGER
2710     -- Index in `editors' of the editor that has the focus.
2711 manus 51111
2712     feature {EB_FEATURES_TOOL, EB_FEATURES_TREE, DOTNET_CLASS_AS, DOTNET_CLASS_CONTEXT} -- Feature Clauses
2713    
2714 manus 50607 set_feature_clauses (a_features: ARRAYED_LIST [DOTNET_FEATURE_CLAUSE_AS [CONSUMED_ENTITY]]; a_type: STRING) is
2715     -- Set 'features' to 'a_features' and store in hash table with key 'a_type' denoting name of consumed
2716     -- type pertinent to 'a_features'.
2717     require
2718     a_features_not_void: a_features /= Void
2719     do
2720     if feature_clauses = Void then
2721     create feature_clauses.make (5)
2722     end
2723     feature_clauses.put (a_features, a_type)
2724 neilc 49534 end
2725 manus 51111
2726 tedf 56237 set_feature_locating (a_locating: BOOLEAN) is
2727     -- Set `feature_locating' with `a_locating'.
2728     do
2729     feature_locating := a_locating
2730     end
2731    
2732 manus 50607 get_feature_clauses (a_type: STRING): ARRAYED_LIST [DOTNET_FEATURE_CLAUSE_AS [CONSUMED_ENTITY]] is
2733     -- Get list of feature clauses relevant to .NET type with name 'a_type'.
2734     require
2735     a_type_not_void: a_type /= Void
2736     has_type_clauses: feature_clauses.has (a_type)
2737     do
2738     Result := feature_clauses.item (a_type)
2739     ensure
2740     result_not_void: Result /= Void
2741 neilc 33858 end
2742 manus 51111
2743 manus 50607 feature_clauses: HASH_TABLE [ARRAYED_LIST [DOTNET_FEATURE_CLAUSE_AS [CONSUMED_ENTITY]], STRING]
2744     -- List of features clauses for Current window hashed by the .NET name of the consumed_type.
2745 manus 51111
2746 manus 50607 feature_positions: HASH_TABLE [INTEGER, E_FEATURE]
2747     -- Features indexed by line position in class text (for .NET features).
2748 manus 26913
2749 tedf 56237 feature_locating: BOOLEAN
2750     -- Is feature tool locating a feature?
2751    
2752 manus 51111 feature {EB_WINDOW_MANAGER} -- Window management / Implementation
2753 manus 26913
2754 manus 50607 destroy_imp is
2755     -- Destroy window.
2756     do
2757     -- To avoid reentrance
2758     if not is_destroying then
2759     is_destroying := True
2760     -- If a launched application is still running, kill it.
2761 jfiat 56447 if
2762     Eb_debugger_manager.application_is_executing
2763     and then Eb_debugger_manager.debugging_window = Current
2764     then
2765     Eb_debugger_manager.Application.kill
2766 manus 50607 else
2767 king 55319 development_window_data.save_left_panel_layout (left_panel.save_to_resource)
2768     development_window_data.save_right_panel_layout (right_panel.save_to_resource)
2769 manus 50607 end
2770 king 55319 development_window_data.save_left_panel_width (panel.split_position)
2771 manus 50607 -- Save width & height.
2772 king 55319 development_window_data.save_size (window.width, window.height)
2773     development_window_data.save_window_state (window.is_minimized, window.is_maximized)
2774     development_window_data.save_position (window.x_position, window.y_position)
2775 manus 50607 left_panel.wipe_out
2776     right_panel.wipe_out
2777 king 55319 development_window_data.save_show_search_options (search_tool.options_shown)
2778 manus 50607 hide
2779 manus 26913
2780 manus 50607 -- Commit saves
2781 jfiat 56527 preferences.preferences.save_preferences
2782 manus 26913
2783 manus 50607 toolbars_area.wipe_out
2784     address_manager.recycle
2785     project_customizable_toolbar.recycle
2786 patrickr 56781 refactoring_customizable_toolbar.recycle
2787 manus 50607 Precursor {EB_TOOL_MANAGER}
2788 manus 26913
2789 manus 50607 managed_class_formatters.wipe_out
2790     managed_feature_formatters.wipe_out
2791     managed_main_formatters.wipe_out
2792     toolbarable_commands.wipe_out
2793     editors.wipe_out
2794     stone := Void
2795 neilc 49534 end
2796     end
2797    
2798 jasonw 56493 feature -- C output pixmap management
2799    
2800     start_c_output_pixmap_timer is
2801     -- Start timer to draw c output pixmap.
2802     do
2803     if context_tool /= Void then
2804     context_tool.start_c_output_pixmap_timer
2805     end
2806     end
2807    
2808     stop_c_output_pixmap_timer is
2809     -- Stop timer to draw c output pixmap.
2810     do
2811     if context_tool /= Void then
2812     context_tool.stop_c_output_pixmap_timer
2813     end
2814     end
2815    
2816 manus 51111 feature {NONE} -- Implementation
2817 neilc 49534
2818 manus 50607 set_stone_after_check (a_stone: STONE) is
2819     local
2820     old_stone: STONE
2821     new_class_stone: CLASSI_STONE
2822     old_class_stone: CLASSI_STONE
2823     conv_classc: CLASSC_STONE
2824     conv_brkstone: BREAKABLE_STONE
2825     cluster_st: CLUSTER_STONE
2826 tedf 55179 old_cluster_st: CLUSTER_STONE
2827 manus 50607 feature_stone: FEATURE_STONE
2828     conv_ferrst: FEATURE_ERROR_STONE
2829 manus 51111
2830 manus 50607 ef_stone: EXTERNAL_FILE_STONE
2831     f: FILE
2832 manus 51111
2833 manus 50607 l_format_context: FORMAT_CONTEXT
2834     conv_errst: ERROR_STONE
2835 alexk 51083 cl_syntax_stone: CL_SYNTAX_STONE
2836     error_line: INTEGER
2837 manus 50607 class_file: RAW_FILE
2838     class_text_exists: BOOLEAN
2839     same_class: BOOLEAN
2840     test_stone: CLASSI_STONE
2841     conv_ace: ACE_SYNTAX_STONE
2842     externali: EXTERNAL_CLASS_I
2843     external_cons: CONSUMED_TYPE
2844     str: STRING
2845     dotnet_class: BOOLEAN
2846     l_short_formatter: EB_SHORT_FORMATTER
2847     l_flat_formatter: EB_FLAT_SHORT_FORMATTER
2848 tedf 55179 l_main_formatter: EB_CLASS_TEXT_FORMATTER
2849 jfiat 56447 app_exec: APPLICATION_EXECUTION
2850 manus 50607 do
2851     -- the text does not change if the text was saved with syntax errors
2852     cur_wid := window
2853     if cur_wid = Void then
2854     --| Do nothing.
2855 manus 26913 else
2856 manus 50607 if old_cur = Void then
2857     old_cur := cur_wid.pointer_style
2858     end
2859     -- cur_wid.enable_capture
2860     cur_wid.set_pointer_style (Wait_cursor)
2861 neilc 49534 end
2862 manus 26913
2863 manus 50607 conv_brkstone ?= a_stone
2864     conv_errst ?= a_stone
2865     conv_ace ?= a_stone
2866     ef_stone ?= a_stone
2867     if conv_brkstone /= Void then
2868 jfiat 56447 app_exec := Debugger_manager.application
2869     if app_exec.is_breakpoint_enabled (conv_brkstone.routine, conv_brkstone.index) then
2870     app_exec.remove_breakpoint (conv_brkstone.routine, conv_brkstone.index)
2871 manus 50607 else
2872 jfiat 56447 app_exec.set_breakpoint (conv_brkstone.routine, conv_brkstone.index)
2873 manus 26913 end
2874 jfiat 55044 Debugger_manager.notify_breakpoints_changes
2875 manus 50607 elseif conv_errst /= Void then
2876     display_error_help_cmd.execute_with_stone (conv_errst)
2877     elseif conv_ace /= Void then
2878     --| FIXME XR: What should we do?!
2879     elseif ef_stone /= Void then
2880     f := ef_stone.file
2881     f.make_open_read (f.name)
2882     f.read_stream (f.count)
2883     f.close
2884     editor_tool.text_area.load_text (f.last_string)
2885     else
2886     -- Remember previous stone.
2887     old_stone := stone
2888     old_class_stone ?= stone
2889 tedf 55179 old_cluster_st ?= stone
2890 manus 51111
2891 manus 50607 -- New stone properties
2892     new_class_stone ?= a_stone
2893    
2894     -- Set the stone.
2895     old_set_stone (a_stone)
2896     cluster_st ?= a_stone
2897 manus 51111
2898 manus 50607 new_feature_cmd.disable_sensitive
2899 alexk 51136 toggle_feature_alias_cmd.disable_sensitive
2900 manus 50607 toggle_feature_signature_cmd.disable_sensitive
2901 alexk 51887 toggle_feature_assigner_cmd.disable_sensitive
2902 manus 51111
2903 manus 50607 -- We update the state of the `Add to Favorites' command.
2904     if new_class_stone /= Void then
2905     favorites_menu.first.enable_sensitive
2906     else
2907     favorites_menu.first.disable_sensitive
2908 neilc 49534 end
2909 manus 26913
2910 manus 50607 -- Update the address manager if needed.
2911     address_manager.refresh
2912     if new_class_stone /= Void then
2913 manus 54781 -- Text is now editable.
2914     editor_tool.text_area.set_read_only (False)
2915    
2916 manus 50607 -- class stone was dropped
2917     create class_file.make (new_class_stone.class_i.file_name)
2918     class_text_exists := class_file.exists
2919     feature_stone ?= a_stone
2920     --| We have to create a classi_stone to check whether the stones are really similar.
2921     --| Otherwise a redefinition of same_as may be called.
2922     create test_stone.make (new_class_stone.class_i)
2923     if test_stone.same_as (old_class_stone) then
2924     same_class := True
2925     end
2926     if not feature_stone_already_processed then
2927 manus 51111 if same_class and then text_saved then
2928 manus 50607 -- nothing changed in the editor
2929     -- we only have to update click_list
2930     if editor_tool.text_area.is_editable then
2931     editor_tool.text_area.update_click_list (False)
2932     end
2933 manus 26913 else
2934 manus 50607 if changed then
2935     -- user has already chosen not to save the file
2936     -- do not ask again
2937     Feature_positions.wipe_out
2938     editor_tool.text_area.no_save_before_next_load
2939     end
2940 manus 26913 end
2941     end
2942 manus 55527
2943 tedf 55179 conv_classc ?= new_class_stone
2944 neilc 49534
2945 tedf 55179 -- First choose possible formatter
2946     l_main_formatter ?= new_class_stone.pos_container
2947     if l_main_formatter /= Void and not during_synchronization then
2948 manus 55527 if
2949 tedf 55179 not (conv_classc /= Void and class_text_exists and (not changed or not same_class))
2950     then
2951     l_main_formatter.enable_select
2952 manus 55527 elseif feature_stone = Void then
2953 tedf 55179 if l_main_formatter /= pos_container then
2954     l_main_formatter.enable_select
2955     end
2956 tedf 55267 if new_class_stone.position > 0 then
2957     editor_tool.text_area.display_line_at_top_when_ready (new_class_stone.position)
2958 manus 55527 end
2959 tedf 55179 end
2960     end
2961 manus 55527
2962 manus 50607 if conv_classc = Void or else
2963     conv_classc.e_class.is_external or else
2964 manus 51111 feature_stone /= Void and not
2965 manus 50607 feature_stone_already_processed and not
2966     (same_class and context_tool.sending_stone) then
2967     -- If a classi_stone or a feature_stone or a external call
2968     -- has been dropped, check to see if a .NET class.
2969     if class_text_exists then
2970     if new_class_stone.class_i.is_external_class then
2971     externali ?= new_class_stone.class_i
2972 manus 52122 check
2973     externali_not_void: externali /= Void
2974     end
2975     external_cons := externali.external_consumed_type
2976 manus 50607 if external_cons /= Void then
2977     -- A .NET class.
2978     dotnet_class := True
2979     l_short_formatter ?= managed_main_formatters.i_th (4)
2980     l_flat_formatter ?= managed_main_formatters.i_th (5)
2981     if l_short_formatter /= Void then
2982     l_short_formatter.set_dotnet_mode (True)
2983     end
2984     if l_flat_formatter /= Void then
2985     l_flat_formatter.set_dotnet_mode (True)
2986     end
2987 manus 51111 end
2988 tedf 55267 elseif feature_stone /= Void then
2989     from
2990     managed_main_formatters.start
2991     until
2992     managed_main_formatters.after
2993     loop
2994     managed_main_formatters.item.set_stone (new_class_stone)
2995     managed_main_formatters.forth
2996     end
2997 manus 50607 else
2998     managed_main_formatters.first.set_stone (new_class_stone)
2999     managed_main_formatters.first.execute
3000     end
3001     else
3002     editor_tool.text_area.clear_window
3003     editor_tool.text_area.display_message (
3004     Warning_messages.w_file_not_exist (
3005     new_class_stone.class_i.file_name))
3006 neilc 33365 end
3007 manus 50607 end
3008     if conv_classc = Void then
3009     --| The dropped class is not compiled.
3010     --| Display only the textual formatter.
3011     if dotnet_class then
3012     managed_main_formatters.i_th (4).set_stone (new_class_stone)
3013     managed_main_formatters.i_th (5).set_stone (new_class_stone)
3014 manus 51111 managed_main_formatters.i_th (4).execute
3015 manus 50607 end
3016     address_manager.disable_formatters
3017 neilc 33365 else
3018 manus 50607 --| We have a compiled class.
3019     if
3020     class_text_exists and then
3021     Eiffel_project.Workbench.last_reached_degree <= 2
3022     then
3023     new_feature_cmd.enable_sensitive
3024 alexk 51136 toggle_feature_alias_cmd.enable_sensitive
3025 manus 50607 toggle_feature_signature_cmd.enable_sensitive
3026 alexk 51887 toggle_feature_assigner_cmd.enable_sensitive
3027 manus 50607 end
3028    
3029     --address_manager.enable_formatters
3030     update_formatters
3031     if not class_text_exists then
3032     --| Disable the textual formatter.
3033     managed_main_formatters.first.disable_sensitive
3034     from
3035     managed_main_formatters.start
3036     until
3037     managed_main_formatters.after
3038     loop
3039     managed_main_formatters.item.set_stone (new_class_stone)
3040     managed_main_formatters.forth
3041     end
3042     managed_main_formatters.i_th (2).execute
3043     else
3044     if not changed or not same_class then
3045     --| Enable all formatters.
3046     if
3047 tedf 55267 (not feature_stone_already_processed or
3048 manus 55527 not managed_main_formatters.first.selected) and
3049 tedf 55267 feature_stone = Void
3050 manus 50607 then
3051     from
3052     managed_main_formatters.start
3053     until
3054     managed_main_formatters.after
3055     loop
3056     managed_main_formatters.item.set_stone (new_class_stone)
3057     managed_main_formatters.forth
3058     end
3059     end
3060     else
3061 tedf 55673 if not feature_stone_already_processed then
3062     address_manager.disable_formatters
3063     from
3064     managed_main_formatters.start
3065     until
3066     managed_main_formatters.after
3067     loop
3068     managed_main_formatters.item.set_stone (new_class_stone)
3069     managed_main_formatters.forth
3070     end
3071 xavier 28693 end
3072 manus 26913 end
3073     end
3074     end
3075 tedf 56214 if managed_main_formatters.first.selected then
3076     editor_tool.text_area.set_read_only (false)
3077     else
3078     editor_tool.text_area.set_read_only (true)
3079     end
3080 manus 50607 else
3081 manus 51111 -- not a class text : cannot be edited
3082 manus 53708 editor_tool.text_area.set_read_only (True)
3083 manus 50607 address_manager.disable_formatters
3084 manus 26913
3085 manus 50607 --| Disable all formatters.
3086     from
3087     managed_main_formatters.start
3088     until
3089     managed_main_formatters.after
3090     loop
3091     managed_main_formatters.item.set_stone (Void)
3092     managed_main_formatters.forth
3093     end
3094     if cluster_st /= Void then
3095     --| FIXME XR: Really manage cluster display in the main editor
3096 jfiat 54401 l_format_context := formatted_context_for_cluster (cluster_st.cluster_i)
3097 manus 50607 editor_tool.text_area.process_text (l_format_context.text)
3098 tedf 55179 if cluster_st.position > 0 then
3099     editor_tool.text_area.display_line_at_top_when_ready (cluster_st.position)
3100     end
3101 manus 50607 --| END FIXME
3102     end
3103 neilc 49534 end
3104 alexk 51083 if class_text_exists then
3105     if feature_stone /= Void and not feature_stone_already_processed and not (same_class and context_tool.sending_stone) then
3106     conv_ferrst ?= feature_stone
3107     if conv_ferrst /= Void then
3108     error_line := conv_ferrst.line_number
3109     else
3110     -- if a feature_stone has been dropped
3111     -- scroll to the corresponding feature in the basic text format
3112     if not during_synchronization then
3113     scroll_to_feature (feature_stone.e_feature, new_class_stone.class_i)
3114     end
3115     end
3116 manus 50607 else
3117 alexk 51083 cl_syntax_stone ?= a_stone
3118     if cl_syntax_stone /= Void then
3119     error_line := cl_syntax_stone.line
3120 manus 50607 end
3121 manus 26913 end
3122 alexk 51083 if error_line > 0 then
3123     -- Scroll to the line of the error.
3124     editor_tool.text_area.display_line_when_ready (error_line, True)
3125     end
3126 manus 26913 end
3127 manus 50607 -- Update the title of the window
3128     if a_stone /= Void then
3129     if changed then
3130     str := a_stone.header.twin
3131     str.prepend ("* ")
3132     set_title (str)
3133     else
3134     set_title (a_stone.header)
3135     end
3136 neilc 49534 else
3137 manus 51111 set_title (Interface_names.t_empty_development_window)
3138 manus 26913 end
3139 manus 50607
3140     -- Refresh the tools.
3141     features_tool.set_stone (a_stone)
3142     cluster_tool.set_stone (a_stone)
3143     -- Update the context tool.
3144     if unified_stone then
3145     context_tool.set_stone (a_stone)
3146     end
3147    
3148 neilc 49534 end
3149 manus 50607 if
3150     stone /= Void and then
3151     not unified_stone
3152     then
3153     send_stone_to_context_cmd.enable_sensitive
3154 manus 26913 else
3155 manus 50607 send_stone_to_context_cmd.disable_sensitive
3156 manus 26913 end
3157 manus 50607 if cur_wid = Void then
3158     --| Do nothing.
3159 manus 51111 else
3160 manus 50607 cur_wid.set_pointer_style (old_cur)
3161     old_cur := Void
3162     -- cur_wid.disable_capture
3163     cur_wid := Void
3164 manus 26913 end
3165     end
3166    
3167 jfiat 54401 formatted_context_for_cluster (a_cluster: CLUSTER_I): FORMAT_CONTEXT is
3168     -- Formatted context representing the list of classes inside `a_cluster'.
3169     require
3170     a_cluster_not_void: a_cluster /= Void
3171     local
3172 jfiat 54437 l_assembly: ASSEMBLY_I
3173 jfiat 54402 l_sorted_cluster: EB_SORTED_CLUSTER
3174 jfiat 54401 l_format_context: FORMAT_CONTEXT
3175     l_indexes: INDEXING_CLAUSE_AS
3176 jfiat 54402 l_classes: LIST [CLASS_I]
3177 manus 55527 l_subclu: LIST [EB_SORTED_CLUSTER]
3178 jfiat 54401 l_cl_i: CLASS_I
3179     l_list_cl_i: LIST [CLASS_I]
3180     l_cluster: CLUSTER_I
3181     l_assert_level: ASSERTION_I
3182     do
3183     create l_format_context.make_for_case
3184 manus 55527
3185 jfiat 54401 l_format_context.put_text_item (ti_indexing_keyword)
3186     l_format_context.put_new_line
3187     l_format_context.indent
3188 jfiat 54437 if a_cluster.is_assembly then
3189     l_assembly ?= a_cluster
3190     check l_assembly /= Void end
3191     l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("assembly_name"))
3192     l_format_context.put_text_item_without_tabs (ti_colon)
3193     l_format_context.put_space
3194     l_format_context.put_quoted_string_item (l_assembly.assembly_name)
3195     l_format_context.put_new_line
3196     l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("assembly_path"))
3197     l_format_context.put_text_item_without_tabs (ti_colon)
3198     l_format_context.put_space
3199     l_format_context.put_quoted_string_item (l_assembly.assembly_path)
3200     l_format_context.put_new_line
3201 manus 55527
3202 jfiat 54437 end
3203 jfiat 54401 l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("cluster"))
3204     l_format_context.put_text_item_without_tabs (ti_colon)
3205     l_format_context.put_space
3206     l_format_context.put_quoted_string_item (a_cluster.cluster_name)
3207    
3208     l_format_context.put_new_line
3209     l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("cluster_path"))
3210     l_format_context.put_text_item_without_tabs (ti_colon)
3211     l_format_context.put_space
3212     l_format_context.put_quoted_string_item (a_cluster.path)
3213     l_format_context.put_new_line
3214     l_indexes := a_cluster.indexes
3215     if l_indexes /= Void then
3216     l_format_context.format_indexing_with_no_keyword (l_indexes)
3217 manus 55527 l_format_context.put_new_line
3218 jfiat 54401 end
3219 manus 55527
3220 jfiat 54401 if a_cluster.parent_cluster /= Void then
3221     l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("parent cluster"))
3222     l_format_context.put_text_item_without_tabs (ti_colon)
3223     l_format_context.put_new_line
3224     l_format_context.indent
3225     l_format_context.put_manifest_string (" - ")
3226 manus 55527
3227 jfiat 54401 l_format_context.put_clusteri (a_cluster.parent_cluster)
3228     l_format_context.put_new_line
3229     l_format_context.exdent
3230     end
3231 jfiat 54402
3232     create l_sorted_cluster.make (a_cluster)
3233    
3234     if not l_sorted_cluster.clusters.is_empty then
3235 jfiat 54401 l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("sub cluster(s)"))
3236     l_format_context.put_text_item_without_tabs (ti_colon)
3237     l_format_context.put_new_line
3238     l_format_context.indent
3239     from
3240 jfiat 54402 l_subclu := l_sorted_cluster.clusters
3241 jfiat 54401 l_subclu.start
3242     until
3243     l_subclu.after
3244     loop
3245 jfiat 54402 l_cluster := l_subclu.item.actual_cluster
3246 jfiat 54401 l_format_context.put_manifest_string (" - ")
3247     l_format_context.put_clusteri (l_cluster)
3248     l_format_context.put_space
3249     l_format_context.put_text_item_without_tabs (ti_L_parenthesis)
3250     l_format_context.put_comment_text (l_cluster.classes.count.out)
3251 manus 55527 l_format_context.put_text_item_without_tabs (ti_R_parenthesis)
3252 jfiat 54401 l_format_context.put_new_line
3253     l_subclu.forth
3254     end
3255     l_format_context.exdent
3256     end
3257    
3258 jfiat 54402 if not l_sorted_cluster.classes.is_empty then
3259 jfiat 54401 l_format_context.put_text_item (create {INDEXING_TAG_TEXT}.make ("class(es)"))
3260     l_format_context.put_text_item_without_tabs (ti_colon)
3261     l_format_context.put_new_line
3262     l_format_context.indent
3263     from
3264 jfiat 54402 l_classes := l_sorted_cluster.classes
3265 jfiat 54401 l_classes.start
3266     until
3267     l_classes.after
3268     loop
3269 jfiat 54402 l_cl_i := l_classes.item
3270 jfiat 54401 l_assert_level := l_cl_i.assertion_level
3271     l_format_context.put_manifest_string (" - ")
3272     l_format_context.put_classi (l_cl_i)
3273     l_format_context.put_text_item_without_tabs (ti_colon)
3274 jfiat 54402 if l_cl_i.compiled then
3275     if l_assert_level.check_all then<