ruber 0.0.5 → 0.0.7
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 +25 -0
- data/bin/ruber +0 -0
- data/data/share/apps/ruber/ruberui.rc +15 -1
- data/data/share/icons/{ruber.png → ruber-old.pgn} +0 -0
- data/lib/ruber/application/application.rb +216 -73
- data/lib/ruber/application/plugin.yaml +2 -2
- data/lib/ruber/document_project.rb +25 -5
- data/lib/ruber/documents/document_list.rb +11 -15
- data/lib/ruber/editor/document.rb +106 -50
- data/lib/ruber/editor/editor_view.rb +4 -2
- data/lib/ruber/external_program_plugin.rb +8 -0
- data/lib/ruber/kde_config_option_backend.rb +12 -4
- data/lib/ruber/kde_sugar.rb +35 -1
- data/lib/ruber/main_window/choose_plugins_dlg.rb +10 -10
- data/lib/ruber/main_window/hint_solver.rb +263 -0
- data/lib/ruber/main_window/main_window.rb +462 -206
- data/lib/ruber/main_window/main_window_actions.rb +228 -62
- data/lib/ruber/main_window/main_window_internal.rb +169 -115
- data/lib/ruber/main_window/plugin.yaml +13 -3
- data/lib/ruber/main_window/save_modified_files_dlg.rb +1 -1
- data/lib/ruber/main_window/ui/choose_plugins_widget.rb +1 -1
- data/lib/ruber/main_window/ui/main_window_settings_widget.rb +1 -1
- data/lib/ruber/main_window/ui/new_project_widget.rb +1 -1
- data/lib/ruber/main_window/ui/open_file_in_project_dlg.rb +1 -1
- data/lib/ruber/main_window/ui/output_color_widget.rb +1 -1
- data/lib/ruber/main_window/ui/workspace_settings_widget.rb +51 -0
- data/lib/ruber/main_window/ui/workspace_settings_widget.ui +28 -0
- data/lib/ruber/main_window/view_manager.rb +418 -0
- data/lib/ruber/main_window/workspace.png +0 -0
- data/lib/ruber/output_widget.rb +43 -37
- data/lib/ruber/pane.rb +621 -0
- data/lib/ruber/plugin_specification_reader.rb +8 -1
- data/lib/ruber/projects/project_files_list.rb +6 -0
- data/lib/ruber/projects/ui/project_files_rule_chooser_widget.rb +1 -1
- data/lib/ruber/projects/ui/project_files_widget.rb +1 -1
- data/lib/ruber/qt_sugar.rb +94 -4
- data/lib/ruber/utils.rb +16 -7
- data/lib/ruber/version.rb +2 -2
- data/plugins/autosave/autosave.rb +62 -1
- data/plugins/autosave/plugin.yaml +1 -0
- data/plugins/autosave/ui/autosave_config_widget.rb +37 -14
- data/plugins/autosave/ui/autosave_config_widget.ui +62 -12
- data/plugins/find_in_files/find_in_files_widgets.rb +1 -3
- data/plugins/find_in_files/ui/config_widget.rb +1 -1
- data/plugins/find_in_files/ui/find_in_files_widget.rb +1 -1
- data/plugins/rake/plugin.yaml +1 -1
- data/plugins/rake/ui/add_quick_task_widget.rb +1 -1
- data/plugins/rake/ui/choose_task_widget.rb +1 -1
- data/plugins/rake/ui/config_widget.rb +1 -1
- data/plugins/rake/ui/project_widget.rb +1 -1
- data/plugins/rspec/rspec.rb +14 -22
- data/plugins/rspec/ruber_rspec_formatter.rb +4 -1
- data/plugins/rspec/ui/rspec_project_widget.rb +1 -1
- data/plugins/ruby_development/plugin.yaml +7 -2
- data/plugins/ruby_development/ruby_development.rb +134 -13
- data/plugins/ruby_development/ui/config_widget.rb +66 -0
- data/plugins/ruby_development/ui/config_widget.ui +58 -0
- data/plugins/ruby_development/ui/project_widget.rb +1 -1
- data/plugins/ruby_runner/plugin.yaml +2 -2
- data/plugins/ruby_runner/ruby_runner.rb +15 -3
- data/plugins/ruby_runner/ui/config_widget.rb +1 -1
- data/plugins/ruby_runner/ui/project_widget.rb +1 -1
- data/plugins/ruby_runner/ui/ruby_runnner_plugin_option_widget.rb +1 -1
- data/plugins/state/plugin.yaml +6 -2
- data/plugins/state/state.rb +305 -81
- data/plugins/state/ui/config_widget.rb +1 -1
- data/spec/common.rb +11 -3
- data/spec/document_list_spec.rb +8 -8
- data/spec/document_project_spec.rb +98 -25
- data/spec/document_spec.rb +178 -152
- data/spec/editor_view_spec.rb +26 -5
- data/spec/framework.rb +5 -0
- data/spec/hint_solver_spec.rb +450 -0
- data/spec/kde_sugar_spec.rb +73 -6
- data/spec/output_widget_spec.rb +172 -156
- data/spec/pane_spec.rb +1165 -0
- data/spec/plugin_specification_reader_spec.rb +37 -1
- data/spec/project_files_list_spec.rb +30 -20
- data/spec/qt_sugar_spec.rb +269 -0
- data/spec/state_spec.rb +566 -353
- data/spec/utils_spec.rb +1 -1
- data/spec/view_manager_spec.rb +71 -0
- metadata +16 -4
data/CHANGES
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
h1. Changes
|
|
2
2
|
|
|
3
|
+
h2. Ruber 0.0.7
|
|
4
|
+
|
|
5
|
+
* Ability to split views in tabs
|
|
6
|
+
* Ability to have more than one view for each document
|
|
7
|
+
* Made the terminal program used to run ruby programs configurable
|
|
8
|
+
* Added (optional) close buttons on tabs
|
|
9
|
+
|
|
10
|
+
h2. Ruber 0.0.6
|
|
11
|
+
|
|
12
|
+
h3. Features
|
|
13
|
+
|
|
14
|
+
* Allow Ruber to work with remote files
|
|
15
|
+
|
|
16
|
+
h3. Bug fixes
|
|
17
|
+
|
|
18
|
+
* Fixed a bug causing a crash from the Choose Plugins dialog in case of an error
|
|
19
|
+
* Fixed a bug causing Ruber to look for plugins in the directory installation of
|
|
20
|
+
a previous version if the plugin directories settings had been changed (even if
|
|
21
|
+
the default directory hadn't been changed)
|
|
22
|
+
* Made the rake plugin depend on the autosave plugin
|
|
23
|
+
|
|
24
|
+
h2. Ruber 0.0.5
|
|
25
|
+
|
|
26
|
+
* Fixed a bug causing an error when opening files
|
|
27
|
+
|
|
3
28
|
h2. Ruber 0.0.4
|
|
4
29
|
|
|
5
30
|
* Fixed a bug causing Ruber to fail starting up if the @$KDEHOME/share/apps/ruber/plugins@
|
data/bin/ruber
CHANGED
|
File without changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!DOCTYPE kpartgui SYSTEM 'kpartgui.dtd'>
|
|
2
|
-
<kpartgui version="
|
|
2
|
+
<kpartgui version="13" name="ruber" >
|
|
3
3
|
<MenuBar>
|
|
4
4
|
<Menu name="file" >
|
|
5
5
|
<text>&File</text>
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<DefineGroup name="export_merge" />
|
|
19
19
|
<Separator/>
|
|
20
20
|
<Action name="file_close" />
|
|
21
|
+
<Action name="file-close_tab"/>
|
|
21
22
|
<Action name="file-close_all" />
|
|
22
23
|
<Action name="file-close_other" />
|
|
23
24
|
<Separator/>
|
|
@@ -76,6 +77,19 @@
|
|
|
76
77
|
<DefineGroup name="tools_operations" />
|
|
77
78
|
<Action name="scripts" />
|
|
78
79
|
</Menu>
|
|
80
|
+
<Menu name="window">
|
|
81
|
+
<text>&Window</text>
|
|
82
|
+
<Action name="window-split_horizontally"/>
|
|
83
|
+
<Action name="window-split_vertically"/>
|
|
84
|
+
<Separator/>
|
|
85
|
+
<Action name="window-switch_to_new_document"/>
|
|
86
|
+
<Action name="window-switch_to_file"/>
|
|
87
|
+
<Menu name="window-switch_to_open_document">
|
|
88
|
+
<text>&Switch to Document</text>
|
|
89
|
+
<ActionList name="window-switch_to_open_document_list"/>
|
|
90
|
+
</Menu>
|
|
91
|
+
<Action name="window-switch_to_recent_file"/>
|
|
92
|
+
</Menu>
|
|
79
93
|
<Menu name="settings" >
|
|
80
94
|
<text>&Settings</text>
|
|
81
95
|
<Action name="options_configure" />
|
|
File without changes
|
|
@@ -27,35 +27,40 @@ require 'facets/kernel/__dir__'
|
|
|
27
27
|
require 'fileutils'
|
|
28
28
|
|
|
29
29
|
require 'ruber/plugin_like'
|
|
30
|
+
require 'ruber/project'
|
|
30
31
|
require 'ruber/exception_widgets'
|
|
31
32
|
|
|
32
33
|
module Ruber
|
|
33
34
|
|
|
34
35
|
=begin rdoc
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
The component providing a feature
|
|
37
|
+
|
|
38
|
+
@param [Symbol] feature the feature the component should provide
|
|
39
|
+
@return [PluginLike,nil] the component providing the given feature or *nil* if
|
|
40
|
+
no components provide it
|
|
41
|
+
@raise [NoMethodError] if called before the application is created
|
|
39
42
|
=end
|
|
40
43
|
def self.[](feature)
|
|
41
44
|
# This instance variable is initialized by the application's constructor
|
|
42
45
|
@components[feature]
|
|
43
46
|
end
|
|
44
47
|
|
|
45
|
-
|
|
46
48
|
class Application < KDE::Application
|
|
47
49
|
|
|
48
50
|
=begin rdoc
|
|
49
|
-
The default
|
|
50
|
-
|
|
51
|
+
The default paths where to look for plugins.
|
|
52
|
+
|
|
53
|
+
It includes @$KDEHOME/share/apps/ruber/plugins@ and the @plugins@ subdirectory
|
|
54
|
+
of the ruber installation directory
|
|
51
55
|
=end
|
|
52
56
|
DEFAULT_PLUGIN_PATHS = [
|
|
53
57
|
File.join(KDE::Global.dirs.find_dirs( 'data', '')[0], File.join('ruber','plugins')),
|
|
54
|
-
|
|
58
|
+
RUBER_PLUGIN_DIR
|
|
55
59
|
]
|
|
56
60
|
=begin rdoc
|
|
57
|
-
The default plugins to load
|
|
58
|
-
|
|
61
|
+
The default plugins to load
|
|
62
|
+
|
|
63
|
+
Currently, they are: ruby_development, find_in_files, syntax_checker, command and state
|
|
59
64
|
=end
|
|
60
65
|
DEFAULT_PLUGINS = %w[ruby_development find_in_files rake command syntax_checker state]
|
|
61
66
|
|
|
@@ -63,28 +68,47 @@ command and state
|
|
|
63
68
|
|
|
64
69
|
slots 'load_settings()', :setup
|
|
65
70
|
|
|
66
|
-
|
|
71
|
+
=begin rdoc
|
|
72
|
+
@return [Hash] the command line options passed to ruber (after they've been processed)
|
|
73
|
+
=end
|
|
67
74
|
attr_reader :cmd_line_options
|
|
68
75
|
|
|
69
76
|
=begin rdoc
|
|
70
|
-
|
|
77
|
+
<<<<<<< HEAD
|
|
78
|
+
=======
|
|
79
|
+
The state Ruber is in
|
|
80
|
+
|
|
81
|
+
Ruber can be in three states:
|
|
82
|
+
|
|
83
|
+
- *starting*:= from the time it's launched to when {#setup} returns
|
|
84
|
+
- *running*:= from after {#setup} has returend to when the user chooses to quit
|
|
85
|
+
it (either with the @File/Quit@ menu entry or clicking on the button on the title
|
|
86
|
+
bar)
|
|
87
|
+
- *quitting*:= from when the user chooses to quit Ruber onwards
|
|
88
|
+
|
|
89
|
+
>>>>>>> master
|
|
90
|
+
@return [Symbol] the status of the application. It can be: @:starting@, @:running@
|
|
91
|
+
or @:quitting@
|
|
71
92
|
=end
|
|
72
93
|
attr_reader :status
|
|
73
94
|
|
|
74
95
|
=begin rdoc
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
Creates a new instance of {Application}
|
|
97
|
+
|
|
98
|
+
It loads the core components and sets up a single shot timer which calls {#setup}
|
|
99
|
+
and is fired as soon as the event loop starts.
|
|
100
|
+
|
|
101
|
+
@param [ComponentManager] manager the component manager
|
|
102
|
+
@param [PluginSpecification] psf the plugin specification object describing the
|
|
103
|
+
application component
|
|
80
104
|
=end
|
|
81
|
-
def initialize manager,
|
|
105
|
+
def initialize manager, psf
|
|
82
106
|
super()
|
|
83
107
|
@components = manager
|
|
84
108
|
@components.parent = self
|
|
85
109
|
Ruber.instance_variable_set :@components, @components
|
|
86
|
-
initialize_plugin
|
|
87
|
-
KDE::Global.dirs.addPrefix File.expand_path(File.join( RUBER_DATA_DIR, '..', '
|
|
110
|
+
initialize_plugin psf
|
|
111
|
+
KDE::Global.dirs.addPrefix File.expand_path(File.join( RUBER_DATA_DIR, '..', 'data'))
|
|
88
112
|
icon_path = KDE::Global.dirs.find_resource('icon', 'ruber')
|
|
89
113
|
self.window_icon = Qt::Icon.new icon_path
|
|
90
114
|
KDE::Global.main_component.about_data.program_icon_name = icon_path
|
|
@@ -95,52 +119,109 @@ The status of the application. It can be: +:starting+, +:running+ or +:quitting+
|
|
|
95
119
|
Qt::Timer.single_shot(0, self, SLOT(:setup))
|
|
96
120
|
end
|
|
97
121
|
|
|
122
|
+
=begin rdoc
|
|
123
|
+
@return [Array<String>] a list of the directories where Ruber looks for plugins
|
|
124
|
+
=end
|
|
125
|
+
def plugin_directories
|
|
126
|
+
@plugin_dirs.dup
|
|
127
|
+
end
|
|
128
|
+
alias :plugin_dirs :plugin_directories
|
|
129
|
+
|
|
130
|
+
=begin rdoc
|
|
131
|
+
Sets the list of directories where Ruber looks for plugins
|
|
132
|
+
|
|
133
|
+
This also changes the setting in the global configuration object, but it *doesn't*
|
|
134
|
+
write the change to file. It's up to whoever called this method to do so.
|
|
135
|
+
|
|
136
|
+
@param [Array<String> dirs] the directories Ruber should search for plugins
|
|
137
|
+
=end
|
|
138
|
+
def plugin_directories= dirs
|
|
139
|
+
@plugin_directories = dirs
|
|
140
|
+
Ruber[:config][:general, :plugin_dirs] = @plugin_directories
|
|
141
|
+
end
|
|
142
|
+
alias :plugin_dirs= :plugin_directories=
|
|
143
|
+
|
|
144
|
+
=begin rdoc
|
|
145
|
+
Quits ruber
|
|
146
|
+
|
|
147
|
+
Sets the application status to @:quitting@ and calls {ComponentManager#shutdown}
|
|
148
|
+
@return [nil]
|
|
149
|
+
=end
|
|
98
150
|
def quit_ruber
|
|
99
151
|
@status = :quitting
|
|
100
152
|
@components.shutdown
|
|
153
|
+
nil
|
|
101
154
|
end
|
|
102
155
|
|
|
103
156
|
=begin rdoc
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
157
|
+
Whether the application is starting or has already started
|
|
158
|
+
|
|
159
|
+
You should seldom need this method. It's mostly useful for plugins which need to
|
|
160
|
+
erform different actions depending on whether they're loaded at application
|
|
161
|
+
startup (in which case it'll return *true*) or later (when it'll return *false*)
|
|
162
|
+
|
|
163
|
+
@return [Boolean] *true* if the application status is @starting@ and *false*
|
|
164
|
+
otherwise
|
|
165
|
+
@see #status
|
|
113
166
|
=end
|
|
114
167
|
def starting?
|
|
115
168
|
@status == :starting
|
|
116
169
|
end
|
|
117
170
|
|
|
171
|
+
=begin rdoc
|
|
172
|
+
Whether the application is running or not
|
|
173
|
+
|
|
174
|
+
@return [Boolean] *true* if the application status is @running@ and *false*
|
|
175
|
+
otherwise
|
|
176
|
+
@see #status
|
|
177
|
+
=end
|
|
118
178
|
def running?
|
|
119
179
|
@status == :running
|
|
120
180
|
end
|
|
121
|
-
|
|
181
|
+
|
|
182
|
+
=begin rdoc
|
|
183
|
+
Whether the application is quitting or not
|
|
184
|
+
|
|
185
|
+
@return [Boolean] *true* if the application status is @quitting@ and *false*
|
|
186
|
+
otherwise
|
|
187
|
+
@see #status
|
|
188
|
+
=end
|
|
122
189
|
def quitting?
|
|
123
190
|
@status == :quitting
|
|
124
191
|
end
|
|
125
192
|
|
|
126
193
|
=begin rdoc
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
194
|
+
Loads plugins handling the exceptions they may raise in the meanwhile
|
|
195
|
+
|
|
196
|
+
It is a wrapper around {ComponentManager#load_plugins}.
|
|
197
|
+
|
|
198
|
+
If it's given a block, it simply calls {ComponentManager#load_plugins} passing
|
|
199
|
+
it the block.
|
|
200
|
+
|
|
201
|
+
If no block is given, the behaviour in case of an exception depends on the _silent_
|
|
202
|
+
argument:
|
|
203
|
+
* if *true*, then the error will be silently ignored and the component manager will
|
|
204
|
+
go on loading the remaining plugins. Errors caused by those will be ignored as
|
|
205
|
+
well
|
|
206
|
+
* if *false*, the user will be shown a {ComponentLoadingErrorDialog}. According
|
|
207
|
+
to what the user chooses in the dialog, the component manager will behave in
|
|
208
|
+
a different way, as described in {ComponentManager#load_plugins}
|
|
209
|
+
|
|
210
|
+
*Note:* this method doesn't attempt to handle exceptions raised while computing
|
|
143
211
|
or sorting dependencies.
|
|
212
|
+
@param [Array<Symbol>] plugins the names of the plugins to load. It doesn't need
|
|
213
|
+
to include dependencies, as they're computed automatically
|
|
214
|
+
@param [Boolean] silent whether errors while loading plugins should be silently
|
|
215
|
+
ignored or not
|
|
216
|
+
@param [Array<String>,nil] dirs the directories where to look for plugins. If *nil*,
|
|
217
|
+
then the value returned by {#plugin_directories} will be used
|
|
218
|
+
@yield [pso, ex] block called when loading a plugin raises an exception
|
|
219
|
+
@yieldparam [PluginSpecification] pso the plugin specification object associated
|
|
220
|
+
with the plugin which raised the exception
|
|
221
|
+
@yieldparam [Exception] ex the exception raised while loading the plugin
|
|
222
|
+
@return [Boolen] *true* if the plugins were loaded successfully and *false* otherwise
|
|
223
|
+
@see ComponentManager#load_plugins
|
|
224
|
+
@see ComponentLoadingErrorDialog
|
|
144
225
|
=end
|
|
145
226
|
def safe_load_plugins plugins, silent = false, dirs = nil, &blk
|
|
146
227
|
if blk.nil? and silent then blk = proc{|_pl, _e| :silent}
|
|
@@ -148,30 +229,53 @@ or sorting dependencies.
|
|
|
148
229
|
blk = Proc.new{|pl, e| ComponentLoadingErrorDialog.new(pl.name, e, nil).exec}
|
|
149
230
|
end
|
|
150
231
|
@components.load_plugins plugins, dirs || @plugin_dirs, &blk
|
|
232
|
+
|
|
151
233
|
end
|
|
152
234
|
|
|
153
235
|
private
|
|
154
236
|
|
|
155
237
|
=begin rdoc
|
|
156
|
-
|
|
157
|
-
|
|
238
|
+
Override of {PluginLike#load_settings}
|
|
239
|
+
|
|
240
|
+
It reads the list of plugin directories from the configuration object, replacing
|
|
241
|
+
all mentions of the installation paths for a different version of Ruber with the
|
|
242
|
+
installation path for the current version, and adds to the load path all missing
|
|
243
|
+
directories
|
|
244
|
+
@return [nil]
|
|
158
245
|
=end
|
|
159
246
|
def load_settings
|
|
160
247
|
@plugin_dirs = Ruber[:config][:general].plugin_dirs
|
|
248
|
+
ruber_base_dir = File.dirname(RUBER_DIR)
|
|
249
|
+
@plugin_dirs.map! do |d|
|
|
250
|
+
if d =~ /#{File.join Regexp.quote(ruber_base_dir), 'ruber-\d+\.\d+\.\d+'}/
|
|
251
|
+
RUBER_PLUGIN_DIR
|
|
252
|
+
else d
|
|
253
|
+
end
|
|
254
|
+
end
|
|
161
255
|
new_dirs = @plugin_dirs - $:
|
|
162
256
|
new_dirs.each{|d| $:.unshift d}
|
|
257
|
+
nil
|
|
163
258
|
end
|
|
164
259
|
|
|
165
260
|
=begin rdoc
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
261
|
+
Prepares the application for running
|
|
262
|
+
|
|
263
|
+
It loads the plugins chosen by the user according to the configuration file. If
|
|
264
|
+
an error occurs while finding plugin dependencies (either because of a missing
|
|
265
|
+
dependency or a circular dependency), the user is shown a dialog asking what to
|
|
266
|
+
do (quit ruber or load no plugin). If an exception is raised while loading a plugin,
|
|
267
|
+
it's handled according to the behaviour specified in {#safe_load_plugins} with no
|
|
268
|
+
block given.
|
|
269
|
+
|
|
270
|
+
It also takes care of the command line options, opening the files and projects
|
|
271
|
+
specified in it.
|
|
272
|
+
|
|
273
|
+
At the end, the main window is shown
|
|
274
|
+
@return [nil]
|
|
169
275
|
=end
|
|
170
276
|
def setup
|
|
171
277
|
# Create $KDEHOME/share/apps/ruber/plugins if it's missing
|
|
172
|
-
|
|
173
|
-
rescue Errno::EEXIST
|
|
174
|
-
end
|
|
278
|
+
FileUtils.mkdir_p DEFAULT_PLUGIN_PATHS[0]
|
|
175
279
|
chosen_plugins = Ruber[:config][:general, :plugins].map(&:to_sym)
|
|
176
280
|
needed_plugins = []
|
|
177
281
|
deps_problem_msg = Proc.new do |e|
|
|
@@ -217,17 +321,28 @@ Do you want to start the application without them or to quit Ruber?
|
|
|
217
321
|
end
|
|
218
322
|
@status = :running
|
|
219
323
|
Ruber[:main_window].show
|
|
324
|
+
nil
|
|
220
325
|
end
|
|
221
326
|
|
|
222
327
|
|
|
223
328
|
=begin rdoc
|
|
224
|
-
|
|
225
|
-
* the configuration manager
|
|
226
|
-
* the document keeper
|
|
227
|
-
* the main window
|
|
329
|
+
Loads the core components
|
|
228
330
|
|
|
229
|
-
|
|
230
|
-
|
|
331
|
+
In loading order, the core components are:
|
|
332
|
+
* the configuration manager
|
|
333
|
+
* the document list
|
|
334
|
+
* the project list
|
|
335
|
+
* the main window
|
|
336
|
+
|
|
337
|
+
In case loading one of the core components raises an exception, the user is
|
|
338
|
+
warned with a dialog and ruber is closed.
|
|
339
|
+
|
|
340
|
+
After creating the configuration manager, {#register_with_config} is called.
|
|
341
|
+
|
|
342
|
+
If a previous session is being restored, {MainWindow#restore} is called, otherwise
|
|
343
|
+
an empty document is created (unless the user specified some files or project
|
|
344
|
+
on the command line)
|
|
345
|
+
@return [nil]
|
|
231
346
|
=end
|
|
232
347
|
def load_core_components
|
|
233
348
|
begin
|
|
@@ -247,40 +362,68 @@ Do you want to start the application without them or to quit Ruber?
|
|
|
247
362
|
else
|
|
248
363
|
open_command_line_files
|
|
249
364
|
if Ruber[:projects].projects.empty? and Ruber[:documents].documents.empty?
|
|
250
|
-
|
|
365
|
+
doc = Ruber[:documents].new_document
|
|
366
|
+
# This is the default document. Set the default_document attribute of
|
|
367
|
+
# the ruber_default_document extension to true
|
|
368
|
+
# TODO this extension is currently provided by the main window because
|
|
369
|
+
# the application component is actually loaded after the other. This
|
|
370
|
+
# is wrong. To avoid it, don't call load_core_components from initialize
|
|
371
|
+
# but have the ruber starting code (in bin/ruber) start it manually. Then
|
|
372
|
+
# move the extension to the application
|
|
373
|
+
doc.extension(:ruber_default_document).default_document = true
|
|
374
|
+
Ruber[:main_window].display_doc doc
|
|
251
375
|
end
|
|
252
376
|
end
|
|
253
377
|
end
|
|
254
378
|
|
|
255
379
|
=begin rdoc
|
|
256
|
-
|
|
257
|
-
<tt>load_settings</tt> method and connects to the configuration manager's
|
|
258
|
-
<tt>settings_changed</tt> signal.
|
|
380
|
+
Registers the configuration options with the configuration manager
|
|
259
381
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
382
|
+
This means, calling {#load_settings} and connecting to the configuration manager's
|
|
383
|
+
{ConfigurationManager#settings_changed settings_changed}signal.
|
|
384
|
+
|
|
385
|
+
This tasks are usually performed by {PluginLike#initialize_plugin},
|
|
386
|
+
but as the config manager didn't exist when that method was called, it is
|
|
387
|
+
necessary to to them later
|
|
388
|
+
@return [nil]
|
|
263
389
|
=end
|
|
264
390
|
def register_with_config
|
|
265
391
|
config = Ruber[:config]
|
|
266
392
|
@plugin_description.config_options.each_value{|o| config.add_option o}
|
|
267
393
|
load_settings
|
|
268
394
|
connect config, SIGNAL(:settings_changed), self, SLOT(:load_settings)
|
|
395
|
+
nil
|
|
269
396
|
end
|
|
270
397
|
|
|
271
398
|
=begin rdoc
|
|
272
|
-
Opens the files and/or project listed on the command line
|
|
273
|
-
|
|
399
|
+
Opens the files and/or project listed on the command line
|
|
400
|
+
|
|
401
|
+
If neither files nor projects have been specified on the command line,
|
|
402
|
+
a single empty document is created.
|
|
403
|
+
@return [nil]
|
|
274
404
|
=end
|
|
275
405
|
def open_command_line_files
|
|
276
|
-
|
|
406
|
+
urls = @cmd_line_options.urls
|
|
277
407
|
win = Ruber[:main_window]
|
|
278
|
-
projects, files =
|
|
279
|
-
prj = win.safe_open_project projects.last unless projects.empty?
|
|
280
|
-
files += @cmd_line_options.getOptionList('file')
|
|
408
|
+
projects, files = urls.partition{|u| File.extname(u.to_local_file || '') == '.ruprj'}
|
|
409
|
+
prj = win.safe_open_project projects.last.to_local_file unless projects.empty?
|
|
410
|
+
files += @cmd_line_options.getOptionList('file').map do |f|
|
|
411
|
+
url = KDE::Url.new f
|
|
412
|
+
url.path = File.expand_path(f) if url.protocol.empty?
|
|
413
|
+
url
|
|
414
|
+
end
|
|
281
415
|
files.each do |f|
|
|
282
416
|
win.display_document f
|
|
283
417
|
end
|
|
418
|
+
nil
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
class DefaultDocumentExtension
|
|
422
|
+
include Extension
|
|
423
|
+
attr_accessor :default_document
|
|
424
|
+
def initialize doc
|
|
425
|
+
@default_document = false
|
|
426
|
+
end
|
|
284
427
|
end
|
|
285
428
|
|
|
286
429
|
end
|