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
@@ -0,0 +1,11 @@
|
|
1
|
+
name: world
|
2
|
+
description: Container for all the environments
|
3
|
+
require: [world, environment]
|
4
|
+
class: Ruber::World::World
|
5
|
+
config_options:
|
6
|
+
workspace:
|
7
|
+
close_buttons: {default: 'true', type: bool}
|
8
|
+
config_widgets:
|
9
|
+
- {caption: Workspace, pixmap: workspace.png, class: Ruber::World::WorkspaceSettingsWidget}
|
10
|
+
extensions:
|
11
|
+
environment: {class: Ruber::World::Environment, scope: global}
|
@@ -0,0 +1,131 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (C) 2011 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
|
+
module Ruber
|
22
|
+
|
23
|
+
module World
|
24
|
+
|
25
|
+
=begin rdoc
|
26
|
+
Class whose task is to ensure that there's only one project open for any given
|
27
|
+
project file.
|
28
|
+
|
29
|
+
To create a new project, call the {#project} method instead of using {Project}.new.
|
30
|
+
If a project for the given file already exists, it'll be returned, otherwise a
|
31
|
+
new project will be created.
|
32
|
+
=end
|
33
|
+
class ProjectFactory < Qt::Object
|
34
|
+
|
35
|
+
=begin rdoc
|
36
|
+
Exception raised when the name requested for a project file is different for the
|
37
|
+
name contained in the project itself
|
38
|
+
=end
|
39
|
+
class MismatchingNameError < StandardError
|
40
|
+
|
41
|
+
=begin rdoc
|
42
|
+
@return [String] the project file
|
43
|
+
=end
|
44
|
+
attr_reader :file
|
45
|
+
|
46
|
+
=begin rdoc
|
47
|
+
@return [String] the requested project name
|
48
|
+
=end
|
49
|
+
attr_reader :requested_name
|
50
|
+
|
51
|
+
=begin rdoc
|
52
|
+
@return [String] the project name contained in the project file
|
53
|
+
=end
|
54
|
+
attr_reader :actual_name
|
55
|
+
|
56
|
+
=begin rdoc
|
57
|
+
@param [String] file the project file
|
58
|
+
@param [String] requested_name the name requested for the project
|
59
|
+
@param [String] actual_name the project name contained in the project
|
60
|
+
=end
|
61
|
+
def initialize file, requested_name, actual_name
|
62
|
+
@file = file
|
63
|
+
@requested_name = requested_name
|
64
|
+
@actual_name = actual_name
|
65
|
+
super "A project associated with #{file} exists, but the corresponding project name is #{actual_name} instead of #{requested_name}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
=begin rdoc
|
70
|
+
Signal emitted when a new project object is created
|
71
|
+
|
72
|
+
The signal is emitted when a new project object is created, either from an existing project
|
73
|
+
file or for a new project file.
|
74
|
+
@param [Project] prj the project object
|
75
|
+
=end
|
76
|
+
signals 'project_created(QObject*)'
|
77
|
+
|
78
|
+
=begin rdoc
|
79
|
+
@param [Qt::Object,nil] parent the parent object
|
80
|
+
=end
|
81
|
+
def initialize parent = nil
|
82
|
+
super
|
83
|
+
@projects = {}
|
84
|
+
end
|
85
|
+
|
86
|
+
=begin rdoc
|
87
|
+
Retrieves the project associated with a given project file
|
88
|
+
|
89
|
+
If a project associated with the project file _file_ already exists, that project
|
90
|
+
is returned. Otherwise, a new project is created. In this case, the {#project_created}
|
91
|
+
signal is emitted
|
92
|
+
|
93
|
+
@param (see Ruber::Project#initialize)
|
94
|
+
@return [Project] a project associated with _file_
|
95
|
+
@raise [MismatchingNameError] if _name_ is specified, a project associated with
|
96
|
+
_file_ already exists but _name_ and the name of the existing project are different
|
97
|
+
=end
|
98
|
+
def project file, name = nil
|
99
|
+
prj = @projects[file]
|
100
|
+
if prj
|
101
|
+
if name and prj.project_name != name
|
102
|
+
raise MismatchingNameError.new file, name, prj.project_name
|
103
|
+
end
|
104
|
+
prj
|
105
|
+
else
|
106
|
+
prj = Project.new file, name
|
107
|
+
connect prj, SIGNAL('closing(QObject*)'), self, SLOT('project_closing(QObject*)')
|
108
|
+
@projects[prj.project_file] = prj
|
109
|
+
emit project_created prj
|
110
|
+
prj
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
=begin rdoc
|
117
|
+
Method called whenever a project is closed
|
118
|
+
|
119
|
+
It ensures that the list of open projects is up to date
|
120
|
+
@return [nil]
|
121
|
+
=end
|
122
|
+
def project_closing prj
|
123
|
+
@projects.delete prj.project_file
|
124
|
+
nil
|
125
|
+
end
|
126
|
+
slots 'project_closing(QObject*)'
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
@@ -0,0 +1,265 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (C) 2011 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
|
+
module Ruber
|
22
|
+
|
23
|
+
module World
|
24
|
+
|
25
|
+
=begin rdoc
|
26
|
+
A list of projects
|
27
|
+
|
28
|
+
It's an immutable @Enumerable@ class with some convenience methods for dealing
|
29
|
+
with projects.
|
30
|
+
|
31
|
+
The projects in the list are set in the constructor and can't be changed later.
|
32
|
+
|
33
|
+
The order of projects won't be kept.
|
34
|
+
|
35
|
+
@note This list can't contain more than one project with the same project file.
|
36
|
+
=end
|
37
|
+
class ProjectList
|
38
|
+
|
39
|
+
include Enumerable
|
40
|
+
|
41
|
+
=begin rdoc
|
42
|
+
@param [Array<Project>, ProjectList] prjs the projects to insert in the
|
43
|
+
list when created. If it's a {ProjectList}, changes to _prjs_ will be
|
44
|
+
reflected by the newly created object. This won't happen if _prjs_ is an array.
|
45
|
+
|
46
|
+
If the list contains multiple projects with the same project file, only the last
|
47
|
+
one will be inserted in the list
|
48
|
+
=end
|
49
|
+
def initialize prjs
|
50
|
+
if prjs.is_a? ProjectList then @projects = prjs.project_hash
|
51
|
+
else @projects = Hash[prjs.map{|prj| [prj.project_file, prj]}]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
=begin rdoc
|
56
|
+
Iterates on the projects
|
57
|
+
|
58
|
+
@overload each{|prj| }
|
59
|
+
Calls the block once for each project in the list (the order is arbitrary)
|
60
|
+
@yieldparam [Project] prj the projects in the list
|
61
|
+
@return [ProjectList] *self*
|
62
|
+
@overload each
|
63
|
+
@return [Enumerator] an enumerator which iterates on the projects
|
64
|
+
@return [ProjectList,Enumerator]
|
65
|
+
=end
|
66
|
+
def each &blk
|
67
|
+
if block_given?
|
68
|
+
@projects.each_value &blk
|
69
|
+
self
|
70
|
+
else to_enum
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
=begin rdoc
|
75
|
+
Whether or not the list is empty
|
76
|
+
@return [Boolean] *true* if the list is empty and *false* otherwise
|
77
|
+
=end
|
78
|
+
def empty?
|
79
|
+
@projects.empty?
|
80
|
+
end
|
81
|
+
|
82
|
+
=begin rdoc
|
83
|
+
@return [Integer] the number of projects in the list
|
84
|
+
=end
|
85
|
+
def size
|
86
|
+
@projects.size
|
87
|
+
end
|
88
|
+
|
89
|
+
=begin rdoc
|
90
|
+
Comparison operator
|
91
|
+
|
92
|
+
@param [Object] other the object to compare *self* with
|
93
|
+
@return [Boolean] *true* if _other_ is either an @Array@ or a {ProjectList}
|
94
|
+
containing the same elements as *self* and *false* otherwise
|
95
|
+
=end
|
96
|
+
def == other
|
97
|
+
case other
|
98
|
+
when ProjectList then @projects == other.project_hash
|
99
|
+
when Array
|
100
|
+
@projects.values.sort_by(&:object_id) == other.sort_by(&:object_id)
|
101
|
+
else false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
=begin rdoc
|
106
|
+
Comparison operator used by Hash
|
107
|
+
|
108
|
+
@param [Object] other the object to compare *self* with
|
109
|
+
@return [Boolean] *true* if _other_ is a {ProjectList} containing the
|
110
|
+
same elements as *self* and *false* otherwise
|
111
|
+
=end
|
112
|
+
def eql? other
|
113
|
+
other.is_a?(ProjectList) ? @projects.eql?(other.project_hash) : false
|
114
|
+
end
|
115
|
+
|
116
|
+
=begin rdoc
|
117
|
+
Override of @Object#hash@
|
118
|
+
|
119
|
+
@return [Integer] the hash value for *self*
|
120
|
+
=end
|
121
|
+
def hash
|
122
|
+
@projects.hash
|
123
|
+
end
|
124
|
+
|
125
|
+
=begin rdoc
|
126
|
+
Element access
|
127
|
+
|
128
|
+
@overload [] filename
|
129
|
+
Retrieves the project for the given project file
|
130
|
+
@param [String] filename the absolute path of the project file. It must start
|
131
|
+
with a slash
|
132
|
+
@return [Project,nil] the project having _filename_ as project file or *nil* if
|
133
|
+
no project having that project file is in the list
|
134
|
+
@overload [] name
|
135
|
+
Retrieves the project having the given project name
|
136
|
+
@param [String] name the project name. It must not start with a slash
|
137
|
+
@return [Project,nil] the project having the given project name or *nil* if no
|
138
|
+
such project exists in the list. If there is more than one document with the
|
139
|
+
same project name, one of them is returned
|
140
|
+
@return [Project,nil]
|
141
|
+
=end
|
142
|
+
def [] arg
|
143
|
+
if arg.start_with? '/' then @projects[arg]
|
144
|
+
else
|
145
|
+
prj = @projects.find{|i| i[1].project_name == arg}
|
146
|
+
prj ? prj[1] : nil
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
protected
|
151
|
+
|
152
|
+
=begin rdoc
|
153
|
+
@return [Hash{String=>Project}] the internal hash used to keep trace of the projects
|
154
|
+
=end
|
155
|
+
def project_hash
|
156
|
+
@projects
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
=begin rdoc
|
162
|
+
A {ProjectList} which allows to change the contents of the list.
|
163
|
+
=end
|
164
|
+
class MutableProjectList < ProjectList
|
165
|
+
|
166
|
+
=begin rdoc
|
167
|
+
@param [Array<Project>, ProjectList] prjs the projects to insert in the
|
168
|
+
list when created. Further changes to _prjs_ won't change the new instance and
|
169
|
+
vice versa
|
170
|
+
=end
|
171
|
+
def initialize prjs = []
|
172
|
+
@projects = Hash[prjs.map{|prj| [prj.project_name, prj]}]
|
173
|
+
end
|
174
|
+
|
175
|
+
=begin rdoc
|
176
|
+
Override of @Object#dup@
|
177
|
+
@return [MutableProjectList] a duplicate of *self*
|
178
|
+
=end
|
179
|
+
def dup
|
180
|
+
self.class.new self
|
181
|
+
end
|
182
|
+
|
183
|
+
=begin rdoc
|
184
|
+
Override of @Object#clone@
|
185
|
+
@return [MutableProjectList] a duplicate of *self*
|
186
|
+
=end
|
187
|
+
def clone
|
188
|
+
res = self.class.new self
|
189
|
+
if frozen?
|
190
|
+
res.freeze
|
191
|
+
res.project_hash.freeze
|
192
|
+
end
|
193
|
+
res
|
194
|
+
end
|
195
|
+
|
196
|
+
=begin rdoc
|
197
|
+
Adds projects to the list
|
198
|
+
|
199
|
+
@param [Array<Project,Array<Project>>] projects the projects to add. If it contains
|
200
|
+
nested arrays, they'll be flattened. If the list contains multiple projects with
|
201
|
+
the same project file, only the last one will be kept (if a project with the same
|
202
|
+
project name was already in the list, it'll be overwritten)
|
203
|
+
@return [MutableProjectList] *self*
|
204
|
+
=end
|
205
|
+
def add *projects
|
206
|
+
projects.flatten.each do |prj|
|
207
|
+
@projects[prj.project_file] = prj
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
=begin rdoc
|
212
|
+
Adds the projects contained in another list to this list
|
213
|
+
|
214
|
+
@param [Array<Project>, ProjectList] other the list whose contents should
|
215
|
+
be added to this list contents
|
216
|
+
@return [MutableProjectList] *self*
|
217
|
+
=end
|
218
|
+
def merge! prjs
|
219
|
+
if prjs.is_a? ProjectList then @projects.merge! prjs.project_hash
|
220
|
+
else
|
221
|
+
@projects.merge! Hash[prjs.map{|prj| [prj.project_file, prj]}]
|
222
|
+
end
|
223
|
+
self
|
224
|
+
end
|
225
|
+
|
226
|
+
=begin rdoc
|
227
|
+
Removes a project from the list
|
228
|
+
|
229
|
+
If the given project isn't in the list, nothing is done
|
230
|
+
|
231
|
+
@param [Project] doc the project to remove
|
232
|
+
@return [Project,nil] the removed project or *nil* if no project was removed
|
233
|
+
=end
|
234
|
+
def remove prj
|
235
|
+
@projects.delete prj.project_file
|
236
|
+
end
|
237
|
+
|
238
|
+
=begin rdoc
|
239
|
+
Removes all the elements from the list
|
240
|
+
|
241
|
+
@return [MutableProjectList] *self*
|
242
|
+
=end
|
243
|
+
def clear
|
244
|
+
@projects.clear
|
245
|
+
self
|
246
|
+
end
|
247
|
+
|
248
|
+
=begin rdoc
|
249
|
+
Removes from the list all the projects for which the block returns true
|
250
|
+
|
251
|
+
@yieldparam [Project] prj the projects in the list
|
252
|
+
@yieldreturn [Boolean] *true* for projects which should be removed from the list
|
253
|
+
and *false* otherwise
|
254
|
+
@return [MutableProjectList] *self*
|
255
|
+
=end
|
256
|
+
def delete_if &blk
|
257
|
+
@projects.delete_if{|_, prj| blk.call prj}
|
258
|
+
self
|
259
|
+
end
|
260
|
+
|
261
|
+
end
|
262
|
+
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
=begin
|
2
|
+
** Form generated from reading ui file 'workspace_settings_widget.ui'
|
3
|
+
**
|
4
|
+
** Created: gio apr 21 20:42:42 2011
|
5
|
+
** by: Qt User Interface Compiler version 4.7.2
|
6
|
+
**
|
7
|
+
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
8
|
+
=end
|
9
|
+
|
10
|
+
class Ui_WorkspaceSettingsWidgetBase
|
11
|
+
attr_reader :verticalLayout
|
12
|
+
attr_reader :_workspace__close_buttons
|
13
|
+
|
14
|
+
def setupUi(workspaceSettingsWidgetBase)
|
15
|
+
if workspaceSettingsWidgetBase.objectName.nil?
|
16
|
+
workspaceSettingsWidgetBase.objectName = "workspaceSettingsWidgetBase"
|
17
|
+
end
|
18
|
+
workspaceSettingsWidgetBase.resize(400, 35)
|
19
|
+
@verticalLayout = Qt::VBoxLayout.new(workspaceSettingsWidgetBase)
|
20
|
+
@verticalLayout.objectName = "verticalLayout"
|
21
|
+
@_workspace__close_buttons = Qt::CheckBox.new(workspaceSettingsWidgetBase)
|
22
|
+
@_workspace__close_buttons.objectName = "_workspace__close_buttons"
|
23
|
+
|
24
|
+
@verticalLayout.addWidget(@_workspace__close_buttons)
|
25
|
+
|
26
|
+
|
27
|
+
retranslateUi(workspaceSettingsWidgetBase)
|
28
|
+
|
29
|
+
Qt::MetaObject.connectSlotsByName(workspaceSettingsWidgetBase)
|
30
|
+
end # setupUi
|
31
|
+
|
32
|
+
def setup_ui(workspaceSettingsWidgetBase)
|
33
|
+
setupUi(workspaceSettingsWidgetBase)
|
34
|
+
end
|
35
|
+
|
36
|
+
def retranslateUi(workspaceSettingsWidgetBase)
|
37
|
+
workspaceSettingsWidgetBase.windowTitle = Qt::Application.translate("WorkspaceSettingsWidgetBase", "Form", nil, Qt::Application::UnicodeUTF8)
|
38
|
+
@_workspace__close_buttons.text = Qt::Application.translate("WorkspaceSettingsWidgetBase", "&Display close buttons on tabs", nil, Qt::Application::UnicodeUTF8)
|
39
|
+
end # retranslateUi
|
40
|
+
|
41
|
+
def retranslate_ui(workspaceSettingsWidgetBase)
|
42
|
+
retranslateUi(workspaceSettingsWidgetBase)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
module Ui
|
48
|
+
class WorkspaceSettingsWidgetBase < Ui_WorkspaceSettingsWidgetBase
|
49
|
+
end
|
50
|
+
end # module Ui
|
51
|
+
|