ruber 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. data/CHANGES +25 -0
  2. data/bin/ruber +0 -0
  3. data/data/share/apps/ruber/ruberui.rc +15 -1
  4. data/data/share/icons/{ruber.png → ruber-old.pgn} +0 -0
  5. data/lib/ruber/application/application.rb +216 -73
  6. data/lib/ruber/application/plugin.yaml +2 -2
  7. data/lib/ruber/document_project.rb +25 -5
  8. data/lib/ruber/documents/document_list.rb +11 -15
  9. data/lib/ruber/editor/document.rb +106 -50
  10. data/lib/ruber/editor/editor_view.rb +4 -2
  11. data/lib/ruber/external_program_plugin.rb +8 -0
  12. data/lib/ruber/kde_config_option_backend.rb +12 -4
  13. data/lib/ruber/kde_sugar.rb +35 -1
  14. data/lib/ruber/main_window/choose_plugins_dlg.rb +10 -10
  15. data/lib/ruber/main_window/hint_solver.rb +263 -0
  16. data/lib/ruber/main_window/main_window.rb +462 -206
  17. data/lib/ruber/main_window/main_window_actions.rb +228 -62
  18. data/lib/ruber/main_window/main_window_internal.rb +169 -115
  19. data/lib/ruber/main_window/plugin.yaml +13 -3
  20. data/lib/ruber/main_window/save_modified_files_dlg.rb +1 -1
  21. data/lib/ruber/main_window/ui/choose_plugins_widget.rb +1 -1
  22. data/lib/ruber/main_window/ui/main_window_settings_widget.rb +1 -1
  23. data/lib/ruber/main_window/ui/new_project_widget.rb +1 -1
  24. data/lib/ruber/main_window/ui/open_file_in_project_dlg.rb +1 -1
  25. data/lib/ruber/main_window/ui/output_color_widget.rb +1 -1
  26. data/lib/ruber/main_window/ui/workspace_settings_widget.rb +51 -0
  27. data/lib/ruber/main_window/ui/workspace_settings_widget.ui +28 -0
  28. data/lib/ruber/main_window/view_manager.rb +418 -0
  29. data/lib/ruber/main_window/workspace.png +0 -0
  30. data/lib/ruber/output_widget.rb +43 -37
  31. data/lib/ruber/pane.rb +621 -0
  32. data/lib/ruber/plugin_specification_reader.rb +8 -1
  33. data/lib/ruber/projects/project_files_list.rb +6 -0
  34. data/lib/ruber/projects/ui/project_files_rule_chooser_widget.rb +1 -1
  35. data/lib/ruber/projects/ui/project_files_widget.rb +1 -1
  36. data/lib/ruber/qt_sugar.rb +94 -4
  37. data/lib/ruber/utils.rb +16 -7
  38. data/lib/ruber/version.rb +2 -2
  39. data/plugins/autosave/autosave.rb +62 -1
  40. data/plugins/autosave/plugin.yaml +1 -0
  41. data/plugins/autosave/ui/autosave_config_widget.rb +37 -14
  42. data/plugins/autosave/ui/autosave_config_widget.ui +62 -12
  43. data/plugins/find_in_files/find_in_files_widgets.rb +1 -3
  44. data/plugins/find_in_files/ui/config_widget.rb +1 -1
  45. data/plugins/find_in_files/ui/find_in_files_widget.rb +1 -1
  46. data/plugins/rake/plugin.yaml +1 -1
  47. data/plugins/rake/ui/add_quick_task_widget.rb +1 -1
  48. data/plugins/rake/ui/choose_task_widget.rb +1 -1
  49. data/plugins/rake/ui/config_widget.rb +1 -1
  50. data/plugins/rake/ui/project_widget.rb +1 -1
  51. data/plugins/rspec/rspec.rb +14 -22
  52. data/plugins/rspec/ruber_rspec_formatter.rb +4 -1
  53. data/plugins/rspec/ui/rspec_project_widget.rb +1 -1
  54. data/plugins/ruby_development/plugin.yaml +7 -2
  55. data/plugins/ruby_development/ruby_development.rb +134 -13
  56. data/plugins/ruby_development/ui/config_widget.rb +66 -0
  57. data/plugins/ruby_development/ui/config_widget.ui +58 -0
  58. data/plugins/ruby_development/ui/project_widget.rb +1 -1
  59. data/plugins/ruby_runner/plugin.yaml +2 -2
  60. data/plugins/ruby_runner/ruby_runner.rb +15 -3
  61. data/plugins/ruby_runner/ui/config_widget.rb +1 -1
  62. data/plugins/ruby_runner/ui/project_widget.rb +1 -1
  63. data/plugins/ruby_runner/ui/ruby_runnner_plugin_option_widget.rb +1 -1
  64. data/plugins/state/plugin.yaml +6 -2
  65. data/plugins/state/state.rb +305 -81
  66. data/plugins/state/ui/config_widget.rb +1 -1
  67. data/spec/common.rb +11 -3
  68. data/spec/document_list_spec.rb +8 -8
  69. data/spec/document_project_spec.rb +98 -25
  70. data/spec/document_spec.rb +178 -152
  71. data/spec/editor_view_spec.rb +26 -5
  72. data/spec/framework.rb +5 -0
  73. data/spec/hint_solver_spec.rb +450 -0
  74. data/spec/kde_sugar_spec.rb +73 -6
  75. data/spec/output_widget_spec.rb +172 -156
  76. data/spec/pane_spec.rb +1165 -0
  77. data/spec/plugin_specification_reader_spec.rb +37 -1
  78. data/spec/project_files_list_spec.rb +30 -20
  79. data/spec/qt_sugar_spec.rb +269 -0
  80. data/spec/state_spec.rb +566 -353
  81. data/spec/utils_spec.rb +1 -1
  82. data/spec/view_manager_spec.rb +71 -0
  83. metadata +16 -4
