/[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 57886 - (hide annotations)
Thu Mar 30 00:13:44 2006 UTC (13 years, 10 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/interface/new_graphical/windows/eb_development_window.e
File size: 129217 byte(s)
Defined `group' and use it in `set_editing_location_by_feature'. Made `cluster'
  use group and left a `conf_todo_msg' call since there is one caller left that
  needs to be updated. Doing this made pick and drop work in the editor.

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