/* * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed 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. */ /** * @file transition-application.cpp * @brief Application class for showing stylable transitions */ // Class include #include "transition-application.h" // External includes #include #include #include #include #include #include "shadow-button.h" // Internal includes using namespace Dali; using namespace Dali::Toolkit; namespace { void SetLabelText(Button button, const char* label) { button.SetProperty(Toolkit::Button::Property::LABEL, label); } } // namespace namespace Demo { const char* TransitionApplication::DEMO_THEME_ONE_PATH(DEMO_STYLE_DIR "style-example-theme-one.json"); const char* TransitionApplication::DEMO_THEME_TWO_PATH(DEMO_STYLE_DIR "style-example-theme-two.json"); TransitionApplication::TransitionApplication(Application& application) : mApplication(application), mTitle(), mShadowButton(), mActionButtons(), mVisualIndex(Property::INVALID_INDEX), mActionIndex(Property::INVALID_INDEX) { application.InitSignal().Connect(this, &TransitionApplication::Create); } TransitionApplication::~TransitionApplication() { } void TransitionApplication::Create(Application& application) { Window window = application.GetWindow(); window.KeyEventSignal().Connect(this, &TransitionApplication::OnKeyEvent); window.SetBackgroundColor(Vector4(0.1f, 0.1f, 0.1f, 1.0f)); // Content panes: TableView contentLayout = TableView::New(3, 1); contentLayout.SetProperty(Dali::Actor::Property::NAME, "ContentLayout"); contentLayout.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); contentLayout.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); contentLayout.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); contentLayout.SetCellPadding(Vector2(0.0f, 5.0f)); contentLayout.SetBackgroundColor(Vector4(0.949, 0.949, 0.949, 1.0)); // Assign all rows the size negotiation property of fitting to children window.Add(contentLayout); mTitle = TextLabel::New("Custom Control Transition Example"); mTitle.SetProperty(Dali::Actor::Property::NAME, "Title"); mTitle.SetStyleName("Title"); mTitle.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); mTitle.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT); mTitle.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER"); contentLayout.Add(mTitle); contentLayout.SetFitHeight(0); // Fill width // Provide some padding around the center cell TableView buttonLayout = TableView::New(3, 3); buttonLayout.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); buttonLayout.SetFixedHeight(1, 100); buttonLayout.SetFixedWidth(1, 350); contentLayout.Add(buttonLayout); mShadowButton = ShadowButton::New(); mShadowButton.SetProperty(Dali::Actor::Property::NAME, "ShadowButton"); mShadowButton.SetActiveState(false); mShadowButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); mShadowButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); mShadowButton.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); mShadowButton.SetProperty(DevelControl::Property::STATE, DevelControl::DISABLED); mShadowButton.SetProperty(DevelControl::Property::SUB_STATE, "UNCHECKED"); buttonLayout.AddChild(mShadowButton, TableView::CellPosition(1, 1)); TableView actionButtonLayout = TableView::New(1, NUMBER_OF_ACTION_BUTTONS + 1); actionButtonLayout.SetProperty(Dali::Actor::Property::NAME, "ThemeButtonsLayout"); actionButtonLayout.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); actionButtonLayout.SetResizePolicy(ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT); actionButtonLayout.SetFitHeight(0); TextLabel label = TextLabel::New("Action: "); label.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS); label.SetStyleName("ActionLabel"); actionButtonLayout.AddChild(label, TableView::CellPosition(0, 0)); actionButtonLayout.SetCellAlignment(TableView::CellPosition(0, 0), HorizontalAlignment::LEFT, VerticalAlignment::CENTER); for(int i = 0; i < NUMBER_OF_ACTION_BUTTONS; ++i) { mActionButtons[i] = PushButton::New(); mActionButtons[i].SetProperty(Dali::Actor::Property::NAME, "ActionButton"); mActionButtons[i].SetStyleName("ActionButton"); mActionButtons[i].SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); mActionButtons[i].SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT); mActionIndex = mActionButtons[i].RegisterProperty("actionId", i, Property::READ_WRITE); mActionButtons[i].ClickedSignal().Connect(this, &TransitionApplication::OnActionButtonClicked); actionButtonLayout.AddChild(mActionButtons[i], TableView::CellPosition(0, 1 + i)); } SetLabelText(mActionButtons[0], "Enable"); SetLabelText(mActionButtons[1], "Check"); mActionButtons[1].SetProperty(Button::Property::DISABLED, true); contentLayout.Add(actionButtonLayout); contentLayout.SetFitHeight(2); } bool TransitionApplication::OnActionButtonClicked(Button button) { int action = button.GetProperty(mActionIndex); switch(action) { case 0: { bool activeState = mShadowButton.GetActiveState(); mShadowButton.SetActiveState(!activeState); if(activeState) { SetLabelText(button, "Enable"); mShadowButton.SetProperty(DevelControl::Property::STATE, DevelControl::DISABLED); } else { SetLabelText(button, "Disable"); mShadowButton.SetProperty(DevelControl::Property::STATE, DevelControl::NORMAL); } mActionButtons[1].SetProperty(Button::Property::DISABLED, activeState); break; } case 1: { bool checkState = mShadowButton.GetCheckState(); mShadowButton.SetCheckState(!checkState); if(checkState) { SetLabelText(button, "Check"); mShadowButton.SetProperty(DevelControl::Property::SUB_STATE, "UNCHECKED"); } else { SetLabelText(button, "Uncheck"); mShadowButton.SetProperty(DevelControl::Property::SUB_STATE, "CHECKED"); } break; } case 2: { break; } case 3: { break; } } return true; } void TransitionApplication::OnKeyEvent(const KeyEvent& keyEvent) { static int keyPressed = 0; if(keyEvent.GetState() == KeyEvent::DOWN) { if(keyPressed == 0) // Is this the first down event? { printf("Key pressed: %s %d\n", keyEvent.GetKeyName().c_str(), keyEvent.GetKeyCode()); if(IsKey(keyEvent, DALI_KEY_ESCAPE) || IsKey(keyEvent, DALI_KEY_BACK)) { mApplication.Quit(); } else if(keyEvent.GetKeyName().compare("Return") == 0) { } } keyPressed = 1; } else if(keyEvent.GetState() == KeyEvent::UP) { keyPressed = 0; } } } // namespace Demo