qtext 0.6.0 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,6 @@
1
+ == 0.6.2
2
+ * Fix some errors with ActionBuilder. Add ActionBuilder#group_names
3
+
1
4
  == 0.6.0
2
5
  * add Qt::Widget.signal class method which adds some signal emitting and
3
6
  handling methods.
data/Manifest.txt CHANGED
@@ -10,6 +10,7 @@ lib/qtext.rb
10
10
  lib/qtext/action_builder.rb
11
11
  lib/qtext/extensions.rb
12
12
  lib/qtext/flags.rb
13
+ lib/qtext/hash_collector.rb
13
14
  lib/qtext/object_table_model.rb
14
15
  lib/qtext/version.rb
15
16
  script/console
@@ -89,9 +89,13 @@ module ActionBuilder
89
89
  end
90
90
  end
91
91
 
92
+ def group_names
93
+ @group_names ||= []
94
+ end
95
+
92
96
  # Create a new separator and add a new separator.
93
97
  def separator
94
- Qt::Action.construct( parent ) do |action|
98
+ Qt::Action.new( parent ) do |action|
95
99
  action.separator = true
96
100
  add_action action
97
101
  collect_actions << action
@@ -103,15 +107,22 @@ module ActionBuilder
103
107
  # A method called "#{group_name}_actions" will be added to self, which will return the
104
108
  # set of Qt::Action instances created in the block.
105
109
  def list( group_name, &block )
110
+ @group_name = group_name
111
+ group_names << group_name
106
112
  unless respond_to?( "#{group_name.to_s}_actions" )
107
113
  self.class.send( :define_method, "#{group_name.to_s}_actions" ) do
108
114
  eval "@#{group_name.to_s}_actions"
109
115
  end
110
116
  end
111
- self.collect_actions.clear
117
+ self.collect_actions = []
118
+
112
119
  yield( self )
113
120
  # copy actions to the right instance variable
114
121
  eval "@#{group_name.to_s}_actions = collect_actions"
122
+
123
+ # reset these, just for cleanliness
124
+ @group_name = nil
125
+ self.collect_actions = []
115
126
  end
116
127
 
117
128
  # Create a new Qt::Action and
@@ -130,7 +141,7 @@ module ActionBuilder
130
141
  raise "you can't specify both :method and a block"
131
142
  end
132
143
 
133
- Qt::Action.construct( parent ) do |action|
144
+ Qt::Action.new( parent ) do |action|
134
145
  action.object_name = name.to_s
135
146
  action.text = text
136
147
  options.each do |k,v|
@@ -3,6 +3,7 @@
3
3
  require 'Qt4'
4
4
  require 'qtext/flags.rb'
5
5
  require 'bigdecimal'
6
+ require 'qtext/hash_collector.rb'
6
7
 
7
8
  # Because Qt::Variant.new( obj ) is a PITA to type
8
9
  class Object
@@ -35,6 +36,18 @@ class BigDecimal
35
36
  end
36
37
  end
37
38
 
39
+ # Collect row and column values in various ways
40
+ class IndexCollector < HashCollector
41
+ dsl_accessor :row, :column
42
+
43
+ def initialize( row, column )
44
+ super()
45
+ # MUST use writers here, not instance variables
46
+ self.row = row
47
+ self.column = column
48
+ end
49
+ end
50
+
38
51
  # convenience methods
39
52
  module Qt
40
53
 
@@ -132,6 +145,45 @@ module Qt
132
145
  end
133
146
  end
134
147
 
148
+ # CHange and cOP(P)Y - make a new index based on this one,
149
+ # modify the new index with values from the parameters, the
150
+ # args hash or the block.
151
+ # The block will instance_eval with no args, or pass self
152
+ # if there's one arg. You can also pass two parameters, interpreted
153
+ # as row, columns.
154
+ # Examples:
155
+ # new_index = index.choppy { row 10; column 13 }
156
+ # new_index = index.choppy { row 10; column 13 }
157
+ # new_index = index.choppy( 1,3 )
158
+ # new_index = index.choppy { |i| i.row += 1 }
159
+ # new_index = index.choppy :row => 16
160
+ # same_index = index.choppy
161
+ def choppy( *args, &block )
162
+ return ModelIndex.invalid unless self.valid?
163
+
164
+ # initialize with defaults
165
+ stash = IndexCollector.new( row, column )
166
+
167
+ case args.size
168
+ when 0,1
169
+ # args.first is a hash, or nil
170
+ stash.collect( args.first, &block )
171
+ when 2
172
+ # args are two parameters - row, column
173
+ stash.row, stash.column = args
174
+ stash.collect( &block )
175
+ else
176
+ raise TypeError.new( "incorrect args #{args.inspect}" )
177
+ end
178
+
179
+ # return an invalid index if it's out of bounds,
180
+ # or the choppy'd index if it's OK.
181
+ if stash.row >= model.row_count || stash.column >= model.column_count
182
+ ModelIndex.invalid
183
+ else
184
+ model.create_index( stash.row.to_i, stash.column.to_i )
185
+ end
186
+ end
135
187
  end
