freightrain 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/README.rdoc +4 -1
  2. data/Rakefile +1 -1
  3. data/lib/extensions/gtk/gtk_bootstrapper.rb +12 -14
  4. data/lib/extensions/gtk/widgets/gtk_layout.rb +0 -5
  5. data/lib/extensions/gtk/widgets/gtk_widget.rb +1 -1
  6. data/lib/extensions/qt/dialog_helper.rb +19 -0
  7. data/lib/extensions/qt/interface_builder.rb +76 -0
  8. data/lib/extensions/qt/qt_bootstrapper.rb +24 -0
  9. data/lib/extensions/qt/widgets/qt_abstract_button.rb +12 -0
  10. data/lib/extensions/qt/widgets/qt_base.rb +27 -0
  11. data/lib/extensions/qt/widgets/qt_label.rb +18 -0
  12. data/lib/extensions/qt/widgets/qt_line_edit.rb +13 -0
  13. data/lib/extensions/qt/widgets/qt_widget.rb +85 -0
  14. data/lib/freightrain/binding/binding_base.rb +19 -0
  15. data/lib/freightrain/binding/binding_host.rb +3 -3
  16. data/lib/freightrain/binding/binding_loader.rb +1 -0
  17. data/lib/freightrain/binding/freight_binding.rb +9 -7
  18. data/lib/freightrain/elements/freight_element_view.rb +1 -0
  19. data/lib/freightrain/elements/freight_element_view_model.rb +1 -0
  20. data/lib/freightrain/elements/layout_widget.rb +1 -0
  21. data/lib/freightrain/regions/region_host.rb +1 -0
  22. data/lib/freightrain/services/freight_service.rb +1 -0
  23. data/lib/freightrain/services/service_host.rb +0 -1
  24. data/lib/freightrain/signals/freight_signal.rb +1 -0
  25. data/lib/freightrain/signals/signal_host.rb +0 -1
  26. data/lib/freightrain/string_patch.rb +1 -0
  27. data/lib/freightrain/views/callback_wrapper.rb +1 -0
  28. data/lib/freightrain/views/freight_view.rb +1 -0
  29. data/lib/scaffolding/scaffolding.rb +1 -0
  30. metadata +37 -15
  31. data/lib/extensions/gtk/binding_base.rb +0 -17
  32. data/lib/freightrain/elements/element_extension.rb +0 -1
data/README.rdoc CHANGED
@@ -8,10 +8,13 @@ Freightrain is a MVVM (model/view/viewmodel) framework for developing desktop ap
8
8
  == HOW DO I GET IT?
9
9
  gem install freightrain
10
10
 
11
- (also make sure you have the latest ruby/gnome2 bindings installed (=> 0.19.3) )
11
+ (also make sure you have the latest ruby/gnome2 bindings installed (=> 0.19.4) )
12
+ WARNING! As of ruby/gnome2 0.19.4, the accessor "name", which freightrain depends on, is removed from Gtk::Widget.
13
+ Long story short: you should get the latest version from the ruby/gnome2 svn. At the moment the problem is fixed in the ruby/gnome2 trunk.
12
14
 
13
15
  == HOW DO I USE IT?
14
16
  For now, you should take a look at http://github.com/bolthar/rubydraulica
17
+ (broken - callback handling doesn't work like that anymore. doc coming really really soon)
15
18
 
16
19
  Note that the project is currently in ALPHA state. Use it in production at your own risk :-)
17
20
 
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require 'rake/testtask'
9
9
 
10
10
  spec = Gem::Specification.new do |s|
11
11
  s.name = 'freightrain'
12
- s.version = '0.6.4'
12
+ s.version = '0.6.5'
13
13
  s.add_dependency('require_all', '>= 1.1.0')
14
14
  s.add_dependency('needle', '>= 1.3.0')
15
15
  s.has_rdoc = false
@@ -1,21 +1,19 @@
1
1
 
2
2
  #TODO: use require all
3
- #TODO: use File.join for god's sake!
4
3
 
5
4
  require 'libglade2'
