redcar-dev 0.12.27dev → 0.13.0dev
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 +10 -1
- data/lib/redcar.rb +2 -2
- data/plugins/application/lib/application.rb +2 -2
- data/plugins/application/lib/application/dialog.rb +1 -1
- data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +13 -5
- data/plugins/application/lib/application/global_state.rb +21 -0
- data/plugins/application/lib/application/menu/item.rb +16 -7
- data/plugins/application/lib/application/updates.rb +20 -3
- data/plugins/application/spec/application/updates_spec.rb +53 -0
- data/plugins/application_swt/lib/application_swt.rb +1 -1
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +35 -10
- data/plugins/application_swt/lib/application_swt/menu.rb +31 -5
- data/plugins/declarations/lib/declarations.rb +31 -65
- data/plugins/declarations/lib/declarations/commands.rb +147 -0
- data/plugins/declarations/lib/declarations/file.rb +1 -1
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/javascript.js +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/nothing_to_see.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/one_lonely_class.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/similar_names.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/something_fancy.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/trailing_space.rb +0 -0
- data/plugins/edit_view/lib/edit_view.rb +35 -2
- data/plugins/edit_view/lib/edit_view/commands/change_language_command.rb +31 -0
- data/plugins/edit_view/lib/edit_view/commands/language_settings_commands.rb +45 -0
- data/plugins/edit_view/lib/edit_view/document/command.rb +1 -1
- data/plugins/project/lib/project/find_file_dialog.rb +20 -18
- data/plugins/project/lib/project/manager.rb +5 -3
- data/plugins/redcar/plugin.rb +1 -2
- data/plugins/redcar/redcar.rb +34 -42
- data/plugins/scm/lib/scm.rb +1 -1
- data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +2 -2
- data/plugins/syntax_check/lib/syntax_check.rb +2 -2
- metadata +946 -956
- data/plugins/edit_view/lib/edit_view/info_speedbar.rb +0 -98
- data/plugins/outline_view/features/outline_view.feature +0 -79
- data/plugins/outline_view/features/project_outline.feature +0 -23
- data/plugins/outline_view/features/step_definitions/outline_steps.rb +0 -61
- data/plugins/outline_view/lib/outline_view.rb +0 -97
- data/plugins/outline_view/lib/outline_view/commands.rb +0 -19
- data/plugins/outline_view/plugin.rb +0 -10
- data/plugins/outline_view_swt/lib/outline_view_swt.rb +0 -79
- data/plugins/outline_view_swt/plugin.rb +0 -7
| @@ -1,4 +1,5 @@ | |
| 1 1 |  | 
| 2 | 
            +
            require 'declarations/commands'
         | 
| 2 3 | 
             
            require 'declarations/completion_source'
         | 
| 3 4 | 
             
            require 'declarations/file'
         | 
| 4 5 | 
             
            require 'declarations/parser'
         | 
| @@ -9,8 +10,17 @@ module Redcar | |
| 9 10 | 
             
              class Declarations
         | 
| 10 11 | 
             
                def self.menus
         | 
| 11 12 | 
             
                  Menu::Builder.build do
         | 
| 13 | 
            +
                    sub_menu "Edit" do
         | 
| 14 | 
            +
                      group :priority => 30 do
         | 
| 15 | 
            +
                        item "Find declaration", :command => Declarations::OpenOutlineViewCommand
         | 
| 16 | 
            +
                      end
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                    
         | 
| 12 19 | 
             
                    sub_menu "Project" do
         | 
| 13 | 
            -
                       | 
| 20 | 
            +
                      group :priority => 60 do
         | 
| 21 | 
            +
                        item "Go to declaration", :command => Declarations::GoToTagCommand, :priority => 30
         | 
| 22 | 
            +
                        item "Find declaration", :command => Declarations::OpenProjectOutlineViewCommand, :priority => :first
         | 
| 23 | 
            +
                      end
         | 
| 14 24 | 
             
                      sub_menu "Refresh", :priority => 31 do
         | 
| 15 25 | 
             
                        item "Declarations file", :command => Declarations::RebuildTagsCommand
         | 
| 16 26 | 
             
                      end
         | 
| @@ -21,10 +31,14 @@ module Redcar | |
| 21 31 | 
             
                def self.keymaps
         | 
| 22 32 | 
             
                  linwin = Keymap.build("main", [:linux, :windows]) do
         | 
| 23 33 | 
             
                    link "Alt+G", Declarations::GoToTagCommand
         | 
