summaryrefslogtreecommitdiff
path: root/app-assist-efl/src/WView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'app-assist-efl/src/WView.cpp')
-rw-r--r--app-assist-efl/src/WView.cpp289
1 files changed, 289 insertions, 0 deletions
diff --git a/app-assist-efl/src/WView.cpp b/app-assist-efl/src/WView.cpp
new file mode 100644
index 0000000..288b6ce
--- /dev/null
+++ b/app-assist-efl/src/WView.cpp
@@ -0,0 +1,289 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ *
+ */
+
+#include "WView.h"
+#include "WControl.h"
+#include "WDebugInternal.h"
+#include "WDefineInternal.h"
+#include <app.h>
+#include <Elementary.h>
+#include <memory.h>
+#include <string>
+
+
+#define __CLASS_NAME "WView"
+
+
+class __WViewImpl
+{
+public:
+ __WViewImpl();
+ ~__WViewImpl();
+public:
+ //
+ char* __title;
+ WWindow* __window;
+
+ WNaviframe* __naviframe;
+ Elm_Object_Item* __naviItem;
+
+ std::function<void (Elm_Object_Item*)> __pushedHandler;
+
+};
+__WViewImpl::__WViewImpl()
+{
+ __title = NULL;
+ __window = NULL;
+ __naviframe = NULL;
+ __naviItem = NULL;
+ __pushedHandler = NULL;
+}
+
+__WViewImpl::~__WViewImpl()
+{
+ free(__title);
+}
+
+WView::WView()
+{
+ WHIT();
+ __pv = new __WViewImpl();
+}
+
+WView::WView( const char* name ) : __pv( new __WViewImpl() )
+{
+ WHIT();
+ setName( name);
+}
+
+WView::~WView()
+{
+ delete __pv;
+}
+
+const char* WView::getClassName()
+{
+ return __CLASS_NAME;
+}
+
+bool WView::create(Evas_Object* parent, void* param)
+{
+ if (WControl::create(parent, param)) {
+ evas_object_data_set(getEvasObj(), WKEY_VIEW_INSTANCE, this );
+ return true;
+ }
+
+ return false;
+}
+
+void WView::destroy()
+{
+ if (__pv->__naviItem)
+ {
+ elm_object_item_del(__pv->__naviItem);
+ return;
+ }
+ WControl::destroy();
+}
+
+void WView::setTitle( const char* title )
+{
+ free( __pv->__title);
+ __pv->__title = title ? strdup(title) : NULL;
+}
+const char* WView::getTitle()
+{
+ return __pv->__title;
+}
+
+void WView::setOnPushed( const std::function<void (Elm_Object_Item*)>& handlerFunc )
+{
+ __pv->__pushedHandler = handlerFunc;
+}
+
+bool WView::popOut()
+{
+ if( getEvasObj() == NULL)
+ {
+ WWARNING("Not created view! No Evas Object!");
+ return false;
+ }
+ if( getNaviframe() == NULL)
+ {
+ WWARNING("Not pushed to naviframe!");
+ return false;
+ }
+// "elm_object_item_widget_get" does not return right evas object!!! 2014.7.4
+// if( getEvasObj() != elm_object_item_widget_get( elm_naviframe_top_item_get(getNaviframe()->getEvasObj()) ))
+// {
+// WASSERT_EX(0,"This view is not on Top of Naviframe!");
+// return false;
+// }
+ if( __pv->__naviItem != elm_naviframe_top_item_get(getNaviframe()->getEvasObj()) )
+ {
+ elm_object_item_del(__pv->__naviItem);
+ }
+
+ destroyPopup(); // Before popping out view, pop-up is destroyed, if it has.Because pop-up is disappeared too late.
+
+ elm_naviframe_item_pop(getNaviframe()->getEvasObj());
+ return true;
+}
+
+
+WWindow* WView::getWindow()
+{
+ return __pv->__window;
+}
+
+bool WView::onPop()
+{
+ return true;
+}
+
+//void WView::onBecomeTop()
+//{
+//}
+//
+//void WView::onExpose()
+//{
+//}
+
+WNaviframe* WView::getNaviframe()
+{
+ if( __pv->__naviframe == NULL)
+ {
+ WWARNING("naviframe does not exist!");
+ }
+
+ return __pv->__naviframe;
+}
+
+Elm_Object_Item* WView::getNaviItem()
+{
+ if( __pv->__naviItem == NULL)
+ {
+ WWARNING("naviItem does not exist!");
+ }
+
+ return __pv->__naviItem;
+}
+
+void WView::onPushed(Elm_Object_Item* naviItem)
+{
+
+}
+
+Elm_Object_Item* WView::onPushToNaviframe( Evas_Object* naviFrame)
+{
+ return NULL;
+}
+
+
+Evas_Object* WView::onCreate( Evas_Object* parent, void* viewParam )
+{
+ Evas_Object* layout = elm_layout_add(parent);
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ #if defined RESDIR
+ const char* path = RESDIR;
+ #else
+ char* path = app_get_resource_path();
+ #endif
+
+ WINFO("app_get_resource_path: [%s]", path);
+ if( path == NULL )
+ {
+ WERROR("Failed to get resource path=NULL");
+ return layout;
+ }
+ std::string edjPath(path);
+
+ #if !defined(RESDIR)
+ free(path);
+ #endif
+
+ edjPath += "/edje/app-assist-efl.edj";
+
+ if( elm_layout_file_set(layout, edjPath.c_str(), "default-view") == EINA_TRUE)
+ {
+ Evas_Object* rect = evas_object_rectangle_add(evas_object_evas_get(layout));
+ evas_object_color_set(rect, rand() % 256, rand() % 256, rand() % 256, 255);
+ evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ elm_object_part_content_set(layout, "rect", rect);
+ if( getName() != NULL )
+ elm_object_part_text_set(layout, "name", getName());
+
+ }
+ else
+ {
+ WERROR("Fail to set layout. Check EDJ file(%s)", edjPath.c_str());
+ }
+
+ evas_object_show(layout);
+
+ return layout;
+}
+
+void WView::onSetAsPageContent(Elm_Object_Item* parentNaviItem)
+{
+
+}
+
+bool WView::enableMoreButton( Elm_Object_Item* naviItem, Evas_Smart_Cb clickedCb, void* userData )
+{
+ if( getNaviframe() == NULL )
+ {
+ WERROR("naviframe is not set");
+ return false;
+ }
+ Evas_Object *btn = elm_button_add( getNaviframe()->getEvasObj() );
+ if (!btn) return false;
+ elm_object_style_set(btn, "naviframe/more/default");
+ evas_object_show(btn);
+ evas_object_smart_callback_add(btn, "clicked", clickedCb, userData);
+ elm_object_item_part_content_set(naviItem, "toolbar_more_btn", btn);
+ return true;
+}
+
+bool WView::__callPushedHandlerFunc(Elm_Object_Item* naviItem)
+{
+ if( __pv->__pushedHandler )
+ {
+ __pv->__pushedHandler(naviItem);
+ return true;
+ }
+ return false;
+}
+
+WView* WView_getInstanceFromEvasObj(Evas_Object* obj)
+{
+ return (WView*)evas_object_data_get(obj, WKEY_VIEW_INSTANCE);
+}
+
+void WView_setContainerProperties( WView* view, WWindow* win, WNaviframe* naviframe )
+{
+ view->__pv->__window = win;
+ view->__pv->__naviframe = naviframe;
+}
+
+void WView_setContainerNaviItemProperty( WView* view, Elm_Object_Item* item )
+{
+ view->__pv->__naviItem = item;
+}