fxruby-enhancement 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,8 +50,8 @@ module Fox
50
50
  module Enhancement
51
51
  module Mapper
52
52
  <% for @class, @details in @api %>
53
- def <%= @class.snake %> name = nil, ii: <%= (Fox::Enhancement::INITFORCE.member? @class) ? Fox::Enhancement::INITFORCE[@class] : 0 %>, pos: Enhancement.stack.last, &block
54
- Enhancement.stack << (@os = os = OpenStruct.new(klass: <%= @class %>, op: [], ii: ii, fx: nil, kinder: [], inst: nil, instance_result: nil))
53
+ def <%= @class.snake %> name = nil, ii: <%= (Fox::Enhancement::INITFORCE.member? @class) ? Fox::Enhancement::INITFORCE[@class] : 0 %>, pos: Enhancement.stack.last, reuse: nil, &block
54
+ Enhancement.stack << (@os = os = OpenStruct.new(klass: <%= @class %>, op: [], ii: ii, fx: nil, kinder: [], inst: nil, instance_result: nil, reusable: reuse))
55
55
  Enhancement.components[name] = os unless name.nil?
56
56
  unless pos.nil?
57
57
  pos.kinder << os
@@ -73,7 +73,7 @@ module Fox
73
73
  <% @i+=1; end unless @details[:initialize].nil? %>
74
74
  self.instance_eval &block
75
75
  <% unless Fox::Enhancement::SPECIAL.member? @class %>
76
- os.fx = ->(){ <%= @class %>.new(*([pos.inst] + os.op[os.ii].to_h.values[1..-1])) }
76
+ os.fx = ->(){ <%= @class %>.new(*([pos.inst] + os.op[os.ii].to_h.values[1..-1].map{|v| (v.is_a?(OpenStruct)? v.inst : v)} )) }
77
77
  <% else %>
78
78
  os.fx = ->(){ <%= @class %>.new(*(os.op[os.ii].to_h.values)) }
79
79
  <% end %>
@@ -15,6 +15,7 @@ module Fox
15
15
  :FXRectangle,
16
16
  :FXGradient,
17
17
  :FXEvent,
18
+ :FXDataTarget,
18
19
  :FXFileStream,
19
20
  :FXExtentd]
20
21
  INITFORCE = { FXMenuBar: 1 }
@@ -1,18 +1,24 @@
1
1
  # coding: utf-8
2
2
  class OpenStruct
3
3
  extend Forwardable
4
- def_delegator :inst, :create, :activate
4
+ def_delegator :inst, :create, :activate
5
+ def_delegator :inst, :destroy, :deactivate
5
6
  def_delegator :inst, :run, :run_application
6
7
 
7
8
  # This assumes this OpenStruct instance represents the base,
8
9
  # and additionaly will take an optional object to use as the
9
10
  # actual base to allow for composures.
10
11
  #
12
+ # For the reuseable part of the tree, those are not created
13
+ # right away.
14
+ #
11
15
  # Returns the os base
12
16
  def create_fox_components use_as_base = nil
13
17
  if use_as_base.nil?
14
18
  self.inst = fx.() if self.inst.nil?
15
- self.kinder.each{ |os| os.create_fox_components }
19
+ self.kinder.each{ |os|
20
+ os.create_fox_components unless os.reusable?
21
+ }
16
22
  else
17
23
  OpenStruct.new(klass: use_as_base.class,
18
24
  kinder: [self],
@@ -21,9 +27,21 @@ class OpenStruct
21
27
  self
22
28
  end
23
29
 
30
+ def reusable?
31
+ self.reusable
32
+ end
33
+
34
+ def destroy_fox_components all: false
35
+ self.deactivate unless self.inst.nil?
36
+ self.kinder.each{ |os|
37
+ os.destroy_fox_components if all or not os.reusable?
38
+ }
39
+ self.inst = nil
40
+ end
41
+
24
42
  def instance_final_activate
25
43
  self.instance_result = self.instance_block.(self.inst) unless self.instance_block.nil?
26
- self.kinder.each{ |os| os.instance_final_activate }
44
+ self.kinder.each{ |os| os.instance_final_activate unless os.reusable? }
27
45
  self
28
46
  end
29
47
 
@@ -35,4 +53,16 @@ class OpenStruct
35
53
  Enhancement.activate_ingress_handlers self if ingress
36
54
  run_application
37
55
  end
56
+
57
+ # start the reusable components
58
+ def starten
59
+ create_fox_components
60
+ instance_final_activate
61
+ activate
62
+ end
63
+
64
+ # stop and deallocate the resusable components
65
+ def stoppen
66
+ destroy_fox_components
67
+ end
38
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fxruby-enhancement
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Mitchell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-16 00:00:00.000000000 Z
11
+ date: 2017-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semver2
@@ -282,6 +282,8 @@ files:
282
282
  - build/scrape-rdoc.rb
283
283
  - examples/.ruby-version
284
284
  - examples/bounce.rb
285
+ - examples/data_target.rb
286
+ - examples/dialog_box.rb
285
287
  - examples/hello.rb
286
288
  - fxruby-enhancement.gemspec
287
289
  - lib/fxruby-enhancement.rb