| 34 | 
            +
                    link "Ctrl+I", Declarations::OpenOutlineViewCommand
         | 
| 35 | 
            +
                    link "Ctrl+Shift+I", Declarations::OpenProjectOutlineViewCommand
         | 
| 24 36 | 
             
                  end
         | 
| 25 37 |  | 
| 26 38 | 
             
                  osx = Keymap.build("main", :osx) do
         | 
| 27 39 | 
             
                    link "Ctrl+Alt+G", Declarations::GoToTagCommand
         | 
| 40 | 
            +
                    link "Cmd+I", Declarations::OpenOutlineViewCommand
         | 
| 41 | 
            +
                    link "Cmd+Ctrl+I", Declarations::OpenProjectOutlineViewCommand
         | 
| 28 42 | 
             
                  end
         | 
| 29 43 |  | 
| 30 44 | 
             
                  [linwin, osx]
         | 
| @@ -38,6 +52,20 @@ module Redcar | |
| 38 52 | 
             
                  ::File.join(project.config_dir, 'tags')
         | 
| 39 53 | 
             
                end
         | 
| 40 54 |  | 
| 55 | 
            +
                def self.icon_for_kind(kind)
         | 
| 56 | 
            +
                  h = {
         | 
| 57 | 
            +
                    :method     => :node_insert,
         | 
| 58 | 
            +
                    :class      => :open_source_flipped,
         | 
| 59 | 
            +
                    :attribute  => :status,
         | 
| 60 | 
            +
                    :alias      => :arrow_branch,
         | 
| 61 | 
            +
                    :assignment => :arrow,
         | 
| 62 | 
            +
                    :interface  => :information,
         | 
| 63 | 
            +
                    :closure    => :node_magnifier,
         | 
| 64 | 
            +
                    :none       => nil
         | 
| 65 | 
            +
                  }
         | 
| 66 | 
            +
                  h[kind.to_sym]
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
                  
         | 
| 41 69 | 
             
                class ProjectRefresh < Task
         | 
| 42 70 | 
             
                  def initialize(project)
         | 
| 43 71 | 
             
                    @file_list   = project.file_list
         | 
| @@ -78,9 +106,9 @@ module Redcar | |
| 78 106 | 
             
                  end
         | 
| 79 107 | 
             
                end
         | 
| 80 108 |  | 
| 81 | 
            -
             | 
| 109 | 
            +
                def self.match_kind(path, regex)
         | 
| 82 110 | 
             
                  Declarations::Parser.new.match_kind(path, regex)
         | 
| 83 | 
            -
             | 
| 111 | 
            +
                end
         | 
| 84 112 |  | 
| 85 113 | 
             
                def self.clear_tags_for_path(path)
         | 
| 86 114 | 
             
                  @tags_for_path ||= {}
         | 
| @@ -93,67 +121,5 @@ module Redcar | |
| 93 121 | 
             
                  regexp = Regexp.new(Regexp.escape(match[:match]))
         | 
| 94 122 | 
             
                  DocumentSearch::FindNextRegex.new(regexp, true).run_in_focussed_tab_edit_view
         | 
| 95 123 | 
             
                end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                class RebuildTagsCommand < Command
         | 
| 98 | 
            -
                  def execute
         | 
| 99 | 
            -
                    project = Project::Manager.focussed_project
         | 
| 100 | 
            -
                    tags_path = Declarations.file_path(project)
         | 
| 101 | 
            -
                    FileUtils.rm tags_path if ::File.exists? tags_path
         | 
| 102 | 
            -
                    ProjectRefresh.new(project).execute
         | 
| 103 | 
            -
                  end
         | 
| 104 | 
            -
                end
         | 
| 105 | 
            -
                
         | 
| 106 | 
            -
                class GoToTagCommand < EditTabCommand
         | 
| 107 | 
            -
                  sensitize :open_project
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                  def execute
         | 
| 110 | 
            -
                    if Project::Manager.focussed_project.remote?
         | 
| 111 | 
            -
                      Application::Dialog.message_box("Go to declaration doesn't work in remote projects yet :(")
         | 
| 112 | 
            -
                      return
         | 
| 113 | 
            -
                    end
         | 
| 114 | 
            -
             | 
| 115 | 
            -
                    if doc.selection?
         | 
| 116 | 
            -
                      handle_tag(doc.selected_text)
         | 
| 117 | 
            -
                    else
         | 
