glimmer-dsl-swt 4.24.4.6 → 4.24.4.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e35a647a3770c1d5d57e5f7f8a26ad1f607e1c77719797643238f11e99ba9a55
4
- data.tar.gz: dbf9f410d0c1008ad62e590811168ea8b0ec2e119dfc275a2feed6454cf5f1ff
3
+ metadata.gz: 0fe762c944e91cd87d49690912e9bfe3513335ff8ac80d5248a485b597bc82fb
4
+ data.tar.gz: 0fc8caa7604fbc524020ab9b7c91f7cf5e1aa44055c116607a9103ef407b4b2e
5
5
  SHA512:
6
- metadata.gz: a49ad225fa01ee4725a3103766ec7f7a4ecfea439df3d66ca3fc77448345766f4e60072691f903579d27d7a6999172581aadfcea5445c5ea973ef56894b40388
7
- data.tar.gz: c4dc1ae979fccb36b594a368c7f49e48722782589fa65b432d2e04d0306cbf8b878b0e98418d49b9f14955dc5266e9bc1bf7eaee510d9b72d9ab63ac9785100a
6
+ metadata.gz: e1e058691460ad791753d7040268e0ede146a075a32eb85b7c9b5bb12cc87316dfa90965b27f274741ac7c4c7c9fd7d03a5196dcffc5c5156918251c2cf41196
7
+ data.tar.gz: 3ed723eb74b7b225d7a082732cfbb0c50350221ab532576f6da14000cad1c8149bb0a5becd6db78f33b318b1e09ab8e12ff0bae9069578ce379428ff98250661
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.24.4.8
4
+
5
+ - Optimize `refined_table` sorting to avoid re-running upon navigating pages
6
+ - Fix issue with `refined_table` sorting breaking page remembering behavior upon entering a filter query
7
+
8
+ ## 4.24.4.7
9
+
10
+ - Optimize performance of `refined_table` in filtering (it now caches results and replays them) and pagination (it now remembers last query page and avoids refiltering when paginating on the same query value)
11
+ - Improve `combo` `selection` data-binding by auto-converting `_options` values to `String` before setting as `Item`s on `combo` (e.g. in case `Integer` values were set like years)
12
+
3
13
  ## 4.24.4.6
4
14
 
