From: InHong Han Date: Thu, 5 Mar 2020 04:54:49 +0000 (+0900) Subject: Add a new menu for manul test of the Inputmethod API X-Git-Tag: accepted/tizen/unified/20200306.125013~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F18%2F226718%2F2;p=platform%2Fcore%2Fuifw%2Fisf.git Add a new menu for manul test of the Inputmethod API Change-Id: If60f94da85aacceed9455eae9125ac644604402d --- diff --git a/ism/demos/Makefile.am b/ism/demos/Makefile.am index aa0bedc..9139c10 100644 --- a/ism/demos/Makefile.am +++ b/ism/demos/Makefile.am @@ -43,7 +43,8 @@ isf_demo_efl_SOURCES = isf_demo_efl.cpp \ isf_password_mode_efl.cpp \ isf_mime_type_efl.cpp \ isf_demo_autotest.cpp \ - isf_position_set_efl.cpp + isf_position_set_efl.cpp \ + isf_manual_test_efl.cpp isf_demo_efl_CXXFLAGS = @ECOREX_CFLAGS@ \ @ELEMENTARY_CFLAGS@ \ diff --git a/ism/demos/include/isf_manual_test_efl.h b/ism/demos/include/isf_manual_test_efl.h new file mode 100644 index 0000000..f88eef8 --- /dev/null +++ b/ism/demos/include/isf_manual_test_efl.h @@ -0,0 +1,36 @@ +/* + * ISF(Input Service Framework) + * + * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable. + * Copyright (c) 2012-2020 Samsung Electronics Co., Ltd. + * + * Contact: Jihoon Kim , Inhong Han + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __ISF_MANUAL_TEST_H +#define __ISF_MANUAL_TEST_H + +#include + +void ise_manual_test_bt (void *data, Evas_Object *obj, void *event_info); + +#endif /* __ISF_MANUAL_TEST_H */ + +/* +vi:ts=4:ai:nowrap:expandtab +*/ diff --git a/ism/demos/isf_demo_efl.cpp b/ism/demos/isf_demo_efl.cpp index c871016..bbc1b80 100644 --- a/ism/demos/isf_demo_efl.cpp +++ b/ism/demos/isf_demo_efl.cpp @@ -49,6 +49,7 @@ #include "isf_mime_type_efl.h" #include "isf_demo_autotest.h" #include "isf_position_set_efl.h" +#include "isf_manual_test_efl.h" #include "tizen_profile.h" #include @@ -86,6 +87,7 @@ static struct _menu_item isf_demo_menu_its[] = { { "ISF Event", isf_event_demo_bt }, { "ISF IM Control", imcontrolapi_bt }, { "ISF Floating Position", ise_position_set_bt }, + { "ISF Manual Test", ise_manual_test_bt }, /* do not delete below */ { NULL, NULL } diff --git a/ism/demos/isf_manual_test_efl.cpp b/ism/demos/isf_manual_test_efl.cpp new file mode 100644 index 0000000..6e64e76 --- /dev/null +++ b/ism/demos/isf_manual_test_efl.cpp @@ -0,0 +1,172 @@ +/* + * ISF(Input Service Framework) + * + * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable. + * Copyright (c) 2012-2020 Samsung Electronics Co., Ltd. + * + * Contact: Jihoon Kim , Inhong Han + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include +#include + +#include "isf_demo_efl.h" +#include "isf_manual_test_efl.h" + +using namespace std; + +struct _menu_item { + const char *name; + const char *guide_text; + const char *test_name; +}; + +static struct _menu_item _menu_its[] = { + { N_("NORMAL"), N_("click to enter"), N_("NORMAL")}, + { N_("MimeTypeSet"), N_("click to enter"), N_("MimeTypeSet")}, + { N_("LanguageSet"), N_("click to enter"), N_("LanguageSet")}, + { N_("DataSet"), N_("click to enter"), N_("DataSet")}, + { N_("LayoutSet"), N_("click to enter"), N_("LayoutSet")}, + { N_("ReturnKeySet"), N_("click to enter"), N_("ReturnKeySet")}, + { N_("ReturnKeyStateSet"), N_("click to enter"), N_("ReturnKeyStateSet")}, + + /* do not delete below */ + { NULL, NULL, NULL } +}; + +static map m_test_name; + +static void _rotate_cb (void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + + int angle = elm_win_rotation_get (ad->win_main); + if (angle == 0) { + elm_win_rotation_with_resize_set (ad->win_main, 270); + } else if (angle == 270) { + elm_win_rotation_with_resize_set (ad->win_main, 0); + } +} + +static void _input_panel_state_cb (void *data, Ecore_IMF_Context *ctx, int value) +{ + map::iterator it = m_test_name.find (ctx); + string test = it->second; + + if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { + if (test == "MimeTypeSet") { + const char *mime_type = "text/plain"; + ecore_imf_context_mime_type_accept_set (ctx, mime_type); + } else if (test == "LanguageSet") { + ecore_imf_context_input_panel_language_set (ctx, ECORE_IMF_INPUT_PANEL_LANG_ALPHABET); + } else if (test == "DataSet") { + char buf[256] = "ur imdata"; + ecore_imf_context_input_panel_imdata_set (ctx, buf, sizeof (buf)); + } else if (test == "LayoutSet") { + ecore_imf_context_input_panel_layout_set (ctx, ECORE_IMF_INPUT_PANEL_LAYOUT_EMOTICON); + } else if (test == "ReturnKeySet") { + ecore_imf_context_input_panel_return_key_type_set (ctx, ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH); + } else if (test == "ReturnKeyStateSet") { + ecore_imf_context_input_panel_return_key_disabled_set (ctx, EINA_TRUE); + } + } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + if (test == "LanguageSet") { + ecore_imf_context_input_panel_language_set (ctx, ECORE_IMF_INPUT_PANEL_LANG_AUTOMATIC); + } else if (test == "LayoutSet") { + ecore_imf_context_input_panel_layout_set (ctx, ECORE_IMF_INPUT_PANEL_LAYOUT_NORMAL); + } else if (test == "ReturnKeySet") { + ecore_imf_context_input_panel_return_key_type_set (ctx, ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DEFAULT); + } else if (test == "ReturnKeyStateSet") { + ecore_imf_context_input_panel_return_key_disabled_set (ctx, EINA_FALSE); + } + } +} + +static void _focus_out_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +{ + Ecore_IMF_Context *ctx = (Ecore_IMF_Context*) data; + map::iterator it = m_test_name.find (ctx); + string test = it->second; + + if (test == "LanguageSet") { + ecore_imf_context_input_panel_language_set (ctx, ECORE_IMF_INPUT_PANEL_LANG_AUTOMATIC); + } else if (test == "LayoutSet") { + ecore_imf_context_input_panel_layout_set (ctx, ECORE_IMF_INPUT_PANEL_LAYOUT_NORMAL); + } else if (test == "ReturnKeySet") { + ecore_imf_context_input_panel_return_key_type_set (ctx, ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DEFAULT); + } else if (test == "ReturnKeyStateSet") { + ecore_imf_context_input_panel_return_key_disabled_set (ctx, EINA_FALSE); + } +} + +static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, const char *guide_text, const char *test_name) +{ + Evas_Object *en; + Evas_Object *ef = create_ef (parent, label, guide_text, &en); + if (!ef || !en) return NULL; + + Ecore_IMF_Context *ic = NULL; + ic = (Ecore_IMF_Context *)elm_entry_imf_context_get (en); + + if (ic != NULL) { + m_test_name.insert (make_pair(ic, (string) test_name)); + ecore_imf_context_input_panel_event_callback_add (ic, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_state_cb, NULL); + evas_object_smart_callback_add(en, "unfocused", _focus_out_cb, ic); + } + + return ef; +} + +static Evas_Object * create_inner_layout (void *data) +{ + struct appdata *ad = (struct appdata *)data; + Evas_Object *bx = NULL; + Evas_Object *ef = NULL; + Evas_Object *parent = ad->naviframe; + int idx = 0; + + bx = elm_box_add (parent); + evas_object_size_hint_weight_set (bx, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set (bx, EVAS_HINT_FILL, 0.0); + evas_object_show (bx); + + while (_menu_its[idx].name != NULL) + { + ef = _create_ef_layout (parent, _menu_its[idx].name, _menu_its[idx].guide_text, _menu_its[idx].test_name); + elm_box_pack_end (bx, ef); + ++idx; + } + + Evas_Object *rotate_btn = create_button (parent, "rotate"); + elm_object_focus_allow_set (rotate_btn, EINA_FALSE); + evas_object_smart_callback_add (rotate_btn, "clicked", _rotate_cb, (void *)ad); + elm_box_pack_end (bx, rotate_btn); + + return bx; +} + +void ise_manual_test_bt (void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *lay_inner = create_inner_layout (data); + add_layout_to_naviframe (data, lay_inner, _("InputMethod Manual Test")); +} + +/* +vi:ts=4:ai:nowrap:expandtab +*/