6
- require File.dirname(__FILE__) + "/binding_base.rb"
7
- require File.dirname(__FILE__) + "/widgets/gtk_image.rb"
8
- require File.dirname(__FILE__) + "/widgets/gtk_toggle_button.rb"
9
- require File.dirname(__FILE__) + "/widgets/gtk_toggle_tool_button.rb"
10
- require File.dirname(__FILE__) + "/widgets/gtk_widget.rb"
11
- require File.dirname(__FILE__) + "/widgets/gtk_combo_box.rb"
12
- require File.dirname(__FILE__) + "/widgets/gtk_calendar.rb"
13
- require File.dirname(__FILE__) + "/widgets/gtk_treeview.rb"
14
- require File.dirname(__FILE__) + "/widgets/gtk_treeviewcolumn.rb"
15
- require File.dirname(__FILE__) + "/widgets/gtk_layout.rb"
16
- require File.dirname(__FILE__) + "/widgets/gtk_statusicon.rb"
17
- require File.dirname(__FILE__) + "/interface_builder.rb"
18
- require File.dirname(__FILE__) + "/dialog_helper.rb"
5
+ require File.join(File.dirname(__FILE__), "widgets/gtk_image.rb")
6
+ require File.join(File.dirname(__FILE__), "widgets/gtk_toggle_button.rb")
7
+ require File.join(File.dirname(__FILE__), "widgets/gtk_toggle_tool_button.rb")
8
+ require File.join(File.dirname(__FILE__), "widgets/gtk_widget.rb")
9
+ require File.join(File.dirname(__FILE__), "widgets/gtk_combo_box.rb")
10
+ require File.join(File.dirname(__FILE__), "widgets/gtk_calendar.rb")
11
+ require File.join(File.dirname(__FILE__), "widgets/gtk_treeview.rb")
12
+ require File.join(File.dirname(__FILE__), "widgets/gtk_treeviewcolumn.rb")
13
+ require File.join(File.dirname(__FILE__), "widgets/gtk_layout.rb")
14
+ require File.join(File.dirname(__FILE__), "widgets/gtk_statusicon.rb")
15
+ require File.join(File.dirname(__FILE__), "interface_builder.rb")
16
+ require File.join(File.dirname(__FILE__), "dialog_helper.rb")
19
17
 
20
18
  module Freightrain
21
19
 
@@ -7,11 +7,6 @@ module Gtk
7
7
  attr_writer :viewmodel
8
8
  attr_reader :elements
9
9
 
10
- def initialize
11
- super
12
-
13
- end
14
-
15
10
  def setup
16
11
  @signals ||= {}
17
12
  selected_callback = @signals[:selected]
@@ -2,7 +2,7 @@
2
2
  module Gtk
3
3
 
4
4
  class Widget
5
- include BindingBase
5
+ include Freightrain::BindingBase
6
6
 
7
7
  def color_from_rgb(string)
8
8
  red = ((string[0..1].hex.to_i + 1) * 256) - 1
