netzke-basepack 0.5.2 → 0.5.3

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.
data/.gitignore CHANGED
@@ -4,3 +4,5 @@ pkg
4
4
  doc
5
5
  Manifest
6
6
  test/app_root/vendor/plugins/netzke-core
7
+ rdoc
8
+ netzke-basepack.gemspec
data/CHANGELOG.rdoc CHANGED
@@ -1,183 +1,197 @@
1
- v0.5.2 - 2009-09-24
2
- Fix: combobox options for association columns didn't work properly.
3
- Fix: GridPanel's multi-edit functionality didn't work.
4
- Fix: gem dependencies are now correct.
5
-
6
- v0.5.1 - 2009-09-11
7
- Fix: crash when FormPanel has no data_class_name specified.
8
- New: DataAccessor widgets (Form/GridPanel) now let the underlying model know which widget (i.e. which instance) accesses its data. Can be useful in virtual attributes for generating widget-specific HTML.
9
- Fix: DataAccessor widgets (Form/GridPanel) now don't crash when calculating default columns/fields for the underlying model that has polymorphic columns.
10
- Fix: TabPanel was sending redundant "tabchange" event to server when initially instantiated.
11
- Fix: column filters were making GridPanel crash when the column editor was set to "textarea".
12
- Fix: dongling comma and "delete" object properties caused problems in IE and Safari.
13
- Fix: a stand-alone TabPanel would not render the active item.
14
- New: BasicApp: masquerading as "World". In this mode all the "touched" persistent preferences will be overwritten for all roles and users.
15
- Impr: configuration panel's header now shows the underlying model's name for convenience.
16
- Fix: MasqueradeSelector widget added.
17
-
18
- v0.5.0
19
- 2009-09-06
20
- Major refactoring and code reorganization.
21
- Compatibility with netzke-core v0.4.0.
22
- New: GridPanel now supports adding/editing records in a form and extended configurable search.
23
- New: GridPanel now can be loaded along with initial data (saves a request to the server).
24
- New: context menu in GridPanel
25
- New: "scopes" configuration option added to GridPanel to specify the searchlogic-compatible scope for the data.
26
- New: "strong_default_attrs" config option added to GridPanel to specify the attributes that will be assigned to each record that is created or modified by the grid.
27
- Usability: GridPanel's actions now get enabled/disabled according to the current selection.
28
- Configuration panel for grids and forms now works more consistently.
29
- New: some smart defaults for column/fields in Grid/FormPanel.
30
- New: BasicApp supports masquerading and application-wide AJAX activity indicator.
31
-
32
- v0.4.2
33
- 2009-05-07
34
- Fix: afterlayout event bind removed completely because of some tricky inconsistent behavior of Ext. BasicApp initializing code put directly into js_after_constructor.
35
-
36
- v0.4.1
37
- 2009-05-07
38
- Fix: afterlayout call moved to js_after_constructor in BasicApp
39
- Fix: cleaner persistent_config handling
40
- New: default's configuration enabled for FormPanel on class-level
41
- Fix: differently configured forms on the same page were showing the same columns
42
- Fix: TableEditor was showing config-tool by default (must be hidden)
43
-
44
- v0.4.0
45
- 2009-05-07
46
- Refactor: got rid of NetzkeFormPanelField and NetzkeGridPanelColumn classes along with their tables. The layout is now stored in netzke_preferences.
47
- New: dynamic hiding of columns from column menu in GridPanel.
48
- New: FormPanel now supports combo boxes.
49
- Fix: config[:bbar] set to 'false' now works in grids with pagination
50
- New: you can specify :preloaded => true in a tab config in TabPanel to preload the widget in that tab along with the TabPanel itself
51
- New: hideBusy added to Ext.StatusBar
52
- Fix: assigning association (a Boss to a Clerk) by virtual column (like boss__name) works now
53
- Fix: an old bug that made GridPanel misbehave after reordering the columns
54
-
55
- v0.3.10
56
- BasicApp-based widgets can now introduce arbitrary layout, following the convention of defining "main-panel" and "main-toolbar" panels with layout 'fit'.
57
-
58
- v0.3.9.1
59
- Bug fix: (regression) appLoaded() in BasicApp gets executed again
60
-
61
- v0.3.9
62
- AccordionPanel tests added
63
- TabPanel works now
64
- AccordionPanel replaced with more intuitive TabPanel in the configuration window
65
- Code clean-up by using "single" option to call appLoaded() on "afterlayout"
66
- Table editor bug fix
67
-
68
- v0.3.8
69
- Fixing Ext's EditableItem render problem.
70
- Filters by default enabled again in GridPanel.
71
- GridPanel enhancement: base_params get sent along with post_data.
72
-
73
- v0.3.7
74
- Netzke-core version sync.
75
- Rails 2.3.2 compatibility.
76
-
77
- v0.3.6
78
- Netzke-core v0.2.9 compatibility.
79
- Cleaner handling of custom renderers in GridPanel.
80
- New FormPanel-based PropertyEditor replaces PropertyGrid.
81
- Xcheckbox and check-column introduced.
82
- TODO file added.
83
- Bug fix: in TableEditor, the grid now responses on events also after being reconfigured.
84
- Bug fix: a couple of IE-related bugs.
85
- Significant code clean-up.
86
-
87
- v0.3.5
88
- Netzke-core v0.2.8 compatibility.
89
-
90
- v0.3.4
91
- Quick tips added to the "tools".
92
- Regression: the "General" configuration panel for GridPanel works again.
93
- GridPanel: rows_per_page configuration is now read from General config panel.
94
-
95
- v0.3.3.1
96
- Obviously using "new" as a property name in JavaScript isn't liked by Safari. Fixed.
97
-
98
- v0.3.3
99
- Bug fix: application not loading the widget specified in the URL (Ext.History-related).
100
- Some code refactoring and readability improvements.
101
- Ext.componentCache renamed into Ext.netzke.cache.
102
- New widget: TableEditor (a compound widget containing a grid and a form for editing table data).
103
- BorderLayoutPanel: a function getRegionWidget(region) added to access a widget in the specified region.
104
- Bug fix: BasicApp: FeedbackGhost now gets instantiated before BasicApp.
105
- Clearer handling of requests to non-existing aggregatees.
106
- Bug fix: now Ext 2.2.1 compatible.
107
- Column operations are now handled properly when :persistent_layout is set to false.
108
- Grid/Form fields configuration is extended with "ext_config" field which stores (in JSON-format) all the extra configuration, which gives extra flexibility to individual column/field configuration.
109
- :persistent_layout set to false now makes a widget ignore what's in the DB.
110
- Bug fix: AccordionPanel doesn't crash when no active item is specified.
111
- Bug fix: redundant flash messages for GridPanel.
112
- FeedbackGhost won't be showing anything if given an empty array.
113
- Cleaner handling of validations in GridPanel.
114
- FormPanel ready for the demo.
115
-
116
- v0.3.2
117
- Minor code restructuring.
118
- Working on FormPanel cont'd.
119
-
120
- v0.3.1
121
- Added the "conditions" configuration option to GridPanel to limit the search
122
- Basic column editor for grids has been replaced with FieldsConfigurator, which can do a bit more
123
- Added Checkbox column/form-field type for boolean fields
124
- "renderer" configuration option added for grid columns - any Ext.util.Format renderer can be specified there (thanks to Josh Holt for the initial idea)
125
-
126
- v0.3.0
127
- Added BasicApp widget - the base for a Ext.Viewport based ("application") widget with support for dynamic widget loading, browser history, authentification, and more. See the demo an http://netzke-demo.writelesscode.com
128
-
129
- v0.2.2
130
- Meta: updated netzke-core version (dependency)
131
-
132
- v0.2.1
133
- Regression: BorderLayoutPanel now restores the region sizes from the database
134
-
135
- v0.2.0.1
136
- Meta: updated netzke-core version (dependency)
137
-
138
- v0.2.0
139
- Some re-factoring and redesign along with netzke-core
140
- Panel widget added
141
- BorderLayoutPanel added
142
- AccordionPanel added
143
- Bug fix: column operations configuration misbehaving
144
- Renamed Grid into GridPanel
145
- Bug fix: exception was thrown at a column operation when no layout_manager was present
146
- Reworked permission handling in GridPanel.
147
-
148
- v0.1.4.1
149
- Meta: updated netzke-core version (dependency)
150
-
151
- v0.1.4
152
- Grid#get_columns provides default columns even if none of layout_manager_class & column_manager_class are available
153
-
154
- v0.1.3.1
155
- Meta: updated netzke-core version (dependency)
156
-
157
- v0.1.3
158
- Path to javascript for grid filters corrected
159
- Bug with creating new records in the grid fixed
160
- Optimized away redundant sql queries when calling Grid#get_columns (sort of memoization)
161
- README updated
162
-
163
- v0.1.2.1
164
- Meta: trying to succeed publishing on RubyForge
165
-
166
- v0.1.2
167
- Updated README with an example of stand-alone widget usage
168
- Meta: updated netzke-core version (dependency)
169
-
170
- v0.1.1.2
171
- Meta: updated netzke-core version (dependency)
172
-
173
- v0.1.1.1
174
- Meta: github gem naming convention
175
-
176
- v0.1.1
177
- Cleaner exception handling while loading data to grid
178
- Column resize & move functionality enabled by default
179
- Column filters added
180
-
181
- v0.1.0.1 Meta work: replacing underscore with dash in the name
182
-
183
- v0.1.0 Initial release
1
+ = v0.5.3 - 2009-10-12
2
+ * Compatibility with Ext 3.0 (and dropping compatibility with 2.x).
3
+ * Compatibility with netzke-core v0.4.4.
4
+ * Impr: Form/GridPanel-based widgets: more consistent Ext.Action-related functionality and code, like (context) menu, bbar, etc.
5
+ * Impr: GridPanel: <tt>rows_reordering_available</tt> is now true by default.
6
+ * Impr: TreePanel now sets "leaf" attribute to true if the node has no children.
7
+ * Impr: Grid/TreePanel now have persistent config enabled by default.
8
+ * Impr: if persistent_config is disabled, a widget won't be talking to the server in vain any more.
9
+ * Fix: GridPanel didn't fire row editing when the first column was a "checkbox" column.
10
+ * Fix: the GridPanel's <tt>:scopes</tt> parameter now correctly processes named scopes as strings inside the array, e.g.
11
+ :scopes => ["current", [:id_gt, 100]]
12
+ * Fix: on deleting records from GridPanel, <tt>destroy</tt> method is being called instead of <tt>delete</tt>.
13
+ * Fix: FieldsConfigurator made a little bit more stable.
14
+ * Fix: patching Ext's bug that caused double firing of "columnmove" in GridPanel.
15
+ * Fix: moving columns around in GridPanel was causing erroneous mapping of data to columns after data reload.
16
+
17
+ = v0.5.2 - 2009-09-24
18
+ * Fix: combobox options for association columns didn't work properly.
19
+ * Fix: GridPanel's multi-edit functionality didn't work.
20
+ * Fix: gem dependencies are now correct.
21
+
22
+ = v0.5.1 - 2009-09-11
23
+ * Fix: crash when FormPanel has no data_class_name specified.
24
+ * New: DataAccessor widgets (Form/GridPanel) now let the underlying model know which widget (i.e. which instance) accesses its data. Can be useful in virtual attributes for generating widget-specific HTML.
25
+ * Fix: DataAccessor widgets (Form/GridPanel) now don't crash when calculating default columns/fields for the underlying model that has polymorphic columns.
26
+ * Fix: TabPanel was sending redundant "tabchange" event to server when initially instantiated.
27
+ * Fix: column filters were making GridPanel crash when the column editor was set to "textarea".
28
+ * Fix: dongling comma and "delete" object properties caused problems in IE and Safari.
29
+ * Fix: a stand-alone TabPanel would not render the active item.
30
+ * New: BasicApp: masquerading as "World". In this mode all the "touched" persistent preferences will be overwritten for all roles and users.
31
+ * Impr: configuration panel's header now shows the underlying model's name for convenience.
32
+ * Fix: MasqueradeSelector widget added.
33
+
34
+ = v0.5.0 - 2009-09-06
35
+ * Major refactoring and code reorganization.
36
+ * Compatibility with netzke-core v0.4.0.
37
+ * New: GridPanel now supports adding/editing records in a form and extended configurable search.
38
+ * New: GridPanel now can be loaded along with initial data (saves a request to the server).
39
+ * New: context menu in GridPanel
40
+ * New: "scopes" configuration option added to GridPanel to specify the searchlogic-compatible scope for the data.
41
+ * New: "strong_default_attrs" config option added to GridPanel to specify the attributes that will be assigned to each record that is created or modified by the grid.
42
+ * Usability: GridPanel's actions now get enabled/disabled according to the current selection.
43
+ * Configuration panel for grids and forms now works more consistently.
44
+ * New: some smart defaults for column/fields in Grid/FormPanel.
45
+ * New: BasicApp supports masquerading and application-wide AJAX activity indicator.
46
+
47
+ = v0.4.2 - 2009-05-07
48
+ * Fix: afterlayout event bind removed completely because of some tricky inconsistent behavior of Ext. BasicApp initializing code put directly into js_after_constructor.
49
+
50
+ = v0.4.1 - 2009-05-07
51
+ * Fix: afterlayout call moved to js_after_constructor in BasicApp
52
+ * Fix: cleaner persistent_config handling
53
+ * New: default's configuration enabled for FormPanel on class-level
54
+ * Fix: differently configured forms on the same page were showing the same columns
55
+ * Fix: TableEditor was showing config-tool by default (must be hidden)
56
+
57
+ = v0.4.0 - 2009-05-07
58
+ * Refactor: got rid of NetzkeFormPanelField and NetzkeGridPanelColumn classes along with their tables. The layout is now stored in netzke_preferences.
59
+ * New: dynamic hiding of columns from column menu in GridPanel.
60
+ * New: FormPanel now supports combo boxes.
61
+ * Fix: config[:bbar] set to 'false' now works in grids with pagination
62
+ * New: you can specify :preloaded => true in a tab config in TabPanel to preload the widget in that tab along with the TabPanel itself
63
+ * New: hideBusy added to Ext.StatusBar
64
+ * Fix: assigning association (a Boss to a Clerk) by virtual column (like boss__name) works now
65
+ * Fix: an old bug that made GridPanel misbehave after reordering the columns
66
+
67
+ = v0.3.10
68
+ * BasicApp-based widgets can now introduce arbitrary layout, following the convention of defining "main-panel" and "main-toolbar" panels with layout 'fit'.
69
+
70
+ = v0.3.9.1
71
+ * Bug fix: (regression) appLoaded() in BasicApp gets executed again
72
+
73
+ = v0.3.9
74
+ * AccordionPanel tests added
75
+ * TabPanel works now
76
+ * AccordionPanel replaced with more intuitive TabPanel in the configuration window
77
+ * Code clean-up by using "single" option to call appLoaded() on "afterlayout"
78
+ * Table editor bug fix
79
+
80
+ = v0.3.8
81
+ * Fixing Ext's EditableItem render problem.
82
+ * Filters by default enabled again in GridPanel.
83
+ * GridPanel enhancement: base_params get sent along with post_data.
84
+
85
+ = v0.3.7
86
+ * Netzke-core version sync.
87
+ * Rails 2.3.2 compatibility.
88
+
89
+ = v0.3.6
90
+ * Netzke-core v0.2.9 compatibility.
91
+ * Cleaner handling of custom renderers in GridPanel.
92
+ * New FormPanel-based PropertyEditor replaces PropertyGrid.
93
+ * Xcheckbox and check-column introduced.
94
+ * TODO file added.
95
+ * Bug fix: in TableEditor, the grid now responses on events also after being reconfigured.
96
+ * Bug fix: a couple of IE-related bugs.
97
+ * Significant code clean-up.
98
+
99
+ = v0.3.5
100
+ * Netzke-core v0.2.8 compatibility.
101
+
102
+ = v0.3.4
103
+ * Quick tips added to the "tools".
104
+ * Regression: the "General" configuration panel for GridPanel works again.
105
+ * GridPanel: rows_per_page configuration is now read from General config panel.
106
+
107
+ = v0.3.3.1
108
+ * Obviously using "new" as a property name in JavaScript isn't liked by Safari. Fixed.
109
+
110
+ = v0.3.3
111
+ * Bug fix: application not loading the widget specified in the URL (Ext.History-related).
112
+ * Some code refactoring and readability improvements.
113
+ * Ext.componentCache renamed into Ext.netzke.cache.
114
+ * New widget: TableEditor (a compound widget containing a grid and a form for editing table data).
115
+ * BorderLayoutPanel: a function getRegionWidget(region) added to access a widget in the specified region.
116
+ * Bug fix: BasicApp: FeedbackGhost now gets instantiated before BasicApp.
117
+ * Clearer handling of requests to non-existing aggregatees.
118
+ * Bug fix: now Ext 2.2.1 compatible.
119
+ * Column operations are now handled properly when :persistent_layout is set to false.
120
+ * Grid/Form fields configuration is extended with "ext_config" field which stores (in JSON-format) all the extra configuration, which gives extra flexibility to individual column/field configuration.
121
+ * :persistent_layout set to false now makes a widget ignore what's in the DB.
122
+ * Bug fix: AccordionPanel doesn't crash when no active item is specified.
123
+ * Bug fix: redundant flash messages for GridPanel.
124
+ * FeedbackGhost won't be showing anything if given an empty array.
125
+ * Cleaner handling of validations in GridPanel.
126
+ * FormPanel ready for the demo.
127
+
128
+ = v0.3.2
129
+ * Minor code restructuring.
130
+ * Working on FormPanel cont'd.
131
+
132
+ = v0.3.1
133
+ * Added the "conditions" configuration option to GridPanel to limit the search
134
+ * Basic column editor for grids has been replaced with FieldsConfigurator, which can do a bit more
135
+ * Added Checkbox column/form-field type for boolean fields
136
+ * "renderer" configuration option added for grid columns - any Ext.util.Format renderer can be specified there (thanks to Josh Holt for the initial idea)
137
+
138
+ = v0.3.0
139
+ * Added BasicApp widget - the base for a Ext.Viewport based ("application") widget with support for dynamic widget loading, browser history, authentification, and more. See the demo an http://netzke-demo.writelesscode.com
140
+
141
+ = v0.2.2
142
+ * Meta: updated netzke-core version (dependency)
143
+
144
+ = v0.2.1
145
+ * Regression: BorderLayoutPanel now restores the region sizes from the database
146
+
147
+ = v0.2.0.1
148
+ * Meta: updated netzke-core version (dependency)
149
+
150
+ = v0.2.0
151
+ * Some re-factoring and redesign along with netzke-core
152
+ * Panel widget added
153
+ * BorderLayoutPanel added
154
+ * AccordionPanel added
155
+ * Bug fix: column operations configuration misbehaving
156
+ * Renamed Grid into GridPanel
157
+ * Bug fix: exception was thrown at a column operation when no layout_manager was present
158
+ * Reworked permission handling in GridPanel.
159
+
160
+ = v0.1.4.1
161
+ * Meta: updated netzke-core version (dependency)
162
+
163
+ = v0.1.4
164
+ * Grid#get_columns provides default columns even if none of layout_manager_class & column_manager_class are available
165
+
166
+ = v0.1.3.1
167
+ * Meta: updated netzke-core version (dependency)
168
+
169
+ = v0.1.3
170
+ * Path to javascript for grid filters corrected
171
+ * Bug with creating new records in the grid fixed
172
+ * Optimized away redundant sql queries when calling Grid#get_columns (sort of memoization)
173
+ * README updated
174
+
175
+ = v0.1.2.1
176
+ * Meta: trying to succeed publishing on RubyForge
177
+
178
+ = v0.1.2
179
+ * Updated README with an example of stand-alone widget usage
180
+ * Meta: updated netzke-core version (dependency)
181
+
182
+ = v0.1.1.2
183
+ * Meta: updated netzke-core version (dependency)
184
+
185
+ = v0.1.1.1
186
+ * Meta: github gem naming convention
187
+
188
+ = v0.1.1
189
+ * Cleaner exception handling while loading data to grid
190
+ * Column resize & move functionality enabled by default
191
+ * Column filters added
192
+
193
+ = v0.1.0.1
194
+ * Meta work: replacing underscore with dash in the name
195
+
196
+ = v0.1.0 - 2008-12-20
197
+ * Initial release
data/LICENSE CHANGED
@@ -1,3 +1 @@
1
- Copyright (c) 2008-2009 Sergei Kozlov
2
-
3
- GNU GPL license v3
1
+ Copyright (c) 2008-2009 Sergei Kozlov, released under the MIT license
data/README.rdoc CHANGED
@@ -1,22 +1,26 @@
1
1
  = netzke-basepack