@@ -89,7 +89,12 @@ A list of valid licences
89
89
  @plugin_info.about = read_about hash
90
90
  @plugin_info.version = read_version hash
91
91
  @plugin_info.required = read_required hash
92
- @plugin_info.required.each{|f| require File.join(@plugin_info.directory, f)}
92
+ @plugin_info.required.each do |f|
93
+ file = File.join @plugin_info.directory, f
94
+ if file.end_with?('.rb') then load file
95
+ else require file
96
+ end
97
+ end
93
98
  @plugin_info.class_obj = read_class hash
94
99
  @plugin_info.features = read_features hash
95
100
  @plugin_info.deps = read_deps hash
@@ -410,6 +415,8 @@ can't be used if the application hasn't been created)
410
415
  scope = Array(get_value hash, :scope, [:global]).map &:to_sym
411
416
  scope = [:global, :document] if scope == [:all]
412
417
  res[:scope] = scope
418
+ place = Array(get_value hash, :place, [:local]).map &:to_sym
419
+ res[:place] = (place.include?(:all) ? [:local, :remote] : place)
413
420
  res[:mimetype] = Array(get_value(hash, :mimetype, []))
414
421
  res[:file_extension] = Array(get_value(hash, :file_extension, []))
415
422
  res
@@ -236,6 +236,12 @@ the project. Rather, it compares the file name with the include and exclude rule
236
236
  and the extensions.
237
237
  =end
238
238
  def file_in_project? file
