1 /** Copyright (c) 2017 Samsung Electronics Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
19 namespace Tizen.NUI.BaseComponents
23 /// TableView is a layout container for aligning child actors in a grid like layout.<br>
24 /// TableView constrains the x and y position and width and height of the child actors.<br>
25 /// z position and depth are left intact so that 3D model actors can also be laid out
26 /// in a grid without loosing their depth scaling.<br>
28 public class TableView : View
30 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
32 internal TableView(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.TableView_SWIGUpcast(cPtr), cMemoryOwn)
34 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
37 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(TableView obj)
39 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
42 protected override void Dispose(DisposeTypes type)
49 if(type == DisposeTypes.Explicit)
52 //Release your own managed resources here.
53 //You should release all of your own disposable objects here.
56 //Release your own unmanaged resources here.
57 //You should not access any managed member here except static instance.
58 //because the execution order of Finalizes is non-deterministic.
60 if (swigCPtr.Handle != global::System.IntPtr.Zero)
65 NDalicPINVOKE.delete_TableView(swigCPtr);
67 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
74 internal class Property
76 internal static readonly int ROWS = NDalicPINVOKE.TableView_Property_ROWS_get();
77 internal static readonly int COLUMNS = NDalicPINVOKE.TableView_Property_COLUMNS_get();
78 internal static readonly int CELL_PADDING = NDalicPINVOKE.TableView_Property_CELL_PADDING_get();
79 internal static readonly int LAYOUT_ROWS = NDalicPINVOKE.TableView_Property_LAYOUT_ROWS_get();
80 internal static readonly int LAYOUT_COLUMNS = NDalicPINVOKE.TableView_Property_LAYOUT_COLUMNS_get();
83 internal class ChildProperty
85 internal static readonly int CELL_INDEX = NDalicPINVOKE.TableView_ChildProperty_CELL_INDEX_get();
86 internal static readonly int ROW_SPAN = NDalicPINVOKE.TableView_ChildProperty_ROW_SPAN_get();
87 internal static readonly int COLUMN_SPAN = NDalicPINVOKE.TableView_ChildProperty_COLUMN_SPAN_get();
88 internal static readonly int CELL_HORIZONTAL_ALIGNMENT = NDalicPINVOKE.TableView_ChildProperty_CELL_HORIZONTAL_ALIGNMENT_get();
89 internal static readonly int CELL_VERTICAL_ALIGNMENT = NDalicPINVOKE.TableView_ChildProperty_CELL_VERTICAL_ALIGNMENT_get();
93 /// Class to specify layout position for child view.
95 public class CellPosition : global::System.IDisposable
97 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
98 protected bool swigCMemOwn;
100 internal CellPosition(global::System.IntPtr cPtr, bool cMemoryOwn)
102 swigCMemOwn = cMemoryOwn;
103 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
106 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(CellPosition obj)
108 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
111 //A Flag to check who called Dispose(). (By User or DisposeQueue)
112 private bool isDisposeQueued = false;
113 //A Flat to check if it is already disposed.
114 protected bool disposed = false;
120 isDisposeQueued = true;
121 DisposeQueue.Instance.Add(this);
125 public void Dispose()
127 //Throw excpetion if Dispose() is called in separate thread.
128 if (!Window.IsInstalled())
130 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
135 Dispose(DisposeTypes.Implicit);
139 Dispose(DisposeTypes.Explicit);
140 System.GC.SuppressFinalize(this);
144 protected virtual void Dispose(DisposeTypes type)
151 if(type == DisposeTypes.Explicit)
154 //Release your own managed resources here.
155 //You should release all of your own disposable objects here.
158 //Release your own unmanaged resources here.
159 //You should not access any managed member here except static instance.
160 //because the execution order of Finalizes is non-deterministic.
162 if (swigCPtr.Handle != global::System.IntPtr.Zero)
167 NDalicPINVOKE.delete_TableView_CellPosition(swigCPtr);
169 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
177 /// <param name="rowIndex">The row index initialized</param>
178 /// <param name="columnIndex">The column index initialized</param>
179 /// <param name="rowSpan">The row span initialized</param>
180 /// <param name="columnSpan">The column span initialized</param>
181 public CellPosition(uint rowIndex, uint columnIndex, uint rowSpan, uint columnSpan) : this(NDalicPINVOKE.new_TableView_CellPosition__SWIG_0(rowIndex, columnIndex, rowSpan, columnSpan), true)
183 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
187 /// Constructor to initialise values to defaults for convenience.
189 /// <param name="rowIndex">The row index initialized</param>
190 /// <param name="columnIndex">The column index initialized</param>
191 /// <param name="rowSpan">The row span initialized</param>
192 public CellPosition(uint rowIndex, uint columnIndex, uint rowSpan) : this(NDalicPINVOKE.new_TableView_CellPosition__SWIG_1(rowIndex, columnIndex, rowSpan), true)
194 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
198 /// Constructor to initialise values to defaults for convenience.
200 /// <param name="rowIndex">The row index initialized</param>
201 /// <param name="columnIndex">The column index initialized</param>
202 public CellPosition(uint rowIndex, uint columnIndex) : this(NDalicPINVOKE.new_TableView_CellPosition__SWIG_2(rowIndex, columnIndex), true)
204 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
208 /// Constructor to initialise values to defaults for convenience.
210 /// <param name="rowIndex">The row index initialized</param>
211 public CellPosition(uint rowIndex) : this(NDalicPINVOKE.new_TableView_CellPosition__SWIG_3(rowIndex), true)
213 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
217 /// Default constructor
219 public CellPosition() : this(NDalicPINVOKE.new_TableView_CellPosition__SWIG_4(), true)
221 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
231 NDalicPINVOKE.TableView_CellPosition_rowIndex_set(swigCPtr, value);
232 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
236 uint ret = NDalicPINVOKE.TableView_CellPosition_rowIndex_get(swigCPtr);
237 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
245 public uint columnIndex
249 NDalicPINVOKE.TableView_CellPosition_columnIndex_set(swigCPtr, value);
250 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
254 uint ret = NDalicPINVOKE.TableView_CellPosition_columnIndex_get(swigCPtr);
255 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
267 NDalicPINVOKE.TableView_CellPosition_rowSpan_set(swigCPtr, value);
268 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
272 uint ret = NDalicPINVOKE.TableView_CellPosition_rowSpan_get(swigCPtr);
273 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
281 public uint columnSpan
285 NDalicPINVOKE.TableView_CellPosition_columnSpan_set(swigCPtr, value);
286 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
290 uint ret = NDalicPINVOKE.TableView_CellPosition_columnSpan_get(swigCPtr);
291 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
299 /// Creates the TableView view.
301 /// <param name="initialRows">initialRows for the table</param>
302 /// <param name="initialColumns">initialColumns for the table</param>
303 public TableView(uint initialRows, uint initialColumns) : this(NDalicPINVOKE.TableView_New(initialRows, initialColumns), true)
305 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
310 /// Copy constructor. Creates another handle that points to the same real object.
312 /// <param name="handle">Handle to copy from</param>
313 public TableView(TableView handle) : this(NDalicPINVOKE.new_TableView__SWIG_1(TableView.getCPtr(handle)), true)
315 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
318 [Obsolete("Please do not use! this will be deprecated")]
319 public new static TableView DownCast(BaseHandle handle)
321 TableView ret = new TableView(NDalicPINVOKE.TableView_DownCast(BaseHandle.getCPtr(handle)), true);
322 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
327 /// Adds a child to the table.<br>
328 /// If the row or column index is outside the table, the table gets resized bigger.<br>
330 /// <param name="child">The child to add</param>
331 /// <param name="position">The position for the child</param>
332 /// <returns>Tue if the addition succeeded and false if the cell is already occupied</returns>
333 public bool AddChild(View child, TableView.CellPosition position)
335 bool ret = NDalicPINVOKE.TableView_AddChild(swigCPtr, View.getCPtr(child), TableView.CellPosition.getCPtr(position));
336 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
341 /// Returns a child from the given layout position.
343 /// <param name="position">The position in the table</param>
344 /// <returns>Child that was in the cell or an uninitialized handle</returns>
345 public View GetChildAt(TableView.CellPosition position)
347 View ret = new View(NDalicPINVOKE.TableView_GetChildAt(swigCPtr, TableView.CellPosition.getCPtr(position)), true);
348 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
353 /// Removes a child from the given layout position.
355 /// <param name="position">The position for the child to remove</param>
356 /// <returns>Child that was removed or an uninitialized handle</returns>
357 public View RemoveChildAt(TableView.CellPosition position)
359 View ret = new View(NDalicPINVOKE.TableView_RemoveChildAt(swigCPtr, TableView.CellPosition.getCPtr(position)), true);
360 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
365 /// Finds the child's layout position.
367 /// <param name="child">The child to search for</param>
368 /// <param name="position">The position for the child</param>
369 /// <returns>true if the child was included in this TableView</returns>
370 public bool FindChildPosition(View child, TableView.CellPosition position)
372 bool ret = NDalicPINVOKE.TableView_FindChildPosition(swigCPtr, View.getCPtr(child), TableView.CellPosition.getCPtr(position));
373 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
378 /// Inserts a new row to given index.
380 /// <param name="rowIndex">The rowIndex of the new row</param>
381 public void InsertRow(uint rowIndex)
383 NDalicPINVOKE.TableView_InsertRow(swigCPtr, rowIndex);
384 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
388 /// Deletes a row from the given index.<br>
389 /// Removed elements are deleted.<br>
391 /// <param name="rowIndex">The rowIndex of the row to delete</param>
392 public void DeleteRow(uint rowIndex)
394 NDalicPINVOKE.TableView_DeleteRow__SWIG_0(swigCPtr, rowIndex);
395 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
399 /// Inserts a new column to the given index.
401 /// <param name="columnIndex">The columnIndex of the new column</param>
402 public void InsertColumn(uint columnIndex)
404 NDalicPINVOKE.TableView_InsertColumn(swigCPtr, columnIndex);
405 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
409 /// Deletes a column from the given index.<br>
410 /// Removed elements are deleted.<br>
412 /// <param name="columnIndex">The columnIndex of the column to delete</param>
413 public void DeleteColumn(uint columnIndex)
415 NDalicPINVOKE.TableView_DeleteColumn__SWIG_0(swigCPtr, columnIndex);
416 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
420 /// Resizes the TableView.
422 /// <param name="rows">The rows for the table</param>
423 /// <param name="columns">The columns for the table</param>
424 public void Resize(uint rows, uint columns)
426 NDalicPINVOKE.TableView_Resize__SWIG_0(swigCPtr, rows, columns);
427 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
431 /// Sets horizontal and vertical padding between cells.
433 /// <param name="padding">Width and height</param>
434 public void SetCellPadding(Size2D padding)
436 NDalicPINVOKE.TableView_SetCellPadding(swigCPtr, Size2D.getCPtr(padding));
437 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
441 /// Gets the current padding as width and height.
443 /// <returns>The current padding as width and height</returns>
444 public Vector2 GetCellPadding()
446 Vector2 ret = new Vector2(NDalicPINVOKE.TableView_GetCellPadding(swigCPtr), true);
447 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
452 /// Specifies this row as fitting its height to its children.
454 /// <param name="rowIndex">The row to set</param>
455 public void SetFitHeight(uint rowIndex)
457 NDalicPINVOKE.TableView_SetFitHeight(swigCPtr, rowIndex);
458 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
462 /// Checks if the row is a fit row.
464 /// <param name="rowIndex">The row to check</param>
465 /// <returns>true if the row is fit</returns>
466 public bool IsFitHeight(uint rowIndex)
468 bool ret = NDalicPINVOKE.TableView_IsFitHeight(swigCPtr, rowIndex);
469 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
474 /// Specifies this column as fitting its width to its children.
476 /// <param name="columnIndex">The column to set</param>
477 public void SetFitWidth(uint columnIndex)
479 NDalicPINVOKE.TableView_SetFitWidth(swigCPtr, columnIndex);
480 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
484 /// Checks if the column is a fit column.
486 /// <param name="columnIndex">The column to check</param>
487 /// <returns>true if the column is fit</returns>
488 public bool IsFitWidth(uint columnIndex)
490 bool ret = NDalicPINVOKE.TableView_IsFitWidth(swigCPtr, columnIndex);
491 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
496 /// Sets a row to have fixed height.<br>
497 /// Setting a fixed height of 0 has no effect.<br>
499 /// <param name="rowIndex">The rowIndex for row with fixed height</param>
500 /// <param name="height">The height in world coordinate units</param>
501 public void SetFixedHeight(uint rowIndex, float height)
503 NDalicPINVOKE.TableView_SetFixedHeight(swigCPtr, rowIndex, height);
504 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
508 /// Gets a row's fixed height.
510 /// <param name="rowIndex">The row index with fixed height</param>
511 /// <returns>height The height in world coordinate units</returns>
512 public float GetFixedHeight(uint rowIndex)
514 float ret = NDalicPINVOKE.TableView_GetFixedHeight(swigCPtr, rowIndex);
515 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
520 /// Sets a row to have relative height. Relative height means percentage of
521 /// the remainder of the table height after subtracting Padding and Fixed height rows.<br>
522 /// Setting a relative height of 0 has no effect.<br>
524 /// <param name="rowIndex">The rowIndex for row with relative height</param>
525 /// <param name="heightPercentage">The height percentage between 0.0f and 1.0f</param>
526 public void SetRelativeHeight(uint rowIndex, float heightPercentage)
528 NDalicPINVOKE.TableView_SetRelativeHeight(swigCPtr, rowIndex, heightPercentage);
529 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
533 /// Gets a row's relative height.
535 /// <param name="rowIndex">The row index with relative height</param>
536 /// <returns>Height in percentage units, between 0.0f and 1.0f</returns>
537 public float GetRelativeHeight(uint rowIndex)
539 float ret = NDalicPINVOKE.TableView_GetRelativeHeight(swigCPtr, rowIndex);
540 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
545 /// Sets a column to have fixed width.<br>
546 /// Setting a fixed width of 0 has no effect.<br>
548 /// <param name="columnIndex">The columnIndex for column with fixed width</param>
549 /// <param name="width">The width in world coordinate units</param>
550 public void SetFixedWidth(uint columnIndex, float width)
552 NDalicPINVOKE.TableView_SetFixedWidth(swigCPtr, columnIndex, width);
553 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
557 /// Gets a column's fixed width.
559 /// <param name="columnIndex">The column index with fixed width</param>
560 /// <returns>Width in world coordinate units</returns>
561 public float GetFixedWidth(uint columnIndex)
563 float ret = NDalicPINVOKE.TableView_GetFixedWidth(swigCPtr, columnIndex);
564 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
569 /// Sets a column to have relative width. Relative width means percentage of
570 /// the remainder of table width after subtracting Padding and Fixed width columns.<br>
571 /// Setting a relative width of 0 has no effect.<br>
573 /// <param name="columnIndex">The columnIndex for column with fixed width</param>
574 /// <param name="widthPercentage">The widthPercentage between 0.0f and 1.0f</param>
575 public void SetRelativeWidth(uint columnIndex, float widthPercentage)
577 NDalicPINVOKE.TableView_SetRelativeWidth(swigCPtr, columnIndex, widthPercentage);
578 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
582 /// Gets a column's relative width.
584 /// <param name="columnIndex">The column index with relative width</param>
585 /// <returns>Width in percentage units, between 0.0f and 1.0f</returns>
586 public float GetRelativeWidth(uint columnIndex)
588 float ret = NDalicPINVOKE.TableView_GetRelativeWidth(swigCPtr, columnIndex);
589 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
594 /// Sets the alignment on a cell.<br>
595 /// Cells without calling this function have the default values of LEFT and TOP respectively.<br>
597 /// <param name="position">The cell to set alignment on</param>
598 /// <param name="horizontal">The horizontal alignment</param>
599 /// <param name="vertical">The vertical alignment</param>
600 public void SetCellAlignment(TableView.CellPosition position, HorizontalAlignmentType horizontal, VerticalAlignmentType vertical)
602 NDalicPINVOKE.TableView_SetCellAlignment(swigCPtr, TableView.CellPosition.getCPtr(position), (int)horizontal, (int)vertical);
603 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
607 /// Enumeration for describing how the size of a row / column has been set.
609 public enum LayoutPolicy
618 /// the amount of rows in the table.
625 GetProperty(TableView.Property.ROWS).Get(out temp);
630 SetProperty(TableView.Property.ROWS, new Tizen.NUI.PropertyValue(value));
634 /// the amount of columns in the table.
641 GetProperty(TableView.Property.COLUMNS).Get(out temp);
646 SetProperty(TableView.Property.COLUMNS, new Tizen.NUI.PropertyValue(value));
650 /// padding between cells.
652 public Vector2 CellPadding
656 Vector2 temp = new Vector2(0.0f, 0.0f);
657 GetProperty(TableView.Property.CELL_PADDING).Get(temp);
662 SetProperty(TableView.Property.CELL_PADDING, new Tizen.NUI.PropertyValue(value));
667 /// The number of layout rows
669 public PropertyMap LayoutRows
673 PropertyMap temp = new PropertyMap();
674 GetProperty(TableView.Property.LAYOUT_ROWS).Get(temp);
679 SetProperty(TableView.Property.LAYOUT_ROWS, new Tizen.NUI.PropertyValue(value));
684 /// The number of layout columns
686 public PropertyMap LayoutColumns
690 PropertyMap temp = new PropertyMap();
691 GetProperty(TableView.Property.LAYOUT_COLUMNS).Get(temp);
696 SetProperty(TableView.Property.LAYOUT_COLUMNS, new Tizen.NUI.PropertyValue(value));