2
- A pack of basic Rails/ExtJS widgets as a part of the Netzke framework. Live demo/tutorials on http://blog.writelesscode.com. Introduction to the Netzke framework: http://github.com/skozlov/netzke/tree/master
2
+ A pack of basic Rails/ExtJS widgets as a part of the Netzke framework. Live demo/tutorials on http://blog.writelesscode.com. Introduction to the Netzke framework and the Wiki: http://github.com/skozlov/netzke
3
3
 
4
4
  Note that if you would like to modify this code or experiment with it, you may be better off cloning this project into your app's vendor/plugin directory - it will then behave as a Rails plugin.
5
5
 
6
6
  = Prerequisites
7
7
  1. Rails >= 2.2
8
- 2. Ext JS >= 2.0: its root *must* be accessible as RAILS_ROOT/public/extjs. You may symlink your Ext JS library here like this (from your app folder):
9
- cd public && ln -s ~/Developer/extjs/ext-2.2 extjs
8
+ 2. Ext JS >= 3.0: its root *must* be accessible as RAILS_ROOT/public/extjs. You may symlink your Ext JS library here like this (from your app folder):
9
+ cd public && ln -s ~/Developer/extjs/ext-3.0 extjs
10
10
 
11
11
  3. acts_as_list plugin must be installed:
12
12
  ./script/plugin install git://github.com/rails/acts_as_list.git
13
13
 
14
+ 4. mislav-will_paginate >= 2.3.0
15
+ gem sources -a http://gems.github.com/
16
+ sudo gem install mislav-will_paginate
17
+
14
18
  = Installation
15
- Install the gem:
16
- gem install skozlov-netzke-basepack
19
+ Install Netzke gems:
20
+ gem install netzke-basepack
17
21
 
18
22
  Include it into environment.rb:
19
- config.gem "skozlov-netzke-basepack"
23
+ config.gem "netzke-basepack"
20
24
 
21
25
  Include mapping for Netzke controller providing *.js and *.css (in routes.rb):
22
26
  map.netzke
data/TODO.rdoc CHANGED
@@ -2,7 +2,10 @@
2
2
  * Make column/fields configuration fool-proof
3
3
  * Introduce three-state checkbox for SearchPanel
4
4
  * Add icons to buttons to actions (toolbars/menus)
5
+ * On grid refresh, reset the dirty fields, so that the "Apply" button doesn't do anything
6
+
7
+ == Optimizations
8
+ * Add indexes into tables
5
9
 
6
10
  == One day
7
- * Add status bar to BasicApp
8
- * Replace xcheckbox with checkbox in FormPanel
11
+ * Replace xcheckbox with checkbox in FormPanel
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.2
1
+ 0.5.3
@@ -96,15 +96,6 @@ Ext.netzke.filterMap = {
96
96
  datefield:'Date'
97
97
  };