239
+ if file.match %r{^([\w+-.]+)://(.+)}
240
+ if $1 != 'file' then return false
241
+ else
242
+ file = $2
243
+ end
244
+ end
239
245
  file = file.sub %r[^#{Regexp.quote(@project.project_directory)}/], ''
240
246
  return false if file.start_with? '/'
241
247
  return nil if file.end_with? '/'
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'project_files_rule_chooser_widget.ui'
3
3
  **
4
- ** Created: ven ott 29 17:39:04 2010
4
+ ** Created: mar nov 16 11:52:49 2010
5
5
  ** by: Qt User Interface Compiler version 4.7.0
6
6
  **
7
7
  ** WARNING! All changes made in this file will be lost when recompiling ui file!
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'project_files_widget.ui'
3
3
  **
4
- ** Created: ven ott 29 17:39:04 2010
4
+ ** Created: mar nov 16 11:52:49 2010
5
5
  ** by: Qt User Interface Compiler version 4.7.0
6
6
  **
7
7
  ** WARNING! All changes made in this file will be lost when recompiling ui file!
@@ -50,12 +50,14 @@ module Qt
50
50
  +RuntimeError+ will be raised.
51
51
  =end
52
52
  def named_connect signal, name, &blk
53
- old_children = find_children(Qt::SignalBlockInvocation)
54
- # old_children = find_children(Qt::Object).select{|c| c.class == Qt::SignalBlockInvocation}
53
+ #It seems that find_children always return all children, regardless of
54
+ #the class passed as argument
55
+ # old_children = find_children(Qt::SignalBlockInvocation)
56
+ old_children = find_children(Qt::Object).select{|c| c.class == Qt::SignalBlockInvocation}
55
57
  res = self.connect(signal, &blk)
56
58
  return nil unless res
57
- # new_children = find_children(Qt::Object).select{|c| c.class == Qt::SignalBlockInvocation} - old_children
58
- new_children = find_children(Qt::SignalBlockInvocation) - old_children
59
+ new_children = find_children(Qt::Object).select{|c| c.class == Qt::SignalBlockInvocation} - old_children
60
+ # new_children = find_children(Qt::SignalBlockInvocation) - old_children
59
61
  unless new_children.size == 1
60
62
  raise RuntimeError, "Wrong number of new children: #{new_children.size} instead of 1"
61
63
  end
@@ -617,6 +619,94 @@ the problem is solved
617
619
 
618
620
  end
619
621
 
622
+ =begin rdoc
623
+ Module implementing the {#each} method used by all layout classes
624
+
625
+ Ideally, this method should be implemented in {Qt::Layout} and other classes should
626
+ inherit it. However, since QtRuby doesn't actually implements inheritance between
627
+ it's classes, that doesn't happen.
628
+
629
+ The {#each} method is then defined in this module which is included in all layout
630
+ classes
631
+ =end
632
+ module LayoutEach
633
+
634
+ include QtEnumerable
635
+
636
+ =begin rdoc
637
+ Iterates on all items in the layout
638
+
639
+ The iteration order is from top to bottom and from left to right. In case of widgets
640
+ which span multiple rows or columns (in case of a @Qt::GridLayout@), the widgets
641
+ will only be passed one time.
642
+
643
+ @yield [w] block to call for each widget in the layout
644
+ @yieldparam [Qt::Widget] w each widget
645
+ @return [Qt::Layout,Enumerator] if no block is given, returns an enumerator, otherwise
646
+ returns *self*
647
+ =end
648
+ def each
649
+ return to_enum unless block_given?
650
+ count.times do |i|
651
+ it = item_at i
652
+ yield it.widget || it.layout
653
+ end
654
+ self
655
+ end
656
+
657
+ end
658
+
659
+ class Layout
660
+ include LayoutEach
661
+ end
662
+
663
+ class BoxLayout
664
+ include LayoutEach
665
+ end
666
+
667
+ class VBoxLayout
668
+ include LayoutEach
669
+ end
670
+
671
+ class HBoxLayout
672
+ include LayoutEach
673
+ end
674
+
675
+ class StackedLayout
676
+ include LayoutEach
677
+ end
678
+
679
+ class FormLayout
680
+ include LayoutEach
681
+ end
682
+
683
+ class GridLayout
684
+ include LayoutEach
685
+ end
686
+
687
+ class Qt::Splitter
688
+
689
+ include QtEnumerable
690
+
691
+ =begin rdoc
692
+ Iterates on all items in the splitter
693
+
694
+ The iteration order is from top to bottom and from left to right.
695
+
696
+ @yield [w] block to call for each widget in the splitter
697
+ @yieldparam [Qt::Widget] w each widget
698
+ @return [Qt::Splitter,Enumerator] if no block is given, returns an enumerator, otherwise
699
+ returns *self*
700
+ =end
701
+ def each
702
+ return to_enum unless block_given?
703
+ count.times{|i| yield widget(i)}
704
+ self
705
+ end
706
+
707
+ end
708
+
709
+
620
710
  class Qt::StackedWidget
621
711
 
622
712
  include QtEnumerable
@@ -30,17 +30,26 @@ require 'facets/boolean'
30
30
  require 'facets/enumerable/mash'
31
31
 
32
32
  module Ruber
33
+
34
+ =begin rdoc
35
+ The Ruber installation directory
36
+ =end
37
+ RUBER_DIR = File.expand_path File.join(__FILE__, '..', '..', '..')
33
38
 
34
39
  =begin rdoc
35
40
  The directory where the Ruber core files are
36
41
  =end
37
- RUBER_LIB_DIR = File.dirname(File.expand_path(__FILE__))
42
+ RUBER_LIB_DIR = File.join RUBER_DIR, 'lib/'
38
43
 
39
44
  =begin rdoc
40
- The Ruber @data@ directory
45
+ The default directory for globally installed plugins
41
46
  =end
42
- RUBER_DATA_DIR = File.expand_path File.join(RUBER_LIB_DIR, '..', 'data')
47
+ RUBER_PLUGIN_DIR = File.join RUBER_DIR, 'plugins'
43
48
 
49
+ =begin rdoc
50
+ The Ruber @data@ directory
51
+ =end
52
+ RUBER_DATA_DIR = File.join RUBER_DIR, 'data'
44
53
  end
45
54
 
46
55
  module Kernel
@@ -300,9 +309,9 @@ the block returned a true value, it returns the value returned by the block.
300
309
  @return [Object, nil] the first non-false value returned by the block or *nil*
301
310
  if the block returns *nil* or *false* for all elements
302
311
 
303
- @example
304
- [1, 2, 3, 4].find!{|i| 2*i if i > 2}
305
- => 6 #(3*2)
312
+ @example Using @find!@
313
+ [1, 2, 3, 4].find!{|i| 2*i if i > 2}
314
+ => 6 #(3*2)
306
315
  =end
307
316
  def find!
308
317
  each do |obj|
@@ -412,4 +421,4 @@ whitespaces quoted according to the above algorithm
412
421
  res
413
422
  end
414
423
 
415
- end
424
+ end
@@ -1,5 +1,5 @@
1
1
  module Ruber
2
2
 
3
- VERSION = '0.0.5'
3
+ VERSION = '0.0.7'
4
4
 
5
- end
5
+ end
@@ -284,7 +284,7 @@ into account the enabled option and always attempt to save the documents.
284
284
  def save_files docs, opts, blk
285
285
  unsaved = []
286
286
  docs.each_with_index do |d, i|
287
- unless d.save
287
+ unless save_doc d
288
288
  unsaved << d
289
289
  if opts[:stop_on_failure]
290
290
  unsaved += docs[(i+1)..-1]
@@ -314,12 +314,52 @@ The following documents couldn't be saved:
314
314
  false
315
315
  end
316
316
 
317
+ def load_settings
318
+ super
319
+ @remote_files_policy = Ruber[:config][:autosave, :remote_files]
320
+ end
321
+
322
+ private
323
+
324
+ =begin rdoc
325
+ Attempts to save a document
326
+
327
+ If the document is associated with a remote file, the behaviour will change depending
328
+ on the value of the @autosave/remote_files@ settings:
329
+ * if it's @:skip@ then nothing will be done
330
+ * if it's @:ignore@ then an attempt to save the document will be done, but any failures
331
+ will be ignored
332
+ * if it's @:normal@ then the behaviour will be the same as for a local file
333
+
334
+ @param [Document] doc the document to save
335
+ @return [Boolean] *true* if the document was saved successfully and *false* otherwise.
336
+ in case of a remote document, it will always return *true* except when the
337
+ @autosave/remote_files@ option is set to @:normal@
338
+ =end
339
+ def save_doc doc
340
+ if doc.url.local_file? or doc.url.relative? then doc.save
341
+ else
342
+ case @remote_files_policy
343
+ when :skip then true
344
+ when :ignore
345
+ doc.save
346
+ true
347
+ else doc.save
348
+ end
349
+ end
350
+ end
351
+
317
352
  end
318
353
 
319
354
  =begin rdoc
320
355
  The configuration widget for the Autosave plugin
321
356
  =end
322
357
  class ConfigWidget < Qt::Widget
358
+
359
+ =begin rdoc
360
+ Associations between remote files behaviour and entries in the Remote files widget
361
+ =end
362
+ REMOTE_FILES_MODE = {:normal => 0, :skip => 1, :ignore => 2}
323
363
 
324
364
  =begin rdoc
325
365
  Creates a new instance
@@ -397,6 +437,27 @@ Fills the list view with the registered plugins
397
437
  nil
398
438
  end
399
439
 
440
+ =begin rdoc
441
+ Selects the appropriate entry from the remote file combo box
442
+
443
+ @param [Symbol] val the bheaviour with respect to remote files. It can be one of
444
+ @:normal@, @:skip@ or @:ignore@
445
+ @return [nil]
446
+ =end
447
+ def remote_files= val
448
+ mode =
449
+ @ui._autosave__remote_files.current_index = REMOTE_FILES_MODE[val]
450
+ nil
451
+ end
452
+
453
+ =begin rdoc
454
+ @return [Symbol] the symbol associated with the entry selected in the remote files
455
+ widget according to {REMOTE_FILES_MODE}
456
+ =end
457
+ def remote_files
458
+ REMOTE_FILES_MODE.invert[@ui._autosave__remote_files.current_index]
459
+ end
460
+
400
461
  end
401
462
 
402
463
  end
@@ -12,5 +12,6 @@ config_options:
12
12
  autosave:
13
13
  enable: {default: true}
14
14
  plugins: {default: {}}
15
+ remote_files: {default: :skip}
15
16
  config_widgets:
16
17
  - {caption: General, class: Ruber::Autosave::ConfigWidget}
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'autosave_config_widget.ui'
3
3
  **
4
- ** Created: ven ott 29 17:39:04 2010
4
+ ** Created: mar nov 16 11:52:49 2010
5
5
  ** by: Qt User Interface Compiler version 4.7.0
6
6
  **
7
7
  ** WARNING! All changes made in this file will be lost when recompiling ui file!
@@ -10,9 +10,12 @@
10
10
  class Ui_AutosaveConfigWidget
11
11
  attr_reader :verticalLayout_2
12
12
  attr_reader :groupBox
13
- attr_reader :verticalLayout_3
14
- attr_reader :verticalLayout
13
+ attr_reader :gridLayout
14
+ attr_reader :horizontalLayout
15
15
  attr_reader :_autosave__enable
16
+ attr_reader :horizontalSpacer
17
+ attr_reader :label
18
+ attr_reader :_autosave__remote_files
16
19
  attr_reader :label_2
17
20
  attr_reader :_autosave__plugins
18
21
 
@@ -20,36 +23,51 @@ class Ui_AutosaveConfigWidget
20
23
  if autosaveConfigWidget.objectName.nil?
21
24
  autosaveConfigWidget.objectName = "autosaveConfigWidget"
22
25
  end
23
- autosaveConfigWidget.resize(279, 300)
26
+ autosaveConfigWidget.resize(494, 300)
24
27
  @verticalLayout_2 = Qt::VBoxLayout.new(autosaveConfigWidget)
25
28
  @verticalLayout_2.objectName = "verticalLayout_2"
26
29
  @groupBox = Qt::GroupBox.new(autosaveConfigWidget)
27
30
  @groupBox.objectName = "groupBox"
28
- @verticalLayout_3 = Qt::VBoxLayout.new(@groupBox)
29
- @verticalLayout_3.objectName = "verticalLayout_3"
30
- @verticalLayout = Qt::VBoxLayout.new()
31
- @verticalLayout.objectName = "verticalLayout"
31
+ @gridLayout = Qt::GridLayout.new(@groupBox)
32
+ @gridLayout.objectName = "gridLayout"
33
+ @horizontalLayout = Qt::HBoxLayout.new()
34
+ @horizontalLayout.objectName = "horizontalLayout"
32
35
  @_autosave__enable = Qt::CheckBox.new(@groupBox)
33
36
  @_autosave__enable.objectName = "_autosave__enable"
34
37
 
35
- @verticalLayout.addWidget(@_autosave__enable)
38
+ @horizontalLayout.addWidget(@_autosave__enable)
39
+
40
+ @horizontalSpacer = Qt::SpacerItem.new(40, 20, Qt::SizePolicy::Expanding, Qt::SizePolicy::Minimum)
41
+
42
+ @horizontalLayout.addItem(@horizontalSpacer)
43
+
44
+ @label = Qt::Label.new(@groupBox)
45
+ @label.objectName = "label"
46
+
47
+ @horizontalLayout.addWidget(@label)
48
+
49
+ @_autosave__remote_files = KDE::ComboBox.new(@groupBox)
50
+ @_autosave__remote_files.objectName = "_autosave__remote_files"
51
+
52
+ @horizontalLayout.addWidget(@_autosave__remote_files)
53
+
54
+
55
+ @gridLayout.addLayout(@horizontalLayout, 0, 0, 1, 1)
36
56
 
37
57
  @label_2 = Qt::Label.new(@groupBox)
38
58
  @label_2.objectName = "label_2"
39
59
 
40
- @verticalLayout.addWidget(@label_2)
60
+ @gridLayout.addWidget(@label_2, 1, 0, 1, 1)
41
61
 
42
62
  @_autosave__plugins = AutosavePluginListView.new(@groupBox)
43
63
  @_autosave__plugins.objectName = "_autosave__plugins"
44
64
 
45
- @verticalLayout.addWidget(@_autosave__plugins)
46
-
47
-
48
- @verticalLayout_3.addLayout(@verticalLayout)
65
+ @gridLayout.addWidget(@_autosave__plugins, 2, 0, 1, 1)
49
66
 
50
67
 
51
68
  @verticalLayout_2.addWidget(@groupBox)
52
69
 
70
+ @label.buddy = @_autosave__remote_files
53
71
  @label_2.buddy = @_autosave__plugins
54
72
 
55
73
  retranslateUi(autosaveConfigWidget)
@@ -65,6 +83,11 @@ class Ui_AutosaveConfigWidget
65
83
  autosaveConfigWidget.windowTitle = Qt::Application.translate("AutosaveConfigWidget", "Form", nil, Qt::Application::UnicodeUTF8)
66
84
  @groupBox.title = Qt::Application.translate("AutosaveConfigWidget", "Autosave", nil, Qt::Application::UnicodeUTF8)
67
85
  @_autosave__enable.text = Qt::Application.translate("AutosaveConfigWidget", "&Enable autosave", nil, Qt::Application::UnicodeUTF8)
86
+ @label.text = Qt::Application.translate("AutosaveConfigWidget", "&Remote files", nil, Qt::Application::UnicodeUTF8)
87
+ @_autosave__remote_files.insertItems(0, [Qt::Application.translate("AutosaveConfigWidget", "Treat remote files normally", nil, Qt::Application::UnicodeUTF8),
88
+ Qt::Application.translate("AutosaveConfigWidget", "Don't save remote files", nil, Qt::Application::UnicodeUTF8),
89
+ Qt::Application.translate("AutosaveConfigWidget", "Ignore errors while saving remote files", nil, Qt::Application::UnicodeUTF8)])
90
+ @_autosave__remote_files.setProperty("access", Qt::Variant.new(Qt::Application.translate("AutosaveConfigWidget", "$remote_files", nil, Qt::Application::UnicodeUTF8)))
68
91
  @label_2.text = Qt::Application.translate("AutosaveConfigWidget", "&Exceptions", nil, Qt::Application::UnicodeUTF8)
69
92
  @_autosave__plugins.setProperty("access", Qt::Variant.new(Qt::Application.translate("AutosaveConfigWidget", "$plugins", nil, Qt::Application::UnicodeUTF8)))
70
93
  @_autosave__plugins.setProperty("signal", Qt::Variant.new(Qt::Application.translate("AutosaveConfigWidget", "items_changed()", nil, Qt::Application::UnicodeUTF8)))
@@ -6,7 +6,7 @@
6
6
  <rect>
7
7
  <x>0</x>
8
8
  <y>0</y>
9
- <width>279</width>
9
+ <width>494</width>
10
10
  <height>300</height>
11
11
  </rect>
12
12
  </property>
@@ -19,9 +19,9 @@
19
19
  <property name="title">
20
20
  <string>Autosave</string>
21
21
  </property>
22
- <layout class="QVBoxLayout" name="verticalLayout_3">
23
- <item>
24
- <layout class="QVBoxLayout" name="verticalLayout">
22
+ <layout class="QGridLayout" name="gridLayout">
23
+ <item row="0" column="0">
24
+ <layout class="QHBoxLayout" name="horizontalLayout">
25
25
  <item>
26
26
  <widget class="QCheckBox" name="_autosave__enable">
27
27
  <property name="text">
@@ -30,33 +30,83 @@
30
30
  </widget>
31
31
  </item>
32
32
  <item>
33
- <widget class="QLabel" name="label_2">
33
+ <spacer name="horizontalSpacer">
34
+ <property name="orientation">
35
+ <enum>Qt::Horizontal</enum>
36
+ </property>
37
+ <property name="sizeHint" stdset="0">
38
+ <size>
39
+ <width>40</width>
40
+ <height>20</height>
41
+ </size>
42
+ </property>
43
+ </spacer>
44
+ </item>
45
+ <item>
46
+ <widget class="QLabel" name="label">
34
47
  <property name="text">
35
- <string>&amp;Exceptions</string>
48
+ <string>&amp;Remote files</string>
36
49
  </property>
37
50
  <property name="buddy">
38
- <cstring>_autosave__plugins</cstring>
51
+ <cstring>_autosave__remote_files</cstring>
39
52
  </property>
40
53
  </widget>
41
54
  </item>
42
55
  <item>
43
- <widget class="AutosavePluginListView" name="_autosave__plugins">
56
+ <widget class="KComboBox" name="_autosave__remote_files">
44
57
  <property name="access" stdset="0">
45
- <string>$plugins</string>
46
- </property>
47
- <property name="signal" stdset="0">
48
- <string>items_changed()</string>
58
+ <string>$remote_files</string>
49
59
  </property>
60
+ <item>
61
+ <property name="text">
62
+ <string>Treat remote files normally</string>
63
+ </property>
64
+ </item>
65
+ <item>
66
+ <property name="text">
67
+ <string>Don't save remote files</string>
68
+ </property>
69
+ </item>
70
+ <item>
71
+ <property name="text">
72
+ <string>Ignore errors while saving remote files</string>
73
+ </property>
74
+ </item>
50
75
  </widget>
51
76
  </item>
52
77
  </layout>
53
78
  </item>
79
+ <item row="1" column="0">
80
+ <widget class="QLabel" name="label_2">
81
+ <property name="text">
82
+ <string>&amp;Exceptions</string>
83
+ </property>
84
+ <property name="buddy">
85
+ <cstring>_autosave__plugins</cstring>
86
+ </property>
87
+ </widget>
88
+ </item>
89
+ <item row="2" column="0">
90
+ <widget class="AutosavePluginListView" name="_autosave__plugins">
91
+ <property name="access" stdset="0">
92
+ <string>$plugins</string>
93
+ </property>
94
+ <property name="signal" stdset="0">
95
+ <string>items_changed()</string>
96
+ </property>
97
+ </widget>
98
+ </item>
54
99
  </layout>
55
100
  </widget>
56
101
  </item>
57
102
  </layout>
58
103
  </widget>
59
104
  <customwidgets>
105
+ <customwidget>
106
+ <class>KComboBox</class>
107
+ <extends>QComboBox</extends>
108
+ <header>kcombobox.h</header>
109
+ </customwidget>
60
110
  <customwidget>
61
111
  <class>AutosavePluginListView</class>
62
112
  <extends>QListView</extends>