| 118 | 
            -
                      range = doc.current_word_range
         | 
| 119 | 
            -
                      handle_tag(doc.get_slice(range.first, range.last))
         | 
| 120 | 
            -
                    end
         | 
| 121 | 
            -
                  end
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                  def handle_tag(token = '')
         | 
| 124 | 
            -
                    tags_path = Declarations.file_path(Project::Manager.focussed_project)
         | 
| 125 | 
            -
                    unless ::File.exist?(tags_path)
         | 
| 126 | 
            -
                      Application::Dialog.message_box("The declarations file 'tags' has not been generated yet.")
         | 
| 127 | 
            -
                      return
         | 
| 128 | 
            -
                    end
         | 
| 129 | 
            -
                    matches = find_tag(tags_path, token).uniq
         | 
| 130 | 
            -
                    
         | 
| 131 | 
            -
                    # save current cursor position before jump to another location.
         | 
| 132 | 
            -
                    Redcar.app.navigation_history.save(doc) if matches.size > 0
         | 
| 133 | 
            -
                    
         | 
| 134 | 
            -
                    case matches.size
         | 
| 135 | 
            -
                    when 0
         | 
| 136 | 
            -
                      Application::Dialog.message_box("There is no declaration for '#{token}' in the 'tags' file.")
         | 
| 137 | 
            -
                    when 1
         | 
| 138 | 
            -
                      Redcar::Declarations.go_to_definition(matches.first)
         | 
| 139 | 
            -
                    else
         | 
| 140 | 
            -
                      open_select_tag_dialog(matches)
         | 
| 141 | 
            -
                    end
         | 
| 142 | 
            -
                    
         | 
| 143 | 
            -
                    Redcar.app.navigation_history.save(doc) if matches.size > 0
         | 
| 144 | 
            -
                  end
         | 
| 145 | 
            -
             | 
| 146 | 
            -
                  def find_tag(tags_path, tag)
         | 
| 147 | 
            -
                    Declarations.tags_for_path(tags_path)[tag] || []
         | 
| 148 | 
            -
                  end
         | 
| 149 | 
            -
             | 
| 150 | 
            -
                  def open_select_tag_dialog(matches)
         | 
| 151 | 
            -
                    Declarations::SelectTagDialog.new(matches).open
         | 
| 152 | 
            -
                  end
         | 
| 153 | 
            -
             | 
| 154 | 
            -
                  def log(message)
         | 
| 155 | 
            -
                    puts("==> Ctags: #{message}")
         | 
| 156 | 
            -
                  end
         | 
| 157 | 
            -
                end
         | 
| 158 124 | 
             
              end
         | 
| 159 125 | 
             
            end
         | 
| @@ -0,0 +1,147 @@ | |
| 1 | 
            +
            module Redcar
         | 
| 2 | 
            +
              class Declarations
         | 
| 3 | 
            +
                
         | 
| 4 | 
            +
                class RebuildTagsCommand < Command
         | 
| 5 | 
            +
                  def execute
         | 
| 6 | 
            +
                    project = Project::Manager.focussed_project
         | 
| 7 | 
            +
                    tags_path = Declarations.file_path(project)
         | 
| 8 | 
            +
                    FileUtils.rm tags_path if ::File.exists? tags_path
         | 
| 9 | 
            +
                    ProjectRefresh.new(project).execute
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                class GoToTagCommand < EditTabCommand
         | 
| 14 | 
            +
                  sensitize :open_project
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def execute
         | 
| 17 | 
            +
                    if Project::Manager.focussed_project.remote?
         | 
| 18 | 
            +
                      Application::Dialog.message_box("Go to declaration doesn't work in remote projects yet :(")
         | 
| 19 | 
            +
                      return
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    if doc.selection?
         | 
| 23 | 
            +
                      handle_tag(doc.selected_text)
         | 
| 24 | 
            +
                    else
         | 
| 25 | 
            +
                      range = doc.current_word_range
         | 
| 26 | 
            +
                      handle_tag(doc.get_slice(range.first, range.last))
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def handle_tag(token = '')
         | 
| 31 | 
            +
                    tags_path = Declarations.file_path(Project::Manager.focussed_project)
         | 
| 32 | 
            +
                    unless ::File.exist?(tags_path)
         | 
| 33 | 
            +
                      Application::Dialog.message_box("The declarations file 'tags' has not been generated yet.")
         | 
