FreeCalypso > hg > tcs211-c139
diff g23m/condat/ms/src/bmi/MmiLatinPredText.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/MmiLatinPredText.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,431 @@ +/******************************************************************************* + + CONDAT (UK) + +******************************************************************************** + + This software product is the property of Condat (UK) Ltd and may not be + disclosed to any third party without the express permission of the owner. + +******************************************************************************** + + $Project name: Basic MMI + $Project code: BMI + $Module: MMI + $File: MmiLatinPredText.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: + +******************************************************************************** + + Description: Latin alphabet predictiev text editor. English-only for the moment. + + + +******************************************************************************** + + $History: MmLatinPredText.c + 03/10/02 Replaced most of the file with version on 3.3.3 line (MC, SPR 1242) + + $End + +*******************************************************************************/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "Vsi.h" +#include "PEI.H" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + +#include "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_kbd.h" +#include "mfw_edt.h" +#include "mfw_tim.h" +#include "mfw_phb.h" +#include "mfw_sms.h" +#include "mfw_ss.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_lng.h" +#include "mfw_sat.h" +#include "mfw_kbd.h" +#include "mfw_nm.h" +#include "mfw_cm.h" + +#include "dspl.h" + +#include "ksd.h" +#include "psa.h" + + +#include "MmiMain.h" +#include "MmiDummy.h" +#include "MmiMmi.h" + +#include "MmiDialogs.h" +#include "MmiLists.h" +#include "MmiMenu.h" +#include "MmiSoftKeys.h" +#include "MmiIdle.h" + +#include "MmiEditor.h" +#include "MmiEditor_i.h" +#include "MmiDictionary.h" +#include "mmiColours.h" + +#include "cus_aci.h" +#include "prim.h" + + +#ifndef MFW_EVENT_PASSED +#define MFW_EVENT_PASSED 0 +#endif + +//data structure for punctuation symbols selection screen +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND parent; + T_MFW_HND edt_win; + T_MFW_HND edt_edt; + T_MFW_HND edt_kbd; + T_MFW_HND edt_kbd_long; + T_MFW_HND edt_tim; // c015 rsa + T_MFW_HND edt_input; // RM 25-08 + + T_EDITOR_DATA editor_data; + UBYTE cursor_position; + char* output_symbol; + +} +T_SYMBOL_INFO; + +//events in main editor screen +typedef enum +{ + EDITOR_INIT, + EDITOR_DEINIT, + EDITOR_UPDATE +} editor_events; + +/********************************************************************* +********************************************************************** + + DYNAMIC EDITOR WINDOW. DECLARATION + +********************************************************************* +**********************************************************************/ + + +//protoypes + + + +static T_MFW_HND SymbolScreencreate (T_MFW_HND parent); +static int SymbolScreenwin_cb (T_MFW_EVENT event, T_MFW_WIN * win); +static int SymbolScreenkbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard); +static void SymbolScreenexec_cb (T_MFW_HND win, USHORT event, SHORT value, char * symbol); + +char SymbolChar; + + + +/******************************************************************************* + + $Function: SymbolScreendestroy + + $Description: Destroy thesymbol screen + + $Returns: None. + + $Arguments: window handle + +*******************************************************************************/ + +void SymbolScreendestroy (T_MFW_HND window) +{ + T_MFW_WIN * win = ((T_MFW_HDR *)window)->data; + T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win->user; + char Punctuation_symbol = *data->output_symbol; + TRACE_FUNCTION ("SymbolScreendestroy()"); + + + SEND_EVENT (data->parent, EDITOR_UPDATE,(short)Punctuation_symbol, NULL); + if (data) + { + /* + * Delete WIN Handler + */ + win_delete (data->edt_win); + /* + * Free Memory + */ + FREE_MEMORY ((void *)data, sizeof (T_SYMBOL_INFO)); + } + else + { + TRACE_EVENT ("SymbolScreendestroy() called twice"); + return ; + } +} + + +/******************************************************************************* + + $Function: SymbolScreenstart + + $Description: Starts the symbol screen + + $Returns: handle + + $Arguments: parent window, editor data + +*******************************************************************************/ +T_MFW_HND SymbolScreenstart (T_MFW_HND parent, char * symbol) +{ + T_MFW_HND win; + + + TRACE_FUNCTION ("SymbolScreenstart()"); + + win = SymbolScreencreate (parent); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_EDITOR_INIT, 0, 0); + } + return win; +} + + +/******************************************************************************* + + $Function: LatinEditorcreate + + $Description: Creation of a symbol screen + + $Returns: handle of new window + + $Arguments: parent window + +*******************************************************************************/ +static T_MFW_HND SymbolScreencreate (T_MFW_HND parent) +{ + T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)ALLOC_MEMORY (sizeof (T_SYMBOL_INFO)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("SymbolScreencreate()"); + + /* + * Create window handler + */ + + data->edt_win = win_create (parent, 0, E_WIN_VISIBLE, (T_MFW_CB)SymbolScreenwin_cb); + + if (data->edt_win EQ NULL) + { + return NULL; + } + + /* + * connect the dialog data to the MFW-window + */ + + + data->mmi_control.dialog = (T_DIALOG_FUNC)SymbolScreenexec_cb; + data->mmi_control.data = data; + data->parent = parent; + win = ((T_MFW_HDR *)data->edt_win)->data; + win->user = (void *)data; + + return data->edt_win; +} + +/******************************************************************************* + + $Function: SymbolScreenexec_cb + + $Description: handles events for symbol window + + $Returns: None. + + $Arguments: window, event, value, editor data + +*******************************************************************************/ +static void SymbolScreenexec_cb (T_MFW_HND win, USHORT event, SHORT value, char * symbol) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win_data->user; + + T_MFW_HND parent_win = data->parent; + USHORT Identifier = data->editor_data.Identifier; + T_EDIT_CB Callback = data->editor_data.Callback; + char debug[20]; + char* symStr = ".,?!:;-+#*()\'\"_@&$£%/<>="; + + TRACE_FUNCTION ("SymbolScreenexec_cb()"); + + switch (event) + { + case E_EDITOR_INIT: + + + /* Note that we do not copy the edited buffer here */ + data->editor_data.editor_attr.predText[0] = '\0'; + + /* + * Create the handler + */ + data->edt_kbd = kbd_create (data->edt_win, KEY_ALL, (T_MFW_CB)SymbolScreenkbd_cb); + data->edt_edt = edtCreate (data->edt_win, &data->editor_data.editor_attr,MfwEdtVisible,0); + + /* + * Set the mode for the editor + */ + editor_attr_init(&data->editor_data.editor_attr, 0, edtCurMask, NULL, symStr, strlen(symStr), COLOUR_EDITOR ); + editActivate(data->edt_edt,ALPHA_MODE); + data->output_symbol = symbol; + data->cursor_position = 0; + + edtChar(data->edt_edt,ecTop); /* in read-only mode set cursor to begin */ + win_show(data->edt_win); + + break; + + case E_EDITOR_DEINIT: + + SymbolScreendestroy (data->edt_win); + break; + + default: + break; + } +} +/******************************************************************************* + + $Function: SymbolScreenwin_cb + + $Description: Editor window event handler. + + $Returns: status int + + $Arguments: event, window + +*******************************************************************************/ +static int SymbolScreenwin_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win->user; + TRACE_FUNCTION ("SymbolScreen_win_cb()"); + + + if (data->edt_edt!=activeEditor()) + editActivate(data->edt_edt,data->editor_data.mode); + if (data EQ 0) + { + return MFW_EVENT_CONSUMED; + } + + switch (event) + { + case E_WIN_VISIBLE: /* window is visible */ + if (win->flags & E_WIN_VISIBLE) + { + /* + * Clear Screen + */ + dspl_ClearAll(); + + /* + * Print the information + */ + edtShow(data->edt_edt); + + /* + * Print the softkeys + */ + displaySoftKeys(TxtSoftSelect, TxtSoftBack); + + } + break; + default: + return MFW_EVENT_PASSED; + } + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: SymbolScreen_kbd_cb + + $Description: Symbol screen keyboard event handler + + $Returns: None. + + $Arguments: event, keyborad data + +*******************************************************************************/ +static int SymbolScreenkbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + T_MFW_HND win = mfw_parent (mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win_data->user; + char debug[20]; + TRACE_FUNCTION ("SymbolScreen_kbd_cb()"); + + + + switch (keyboard->code) + { + case KCD_MNUUP: + edtChar(data->edt_edt,ecLeft); + if (data->cursor_position > 0) + data->cursor_position--; + edtShow(data->edt_edt); + break; + + case KCD_MNUDOWN: + edtChar(data->edt_edt,ecRight); + if (data->cursor_position < strlen(data->editor_data.editor_attr.text)) + data->cursor_position++; + edtShow(data->edt_edt); + break; + + case KCD_LEFT: + *data->output_symbol = data->editor_data.editor_attr.text[data->cursor_position]; + SymbolChar = data->editor_data.editor_attr.text[data->cursor_position]; + TRACE_EVENT(debug); + SymbolScreendestroy(data->edt_win); + break; + + + case KCD_HUP: + case KCD_RIGHT: + *data->output_symbol = '\0'; + SymbolChar ='\0' ; + SymbolScreendestroy(data->edt_win); + + break; + + } + + return MFW_EVENT_CONSUMED; +} +