You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by hu...@apache.org on 2022/10/30 23:48:16 UTC

[royale-asjs] branch develop updated (529c31137f -> 0de16bcf47)

This is an automated email from the ASF dual-hosted git repository.

hugoferreira pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


    from 529c31137f Fix: typo in comment
     new a05a1ae15c Editable DataGridItemRenderer
     new 0de16bcf47 New bead for navigate between rows and columns of a Jewel DataGrid

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../Jewel/src/main/resources/jewel-manifest.xml    |   2 +
 .../controls/datagrid/DataGridNavigateItems.as     | 109 +++++++++++++++++++++
 ...Renderer.as => EditableDataGridItemRenderer.as} |  73 +++++++-------
 3 files changed, 148 insertions(+), 36 deletions(-)
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridNavigateItems.as
 copy frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/{TableItemRenderer.as => EditableDataGridItemRenderer.as} (50%)


[royale-asjs] 02/02: New bead for navigate between rows and columns of a Jewel DataGrid

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugoferreira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 0de16bcf4783d046dfb709d8c2ed8f648dda4524
Author: Hugo Ferreira <hf...@solidsoft.pt>
AuthorDate: Sun Oct 30 23:48:07 2022 +0000

    New bead for navigate between rows and columns of a Jewel DataGrid
    
    New bead for navigate right (using Tab key) and down (using Down Arrow key) on a editable DataGrid (requires the new EditableDataGridItemRenderer component)
---
 .../controls/datagrid/DataGridNavigateItems.as     | 109 +++++++++++++++++++++
 1 file changed, 109 insertions(+)

diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridNavigateItems.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridNavigateItems.as
new file mode 100644
index 0000000000..9c463f3096
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datagrid/DataGridNavigateItems.as
@@ -0,0 +1,109 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.jewel.beads.controls.datagrid
+{
+    import org.apache.royale.core.IBead;
+    import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IDataGrid;
+    import org.apache.royale.jewel.beads.views.DataGridView;
+    import org.apache.royale.events.KeyboardEvent;
+    import org.apache.royale.core.UIBase;
+    import org.apache.royale.jewel.supportClasses.datagrid.DataGridColumnList;
+    import org.apache.royale.jewel.DataGrid;
+    import org.apache.royale.collections.ICollectionView;
+    import org.apache.royale.jewel.itemRenderers.EditableDataGridItemRenderer;
+
+	/**
+	 *  The DataGridNavigateItems bead class is a specialty bead that can be use with a Jewel DataGrid and VirtualDataGrid control
+	 *  in conjuntion with EditableItemRenderer for navigate between cells with keyboard
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.10
+	 */
+    public class DataGridNavigateItems implements IBead
+    {
+		private static const KEY_ENTER:String = "Enter";
+		private static const KEY_TAB:String = "Tab";
+
+        private var dataGrid:IDataGrid;
+
+		public function DataGridNavigateItems()
+		{
+			super();
+		}
+
+		/**                         	
+		 *  @copy org.apache.royale.core.IBead#strand
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.10
+		 */
+        public function set strand(value:IStrand):void
+        {
+            dataGrid = value as IDataGrid;
+        	dataGrid.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
+        }
+
+        private function onKeyDown(event:KeyboardEvent):void
+        {
+            if (event.key == KEY_ENTER || event.key == KEY_TAB)
+            {
+                var selectedColumnList:UIBase = (event.target as UIBase).parent as UIBase;
+                while (!(selectedColumnList is DataGridColumnList))
+                {
+                    selectedColumnList = selectedColumnList.parent as UIBase;
+                }
+
+                var dataGridView:DataGridView = ((dataGrid as DataGrid).view as DataGridView);
+                var selectedColumnIndex:int = dataGridView.columnLists.indexOf(selectedColumnList);
+                var dataGridItemRenderer:EditableDataGridItemRenderer = (dataGridView.columnLists[selectedColumnIndex] as DataGridColumnList).getElementAt((dataGrid as DataGrid).selectedIndex) as EditableDataGridItemRenderer;
+                var dataProviderSize:int = ((dataGrid as DataGrid).dataProvider as ICollectionView).length;
+
+                dataGridItemRenderer.endEditMode();
+
+                if ((dataGrid as DataGrid).selectedIndex == dataProviderSize - 1 && (event.key == KEY_ENTER || selectedColumnIndex == dataGridView.columnLists.length - 1))
+                    return;
+                
+                if (event.key == KEY_ENTER || selectedColumnIndex == dataGridView.columnLists.length - 1)
+                    (dataGrid as DataGrid).selectedIndex++;
+
+                if (event.key == KEY_TAB)
+                {
+                    if (selectedColumnIndex == dataGridView.columnLists.length - 1)
+                        selectedColumnIndex = 0;
+                    else
+                        selectedColumnIndex++;
+                }
+
+    			COMPILE::JS
+	    		{
+                    setTimeout(function():void
+                    {
+                        dataGridItemRenderer = (dataGridView.columnLists[selectedColumnIndex] as DataGridColumnList).getElementAt((dataGrid as DataGrid).selectedIndex) as EditableDataGridItemRenderer;
+                        dataGridItemRenderer.goToEditMode();
+				    }, 1);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file


[royale-asjs] 01/02: Editable DataGridItemRenderer

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugoferreira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit a05a1ae15c85102ea6740bc24173ccc30258a1cb
Author: Hugo Ferreira <hf...@solidsoft.pt>
AuthorDate: Sun Oct 30 23:45:21 2022 +0000

    Editable DataGridItemRenderer
    
    The most basic and generic methods for a editable DataGridItemRenderer and for new beads specific para a editable environment
---
 .../Jewel/src/main/resources/jewel-manifest.xml    |  2 +
 .../itemRenderers/EditableDataGridItemRenderer.as  | 68 ++++++++++++++++++++++
 2 files changed, 70 insertions(+)

diff --git a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
index 12fb65f392..844f24b37b 100644
--- a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
+++ b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
@@ -64,6 +64,7 @@
     <component id="DataGridLockedColumn" class="org.apache.royale.jewel.beads.controls.datagrid.DataGridLockedColumn"/>
     <component id="DataGridColumnVisibility" class="org.apache.royale.jewel.beads.controls.datagrid.DataGridColumnVisibility"/>
     <component id="DataGridScrollSpeed" class="org.apache.royale.jewel.beads.controls.datagrid.DataGridScrollSpeed"/>
+    <component id="DataGridNavigateItems" class="org.apache.royale.jewel.beads.controls.datagrid.DataGridNavigateItems"/>
 
     <component id="ButtonBarItemRenderer" class="org.apache.royale.jewel.itemRenderers.ButtonBarItemRenderer"/>
     <component id="IconButtonBarItemRenderer" class="org.apache.royale.jewel.itemRenderers.IconButtonBarItemRenderer"/>
@@ -258,6 +259,7 @@
     <component id="StringItemRenderer" class="org.apache.royale.jewel.itemRenderers.StringItemRenderer"/>
     <component id="ListItemRenderer" class="org.apache.royale.jewel.itemRenderers.ListItemRenderer"/>
     <component id="DataGridItemRenderer" class="org.apache.royale.jewel.itemRenderers.DataGridItemRenderer"/>
+    <component id="EditableDataGridItemRenderer" class="org.apache.royale.jewel.itemRenderers.EditableDataGridItemRenderer"/>
     <component id="TableItemRenderer" class="org.apache.royale.jewel.itemRenderers.TableItemRenderer"/>
     <component id="DateItemRenderer" class="org.apache.royale.jewel.itemRenderers.DateItemRenderer"/>
     <component id="DropDownListItemRenderer" class="org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer"/>
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/EditableDataGridItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/EditableDataGridItemRenderer.as
new file mode 100644
index 0000000000..81983651f1
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/EditableDataGridItemRenderer.as
@@ -0,0 +1,68 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////j
+package org.apache.royale.jewel.itemRenderers
+{
+	import org.apache.royale.events.Event;
+	
+    /**
+	 *  The EditableDataGridItemRenderer defines the basic methods for a editable Item Renderer for a Jewel DataGrid Component.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.10
+	 */
+	public class EditableDataGridItemRenderer extends DataGridItemRenderer
+	{
+        public function EditableDataGridItemRenderer()
+		{
+			super();
+        }
+
+		/**
+		 * Enter in edit mode (should be used by a specific ItemRender using for example a state)
+		 */
+		public function goToEditMode():void
+        {
+			COMPILE::JS
+			{
+            	document.addEventListener("click", onEditModeClick, true);
+            }
+        }
+
+		/**
+		 * It's important to use a protected function to allows to override and run specific code on this phase (ex: validations)
+		 */
+        protected function onEditModeClick(event:Event):void
+        {
+                endEditMode();
+        }
+
+		/**
+		 * Exit the edit mode (should be used by a specific ItemRender using for example a state)
+		 */
+        public function endEditMode():void
+        {
+			COMPILE::JS
+			{
+	            document.removeEventListener("click", endEditMode, true);
+            }
+        }
+    }
+}
\ No newline at end of file