| 34 | 
            +
                      return
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                    matches = find_tag(tags_path, token).uniq
         | 
| 37 | 
            +
                    
         | 
| 38 | 
            +
                    # save current cursor position before jump to another location.
         | 
| 39 | 
            +
                    Redcar.app.navigation_history.save(doc) if matches.size > 0
         | 
| 40 | 
            +
                    
         | 
| 41 | 
            +
                    case matches.size
         | 
| 42 | 
            +
                    when 0
         | 
| 43 | 
            +
                      Application::Dialog.message_box("There is no declaration for '#{token}' in the 'tags' file.")
         | 
| 44 | 
            +
                    when 1
         | 
| 45 | 
            +
                      Redcar::Declarations.go_to_definition(matches.first)
         | 
| 46 | 
            +
                    else
         | 
| 47 | 
            +
                      open_select_tag_dialog(matches)
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                    
         | 
| 50 | 
            +
                    Redcar.app.navigation_history.save(doc) if matches.size > 0
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  def find_tag(tags_path, tag)
         | 
| 54 | 
            +
                    Declarations.tags_for_path(tags_path)[tag] || []
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  def open_select_tag_dialog(matches)
         | 
| 58 | 
            +
                    Declarations::SelectTagDialog.new(matches).open
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  def log(message)
         | 
| 62 | 
            +
                    puts("==> Ctags: #{message}")
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                class OpenOutlineViewCommand < Redcar::EditTabCommand
         | 
| 67 | 
            +
                  
         | 
| 68 | 
            +
                  def execute
         | 
| 69 | 
            +
                    cur_doc = Redcar.app.focussed_window.focussed_notebook_tab.document
         | 
| 70 | 
            +
                    if cur_doc
         | 
| 71 | 
            +
                      Declarations::OutlineViewDialog.new(cur_doc).open
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                class OpenProjectOutlineViewCommand < Redcar::ProjectCommand
         | 
| 77 | 
            +
                  def execute
         | 
| 78 | 
            +
                    Declarations::ProjectOutlineViewDialog.new(project).open if project
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
                
         | 
| 82 | 
            +
                class OutlineViewDialog < FilterListDialog
         | 
| 83 | 
            +
                  include Redcar::Model
         | 
| 84 | 
            +
                  include Redcar::Observable
         | 
| 85 | 
            +
                  
         | 
| 86 | 
            +
                  attr_accessor :document
         | 
| 87 | 
            +
                  attr_accessor :last_list
         | 
| 88 | 
            +
                  
         | 
| 89 | 
            +
                  def initialize(document)
         | 
| 90 | 
            +
                    @document = document
         | 
| 91 | 
            +
                    file = Declarations::File.new(@document.path)
         | 
| 92 | 
            +
                    file.add_tags_for_paths(@document.path)
         | 
| 93 | 
            +
                    @tags = file.tags
         | 
| 94 | 
            +
                    @all = []
         | 
| 95 | 
            +
                    @tags.each do |name, path, match|
         | 
| 96 | 
            +
                      kind = Declarations.match_kind(path, match)
         | 
| 97 | 
            +
                      @all << {:name => name, :icon => Declarations.icon_for_kind(kind), :path => path, :match => match}
         | 
| 98 | 
            +
                    end
         | 
| 99 | 
            +
                    super()
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
                  
         | 
| 102 | 
            +
                  def update_list(filter)
         | 
| 103 | 
            +
                    filter_and_rank_by(@all, filter) {|h| h[:name]}
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  def selected(item, ix)
         | 
| 107 | 
            +
                    close
         | 
| 108 | 
            +
                    Redcar.app.navigation_history.save(@document) if @document
         | 
| 109 | 
            +
                    DocumentSearch::FindNextRegex.new(Regexp.new(Regexp.quote(item[:match])), true).run_in_focussed_tab_edit_view
         | 
| 110 | 
            +
                    Redcar.app.navigation_history.save(@document) if @document
         | 
| 111 | 
            +
                  end
         | 
| 112 | 
            +
                end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                class ProjectOutlineViewDialog < FilterListDialog
         | 
| 115 | 
            +
                  def initialize(project)
         | 
| 116 | 
            +
                    @project = project
         | 
| 117 | 
            +
                    file = Declarations::File.new(Declarations.file_path(@project))
         | 
| 118 | 
            +
                    @all = []
         | 
| 119 | 
            +
                    file.tags.each do |name, path, match|
         | 