@@ -0,0 +1,19 @@
1
+
2
+
3
+ module Freightrain
4
+ module Toolkit
5
+
6
+ module DialogHelper
7
+
8
+ def open_file_dialog(description = "Open file...")
9
+ raise "not implemented"
10
+ end
11
+
12
+ def yes_no_dialog(description, title = "Warning!", secondary_text = "It will not be possible to recover the deleted item")
13
+ raise "not implemented"
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,76 @@
1
+
2
+ module Freightrain
3
+
4
+ module Toolkit
5
+
6
+ class InterfaceBuilder
7
+
8
+ attr_reader :toplevel
9
+
10
+ def initialize
11
+ @builder = Qt::UiLoader.new
12
+ end
13
+
14
+ def file_found?(file_name)
15
+ return get_ui_files(file_name)
16
+ end
17
+
18
+ def create_objects_from_file(file_name)
19
+ file = Qt::File.new(get_ui_files(file_name))
20
+ file.open(Qt::File::ReadOnly)
21
+ @toplevel = @builder.load(file)
22
+ file.close
23
+ widgets = get_all_objects(@toplevel).select do |widget|
24
+ widget.objectName && widget.objectName != ""
25
+ end.map
26
+ return widgets
27
+ end
28
+
29
+ def create_object_accessors(widgets, view)
30
+ widgets.each do |widget|
31
+ name = widget.objectName
32
+ view.instance_eval "def #{name}; @widgets.select { |w| w.objectName == '#{name}' }.first ;end;"
33
+ end
34
+ end
35
+
36
+ def connect_to_callback(widget, event_name, method)
37
+ begin
38
+ decoy_class = Class.new(Qt::Widget)
39
+ decoy_class.slots("#{widget.name}()")
40
+ decoy_class.send(:define_method, widget.name) do |*args|
41
+ method.call(*args)
42
+ end
43
+ decoy = decoy_class.new
44
+ widget.connect(SIGNAL(widget.get_event_signature(event_name)), decoy, widget.name.to_sym)
45
+ rescue Exception => ex
46
+ # p ex
47
+ end
48
+ end
49
+
50
+ def get_ui_files(file_name)
51
+ search_path = File.join(
52
+ Freightrain.app_path,
53
+ "views",
54
+ "**",
55
+ file_name.to_convention + ".ui")
56
+ results = Dir.glob(search_path)
57
+ return results.first
58
+ end
59
+
60
+ def control
61
+ return @toplevel
62
+ end
63
+
64
+ private
65
+ def get_all_objects(parent, objects = [])
66
+ objects << parent
67
+ parent.children.each do |child|
68
+ get_all_objects(child, objects)
69
+ end
70
+ return objects
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,24 @@
1
+
2
+ require 'Qt4'
3
+ require 'qtuitools'
4
+ require File.join(File.dirname(__FILE__), "widgets/qt_base.rb")
5
+ require File.join(File.dirname(__FILE__), "widgets/qt_widget.rb")
6
+ require File.join(File.dirname(__FILE__), "widgets/qt_abstract_button.rb")
7
+ require File.join(File.dirname(__FILE__), "widgets/qt_line_edit.rb")
8
+ require File.join(File.dirname(__FILE__), "widgets/qt_label.rb")
9
+ require File.join(File.dirname(__FILE__), "interface_builder.rb")
10
+ require File.join(File.dirname(__FILE__), "dialog_helper.rb")
11
+
12
+ module Freightrain
13
+
14
+ module Toolkit
15
+
16
+ def self.start_main_loop
17
+ app = Qt::Application.new([])
18
+ yield
19
+ app.exec
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,12 @@
1
+
2
+ module Qt
3
+
4
+ class AbstractButton
5
+
6
+ def signals
7
+ base_list = super
8
+ base_list[:toggled] = "toggled(bool)"
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+
2
+ module Qt
3
+
4
+ class Base
5
+ include Freightrain::BindingBase
6
+
7
+ def plug_in(region_widget)
8
+ region_widget.setParent(self)
9
+ region_widget.show
10
+ end
11
+
12
+ def name
13
+ return self.objectName
14
+ end
15
+
16
+ def signals
17
+ return {}
18
+ end
19
+
20
+ def get_event_signature(event_name)
21
+ return signals[event_name.to_sym] || "#{event_name}()"
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
@@ -0,0 +1,18 @@
1
+
2
+
3
+ module Qt
4
+
5
+ class Label
6
+
7
+ def image=(value)
8
+ file = ::File.new(::File.join(::Dir.tmpdir,"tempimg#{self.object_id.to_s}"),'w')
9
+ file << value
10
+ file.close
11
+ image = Qt::Image.new(::File.join(::Dir.tmpdir,"tempimg#{self.object_id.to_s}"))
12
+ self.pixmap = image
13
+ self.resize(self.pixmap.size)
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,13 @@
1
+
2
+ module Qt
3
+
4
+ class LineEdit
5
+
6
+ def signals
7
+ base_list = super
8
+ base_list[:textChanged] = "textChanged(QString)"
9
+ base_list[:textEdited] = "textEdited(QString)"
10
+ return base_list
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,85 @@
1
+
2
+ module Qt
3
+
4
+ class Widget
5
+ include Freightrain::LayoutWidget
6
+
7
+ def setup
8
+ @signals ||= {}
9
+ selected_callback = @signals[:selected]
10
+ @signals[:selected] = lambda do |value|
11
+ elements.each do |item|
12
+ item.set_selection(item.value == value)
13
+ end
14
+ selected_callback.call(value) if selected_callback
15
+ end
16
+ @elements ||= []
17
+ @ready = true
18
+ end
19
+
20
+ def elements=(enumerable)
21
+ setup unless @ready
22
+ delta = enumerable.length - @elements.length
23
+ @height_factor = self.get_new_item.control.height unless @height_factor
24
+ height = @elements.length
25
+ delta.abs.times do
26
+ if delta > 0
27
+ item = self.get_new_item
28
+ item.control.geometry = Qt::Rect.new(
29
+ 0,
30
+ item.control.height * height,
31
+ item.control.width,
32
+ item.control.height
33
+ )
34
+ item.control.setParent(self)
35
+ item.control.show
36
+ @elements << item
37
+ height += 1
38
+ else
39
+ item = self.children.last
40
+ item.control.setParent(nil)
41
+ @elements.delete_if {|element| element.control == item }
42
+ item.control = nil
43
+ end
44
+ end
45
+ self.setMinimumHeight(@elements.length * @height_factor)
46
+ self.show
47
+ @elements.each do |element|
48
+ element.value = enumerable[@elements.index(element)]
49
+ end
50
+ end
51
+
52
+ def elements()
53
+ return @elements
54
+ end
55
+
56
+ def selected
57
+ return @elements.select { |element| element.selected == true}.first
58
+ end
59
+
60
+ def selected=(val)
61
+ @elements.each do |element|
62
+ element.set_selection(val == element.value)
63
+ end
64
+ end
65
+
66
+ def get_new_item
67
+ item = Freightrain[@viewmodel]
68
+ item.signals.each do |key, signal|
69
+ signal.connect(@signals[key]) if @signals[key]
70
+ end
71
+ return item
72
+ end
73
+
74
+ def bind(options)
75
+ if options[:property].to_sym == :elements
76
+ @viewmodel = (options[:element].to_s + "_element_view_model").to_sym
77
+ @signals = options[:signals]
78
+ options[:force] = true
79
+ end
80
+ super(options)
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,19 @@
1
+
2
+ module Freightrain
3
+ module BindingBase
4
+
5
+ def bind(binding_options)
6
+ @bindings ||= {}
7
+ binding = FreightBinding.new(self, binding_options)
8
+ #TODO: send out warning on override?
9
+ @bindings[binding_options[:property]] = binding
10
+ return binding
11
+ end
12
+
13
+ def bindings
14
+ @bindings ||= {}
15
+ return @bindings.values
16
+ end
17
+
18
+ end
19
+ end
@@ -14,7 +14,7 @@ module Freightrain
14
14
  def data_source=(source)
