ruber 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
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>