| 120 | 
            +
                      @all << {:name => name + " (" + ::File.basename(path) + ")", :base_name => name, :path => path, :match => match}
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
                    super()
         | 
| 123 | 
            +
                  end
         | 
| 124 | 
            +
                  
         | 
| 125 | 
            +
                  def update_list(filter)
         | 
| 126 | 
            +
                    results = filter_and_rank_by(@all, filter) { |h| h[:base_name] }
         | 
| 127 | 
            +
                    results.each do |result|
         | 
| 128 | 
            +
                      kind = Declarations.match_kind(result[:path], result[:match])
         | 
| 129 | 
            +
                      result[:icon] = Declarations.icon_for_kind(kind)
         | 
| 130 | 
            +
                    end
         | 
| 131 | 
            +
                    results
         | 
| 132 | 
            +
                  end
         | 
| 133 | 
            +
                  
         | 
| 134 | 
            +
                  def selected(item, ix)
         | 
| 135 | 
            +
                    if path = item[:path] and ::File.exists?(path)
         | 
| 136 | 
            +
                      close
         | 
| 137 | 
            +
                      if tab = Redcar::Project::Manager.open_file(path)
         | 
| 138 | 
            +
                        doc = Redcar::EditView.focussed_tab_edit_view.document
         | 
| 139 | 
            +
                        Redcar.app.navigation_history.save(doc)
         | 
| 140 | 
            +
                        DocumentSearch::FindNextRegex.new(Regexp.new(Regexp.quote(item[:match])), true).run_in_focussed_tab_edit_view
         | 
| 141 | 
            +
                        Redcar.app.navigation_history.save(doc)
         | 
| 142 | 
            +
                      end
         | 
| 143 | 
            +
                    end
         | 
| 144 | 
            +
                  end
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
              end
         | 
| 147 | 
            +
            end
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| @@ -15,13 +15,13 @@ require "edit_view/grammar" | |
| 15 15 | 
             
            require "edit_view/edit_tab"
         | 
| 16 16 | 
             
            require "edit_view/modified_tabs_checker"
         | 
| 17 17 | 
             
            require "edit_view/tab_settings"
         | 
| 18 | 
            -
            require "edit_view/info_speedbar"
         | 
| 19 18 | 
             
            require "edit_view/select_font_dialog"
         | 
| 20 19 | 
             
            require "edit_view/select_theme_dialog"
         | 
| 21 20 |  | 
| 22 21 | 
             
            require "edit_view/commands/text_conversion_commands"
         | 
| 23 22 | 
             
            require "edit_view/commands/align_assignment_command"
         | 
| 24 | 
            -
             | 
| 23 | 
            +
            require "edit_view/commands/change_language_command"
         | 
| 24 | 
            +
            require "edit_view/commands/language_settings_commands"
         | 
| 25 25 |  | 
| 26 26 | 
             
            module Redcar
         | 
| 27 27 | 
             
              class EditView
         | 
| @@ -97,6 +97,39 @@ module Redcar | |
| 97 97 | 
             
                def self.menus
         | 
| 98 98 | 
             
                  Menu::Builder.build do
         | 
| 99 99 | 
             
                    sub_menu "Edit" do
         | 
| 100 | 
            +
                      group(:priority => 20) do
         | 
| 101 | 
            +
                        item "Change Language", ChangeLanguageCommand
         | 
| 102 | 
            +
                        
         | 
| 103 | 
            +
                        sub_menu "Tabs" do
         | 
| 104 | 
            +
                          item "Soft Tabs", :command => EditView::ToggleSoftTabsCommand,
         | 
| 105 | 
            +
                                            :type => :check, 
         | 
| 106 | 
            +
                                            :checked => lambda { tab and tab.edit_view.soft_tabs? }
         | 
| 107 | 
            +
                                            
         | 
| 108 | 
            +
                          sub_menu "Tab Width" do
         | 
| 109 | 
            +
                            TabSettings::TAB_WIDTHS.each do |width|
         | 
| 110 | 
            +
                              command_klass = Class.new(SetTabWidthCommand)
         | 
| 111 | 
            +
                              command_klass.width = width.to_i
         | 
| 112 | 
            +
                              already_checker = lambda { tab and tab.edit_view.tab_width.to_s == width.to_s }
         | 
| 113 | 
            +
                              item width, :command => command_klass, :type => :check, :checked => already_checker
         | 
| 114 | 
            +
                            end
         | 
| 115 | 
            +
                          end
         | 