15
15
  bindings.each do |binding|
16
16
  binding.data_source = source
17
- binding.update
17
+ binding.update #TODO: is this necessary?
18
18
  end
19
19
  end
20
20
 
@@ -27,9 +27,9 @@ module Freightrain
27
27
  end
28
28
 
29
29
  def update
30
- bindings.each { |binding| binding.update}
30
+ bindings.each { |binding| binding.update }
31
31
  end
32
32
 
33
33
  end
34
-
34
+
35
35
  end
@@ -17,6 +17,7 @@ module Freightrain
17
17
  return result[0] || nil
18
18
  end
19
19
 
20
+ #TODO: refactor, this needs a little cleanup, method does too much
20
21
  def each_binding
21
22
  return nil unless filename
22
23
  binding_collection = YAML.load_file(filename) || []
@@ -6,11 +6,11 @@ module Freightrain
6
6
  attr_accessor :data_source
7
7
 
8
8
  def initialize(widget, options)
9
- @cache = :__NOVALUE
9
+ @cache = :__NOVALUE #TODO: this is necessary but really ugly - evaluate a possible replacement
10
10
  @widget = widget
11
11
  @property = options[:property].to_s.split('.')
12
12
  @path = options[:path].to_s.split('.')
13
- @converter = ConverterFactory.create(options[:converter]) || DefaultConverter.new
13
+ @converter = ConverterFactory.create(options[:converter]) || DefaultConverter.new #TODO: if in converterfactory?
14
14
  @force = options[:force]
