ruber 0.0.1.1
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/COPYING +339 -0
- data/INSTALL +137 -0
- data/LICENSE +8 -0
- data/bin/ruber +65 -0
- data/data/share/apps/ruber/core_components.yaml +31 -0
- data/data/share/apps/ruber/ruberui.rc +109 -0
- data/data/share/icons/ruber.png +0 -0
- data/data/share/pixmaps/ruby.png +0 -0
- data/icons/ruber-16.png +0 -0
- data/icons/ruber-32.png +0 -0
- data/icons/ruber-48.png +0 -0
- data/icons/ruber-8.png +0 -0
- data/lib/ruber/application/application.rb +288 -0
- data/lib/ruber/application/plugin.yaml +11 -0
- data/lib/ruber/component_manager.rb +899 -0
- data/lib/ruber/config/config.rb +82 -0
- data/lib/ruber/config/plugin.yaml +3 -0
- data/lib/ruber/document_project.rb +209 -0
- data/lib/ruber/documents/document_list.rb +416 -0
- data/lib/ruber/documents/plugin.yaml +4 -0
- data/lib/ruber/editor/document.rb +506 -0
- data/lib/ruber/editor/editor_view.rb +167 -0
- data/lib/ruber/editor/ktexteditor_wrapper.rb +202 -0
- data/lib/ruber/exception_widgets.rb +245 -0
- data/lib/ruber/external_program_plugin.rb +397 -0
- data/lib/ruber/filtered_output_widget.rb +342 -0
- data/lib/ruber/gui_states_handler.rb +231 -0
- data/lib/ruber/kde_config_option_backend.rb +167 -0
- data/lib/ruber/kde_sugar.rb +249 -0
- data/lib/ruber/main_window/choose_plugins_dlg.rb +353 -0
- data/lib/ruber/main_window/main_window.rb +524 -0
- data/lib/ruber/main_window/main_window_actions.rb +537 -0
- data/lib/ruber/main_window/main_window_internal.rb +239 -0
- data/lib/ruber/main_window/open_file_in_project_dlg.rb +212 -0
- data/lib/ruber/main_window/output_color_widget.rb +35 -0
- data/lib/ruber/main_window/plugin.yaml +58 -0
- data/lib/ruber/main_window/save_modified_files_dlg.rb +89 -0
- data/lib/ruber/main_window/status_bar.rb +156 -0
- data/lib/ruber/main_window/ui/choose_plugins_widget.rb +90 -0
- data/lib/ruber/main_window/ui/choose_plugins_widget.ui +77 -0
- data/lib/ruber/main_window/ui/main_window_settings_widget.rb +108 -0
- data/lib/ruber/main_window/ui/main_window_settings_widget.ui +89 -0
- data/lib/ruber/main_window/ui/new_project_widget.rb +119 -0
- data/lib/ruber/main_window/ui/new_project_widget.ui +178 -0
- data/lib/ruber/main_window/ui/open_file_in_project_dlg.rb +109 -0
- data/lib/ruber/main_window/ui/open_file_in_project_dlg.ui +168 -0
- data/lib/ruber/main_window/ui/output_color_widget.rb +241 -0
- data/lib/ruber/main_window/ui/output_color_widget.ui +204 -0
- data/lib/ruber/main_window/workspace.rb +442 -0
- data/lib/ruber/output_widget.rb +1093 -0
- data/lib/ruber/plugin.rb +264 -0
- data/lib/ruber/plugin_like.rb +589 -0
- data/lib/ruber/plugin_specification.rb +106 -0
- data/lib/ruber/plugin_specification_reader.rb +451 -0
- data/lib/ruber/project.rb +493 -0
- data/lib/ruber/project_backend.rb +105 -0
- data/lib/ruber/projects/plugin.yaml +11 -0
- data/lib/ruber/projects/project_files_list.rb +314 -0
- data/lib/ruber/projects/project_files_widget.rb +301 -0
- data/lib/ruber/projects/project_list.rb +314 -0
- data/lib/ruber/projects/ui/project_files_rule_chooser_widget.rb +74 -0
- data/lib/ruber/projects/ui/project_files_rule_chooser_widget.ui +61 -0
- data/lib/ruber/projects/ui/project_files_widget.rb +117 -0
- data/lib/ruber/projects/ui/project_files_widget.ui +123 -0
- data/lib/ruber/qt_sugar.rb +673 -0
- data/lib/ruber/settings_container.rb +515 -0
- data/lib/ruber/settings_dialog.rb +244 -0
- data/lib/ruber/settings_dialog_manager.rb +503 -0
- data/lib/ruber/utils.rb +414 -0
- data/lib/ruber/yaml_option_backend.rb +159 -0
- data/outsider_files +15 -0
- data/plugins/autosave/autosave.rb +404 -0
- data/plugins/autosave/plugin.yaml +16 -0
- data/plugins/autosave/ui/autosave_config_widget.rb +83 -0
- data/plugins/autosave/ui/autosave_config_widget.ui +68 -0
- data/plugins/command/command.png +0 -0
- data/plugins/command/command.rb +74 -0
- data/plugins/command/plugin.yaml +11 -0
- data/plugins/find_in_files/find_in_files.rb +337 -0
- data/plugins/find_in_files/find_in_files_dlg.rb +411 -0
- data/plugins/find_in_files/find_in_files_ui.rc +11 -0
- data/plugins/find_in_files/find_in_files_widgets.rb +485 -0
- data/plugins/find_in_files/plugin.yaml +23 -0
- data/plugins/find_in_files/ui/config_widget.rb +58 -0
- data/plugins/find_in_files/ui/config_widget.ui +41 -0
- data/plugins/find_in_files/ui/find_in_files_widget.rb +260 -0
- data/plugins/find_in_files/ui/find_in_files_widget.ui +324 -0
- data/plugins/project_browser/plugin.yaml +10 -0
- data/plugins/project_browser/project_browser.rb +245 -0
- data/plugins/rake/plugin.yaml +39 -0
- data/plugins/rake/rake.png +0 -0
- data/plugins/rake/rake.rb +567 -0
- data/plugins/rake/rake_extension.rb +153 -0
- data/plugins/rake/rake_widgets.rb +615 -0
- data/plugins/rake/rakeui.rc +27 -0
- data/plugins/rake/ui/add_quick_task_widget.rb +71 -0
- data/plugins/rake/ui/add_quick_task_widget.ui +59 -0
- data/plugins/rake/ui/choose_task_widget.rb +77 -0
- data/plugins/rake/ui/choose_task_widget.ui +72 -0
- data/plugins/rake/ui/config_widget.rb +127 -0
- data/plugins/rake/ui/config_widget.ui +123 -0
- data/plugins/rake/ui/project_widget.rb +217 -0
- data/plugins/rake/ui/project_widget.ui +246 -0
- data/plugins/rspec/plugin.yaml +30 -0
- data/plugins/rspec/rspec.png +0 -0
- data/plugins/rspec/rspec.rb +945 -0
- data/plugins/rspec/rspec.svg +90 -0
- data/plugins/rspec/rspecui.rc +20 -0
- data/plugins/rspec/ruber_rspec_formatter.rb +312 -0
- data/plugins/rspec/ui/rspec_project_widget.rb +170 -0
- data/plugins/rspec/ui/rspec_project_widget.ui +193 -0
- data/plugins/ruby_development/plugin.yaml +27 -0
- data/plugins/ruby_development/ruby_development.png +0 -0
- data/plugins/ruby_development/ruby_development.rb +453 -0
- data/plugins/ruby_development/ruby_developmentui.rc +19 -0
- data/plugins/ruby_development/ui/project_widget.rb +112 -0
- data/plugins/ruby_development/ui/project_widget.ui +108 -0
- data/plugins/ruby_runner/config_widget.rb +116 -0
- data/plugins/ruby_runner/plugin.yaml +26 -0
- data/plugins/ruby_runner/project_widget.rb +62 -0
- data/plugins/ruby_runner/ruby.png +0 -0
- data/plugins/ruby_runner/ruby_interpretersui.rc +26 -0
- data/plugins/ruby_runner/ruby_runner.rb +411 -0
- data/plugins/ruby_runner/ui/config_widget.rb +92 -0
- data/plugins/ruby_runner/ui/config_widget.ui +91 -0
- data/plugins/ruby_runner/ui/project_widget.rb +60 -0
- data/plugins/ruby_runner/ui/project_widget.ui +48 -0
- data/plugins/ruby_runner/ui/ruby_runnner_plugin_option_widget.rb +59 -0
- data/plugins/ruby_runner/ui/ruby_runnner_plugin_option_widget.ui +44 -0
- data/plugins/state/plugin.yaml +28 -0
- data/plugins/state/state.rb +520 -0
- data/plugins/state/ui/config_widget.rb +92 -0
- data/plugins/state/ui/config_widget.ui +89 -0
- data/plugins/syntax_checker/plugin.yaml +18 -0
- data/plugins/syntax_checker/syntax_checker.rb +662 -0
- data/ruber.desktop +10 -0
- data/spec/annotation_model_spec.rb +174 -0
- data/spec/common.rb +119 -0
- data/spec/component_manager_spec.rb +1259 -0
- data/spec/document_list_spec.rb +626 -0
- data/spec/document_project_spec.rb +373 -0
- data/spec/document_spec.rb +779 -0
- data/spec/editor_view_spec.rb +167 -0
- data/spec/external_program_plugin_spec.rb +676 -0
- data/spec/filtered_output_widget_spec.rb +642 -0
- data/spec/gui_states_handler_spec.rb +304 -0
- data/spec/kde_config_option_backend_spec.rb +214 -0
- data/spec/kde_sugar_spec.rb +101 -0
- data/spec/ktexteditor_wrapper_spec.rb +305 -0
- data/spec/output_widget_spec.rb +1703 -0
- data/spec/plugin_spec.rb +1393 -0
- data/spec/plugin_specification_reader_spec.rb +1765 -0
- data/spec/plugin_specification_spec.rb +401 -0
- data/spec/project_backend_spec.rb +172 -0
- data/spec/project_files_list_spec.rb +401 -0
- data/spec/project_list_spec.rb +511 -0
- data/spec/project_spec.rb +990 -0
- data/spec/qt_sugar_spec.rb +328 -0
- data/spec/settings_container_spec.rb +617 -0
- data/spec/settings_dialog_manager_spec.rb +773 -0
- data/spec/settings_dialog_spec.rb +419 -0
- data/spec/state_spec.rb +991 -0
- data/spec/utils_spec.rb +406 -0
- data/spec/workspace_spec.rb +869 -0
- data/spec/yaml_option_backend_spec.rb +246 -0
- metadata +284 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>RubyRunnerConfigWidget</class>
|
|
4
|
+
<widget class="QWidget" name="RubyRunnerConfigWidget">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>385</width>
|
|
10
|
+
<height>306</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Form</string>
|
|
15
|
+
</property>
|
|
16
|
+
<layout class="QVBoxLayout" name="verticalLayout">
|
|
17
|
+
<item>
|
|
18
|
+
<widget class="KEditListBox" name="_ruby__interpreters">
|
|
19
|
+
<property name="title">
|
|
20
|
+
<string>&Availlable Interpreters</string>
|
|
21
|
+
</property>
|
|
22
|
+
<property name="signal" stdset="0">
|
|
23
|
+
<string>changed()</string>
|
|
24
|
+
</property>
|
|
25
|
+
<property name="read" stdset="0">
|
|
26
|
+
<string>$fill_interpreters</string>
|
|
27
|
+
</property>
|
|
28
|
+
<property name="store" stdset="0">
|
|
29
|
+
<string>items</string>
|
|
30
|
+
</property>
|
|
31
|
+
</widget>
|
|
32
|
+
</item>
|
|
33
|
+
<item>
|
|
34
|
+
<widget class="QGroupBox" name="groupBox">
|
|
35
|
+
<property name="title">
|
|
36
|
+
<string>Interpreter</string>
|
|
37
|
+
</property>
|
|
38
|
+
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
39
|
+
<item>
|
|
40
|
+
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
41
|
+
<item>
|
|
42
|
+
<widget class="QLabel" name="label">
|
|
43
|
+
<property name="text">
|
|
44
|
+
<string>&Default interpreter</string>
|
|
45
|
+
</property>
|
|
46
|
+
<property name="buddy">
|
|
47
|
+
<cstring>_ruby__ruby</cstring>
|
|
48
|
+
</property>
|
|
49
|
+
</widget>
|
|
50
|
+
</item>
|
|
51
|
+
<item>
|
|
52
|
+
<widget class="KComboBox" name="_ruby__ruby">
|
|
53
|
+
<property name="read" stdset="0">
|
|
54
|
+
<string>$default_interpreter=</string>
|
|
55
|
+
</property>
|
|
56
|
+
<property name="store" stdset="0">
|
|
57
|
+
<string>current_text</string>
|
|
58
|
+
</property>
|
|
59
|
+
</widget>
|
|
60
|
+
</item>
|
|
61
|
+
</layout>
|
|
62
|
+
</item>
|
|
63
|
+
<item>
|
|
64
|
+
<widget class="RubyOptionsWidget" name="_ruby__ruby_options" native="true"/>
|
|
65
|
+
</item>
|
|
66
|
+
</layout>
|
|
67
|
+
</widget>
|
|
68
|
+
</item>
|
|
69
|
+
</layout>
|
|
70
|
+
</widget>
|
|
71
|
+
<customwidgets>
|
|
72
|
+
<customwidget>
|
|
73
|
+
<class>KEditListBox</class>
|
|
74
|
+
<extends>QGroupBox</extends>
|
|
75
|
+
<header>keditlistbox.h</header>
|
|
76
|
+
</customwidget>
|
|
77
|
+
<customwidget>
|
|
78
|
+
<class>KComboBox</class>
|
|
79
|
+
<extends>QComboBox</extends>
|
|
80
|
+
<header>kcombobox.h</header>
|
|
81
|
+
</customwidget>
|
|
82
|
+
<customwidget>
|
|
83
|
+
<class>RubyOptionsWidget</class>
|
|
84
|
+
<extends>QWidget</extends>
|
|
85
|
+
<header>rubyoptionswidget.h</header>
|
|
86
|
+
<container>1</container>
|
|
87
|
+
</customwidget>
|
|
88
|
+
</customwidgets>
|
|
89
|
+
<resources/>
|
|
90
|
+
<connections/>
|
|
91
|
+
</ui>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
** Form generated from reading ui file 'project_widget.ui'
|
|
3
|
+
**
|
|
4
|
+
** Created: ven ott 29 17:39:04 2010
|
|
5
|
+
** by: Qt User Interface Compiler version 4.7.0
|
|
6
|
+
**
|
|
7
|
+
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
|
8
|
+
=end
|
|
9
|
+
|
|
10
|
+
class Ui_RubyRunnerProjectWidget
|
|
11
|
+
attr_reader :horizontalLayout
|
|
12
|
+
attr_reader :label
|
|
13
|
+
attr_reader :_ruby__ruby
|
|
14
|
+
|
|
15
|
+
def setupUi(rubyRunnerProjectWidget)
|
|
16
|
+
if rubyRunnerProjectWidget.objectName.nil?
|
|
17
|
+
rubyRunnerProjectWidget.objectName = "rubyRunnerProjectWidget"
|
|
18
|
+
end
|
|
19
|
+
rubyRunnerProjectWidget.resize(414, 34)
|
|
20
|
+
@horizontalLayout = Qt::HBoxLayout.new(rubyRunnerProjectWidget)
|
|
21
|
+
@horizontalLayout.objectName = "horizontalLayout"
|
|
22
|
+
@label = Qt::Label.new(rubyRunnerProjectWidget)
|
|
23
|
+
@label.objectName = "label"
|
|
24
|
+
|
|
25
|
+
@horizontalLayout.addWidget(@label)
|
|
26
|
+
|
|
27
|
+
@_ruby__ruby = KDE::ComboBox.new(rubyRunnerProjectWidget)
|
|
28
|
+
@_ruby__ruby.objectName = "_ruby__ruby"
|
|
29
|
+
|
|
30
|
+
@horizontalLayout.addWidget(@_ruby__ruby)
|
|
31
|
+
|
|
32
|
+
@label.buddy = @_ruby__ruby
|
|
33
|
+
|
|
34
|
+
retranslateUi(rubyRunnerProjectWidget)
|
|
35
|
+
|
|
36
|
+
Qt::MetaObject.connectSlotsByName(rubyRunnerProjectWidget)
|
|
37
|
+
end # setupUi
|
|
38
|
+
|
|
39
|
+
def setup_ui(rubyRunnerProjectWidget)
|
|
40
|
+
setupUi(rubyRunnerProjectWidget)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def retranslateUi(rubyRunnerProjectWidget)
|
|
44
|
+
rubyRunnerProjectWidget.windowTitle = Qt::Application.translate("RubyRunnerProjectWidget", "Form", nil, Qt::Application::UnicodeUTF8)
|
|
45
|
+
@label.text = Qt::Application.translate("RubyRunnerProjectWidget", "&Ruby interpreter", nil, Qt::Application::UnicodeUTF8)
|
|
46
|
+
@_ruby__ruby.setProperty("read", Qt::Variant.new(Qt::Application.translate("RubyRunnerProjectWidget", "$interpreter=", nil, Qt::Application::UnicodeUTF8)))
|
|
47
|
+
@_ruby__ruby.setProperty("store", Qt::Variant.new(Qt::Application.translate("RubyRunnerProjectWidget", "current_text", nil, Qt::Application::UnicodeUTF8)))
|
|
48
|
+
end # retranslateUi
|
|
49
|
+
|
|
50
|
+
def retranslate_ui(rubyRunnerProjectWidget)
|
|
51
|
+
retranslateUi(rubyRunnerProjectWidget)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
module Ui
|
|
57
|
+
class RubyRunnerProjectWidget < Ui_RubyRunnerProjectWidget
|
|
58
|
+
end
|
|
59
|
+
end # module Ui
|
|
60
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>RubyRunnerProjectWidget</class>
|
|
4
|
+
<widget class="QWidget" name="RubyRunnerProjectWidget">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>414</width>
|
|
10
|
+
<height>34</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Form</string>
|
|
15
|
+
</property>
|
|
16
|
+
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
17
|
+
<item>
|
|
18
|
+
<widget class="QLabel" name="label">
|
|
19
|
+
<property name="text">
|
|
20
|
+
<string>&Ruby interpreter</string>
|
|
21
|
+
</property>
|
|
22
|
+
<property name="buddy">
|
|
23
|
+
<cstring>_ruby__ruby</cstring>
|
|
24
|
+
</property>
|
|
25
|
+
</widget>
|
|
26
|
+
</item>
|
|
27
|
+
<item>
|
|
28
|
+
<widget class="KComboBox" name="_ruby__ruby">
|
|
29
|
+
<property name="read" stdset="0">
|
|
30
|
+
<string>$interpreter=</string>
|
|
31
|
+
</property>
|
|
32
|
+
<property name="store" stdset="0">
|
|
33
|
+
<string>current_text</string>
|
|
34
|
+
</property>
|
|
35
|
+
</widget>
|
|
36
|
+
</item>
|
|
37
|
+
</layout>
|
|
38
|
+
</widget>
|
|
39
|
+
<customwidgets>
|
|
40
|
+
<customwidget>
|
|
41
|
+
<class>KComboBox</class>
|
|
42
|
+
<extends>QComboBox</extends>
|
|
43
|
+
<header>kcombobox.h</header>
|
|
44
|
+
</customwidget>
|
|
45
|
+
</customwidgets>
|
|
46
|
+
<resources/>
|
|
47
|
+
<connections/>
|
|
48
|
+
</ui>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
** Form generated from reading ui file 'ruby_runnner_plugin_option_widget.ui'
|
|
3
|
+
**
|
|
4
|
+
** Created: ven ott 29 17:39:04 2010
|
|
5
|
+
** by: Qt User Interface Compiler version 4.7.0
|
|
6
|
+
**
|
|
7
|
+
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
|
8
|
+
=end
|
|
9
|
+
|
|
10
|
+
class Ui_RubyRunnerPluginOptionWidget
|
|
11
|
+
attr_reader :horizontalLayout
|
|
12
|
+
attr_reader :label
|
|
13
|
+
attr_reader :text
|
|
14
|
+
|
|
15
|
+
def setupUi(rubyRunnerPluginOptionWidget)
|
|
16
|
+
if rubyRunnerPluginOptionWidget.objectName.nil?
|
|
17
|
+
rubyRunnerPluginOptionWidget.objectName = "rubyRunnerPluginOptionWidget"
|
|
18
|
+
end
|
|
19
|
+
rubyRunnerPluginOptionWidget.resize(400, 36)
|
|
20
|
+
@horizontalLayout = Qt::HBoxLayout.new(rubyRunnerPluginOptionWidget)
|
|
21
|
+
@horizontalLayout.objectName = "horizontalLayout"
|
|
22
|
+
@label = Qt::Label.new(rubyRunnerPluginOptionWidget)
|
|
23
|
+
@label.objectName = "label"
|
|
24
|
+
|
|
25
|
+
@horizontalLayout.addWidget(@label)
|
|
26
|
+
|
|
27
|
+
@text = KDE::LineEdit.new(rubyRunnerPluginOptionWidget)
|
|
28
|
+
@text.objectName = "text"
|
|
29
|
+
|
|
30
|
+
@horizontalLayout.addWidget(@text)
|
|
31
|
+
|
|
32
|
+
@label.buddy = @text
|
|
33
|
+
|
|
34
|
+
retranslateUi(rubyRunnerPluginOptionWidget)
|
|
35
|
+
|
|
36
|
+
Qt::MetaObject.connectSlotsByName(rubyRunnerPluginOptionWidget)
|
|
37
|
+
end # setupUi
|
|
38
|
+
|
|
39
|
+
def setup_ui(rubyRunnerPluginOptionWidget)
|
|
40
|
+
setupUi(rubyRunnerPluginOptionWidget)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def retranslateUi(rubyRunnerPluginOptionWidget)
|
|
44
|
+
rubyRunnerPluginOptionWidget.windowTitle = Qt::Application.translate("RubyRunnerPluginOptionWidget", "Form", nil, Qt::Application::UnicodeUTF8)
|
|
45
|
+
rubyRunnerPluginOptionWidget.setProperty("signal", Qt::Variant.new(Qt::Application.translate("RubyRunnerPluginOptionWidget", "text_changed(QString)", nil, Qt::Application::UnicodeUTF8)))
|
|
46
|
+
@label.text = Qt::Application.translate("RubyRunnerPluginOptionWidget", "Ruby &options", nil, Qt::Application::UnicodeUTF8)
|
|
47
|
+
end # retranslateUi
|
|
48
|
+
|
|
49
|
+
def retranslate_ui(rubyRunnerPluginOptionWidget)
|
|
50
|
+
retranslateUi(rubyRunnerPluginOptionWidget)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
module Ui
|
|
56
|
+
class RubyRunnerPluginOptionWidget < Ui_RubyRunnerPluginOptionWidget
|
|
57
|
+
end
|
|
58
|
+
end # module Ui
|
|
59
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>RubyRunnerPluginOptionWidget</class>
|
|
4
|
+
<widget class="QWidget" name="RubyRunnerPluginOptionWidget">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>400</width>
|
|
10
|
+
<height>36</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Form</string>
|
|
15
|
+
</property>
|
|
16
|
+
<property name="signal" stdset="0">
|
|
17
|
+
<string>text_changed(QString)</string>
|
|
18
|
+
</property>
|
|
19
|
+
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
20
|
+
<item>
|
|
21
|
+
<widget class="QLabel" name="label">
|
|
22
|
+
<property name="text">
|
|
23
|
+
<string>Ruby &options</string>
|
|
24
|
+
</property>
|
|
25
|
+
<property name="buddy">
|
|
26
|
+
<cstring>text</cstring>
|
|
27
|
+
</property>
|
|
28
|
+
</widget>
|
|
29
|
+
</item>
|
|
30
|
+
<item>
|
|
31
|
+
<widget class="KLineEdit" name="text"/>
|
|
32
|
+
</item>
|
|
33
|
+
</layout>
|
|
34
|
+
</widget>
|
|
35
|
+
<customwidgets>
|
|
36
|
+
<customwidget>
|
|
37
|
+
<class>KLineEdit</class>
|
|
38
|
+
<extends>QLineEdit</extends>
|
|
39
|
+
<header>klineedit.h</header>
|
|
40
|
+
</customwidget>
|
|
41
|
+
</customwidgets>
|
|
42
|
+
<resources/>
|
|
43
|
+
<connections/>
|
|
44
|
+
</ui>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: state
|
|
2
|
+
version: 0.0.1
|
|
3
|
+
about:
|
|
4
|
+
authors: [Stefano Crocco, stefano.crocco@alice.it]
|
|
5
|
+
license: gpl
|
|
6
|
+
description: Saves and restores open windows and projects and cursor positions between sessions
|
|
7
|
+
bug_address: http://github.com/stcrocco/ruber/issues
|
|
8
|
+
class: Ruber::State::Plugin
|
|
9
|
+
require: state
|
|
10
|
+
config_options:
|
|
11
|
+
state:
|
|
12
|
+
open_documents: {default: []}
|
|
13
|
+
open_projects: {default: []}
|
|
14
|
+
active_document: {default: nil}
|
|
15
|
+
restore_cursor_position: {default: true}
|
|
16
|
+
restore_project_files: {default: true}
|
|
17
|
+
startup_behaviour: {default: :restore_all}
|
|
18
|
+
project_options:
|
|
19
|
+
state:
|
|
20
|
+
open_documents: {default: [], type: session, scope: global}
|
|
21
|
+
active_document: {default: ~, type: session, scope: global}
|
|
22
|
+
cursor_position: {default: [0, 0], type: session, scope: document}
|
|
23
|
+
config_widgets:
|
|
24
|
+
- {class: Ruber::State::ConfigWidget, caption: General}
|
|
25
|
+
extensions:
|
|
26
|
+
state:
|
|
27
|
+
- {class: Ruber::State::DocumentExtension, scope: document}
|
|
28
|
+
- {class: Ruber::State::ProjectExtension, scope: global}
|
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
Copyright (C) 2010 by Stefano Crocco
|
|
3
|
+
stefano.crocco@alice.it
|
|
4
|
+
|
|
5
|
+
This program is free software; you can redistribute it andor modify
|
|
6
|
+
it under the terms of the GNU General Public License as published by
|
|
7
|
+
the Free Software Foundation; either version 2 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU General Public License
|
|
16
|
+
along with this program; if not, write to the
|
|
17
|
+
Free Software Foundation, Inc.,
|
|
18
|
+
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
19
|
+
=end
|
|
20
|
+
|
|
21
|
+
require 'ruber/plugin'
|
|
22
|
+
require 'yaml'
|
|
23
|
+
|
|
24
|
+
require 'facets/hash/mash'
|
|
25
|
+
|
|
26
|
+
require_relative 'ui/config_widget'
|
|
27
|
+
|
|
28
|
+
module Ruber
|
|
29
|
+
|
|
30
|
+
=begin rdoc
|
|
31
|
+
Plugin which allows Ruber to store and restore back its state.
|
|
32
|
+
|
|
33
|
+
In this context, the term _state_ means the open project and documents, the position
|
|
34
|
+
of the cursor in each document and the active document. All this data is stored
|
|
35
|
+
in the configuration file and in the project or document project files. Using
|
|
36
|
+
the API provided by this plugin, it is possible to restore a single document,
|
|
37
|
+
project or the whole application to the state it was when it was last closed.
|
|
38
|
+
|
|
39
|
+
In addition to providing an API for saving and restoring state, this plugin also
|
|
40
|
+
restores the full Ruber state when restoring a session and (according to the
|
|
41
|
+
user preferences) when the application starts up.
|
|
42
|
+
|
|
43
|
+
@api feature state
|
|
44
|
+
@plugin
|
|
45
|
+
=end
|
|
46
|
+
module State
|
|
47
|
+
|
|
48
|
+
=begin rdoc
|
|
49
|
+
Plugin object for the State plugin
|
|
50
|
+
|
|
51
|
+
@api_method #with
|
|
52
|
+
@api_method #restore
|
|
53
|
+
@api_method #restore_document
|
|
54
|
+
@api_method #restore_project
|
|
55
|
+
=end
|
|
56
|
+
class Plugin < Ruber::Plugin
|
|
57
|
+
|
|
58
|
+
=begin rdoc
|
|
59
|
+
@param [Ruber::PluginSpecification] psf the plugin specification object associated
|
|
60
|
+
with the plugin
|
|
61
|
+
=end
|
|
62
|
+
def initialize psf
|
|
63
|
+
super
|
|
64
|
+
@force_restore_project_files = nil
|
|
65
|
+
@force_restore_cursor_position = nil
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
=begin rdoc
|
|
69
|
+
Override of {PluginLike#delayed_initialize}
|
|
70
|
+
|
|
71
|
+
If the application is starting and there's no open project and a single, pristine
|
|
72
|
+
document, it uses the {#restore_last_state} method to restore the last state Ruber
|
|
73
|
+
was according to the user preferences.
|
|
74
|
+
|
|
75
|
+
@return [nil]
|
|
76
|
+
=end
|
|
77
|
+
def delayed_initialize
|
|
78
|
+
return unless Ruber[:app].starting?
|
|
79
|
+
if Ruber[:projects].to_a.empty? and Ruber[:docs].to_a.size == 1 and
|
|
80
|
+
Ruber[:docs][0].pristine?
|
|
81
|
+
restore_last_state
|
|
82
|
+
end
|
|
83
|
+
nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
=begin rdoc
|
|
87
|
+
Tells whether or not the cursor position should be restored.
|
|
88
|
+
|
|
89
|
+
This takes into account user settings and eventual requests made by the programmer
|
|
90
|
+
using the {#with} method
|
|
91
|
+
@return [Boolean] *true* if the cursor position should be restored and *false*
|
|
92
|
+
otherwise
|
|
93
|
+
=end
|
|
94
|
+
def restore_cursor_position?
|
|
95
|
+
if @force_restore_cursor_position.nil?
|
|
96
|
+
Ruber[:config][:state, :restore_cursor_position]
|
|
97
|
+
else @force_restore_cursor_position
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
=begin rdoc
|
|
102
|
+
Tells whether or not the open files in the project should be restored.
|
|
103
|
+
|
|
104
|
+
This takes into account user settings and eventual requests made by the programmer
|
|
105
|
+
using the {#with} method
|
|
106
|
+
@return [Boolean] *true* if the open files in the project should be restored and *false*
|
|
107
|
+
otherwise
|
|
108
|
+
=end
|
|
109
|
+
def restore_project_files?
|
|
110
|
+
if @force_restore_project_files.nil?
|
|
111
|
+
Ruber[:config][:state, :restore_project_files]
|
|
112
|
+
else @force_restore_project_files
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
=begin rdoc
|
|
117
|
+
Executes a block temporarily overriding the user's settings about what should be
|
|
118
|
+
restored and what shouldn't.
|
|
119
|
+
|
|
120
|
+
Nested calls to this method are allowed. By default, the outer call wins over the
|
|
121
|
+
inner, meaning that a value set by the inner call are only used if the outer
|
|
122
|
+
call didn't set that value. You can change this behaviour by passing the @:force@
|
|
123
|
+
option.
|
|
124
|
+
@param [Hash] hash the settings to change. All settings not specified here will
|
|
125
|
+
remain as chosen by the user
|
|
126
|
+
@option hash [Boolean] :force (false) if *true*, in case of a nested call to this
|
|
127
|
+
method, the values specified by the inner call will override values set by the
|
|
128
|
+
outer call.
|
|
129
|
+
@option hash [Boolean] :restore_cursor_position (false) whether or not the cursor position
|
|
130
|
+
in documents should be restored, regardless of what the user chose
|
|
131
|
+
@option hash [Boolean] :restore_project_files (false) whether or not the open
|
|
132
|
+
files in projects should be restored, regardless of what the user chose
|
|
133
|
+
@return [Object] the value returned by the block
|
|
134
|
+
=end
|
|
135
|
+
def with hash
|
|
136
|
+
old_doc = @force_restore_cursor_position
|
|
137
|
+
old_projects = @force_restore_project_files
|
|
138
|
+
if hash.has_key? :restore_cursor_position
|
|
139
|
+
if @force_restore_cursor_position.nil? or hash[:force]
|
|
140
|
+
@force_restore_cursor_position = hash[:restore_cursor_position] || false
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
if hash.has_key? :restore_project_files
|
|
144
|
+
if @force_restore_project_files.nil? or hash[:force]
|
|
145
|
+
@force_restore_project_files = hash[:restore_project_files] || false
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
begin yield
|
|
149
|
+
ensure
|
|
150
|
+
@force_restore_cursor_position = old_doc
|
|
151
|
+
@force_restore_project_files = old_projects
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
=begin rdoc
|
|
156
|
+
Restores the given document
|
|
157
|
+
|
|
158
|
+
See {DocumentExtension#restore} for more information
|
|
159
|
+
|
|
160
|
+
@param [Ruber::Document] doc the document to restore
|
|
161
|
+
@return [nil]
|
|
162
|
+
=end
|
|
163
|
+
def restore_document doc
|
|
164
|
+
doc.extension(:state).restore
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
=begin rdoc
|
|
168
|
+
Restores the given global project
|
|
169
|
+
|
|
170
|
+
See {ProjectExtension#restore} for more information
|
|
171
|
+
|
|
172
|
+
@param [Ruber::Project] prj the document to restore
|
|
173
|
+
@return [nil]
|
|
174
|
+
=end
|
|
175
|
+
def restore_project prj
|
|
176
|
+
prj.extension(:state).restore
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
=begin rdoc
|
|
180
|
+
Restores the open projects according to a given configuration object
|
|
181
|
+
|
|
182
|
+
This method is called both when the session is restored and when ruber starts
|
|
183
|
+
up (if the user chose so).
|
|
184
|
+
|
|
185
|
+
@param [#[Symbol, Symbol]] conf the object from which to read the state. See {#restore}
|
|
186
|
+
for more information
|
|
187
|
+
@return [nil]
|
|
188
|
+
=end
|
|
189
|
+
def restore_projects conf = Ruber[:config]
|
|
190
|
+
projects = Ruber[:projects]
|
|
191
|
+
projects.to_a.each{|pr| projects.close_project pr}
|
|
192
|
+
file = conf[:state, :open_projects][0]
|
|
193
|
+
if file
|
|
194
|
+
prj = Ruber[:main_window].safe_open_project file
|
|
195
|
+
Ruber[:projects].current_project = prj if prj
|
|
196
|
+
end
|
|
197
|
+
nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
=begin rdoc
|
|
201
|
+
Restores the open documents according to a given configuration object
|
|
202
|
+
|
|
203
|
+
This method is called both when the session is restored and when ruber starts
|
|
204
|
+
up (if the user chose so).
|
|
205
|
+
|
|
206
|
+
@param [#[Symbol, Symbol]] conf the object from which to read the state. See {#restore}
|
|
207
|
+
for more information
|
|
208
|
+
@return [nil]
|
|
209
|
+
=end
|
|
210
|
+
def restore_documents config = Ruber[:config]
|
|
211
|
+
Ruber[:docs].close_all
|
|
212
|
+
files = config[:state, :open_documents]
|
|
213
|
+
return if files.empty?
|
|
214
|
+
active_file = config[:state, :active_document]
|
|
215
|
+
active_file = files[-1] unless files.include? active_file
|
|
216
|
+
mw = Ruber[:main_window]
|
|
217
|
+
mw.without_activating do
|
|
218
|
+
files.each{|f| ed = mw.editor_for! f}
|
|
219
|
+
mw.display_document active_file
|
|
220
|
+
end
|
|
221
|
+
nil
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
=begin rdoc
|
|
225
|
+
Restores ruber state according to the user settings and the data stored in the given object
|
|
226
|
+
|
|
227
|
+
The argument can be any object which has a @[]@ method which takes two arguments
|
|
228
|
+
and behaves as the hash returned by {#gather_settings}.
|
|
229
|
+
|
|
230
|
+
@param [#[Symbol, Symbol]] conf the object from which to read the state
|
|
231
|
+
@return [nil]
|
|
232
|
+
=end
|
|
233
|
+
def restore cfg = Ruber[:config]
|
|
234
|
+
if !cfg[:state, :open_projects].empty? then restore_projects cfg
|
|
235
|
+
else restore_documents cfg
|
|
236
|
+
end
|
|
237
|
+
nil
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
=begin rdoc
|
|
241
|
+
Restores Ruber's state according to the user settings so that it matches the state
|
|
242
|
+
it was when it was last shut down
|
|
243
|
+
|
|
244
|
+
The state information is read from the global configuration object.
|
|
245
|
+
|
|
246
|
+
@return [nil]
|
|
247
|
+
=end
|
|
248
|
+
def restore_last_state
|
|
249
|
+
case Ruber[:config][:state, :startup_behaviour]
|
|
250
|
+
when :restore_all then restore
|
|
251
|
+
when :restore_projects_only
|
|
252
|
+
with(:restore_project_files => false){restore_projects}
|
|
253
|
+
when :restore_documents_only then restore_documents
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
=begin rdoc
|
|
258
|
+
Restores Ruber's state as it was in last session
|
|
259
|
+
|
|
260
|
+
Since this method deals with session management, it ignores the user settings
|
|
261
|
+
|
|
262
|
+
@return [nil]
|
|
263
|
+
=end
|
|
264
|
+
def restore_session data
|
|
265
|
+
hash = data['State'] || {:open_projects => [], :open_documents => [], :active_document => nil}
|
|
266
|
+
hash = hash.map_hash{|k, v| [[:state, k], v]}
|
|
267
|
+
def hash.[] k, v
|
|
268
|
+
super [k, v]
|
|
269
|
+
end
|
|
270
|
+
with(:restore_project_files => true, :restore_cursor_position => true, :force => true) do
|
|
271
|
+
restore hash
|
|
272
|
+
end
|
|
273
|
+
nil
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
=begin rdoc
|
|
277
|
+
Saves Ruber's state to the global config object
|
|
278
|
+
|
|
279
|
+
@return [nil]
|
|
280
|
+
=end
|
|
281
|
+
def save_settings
|
|
282
|
+
h = gather_settings
|
|
283
|
+
cfg = Ruber[:config]
|
|
284
|
+
[:open_projects, :open_documents, :active_document].each do |i|
|
|
285
|
+
cfg[:state, i] = h[i]
|
|
286
|
+
end
|
|
287
|
+
nil
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
=begin rdoc
|
|
291
|
+
Override of {PluginLike#session_data}
|
|
292
|
+
|
|
293
|
+
@return [Hash] a hash containing the session information under the @State@ key
|
|
294
|
+
=end
|
|
295
|
+
def session_data
|
|
296
|
+
{'State' => gather_settings}
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
private
|
|
300
|
+
|
|
301
|
+
=begin rdoc
|
|
302
|
+
Creates a hash with all the data needed to restore Ruber's state
|
|
303
|
+
|
|
304
|
+
@return [Hash] a hash with the following keys:
|
|
305
|
+
* @:open_projects@: an array containing the project file of each open project.
|
|
306
|
+
the first entry is the active project
|
|
307
|
+
* @:open_documents@: an array with the name of the file corresponding to each
|
|
308
|
+
open document (documents without an associated file can't be restored and aren't
|
|
309
|
+
included). The order is that of opening
|
|
310
|
+
* @:active_document@: the name of the file associated with the active document or
|
|
311
|
+
*nil* if there's no open document
|
|
312
|
+
=end
|
|
313
|
+
def gather_settings
|
|
314
|
+
res = {}
|
|
315
|
+
projects = Ruber[:projects].projects.map{|pr| pr.project_file}
|
|
316
|
+
unless projects.empty?
|
|
317
|
+
active_prj = Ruber[:projects].current
|
|
318
|
+
projects.unshift projects.delete(active_prj.project_file) if active_prj
|
|
319
|
+
end
|
|
320
|
+
res[:open_projects] = projects
|
|
321
|
+
docs = Ruber[:docs].documents.map{|doc| doc.path}.select{|path| !path.empty?}
|
|
322
|
+
res[:open_documents] = docs
|
|
323
|
+
current_doc = Ruber[:main_window].current_document.path rescue ''
|
|
324
|
+
res[:active_document] = current_doc.empty? ? nil : current_doc
|
|
325
|
+
res
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
=begin rdoc
|
|
331
|
+
Extension for documents needed by the State plugin
|
|
332
|
+
|
|
333
|
+
The scope of this extension is to save and restore the position of the cursor
|
|
334
|
+
in the document
|
|
335
|
+
=end
|
|
336
|
+
class DocumentExtension < Qt::Object
|
|
337
|
+
|
|
338
|
+
include Extension
|
|
339
|
+
|
|
340
|
+
slots :auto_restore
|
|
341
|
+
|
|
342
|
+
=begin rdoc
|
|
343
|
+
@param [Ruber::DocumentProject] prj the project associated with the document
|
|
344
|
+
=end
|
|
345
|
+
def initialize prj
|
|
346
|
+
super
|
|
347
|
+
@project = prj
|
|
348
|
+
@document = prj.document
|
|
349
|
+
connect @document, SIGNAL('view_created(QObject*, QObject*)'), self, SLOT(:auto_restore)
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
=begin rdoc
|
|
353
|
+
Restores the position of the cursor according to the value saved in the document's
|
|
354
|
+
own project
|
|
355
|
+
|
|
356
|
+
It does nothing if the document isn't associated with a view
|
|
357
|
+
@return [nil]
|
|
358
|
+
=end
|
|
359
|
+
def restore
|
|
360
|
+
view = @document.view
|
|
361
|
+
return unless view
|
|
362
|
+
pos = @document.own_project[:state, :cursor_position]
|
|
363
|
+
view.go_to *pos
|
|
364
|
+
nil
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
=begin rdoc
|
|
368
|
+
Saves the position of the cursor in the document's own project
|
|
369
|
+
|
|
370
|
+
It does nothing if the document isn't associated with a view
|
|
371
|
+
@return [nil]
|
|
372
|
+
=end
|
|
373
|
+
def save_settings
|
|
374
|
+
view = @document.view
|
|
375
|
+
pos = if view
|
|
376
|
+
cur = view.cursor_position
|
|
377
|
+
[cur.line, cur.column]
|
|
378
|
+
else [0,0]
|
|
379
|
+
end
|
|
380
|
+
@project[:state, :cursor_position] = pos
|
|
381
|
+
nil
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
private
|
|
385
|
+
|
|
386
|
+
=begin rdoc
|
|
387
|
+
Moves the cursor in a new view to the position stored in the document's own project
|
|
388
|
+
|
|
389
|
+
It does nothing if the user chose not to have the position restored when opening
|
|
390
|
+
a document.
|
|
391
|
+
@return [nil]
|
|
392
|
+
=end
|
|
393
|
+
def auto_restore
|
|
394
|
+
restore if Ruber[:state].restore_cursor_position?
|
|
395
|
+
nil
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
=begin rdoc
|
|
401
|
+
Extension for projects needed by the State plugin
|
|
402
|
+
|
|
403
|
+
The scope of this extension is to save and restore the open documents associated
|
|
404
|
+
with projects
|
|
405
|
+
=end
|
|
406
|
+
class ProjectExtension < Qt::Object
|
|
407
|
+
|
|
408
|
+
include Extension
|
|
409
|
+
|
|
410
|
+
slots :auto_restore
|
|
411
|
+
|
|
412
|
+
=begin rdoc
|
|
413
|
+
@param [Ruber::Project] prj the project associated with the extension
|
|
414
|
+
=end
|
|
415
|
+
def initialize prj
|
|
416
|
+
super
|
|
417
|
+
@project = prj
|
|
418
|
+
connect @project, SIGNAL(:activated), self, SLOT(:auto_restore)
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
=begin rdoc
|
|
422
|
+
Opens all the files associated with the proejct which were opened last time the
|
|
423
|
+
project's state was changed
|
|
424
|
+
|
|
425
|
+
Any already open document is closed (after saving)
|
|
426
|
+
|
|
427
|
+
@return [nil]
|
|
428
|
+
=end
|
|
429
|
+
|
|
430
|
+
def restore
|
|
431
|
+
files = @project[:state, :open_documents]
|
|
432
|
+
Ruber[:docs].close_all
|
|
433
|
+
return if files.empty?
|
|
434
|
+
active_file = @project[:state, :active_document]
|
|
435
|
+
active_file = files[-1] unless files.include? active_file
|
|
436
|
+
mw = Ruber[:main_window]
|
|
437
|
+
mw.without_activating do
|
|
438
|
+
files.each{|f| mw.editor_for! f}
|
|
439
|
+
end
|
|
440
|
+
mw.display_document active_file
|
|
441
|
+
nil
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
=begin rdoc
|
|
445
|
+
Saves the list of open project files to the project
|
|
446
|
+
|
|
447
|
+
@return [nil]
|
|
448
|
+
=end
|
|
449
|
+
def save_settings
|
|
450
|
+
files = Ruber[:docs].documents_with_file.map{|d| d.path}
|
|
451
|
+
active = Ruber[:main_window].current_document
|
|
452
|
+
active_path = (active.nil? or active.path.empty?) ? nil : active.path
|
|
453
|
+
@project[:state, :open_documents] = files
|
|
454
|
+
@project[:state, :active_document] = active_path
|
|
455
|
+
nil
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
private
|
|
459
|
+
|
|
460
|
+
=begin rdoc
|
|
461
|
+
Opens all the files associated with the proejct which were opened last time the
|
|
462
|
+
project's state was changed when the project is opened.
|
|
463
|
+
|
|
464
|
+
Any already open document is closed (after saving).
|
|
465
|
+
|
|
466
|
+
It does nothing if the user chose not restore open project files when opening a
|
|
467
|
+
project.
|
|
468
|
+
@return [nil]
|
|
469
|
+
=end
|
|
470
|
+
def auto_restore
|
|
471
|
+
@project.disconnect SIGNAL(:activated), self, SLOT(:auto_restore)
|
|
472
|
+
restore if Ruber[:state].restore_project_files?
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
=begin rdoc
|
|
478
|
+
Configuration widget for the State plugin
|
|
479
|
+
=end
|
|
480
|
+
class ConfigWidget < Qt::Widget
|
|
481
|
+
|
|
482
|
+
=begin rdoc
|
|
483
|
+
A list of different behaviour the plugin can have at startup
|
|
484
|
+
=end
|
|
485
|
+
STARTUP_BEHAVIOURS = [:restore_all, :restore_documents_only, :restore_projects_only, :restore_nothing]
|
|
486
|
+
|
|
487
|
+
=begin rdoc
|
|
488
|
+
@param [Qt::Widget, nil] parent the parent widget
|
|
489
|
+
=end
|
|
490
|
+
def initialize parent = nil
|
|
491
|
+
super
|
|
492
|
+
@ui = Ui::StateConfigWidget.new
|
|
493
|
+
@ui.setup_ui self
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
=begin rdoc
|
|
497
|
+
Selects the correct startup behaviour in the associated widget
|
|
498
|
+
|
|
499
|
+
@param [Symbol] val the symbol stored in the configuration object. It must be one
|
|
500
|
+
of the entries in {STARTUP_BEHAVIOURS}
|
|
501
|
+
=end
|
|
502
|
+
def startup_behaviour= val
|
|
503
|
+
@ui._state__startup_behaviour.current_index = STARTUP_BEHAVIOURS.index val
|
|
504
|
+
nil
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
=begin rdoc
|
|
508
|
+
Returns the symbol associated with the startup behaviour selected in the widget
|
|
509
|
+
@return [Symbol] the entry in {STARTUP_BEHAVIOURS} corresponding to the selected
|
|
510
|
+
entry in the _Startup behaviour_ widget
|
|
511
|
+
=end
|
|
512
|
+
def startup_behaviour
|
|
513
|
+
STARTUP_BEHAVIOURS[@ui._state__startup_behaviour.current_index]
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
end
|