ruber 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +21 -0
- data/data/share/apps/ruber/ruberui.rc +3 -1
- data/lib/ruber/application/application.rb +22 -23
- data/lib/ruber/application/plugin.yaml +7 -2
- data/lib/ruber/{projects → application}/project_files_list.rb +0 -0
- data/lib/ruber/{projects → application}/project_files_widget.rb +0 -0
- data/lib/ruber/application/ui/project_files_rule_chooser_widget.rb +74 -0
- data/lib/ruber/{projects → application}/ui/project_files_rule_chooser_widget.ui +0 -0
- data/lib/ruber/application/ui/project_files_widget.rb +117 -0
- data/lib/ruber/{projects → application}/ui/project_files_widget.ui +0 -0
- data/lib/ruber/component_manager.rb +14 -9
- data/lib/ruber/editor/document.rb +35 -5
- data/lib/ruber/kde_sugar.rb +16 -0
- data/lib/ruber/main_window/choose_plugins_dlg.rb +7 -4
- data/lib/ruber/main_window/main_window.rb +131 -193
- data/lib/ruber/main_window/main_window_actions.rb +157 -58
- data/lib/ruber/main_window/main_window_internal.rb +145 -54
- data/lib/ruber/main_window/open_file_in_project_dlg.rb +4 -4
- data/lib/ruber/main_window/plugin.yaml +3 -6
- data/lib/ruber/main_window/ui/workspace_settings_widget.rb +2 -2
- data/lib/ruber/main_window/workspace.rb +62 -32
- data/lib/ruber/output_widget.rb +20 -16
- data/lib/ruber/pane.rb +11 -5
- data/lib/ruber/project.rb +27 -12
- data/lib/ruber/projects/ui/project_files_rule_chooser_widget.rb +2 -2
- data/lib/ruber/projects/ui/project_files_widget.rb +2 -2
- data/lib/ruber/utils.rb +37 -4
- data/lib/ruber/version.rb +1 -1
- data/lib/ruber/world/document_factory.rb +121 -0
- data/lib/ruber/world/document_list.rb +396 -0
- data/lib/ruber/world/environment.rb +470 -0
- data/lib/ruber/{main_window → world}/hint_solver.rb +1 -1
- data/lib/ruber/world/plugin.yaml +11 -0
- data/lib/ruber/world/project_factory.rb +131 -0
- data/lib/ruber/world/project_list.rb +265 -0
- data/lib/ruber/world/ui/workspace_settings_widget.rb +51 -0
- data/lib/ruber/{main_window → world}/ui/workspace_settings_widget.ui +0 -0
- data/lib/ruber/world/world.rb +307 -0
- data/plugins/auto_end/auto_end.rb +135 -9
- data/plugins/autosave/autosave.rb +4 -4
- data/plugins/find_in_files/find_in_files.rb +5 -5
- data/plugins/find_in_files/find_in_files_widgets.rb +1 -1
- data/plugins/project_browser/project_browser.rb +4 -4
- data/plugins/rake/rake.rb +4 -4
- data/plugins/rake/rake_extension.rb +1 -1
- data/plugins/rspec/rspec.rb +4 -4
- data/plugins/rspec/ruber_rspec_formatter.rb +2 -2
- data/plugins/ruby_development/ruby_development.rb +3 -3
- data/plugins/ruby_runner/ruby_runner.rb +2 -2
- data/plugins/state/plugin.yaml +6 -8
- data/plugins/state/state.rb +201 -391
- data/plugins/state/ui/config_widget.rb +5 -5
- data/plugins/state/ui/config_widget.ui +3 -3
- data/plugins/syntax_checker/syntax_checker.rb +4 -0
- data/spec/annotation_model_spec.rb +1 -1
- data/spec/auto_end_spec.rb +98 -47
- data/spec/component_manager_spec.rb +80 -21
- data/spec/document_factory_spec.rb +115 -0
- data/spec/document_list_spec.rb +560 -450
- data/spec/document_spec.rb +143 -55
- data/spec/editor_view_spec.rb +2 -2
- data/spec/environment_spec.rb +1900 -0
- data/spec/hint_solver_spec.rb +5 -5
- data/spec/kde_sugar_spec.rb +16 -0
- data/spec/output_widget_spec.rb +177 -51
- data/spec/pane_spec.rb +29 -5
- data/spec/plugin_spec.rb +1 -1
- data/spec/project_factory_spec.rb +104 -0
- data/spec/project_list_spec.rb +352 -447
- data/spec/project_spec.rb +34 -33
- data/spec/qt_sugar_spec.rb +2 -2
- data/spec/state_spec.rb +508 -811
- data/spec/utils_spec.rb +149 -98
- data/spec/workspace_spec.rb +120 -9
- data/spec/world_spec.rb +1219 -0
- metadata +23 -14
- data/lib/ruber/documents/document_list.rb +0 -412
- data/lib/ruber/documents/plugin.yaml +0 -4
- data/lib/ruber/main_window/view_manager.rb +0 -431
- data/lib/ruber/projects/plugin.yaml +0 -11
- data/lib/ruber/projects/project_list.rb +0 -314
@@ -236,8 +236,8 @@ into account the enabled option and always attempt to save the documents.
|
|
236
236
|
@return [Boolean] see {#autosave}
|
237
237
|
=end
|
238
238
|
def save_project_files opts, blk
|
239
|
-
docs = Ruber[:
|
240
|
-
prj_files = Ruber[:
|
239
|
+
docs = Ruber[:world].active_environment.documents.documents_with_file
|
240
|
+
prj_files = Ruber[:world].active_project.project_files.abs
|
241
241
|
docs = docs.select{|d| prj_files.include? d.path}
|
242
242
|
save_files docs, opts, blk
|
243
243
|
end
|
@@ -253,7 +253,7 @@ into account the enabled option and always attempt to save the documents.
|
|
253
253
|
@return [Boolean] see {#autosave}
|
254
254
|
=end
|
255
255
|
def save_open_documents opts, blk
|
256
|
-
save_files Ruber[:
|
256
|
+
save_files Ruber[:world].documents, opts, blk
|
257
257
|
end
|
258
258
|
|
259
259
|
=begin rdoc
|
@@ -267,7 +267,7 @@ into account the enabled option and always attempt to save the documents.
|
|
267
267
|
@return [Boolean] see {#autosave}
|
268
268
|
=end
|
269
269
|
def save_documents_with_file opts, blk
|
270
|
-
save_files Ruber[:
|
270
|
+
save_files Ruber[:world].documents.documents_with_file, opts, blk
|
271
271
|
end
|
272
272
|
|
273
273
|
=begin rdoc
|
@@ -153,7 +153,7 @@ Replace button
|
|
153
153
|
=end
|
154
154
|
def find_replace
|
155
155
|
@dlg.clear
|
156
|
-
@dlg.allow_project = Ruber[:
|
156
|
+
@dlg.allow_project = Ruber[:world].active_project
|
157
157
|
@dlg.exec
|
158
158
|
case @dlg.action
|
159
159
|
when :find then find @dlg.find_text, options_from_dialog
|
@@ -225,7 +225,7 @@ are saved.
|
|
225
225
|
@return [Boolean] as {Autosave::AutosavePlugin#autosave AutosavePlugin#autosave}
|
226
226
|
=end
|
227
227
|
def do_autosave places
|
228
|
-
docs = Ruber[:
|
228
|
+
docs = Ruber[:world].documents.documents_with_file
|
229
229
|
if places.is_a? String then docs = docs.select{|d| d.path.start_with? places}
|
230
230
|
else docs = docs.select{|d| places.include? d.path}
|
231
231
|
end
|
@@ -279,9 +279,9 @@ the following entries:
|
|
279
279
|
opts[:whole_words] = @dlg.whole_words?
|
280
280
|
places = case @dlg.places
|
281
281
|
when :custom_dir then @dlg.directory
|
282
|
-
when :project_dir then Ruber[:
|
283
|
-
when :project_files then Ruber[:
|
284
|
-
when :open_files then Ruber[:
|
282
|
+
when :project_dir then Ruber[:world].active_project.project_directory
|
283
|
+
when :project_files then Ruber[:world].active_project.project_files.abs.to_a
|
284
|
+
when :open_files then Ruber[:world].documents.documents_with_file.map{|d| d.path}
|
285
285
|
end
|
286
286
|
opts[:places] = Array(places)
|
287
287
|
opts[:all_files] = @dlg.all_files?
|
@@ -359,7 +359,7 @@ Items corresponding to successful replacements are removed from the view.
|
|
359
359
|
def replace
|
360
360
|
failed = {}
|
361
361
|
success = []
|
362
|
-
docs = Ruber[:
|
362
|
+
docs = Ruber[:world].documents.documents_with_file.map{|d| [d.path, d]}.to_h
|
363
363
|
model.each_row.each_with_index do |r, i|
|
364
364
|
if r[0].checked?
|
365
365
|
res = replace_file r[0], docs[r[0].text]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
=begin
|
2
|
-
Copyright (C) 2010 by Stefano Crocco
|
2
|
+
Copyright (C) 2010, 2011 by Stefano Crocco
|
3
3
|
stefano.crocco@alice.it
|
4
4
|
|
5
5
|
This program is free software; you can redistribute it andor modify
|
@@ -54,7 +54,7 @@ something can be done about it
|
|
54
54
|
=end
|
55
55
|
def initialize parent = nil
|
56
56
|
super
|
57
|
-
@project =
|
57
|
+
@project = nil
|
58
58
|
@do_filtering = true
|
59
59
|
self.dynamic_sort_filter = true
|
60
60
|
end
|
@@ -155,7 +155,7 @@ project, if any
|
|
155
155
|
=end
|
156
156
|
def initialize parent = nil
|
157
157
|
super
|
158
|
-
connect Ruber[:
|
158
|
+
connect Ruber[:world], SIGNAL('active_project_changed(QObject*)'), self, SLOT('current_project_changed(QObject*)')
|
159
159
|
self.layout = Qt::VBoxLayout.new self
|
160
160
|
@view = View.new self
|
161
161
|
@model = KDE::DirModel.new @view
|
@@ -168,7 +168,7 @@ project, if any
|
|
168
168
|
@view.header_hidden = true
|
169
169
|
layout.add_widget @view
|
170
170
|
@project = nil
|
171
|
-
current_project_changed Ruber[:
|
171
|
+
current_project_changed Ruber[:world].active_project
|
172
172
|
@view.connect(SIGNAL('only_project_files_triggered(bool)')){|val| @filter.do_filtering = val}
|
173
173
|
connect @view, SIGNAL('activated(QModelIndex)'), self, SLOT('open_file_in_editor(QModelIndex)')
|
174
174
|
end
|
data/plugins/rake/rake.rb
CHANGED
@@ -142,8 +142,8 @@ Signal emitted when the rake program started with {#run_rake} has exited
|
|
142
142
|
Ruber[:main_window].change_state 'rake_running', false
|
143
143
|
end
|
144
144
|
self.connect(SIGNAL(:process_failed_to_start)){Ruber[:main_window].change_state 'rake_running', false}
|
145
|
-
connect Ruber[:
|
146
|
-
connect Ruber[:
|
145
|
+
connect Ruber[:world], SIGNAL('active_project_changed(QObject*)'), self, SLOT(:set_current_target)
|
146
|
+
connect Ruber[:world], SIGNAL('active_document_changed(QObject*)'), self, SLOT(:set_current_target)
|
147
147
|
connect self, SIGNAL('process_finished(int, QString)'), self, SIGNAL(:rake_finished)
|
148
148
|
connect self, SIGNAL('extension_added(QString, QObject*)'), self, SLOT(:set_current_target)
|
149
149
|
connect self, SIGNAL('extension_removed(QString, QObject*)'), self, SLOT(:set_current_target)
|
@@ -437,9 +437,9 @@ it isn't a rakefile
|
|
437
437
|
and there's no open project
|
438
438
|
=end
|
439
439
|
def find_current_target
|
440
|
-
target = Ruber[:
|
440
|
+
target = Ruber[:world].active_document.project rescue nil
|
441
441
|
if target.nil? or !target.has_extension? :rake
|
442
|
-
prj = Ruber[:
|
442
|
+
prj = Ruber[:world].active_project
|
443
443
|
target = if prj and prj.has_extension? :rake then prj
|
444
444
|
else nil
|
445
445
|
end
|
@@ -81,7 +81,7 @@ default task
|
|
81
81
|
def run_rake task
|
82
82
|
params = gather_parameters
|
83
83
|
files = @project.files
|
84
|
-
docs= Ruber[:
|
84
|
+
docs= Ruber[:world].documents.documents_with_file.select{|d| files.include? d.path}
|
85
85
|
return unless Ruber[:autosave].autosave Ruber[:rake], docs, :on_failure => :ask
|
86
86
|
ruby, *ruby_opts = Ruber[:rake].ruby_command_for @project, params[:dir]
|
87
87
|
params[:ruby_options] = ruby_opts
|
data/plugins/rspec/rspec.rb
CHANGED
@@ -144,7 +144,7 @@ to find out whether the file is a spec file or not.
|
|
144
144
|
@return [Boolean,nil] wheter or not _file_ is a spec file for the given project
|
145
145
|
or *nil* if no project was specified and there's no open project
|
146
146
|
=end
|
147
|
-
def spec_file? file, prj = Ruber[:
|
147
|
+
def spec_file? file, prj = Ruber[:world].active_project
|
148
148
|
return nil unless prj
|
149
149
|
dir = prj[:rspec, :spec_directory, :absolute]
|
150
150
|
return false unless file.start_with? dir
|
@@ -306,7 +306,7 @@ Runs all the specs for the project.
|
|
306
306
|
@return [nil]
|
307
307
|
=end
|
308
308
|
def run_all
|
309
|
-
prj = Ruber[:
|
309
|
+
prj = Ruber[:world].active_project
|
310
310
|
unless prj
|
311
311
|
KDE::MessageBox.error nil, "You must have an open project to choose this entry.\nYOU SHOULD NEVER SEE THIS MESSAGE"
|
312
312
|
return
|
@@ -337,7 +337,7 @@ which, most likely, will cause it to fail.
|
|
337
337
|
(including the case when the process was already running or autosaving failed)
|
338
338
|
=end
|
339
339
|
def run_current what = :all
|
340
|
-
prj = Ruber[:
|
340
|
+
prj = Ruber[:world].active_project
|
341
341
|
unless prj
|
342
342
|
KDE::MessageBox.error nil, "You must have an open project to choose this entry.\nYOU SHOULD NEVER SEE THIS MESSAGE"
|
343
343
|
return
|
@@ -451,7 +451,7 @@ It does nothing if the file corresponding to the current document isn't found
|
|
451
451
|
=end
|
452
452
|
def switch
|
453
453
|
file = Ruber[:main_window].current_document.path
|
454
|
-
prj = Ruber[:
|
454
|
+
prj = Ruber[:world].active_project
|
455
455
|
if spec_file? file, prj then switch_to = file_for_spec prj, file
|
456
456
|
else switch_to = specs_for_file(options(prj), file)[0]
|
457
457
|
end
|
@@ -301,8 +301,8 @@ example
|
|
301
301
|
hash = {}
|
302
302
|
hash[:type] = :pending
|
303
303
|
hash[:description] = ex.metadata[:full_description]
|
304
|
-
hash[:message] = ex.metadata[:execution_result][:
|
305
|
-
hash[:location] = ex
|
304
|
+
hash[:message] = ex.metadata[:execution_result][:pending_message]
|
305
|
+
hash[:location] = ex.metadata[:location]
|
306
306
|
write_data hash
|
307
307
|
end
|
308
308
|
|
@@ -156,7 +156,7 @@ started correctly or not.
|
|
156
156
|
@see #run_file
|
157
157
|
=end
|
158
158
|
def run
|
159
|
-
if Ruber[:
|
159
|
+
if Ruber[:world].active_project then run_project
|
160
160
|
elsif (doc = Ruber[:main_window].current_document) then run_document doc
|
161
161
|
else run_file
|
162
162
|
end
|
@@ -178,7 +178,7 @@ started successfully.
|
|
178
178
|
@see #run_ruby_for
|
179
179
|
=end
|
180
180
|
def run_project
|
181
|
-
prj = Ruber.
|
181
|
+
prj = Ruber[:world].active_project
|
182
182
|
data = prj[:ruby]
|
183
183
|
prog = Pathname.new(data[:main_program, :abs])
|
184
184
|
wdir = Pathname.new(data[:working_dir, :abs]||prj.project_dir)
|
@@ -259,7 +259,7 @@ was started. If the user pressed the Cancel button of the dialog, *nil* is retur
|
|
259
259
|
file = url.to_encoded.to_s
|
260
260
|
end
|
261
261
|
|
262
|
-
if doc = Ruber[:
|
262
|
+
if doc = Ruber[:world].documents.document_for_url(url)
|
263
263
|
return run_document doc
|
264
264
|
end
|
265
265
|
|
@@ -355,8 +355,8 @@ to it
|
|
355
355
|
when Document
|
356
356
|
cont << (ignore_project ? (target.own_project) : target.project)
|
357
357
|
when String
|
358
|
-
if !ignore_project and Ruber[:
|
359
|
-
cont << Ruber[:
|
358
|
+
if !ignore_project and Ruber[:world].projects.project_for_file target
|
359
|
+
cont << Ruber[:world].active_project
|
360
360
|
end
|
361
361
|
end
|
362
362
|
cont << Ruber[:config]
|
data/plugins/state/plugin.yaml
CHANGED
@@ -9,17 +9,15 @@ class: Ruber::State::Plugin
|
|
9
9
|
require: state
|
10
10
|
config_options:
|
11
11
|
state:
|
12
|
-
open_documents: {default: []}
|
13
|
-
open_projects: {default: []}
|
14
12
|
restore_cursor_position: {default: true}
|
15
|
-
|
16
|
-
startup_behaviour: {default: :
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
restore_projects: {default: true}
|
14
|
+
startup_behaviour: {default: [:default_environment, :projects]}
|
15
|
+
last_state: {default: []}
|
16
|
+
default_environment_tabs: {default: []}
|
17
|
+
default_environment_active_view: {default: nil}
|
18
|
+
default_environment_cursor_positions: {default: []}
|
20
19
|
project_options:
|
21
20
|
state:
|
22
|
-
open_documents: {default: [], type: session, scope: global}
|
23
21
|
tabs: {default: [], scope: global, type: session}
|
24
22
|
cursor_positions: {default: [], type: session, scope: global }
|
25
23
|
active_view: {default: ~, type: session, scope: global}
|
data/plugins/state/state.rb
CHANGED
@@ -51,205 +51,67 @@ user preferences) when the application starts up.
|
|
51
51
|
=end
|
52
52
|
module State
|
53
53
|
|
54
|
-
|
55
|
-
Plugin object for the State plugin
|
56
|
-
|
57
|
-
@api_method #with
|
58
|
-
@api_method #restore
|
59
|
-
@api_method #restore_document
|
60
|
-
@api_method #restore_project
|
61
|
-
=end
|
62
|
-
class Plugin < Ruber::Plugin
|
54
|
+
module EnvironmentState
|
63
55
|
|
64
56
|
=begin rdoc
|
65
|
-
|
66
|
-
with the plugin
|
67
|
-
=end
|
68
|
-
def initialize psf
|
69
|
-
super
|
70
|
-
@force_restore_project_files = nil
|
71
|
-
@force_restore_cursor_position = nil
|
72
|
-
end
|
73
|
-
|
74
|
-
=begin rdoc
|
75
|
-
Override of {PluginLike#delayed_initialize}
|
76
|
-
|
77
|
-
If the application is starting and there's no open project and a single, pristine
|
78
|
-
document, it uses the {#restore_last_state} method to restore the last state Ruber
|
79
|
-
was according to the user preferences.
|
80
|
-
|
81
|
-
@return [nil]
|
82
|
-
=end
|
83
|
-
def delayed_initialize
|
84
|
-
return unless Ruber[:app].starting?
|
85
|
-
if Ruber[:projects].to_a.empty? and Ruber[:docs].to_a.size == 1 and
|
86
|
-
Ruber[:docs][0].pristine?
|
87
|
-
restore_last_state
|
88
|
-
end
|
89
|
-
nil
|
90
|
-
end
|
91
|
-
|
92
|
-
=begin rdoc
|
93
|
-
Tells whether or not the cursor position should be restored.
|
94
|
-
|
95
|
-
This takes into account user settings and eventual requests made by the programmer
|
96
|
-
using the {#with} method
|
97
|
-
@return [Boolean] *true* if the cursor position should be restored and *false*
|
98
|
-
otherwise
|
99
|
-
=end
|
100
|
-
def restore_cursor_position?
|
101
|
-
if @force_restore_cursor_position.nil?
|
102
|
-
Ruber[:config][:state, :restore_cursor_position]
|
103
|
-
else @force_restore_cursor_position
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
=begin rdoc
|
108
|
-
Tells whether or not the open files in the project should be restored.
|
57
|
+
The open tabs configuration in a form suitable to be written to a configuration object
|
109
58
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
restored and what shouldn't.
|
125
|
-
|
126
|
-
Nested calls to this method are allowed. By default, the outer call wins over the
|
127
|
-
inner, meaning that a value set by the inner call are only used if the outer
|
128
|
-
call didn't set that value. You can change this behaviour by passing the @:force@
|
129
|
-
option.
|
130
|
-
@param [Hash] hash the settings to change. All settings not specified here will
|
131
|
-
remain as chosen by the user
|
132
|
-
@option hash [Boolean] :force (false) if *true*, in case of a nested call to this
|
133
|
-
method, the values specified by the inner call will override values set by the
|
134
|
-
outer call.
|
135
|
-
@option hash [Boolean] :restore_cursor_position (false) whether or not the cursor position
|
136
|
-
in documents should be restored, regardless of what the user chose
|
137
|
-
@option hash [Boolean] :restore_project_files (false) whether or not the open
|
138
|
-
files in projects should be restored, regardless of what the user chose
|
139
|
-
@return [Object] the value returned by the block
|
59
|
+
@return [Hash] A hash containing the following keys:
|
60
|
+
* @:tabs@: an array of arrays, with each inner array representing one tab, with
|
61
|
+
the format described in {#restore_pane}. This value is the one to write under
|
62
|
+
the @state/tabs@ entry in a project or configuration object
|
63
|
+
* @:cursor_positions@:an array of arrays. Each inner array corresponds to a tab
|
64
|
+
and contains the cursor position of each view. Each cursor position is represented
|
65
|
+
as an array with two elements: the first is the line, the second is the column.
|
66
|
+
The order the views are is the same used by {Pane#each_view}. This value is the one to write under
|
67
|
+
the @state/cursor_positions@ entry in a project or configuration object
|
68
|
+
* @:active_view@: the active view. It is represented by a size 2 array, with the
|
69
|
+
first element being the index of the tab of the active view and the second being
|
70
|
+
the index of the view in the corresponding pane (according to the order used by
|
71
|
+
{Pane#each_view}). If there's no active view, this entry is *nil*. This is the value to write under
|
72
|
+
the @state/active_view@ entry in a project or configuration object
|
140
73
|
=end
|
141
|
-
def
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
74
|
+
def tabs_state env
|
75
|
+
res = {}
|
76
|
+
doc_map = {}
|
77
|
+
doc_idx = 0
|
78
|
+
env.documents.each do |doc|
|
79
|
+
if !doc.has_file?
|
80
|
+
doc_map[doc] = doc_idx
|
81
|
+
doc_idx += 1
|
147
82
|
end
|
148
83
|
end
|
149
|
-
|
150
|
-
|
151
|
-
|
84
|
+
tabs = env.tabs
|
85
|
+
tabs_tree = []
|
86
|
+
cursor_positions = []
|
87
|
+
tabs.each do |t|
|
88
|
+
tabs_tree << tab_to_tree(t, doc_map)
|
89
|
+
cursor_positions << t.map do |v|
|
90
|
+
pos = v.cursor_position
|
91
|
+
[pos.line, pos.column]
|
152
92
|
end
|
153
93
|
end
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
94
|
+
res[:tabs] = tabs_tree
|
95
|
+
res[:cursor_positions] = cursor_positions
|
96
|
+
active = env.views[0]
|
97
|
+
if active
|
98
|
+
active_tab = env.tab(active)
|
99
|
+
res[:active_view] = [tabs.index(active_tab), active_tab.to_a.index(active)]
|
158
100
|
end
|
101
|
+
res
|
159
102
|
end
|
160
103
|
|
161
|
-
|
162
|
-
Restores the given document
|
163
|
-
|
164
|
-
@see DocumentExtension#restore DocumentExtension#restore for more information
|
165
|
-
|
166
|
-
@param [Ruber::Document] doc the document to restore
|
167
|
-
@return [nil]
|
168
|
-
=end
|
169
|
-
def restore_document doc
|
170
|
-
doc.extension(:state).restore
|
171
|
-
end
|
172
|
-
|
173
|
-
=begin rdoc
|
174
|
-
Restores the given global project
|
175
|
-
|
176
|
-
@see ProjectExtension#restore ProjectExtension#restore for more information
|
177
|
-
|
178
|
-
@param [Ruber::Project] prj the document to restore
|
179
|
-
@return [nil]
|
180
|
-
=end
|
181
|
-
def restore_project prj
|
182
|
-
prj.extension(:state).restore
|
183
|
-
end
|
184
|
-
|
185
|
-
=begin rdoc
|
186
|
-
Restores the open projects according to a given configuration object
|
187
|
-
|
188
|
-
Restoring the project means closing all the open projects and opening the projects
|
189
|
-
and setting the active project according to the information in _conf_
|
190
|
-
|
191
|
-
This method is called both when the session is restored and when ruber starts
|
192
|
-
up (if the user chose so).
|
193
|
-
|
194
|
-
@param [#[Symbol, Symbol]] conf the object from which to read the state. See {#restore}
|
195
|
-
for more information
|
196
|
-
@return [nil]
|
197
|
-
=end
|
198
|
-
def restore_projects conf = Ruber[:config]
|
199
|
-
projects = Ruber[:projects]
|
200
|
-
projects.to_a.each{|pr| projects.close_project pr}
|
201
|
-
file = conf[:state, :open_projects][0]
|
202
|
-
if file
|
203
|
-
prj = Ruber[:main_window].safe_open_project file
|
204
|
-
Ruber[:projects].current_project = prj if prj
|
205
|
-
end
|
206
|
-
nil
|
207
|
-
end
|
208
|
-
|
209
|
-
=begin rdoc
|
210
|
-
Restores the open documents according to a given configuration object
|
211
|
-
|
212
|
-
Restoring the open documents means:
|
213
|
-
* closing all the open documents. If any of thess is modified, the user is asked
|
214
|
-
how to proceed. If the choses to abort, nothing else is done
|
215
|
-
* opening the documents according to the @state/open_documents@ entry of _conf_
|
216
|
-
* recreating the tabs and the editors according to the @state/tabs@ entry of _conf_
|
217
|
-
* activating the editor contained in the @state/active_editor@ entry of _conf_
|
218
|
-
|
219
|
-
This method is called both when the session is restored and when ruber starts
|
220
|
-
up (if the user chose so).
|
221
|
-
|
222
|
-
@param [#[Symbol, Symbol]] conf the object from which to read the state. See {#restore}
|
223
|
-
for more information
|
224
|
-
@return [nil]
|
225
|
-
=end
|
226
|
-
def restore_documents config = Ruber[:config]
|
227
|
-
return unless Ruber[:documents].close_all
|
228
|
-
docs = config[:state, :open_documents]
|
104
|
+
def restore_environment env, data
|
229
105
|
unnamed_docs = []
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
doc = Ruber[:documents].new_document
|
234
|
-
unnamed_docs << doc
|
235
|
-
doc
|
236
|
-
end
|
106
|
+
env.close_editors env.views, false
|
107
|
+
data[:tabs].each_with_index do |t, i|
|
108
|
+
restore_tab env, t, data[:cursor_positions][i] || [], unnamed_docs
|
237
109
|
end
|
238
|
-
|
239
|
-
tabs = config[:state, :tabs]
|
240
|
-
mw = Ruber[:main_window]
|
241
|
-
positions = config[:state, :cursor_positions]
|
242
|
-
tabs.each_with_index do |t, i|
|
243
|
-
pn = restore_pane t, unnamed_docs
|
244
|
-
views = pn.to_a
|
245
|
-
views.each_with_index do |v, j|
|
246
|
-
cursor = KTextEditor::Cursor.new(*(positions[i][j] rescue [0,0]))
|
247
|
-
v.cursor_position = cursor
|
248
|
-
end
|
249
|
-
end
|
250
|
-
active_editor = config[:state, :active_view]
|
110
|
+
active_editor = data[:active_view]
|
251
111
|
if active_editor
|
252
|
-
|
112
|
+
editor = env.tabs[active_editor[0]].to_a[active_editor[1]]
|
113
|
+
env.activate_editor editor
|
114
|
+
editor.set_focus if editor
|
253
115
|
end
|
254
116
|
end
|
255
117
|
|
@@ -279,8 +141,8 @@ format:
|
|
279
141
|
_n_ in _docs_
|
280
142
|
@return [Pane] the new pane
|
281
143
|
=end
|
282
|
-
def
|
283
|
-
|
144
|
+
def restore_tab env, tab, cursor_positions, unnamed_docs
|
145
|
+
world = Ruber[:world]
|
284
146
|
find_first_view = lambda do |array|
|
285
147
|
if array.size == 1 then array[0]
|
286
148
|
elsif array[1].is_a? Array then find_first_view.call array[1]
|
@@ -295,97 +157,181 @@ format:
|
|
295
157
|
#the first view, which is already contained in the pane
|
296
158
|
next if i < 2
|
297
159
|
view = e.is_a?(Array) ? find_first_view.call(e) : e
|
298
|
-
|
299
|
-
|
160
|
+
if view.is_a?(String)
|
161
|
+
doc = world.document(KDE::Url.new(view)) || world.new_document
|
162
|
+
else doc = unnamed_docs[view] ||= world.new_document
|
163
|
+
end
|
164
|
+
view = doc.create_view
|
300
165
|
pn.split last_view, view, orientation
|
301
166
|
last_view = view
|
302
167
|
recreate_pane.call view.parent, e if e.is_a? Array
|
303
168
|
end
|
304
169
|
recreate_pane.call pn.splitter.widget(0), array[1] if array[1].is_a?(Array)
|
305
170
|
end
|
306
|
-
view = find_first_view.call
|
307
|
-
|
308
|
-
|
171
|
+
view = find_first_view.call tab
|
172
|
+
if view.is_a?(String)
|
173
|
+
doc = world.document(KDE::Url.new(view))
|
174
|
+
else doc = unnamed_docs[view] ||= Ruber[:world].new_document
|
175
|
+
end
|
176
|
+
view = env.editor_for! doc, :existing => :never, :new => :new_tab
|
309
177
|
pane = view.parent
|
310
|
-
recreate_pane.call pane,
|
178
|
+
recreate_pane.call pane, tab
|
179
|
+
pane.views.each_with_index do |v, i|
|
180
|
+
pos = cursor_positions[i]
|
181
|
+
v.go_to *pos if pos
|
182
|
+
end
|
311
183
|
pane
|
312
184
|
end
|
313
185
|
|
186
|
+
private
|
187
|
+
|
314
188
|
=begin rdoc
|
315
|
-
|
316
|
-
|
317
|
-
The argument can be any object which has a @[]@ method which takes two arguments
|
318
|
-
and behaves as the hash returned by {#gather_settings}.
|
189
|
+
A representation of a pane's configuration suitable to be written to a configuration
|
190
|
+
object
|
319
191
|
|
320
|
-
@param [
|
321
|
-
@
|
192
|
+
@param [Pane] pane the pane to return the representation for
|
193
|
+
@param [Hash{Document=>Integer}] docs a map between documents not associated
|
194
|
+
with files and the number to represent them
|
195
|
+
@return [Array<Array,Integer,String>] an array as described in {#restore_pane}
|
322
196
|
=end
|
323
|
-
def
|
324
|
-
if
|
325
|
-
|
197
|
+
def tab_to_tree pane, docs
|
198
|
+
if pane.single_view?
|
199
|
+
doc = pane.view.document
|
200
|
+
return [doc.has_file? ? doc.url.url : docs[doc]]
|
326
201
|
end
|
327
|
-
|
202
|
+
panes = {}
|
203
|
+
tab_to_tree_prc = lambda do |pn|
|
204
|
+
if pn.single_view?
|
205
|
+
doc = pn.view.document
|
206
|
+
panes[pn.parent_pane] << (doc.has_file? ? doc.url.url : docs[doc])
|
207
|
+
else
|
208
|
+
data = [pn.orientation]
|
209
|
+
panes[pn] = data
|
210
|
+
panes[pn.parent_pane] << data if pn.parent_pane
|
211
|
+
end
|
212
|
+
end
|
213
|
+
tab_to_tree_prc.call pane
|
214
|
+
pane.each_pane :recursive, &tab_to_tree_prc
|
215
|
+
panes[pane]
|
328
216
|
end
|
329
|
-
|
217
|
+
|
218
|
+
end
|
219
|
+
|
330
220
|
=begin rdoc
|
331
|
-
|
332
|
-
|
221
|
+
Plugin object for the State plugin
|
222
|
+
=end
|
223
|
+
class Plugin < Ruber::Plugin
|
224
|
+
|
225
|
+
include EnvironmentState
|
226
|
+
|
227
|
+
=begin rdoc
|
228
|
+
@param [Ruber::PluginSpecification] psf the plugin specification object associated
|
229
|
+
with the plugin
|
230
|
+
=end
|
231
|
+
def initialize psf
|
232
|
+
super
|
233
|
+
@force_restore_project_files = nil
|
234
|
+
@force_restore_cursor_position = nil
|
235
|
+
end
|
236
|
+
|
237
|
+
=begin rdoc
|
238
|
+
Override of {PluginLike#delayed_initialize}
|
333
239
|
|
334
|
-
|
240
|
+
If the application is starting and there's no open project and a single, pristine
|
241
|
+
document, it uses the {#restore_last_state} method to restore the last state Ruber
|
242
|
+
was according to the user preferences.
|
335
243
|
|
336
244
|
@return [nil]
|
337
245
|
=end
|
338
|
-
def
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
when :restore_documents_only then restore_documents
|
246
|
+
def delayed_initialize
|
247
|
+
return unless Ruber[:app].starting?
|
248
|
+
docs = Ruber[:world].documents
|
249
|
+
if Ruber[:world].projects.empty? and docs.size == 1 and docs[0].pristine?
|
250
|
+
Ruber[:app].sessionRestored? ? restore_last_state(:force) : restore_last_state
|
344
251
|
end
|
252
|
+
connect Ruber[:world], SIGNAL('project_created(QObject*)'), self, SLOT('restore_project(QObject*)')
|
253
|
+
nil
|
345
254
|
end
|
346
|
-
|
255
|
+
|
256
|
+
def restore_project prj
|
257
|
+
prx = prj[:state]
|
258
|
+
data = {
|
259
|
+
:tabs => prx[:tabs],
|
260
|
+
:cursor_positions => prx[:cursor_positions],
|
261
|
+
:active_view => prx[:active_view]
|
262
|
+
}
|
263
|
+
env = Ruber[:world].environment(prj)
|
264
|
+
if Ruber[:config][:state, :restore_projects] and env.tabs.count == 0
|
265
|
+
restore_environment env, data
|
266
|
+
end
|
267
|
+
end
|
268
|
+
slots 'restore_project(QObject*)'
|
269
|
+
|
347
270
|
=begin rdoc
|
348
|
-
Restores Ruber's state
|
271
|
+
Restores Ruber's state according to the user settings so that it matches the state
|
272
|
+
it was when it was last shut down
|
349
273
|
|
350
|
-
|
274
|
+
The state information is read from the global configuration object.
|
351
275
|
|
352
276
|
@return [nil]
|
353
277
|
=end
|
354
|
-
def
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
278
|
+
def restore_last_state mode = nil
|
279
|
+
force = mode == :force
|
280
|
+
cfg = Ruber[:config][:state]
|
281
|
+
if force or cfg[:startup_behaviour].include? :default_environment
|
282
|
+
default_env_data = {
|
283
|
+
:tabs => cfg[:default_environment_tabs],
|
284
|
+
:active_view => cfg[:default_environment_active_view],
|
285
|
+
:cursor_positions => cfg[:default_environment_cursor_positions]
|
286
|
+
}
|
287
|
+
restore_environment Ruber[:world].default_environment, default_env_data
|
359
288
|
end
|
360
|
-
|
361
|
-
|
289
|
+
active_prj = nil
|
290
|
+
if force || cfg[:startup_behaviour].include?(:projects)
|
291
|
+
cfg[:last_state].each_with_index do |f, i|
|
292
|
+
next if f.nil?
|
293
|
+
begin prj = Ruber[:world].project f
|
294
|
+
rescue Ruber::AbstractProject::InvalidProjectFile
|
295
|
+
next
|
296
|
+
end
|
297
|
+
active_prj = prj if i == 0
|
298
|
+
data = {
|
299
|
+
:tabs => prj[:state, :tabs],
|
300
|
+
:cursor_positions => prj[:state, :cursor_positions],
|
301
|
+
:active_view => prj[:state, :active_view]
|
302
|
+
}
|
303
|
+
restore_environment Ruber[:world].environment(prj), data
|
304
|
+
end
|
305
|
+
Ruber[:world].active_project = active_prj
|
362
306
|
end
|
363
|
-
nil
|
364
307
|
end
|
365
|
-
|
308
|
+
|
366
309
|
=begin rdoc
|
367
310
|
Saves Ruber's state to the global config object
|
368
311
|
|
369
312
|
@return [nil]
|
370
313
|
=end
|
371
314
|
def save_settings
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
cfg[:state, k] = v
|
315
|
+
files = Ruber[:world].environments.map do |e|
|
316
|
+
prj = e.project
|
317
|
+
prj ? prj.project_file : nil
|
376
318
|
end
|
319
|
+
active_env = Ruber[:world].active_environment
|
320
|
+
if active_env and active_env.project
|
321
|
+
active_project = active_env.project.project_file
|
322
|
+
else active_project = nil
|
323
|
+
end
|
324
|
+
files.unshift files.delete(active_project)
|
325
|
+
Ruber[:config][:state, :last_state] = files
|
326
|
+
default_env_state = tabs_state Ruber[:world].default_environment
|
327
|
+
Ruber[:config][:state, :default_environment_tabs] = default_env_state[:tabs]
|
328
|
+
Ruber[:config][:state, :default_environment_active_view] =
|
329
|
+
default_env_state[:active_view]
|
330
|
+
Ruber[:config][:state, :default_environment_cursor_positions] =
|
331
|
+
default_env_state[:cursor_positions]
|
377
332
|
nil
|
378
333
|
end
|
379
334
|
|
380
|
-
=begin rdoc
|
381
|
-
Override of {PluginLike#session_data}
|
382
|
-
|
383
|
-
@return [Hash] a hash containing the session information under the @State@ key
|
384
|
-
=end
|
385
|
-
def session_data
|
386
|
-
{'State' => gather_settings}
|
387
|
-
end
|
388
|
-
|
389
335
|
=begin rdoc
|
390
336
|
The open projects in a form suitable to be written to a configuration object
|
391
337
|
|
@@ -395,129 +341,13 @@ The open projects in a form suitable to be written to a configuration object
|
|
395
341
|
object
|
396
342
|
=end
|
397
343
|
def projects_state
|
398
|
-
projects = Ruber[:
|
344
|
+
projects = Ruber[:world].projects.map{|pr| pr.project_file}
|
399
345
|
unless projects.empty?
|
400
|
-
active_prj = Ruber[:
|
346
|
+
active_prj = Ruber[:world].active_document
|
401
347
|
projects.unshift projects.delete(active_prj.project_file) if active_prj
|
402
348
|
end
|
403
349
|
projects
|
404
350
|
end
|
405
|
-
|
406
|
-
=begin rdoc
|
407
|
-
The open documents in a form suitable to be written to a configuration object
|
408
|
-
|
409
|
-
@return [Array<String,nil>] an array containing the names of the URLs associated with
|
410
|
-
the currently open documents. Documents not associated with files are represented
|
411
|
-
by *nil*s in the array. This value is the one to write under the @state/open_documents@
|
412
|
-
entry in a project or configuration object
|
413
|
-
=end
|
414
|
-
def documents_state
|
415
|
-
docs = Ruber[:documents].documents
|
416
|
-
docs.map{ |doc| doc.has_file? ? doc.url.to_encoded.to_s : nil}
|
417
|
-
end
|
418
|
-
|
419
|
-
=begin rdoc
|
420
|
-
The open tabs configuration in a form suitable to be written to a configuration object
|
421
|
-
|
422
|
-
@return [Hash] A hash containing the following keys:
|
423
|
-
* @:tabs@: an array of arrays, with each inner array representing one tab, with
|
424
|
-
the format described in {#restore_pane}. This value is the one to write under
|
425
|
-
the @state/tabs@ entry in a project or configuration object
|
426
|
-
* @:cursor_positions@:an array of arrays. Each inner array corresponds to a tab
|
427
|
-
and contains the cursor position of each view. Each cursor position is represented
|
428
|
-
as an array with two elements: the first is the line, the second is the column.
|
429
|
-
The order the views are is the same used by {Pane#each_view}. This value is the one to write under
|
430
|
-
the @state/cursor_positions@ entry in a project or configuration object
|
431
|
-
* @:active_view@: the active view. It is represented by a size 2 array, with the
|
432
|
-
first element being the index of the tab of the active view and the second being
|
433
|
-
the index of the view in the corresponding pane (according to the order used by
|
434
|
-
{Pane#each_view}). If there's no active view, this entry is *nil*. This is the value to write under
|
435
|
-
the @state/active_view@ entry in a project or configuration object
|
436
|
-
=end
|
437
|
-
def tabs_state
|
438
|
-
res = {}
|
439
|
-
doc_map = {}
|
440
|
-
doc_idx = 0
|
441
|
-
Ruber[:documents].each do |doc|
|
442
|
-
if !doc.has_file?
|
443
|
-
doc_map[doc] = doc_idx
|
444
|
-
doc_idx += 1
|
445
|
-
end
|
446
|
-
end
|
447
|
-
tabs = Ruber[:main_window].tabs
|
448
|
-
tabs_tree = []
|
449
|
-
cursor_positions = []
|
450
|
-
tabs.each do |t|
|
451
|
-
tabs_tree << tab_to_tree(t, doc_map)
|
452
|
-
cursor_positions << t.map do |v|
|
453
|
-
pos = v.cursor_position
|
454
|
-
[pos.line, pos.column]
|
455
|
-
end
|
456
|
-
end
|
457
|
-
res[:tabs] = tabs_tree
|
458
|
-
res[:cursor_positions] = cursor_positions
|
459
|
-
active = Ruber[:main_window].active_editor
|
460
|
-
if active
|
461
|
-
active_tab = Ruber[:main_window].tab(active)
|
462
|
-
res[:active_view] = [tabs.index(active_tab), active_tab.to_a.index(active)]
|
463
|
-
end
|
464
|
-
res
|
465
|
-
end
|
466
|
-
|
467
|
-
private
|
468
|
-
|
469
|
-
=begin rdoc
|
470
|
-
Creates a hash with all the data needed to restore Ruber's state
|
471
|
-
|
472
|
-
@return [Hash] a hash with the following keys:
|
473
|
-
* @:open_projects@: an array containing the project file of each open project.
|
474
|
-
the first entry is the active project
|
475
|
-
* @:open_documents@: an array with the name of the file corresponding to each
|
476
|
-
open document (documents without an associated file can't be restored and aren't
|
477
|
-
included). The order is that of opening
|
478
|
-
* @:visible_documents@: an array with the name of the files corresponding to the
|
479
|
-
documents associated with a file and having a view
|
480
|
-
* @:active_document@: the name of the file associated with the active document or
|
481
|
-
*nil* if there's no open document
|
482
|
-
=end
|
483
|
-
def gather_settings
|
484
|
-
res = {
|
485
|
-
:open_projects => projects_state,
|
486
|
-
:open_documents => documents_state
|
487
|
-
}
|
488
|
-
res.merge! tabs_state
|
489
|
-
res
|
490
|
-
end
|
491
|
-
|
492
|
-
=begin rdoc
|
493
|
-
A representation of a pane's configuration suitable to be written to a configuration
|
494
|
-
object
|
495
|
-
|
496
|
-
@param [Pane] pane the pane to return the representation for
|
497
|
-
@param [Hash{Document=>Integer}] docs a map between documents not associated
|
498
|
-
with files and the number to represent them
|
499
|
-
@return [Array<Array,Integer,String>] an array as described in {#restore_pane}
|
500
|
-
=end
|
501
|
-
def tab_to_tree pane, docs
|
502
|
-
if pane.single_view?
|
503
|
-
doc = pane.view.document
|
504
|
-
return [doc.has_file? ? doc.url.url : docs[doc]]
|
505
|
-
end
|
506
|
-
panes = {}
|
507
|
-
tab_to_tree_prc = lambda do |pn|
|
508
|
-
if pn.single_view?
|
509
|
-
doc = pn.view.document
|
510
|
-
panes[pn.parent_pane] << (doc.has_file? ? doc.url.url : docs[doc])
|
511
|
-
else
|
512
|
-
data = [pn.orientation]
|
513
|
-
panes[pn] = data
|
514
|
-
panes[pn.parent_pane] << data if pn.parent_pane
|
515
|
-
end
|
516
|
-
end
|
517
|
-
tab_to_tree_prc.call pane
|
518
|
-
pane.each_pane :recursive, &tab_to_tree_prc
|
519
|
-
panes[pane]
|
520
|
-
end
|
521
351
|
|
522
352
|
end
|
523
353
|
|
@@ -594,7 +424,7 @@ is created
|
|
594
424
|
@return [nil]
|
595
425
|
=end
|
596
426
|
def auto_restore view
|
597
|
-
restore view if Ruber[:state]
|
427
|
+
restore view if Ruber[:config][:state, :restore_cursor_position] #.restore_cursor_position?
|
598
428
|
connect view, SIGNAL('focus_in(QWidget*)'), self, SLOT('view_received_focus(QWidget*)')
|
599
429
|
nil
|
600
430
|
end
|
@@ -641,6 +471,8 @@ when the project was last closed
|
|
641
471
|
|
642
472
|
include Extension
|
643
473
|
|
474
|
+
include EnvironmentState
|
475
|
+
|
644
476
|
slots :auto_restore, :save_settings
|
645
477
|
|
646
478
|
=begin rdoc
|
@@ -649,21 +481,8 @@ when the project was last closed
|
|
649
481
|
def initialize prj
|
650
482
|
super
|
651
483
|
@project = prj
|
652
|
-
|
653
|
-
|
654
|
-
end
|
655
|
-
|
656
|
-
=begin rdoc
|
657
|
-
Restore Ruber's state as it was when the project was last closed
|
658
|
-
|
659
|
-
See {Plugin#restore_documents} for more information
|
660
|
-
|
661
|
-
@return [nil]
|
662
|
-
=end
|
663
|
-
|
664
|
-
def restore
|
665
|
-
Ruber[:state].restore_documents @project
|
666
|
-
nil
|
484
|
+
# connect @project, SIGNAL(:activated), self, SLOT(:auto_restore)
|
485
|
+
# connect @project, SIGNAL(:deactivated), self, SLOT(:save_settings)
|
667
486
|
end
|
668
487
|
|
669
488
|
=begin rdoc
|
@@ -675,27 +494,13 @@ in the views and the active view
|
|
675
494
|
@return [nil]
|
676
495
|
=end
|
677
496
|
def save_settings
|
678
|
-
|
679
|
-
|
680
|
-
[:
|
681
|
-
|
682
|
-
end
|
497
|
+
state = tabs_state Ruber[:world].environment @project
|
498
|
+
@project[:state, :tabs] = state[:tabs]
|
499
|
+
@project[:state, :active_view] = state[:active_view]
|
500
|
+
@project[:state, :cursor_positions] = state[:cursor_positions]
|
683
501
|
nil
|
684
502
|
end
|
685
503
|
|
686
|
-
private
|
687
|
-
|
688
|
-
=begin rdoc
|
689
|
-
Restores the project's state when a new project is activated
|
690
|
-
|
691
|
-
It does nothing if the user choosed not to restore the projects's state.
|
692
|
-
@return [nil]
|
693
|
-
=end
|
694
|
-
def auto_restore
|
695
|
-
@project.disconnect SIGNAL(:activated), self, SLOT(:auto_restore)
|
696
|
-
restore if Ruber[:state].restore_project_files?
|
697
|
-
end
|
698
|
-
|
699
504
|
end
|
700
505
|
|
701
506
|
=begin rdoc
|
@@ -706,7 +511,12 @@ Configuration widget for the State plugin
|
|
706
511
|
=begin rdoc
|
707
512
|
A list of different behaviour the plugin can have at startup
|
708
513
|
=end
|
709
|
-
STARTUP_BEHAVIOURS = [
|
514
|
+
STARTUP_BEHAVIOURS = [
|
515
|
+
[:default_environment, :projects],
|
516
|
+
[:projects],
|
517
|
+
[:default_environment],
|
518
|
+
[]
|
519
|
+
]
|
710
520
|
|
711
521
|
=begin rdoc
|
712
522
|
@param [Qt::Widget, nil] parent the parent widget
|