136
188
 
137
189
  # Make keystrokes events easier to work with. For <tt>Qt::Key_Whatever</tt>
@@ -0,0 +1,120 @@
1
+ # A DSL class that allows options to be collected for a field
2
+ # definition using a block and/or a hash.
3
+ # hash = { :colour => :red, :hue => 15 }
4
+ # collector = HashCollector.new( hash ) do |hc|
5
+ # hc.saturation = 17
6
+ # hc.opacity = 0.43
7
+ # hc.grooviness = 100
8
+ # end
9
+ # or like this (without the block parameter)
10
+ # collector = HashCollector.new( hash ) do
11
+ # saturation 17
12
+ # opacity 0.43
13
+ # grooviness = 100
14
+ # end
15
+ # either way, a call to collector.to_hash will result in
16
+ # { :hue=>15, :saturation=>17, :opacity=>0.43, :grooviness=>100, :colour=>:red }
17
+ # and the following accessors will be added
18
+ # collector.hue
19
+ # collector.hue( some_value )
20
+ # collector.hue = some_value
21
+ # for hue, saturation, opacity, grooviness and colour.
22
+ class HashCollector
23
+ # remove unused methods that might clash with user accessors
24
+ keep_methods = %w( __send__ __id__ self send class inspect instance_eval instance_variables )
25
+ instance_methods.each do |method|
26
+ undef_method( method ) unless keep_methods.include?( method )
27
+ end
28
+
29
+ # Collect values from the hash and the block, using the collect method.
30
+ def initialize( hash = {}, &block )
31
+ @hash = hash || {}
32
+ gather( &block )
33
+ end
34
+
35
+ # evaluate the block and collect options from args. Even if it's nil.
36
+ def collect( args = {}, &block )
37
+ @hash.merge!( args || {} )
38
+ unless block.nil?
39
+ if block.arity == -1
40
+ instance_eval &block
41
+ else
42
+ yield self
43
+ end
44
+ end
45
+ end
46
+
47
+ # return a hash of the collected elements
48
+ def to_hash
49
+ @hash
50
+ end
51
+
52
+ protected
53
+
54
+ # Modified from Jim Freeze's article.
55
+ # For each symbol, add accessors to allow:
56
+ # instance.symbol as reader
57
+ # instance.symbol( value ) as writer
58
+ # instance.symbol = value as writer
59
+ def self.dsl_accessor( *symbols )
60
+ @stripper ||= /^([^\= ]+)\s*\=?\s*$/
61
+ symbols.each do |sym|
62
+ stripped = @stripper.match( sym.to_s )[1]
63
+ line, st = __LINE__, <<-EOF
64
+ def #{stripped}(*val)
65
+ if val.empty?
66
+ @hash[:#{stripped}]
67
+ else
68
+ @hash[:#{stripped}] = val.size == 1 ? val[0] : val
69
+ end
70
+ end
71
+
72
+ def #{stripped}=(*val)
73
+ @hash[:#{stripped}] = val.size == 1 ? val[0] : val
74
+ end
75
+ EOF
76
+ class_eval st, __FILE__, line + 1
77
+ end
78
+ end
79
+
80
+ # Do not allow accessors to be added dynamically. In other words,
81
+ # a subclass like this
82
+ # class IndexCollector < HashCollector
83
+ # dsl_static
84
+ # dsl_accessor :row, :column
85
+ # end
86
+ # will fail if used like this
87
+ # collector = IndexCollector.new( :row => 4, :column => 6 ) do
88
+ # other 'oops'
89
+ # end
90
+ # because :other isn't added by dsl_accessor.
91
+ def self.dsl_static
92
+ @dynamic = false
93
+ end
94
+
95
+ # Allow accessors to be added dynamically, the default.
96
+ def self.dsl_dynamic
97
+ @dynamic = true
98
+ end
99
+
100
+ def self.dynamic?
101
+ # don't optimise this to @dynamic ||= true, because it will reset
102
+ # an @dynamic of false to true
103
+ @dynamic = true if @dynamic.nil?
104
+ @dynamic
105
+ end
106
+
107
+ # Originally from Jim Freeze's article. Add the accessor methods if
108
+ # they don't already exist, and if dsl_dynamic is in effect, which is
109
+ # the default. If dsl_static is in effect, the normal method_missing
110
+ # behaviour will be invoked.
111
+ def method_missing(sym, *args)
112
+ if self.class.dynamic?
113
+ self.class.dsl_accessor sym
114
+ send( sym, *args )
115
+ else
116
+ super
117
+ end
118
+ end
119
+
120
+ end
@@ -1,6 +1,31 @@
1
1
  require 'active_support'
2
2
  require 'qtext/flags.rb'
3
3
 
4
+ module Qt
5
+ class ModelIndex
6
+ def entity
7
+ model.collection[row]
8
+ end
9
+ end
10
+ end
11
+
12
+ class ZeroSize
13
+ def size; 0; end
14
+ end
15
+
16
+ module TreeViewable
17
+ attr_accessor :parent
18
+
19
+ def children=( ary )
20
+ ary.each{|x| x.parent = self}
21
+ @children = ary
22
+ end
23
+
24
+ def children
25
+ @children ||= ZeroSize.new
26
+ end
27
+ end
28
+
4
29
  =begin rdoc
5
30
  A header for ObjectTableModel.
6
31
  =end
@@ -55,6 +80,7 @@ class ObjectTableModel < Qt::AbstractTableModel
55
80
  # - :collection is an alias for :data
56
81
  def initialize( args = {} )
57
82
  super( args[:parent] )
83
+ @parent = args[:parent]
58
84
  @collection = args[:data] || args[:collection] || []
59
85
  set_headers( args[:headers] )
60
86
  end
@@ -62,7 +88,7 @@ class ObjectTableModel < Qt::AbstractTableModel
62
88
  # implementation of Qt:AbstractItemModel method
63
89
  def rowCount( parent_model_index = Qt::ModelIndex.invalid )
64
90
  if parent_model_index.valid?
65
- 0
91
+ parent_model_index.entity.children.size
66
92
  else
67
93
  collection.size
68
94
  end
@@ -70,12 +96,25 @@ class ObjectTableModel < Qt::AbstractTableModel
70
96
 
71
97
  def columnCount( parent_model_index = Qt::ModelIndex.invalid )
72
98
  if parent_model_index.valid?
73
- 0
99
+ parent_model_index.entity.children.size == 0 ? 0 : headers.size
74
100
  else
75
101
  headers.size
76
102
  end
77
103
  end
78
104
 
105
+ # TODO what exactly is this for again? Something to do with
106
+ # QWidget.parent() and Qt::AbstractTableModel.parent(...)
107
+ def parent( *args )
108
+ if args.size == 0
109
+ retval = super()
110
+ retval || @parent
111
+ else
112
+ if model_index.valid?
113
+ collection.index( model_index.entity.parent )
114
+ end
115
+ end
116
+ end
117
+
79
118
  # implementation of Qt:AbstractItemModel method
80
119
  def headerData( section, orientation, role )
81
120
  value =
data/lib/qtext/version.rb CHANGED
@@ -2,7 +2,7 @@ module Qtext #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 6
5
- TINY = 0
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -0,0 +1,180 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class OtherThing < HashCollector
4
+ dsl_static
5
+ dsl_accessor :thing, :other
6
+ end
7
+
8
+ class BuildOn < HashCollector
9
+ dsl_accessor :ook
10
+ end
11
+
12
+ class TestHashCollector < Test::Unit::TestCase
13
+ def setup
14
+ @hash = { :colour => :red, :hue => 15 }
15
+ @collected_hash = { :saturation => 17, :opacity => 0.43, :grooviness => 100 }
16
+ @full_hash = @hash.merge( @collected_hash )
17
+ @collector = HashCollector.new
18
+ end
19
+
20
+ def teardown
21
+ end
22
+
23
+ context 'static hash collector' do
24
+ setup do
25
+ @collector = OtherThing.new
26
+ end
27
+
28
+ should "throw NoMethodError on collection" do
29
+ assert_raise( NoMethodError ) do
30
+ @collector.collect { thing 2; blah 3 }
31
+ end
32
+ assert_raise( NoMethodError ) do
33
+ @collector.collect {|c| c.blah = 3 }
34
+ end
35
+ assert_raise( NoMethodError ) { @collector.blah }
36
+ assert_raise( NoMethodError ) { @collector.blah = 5 }
37
+ end
38
+
39
+ should "understand defined attributes" do
40
+ assert_nothing_raised do
41
+ @collector.collect do
42
+ thing 1
43
+ other 2
44
+ end
45
+ end
46
+
47
+ assert_nothing_raised { @collector.thing = 2 }
48
+ assert_nothing_raised { @collector.other = 4 }
49
+ end
50
+
51
+ should "be dynamic" do
52
+ assert BuildOn.dynamic?
53
+ end
54
+ end
55
+
56
+ def assert_collected( collector )
57
+ assert_equal 17, collector.saturation
58
+ assert_equal 0.43, collector.opacity
59
+ assert_equal 100, collector.grooviness
60
+ end
61
+
62
+ def assert_hashed( collector )
63
+ assert_equal :red, collector.colour
64
+ assert_equal 15, collector.hue
65
+ end
66
+
67
+ should "collect from a hash" do
68
+ @collector.collect( @hash )
69
+ assert_equal @hash, @collector.to_hash
70
+ end
71
+
72
+ should 'not fail on a nil hash' do
73
+ @collector.collect nil
74
+ assert_equal 0, @collector.to_hash.size
75
+ end
76
+
77
+ should 'collect from a block, with dsl setters' do
78
+ @collector.collect do
79
+ saturation 17
80
+ opacity 0.43
81
+ grooviness 100
82
+ end
83
+ assert_collected( @collector )
84
+ assert_equal @collected_hash, @collector.to_hash
85
+ end
86
+
87
+ should 'collect from a block, with = setters' do
88
+ @collector.collect do |hc|
89
+ hc.saturation = 17
90
+ hc.opacity = 0.43
91
+ hc.grooviness = 100
92
+ end
93
+ assert_collected( @collector )
94
+ assert_equal @collected_hash, @collector.to_hash
95
+ end
96
+
97
+ should 'collect from a hash and block, with dsl setters' do
98
+ @collector.collect( @hash ) do
99
+ saturation 17
100
+ opacity 0.43
101
+ grooviness 100
102
+ end
103
+ assert_collected( @collector )
104
+ assert_hashed( @collector )
105
+ assert_equal @full_hash, @collector.to_hash
106
+ end
107
+
108
+ should 'collect from a hash and block with = setters' do
109
+ @collector.collect( @hash ) do |hc|
110
+ hc.saturation = 17
111
+ hc.opacity = 0.43
112
+ hc.grooviness = 100
113
+ end
114
+ assert_collected( @collector )
115
+ assert_hashed( @collector )
116
+ assert_equal @full_hash, @collector.to_hash
117
+ end
118
+
119
+ should 'not fail construction with a nil hash' do
120
+ collector = HashCollector.new nil
121
+ assert_equal 0, @collector.to_hash.size
122
+ end
123
+
124
+ should 'construct from a hash and block, with dsl setters' do
125
+ collector = HashCollector.new( @hash ) do
126
+ saturation 17
127
+ opacity 0.43
128
+ grooviness 100
129
+ end
130
+ assert_collected( collector )
131
+ assert_hashed( collector )
132
+ assert_equal @full_hash, collector.to_hash
133
+ end
134
+
135
+ should 'construct from a hash and bslock with = setters' do
136
+ collector = HashCollector.new( @hash ) do |hc|
137
+ hc.saturation = 17
138
+ hc.opacity = 0.43
139
+ hc.grooviness = 100
140
+ end
141
+ assert_collected( collector )
142
+ assert_hashed( collector )
143
+ assert_equal @full_hash, collector.to_hash
144
+ end
145
+
146
+ should 'not conflict with Object methods' do
147
+ hc = HashCollector.new do
148
+ display 'something'
149
+ sample "This is a long string designed to test the code to the very limits of possibility."
150
+ end
151
+
152
+ assert_equal 'something', hc.display
153
+ assert_equal "This is a long string designed to test the code to the very limits of possibility.", hc.sample
154
+ end
155
+
156
+ should 'work when called with &block instead of a do ... end' do
157
+ options = gather_block do
158
+ display 'activity'
159
+ order 'lower(activity)'
160
+ sample 'Troubleshooting'
161
+ conditions 'active = true'
162
+ end
163
+ assert_equal 'activity', options[:display]
164
+ end
165
+
166
+ should 'work when called with options and &block instead of a do ... end' do
167
+ options = gather_block :blah => 'ook' do
168
+ display 'activity'
169
+ order 'lower(activity)'
170
+ sample 'Troubleshooting'
171
+ conditions 'active = true'
172
+ end
173
+ assert_equal 'activity', options[:display]
174
+ assert_equal 'ook', options[:blah]
175
+ end
176
+
177
+ def gather_block( options = {}, &block )
178
+ HashCollector.new( options, &block ).to_hash
179
+ end
180
+ end
@@ -0,0 +1,111 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TestModelIndex < Test::Unit::TestCase
4
+ def self.startup
5
+ end
6
+
7
+ def self.shutdown
8
+ end
9
+
10
+ def setup
11
+ @model = Qt::StandardItemModel.new( 4, 4 )
12
+ ( 0...@model.row_count ).each do |i|
13
+ ( 0...@model.column_count ).each do |j|
14
+ @model.set_item( i, j, Qt::StandardItem.new( "location: (#{i},#{j})" ) )
15
+ end
16
+ end
17
+ @zero_index = @model.create_index(0,0)
18
+ end
19
+
20
+ def teardown
21
+ end
22
+
23
+ should "be valid" do
24
+ assert @zero_index.valid?
25
+ end
26
+
27
+ should_eventually "be invalid" do
28
+ mi = @model.create_index( @model.row_count+1, @model.column_count+1 )
29
+ assert !mi.valid?
30
+ end
31
+
32
+ should 'be an invalid copy of an invalid index' do
33
+ choppy = Qt::ModelIndex.invalid.choppy
34
+ assert !choppy.valid?
35
+ end
36
+
37
+ should "be a valid exact copy" do
38
+ choppy = @zero_index.choppy
39
+ assert choppy.valid?
40
+ end
41
+
42
+ should 'be an invalid copy' do
43
+ choppy = @zero_index.choppy( :row => @model.row_count )
44
+ assert !choppy.valid?, "choppy: #{choppy.inspect}"
45
+
46
+ choppy = @zero_index.choppy( :column => @model.column_count )
47
+ assert !choppy.valid?
48
+ end
49
+
50
+ should 'be a copy with a changed row and column, from hash' do
51
+ choppy = @zero_index.choppy( :row => 1, :column => 2)
52
+ assert_equal 1, choppy.row, choppy.inspect
53
+ assert choppy.valid?, choppy.inspect
54
+ assert_equal 2, choppy.column, choppy.inspect
55
+ end
56
+
57
+ should 'be a choppy with incremented row and column, from block' do
58
+ choppy = @zero_index.choppy do |i|
59
+ i.row += 1
60
+ i.column += 2
61
+ end
62
+ assert choppy.valid?
63
+ assert_equal 1, choppy.row
64
+ assert_equal 2, choppy.column
65
+ end
66
+
67
+ should 'be a copy with changed row and column, from parameters' do
68
+ choppy = @zero_index.choppy(3,0)
69
+ assert choppy.valid?
70
+ assert_equal 3, choppy.row
71
+ assert_equal 0, choppy.column
72
+ end
73
+
74
+ should 'raise an exception because parameters are wrong' do
75
+ assert_raise TypeError do
76
+ @zero_index.choppy( 3 )
77
+ end
78
+ end
79
+
80
+ should 'be a copy with decremented row and column, from block' do
81
+ two_index = @model.create_index(2,2)
82
+
83
+ choppy = two_index.choppy do |i|
84
+ i.row -= 1
85
+ i.column -= 2
86
+ end
87
+ assert choppy.valid?
88
+ assert_equal 1, choppy.row
89
+ assert_equal 0, choppy.column
90
+ end
91
+
92
+ should 'be a copy with changed row and column, from block' do
93
+ choppy = @zero_index.choppy do |i|
94
+ i.row = 3
95
+ i.column = 2
96
+ end
97
+ assert choppy.valid?
98
+ assert_equal 3, choppy.row
99
+ assert_equal 2, choppy.column
100
+ end
101
+
102
+ should 'be a copy with changed row and column, from instance_eval' do
103
+ choppy = @zero_index.choppy do
104
+ row 3
105
+ column 2
106
+ end
107
+ assert choppy.valid?
108
+ assert_equal 3, choppy.row
109
+ assert_equal 2, choppy.column
110
+ end
111
+ end
@@ -4,6 +4,7 @@ require 'Qt4'
4
4
 
5
5
  class TestObjectTableModel < Test::Unit::TestCase
6
6
  Thing = Struct.new( :name, :value, :location, :price, :ignored )
7
+ Thing.include TreeViewable
7
8
 
8
9
  def self.startup
9
10
  $app ||= Qt::Application.new( [] )
@@ -16,12 +17,18 @@ class TestObjectTableModel < Test::Unit::TestCase
16
17
  Thing.new( "Bed", 'large', 'bedroom' ),
17
18
  Thing.new( "Approximation", 'useful', 'maths', 'none', 'all' )
18
19
  ]
20
+ @data[3].children = @data
19
21
  @model = ObjectTableModel.new( :data => @data, :headers => [ :name, :value, :location, Header.new( :attribute => :price, :alignment => Qt::AlignRight ) ] )
20
22
  @main_window = Qt::MainWindow.new
21
- @view = Qt::TableView.new( @main_window ) { |tv| tv.model = @model }
23
+ #~ @view = Qt::TableView.new( @main_window ) { |tv| tv.model = @model }
24
+ @view = Qt::TreeView.new( @main_window ) { |tv| tv.model = @model }
22
25
  @main_window.central_widget = @view
23
26
  end
24
27
 
28
+ should 'have children for data[3]' do
29
+ assert_equal 4, @data[3].children.size
30
+ end
31
+
25
32
  should 'have a 4 x 4 size' do
26
33
  assert_equal 4, @model.rowCount
27
34
  assert_equal 4, @model.row_count
@@ -55,14 +62,6 @@ class TestObjectTableModel < Test::Unit::TestCase
55
62
  assert_equal Qt::AlignRight.to_i, @model.data( @model.create_index(0,3), Qt::TextAlignmentRole ).to_i & Qt::AlignRight.to_i
56
63
  end
57
64
 
58
- should_eventually 'display the window' do
59
- #~ should 'display the window' do
60
- @main_window.window_title = 'Test ObjectTableModel'
61
- @main_window.move( 150, 0 )
62
- @main_window.show
63
- $app.exec
64
- end
65
-
66
65
  should 'have a nil parent' do
67
66
  assert_nil @model.parent
68
67
  end
@@ -71,4 +70,20 @@ class TestObjectTableModel < Test::Unit::TestCase
71
70
  model = ObjectTableModel.new( :parent => @model, :data => @data, :headers => [ :name, :value, :location, Header.new( :attribute => :price, :alignment => Qt::AlignRight ) ] )
72
71
  assert_equal @model, model.parent
73
72
  end
73
+
74
+ context 'tree view' do
75
+ should 'have children' do
76
+ model_index = @model.create_index(3,0)
77
+ assert_equal 4, @model.row_count( model_index )
78
+ end
79
+ end
80
+
81
+ def dont_test_show_window
82
+ #~ def test_show_window
83
+ @main_window.window_title = 'Test ObjectTableModel'
84
+ @main_window.move( 150, 0 )
85
+ @main_window.show
86
+ $app.exec
87
+ end
88
+
74
89
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qtext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - FIXME full name
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-09 00:00:00 +02:00
12
+ date: 2009-01-29 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.7.0
23
+ version: 1.8.0
24
24
  version:
25
25
  description: description of gem
26
26
  email:
@@ -47,6 +47,7 @@ files:
47
47
  - lib/qtext/action_builder.rb
48
48
  - lib/qtext/extensions.rb
49
49
  - lib/qtext/flags.rb
50
+ - lib/qtext/hash_collector.rb
50
51
  - lib/qtext/object_table_model.rb
51
52
  - lib/qtext/version.rb
52
53
  - script/console
@@ -82,11 +83,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
83
  requirements: []
83
84
 
84
85
  rubyforge_project: qtext
85
- rubygems_version: 1.2.0
86
+ rubygems_version: 1.3.1
86
87
  signing_key:
87
88
  specification_version: 2
88
89
  summary: description of gem
89
90
  test_files:
91
+ - test/test_model_index_extensions.rb
90
92
  - test/test_object_table.rb
93
+ - test/test_hash_collector.rb
91
94
  - test/test_widget.rb
92
95
  - test/test_helper.rb