knjrbfw 0.0.46 → 0.0.47

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 (4) hide show
  1. data/VERSION +1 -1
  2. data/knjrbfw.gemspec +2 -2
  3. data/lib/knj/gtk2_tv.rb +112 -0
  4. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.46
1
+ 0.0.47
data/knjrbfw.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.46"
8
+ s.version = "0.0.47"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-06-11}
12
+ s.date = %q{2012-06-12}
13
13
  s.description = %q{Including stuff for HTTP, SSH and much more.}
14
14
  s.email = %q{k@spernj.org}
15
15
  s.extra_rdoc_files = [
data/lib/knj/gtk2_tv.rb CHANGED
@@ -48,6 +48,7 @@ module Knj::Gtk2::Tv
48
48
  col.add_attribute(renderer, :text, count)
49
49
 
50
50
  renderer.model = args[:model] if args.key?(:model)
51
+ renderer.has_entry = args[:has_entry] if args.key?(:has_entry)
51
52
  tv.append_column(col)
52
53
  else
53
54
  raise "Invalid type: '#{args[:type]}'."
@@ -104,6 +105,117 @@ module Knj::Gtk2::Tv
104
105
 
105
106
  return returnval
106
107
  end
108
+
109
+ @@editable_text_callbacks = {
110
+ :datetime => {
111
+ :value => proc{ |data|
112
+ begin
113
+ Knj::Datet.in(data[:value]).dbstr
114
+ rescue Knj::Errors::InvalidData
115
+ raise "Invalid timestamp entered."
116
+ end
117
+ },
118
+ :value_set => proc{ |data|
119
+ Knj::Datet.in(data[:value]).out
120
+ }
121
+ },
122
+ :time_as_sec => {
123
+ :value => proc{ |data| Knj::Strings.human_time_str_to_secs(data[:value]) },
124
+ :value_set => proc{ |data| Knj::Strings.secs_to_human_time_str(data[:value]) }
125
+ },
126
+ :int => {
127
+ :value => proc{ |data| data[:value].to_i.to_s }
128
+ },
129
+ :human_number => {
130
+ :value => proc{ |data| Knj::Locales.number_in(data[:value]) },
131
+ :value_set => proc{ |data| Knj::Locales.number_out(data[:value], data[:col_data][:decimals]) }
132
+ }
133
+ }
134
+
135
+ def self.editable_text_renderers_to_model(args)
136
+ args[:id_col] = 0 if !args.key?(:id_col)
137
+
138
+ args[:cols].each do |col_no, col_data|
139
+ col_data = {:col => col_data} if col_data.is_a?(Symbol)
140
+
141
+ if col_data.key?(:type)
142
+ if callbacks = @@editable_text_callbacks[col_data[:type]]
143
+ col_data[:value_callback] = callbacks[:value] if callbacks.key?(:value)
144
+ col_data[:value_set_callback] = callbacks[:value_set] if callbacks.key?(:value_set)
145
+ else
146
+ raise "Invalid type: '#{col_data[:type]}'."
147
+ end
148
+ end
149
+
150
+ renderer = args[:renderers][col_no]
151
+
152
+ if renderer.is_a?(Gtk::CellRendererText)
153
+ renderer.editable = true
154
+ renderer.signal_connect("edited") do |renderer, row_no, value|
155
+ iter = args[:tv].model.get_iter(row_no)
156
+ id = args[:tv].model.get_value(iter, args[:id_col])
157
+ model_obj = args[:ob].get(args[:model_class], id)
158
+ cancel = false
159
+
160
+ if col_data[:value_callback]
161
+ begin
162
+ value = col_data[:value_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data)
163
+ rescue => e
164
+ Knj::Gtk2.msgbox(e.message, "warning")
165
+ cancel = true
166
+ end
167
+ end
168
+
169
+ if !cancel
170
+ args[:change_before].call if args[:change_before]
171
+
172
+ begin
173
+ model_obj[col_data[:col]] = value
174
+ value = col_data[:value_set_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data) if col_data.key?(:value_set_callback)
175
+ iter[col_no] = value
176
+ rescue => e
177
+ Knj::Gtk2.msgbox(e.message, "warning")
178
+ ensure
179
+ args[:change_after].call(:args => args) if args[:change_after]
180
+ end
181
+ end
182
+ end
183
+ elsif renderer.is_a?(Gtk::CellRendererToggle)
184
+ renderer.activatable = true
185
+ renderer.signal_connect("toggled") do |renderer, path, val|
186
+ iter = args[:tv].model.get_iter(path)
187
+ id = args[:tv].model.get_value(iter, 0)
188
+ model_obj = args[:ob].get(args[:model_class], id)
189
+
190
+ if col_data[:value_callback]
191
+ begin
192
+ value = col_data[:value_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data)
193
+ rescue => e
194
+ Knj::Gtk2.msgbox(e.message, "warning")
195
+ cancel = true
196
+ end
197
+ end
198
+
199
+ if !cancel
200
+ args[:change_before].call if args[:change_before]
201
+ begin
202
+ if model_obj[col_data[:col]].to_i == 1
203
+ model_obj[col_data[:col]] = 0
204
+ iter[col_no] = 0
205
+ else
206
+ model_obj[col_data[:col]] = 1
207
+ iter[col_no] = 1
208
+ end
209
+ ensure
210
+ args[:change_after].call(:args => args) if args[:change_after]
211
+ end
212
+ end
213
+ end
214
+ else
215
+ raise "Invalid cellrenderer: '#{renderer.class.name}'."
216
+ end
217
+ end
218
+ end
107
219
  end
108
220
 
109
221
  class Gtk::TreeView
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.46
5
+ version: 0.0.47
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-06-11 00:00:00 +02:00
13
+ date: 2012-06-12 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -379,7 +379,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
379
379
  requirements:
380
380
  - - ">="
381
381
  - !ruby/object:Gem::Version
382
- hash: -3622671606985967169
382
+ hash: -3151714353965357285
383
383
  segments:
384
384
  - 0
385
385
  version: "0"