Merge branch 'devel/master' into tizen
[platform/core/uifw/dali-demo.git] / shared / dali-table-view.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 3b3719a..261d96f
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 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.
 #include "dali-table-view.h"
 
 // EXTERNAL INCLUDES
-#include <dali/devel-api/actors/actor-devel.h>
-#include <dali/devel-api/images/distance-field.h>
-#include <dali-toolkit/devel-api/controls/control-devel.h>
-#include <dali-toolkit/devel-api/shader-effects/alpha-discard-effect.h>
-#include <dali-toolkit/devel-api/shader-effects/distance-field-effect.h>
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali-toolkit/devel-api/accessibility-manager/accessibility-manager.h>
+#include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
 #include <dali-toolkit/devel-api/shader-effects/alpha-discard-effect.h>
 #include <dali-toolkit/devel-api/shader-effects/distance-field-effect.h>
 #include "shared/utility.h"
 #include "shared/view.h"
 
+
+#include <ifaddrs.h>
+#include <net/if.h>
+#include <netdb.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <cstdio>
+#include <cstring>
+
+
 using namespace Dali;
 using namespace Dali::Toolkit;
 
@@ -65,7 +71,7 @@ const float   BUTTON_PRESS_ANIMATION_TIME = 0.35f; ///< Time to perform button s
 const int     EXAMPLES_PER_ROW            = 3;
 const int     ROWS_PER_PAGE               = 3;
 const int     EXAMPLES_PER_PAGE           = EXAMPLES_PER_ROW * ROWS_PER_PAGE;
-const Vector3 TABLE_RELATIVE_SIZE(0.95f, 0.9f, 0.8f);     ///< TableView's relative size to the entire stage. The Y value means sum of the logo and table relative heights.
+const Vector3 TABLE_RELATIVE_SIZE(0.95f, 0.9f, 0.8f); ///< TableView's relative size to the entire stage. The Y value means sum of the logo and table relative heights.
 
 const char* const DEMO_BUILD_DATE = __DATE__ " " __TIME__;
 
@@ -118,12 +124,8 @@ private:
   float mTileXOffset;
 };
 