98
98
 
99
- Ext.override(Ext.StatusBar, {
100
- hideBusy : function(){
101
- return this.setStatus({
102
- text: this.defaultText,
103
- iconCls: this.defaultIconCls
104
- });
105
- }
106
- });
107
-
108
99
  Ext.data.RecordArrayReader = Ext.extend(Ext.data.JsonReader, {
109
100
  /**
110
101
  * Create a data block containing Ext.data.Records from an Array.
@@ -784,4 +775,23 @@ Ext.ux.form.DateTime = Ext.extend(Ext.form.Field, {
784
775
  Ext.reg('xdatetime', Ext.ux.form.DateTime);
785
776
 
786
777
  // eof
787
-
778
+ Ext.grid.HeaderDropZone.prototype.onNodeDrop = function(n, dd, e, data){
779
+ var h = data.header;
780
+ if(h != n){
781
+ var cm = this.grid.colModel;
782
+ var x = Ext.lib.Event.getPageX(e);
783
+ var r = Ext.lib.Dom.getRegion(n.firstChild);
784
+ var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";
785
+ var oldIndex = this.view.getCellIndex(h);
786
+ var newIndex = this.view.getCellIndex(n);
787
+ if(pt == "after"){
788
+ newIndex++;
789
+ }
790
+ if(oldIndex < newIndex){
791
+ newIndex--;
792
+ }
793
+ cm.moveColumn(oldIndex, newIndex);
794
+ return true;
795
+ }
796
+ return false;
797
+ }