15
15
  end
16
16
 
@@ -21,10 +21,10 @@ module Freightrain
21
21
  set(@property, @converter.from(value), @widget)
22
22
  @cache = value
23
23
  end
24
- rescue Exception => ex
25
- # p "#{@widget.name} - update"
26
- # p ex.message
27
- # p @path
24
+ rescue Exception => ex #TODO: logger...
25
+ p "#{@widget.name} - update"
26
+ p ex.message
27
+ p @path
28
28
  end
29
29
  end
30
30
 
@@ -32,13 +32,14 @@ module Freightrain
32
32
  begin
33
33
  value = get(@widget, @property)
34
34
  set(@path, @converter.to(value), data_source)
35
- rescue Exception => ex
35
+ rescue Exception => ex #TODO: logger...
36
36
  # p "#{@widget.name} - commit"
37
37
  # p ex.message
38
38
  # p @path
39
39
  end
40
40
  end
41
41
 
42
+ #TODO: find a way not to raise except when absolutely necessary
42
43
  private
43
44
  def get(source, path)
44
45
  my_path = path.clone
@@ -47,6 +48,7 @@ module Freightrain
47
48
  get(source.send(target), my_path)
48
49
  end
49
50
 
51
+ #TODO: find a way not to raise except when absolutely necessary
50
52
  def set(path, value, source)
51
53
  my_path = path.clone
52
54
  return source.send(my_path[0].to_s + "=",value) if my_path.length == 1
@@ -1,6 +1,7 @@
1
1
 
2
2
  module Freightrain
3
3
 
4
+ #TODO: make this an extension or even remove it
4
5
  class FreightElementView < FreightView
5
6
  extend ContainerHookable
6
7
 
@@ -1,6 +1,7 @@
1
1
 
2
2
  module Freightrain
3
3
 
4
+ #TODO: make this an extension
4
5
  class FreightElementViewModel < FreightViewModel
5
6
  extend ContainerHookable
6
7
 
@@ -1,4 +1,5 @@
1
1
 
2
+ #TODO: remove this
2
3
  module Freightrain
3
4
  module LayoutWidget
4
5
 
@@ -5,6 +5,7 @@ module RegionHost
5
5
 
6
6
  klass.class_eval do
7
7
 
8
+ #TODO: too much stuff here
8
9
  def build_regions
9
10
  region_definitions = self.class.instance_variable_get(:@regions)
10
11
  region_definitions ||= []
@@ -8,6 +8,7 @@ module Freightrain
8
8
  #SINGLETONS by default. That means if you consume
9
9
  #the same service from two different hosts, the LAST
10
10
  #host hooking to the callback will actually get the calls.
11
+ #TODO: make it transient?
11
12
  extend SignalHost
12
13
 
13
14
  def initialize
@@ -1,5 +1,4 @@
1
1
 
2
-
3
2
  module Freightrain
4
3
 
5
4
  module ServiceHost
@@ -1,6 +1,7 @@
1
1
 
2
2
  module Freightrain
3
3
 
4
+ #TODO: give this more responsibility
4
5
  class FreightSignal
5
6
 
6
7
  def fire(*args)
@@ -1,5 +1,4 @@
1
1
 
2
-
3
2
  module Freightrain
4
3
 
5
4
  module SignalHost
@@ -1,6 +1,7 @@
1
1
 
2
2
  class String
3
3
 
4
+ #TODO: maybe activesupport has something like this
4
5
  def to_convention
5
6
  return "" if self.empty?
6
7
  clone = self.clone
@@ -1,4 +1,5 @@
1
1
 
2
+ #TODO: is this really necessary?
2
3
  class CallbackWrapper
3
4
 
4
5
  attr_reader :method
@@ -9,6 +9,7 @@ module Freightrain
9
9
 
10
10
  # attr_reader :widgets
11
11
 
12
+ #TODO: CRITICAL make it toolkit-agnostic
12
13
  def widgets
13
14
  return @widgets.select { |widget| widget.kind_of? BindingBase }