-/**
- * Creates a popup that shows the version information of the DALi libraries and demo
- */
-Dali::Toolkit::Popup CreateVersionPopup(Application& application, ConnectionTrackerInterface& connectionTracker)
+void AppendVersionString(std::ostringstream& stream)
 {
-  std::ostringstream stream;
   stream << "DALi Core: " << CORE_MAJOR_VERSION << "." << CORE_MINOR_VERSION << "." << CORE_MICRO_VERSION << std::endl
          << "(" << CORE_BUILD_DATE << ")\n";
   stream << "DALi Adaptor: " << ADAPTOR_MAJOR_VERSION << "." << ADAPTOR_MINOR_VERSION << "." << ADAPTOR_MICRO_VERSION << std::endl
@@ -131,7 +133,47 @@ Dali::Toolkit::Popup CreateVersionPopup(Application& application, ConnectionTrac
   stream << "DALi Toolkit: " << TOOLKIT_MAJOR_VERSION << "." << TOOLKIT_MINOR_VERSION << "." << TOOLKIT_MICRO_VERSION << std::endl
          << "(" << TOOLKIT_BUILD_DATE << ")\n";
   stream << "DALi Demo:"
-         << "\n(" << DEMO_BUILD_DATE << ")\n";
+         << "\n(" << DEMO_BUILD_DATE << ")\n\n";
+}
+
+void AppendIpAddress(std::ostringstream& stream)
+{
+  // Append IP addresses
+  struct ifaddrs *interfaceAddresses, *head;
+  if(!getifaddrs(&interfaceAddresses))
+  {
+    head = interfaceAddresses;
+
+    char host[NI_MAXHOST];
+    int  n = 0;
+    while(interfaceAddresses)
+    {
+      if(strcmp(interfaceAddresses->ifa_name, "lo"))
+      {
+        struct sockaddr* address = interfaceAddresses->ifa_addr;
+        if(address != nullptr && address->sa_family == AF_INET)
+        {
+          if(getnameinfo(address, sizeof(struct sockaddr_in), host, NI_MAXHOST, nullptr, 0, NI_NUMERICHOST) == 0)
+          {
+            stream<<interfaceAddresses->ifa_name<<": "<<host<<std::endl;
+            ++n;
+          }
+        }
+      }
+      interfaceAddresses = interfaceAddresses->ifa_next;
+    }
+    freeifaddrs(head);
+  }
+}
+
+/**
+ * Creates a popup that shows the version information of the DALi libraries and demo
+ */
+Dali::Toolkit::Popup CreateVersionPopup(Application& application, ConnectionTrackerInterface& connectionTracker)
+{
+  std::ostringstream stream;
+  AppendVersionString(stream);
+  AppendIpAddress(stream);
 
   Dali::Toolkit::Popup popup = Dali::Toolkit::Popup::New();
 
@@ -159,8 +201,7 @@ Dali::Toolkit::Popup CreateVersionPopup(Application& application, ConnectionTrac
   // Hide the popup when touched outside
   popup.OutsideTouchedSignal().Connect(
     &connectionTracker,
-    [popup]() mutable
-    {
+    [popup]() mutable {
       if(popup && (popup.GetDisplayState() == Toolkit::Popup::SHOWN))
       {
         popup.SetDisplayState(Popup::HIDDEN);
@@ -299,17 +340,17 @@ void DaliTableView::Initialize(Application& application)
 
   if(windowSize.GetWidth() <= windowSize.GetHeight())
   {
-    winHandle.AddAvailableOrientation(Dali::Window::PORTRAIT);
-    winHandle.RemoveAvailableOrientation(Dali::Window::LANDSCAPE);
-    winHandle.AddAvailableOrientation(Dali::Window::PORTRAIT_INVERSE);
-    winHandle.RemoveAvailableOrientation(Dali::Window::LANDSCAPE_INVERSE);
+    winHandle.AddAvailableOrientation(Dali::WindowOrientation::PORTRAIT);
+    winHandle.RemoveAvailableOrientation(Dali::WindowOrientation::LANDSCAPE);
+    winHandle.AddAvailableOrientation(Dali::WindowOrientation::PORTRAIT_INVERSE);
+    winHandle.RemoveAvailableOrientation(Dali::WindowOrientation::LANDSCAPE_INVERSE);
   }
   else
   {
-    winHandle.AddAvailableOrientation(Dali::Window::LANDSCAPE);
-    winHandle.RemoveAvailableOrientation(Dali::Window::PORTRAIT);
-    winHandle.AddAvailableOrientation(Dali::Window::LANDSCAPE_INVERSE);
-    winHandle.RemoveAvailableOrientation(Dali::Window::PORTRAIT_INVERSE);
+    winHandle.AddAvailableOrientation(Dali::WindowOrientation::LANDSCAPE);
+    winHandle.RemoveAvailableOrientation(Dali::WindowOrientation::PORTRAIT);
+    winHandle.AddAvailableOrientation(Dali::WindowOrientation::LANDSCAPE_INVERSE);
+    winHandle.RemoveAvailableOrientation(Dali::WindowOrientation::PORTRAIT_INVERSE);
   }
 
   CreateFocusEffect();
@@ -399,7 +440,7 @@ void DaliTableView::Populate()
   {
     if(mSortAlphabetically)
     {
-      sort(mExampleList.begin(), mExampleList.end(), [](auto& lhs, auto& rhs)->bool { return lhs.title < rhs.title; } );
+      sort(mExampleList.begin(), mExampleList.end(), [](auto& lhs, auto& rhs) -> bool { return lhs.title < rhs.title; });
     }
 
     unsigned int         exampleCount = 0;
@@ -501,7 +542,7 @@ Actor DaliTableView::CreateTile(const std::string& name, const std::string& titl
   focusableTile.TouchedSignal().Connect(this, &DaliTableView::OnTilePressed);
   focusableTile.HoveredSignal().Connect(this, &DaliTableView::OnTileHovered);
   focusableTile.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON);
-  DevelControl::AccessibilityActivateSignal(focusableTile).Connect(this, [=](){
+  DevelControl::AccessibilityActivateSignal(focusableTile).Connect(this, [=]() {
     DoTilePress(focusableTile, PointState::DOWN);
     DoTilePress(focusableTile, PointState::UP);
   });
@@ -532,7 +573,7 @@ bool DaliTableView::DoTilePress(Actor actor, PointState::Type pointState)
     // ignore Example button presses when scrolling or button animating.
     if((!mScrolling) && (!mPressedAnimation))
     {
-      std::string           name = actor.GetProperty<std::string>(Dali::Actor::Property::NAME);
+      std::string name = actor.GetProperty<std::string>(Dali::Actor::Property::NAME);
       for(Example& example : mExampleList)
       {
         if(example.name == name)