| 116 | 
            +
                        end
         | 
| 117 | 
            +
                        
         | 
| 118 | 
            +
                        sub_menu "Margin" do
         | 
| 119 | 
            +
                          item "Word Wrap", :command => EditView::ToggleWordWrapCommand,
         | 
| 120 | 
            +
                                            :type => :check, 
         | 
| 121 | 
            +
                                            :checked => lambda { tab and tab.edit_view.word_wrap? }
         | 
| 122 | 
            +
                          
         | 
| 123 | 
            +
                          item "Show Margin", :command => EditView::ToggleShowMarginCommand,
         | 
| 124 | 
            +
                                              :type => :check, 
         | 
| 125 | 
            +
                                              :checked => lambda { tab and tab.edit_view.show_margin? }
         | 
| 126 | 
            +
              
         | 
| 127 | 
            +
                          item lambda { tab ? "Margin Column: #{tab.edit_view.margin_column}" : "Margin Column" }, SetMarginColumnCommand
         | 
| 128 | 
            +
                        end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                        separator
         | 
| 131 | 
            +
                      end
         | 
| 132 | 
            +
                      
         | 
| 100 133 | 
             
                      sub_menu "Formatting" do
         | 
| 101 134 | 
             
                        item "Align Assignments", EditView::AlignAssignmentCommand
         | 
| 102 135 | 
             
                        sub_menu "Convert Text", :priority => 40 do
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            module Redcar
         | 
| 2 | 
            +
              class EditView
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                class ChangeLanguageCommand < Redcar::EditTabCommand
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  class ChangeLanguageDialog < FilterListDialog
         | 
| 7 | 
            +
                    def initialize(tab)
         | 
| 8 | 
            +
                      @tab = tab
         | 
| 9 | 
            +
                      super()
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
                    
         | 
| 12 | 
            +
                    def update_list(filter)
         | 
| 13 | 
            +
                      bundles  = JavaMateView::Bundle.bundles.to_a
         | 
| 14 | 
            +
                      grammars = bundles.map {|b| b.grammars.to_a}.flatten
         | 
| 15 | 
            +
                      names    = grammars.map {|g| g.name}.sort_by {|name| name.downcase }
         | 
| 16 | 
            +
                      filter_and_rank_by(names, filter)
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
              
         | 
| 19 | 
            +
                    def selected(name, ix)
         | 
| 20 | 
            +
                      @tab.edit_view.grammar = name
         | 
| 21 | 
            +
                      close
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def execute
         | 
| 26 | 
            +
                    ChangeLanguageDialog.new(tab).open
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            module Redcar
         | 
| 2 | 
            +
              class EditView
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                class ToggleSoftTabsCommand < Redcar::EditTabCommand
         | 
| 5 | 
            +
                  def execute
         | 
| 6 | 
            +
                    tab.edit_view.soft_tabs = !tab.edit_view.soft_tabs?
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
                  
         | 
| 10 | 
            +
                class ToggleWordWrapCommand < Redcar::EditTabCommand
         | 
| 11 | 
            +
                  def execute
         | 
| 12 | 
            +
                    tab.edit_view.word_wrap = !tab.edit_view.word_wrap?
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
                  
         | 
| 16 | 
            +
                class ToggleShowMarginCommand < Redcar::EditTabCommand
         | 
| 17 | 
            +
                  def execute
         | 
| 18 | 
            +
                    tab.edit_view.show_margin = !tab.edit_view.show_margin?
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                class SetTabWidthCommand < Redcar::EditTabCommand
         | 
| 23 | 
            +
                  class << self
         | 
| 24 | 
            +
                    attr_accessor :width
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                  
         | 
| 27 | 
            +
                  def execute
         | 
| 28 | 
            +
                    tab.edit_view.tab_width = self.class.width.to_i
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                class SetMarginColumnCommand < Redcar::EditTabCommand
         | 
| 33 | 
            +
                  def execute
         | 
| 34 | 
            +
                    response = Application::Dialog.input("Margin Column", "Enter new margin column:", tab.edit_view.margin_column) do |text|
         | 
| 35 | 
            +
                      if text !~ /^\d+$/
         | 
| 36 | 
            +
                        "must be an integer number"
         | 
| 37 | 
            +
                      end
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                    value = response[:value].to_i
         | 
| 40 | 
            +
                    tab.edit_view.margin_column = [[value, 200].min, 5].max
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
                  
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         |