14
15
  end
@@ -1,4 +1,5 @@
1
1
 
2
+ #TODO: find a good templating system to import and ditch this hack
2
3
  require "rubygems"
3
4
  require "require_all"
4
5
 
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freightrain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 5
9
+ version: 0.6.5
5
10
  platform: ruby
6
11
  authors:
7
12
  - Andrea Dallera
@@ -9,29 +14,37 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-05-11 00:00:00 +02:00
17
+ date: 2010-05-17 00:00:00 +02:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: require_all
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 1
30
+ - 0
23
31
  version: 1.1.0
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: needle
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 3
44
+ - 0
33
45
  version: 1.3.0
34
- version:
46
+ type: :runtime
47
+ version_requirements: *id002
35
48
  description: ruby desktop development made easy
36
49
  email: andrea@andreadallera.com
37
50
  executables:
@@ -62,6 +75,7 @@ files:
62
75
  - lib/freightrain/binding/converters/default_converter.rb
63
76
  - lib/freightrain/binding/converters/converter_factory.rb
64
77
  - lib/freightrain/binding/freight_binding.rb
78
+ - lib/freightrain/binding/binding_base.rb
65
79
  - lib/freightrain/binding/binding_loader.rb
66
80
  - lib/freightrain/binding/binding_host.rb
67
81
  - lib/freightrain/views/interface_builder.rb
@@ -84,8 +98,15 @@ files:
84
98
  - lib/freightrain/services/freight_service.rb
85
99
  - lib/freightrain/elements/freight_element_view.rb
86
100
  - lib/freightrain/elements/freight_element_view_model.rb
87
- - lib/freightrain/elements/element_extension.rb
88
101
  - lib/freightrain/elements/layout_widget.rb
102
+ - lib/extensions/qt/widgets/qt_label.rb
103
+ - lib/extensions/qt/widgets/qt_base.rb
104
+ - lib/extensions/qt/widgets/qt_line_edit.rb
105
+ - lib/extensions/qt/widgets/qt_abstract_button.rb
106
+ - lib/extensions/qt/widgets/qt_widget.rb
107
+ - lib/extensions/qt/interface_builder.rb
108
+ - lib/extensions/qt/dialog_helper.rb
109
+ - lib/extensions/qt/qt_bootstrapper.rb
89
110
  - lib/extensions/gtk/gtk_bootstrapper.rb
90
111
  - lib/extensions/gtk/widgets/gtk_calendar.rb
91
112
  - lib/extensions/gtk/widgets/gtk_toggle_button.rb
@@ -99,7 +120,6 @@ files:
99
120
  - lib/extensions/gtk/widgets/gtk_combo_box.rb
100
121
  - lib/extensions/gtk/interface_builder.rb
101
122
  - lib/extensions/gtk/dialog_helper.rb
102
- - lib/extensions/gtk/binding_base.rb
103
123
  - lib/freightrain.rb
104
124
  has_rdoc: true
105
125
  homepage: http://github.com/bolthar/freightrain
@@ -114,18 +134,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
134
  requirements:
115
135
  - - ">="
116
136
  - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
117
139
  version: "0"
118
- version:
119
140
  required_rubygems_version: !ruby/object:Gem::Requirement
120
141
  requirements:
121
142
  - - ">="
122
143
  - !ruby/object:Gem::Version
144
+ segments:
145
+ - 0
123
146
  version: "0"
124
- version:
125
147
  requirements: []
126
148
 
127
149
  rubyforge_project:
128
- rubygems_version: 1.3.5
150
+ rubygems_version: 1.3.6
129
151
  signing_key:
130
152
  specification_version: 3
131
153
  summary: ruby desktop development made easy
@@ -1,17 +0,0 @@
1
-
2
- module BindingBase
3
-
4
- def bind(binding_options)
5
- @bindings ||= {}
6
- binding = FreightBinding.new(self, binding_options)
7
- #TODO: send out warning on override?
8
- @bindings[binding_options[:property]] = binding
9
- return binding
10
- end
11
-
12
- def bindings
13
- @bindings ||= {}
14
- return @bindings.values
15
- end
16
-
17
- end