2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FUiCtrl_SplitPanel.cpp
19 * @brief This is the implementation file for the _SplitPanel class.
22 #include <FBaseErrorDefine.h>
23 #include <FBaseString.h>
24 #include <FBaseSysLog.h>
25 #include <FGrp_BitmapImpl.h>
26 #include "FUi_ResourceManager.h"
27 #include "FUi_UiTouchEvent.h"
28 #include "FUi_TouchTapGestureDetector.h"
29 #include "FUi_AccessibilityContainer.h"
30 #include "FUi_AccessibilityElement.h"
31 #include "FUiCtrl_SplitPanel.h"
32 #include "FUiCtrl_SplitPanelPresenter.h"
34 using namespace Tizen::Ui;
35 using namespace Tizen::Graphics;
36 using namespace Tizen::Ui::Animations;
37 using namespace Tizen::Base;
38 using namespace Tizen::Base::Runtime;
40 namespace Tizen { namespace Ui { namespace Controls
43 _SplitPanel::_SplitPanel()
44 : __pSplitPanelPresenter(null)
48 , __splitPanelDividerDirection(SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
49 , __pSplitPanelEvent(null)
50 , __dividerTapCount(0)
51 , __pAccessibilityElement(null)
52 , __pDividerVisualElement(null)
53 , __isDividerPositionInitialized(false)
54 , __isDividerMaximumPositionInitialized(false)
55 , __isDividerMinimumPositionInitialized(false)
56 , __isFirstTimeOrientationChanged(true)
58 for (int i=0; i < _SPLIT_PANEL_DIVIDER_STATE; i++)
60 __dividerPosition[i] = 0;
61 __minimumDividerPosition[i] = 0;
62 __maximumDividerPosition[i] = 0;
67 _SplitPanel::CreateSplitPanelN(const Rectangle& rect, SplitPanelDividerStyle splitPanelDividerStyle, SplitPanelDividerDirection splitPanelDividerDirection)
71 _SplitPanel* pSplitPanel = new (std::nothrow) _SplitPanel;
72 SysTryReturn(NID_UI_CTRL, pSplitPanel, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
74 r = pSplitPanel->Construct(splitPanelDividerStyle, splitPanelDividerDirection);
81 pSplitPanel->AcquireHandle();
82 pSplitPanel->SetDividerDirection(splitPanelDividerDirection);
84 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
86 int dividerThickness = 0;
87 GET_SHAPE_CONFIG(SPLITPANEL::MOVABLE_DIVIDER_THICKNESS, orientation, dividerThickness);
89 pSplitPanel->__maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = rect.width - dividerThickness;
90 pSplitPanel->__maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = rect.width - dividerThickness;
91 pSplitPanel->__maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = rect.height - dividerThickness;
92 pSplitPanel->__maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = rect.width - dividerThickness;
94 pSplitPanel->__dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = rect.width / 2;
95 pSplitPanel->__dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = rect.width / 2;
96 pSplitPanel->__dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = rect.height / 2;
97 pSplitPanel->__dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = rect.height / 2;
99 pSplitPanel->__pTapGesture = new (std::nothrow) _TouchTapGestureDetector;
100 SysTryCatch(NID_UI_CTRL, pSplitPanel->__pTapGesture, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
102 pSplitPanel->AddGestureDetector(*(pSplitPanel->__pTapGesture));
103 r = pSplitPanel->__pTapGesture->AddGestureListener(*pSplitPanel);
104 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
106 pSplitPanel->SetBackgroundColor(Color(0,0,0,0));
108 if (likely(_AccessibilityManager::IsActivated()) && pSplitPanel->GetAccessibilityContainer())
110 pSplitPanel->GetAccessibilityContainer()->Activate(true);
116 if (pSplitPanel->__pTapGesture != null)
118 pSplitPanel->__pTapGesture->RemoveGestureListener(*pSplitPanel);
119 pSplitPanel->RemoveGestureDetector(*pSplitPanel->__pTapGesture);
121 delete pSplitPanel->__pTapGesture;
122 pSplitPanel->__pTapGesture = null;
130 _SplitPanel::Construct(SplitPanelDividerStyle splitPanelDividerStyle, SplitPanelDividerDirection splitPanelDividerDirection)
132 result r = E_SUCCESS;
134 __pDividerVisualElement = new (std::nothrow) VisualElement();
135 SysTryReturnResult(NID_UI_CTRL, __pDividerVisualElement, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
136 r = __pDividerVisualElement->Construct();
137 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to construct divider visual element.", GetErrorMessage(r));
139 __pDividerVisualElement->SetShowState(true);
140 __pDividerVisualElement->SetImplicitAnimationEnabled(false);
141 __pDividerVisualElement->SetClipChildrenEnabled(false);
143 r = GetVisualElement()->AttachChild(*__pDividerVisualElement);
144 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to attach divider visual element.", GetErrorMessage(r));
146 __pSplitPanelPresenter = new (std::nothrow) _SplitPanelPresenter;
147 SysTryCatch(NID_UI_CTRL, __pSplitPanelPresenter != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
149 r = __pSplitPanelPresenter->Construct(*this, splitPanelDividerStyle, splitPanelDividerDirection);
150 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to construct presenter.", GetErrorMessage(r));
155 if (__pDividerVisualElement)
157 __pDividerVisualElement->Destroy();
158 __pDividerVisualElement = null;
161 delete __pSplitPanelPresenter;
162 __pSplitPanelPresenter = null;
167 _SplitPanel::~_SplitPanel(void)
169 if (__pSplitPanelPresenter)
171 delete __pSplitPanelPresenter;
172 __pSplitPanelPresenter = null;
175 if (__pSplitPanelEvent)
177 delete __pSplitPanelEvent;
178 __pSplitPanelEvent = null;
183 __pTapGesture->RemoveGestureListener(*this);
184 RemoveGestureDetector(*__pTapGesture);
186 delete __pTapGesture;
187 __pTapGesture = null;
190 if (__pAccessibilityElement)
192 __pAccessibilityElement->Activate(false);
193 __pAccessibilityElement = null;
196 if (__pDividerVisualElement)
198 __pDividerVisualElement->Destroy();
199 __pDividerVisualElement = null;
206 _SplitPanel::SetPresenter(const _SplitPanelPresenter& splitPanelPresenter)
208 __pSplitPanelPresenter = const_cast<_SplitPanelPresenter*>(&splitPanelPresenter);
213 _SplitPanel::AddSplitPanelEventListener(const _ISplitPanelEventListener& listener)
215 result r = E_SUCCESS;
217 if (__pSplitPanelEvent == null)
219 __pSplitPanelEvent = _SplitPanelEvent::CreateInstanceN(*this);
221 SysTryReturn(NID_UI_CTRL, __pSplitPanelEvent, r, r, "[%s] Propagating.", GetErrorMessage(r))
223 __pSplitPanelEvent->AddListener(listener);
230 _SplitPanel::RemoveSplitPanelEventListener(const _ISplitPanelEventListener& listener)
232 SysTryReturn(NID_UI_CTRL, __pSplitPanelEvent, E_SYSTEM, E_SYSTEM,
233 "[E_SYSTEM] System error occurred.")
235 __pSplitPanelEvent->RemoveListener(listener);
241 _SplitPanel::OnDraw(void)
243 __pSplitPanelPresenter->Draw();
249 _SplitPanel::OnChangeLayout(_ControlOrientation orientation)
251 if (__isFirstTimeOrientationChanged)
253 Rectangle bounds = GetBounds();
255 int dividerThickness = 0;
256 GET_SHAPE_CONFIG(SPLITPANEL::MOVABLE_DIVIDER_THICKNESS, orientation, dividerThickness);
258 if (!__isDividerMaximumPositionInitialized)
260 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
262 __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = bounds.width - dividerThickness;
263 __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = bounds.width - dividerThickness;
267 __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = bounds.width - dividerThickness;
268 __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = bounds.width - dividerThickness;
272 if (!__isDividerPositionInitialized)
274 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
276 __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = bounds.width / 2;
277 __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = bounds.height / 2;
281 __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = bounds.width / 2;
282 __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = bounds.height / 2;
286 __isFirstTimeOrientationChanged = false;
289 __pSplitPanelPresenter->OnChangeLayout(orientation);
295 _SplitPanel::OnBoundsChanged(void)
297 Rectangle bounds = GetBounds();
299 int dividerThickness = 0;
301 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
303 GET_SHAPE_CONFIG(SPLITPANEL::MOVABLE_DIVIDER_THICKNESS, orientation, dividerThickness);
305 if (GetMaximumDividerPosition() > (bounds.width - dividerThickness))
307 SetMaximumDividerPosition(bounds.width - dividerThickness);
310 __pSplitPanelPresenter->OnBoundsChanged();
316 _SplitPanel::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
322 return __pSplitPanelPresenter->OnTouchPressed(source, touchinfo);
326 _SplitPanel::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
332 return __pSplitPanelPresenter->OnTouchReleased(source, touchinfo);
336 _SplitPanel::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
342 return __pSplitPanelPresenter->OnTouchMoved(source, touchinfo);
346 _SplitPanel::OnTouchCanceled(const _Control & source, const _TouchInfo & touchinfo)
348 return __pSplitPanelPresenter->OnTouchCanceled(source, touchinfo);
352 _SplitPanel::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
354 if (__pSplitPanelPresenter == null)
359 return __pSplitPanelPresenter->OnTapGestureDetected(gesture);
363 _SplitPanel::OnTapGestureCanceled(_TouchTapGestureDetector& gesture)
365 return __pSplitPanelPresenter->OnTapGestureCanceled(gesture);
369 _SplitPanel::SetPane(_Control* pControl, SplitPanelPaneOrder paneOrder)
371 result r = E_SUCCESS;
373 SysTryReturn(NID_UI_CTRL, __pSplitPanelPresenter != null, E_SYSTEM, E_SYSTEM,
374 "[E_SYSTEM] A system error occurred.");
376 if (paneOrder == SPLIT_PANEL_PANE_ORDER_FIRST)
378 __pFirstPane = pControl;
382 __pSecondPane = pControl;
385 r = AttachChild(*pControl);
386 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
392 _SplitPanel::GetPane(SplitPanelPaneOrder paneOrder) const
394 SysTryReturn(NID_UI_CTRL, __pSplitPanelPresenter != null, null, E_SYSTEM,
395 "[E_SYSTEM] System error occurred.");
397 if (paneOrder == SPLIT_PANEL_PANE_ORDER_FIRST)
399 return const_cast <_Control*>(__pFirstPane);
403 return const_cast <_Control*>(__pSecondPane);
408 _SplitPanel::SetDividerStyle(SplitPanelDividerStyle splitPanelDividerStyle)
410 SysTryReturn(NID_UI_CTRL, __pSplitPanelPresenter != null, E_SYSTEM, E_SYSTEM,
411 "[E_SYSTEM] System error occurred.");
413 __pSplitPanelPresenter->SetDividerStyle(splitPanelDividerStyle);
418 SplitPanelDividerStyle
419 _SplitPanel::GetDividerStyle(void) const
421 return __pSplitPanelPresenter->GetDividerStyle();
425 _SplitPanel::SetDividerPosition(int position)
427 const int width = GetBounds().width;
429 if ((0 > position) || (width < position))
431 return E_OUT_OF_RANGE;
434 if (GetDividerStyle() == SPLIT_PANEL_DIVIDER_STYLE_MOVABLE)
436 if ((GetMinimumDividerPosition() > position) || (GetMaximumDividerPosition() < position))
438 return E_OUT_OF_RANGE;
442 if (!__isDividerPositionInitialized)
444 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
446 __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
447 __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
451 __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
452 __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
455 __isDividerPositionInitialized = true;
459 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
461 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
463 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
465 __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
469 __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
474 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
476 __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
480 __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
485 __pSplitPanelPresenter->RecalcSplitPanel();
491 _SplitPanel::GetDividerPosition(void) const
493 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
495 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
497 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
499 return __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE];
503 return __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE];
508 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
510 return __dividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT];
514 return __dividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT];
520 _SplitPanel::SetMaximumDividerPosition(int position)
522 if (GetDividerStyle() == SPLIT_PANEL_DIVIDER_STYLE_FIXED)
524 SysLog(NID_UI_CTRL, "[E_SYSTEM] System error occurred. This functionality is not supported for divider style fixed");
528 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
530 const int width = GetBounds().width;
532 GET_SHAPE_CONFIG(SPLITPANEL::MOVABLE_DIVIDER, orientation, margin);
534 if ((0 > position) || ((width - margin) < position) || (position < GetMinimumDividerPosition()))
536 return E_OUT_OF_RANGE;
539 if (!__isDividerMaximumPositionInitialized)
541 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
543 __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
544 __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
548 __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
549 __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
552 __isDividerMaximumPositionInitialized = true;
556 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
558 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
560 __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
564 __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
569 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
571 __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
575 __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
580 if (GetDividerPosition() > position)
582 SetDividerPosition(position);
589 _SplitPanel::GetMaximumDividerPosition(void) const
591 if (GetDividerStyle() != SPLIT_PANEL_DIVIDER_STYLE_FIXED)
593 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
595 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
597 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
599 return __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE];
603 return __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE];
608 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
610 return __maximumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT];
614 return __maximumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT];
620 return GetBounds().width;
624 _SplitPanel::SetMinimumDividerPosition(int position)
626 if (GetDividerStyle() == SPLIT_PANEL_DIVIDER_STYLE_FIXED)
628 SysLog(NID_UI_CTRL, "[E_SYSTEM] System error occurred. This functionality is not supported for divider style fixed");
632 const int width = GetBounds().width;
634 if ((0 > position) || (width < position) || (position > GetMaximumDividerPosition()))
636 return E_OUT_OF_RANGE;
639 if (!__isDividerMinimumPositionInitialized)
641 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
643 __minimumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
644 __minimumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
648 __minimumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
649 __minimumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
652 __isDividerMinimumPositionInitialized = true;
656 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
658 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
660 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
662 __minimumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
666 __minimumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE] = position;
671 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
673 __minimumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
677 __minimumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT] = position;
682 if (GetDividerPosition() < position)
684 SetDividerPosition(position);
691 _SplitPanel::GetMinimumDividerPosition(void) const
693 if (GetDividerStyle() != SPLIT_PANEL_DIVIDER_STYLE_FIXED)
695 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
697 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
699 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
701 return __minimumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_LANDSCAPE];
705 return __minimumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_LANDSCAPE];
710 if (GetDividerDirection() == SPLIT_PANEL_DIVIDER_DIRECTION_VERTICAL)
712 return __minimumDividerPosition[_SPLIT_PANEL_VERTICAL_DIVIDER_ORIENTATION_PORTRAIT];
716 return __minimumDividerPosition[_SPLIT_PANEL_HORIZONTAL_DIVIDER_ORIENTATION_PORTRAIT];
726 _SplitPanel::SetDividerDirection(SplitPanelDividerDirection dividerDirection)
728 __splitPanelDividerDirection = dividerDirection;
733 SplitPanelDividerDirection
734 _SplitPanel::GetDividerDirection(void) const
736 SetLastResult(E_SUCCESS);
738 return __splitPanelDividerDirection;
742 _SplitPanel::MaximizePane(SplitPanelPaneOrder paneOrder)
744 SysTryReturn(NID_UI_CTRL, __pSplitPanelPresenter != null, E_SYSTEM, E_SYSTEM,
745 "[E_SYSTEM] System error occurred.");
747 __pSplitPanelPresenter->MaximizePane(paneOrder);
753 _SplitPanel::IsPaneMaximized(SplitPanelPaneOrder paneOrder) const
755 SysTryReturn(NID_UI_CTRL, __pSplitPanelPresenter != null, false, E_SYSTEM,
756 "[E_SYSTEM] System error occurred.");
758 return __pSplitPanelPresenter->IsPaneMaximized(paneOrder);
762 _SplitPanel::RestorePane(void)
764 SysTryReturn(NID_UI_CTRL, __pSplitPanelPresenter != null, E_SYSTEM, E_SYSTEM,
765 "[E_SYSTEM] System error occurred.");
767 __pSplitPanelPresenter->RestorePane();
773 _SplitPanel::SendSplitPanelEvent(_SplitPanelEventStatus status)
775 result r = E_SUCCESS;
777 if (__pSplitPanelEvent)
779 IEventArg* pEventArg = _SplitPanelEvent::CreateSplitPanelEventArgN(status);
781 SysTryReturn(NID_UI_CTRL, pEventArg, r, r, "[%s] Propagating.", GetErrorMessage(r));
783 __pSplitPanelEvent->Fire(*pEventArg);
790 _SplitPanel::SetTapCount(int count)
792 __dividerTapCount = count;
798 _SplitPanel::GetTapCount(void) const
800 return __dividerTapCount;
804 _SplitPanel::OnAttachedToMainTree(void)
806 if (likely(!(_AccessibilityManager::IsActivated())))
811 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
815 if (__pDividerVisualElement)
817 Rectangle dividerRect = __pSplitPanelPresenter->GetDividerRectangle();
818 String hintText = L"";
820 if (GetDividerStyle() == SPLIT_PANEL_DIVIDER_STYLE_FIXED)
822 hintText = String(L"Drag scroll Fixed");
826 hintText = String(L"Drag scroll, double tap and move to adjust split area");
829 __pAccessibilityElement = new _AccessibilityElement(true);
830 SysTryReturn(NID_UI_CTRL, __pAccessibilityElement, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
832 __pAccessibilityElement->SetBounds(dividerRect);
833 __pAccessibilityElement->SetTrait(ACCESSIBILITY_TRAITS_NONE);
834 __pAccessibilityElement->SetHint(hintText);
835 __pAccessibilityElement->SetLabel(L"");
836 __pAccessibilityElement->SetName(L"SplitPanelDivider");
838 pContainer->AddElement(*__pAccessibilityElement);
839 pContainer->AddListener(*this);
847 _SplitPanel::GetDividerVisualElement(void)
849 return __pDividerVisualElement;
853 _SplitPanel::SetDividerVisualElementBounds(Rectangle& bounds)
855 if (__pDividerVisualElement)
857 __pDividerVisualElement->SetBounds(FloatRectangle(bounds.x, bounds.y, bounds.width, bounds.height));
859 if (likely(_AccessibilityManager::IsActivated()) && __pAccessibilityElement)
861 __pAccessibilityElement->SetBounds(bounds);
869 _SplitPanel::OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element)
871 SetDividerPosition(GetDividerPosition() + 5);
878 _SplitPanel::OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element)
881 SetDividerPosition(GetDividerPosition() - 5);
887 }}} // Tizen::Ui::Controls