redcar-dev 0.12.17dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +664 -0
- data/LICENSE +32 -0
- data/README.md +119 -0
- data/Rakefile +283 -0
- data/bin/redcar +29 -0
- data/lib/redcar.rb +307 -0
- data/lib/redcar/installer.rb +178 -0
- data/lib/redcar/instance_exec.rb +25 -0
- data/lib/redcar/logger.rb +64 -0
- data/lib/redcar/plist.rb +83 -0
- data/lib/redcar/ruby_extensions.rb +201 -0
- data/lib/redcar/runner.rb +130 -0
- data/lib/redcar/usage.rb +42 -0
- data/lib/redcar_quick_start.rb +100 -0
- data/lib/regex_replace.rb +221 -0
- data/lib/tasks/app-bundle.rake +63 -0
- data/plugins/application/features/main_menu.feature +9 -0
- data/plugins/application/features/navigation_history.feature +66 -0
- data/plugins/application/features/step_definitions/command_steps.rb +10 -0
- data/plugins/application/features/step_definitions/dialog_steps.rb +25 -0
- data/plugins/application/features/step_definitions/filter_list_dialog_steps.rb +42 -0
- data/plugins/application/features/step_definitions/key_steps.rb +18 -0
- data/plugins/application/features/step_definitions/menu_steps.rb +42 -0
- data/plugins/application/features/step_definitions/navigation_history_steps.rb +4 -0
- data/plugins/application/features/step_definitions/speedbar_steps.rb +88 -0
- data/plugins/application/features/step_definitions/tree_steps.rb +107 -0
- data/plugins/application/features/step_definitions/window_steps.rb +17 -0
- data/plugins/application/features/support/env.rb +257 -0
- data/plugins/application/features/support/fake_event.rb +26 -0
- data/plugins/application/lib/application.rb +425 -0
- data/plugins/application/lib/application/assets/file.png +0 -0
- data/plugins/application/lib/application/clipboard.rb +95 -0
- data/plugins/application/lib/application/command.rb +108 -0
- data/plugins/application/lib/application/command/executor.rb +80 -0
- data/plugins/application/lib/application/command/history.rb +54 -0
- data/plugins/application/lib/application/commands/application_commands.rb +21 -0
- data/plugins/application/lib/application/commands/notebook_commands.rb +73 -0
- data/plugins/application/lib/application/commands/tab_commands.rb +105 -0
- data/plugins/application/lib/application/commands/treebook_commands.rb +117 -0
- data/plugins/application/lib/application/commands/window_commands.rb +68 -0
- data/plugins/application/lib/application/dialog.rb +170 -0
- data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +123 -0
- data/plugins/application/lib/application/dialogs/modeless_list_dialog.rb +85 -0
- data/plugins/application/lib/application/event_spewer.rb +32 -0
- data/plugins/application/lib/application/keymap.rb +41 -0
- data/plugins/application/lib/application/keymap/builder.rb +23 -0
- data/plugins/application/lib/application/menu.rb +117 -0
- data/plugins/application/lib/application/menu/builder.rb +80 -0
- data/plugins/application/lib/application/menu/builder/group.rb +47 -0
- data/plugins/application/lib/application/menu/item.rb +79 -0
- data/plugins/application/lib/application/menu/lazy_menu.rb +25 -0
- data/plugins/application/lib/application/navigation_history.rb +71 -0
- data/plugins/application/lib/application/notebook.rb +163 -0
- data/plugins/application/lib/application/sensitive.rb +57 -0
- data/plugins/application/lib/application/sensitivity.rb +82 -0
- data/plugins/application/lib/application/speedbar.rb +100 -0
- data/plugins/application/lib/application/tab.rb +92 -0
- data/plugins/application/lib/application/tab/command.rb +5 -0
- data/plugins/application/lib/application/toolbar.rb +83 -0
- data/plugins/application/lib/application/toolbar/builder.rb +80 -0
- data/plugins/application/lib/application/toolbar/builder/group.rb +47 -0
- data/plugins/application/lib/application/toolbar/item.rb +71 -0
- data/plugins/application/lib/application/toolbar/lazy_toolbar.rb +25 -0
- data/plugins/application/lib/application/tree.rb +94 -0
- data/plugins/application/lib/application/tree/command.rb +5 -0
- data/plugins/application/lib/application/tree/controller.rb +64 -0
- data/plugins/application/lib/application/tree/mirror.rb +132 -0
- data/plugins/application/lib/application/treebook.rb +83 -0
- data/plugins/application/lib/application/window.rb +274 -0
- data/plugins/application/plugin.rb +8 -0
- data/plugins/application/spec/application/application_spec.rb +23 -0
- data/plugins/application/spec/application/clipboard_spec.rb +55 -0
- data/plugins/application/spec/application/command/executor_spec.rb +78 -0
- data/plugins/application/spec/application/command/history_spec.rb +49 -0
- data/plugins/application/spec/application/command_spec.rb +78 -0
- data/plugins/application/spec/application/controllers/application_controller.rb +4 -0
- data/plugins/application/spec/application/controllers/notebook_controller.rb +4 -0
- data/plugins/application/spec/application/controllers/window_controller.rb +5 -0
- data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
- data/plugins/application/spec/application/menu/builder_spec.rb +61 -0
- data/plugins/application/spec/application/menu/menu_item_spec.rb +17 -0
- data/plugins/application/spec/application/menu_spec.rb +171 -0
- data/plugins/application/spec/application/navigation_history_spec.rb +96 -0
- data/plugins/application/spec/application/notebook_spec.rb +31 -0
- data/plugins/application/spec/application/sensitive_spec.rb +156 -0
- data/plugins/application/spec/application/speedbar_spec.rb +77 -0
- data/plugins/application/spec/application/treebook_spec.rb +27 -0
- data/plugins/application/spec/application/window_spec.rb +24 -0
- data/plugins/application/spec/spec_helper.rb +18 -0
- data/plugins/application_swt/build.xml +74 -0
- data/plugins/application_swt/lib/application_swt.rb +218 -0
- data/plugins/application_swt/lib/application_swt/bring_to_front.rb +53 -0
- data/plugins/application_swt/lib/application_swt/clipboard.rb +42 -0
- data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +180 -0
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +233 -0
- data/plugins/application_swt/lib/application_swt/dialogs/input_dialog.rb +46 -0
- data/plugins/application_swt/lib/application_swt/dialogs/modeless_dialog.rb +113 -0
- data/plugins/application_swt/lib/application_swt/dialogs/modeless_html_dialog.rb +85 -0
- data/plugins/application_swt/lib/application_swt/dialogs/modeless_list_dialog_controller.rb +143 -0
- data/plugins/application_swt/lib/application_swt/dialogs/no_buttons_dialog.rb +24 -0
- data/plugins/application_swt/lib/application_swt/dialogs/text_and_file_dialog.rb +118 -0
- data/plugins/application_swt/lib/application_swt/gradient.rb +61 -0
- data/plugins/application_swt/lib/application_swt/html_tab.rb +79 -0
- data/plugins/application_swt/lib/application_swt/icon.rb +35 -0
- data/plugins/application_swt/lib/application_swt/listener_helpers.rb +20 -0
- data/plugins/application_swt/lib/application_swt/menu.rb +167 -0
- data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +94 -0
- data/plugins/application_swt/lib/application_swt/notebook.rb +148 -0
- data/plugins/application_swt/lib/application_swt/notebook/tab_drag_and_drop_listener.rb +124 -0
- data/plugins/application_swt/lib/application_swt/notebook/tab_transfer.rb +83 -0
- data/plugins/application_swt/lib/application_swt/speedbar.rb +185 -0
- data/plugins/application_swt/lib/application_swt/speedbar/button_item.rb +20 -0
- data/plugins/application_swt/lib/application_swt/speedbar/combo_item.rb +55 -0
- data/plugins/application_swt/lib/application_swt/speedbar/label_item.rb +15 -0
- data/plugins/application_swt/lib/application_swt/speedbar/slider_item.rb +32 -0
- data/plugins/application_swt/lib/application_swt/speedbar/text_box_item.rb +36 -0
- data/plugins/application_swt/lib/application_swt/speedbar/toggle_item.rb +29 -0
- data/plugins/application_swt/lib/application_swt/tab.rb +84 -0
- data/plugins/application_swt/lib/application_swt/toolbar.rb +138 -0
- data/plugins/application_swt/lib/application_swt/toolbar/binding_translator.rb +94 -0
- data/plugins/application_swt/lib/application_swt/treebook.rb +78 -0
- data/plugins/application_swt/lib/application_swt/window.rb +419 -0
- data/plugins/application_swt/lib/dist/application_swt.jar +0 -0
- data/plugins/application_swt/lib/swt/graphics_utils.rb +193 -0
- data/plugins/application_swt/lib/swt/vtab_folder.rb +177 -0
- data/plugins/application_swt/lib/swt/vtab_item.rb +78 -0
- data/plugins/application_swt/lib/swt/vtab_label.rb +127 -0
- data/plugins/application_swt/plugin.rb +8 -0
- data/plugins/application_swt/spec/application_swt/gradient_spec.rb +133 -0
- data/plugins/application_swt/spec/application_swt/menu/binding_translator_spec.rb +73 -0
- data/plugins/application_swt/spec/application_swt/menu_spec.rb +7 -0
- data/plugins/application_swt/spec/spec_helper.rb +20 -0
- data/plugins/application_swt/src/com/redcareditor/application_swt/CocoaUIEnhancer.java +313 -0
- data/plugins/auto_completer/features/auto_complete.feature +65 -0
- data/plugins/auto_completer/features/step_definitions/auto_complete_steps.rb +4 -0
- data/plugins/auto_completer/features/support/env.rb +2 -0
- data/plugins/auto_completer/lib/auto_completer.rb +129 -0
- data/plugins/auto_completer/lib/auto_completer/current_document_completion_source.rb +19 -0
- data/plugins/auto_completer/lib/auto_completer/document_controller.rb +52 -0
- data/plugins/auto_completer/lib/auto_completer/list_dialog.rb +21 -0
- data/plugins/auto_completer/lib/auto_completer/word_iterator.rb +48 -0
- data/plugins/auto_completer/lib/auto_completer/word_list.rb +47 -0
- data/plugins/auto_completer/plugin.rb +10 -0
- data/plugins/auto_indenter/features/java_style_indentation.feature +36 -0
- data/plugins/auto_indenter/features/ruby_style_indentation.feature +42 -0
- data/plugins/auto_indenter/features/step_definitions/indentation_steps.rb +15 -0
- data/plugins/auto_indenter/features/support/env.rb +1 -0
- data/plugins/auto_indenter/lib/auto_indenter.rb +108 -0
- data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +100 -0
- data/plugins/auto_indenter/lib/auto_indenter/commands.rb +66 -0
- data/plugins/auto_indenter/lib/auto_indenter/document_controller.rb +103 -0
- data/plugins/auto_indenter/lib/auto_indenter/rules.rb +41 -0
- data/plugins/auto_indenter/plugin.rb +9 -0
- data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +151 -0
- data/plugins/auto_indenter/spec/spec_helper.rb +5 -0
- data/plugins/auto_pairer/features/auto_pairer.feature +92 -0
- data/plugins/auto_pairer/features/step_definitions/auto_pairer_steps.rb +0 -0
- data/plugins/auto_pairer/features/support/env.rb +1 -0
- data/plugins/auto_pairer/lib/auto_pairer.rb +12 -0
- data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +168 -0
- data/plugins/auto_pairer/lib/auto_pairer/pairs_for_scope.rb +57 -0
- data/plugins/auto_pairer/plugin.rb +9 -0
- data/plugins/clipboard-viewer/Screenshot.png +0 -0
- data/plugins/clipboard-viewer/lib/clipboard_viewer.rb +50 -0
- data/plugins/clipboard-viewer/lib/clipboard_viewer/browser_controller.rb +27 -0
- data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +67 -0
- data/plugins/clipboard-viewer/plugin.rb +9 -0
- data/plugins/clipboard-viewer/views/clipboard.html.erb +19 -0
- data/plugins/clipboard-viewer/views/default.css +43 -0
- data/plugins/clipboard-viewer/views/redcar_small_icon.png +0 -0
- data/plugins/comment/features/line_comment.feature +249 -0
- data/plugins/comment/features/selection_comment.feature +21 -0
- data/plugins/comment/features/step_definitions/comment_steps.rb +7 -0
- data/plugins/comment/lib/comment.rb +268 -0
- data/plugins/comment/plugin.rb +7 -0
- data/plugins/comment/vendor/comment_lib.json +47 -0
- data/plugins/connection_manager/lib/connection_manager.rb +57 -0
- data/plugins/connection_manager/lib/connection_manager/commands.rb +14 -0
- data/plugins/connection_manager/lib/connection_manager/connection_store.rb +87 -0
- data/plugins/connection_manager/lib/connection_manager/controller.rb +100 -0
- data/plugins/connection_manager/lib/connection_manager/filter_dialog.rb +38 -0
- data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +93 -0
- data/plugins/connection_manager/plugin.rb +12 -0
- data/plugins/connection_manager/views/index.html.erb +284 -0
- data/plugins/core/lib/core.rb +41 -0
- data/plugins/core/lib/core/controller.rb +23 -0
- data/plugins/core/lib/core/gui.rb +100 -0
- data/plugins/core/lib/core/has_spi.rb +10 -0
- data/plugins/core/lib/core/interface.rb +73 -0
- data/plugins/core/lib/core/model.rb +11 -0
- data/plugins/core/lib/core/observable.rb +115 -0
- data/plugins/core/lib/core/observable_struct.rb +34 -0
- data/plugins/core/lib/core/persistent_cache.rb +57 -0
- data/plugins/core/lib/core/plugin.rb +12 -0
- data/plugins/core/lib/core/plugin/storage.rb +133 -0
- data/plugins/core/lib/core/reentry_helpers.rb +13 -0
- data/plugins/core/lib/core/resource.rb +86 -0
- data/plugins/core/lib/core/task.rb +62 -0
- data/plugins/core/lib/core/task_queue.rb +72 -0
- data/plugins/core/plugin.rb +7 -0
- data/plugins/core/spec/core/base_storage_spec.rb +81 -0
- data/plugins/core/spec/core/gui_spec.rb +27 -0
- data/plugins/core/spec/core/observable_spec.rb +104 -0
- data/plugins/core/spec/core/persistent_cache_spec.rb +100 -0
- data/plugins/core/spec/core/resource_spec.rb +125 -0
- data/plugins/core/spec/core/shared_storage_spec.rb +49 -0
- data/plugins/core/spec/core/storage_spec.rb +27 -0
- data/plugins/core/spec/core/task_queue_spec.rb +199 -0
- data/plugins/core/spec/spec_helper.rb +27 -0
- data/plugins/declarations/lib/declarations.rb +159 -0
- data/plugins/declarations/lib/declarations/completion_source.rb +22 -0
- data/plugins/declarations/lib/declarations/file.rb +68 -0
- data/plugins/declarations/lib/declarations/parser.rb +186 -0
- data/plugins/declarations/lib/declarations/select_tag_dialog.rb +45 -0
- data/plugins/declarations/plugin.rb +7 -0
- data/plugins/declarations/spec/declarations/file_spec.rb +62 -0
- data/plugins/declarations/spec/fixtures/federalist.rb +15 -0
- data/plugins/declarations/spec/spec_helper.rb +5 -0
- data/plugins/document_search/Readme.md +14 -0
- data/plugins/document_search/features/find.feature +541 -0
- data/plugins/document_search/features/incremental_search.feature +351 -0
- data/plugins/document_search/features/replace.feature +178 -0
- data/plugins/document_search/features/step_definitions/find_steps.rb +16 -0
- data/plugins/document_search/features/support/env.rb +14 -0
- data/plugins/document_search/lib/document_search.rb +191 -0
- data/plugins/document_search/lib/document_search/commands.rb +307 -0
- data/plugins/document_search/lib/document_search/find_speedbar.rb +162 -0
- data/plugins/document_search/lib/document_search/incremental_search_speedbar.rb +70 -0
- data/plugins/document_search/lib/document_search/query_options.rb +21 -0
- data/plugins/document_search/plugin.rb +8 -0
- data/plugins/edit_view/features/align_assignment.feature +106 -0
- data/plugins/edit_view/features/case_change.feature +67 -0
- data/plugins/edit_view/features/cursor_navigation.feature +36 -0
- data/plugins/edit_view/features/cut_and_paste.feature +45 -0
- data/plugins/edit_view/features/grammar.feature +11 -0
- data/plugins/edit_view/features/indentation_commands.feature +49 -0
- data/plugins/edit_view/features/line_delimiter.feature +47 -0
- data/plugins/edit_view/features/multiple_notebooks.feature +52 -0
- data/plugins/edit_view/features/multiple_windows.feature +48 -0
- data/plugins/edit_view/features/new_tab.feature +11 -0
- data/plugins/edit_view/features/soft_tabs.feature +243 -0
- data/plugins/edit_view/features/sort_lines.feature +15 -0
- data/plugins/edit_view/features/step_definitions/editing_steps.rb +350 -0
- data/plugins/edit_view/features/step_definitions/grammar_steps.rb +4 -0
- data/plugins/edit_view/features/step_definitions/key_steps.rb +48 -0
- data/plugins/edit_view/features/step_definitions/notebook_steps.rb +59 -0
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +113 -0
- data/plugins/edit_view/features/step_definitions/window_steps.rb +86 -0
- data/plugins/edit_view/features/support/env.rb +59 -0
- data/plugins/edit_view/features/switch_tabs.feature +106 -0
- data/plugins/edit_view/features/tabs.feature +146 -0
- data/plugins/edit_view/features/undo_and_redo.feature +73 -0
- data/plugins/edit_view/features/word_matching.feature +67 -0
- data/plugins/edit_view/lib/edit_view.rb +659 -0
- data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +170 -0
- data/plugins/edit_view/lib/edit_view/actions/cmd_enter.rb +11 -0
- data/plugins/edit_view/lib/edit_view/actions/deletion.rb +40 -0
- data/plugins/edit_view/lib/edit_view/actions/esc.rb +15 -0
- data/plugins/edit_view/lib/edit_view/actions/tab.rb +70 -0
- data/plugins/edit_view/lib/edit_view/command.rb +14 -0
- data/plugins/edit_view/lib/edit_view/commands/align_assignment_command.rb +55 -0
- data/plugins/edit_view/lib/edit_view/commands/text_conversion_commands.rb +85 -0
- data/plugins/edit_view/lib/edit_view/document.rb +796 -0
- data/plugins/edit_view/lib/edit_view/document/command.rb +25 -0
- data/plugins/edit_view/lib/edit_view/document/controller.rb +43 -0
- data/plugins/edit_view/lib/edit_view/document/history.rb +41 -0
- data/plugins/edit_view/lib/edit_view/document/indentation.rb +40 -0
- data/plugins/edit_view/lib/edit_view/document/mirror.rb +42 -0
- data/plugins/edit_view/lib/edit_view/edit_tab.rb +59 -0
- data/plugins/edit_view/lib/edit_view/grammar.rb +58 -0
- data/plugins/edit_view/lib/edit_view/grammars/default.rb +10 -0
- data/plugins/edit_view/lib/edit_view/grammars/ruby.rb +10 -0
- data/plugins/edit_view/lib/edit_view/grammars/ruby_on_rails.rb +7 -0
- data/plugins/edit_view/lib/edit_view/info_speedbar.rb +98 -0
- data/plugins/edit_view/lib/edit_view/modified_tabs_checker.rb +35 -0
- data/plugins/edit_view/lib/edit_view/select_font_dialog.rb +45 -0
- data/plugins/edit_view/lib/edit_view/select_theme_dialog.rb +42 -0
- data/plugins/edit_view/lib/edit_view/tab_settings.rb +135 -0
- data/plugins/edit_view/plugin.rb +9 -0
- data/plugins/edit_view/spec/edit_view/document/indentation_spec.rb +112 -0
- data/plugins/edit_view/spec/edit_view/document_spec.rb +130 -0
- data/plugins/edit_view/spec/spec_helper.rb +5 -0
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +621 -0
- data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +224 -0
- data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +50 -0
- data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +68 -0
- data/plugins/edit_view_swt/plugin.rb +9 -0
- data/plugins/edit_view_swt/spec/edit_view_swt/word_movement_spec.rb +29 -0
- data/plugins/edit_view_swt/spec/spec_helper.rb +5 -0
- data/plugins/encryption/encryption.rb +52 -0
- data/plugins/encryption/ezcrypto.rb +652 -0
- data/plugins/encryption/jarmor-1.1.jar +0 -0
- data/plugins/encryption/plugin.rb +9 -0
- data/plugins/execute_current_tab/lib/execute_current_tab.rb +68 -0
- data/plugins/execute_current_tab/plugin.rb +8 -0
- data/plugins/help/lib/help.rb +64 -0
- data/plugins/help/lib/help/help_tab.rb +11 -0
- data/plugins/help/lib/help/view_controller.rb +30 -0
- data/plugins/help/plugin.rb +9 -0
- data/plugins/help/views/default.css +31 -0
- data/plugins/help/views/index.html.erb +41 -0
- data/plugins/help/views/redcar_small_icon.png +0 -0
- data/plugins/html_view/assets/blueprint/ie.css +35 -0
- data/plugins/html_view/assets/blueprint/print.css +29 -0
- data/plugins/html_view/assets/blueprint/screen.css +257 -0
- data/plugins/html_view/assets/blueprint/src/forms.css +65 -0
- data/plugins/html_view/assets/blueprint/src/grid.css +281 -0
- data/plugins/html_view/assets/blueprint/src/grid.png +0 -0
- data/plugins/html_view/assets/blueprint/src/ie.css +76 -0
- data/plugins/html_view/assets/blueprint/src/print.css +85 -0
- data/plugins/html_view/assets/blueprint/src/reset.css +38 -0
- data/plugins/html_view/assets/blueprint/src/typography.css +106 -0
- data/plugins/html_view/assets/jquery-1.4.min.js +151 -0
- data/plugins/html_view/assets/json2.js +476 -0
- data/plugins/html_view/assets/redcar.css +44 -0
- data/plugins/html_view/features/browser_bar.feature +47 -0
- data/plugins/html_view/features/fixtures/other.html +1 -0
- data/plugins/html_view/features/fixtures/sample.html +1 -0
- data/plugins/html_view/features/step_definitions/html_view_steps.rb +64 -0
- data/plugins/html_view/features/step_definitions/web_view_steps.rb +12 -0
- data/plugins/html_view/features/support/env.rb +27 -0
- data/plugins/html_view/features/web_preview.feature +21 -0
- data/plugins/html_view/lib/html_controller.rb +50 -0
- data/plugins/html_view/lib/html_view.rb +170 -0
- data/plugins/html_view/lib/html_view/browser_bar.rb +82 -0
- data/plugins/html_view/lib/html_view/commands.rb +64 -0
- data/plugins/html_view/lib/html_view/default_controller.rb +23 -0
- data/plugins/html_view/lib/html_view/html_tab.rb +40 -0
- data/plugins/html_view/plugin.rb +13 -0
- data/plugins/html_view/views/default.css +117 -0
- data/plugins/html_view/views/index.html.erb +5 -0
- data/plugins/html_view/views/watermark-48.png +0 -0
- data/plugins/java/features/fixtures/lib/classes.jar +0 -0
- data/plugins/java/features/fixtures/test.java +0 -0
- data/plugins/java/features/support/env.rb +27 -0
- data/plugins/java/features/syntax_check_java.feature +86 -0
- data/plugins/java/lib/syntax_check/java.rb +86 -0
- data/plugins/java/plugin.rb +7 -0
- data/plugins/key_bindings/lib/key_bindings.rb +34 -0
- data/plugins/key_bindings/plugin.rb +8 -0
- data/plugins/key_bindings/spec/spec_helper.rb +5 -0
- data/plugins/line_tools/features/clear_line.feature +25 -0
- data/plugins/line_tools/features/kill_line.feature +25 -0
- data/plugins/line_tools/features/lower_text.feature +54 -0
- data/plugins/line_tools/features/raise_text.feature +50 -0
- data/plugins/line_tools/features/replace_line.feature +33 -0
- data/plugins/line_tools/features/step_definitions/line_tools_steps.rb +23 -0
- data/plugins/line_tools/features/support/env.rb +0 -0
- data/plugins/line_tools/features/trim_line.feature +73 -0
- data/plugins/line_tools/lib/line_tools.rb +217 -0
- data/plugins/line_tools/plugin.rb +9 -0
- data/plugins/macros/features/block_selection_in_macros.feature +48 -0
- data/plugins/macros/features/predictive_macros.feature +79 -0
- data/plugins/macros/features/record_and_run_macro.feature +87 -0
- data/plugins/macros/features/step_definitions/macro_steps.rb +11 -0
- data/plugins/macros/features/step_definitions/prediction_steps.rb +8 -0
- data/plugins/macros/features/support/env.rb +0 -0
- data/plugins/macros/lib/macros.rb +167 -0
- data/plugins/macros/lib/macros/action_sequence.rb +30 -0
- data/plugins/macros/lib/macros/commands.rb +108 -0
- data/plugins/macros/lib/macros/macro.rb +37 -0
- data/plugins/macros/lib/macros/manager_controller.rb +67 -0
- data/plugins/macros/lib/macros/predictive/document_controller.rb +69 -0
- data/plugins/macros/lib/macros/predictive/sequence_finder.rb +112 -0
- data/plugins/macros/plugin.rb +9 -0
- data/plugins/macros/spec/macros/predictive/sequence_finder_spec.rb +142 -0
- data/plugins/macros/spec/spec_helper.rb +6 -0
- data/plugins/macros/views/macro_manager.html.erb +92 -0
- data/plugins/my_plugin/lib/my_plugin.rb +47 -0
- data/plugins/my_plugin/plugin.rb +8 -0
- data/plugins/open_default_app/lib/open_default_app.rb +61 -0
- data/plugins/open_default_app/plugin.rb +8 -0
- data/plugins/open_default_app/screenshot.png +0 -0
- data/plugins/outline_view/features/outline_view.feature +79 -0
- data/plugins/outline_view/features/step_definitions/outline_steps.rb +45 -0
- data/plugins/outline_view/lib/outline_view.rb +66 -0
- data/plugins/outline_view/lib/outline_view/commands.rb +13 -0
- data/plugins/outline_view/plugin.rb +10 -0
- data/plugins/outline_view/spec/fixtures/some_project/javascript.js +10 -0
- data/plugins/outline_view/spec/fixtures/some_project/nothing_to_see.rb +0 -0
- data/plugins/outline_view/spec/fixtures/some_project/one_lonely_class.rb +2 -0
- data/plugins/outline_view/spec/fixtures/some_project/similar_names.rb +18 -0
- data/plugins/outline_view/spec/fixtures/some_project/something_fancy.rb +736 -0
- data/plugins/outline_view/spec/fixtures/some_project/trailing_space.rb +5 -0
- data/plugins/outline_view_swt/lib/outline_view_swt.rb +79 -0
- data/plugins/outline_view_swt/plugin.rb +7 -0
- data/plugins/pair_highlighter/lib/pair_highlighter.rb +34 -0
- data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +185 -0
- data/plugins/pair_highlighter/plugin.rb +9 -0
- data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +122 -0
- data/plugins/plugin_manager_ui/plugin.rb +13 -0
- data/plugins/plugin_manager_ui/views/index.html.erb +62 -0
- data/plugins/project/features/close_directory_tree.feature +28 -0
- data/plugins/project/features/find_file.feature +119 -0
- data/plugins/project/features/highlight_focussed_tab.feature +53 -0
- data/plugins/project/features/move_and_rename_files.feature +25 -0
- data/plugins/project/features/open_and_save_files.feature +85 -0
- data/plugins/project/features/open_directory_tree.feature +93 -0
- data/plugins/project/features/refresh_directory_tree.feature +44 -0
- data/plugins/project/features/step_definitions/directory_steps.rb +35 -0
- data/plugins/project/features/step_definitions/drb_steps.rb +40 -0
- data/plugins/project/features/step_definitions/file_steps.rb +66 -0
- data/plugins/project/features/step_definitions/find_file_steps.rb +7 -0
- data/plugins/project/features/step_definitions/project_tree_steps.rb +7 -0
- data/plugins/project/features/sub_project.feature +15 -0
- data/plugins/project/features/support/env.rb +35 -0
- data/plugins/project/features/watch_for_modified_files.feature +109 -0
- data/plugins/project/lib/project.rb +266 -0
- data/plugins/project/lib/project/adapters/local.rb +82 -0
- data/plugins/project/lib/project/adapters/remote.rb +96 -0
- data/plugins/project/lib/project/adapters/remote_protocols/ftp.rb +93 -0
- data/plugins/project/lib/project/adapters/remote_protocols/protocol.rb +94 -0
- data/plugins/project/lib/project/adapters/remote_protocols/sftp.rb +181 -0
- data/plugins/project/lib/project/commands.rb +449 -0
- data/plugins/project/lib/project/dir_controller.rb +275 -0
- data/plugins/project/lib/project/dir_mirror.rb +176 -0
- data/plugins/project/lib/project/drb_service.rb +86 -0
- data/plugins/project/lib/project/file_list.rb +164 -0
- data/plugins/project/lib/project/file_mirror.rb +85 -0
- data/plugins/project/lib/project/find_file_dialog.rb +118 -0
- data/plugins/project/lib/project/find_recent_dialog.rb +30 -0
- data/plugins/project/lib/project/manager.rb +545 -0
- data/plugins/project/lib/project/project_tree_controller.rb +24 -0
- data/plugins/project/lib/project/recent.rb +64 -0
- data/plugins/project/lib/project/sub_project.rb +17 -0
- data/plugins/project/lib/project/support/recycle.js +2 -0
- data/plugins/project/lib/project/support/trash.rb +73 -0
- data/plugins/project/plugin.rb +11 -0
- data/plugins/project/spec/fixture_helper.rb +30 -0
- data/plugins/project/spec/project/adapters/remote_protocols/ftp_spec.rb +75 -0
- data/plugins/project/spec/project/adapters/remote_protocols/sftp_spec.rb +121 -0
- data/plugins/project/spec/project/adapters/remote_spec.rb +136 -0
- data/plugins/project/spec/project/dir_mirror_spec.rb +65 -0
- data/plugins/project/spec/project/file_list_spec.rb +151 -0
- data/plugins/project/spec/project/file_mirror_spec.rb +97 -0
- data/plugins/project/spec/spec_helper.rb +26 -0
- data/plugins/project/views/bulk_rename.html.erb +162 -0
- data/plugins/project_search/features/support/env.rb +6 -0
- data/plugins/project_search/features/word_search.feature +34 -0
- data/plugins/project_search/lib/project_search.rb +82 -0
- data/plugins/project_search/lib/project_search/binary_data_detector.rb +46 -0
- data/plugins/project_search/lib/project_search/commands.rb +50 -0
- data/plugins/project_search/lib/project_search/hit.rb +21 -0
- data/plugins/project_search/lib/project_search/images/spinner.gif +0 -0
- data/plugins/project_search/lib/project_search/lucene_index.rb +81 -0
- data/plugins/project_search/lib/project_search/lucene_refresh.rb +22 -0
- data/plugins/project_search/lib/project_search/project.rb +14 -0
- data/plugins/project_search/lib/project_search/query.rb +29 -0
- data/plugins/project_search/lib/project_search/stylesheets/style.css +279 -0
- data/plugins/project_search/lib/project_search/views/_file.html.erb +58 -0
- data/plugins/project_search/lib/project_search/views/index.html.erb +156 -0
- data/plugins/project_search/lib/project_search/word_search.rb +143 -0
- data/plugins/project_search/lib/project_search/word_search_controller.rb +219 -0
- data/plugins/project_search/plugin.rb +8 -0
- data/plugins/project_search/spec/fixtures/project/binary_file.bin +0 -0
- data/plugins/project_search/spec/fixtures/project/foo.txt +43 -0
- data/plugins/project_search/spec/fixtures/project/qux.rb +3 -0
- data/plugins/project_search/spec/project_search/binary_data_detector_spec.rb +24 -0
- data/plugins/project_search/spec/project_search/word_search_spec.rb +157 -0
- data/plugins/project_search/spec/spec_helper.rb +27 -0
- data/plugins/redcar/features/alter_font_size.feature +26 -0
- data/plugins/redcar/features/goto_line_command.feature +20 -0
- data/plugins/redcar/features/step_definitions/env.rb +5 -0
- data/plugins/redcar/features/step_definitions/font_steps.rb +34 -0
- data/plugins/redcar/features/text_editing.feature +34 -0
- data/plugins/redcar/features/text_navigation.feature +30 -0
- data/plugins/redcar/plugin.rb +17 -0
- data/plugins/redcar/redcar.rb +1097 -0
- data/plugins/redcar_debug/lib/redcar_debug.rb +91 -0
- data/plugins/redcar_debug/plugin.rb +8 -0
- data/plugins/redcar_debug/views/history.html.erb +34 -0
- data/plugins/redcar_debug/views/index.html.erb +36 -0
- data/plugins/repl/features/command_editing.feature +55 -0
- data/plugins/repl/features/command_history.feature +75 -0
- data/plugins/repl/features/step_definitions/repl_steps.rb +19 -0
- data/plugins/repl/features/support/env.rb +24 -0
- data/plugins/repl/features/support/fake_repl.rb +16 -0
- data/plugins/repl/lib/repl.rb +40 -0
- data/plugins/repl/lib/repl/repl_command.rb +20 -0
- data/plugins/repl/lib/repl/repl_mirror.rb +255 -0
- data/plugins/repl/lib/repl/repl_tab.rb +154 -0
- data/plugins/repl/plugin.rb +8 -0
- data/plugins/repl/spec/repl/repl_mirror_spec.rb +72 -0
- data/plugins/repl/spec/spec_helper.rb +5 -0
- data/plugins/repl_swt/lib/repl_swt.rb +7 -0
- data/plugins/repl_swt/lib/repl_swt/key_listener.rb +43 -0
- data/plugins/repl_swt/plugin.rb +8 -0
- data/plugins/ruby/features/fixtures/test.rb +0 -0
- data/plugins/ruby/features/support/env.rb +4 -0
- data/plugins/ruby/features/syntax_check_ruby.feature +26 -0
- data/plugins/ruby/lib/ruby.rb +35 -0
- data/plugins/ruby/lib/ruby/repl_mirror.rb +46 -0
- data/plugins/ruby/lib/ruby/syntax_checker.rb +30 -0
- data/plugins/ruby/plugin.rb +8 -0
- data/plugins/ruby/spec/ruby/repl_mirror_spec.rb +202 -0
- data/plugins/ruby/spec/spec_helper.rb +5 -0
- data/plugins/runnables/features/command_tree.feature +63 -0
- data/plugins/runnables/features/file_runner_input.feature +21 -0
- data/plugins/runnables/features/parameter_input.feature +43 -0
- data/plugins/runnables/features/run_alternate_command.feature +15 -0
- data/plugins/runnables/features/run_command_tab.feature +47 -0
- data/plugins/runnables/features/step_definitions/runnable_steps.rb +28 -0
- data/plugins/runnables/features/support/env.rb +124 -0
- data/plugins/runnables/lib/runnables.rb +180 -0
- data/plugins/runnables/lib/runnables/command_output_controller.rb +183 -0
- data/plugins/runnables/lib/runnables/commands.rb +82 -0
- data/plugins/runnables/lib/runnables/output_processor.rb +74 -0
- data/plugins/runnables/lib/runnables/running_process_checker.rb +34 -0
- data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable.rb +62 -0
- data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_group.rb +45 -0
- data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_type_group.rb +30 -0
- data/plugins/runnables/lib/runnables/tree_mirror/tree_controller.rb +36 -0
- data/plugins/runnables/lib/runnables/tree_mirror/tree_mirror.rb +66 -0
- data/plugins/runnables/plugin.rb +9 -0
- data/plugins/runnables/spec/runnables/output_processor_spec.rb +57 -0
- data/plugins/runnables/spec/spec_helper.rb +5 -0
- data/plugins/runnables/views/basic_ansi.css +34 -0
- data/plugins/runnables/views/color_tester.html +50 -0
- data/plugins/runnables/views/command_output.html.erb +32 -0
- data/plugins/runnables/views/default.css +79 -0
- data/plugins/runnables/views/indicator.gif +0 -0
- data/plugins/runnables/views/redcar_small_icon.png +0 -0
- data/plugins/runnables/views/reset.css +53 -0
- data/plugins/runnables/views/running_test.html +41 -0
- data/plugins/runnables/views/wedgeDown.png +0 -0
- data/plugins/runnables/views/wedgeRight.png +0 -0
- data/plugins/scm/lib/scm.rb +296 -0
- data/plugins/scm/lib/scm/commands.rb +48 -0
- data/plugins/scm/lib/scm/commit_mirror.rb +72 -0
- data/plugins/scm/lib/scm/diff_mirror.rb +31 -0
- data/plugins/scm/lib/scm/errors.rb +8 -0
- data/plugins/scm/lib/scm/model.rb +275 -0
- data/plugins/scm/lib/scm/scm_changes_controller.rb +107 -0
- data/plugins/scm/lib/scm/scm_changes_mirror.rb +51 -0
- data/plugins/scm/lib/scm/scm_changes_mirror/change.rb +63 -0
- data/plugins/scm/lib/scm/scm_changes_mirror/changes_node.rb +47 -0
- data/plugins/scm/lib/scm/scm_changes_mirror/drag_controller.rb +78 -0
- data/plugins/scm/lib/scm/scm_commits_controller.rb +49 -0
- data/plugins/scm/lib/scm/scm_commits_mirror.rb +36 -0
- data/plugins/scm/lib/scm/scm_commits_mirror/commit.rb +26 -0
- data/plugins/scm/lib/scm/scm_commits_mirror/commits_node.rb +38 -0
- data/plugins/scm/plugin.rb +8 -0
- data/plugins/scm/spec/spec_helper.rb +5 -0
- data/plugins/scm_git/lib/scm_git.rb +543 -0
- data/plugins/scm_git/lib/scm_git/change.rb +137 -0
- data/plugins/scm_git/lib/scm_git/commit.rb +18 -0
- data/plugins/scm_git/lib/scm_git/config_file.rb +31 -0
- data/plugins/scm_git/plugin.rb +7 -0
- data/plugins/scm_hg/lib/scm_hg.rb +30 -0
- data/plugins/scm_hg/plugin.rb +7 -0
- data/plugins/scm_svn/LICENSE +48 -0
- data/plugins/scm_svn/features/add_and_commit.feature +18 -0
- data/plugins/scm_svn/features/checkout.feature +5 -0
- data/plugins/scm_svn/features/edit_and_index.feature +12 -0
- data/plugins/scm_svn/features/ignore_files.feature +14 -0
- data/plugins/scm_svn/features/merge.feature +34 -0
- data/plugins/scm_svn/features/resolve_conflict.feature +23 -0
- data/plugins/scm_svn/features/revert_and_delete.feature +21 -0
- data/plugins/scm_svn/features/step_definitions/branch_and_merge_steps.rb +27 -0
- data/plugins/scm_svn/features/step_definitions/checkout_steps.rb +25 -0
- data/plugins/scm_svn/features/step_definitions/edit_and_index_steps.rb +50 -0
- data/plugins/scm_svn/features/step_definitions/scm_svn_steps.rb +57 -0
- data/plugins/scm_svn/features/support/env.rb +71 -0
- data/plugins/scm_svn/features/switch_branches.feature +53 -0
- data/plugins/scm_svn/features/update.feature +16 -0
- data/plugins/scm_svn/lib/scm_svn.rb +445 -0
- data/plugins/scm_svn/lib/scm_svn/change.rb +116 -0
- data/plugins/scm_svn/plugin.rb +7 -0
- data/plugins/snippets/features/snippet_indenting.feature +87 -0
- data/plugins/snippets/features/snippets.feature +398 -0
- data/plugins/snippets/features/step_definitions/snippet_steps.rb +16 -0
- data/plugins/snippets/features/support/env.rb +1 -0
- data/plugins/snippets/lib/snippets.rb +111 -0
- data/plugins/snippets/lib/snippets/document_controller.rb +591 -0
- data/plugins/snippets/lib/snippets/explorer.rb +48 -0
- data/plugins/snippets/lib/snippets/tab_handler.rb +117 -0
- data/plugins/snippets/plugin.rb +9 -0
- data/plugins/splash_screen/plugin.rb +8 -0
- data/plugins/splash_screen/splash_screen.rb +62 -0
- data/plugins/strip_trailing_spaces/features/fixtures/test.txt +3 -0
- data/plugins/strip_trailing_spaces/features/strip_trailing_spaces.feature +34 -0
- data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +60 -0
- data/plugins/strip_trailing_spaces/plugin.rb +8 -0
- data/plugins/syntax_check/README +6 -0
- data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +11 -0
- data/plugins/syntax_check/features/support/env.rb +3 -0
- data/plugins/syntax_check/lib/syntax_check.rb +100 -0
- data/plugins/syntax_check/lib/syntax_check/annotation.rb +61 -0
- data/plugins/syntax_check/lib/syntax_check/checker.rb +47 -0
- data/plugins/syntax_check/lib/syntax_check/error.rb +24 -0
- data/plugins/syntax_check/plugin.rb +7 -0
- data/plugins/task_manager/lib/task_manager.rb +30 -0
- data/plugins/task_manager/plugin.rb +11 -0
- data/plugins/task_manager/views/index.html.erb +70 -0
- data/plugins/test_runner/lib/test_runner.rb +40 -0
- data/plugins/test_runner/lib/test_runner/jasmine_test_runner.rb +15 -0
- data/plugins/test_runner/lib/test_runner/rspec_runner.rb +20 -0
- data/plugins/test_runner/lib/test_runner/run_test_command.rb +63 -0
- data/plugins/test_runner/lib/test_runner/runnable_test_runner.rb +42 -0
- data/plugins/test_runner/plugin.rb +8 -0
- data/plugins/test_runner/spec/run_test_command_spec.rb +51 -0
- data/plugins/test_runner/spec/spec_helper.rb +5 -0
- data/plugins/textmate/features/bundle_tree.feature +23 -0
- data/plugins/textmate/features/step_definitions/tree_steps.rb +57 -0
- data/plugins/textmate/features/support/env.rb +19 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If.tmSnippet +18 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If__Else.tmSnippet +20 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Include.tmSnippet +16 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Loop.tmSnippet +18 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Unless.tmSnippet +18 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Var.tmSnippet +16 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/next_If__Else.tmSnippet +20 -0
- data/plugins/textmate/features/support/test_bundle.tmbundle/info.plist +26 -0
- data/plugins/textmate/lib/textmate.rb +202 -0
- data/plugins/textmate/lib/textmate/bundle.rb +100 -0
- data/plugins/textmate/lib/textmate/commands.rb +79 -0
- data/plugins/textmate/lib/textmate/environment.rb +76 -0
- data/plugins/textmate/lib/textmate/plist.rb +80 -0
- data/plugins/textmate/lib/textmate/preference.rb +125 -0
- data/plugins/textmate/lib/textmate/snippet.rb +47 -0
- data/plugins/textmate/lib/textmate/tree_mirror.rb +206 -0
- data/plugins/textmate/plugin.rb +8 -0
- data/plugins/textmate/views/installed_bundles.html.erb +24 -0
- data/plugins/todo_list/README.md +22 -0
- data/plugins/todo_list/features/support/env.rb +8 -0
- data/plugins/todo_list/features/todo_list.feature +26 -0
- data/plugins/todo_list/lib/todo_list.rb +49 -0
- data/plugins/todo_list/lib/todo_list/file_parser.rb +58 -0
- data/plugins/todo_list/lib/todo_list/todo_controller.rb +99 -0
- data/plugins/todo_list/plugin.rb +11 -0
- data/plugins/todo_list/spec/fixtures/project/FIXME.file +3 -0
- data/plugins/todo_list/spec/fixtures/project/NOTE.ignored.file +1 -0
- data/plugins/todo_list/spec/fixtures/project/OPTIMIZE_colon.file +1 -0
- data/plugins/todo_list/spec/fixtures/project/XXX.ignored +1 -0
- data/plugins/todo_list/spec/fixtures/project/ignored_directory/TODO.file +2 -0
- data/plugins/todo_list/spec/fixtures/settings.rb +11 -0
- data/plugins/todo_list/spec/spec_helper.rb +6 -0
- data/plugins/todo_list/spec/todo_list/file_parser_spec.rb +35 -0
- data/plugins/todo_list/views/default.css +15 -0
- data/plugins/todo_list/views/index.html.erb +19 -0
- data/plugins/todo_list/views/redcar_small_icon.png +0 -0
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +496 -0
- data/plugins/tree_view_swt/plugin.rb +9 -0
- data/plugins/web_bookmarks/Screenshot.png +0 -0
- data/plugins/web_bookmarks/features/bookmark.feature +37 -0
- data/plugins/web_bookmarks/features/fixtures/other.html +1 -0
- data/plugins/web_bookmarks/features/fixtures/sample.html +1 -0
- data/plugins/web_bookmarks/features/step_definitions/web_steps.rb +4 -0
- data/plugins/web_bookmarks/features/support/env.rb +26 -0
- data/plugins/web_bookmarks/lib/web_bookmarks.rb +49 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +52 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +65 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +74 -0
- data/plugins/web_bookmarks/plugin.rb +10 -0
- metadata +937 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
require File.expand_path("../graphics_utils", __FILE__)
|
|
2
|
+
|
|
3
|
+
module Swt
|
|
4
|
+
module Widgets
|
|
5
|
+
class VTabLabel
|
|
6
|
+
attr_reader :active, :title, :show_close
|
|
7
|
+
attr_accessor :font
|
|
8
|
+
|
|
9
|
+
include Swt::Events::MouseListener
|
|
10
|
+
include Swt::Events::MouseTrackListener
|
|
11
|
+
|
|
12
|
+
ICON_PADDING = 3
|
|
13
|
+
|
|
14
|
+
def close_icon
|
|
15
|
+
@@close_icon ||= Redcar::ApplicationSWT::Icon.swt_image(:close)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def initialize(tab, parent, style)
|
|
19
|
+
@label = Swt::Widgets::Label.new(parent, style)
|
|
20
|
+
@active = false
|
|
21
|
+
@tab = tab
|
|
22
|
+
@parent = parent
|
|
23
|
+
@title = ""
|
|
24
|
+
@icon = nil
|
|
25
|
+
@show_close = false
|
|
26
|
+
|
|
27
|
+
@label.image = label_image
|
|
28
|
+
@label.add_paint_listener { |event| event.gc.draw_image(label_image, 0, 0) }
|
|
29
|
+
@label.add_mouse_listener(self)
|
|
30
|
+
self.show_close = true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def label_image
|
|
34
|
+
display = Swt::Widgets::Display.current
|
|
35
|
+
unless @img
|
|
36
|
+
@img = GraphicsUtils.create_rotated_text(@title, @font, @parent.foreground, @parent.background, Swt::SWT::UP) do |gc, extent|
|
|
37
|
+
fg, bg = gc.foreground, gc.background
|
|
38
|
+
if @active
|
|
39
|
+
options = @tab.selection_color_options
|
|
40
|
+
options[:percents].each_with_index do |p, idx|
|
|
41
|
+
gc.foreground = options[:colors][idx]
|
|
42
|
+
gc.background = options[:colors][idx + 1]
|
|
43
|
+
if options[:vertical]
|
|
44
|
+
h = idx > 0 ? extent.height * options[:percents][idx - 1] : 0
|
|
45
|
+
gc.fill_gradient_rectangle(0, h, extent.width, extent.height * p, true)
|
|
46
|
+
else
|
|
47
|
+
w = idx > 0 ? extent.width * options[:percents][idx - 1] : 0
|
|
48
|
+
gc.fill_gradient_rectangle(w, 0, extent.width * p, extent.height, false)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
else
|
|
52
|
+
gc.fill_rectangle(0, 0, extent.width, extent.height)
|
|
53
|
+
end
|
|
54
|
+
gc.foreground = display.get_system_color(Swt::SWT::COLOR_WIDGET_NORMAL_SHADOW)
|
|
55
|
+
gc.draw_rectangle(0, 0, extent.width - 1, extent.height - 1)
|
|
56
|
+
gc.foreground, gc.background = fg, bg
|
|
57
|
+
end
|
|
58
|
+
overlay_icon(@icon, @img)
|
|
59
|
+
end
|
|
60
|
+
@img
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def overlay_icon(icon, image)
|
|
64
|
+
return unless icon
|
|
65
|
+
gc = GraphicsUtils::GC.new(image)
|
|
66
|
+
gc.draw_image(@icon, ICON_PADDING, ICON_PADDING)
|
|
67
|
+
gc.dispose
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def dirty!
|
|
71
|
+
@img = nil
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def activate
|
|
75
|
+
@tab.activate
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def active= boolean
|
|
79
|
+
@active = boolean
|
|
80
|
+
redraw
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def title= (str)
|
|
84
|
+
@title = str
|
|
85
|
+
redraw
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def redraw
|
|
89
|
+
dirty!
|
|
90
|
+
@label.image = label_image
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def dispose
|
|
94
|
+
@label.dispose
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def show_close= boolean
|
|
98
|
+
return if @show_close == boolean
|
|
99
|
+
@show_close = boolean
|
|
100
|
+
@show_close ? @label.add_mouse_track_listener(self) : @label.remove_mouse_track_listener(self)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def mouseUp(e)
|
|
104
|
+
if show_close and close_icon.bounds.contains(e.x - ICON_PADDING, e.y - ICON_PADDING)
|
|
105
|
+
@tab.parent.remove_item(@tab)
|
|
106
|
+
else
|
|
107
|
+
activate if e.button == 1
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def mouseEnter(e)
|
|
112
|
+
@icon = close_icon
|
|
113
|
+
redraw
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def mouseExit(e)
|
|
117
|
+
@icon = nil
|
|
118
|
+
redraw
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Unused
|
|
122
|
+
def mouseDown(e); end
|
|
123
|
+
def mouseDoubleClick(e); end
|
|
124
|
+
def mouseHover(e); end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
|
2
|
+
|
|
3
|
+
describe Redcar::ApplicationSWT::Gradient do
|
|
4
|
+
|
|
5
|
+
color_position_hash = {100 => "#000000", 0 => "#FFFFFF", 50 => "#999999"}
|
|
6
|
+
subject { Redcar::ApplicationSWT::Gradient.new(color_position_hash) }
|
|
7
|
+
|
|
8
|
+
it "should output its contents as a hash" do
|
|
9
|
+
subject.to_hash.should == color_position_hash
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "swt_stops" do
|
|
13
|
+
|
|
14
|
+
it "not include the implied zero stop" do
|
|
15
|
+
subject.swt_stops.should_not include(0)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should include nonzero stops from the input" do
|
|
19
|
+
subject.swt_stops.to_a.should == [50, 100]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should be in increasing order" do
|
|
23
|
+
subject.swt_stops.sort.should == subject.swt_stops.to_a
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "swt_colors" do
|
|
29
|
+
|
|
30
|
+
it "should be Swt::Color versions of the gradient colors in increasing order by stop position" do
|
|
31
|
+
subject.swt_colors[0].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 255, 255)
|
|
32
|
+
subject.swt_colors[1].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 153, 153, 153)
|
|
33
|
+
subject.swt_colors[2].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 0, 0, 0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "when constructed with an implied 0-position stop" do
|
|
39
|
+
|
|
40
|
+
subject { Redcar::ApplicationSWT::Gradient.new( 50 => "#000000", 100 => "#FFFFFF" ) }
|
|
41
|
+
|
|
42
|
+
describe "swt_stops" do
|
|
43
|
+
|
|
44
|
+
it "should have the first color position as its first element" do
|
|
45
|
+
subject.swt_stops.first.should == 50
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "swt_colors" do
|
|
51
|
+
|
|
52
|
+
it "should have the gradient's first color as its first two elements" do
|
|
53
|
+
first_color = Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 0, 0, 0)
|
|
54
|
+
subject.swt_colors[0].should == first_color
|
|
55
|
+
subject.swt_colors[1].should == first_color
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "when constructed with an implied 100-position stop" do
|
|
63
|
+
|
|
64
|
+
subject { Redcar::ApplicationSWT::Gradient.new( 0 => "#000000", 50 => "#FFFFFF" ) }
|
|
65
|
+
|
|
66
|
+
describe "swt_stops" do
|
|
67
|
+
|
|
68
|
+
it "should include a stop at position 100" do
|
|
69
|
+
subject.swt_stops.should include(100)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "swt_colors" do
|
|
75
|
+
|
|
76
|
+
it "should have the gradient's last color as its last two elements" do
|
|
77
|
+
last_color = Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 255, 255)
|
|
78
|
+
subject.swt_colors[1].should == last_color
|
|
79
|
+
subject.swt_colors[2].should == last_color
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "when constructed with stop position below 0" do
|
|
87
|
+
|
|
88
|
+
it "should raise an ArgumentError" do
|
|
89
|
+
expect{ Redcar::ApplicationSWT::Gradient.new( -999 => "#FFFFFF") }.should raise_error(ArgumentError)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context "when constructed with stop position above 100" do
|
|
95
|
+
|
|
96
|
+
it "should raise an ArgumentError" do
|
|
97
|
+
expect{ Redcar::ApplicationSWT::Gradient.new( 999 => "#FFFFFF") }.should raise_error(ArgumentError)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
context "when constructed with three-character hex strings for colors" do
|
|
103
|
+
|
|
104
|
+
subject { Redcar::ApplicationSWT::Gradient.new( 50 => "#F0F" ) }
|
|
105
|
+
|
|
106
|
+
it "should process the colors correctly" do
|
|
107
|
+
subject.swt_colors[0].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 0, 255)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context "when constructed with a single color instead of a gradient" do
|
|
113
|
+
|
|
114
|
+
subject { Redcar::ApplicationSWT::Gradient.new( "#FFFFFF" ) }
|
|
115
|
+
|
|
116
|
+
it "it should construct a gradient with that color" do
|
|
117
|
+
subject.swt_colors[0].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 255, 255)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
context "when constructed with a color name" do
|
|
123
|
+
|
|
124
|
+
subject { Redcar::ApplicationSWT::Gradient.new( "black" ) }
|
|
125
|
+
|
|
126
|
+
it "should return the SWT system color corresponding to that name" do
|
|
127
|
+
Redcar::ApplicationSWT.instance_variable_set("@display", Swt::Widgets::Display.current) if Redcar::ApplicationSWT.display.nil?
|
|
128
|
+
subject.swt_colors[0].should == Redcar::ApplicationSWT.display.get_system_color(Swt::SWT::COLOR_BLACK)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
|
|
2
|
+
|
|
3
|
+
BindingTranslator = Redcar::ApplicationSWT::Menu::BindingTranslator
|
|
4
|
+
describe BindingTranslator do
|
|
5
|
+
def check(key, value)
|
|
6
|
+
BindingTranslator.key(key).should == value
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "single modifiers" do
|
|
10
|
+
it "translates Shift+letter" do
|
|
11
|
+
check("Shift+N", Swt::SWT::SHIFT + 'N'[0])
|
|
12
|
+
check("Shift+K", Swt::SWT::SHIFT + 'K'[0])
|
|
13
|
+
check("Shift+P", Swt::SWT::SHIFT + 'P'[0])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "translates Ctrl+letter" do
|
|
17
|
+
check("Ctrl+T", Swt::SWT::CTRL + 'T'[0])
|
|
18
|
+
check("Ctrl+2", Swt::SWT::CTRL + '2'[0])
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "translates Alt+letter" do
|
|
22
|
+
check("Alt+B", Swt::SWT::ALT + 'B'[0])
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "translates Cmd+letter" do
|
|
26
|
+
check("Cmd+X", Swt::SWT::COMMAND + 'X'[0])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "translates F keys" do
|
|
30
|
+
check("F3", Swt::SWT::F3)
|
|
31
|
+
check("F4", Swt::SWT::F4)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "translates arrow keys" do
|
|
35
|
+
check("Right", Swt::SWT::ARROW_RIGHT)
|
|
36
|
+
check("Left", Swt::SWT::ARROW_LEFT)
|
|
37
|
+
check("Up", Swt::SWT::ARROW_UP)
|
|
38
|
+
check("Down", Swt::SWT::ARROW_DOWN)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "translates tab" do
|
|
42
|
+
check("Tab", Swt::SWT::TAB)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "translates home" do
|
|
46
|
+
check("Home", Swt::SWT::HOME)
|
|
47
|
+
check("Alt+Home", Swt::SWT::ALT + Swt::SWT::HOME)
|
|
48
|
+
check("Shift+Home", Swt::SWT::SHIFT + Swt::SWT::HOME)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "translates end" do
|
|
52
|
+
check("End", Swt::SWT::END)
|
|
53
|
+
check("Ctrl+End", Swt::SWT::CTRL + Swt::SWT::END)
|
|
54
|
+
check("Cmd+End", Swt::SWT::COMMAND + Swt::SWT::END)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "multiple modifiers" do
|
|
59
|
+
it "translates Mod+Mod+letter" do
|
|
60
|
+
check("Ctrl+Alt+W", Swt::SWT::CTRL + Swt::SWT::ALT + 'W'[0])
|
|
61
|
+
check("Cmd+Alt+W", Swt::SWT::COMMAND + Swt::SWT::ALT + 'W'[0])
|
|
62
|
+
check("Cmd+Shift+W", Swt::SWT::COMMAND + Swt::SWT::SHIFT + 'W'[0])
|
|
63
|
+
check("Alt+Shift+W", Swt::SWT::ALT + Swt::SWT::SHIFT + 'W'[0])
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "translates Mod+Mod+Mod+letter" do
|
|
67
|
+
check("Shift+Ctrl+Alt+W", Swt::SWT::SHIFT + Swt::SWT::CTRL + Swt::SWT::ALT + 'W'[0])
|
|
68
|
+
check("Shift+Cmd+Alt+W", Swt::SWT::SHIFT + Swt::SWT::COMMAND + Swt::SWT::ALT + 'W'[0])
|
|
69
|
+
check("Alt+Cmd+Shift+W", Swt::SWT::ALT + Swt::SWT::COMMAND + Swt::SWT::SHIFT + 'W'[0])
|
|
70
|
+
check("Cmd+Alt+Shift+W", Swt::SWT::COMMAND + Swt::SWT::ALT + Swt::SWT::SHIFT + 'W'[0])
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
$:.push File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
|
|
2
|
+
|
|
3
|
+
require 'redcar'
|
|
4
|
+
Redcar.environment = :test
|
|
5
|
+
Redcar.load_unthreaded
|
|
6
|
+
|
|
7
|
+
Spec::Runner.configure do |config|
|
|
8
|
+
config.before(:suite) do
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
config.before(:each) do
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
config.after(:each) do
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
config.after(:suite) do
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
|
|
2
|
+
package com.redcareditor.application_swt;
|
|
3
|
+
|
|
4
|
+
import java.lang.reflect.InvocationTargetException;
|
|
5
|
+
import java.lang.reflect.Method;
|
|
6
|
+
|
|
7
|
+
import org.eclipse.swt.SWT;
|
|
8
|
+
import org.eclipse.swt.internal.C;
|
|
9
|
+
import org.eclipse.swt.internal.Callback;
|
|
10
|
+
import org.eclipse.swt.widgets.Display;
|
|
11
|
+
import org.eclipse.swt.widgets.Listener;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Provide a hook to connecting the Preferences, About and Quit menu items of the Mac OS X
|
|
15
|
+
* Application menu when using the SWT Cocoa bindings.
|
|
16
|
+
* <p>
|
|
17
|
+
* This code does not require the Cocoa SWT JAR in order to be compiled as it uses reflection to
|
|
18
|
+
* access the Cocoa specific API methods. It does, however, depend on JFace (for IAction), but you
|
|
19
|
+
* could easily modify the code to use SWT Listeners instead in order to use this class in SWT only
|
|
20
|
+
* applications.
|
|
21
|
+
* </p>
|
|
22
|
+
* <p>
|
|
23
|
+
* This code was influenced by the <a
|
|
24
|
+
* href="http://www.simidude.com/blog/2008/macify-a-swt-application-in-a-cross-platform-way/"
|
|
25
|
+
* >CarbonUIEnhancer from Agynami</a> with the implementation being modified from the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUIEnhancer.java"
|
|
26
|
+
* >org.eclipse.ui.internal.cocoa.CocoaUIEnhancer</a>.
|
|
27
|
+
* </p>
|
|
28
|
+
* <p>
|
|
29
|
+
* This class works with both the 32-bit and 64-bit versions of the SWT Cocoa bindings.
|
|
30
|
+
* <p>
|
|
31
|
+
* <p>
|
|
32
|
+
* This class is released under the Eclipse Public License (<a href="http://www.eclipse.org/legal/epl-v10.html">EPL</a>).
|
|
33
|
+
*/
|
|
34
|
+
public class CocoaUIEnhancer {
|
|
35
|
+
|
|
36
|
+
private static final long kAboutMenuItem = 0;
|
|
37
|
+
private static final long kPreferencesMenuItem = 2;
|
|
38
|
+
// private static final long kServicesMenuItem = 4;
|
|
39
|
+
// private static final long kHideApplicationMenuItem = 6;
|
|
40
|
+
private static final long kQuitMenuItem = 10;
|
|
41
|
+
|
|
42
|
+
static long sel_toolbarButtonClicked_;
|
|
43
|
+
static long sel_preferencesMenuItemSelected_;
|
|
44
|
+
static long sel_aboutMenuItemSelected_;
|
|
45
|
+
static Callback proc3Args;
|
|
46
|
+
|
|
47
|
+
final private String appName;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Class invoked via the Callback object to run the about and preferences actions.
|
|
51
|
+
* <p>
|
|
52
|
+
* If you don't use JFace in your application (SWT only), change the
|
|
53
|
+
* {@link org.eclipse.jface.action.IAction}s to {@link org.eclipse.swt.widgets.Listener}s.
|
|
54
|
+
* </p>
|
|
55
|
+
*/
|
|
56
|
+
private static class MenuHookObject {
|
|
57
|
+
final Listener about;
|
|
58
|
+
final Listener pref;
|
|
59
|
+
|
|
60
|
+
public MenuHookObject( Listener about, Listener pref ) {
|
|
61
|
+
this.about = about;
|
|
62
|
+
this.pref = pref;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Will be called on 32bit SWT.
|
|
67
|
+
*/
|
|
68
|
+
@SuppressWarnings( "unused" )
|
|
69
|
+
public int actionProc( int id, int sel, int arg0 ) {
|
|
70
|
+
return (int) actionProc( (long) id, (long) sel, (long) arg0 );
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Will be called on 64bit SWT.
|
|
75
|
+
*/
|
|
76
|
+
public long actionProc( long id, long sel, long arg0 ) {
|
|
77
|
+
if ( sel == sel_aboutMenuItemSelected_ ) {
|
|
78
|
+
about.handleEvent(null);
|
|
79
|
+
} else if ( sel == sel_preferencesMenuItemSelected_ ) {
|
|
80
|
+
pref.handleEvent(null);
|
|
81
|
+
} else {
|
|
82
|
+
// Unknown selection!
|
|
83
|
+
}
|
|
84
|
+
// Return value is not used.
|
|
85
|
+
return 99;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Construct a new CocoaUIEnhancer.
|
|
91
|
+
*
|
|
92
|
+
* @param appName
|
|
93
|
+
* The name of the application. It will be used to customize the About and Quit menu
|
|
94
|
+
* items. If you do not wish to customize the About and Quit menu items, just pass
|
|
95
|
+
* <tt>null</tt> here.
|
|
96
|
+
*/
|
|
97
|
+
public CocoaUIEnhancer( String appName ) {
|
|
98
|
+
this.appName = appName;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Hook the given Listener to the Mac OS X application Quit menu and the IActions to the About
|
|
103
|
+
* and Preferences menus.
|
|
104
|
+
*
|
|
105
|
+
* @param display
|
|
106
|
+
* The Display to use.
|
|
107
|
+
* @param quitListener
|
|
108
|
+
* The listener to invoke when the Quit menu is invoked.
|
|
109
|
+
* @param aboutListener
|
|
110
|
+
* The listener to invoke when the About menu is invoked.
|
|
111
|
+
* @param preferencesListener
|
|
112
|
+
* The listener to invoke when the Preferences menu is invoked.
|
|
113
|
+
*/
|
|
114
|
+
public void hookApplicationMenu( Display display, Listener quitListener, Listener aboutListener,
|
|
115
|
+
Listener preferencesListener ) {
|
|
116
|
+
// This is our callbackObject whose 'actionProc' method will be called when the About or
|
|
117
|
+
// Preferences menuItem is invoked.
|
|
118
|
+
MenuHookObject target = new MenuHookObject( aboutListener, preferencesListener );
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
// Initialize the menuItems.
|
|
122
|
+
initialize( target );
|
|
123
|
+
} catch ( Exception e ) {
|
|
124
|
+
throw new IllegalStateException( e );
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Connect the quit/exit menu.
|
|
128
|
+
if ( !display.isDisposed() ) {
|
|
129
|
+
display.addListener( SWT.Close, quitListener );
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Schedule disposal of callback object
|
|
133
|
+
display.disposeExec( new Runnable() {
|
|
134
|
+
public void run() {
|
|
135
|
+
invoke( proc3Args, "dispose" );
|
|
136
|
+
}
|
|
137
|
+
} );
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private void initialize( Object callbackObject )
|
|
141
|
+
throws Exception {
|
|
142
|
+
|
|
143
|
+
Class<?> osCls = classForName( "org.eclipse.swt.internal.cocoa.OS" );
|
|
144
|
+
|
|
145
|
+
// Register names in objective-c.
|
|
146
|
+
if ( sel_toolbarButtonClicked_ == 0 ) {
|
|
147
|
+
// sel_toolbarButtonClicked_ = registerName( osCls, "toolbarButtonClicked:" ); //$NON-NLS-1$
|
|
148
|
+
sel_preferencesMenuItemSelected_ = registerName( osCls, "preferencesMenuItemSelected:" ); //$NON-NLS-1$
|
|
149
|
+
sel_aboutMenuItemSelected_ = registerName( osCls, "aboutMenuItemSelected:" ); //$NON-NLS-1$
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Create an SWT Callback object that will invoke the actionProc method of our internal
|
|
153
|
+
// callbackObject.
|
|
154
|
+
proc3Args = new Callback( callbackObject, "actionProc", 3 ); //$NON-NLS-1$
|
|
155
|
+
Method getAddress = Callback.class.getMethod( "getAddress", new Class[0] );
|
|
156
|
+
Object object = getAddress.invoke( proc3Args, (Object[]) null );
|
|
157
|
+
long proc3 = convertToLong( object );
|
|
158
|
+
if ( proc3 == 0 ) {
|
|
159
|
+
SWT.error( SWT.ERROR_NO_MORE_CALLBACKS );
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
Class<?> nsmenuCls = classForName( "org.eclipse.swt.internal.cocoa.NSMenu" );
|
|
163
|
+
Class<?> nsmenuitemCls = classForName( "org.eclipse.swt.internal.cocoa.NSMenuItem" );
|
|
164
|
+
Class<?> nsstringCls = classForName( "org.eclipse.swt.internal.cocoa.NSString" );
|
|
165
|
+
Class<?> nsapplicationCls = classForName( "org.eclipse.swt.internal.cocoa.NSApplication" );
|
|
166
|
+
|
|
167
|
+
// Instead of creating a new delegate class in objective-c,
|
|
168
|
+
// just use the current SWTApplicationDelegate. An instance of this
|
|
169
|
+
// is a field of the Cocoa Display object and is already the target
|
|
170
|
+
// for the menuItems. So just get this class and add the new methods
|
|
171
|
+
// to it.
|
|
172
|
+
object = invoke( osCls, "objc_lookUpClass", new Object[] { "SWTApplicationDelegate" } );
|
|
173
|
+
long cls = convertToLong( object );
|
|
174
|
+
|
|
175
|
+
// Add the action callbacks for Preferences and About menu items.
|
|
176
|
+
invoke( osCls, "class_addMethod", new Object[] {
|
|
177
|
+
wrapPointer( cls ),
|
|
178
|
+
wrapPointer( sel_preferencesMenuItemSelected_ ),
|
|
179
|
+
wrapPointer( proc3 ),
|
|
180
|
+
"@:@" } ); //$NON-NLS-1$
|
|
181
|
+
invoke( osCls, "class_addMethod", new Object[] {
|
|
182
|
+
wrapPointer( cls ),
|
|
183
|
+
wrapPointer( sel_aboutMenuItemSelected_ ),
|
|
184
|
+
wrapPointer( proc3 ),
|
|
185
|
+
"@:@" } ); //$NON-NLS-1$
|
|
186
|
+
|
|
187
|
+
// Get the Mac OS X Application menu.
|
|
188
|
+
Object sharedApplication = invoke( nsapplicationCls, "sharedApplication" );
|
|
189
|
+
Object mainMenu = invoke( sharedApplication, "mainMenu" );
|
|
190
|
+
Object mainMenuItem = invoke( nsmenuCls, mainMenu, "itemAtIndex", new Object[] { wrapPointer( 0 ) } );
|
|
191
|
+
Object appMenu = invoke( mainMenuItem, "submenu" );
|
|
192
|
+
|
|
193
|
+
// Create the About <application-name> menu command
|
|
194
|
+
Object aboutMenuItem =
|
|
195
|
+
invoke( nsmenuCls, appMenu, "itemAtIndex", new Object[] { wrapPointer( kAboutMenuItem ) } );
|
|
196
|
+
if ( appName != null ) {
|
|
197
|
+
Object nsStr = invoke( nsstringCls, "stringWith", new Object[] { "About " + appName } );
|
|
198
|
+
invoke( nsmenuitemCls, aboutMenuItem, "setTitle", new Object[] { nsStr } );
|
|
199
|
+
}
|
|
200
|
+
// Rename the quit action.
|
|
201
|
+
if ( appName != null ) {
|
|
202
|
+
Object quitMenuItem =
|
|
203
|
+
invoke( nsmenuCls, appMenu, "itemAtIndex", new Object[] { wrapPointer( kQuitMenuItem ) } );
|
|
204
|
+
Object nsStr = invoke( nsstringCls, "stringWith", new Object[] { "Quit " + appName } );
|
|
205
|
+
invoke( nsmenuitemCls, quitMenuItem, "setTitle", new Object[] { nsStr } );
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Enable the Preferences menuItem.
|
|
209
|
+
Object prefMenuItem =
|
|
210
|
+
invoke( nsmenuCls, appMenu, "itemAtIndex", new Object[] { wrapPointer( kPreferencesMenuItem ) } );
|
|
211
|
+
invoke( nsmenuitemCls, prefMenuItem, "setEnabled", new Object[] { true } );
|
|
212
|
+
|
|
213
|
+
// Set the action to execute when the About or Preferences menuItem is invoked.
|
|
214
|
+
//
|
|
215
|
+
// We don't need to set the target here as the current target is the SWTApplicationDelegate
|
|
216
|
+
// and we have registerd the new selectors on it. So just set the new action to invoke the
|
|
217
|
+
// selector.
|
|
218
|
+
invoke( nsmenuitemCls, prefMenuItem, "setAction",
|
|
219
|
+
new Object[] { wrapPointer( sel_preferencesMenuItemSelected_ ) } );
|
|
220
|
+
invoke( nsmenuitemCls, aboutMenuItem, "setAction",
|
|
221
|
+
new Object[] { wrapPointer( sel_aboutMenuItemSelected_ ) } );
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private long registerName( Class<?> osCls, String name )
|
|
225
|
+
throws IllegalArgumentException, SecurityException, IllegalAccessException,
|
|
226
|
+
InvocationTargetException, NoSuchMethodException {
|
|
227
|
+
Object object = invoke( osCls, "sel_registerName", new Object[] { name } );
|
|
228
|
+
return convertToLong( object );
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
private long convertToLong( Object object ) {
|
|
232
|
+
if ( object instanceof Integer ) {
|
|
233
|
+
Integer i = (Integer) object;
|
|
234
|
+
return i.longValue();
|
|
235
|
+
}
|
|
236
|
+
if ( object instanceof Long ) {
|
|
237
|
+
Long l = (Long) object;
|
|
238
|
+
return l.longValue();
|
|
239
|
+
}
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private static Object wrapPointer( long value ) {
|
|
244
|
+
Class<?> PTR_CLASS = C.PTR_SIZEOF == 8 ? long.class : int.class;
|
|
245
|
+
if ( PTR_CLASS == long.class ) {
|
|
246
|
+
return new Long( value );
|
|
247
|
+
} else {
|
|
248
|
+
return new Integer( (int) value );
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
private static Object invoke( Class<?> clazz, String methodName, Object[] args ) {
|
|
253
|
+
return invoke( clazz, null, methodName, args );
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private static Object invoke( Class<?> clazz, Object target, String methodName, Object[] args ) {
|
|
257
|
+
try {
|
|
258
|
+
Class<?>[] signature = new Class<?>[args.length];
|
|
259
|
+
for ( int i = 0; i < args.length; i++ ) {
|
|
260
|
+
Class<?> thisClass = args[i].getClass();
|
|
261
|
+
if ( thisClass == Integer.class )
|
|
262
|
+
signature[i] = int.class;
|
|
263
|
+
else if ( thisClass == Long.class )
|
|
264
|
+
signature[i] = long.class;
|
|
265
|
+
else if ( thisClass == Byte.class )
|
|
266
|
+
signature[i] = byte.class;
|
|
267
|
+
else if ( thisClass == Boolean.class )
|
|
268
|
+
signature[i] = boolean.class;
|
|
269
|
+
else
|
|
270
|
+
signature[i] = thisClass;
|
|
271
|
+
}
|
|
272
|
+
Method method = clazz.getMethod( methodName, signature );
|
|
273
|
+
return method.invoke( target, args );
|
|
274
|
+
} catch ( Exception e ) {
|
|
275
|
+
throw new IllegalStateException( e );
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
private Class<?> classForName( String classname ) {
|
|
280
|
+
try {
|
|
281
|
+
Class<?> cls = Class.forName( classname );
|
|
282
|
+
return cls;
|
|
283
|
+
} catch ( ClassNotFoundException e ) {
|
|
284
|
+
throw new IllegalStateException( e );
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private Object invoke( Class<?> cls, String methodName ) {
|
|
289
|
+
return invoke( cls, methodName, (Class<?>[]) null, (Object[]) null );
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
private Object invoke( Class<?> cls, String methodName, Class<?>[] paramTypes, Object... arguments ) {
|
|
293
|
+
try {
|
|
294
|
+
Method m = cls.getDeclaredMethod( methodName, paramTypes );
|
|
295
|
+
return m.invoke( null, arguments );
|
|
296
|
+
} catch ( Exception e ) {
|
|
297
|
+
throw new IllegalStateException( e );
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
private Object invoke( Object obj, String methodName ) {
|
|
302
|
+
return invoke( obj, methodName, (Class<?>[]) null, (Object[]) null );
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
private Object invoke( Object obj, String methodName, Class<?>[] paramTypes, Object... arguments ) {
|
|
306
|
+
try {
|
|
307
|
+
Method m = obj.getClass().getDeclaredMethod( methodName, paramTypes );
|
|
308
|
+
return m.invoke( obj, arguments );
|
|
309
|
+
} catch ( Exception e ) {
|
|
310
|
+
throw new IllegalStateException( e );
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|