5
15
  - Support `refined_table` sorting (now clicking on headers sorts the entire `model_array` collection, not just the visible rows)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.24.4.6
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.24.4.8
2
2
  ## JRuby Desktop Development GUI Framework
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
4
4
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
@@ -21,7 +21,7 @@ Featured in JRuby Cookbook](http://shop.oreilly.com/product/9780596519650.do) an
21
21
 
22
22
  ![Eclipse SWT RCP NASA Mars Rover](/images/glimmer-eclipse-swt-rcp-nasa-mars-rover.png)
23
23
 
24
- [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.24.4.6 includes [SWT 4.24](https://download.eclipse.org/eclipse/downloads/drops4/R-4.24-202206070700/), which was released on June 7, 2022. Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT.
24
+ [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.24.4.8 includes [SWT 4.24](https://download.eclipse.org/eclipse/downloads/drops4/R-4.24-202206070700/), which was released on June 7, 2022. Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT.
25
25
 
26
26
  **Starting in version 4.20.0.0, [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) comes with the new [***Shine***](/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#shine) syntax** for highly intuitive and visually expressive View/Model Attribute Mapping, relying on `<=>` for bidirectional (two-way) data-binding and `<=` for unidirectional (one-way) data-binding, providing an alternative to the `bind` keyword. That was [originally conceived back in 2007](https://andymaleh.blogspot.com/2007/12/data-shining-in-glimmer.html).
27
27
 
@@ -338,7 +338,7 @@ jgem install glimmer-dsl-swt
338
338
 
339
339
  Or this command if you want a specific version:
340
340
  ```
341
- jgem install glimmer-dsl-swt -v 4.24.4.6
341
+ jgem install glimmer-dsl-swt -v 4.24.4.8
342
342
  ```
343
343
 
344
344
  `jgem` is JRuby's version of `gem` command.
@@ -366,7 +366,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
366
366
 
367
367
  Add the following to `Gemfile`:
368
368
  ```
369
- gem 'glimmer-dsl-swt', '~> 4.24.4.6'
369
+ gem 'glimmer-dsl-swt', '~> 4.24.4.8'
370
370
  ```
371
371
 
372
372
  And, then run:
@@ -389,7 +389,7 @@ glimmer
389
389
  ```
390
390
 
391
391
  ```
392
- Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.24.4.6
392
+ Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.24.4.8
393
393
 
394
394
  Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
395
395
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.24.4.6
1
+ 4.24.4.8
@@ -4309,7 +4309,7 @@ Here is an explanation of the example above:
4309
4309
 
4310
4310
  ##### Refined Table
4311
4311
 
4312
- **(ALPHA FEATURE)**
4312
+ **(BETA FEATURE)**
4313
4313
 
4314
4314
  `refined_table` is a custom widget that can handle very large amounts of data by applying pagination and filtering.
4315
4315
 
@@ -4320,7 +4320,9 @@ Options:
4320
4320
  - `page` (default: `1` if table is filled and `0` otherwise): specifies initial page
4321
4321
  - `query` (default: `''`): specifies filter query term (empty shows all results)
4322
4322
 
4323
- Note that currently `refined_table` does not support sorting by clicking columns yet.
4323
+ When click columns (headers) in a `refined_table`, it sorts the entire `model_array`, not just the visible rows.
4324
+
4325
+ Also, upon filtering with a query term, moving in pages, and then unfiltering (backspacing)/refiltering, it remembers the last query term's page and results (through caching) and goes back to them, thus ensuring better performance.
4324
4326
 
4325
4327
  Example taken from [Hello, Refined Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-refined-table):
4326
4328
 
Binary file
@@ -39,6 +39,7 @@ module Glimmer
39
39
 
40
40
  before_body do
41
41
  self.query ||= ''
42
+ @last_query = self.query
42
43
  self.model_array ||= []
43
44
  self.filtered_model_array = []
44
45
  self.refined_model_array = []
@@ -52,6 +53,7 @@ module Glimmer
52
53
  model_binding = new_widget_binding.model_binding
53
54
  configure_sorting
54
55
  observe(self, :model_array) do
56
+ clear_query_cache
55
57
  filter_and_paginate
56
58
  end
57
59
  @table_proxy.content {
@@ -200,11 +202,23 @@ module Glimmer
200
202
  end
201
203
 
202
204
  def filter
203
- self.filtered_model_array = model_array.select do |model|
204
- @table_proxy.cells_for(model).any? do |cell_text|
205
- cell_text.to_s.downcase.include?(query.to_s.downcase)
205
+ new_query = query.to_s.strip
206
+ new_filtered_model_array = query_to_filtered_model_array_hash[new_query]
207
+ if new_filtered_model_array.nil?
208
+ if new_query.empty?
209
+ query_to_filtered_model_array_hash[new_query] = new_filtered_model_array = model_array.dup
210
+ else
211
+ new_filtered_model_array = model_array.select do |model|
212
+ @table_proxy.cells_for(model).any? do |cell_text|
213
+ cell_text.to_s.downcase.include?(new_query.downcase)
214
+ end
215
+ end
216
+ query_to_filtered_model_array_hash[new_query] = new_filtered_model_array
206
217
  end
207
218
  end
219
+ self.filtered_model_array = new_filtered_model_array
220
+ restore_query_page
221
+ @last_query = new_query
208
222
  end
209
223
 
210
224
  def paginate
@@ -212,10 +226,40 @@ module Glimmer
212
226
  self.refined_model_array = filtered_model_array[(page - 1) * per_page, per_page]
213
227
  end
214
228
 
229
+ def restore_query_page
230
+ new_query = query.to_s.strip
231
+ last_query = @last_query.to_s.strip
232
+ if last_query != new_query
233
+ query_to_page_hash[last_query] = page
234
+ else
235
+ query_to_page_hash[new_query] = page
236
+ end
237
+ if last_query != new_query && last_query.include?(new_query)
238
+ new_page = query_to_page_hash[new_query]
239
+ self.page = corrected_page(new_page) if new_page
240
+ end
241
+ end
242
+
243
+ def clear_query_cache
244
+ @query_to_filtered_model_array_hash = {}
245
+ @query_to_page_hash = {}
246
+ end
247
+
248
+ def query_to_filtered_model_array_hash
249
+ @query_to_filtered_model_array_hash ||= {}
250
+ end
251
+
252
+ def query_to_page_hash
253
+ @query_to_page_hash ||= {}
254
+ end
255
+
215
256
  private
216
257
 
217
258
  def configure_sorting
218
259
  @table_proxy.sort_strategy = lambda do
260
+ new_sort = @table_proxy.sort_block || @table_proxy.sort_by_block || @table_proxy.sort_property
261
+ new_sort_direction = @table_proxy.sort_direction
262
+ return if new_sort == @last_sort && new_sort_direction == @last_sort_direction
219
263
  array = model_array.dup
220
264
  array = array.sort_by(&:hash) # this ensures consistent subsequent sorting in case there are equivalent sorts to avoid an infinite loop
221
265
  # Converting value to_s first to handle nil cases. Should work with numeric, boolean, and date fields
@@ -241,6 +285,8 @@ module Glimmer
241
285
  end
242
286
  sorted_array = sorted_array.reverse if @table_proxy.sort_direction == :descending
243
287
  self.model_array = sorted_array
288
+ @last_sort = new_sort
289
+ @last_sort_direction = new_sort_direction
244
290
  end
245
291
  end
246
292
  end
@@ -1146,7 +1146,7 @@ module Glimmer
1146
1146
  end.to_java(Image)
1147
1147
  end,
1148
1148
  items: lambda do |value|
1149
- value.to_java :string
1149
+ value.map(&:to_s).to_java :string
1150
1150
  end,
1151
1151
  maximized_control: lambda do |value|
1152
1152
  value = (value.respond_to?(:swt_widget) ? value.swt_widget : value) if swt_widget.is_a?(SashForm)
@@ -32,3 +32,4 @@ Hello, Custom Shape!: H3J8ecp30Ak
32
32
  Battleship: b00OWeLZOt8
33
33
  Klondike Solitaire: qOzgiz9X3sI
34
34
  Tetris: oQbBCXACOLY
35
+ Hello, Refined Table!: PEfCZiUa1qo
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.24.4.6
4
+ version: 4.24.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-24 00:00:00.000000000 Z
11
+ date: 2022-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement