📄 t9main.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* t9main.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This file is to implement Man Machine Interface between UI layer and T9 core engine.
*
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
/*------------------------------------------------------------------------
*
* include header files
*
*------------------------------------------------------------------------*/
#ifdef FIRST_PASS
#include "BuildCfg.h"
#endif
#if defined(__MMI_T9_V7__)
#include "t9.h"
#include "t9awapi.h"
#include "t9ccapi.h"
#endif
#include "MMI_features.h"
#include "t9api.h"
#include "oslmemory.h"
#include "GlobalConstants.h"
#include "Eventsdef.h"
#include "Pixteldatatypes.h"
#include "t9main.h"
#include "Frameworkstruct.h"
#include "EventsDef.h"
#include "Wgui.h"
#include "t9definition.h"
#include "t9def.h"
#include "Timerevents.h"
#include "DebugInitDef.h"
#include "CustDataRes.h"
#include "MessagesResourceData.h"
#include "GlobalDefs.h"
#include "Gui_config.h"
/*MTK Terry for Selection Size for different LCM size and Font size*/
#include "gdi_lcd_config.h"
/*MTK end*/
//to restruct the header files for new simulator
#include "gui_ems.h"
//#include "Ems.h"
#include "wgui_categories_inputs.h"
#include "wgui_softkeys.h"
#include "gui.h"
#ifdef WIN32
#define __align(X)
#endif
/*------------------------------------------------------------------------
*
* enternal function calls
*
*------------------------------------------------------------------------*/
extern void ClearKeyHandler(U16 keyCode, U16 keyType);
extern void SetKeyHandler(FuncPtr funcPtr, U16 keyCode, U16 keyType);
extern void redraw_multiline_inputbox(void);
extern void clear_screen(void);
extern U16 StartMyTimer(U16 nTimerId,U32 nTimeDuration,oslTimerFuncPtr TimerExpiry);
extern U16 StopMyTimer(U16 nTimerId);
extern void pixtel_UI_create_single_line_input_box(single_line_input_box* b,s32 x,s32 y,s32 width,s32 height,s32 length);
extern void pixtel_UI_create_single_line_input_box_use_buffer(single_line_input_box* b,s32 x,s32 y,s32 width,s32 height,UI_string_type buffer,s32 length);
extern void pixtel_UI_show_single_line_input_box(single_line_input_box *b);
extern void pixtel_UI_show_multi_line_input_box(multi_line_input_box *b);
extern UI_string_type get_string(UI_string_ID_type i);
extern void draw_title(void);
extern void pixtel_UI_multi_line_input_box_insert_character(multi_line_input_box *b,UI_character_type c);
extern void pixtel_UI_multi_line_input_box_delete_character(multi_line_input_box *b);
extern void pixtel_UI_multi_line_input_box_previous(multi_line_input_box *b);
extern void pixtel_UI_multi_line_input_box_next(multi_line_input_box *b);
extern void redraw_category5_information_bar(void);
extern void SetCategory5RightSoftkeyFunction(void (*f)(void),MMI_key_event_type k);
extern byte multiline_inputbox_empty(void);
extern void wgui_handle_inputbox_right_softkey_up(void);
extern void wgui_redraw_input_information_bar(void);
extern U16 StartMyTimerInt(U16 nTimerId,U32 nTimeDuration,oslTimerFuncPtr TimerExpiryFunction, U8 alignment);
extern void pixtel_UI_set_single_line_input_box_theme(single_line_input_box *b,UI_single_line_input_box_theme *t);
extern void pixtel_UI_single_line_input_box_delete_all(single_line_input_box *b);
extern void wgui_redraw_remaining_characters_display(void);
//PMT Dara Added on 7/12/04...to disable EMS support for NEPTUNE
#if !defined(MMI_LOW_MEMORY_PHONE)||defined(__MMI_MESSAGES_EMS__)
extern void show_EMS_inputbox(void);
extern void pixtel_UI_EMS_input_box_next(UI_EMS_input_box *b);
extern void pixtel_UI_EMS_input_box_previous(UI_EMS_input_box *b);
extern void wgui_EMS_redraw_remaining_characters_display(void);
extern void pixtel_UI_EMS_input_box_delete_all(UI_EMS_input_box *b);
extern void pixtel_UI_EMS_input_box_previous(UI_EMS_input_box *b);
extern void pixtel_UI_EMS_input_box_next(UI_EMS_input_box *b);
extern byte pixtel_UI_EMS_input_box_get_next_object(EMSData *data,EMSPosition *current_position,UI_character_type *c,EMSObject **o);
extern byte pixtel_UI_EMS_input_box_get_previous_object(EMSData *data,EMSPosition *current_position,UI_character_type *c,EMSObject **o);
extern EMSTATUS EMSSetDCS(EMSData *emsData, kal_uint8 dcs);
extern s32 pixtel_UI_EMS_input_box_highlight_cursor_number(UI_EMS_input_box *b, s32 numOfChar );
#endif
//PMT End
#if !defined(MMI_LOW_MEMORY_PHONE)
extern void EntrySymbolPickerScreen(void);
#else
extern void EntrySymbolPickerScreenForCurrentEMSScreen(void);
extern void EntrySymbolPickerScreenForCurrentGeneralScreen(void);
#endif
extern void handle_category28_right_softkey_up(void);
extern void wgui_register_inputbox_handle_right_softkey_up(void);
extern void register_category28_handle_right_softkey_up(void);
extern void (*pixtel_UI_start_timer)(s32 count,void (*callback)(void));
extern S8 *UCS2Strcpy(S8 *strDestination, const S8 *strSource );
extern void pixtel_UI_multi_line_input_box_delete_all(multi_line_input_box *b);
extern void (*hide_multitap)(void);
extern s32 pixtel_UI_multi_line_input_box_highlight_cursor_number(multi_line_input_box *b,s32 n);
extern void show_softkey_background(void);
extern void (*RedrawSpellingOrCandidateBoxesFunction)(void);
extern void pixtel_UI_show_fixed_list_menu(fixed_list_menu *m);
extern void (*wgui_inline_edit_DONE_function)(void);
extern void wgui_register_inputbox_handle_clear_key_up(void);
extern void register_category28_handle_clear_key_up(void);
//PMT dara added on 15jan2005
#if defined(__MMI_INSCREEN_MULTILINE_TEXTBOX__)
extern void multiline_inscreen_inputbox_previous_line(void);
extern void multiline_inscreen_inputbox_next_line(void);
#endif
//PMT end
extern U8 get_menu_item_height(void);
extern void EntryInLineMultilineEditorOption(void);
extern void (*multiline_inputbox_input_callback)(void);
/*------------------------------------------------------------------------
*
* external global data
*
*------------------------------------------------------------------------*/
//PMT dara Added on 8/12/04
#ifdef MONO_LCD
#define MMI_multiline_inputbox MMI_multiline_dailer_inputbox_union.MMI_multiline_inputbox
#else
#ifndef NEPTUNE_COLOR
extern multi_line_input_box MMI_multiline_inputbox;
#else
#define MMI_multiline_inputbox MMI_multiline_dailer_inputbox_union.MMI_multiline_inputbox
#endif
#endif
//PMT end
extern UI_string_type MMI_title_string;
//PMT Dara Added on 7/12/04...to disable EMS support for NEPTUNE
#ifndef MONO_LCD
#ifndef NEPTUNE_COLOR
extern UI_single_line_input_box_theme MMI_singleline_inputbox_theme;
#endif
#endif
//PMT end
extern byte wgui_inputbox_RSK_label_clear;
extern byte wgui_inputbox_information_flag;
//PMT Dara Added on 7/12/04...to disable EMS support for NEPTUNE
#if !defined(MMI_LOW_MEMORY_PHONE)||defined(__MMI_MESSAGES_EMS__)
extern UI_EMS_input_box MMI_EMS_inputbox;
extern EMSTextFormat wgui_EMS_text_format;
#endif
//PMT end
extern byte category28_RSK_label_clear;
extern s32 MMI_multitap_x;
extern s32 MMI_multitap_y;
extern s32 MMI_multitap_width;
extern s32 MMI_multitap_height;
extern byte inline_full_screen_edit_changed;
extern byte wgui_inline_list_menu_disable_done;
extern s32 MMI_multiline_inputbox_x;
extern s32 MMI_multiline_inputbox_y;
extern s32 MMI_multiline_inputbox_width;
extern s32 MMI_multiline_inputbox_height;
extern s32 UI_device_width;
extern s32 UI_device_height;
extern s32 MMI_title_height;
extern s32 MMI_button_bar_height;
//MTK Terry inline_multiline RSK
extern s8 hilited_item_changed;
extern s8 MMI_multi_line_inputbox_present;
extern byte wgui_inputbox_information_flag;
extern s32 wgui_inputbox_information_bar_height;
#if !defined(MMI_LOW_MEMORY_PHONE)
extern s16 MMI_current_input_ext_type;
#endif
extern icontext_button MMI_softkeys[];
//PMT SHARIQ START
extern U8 processUpRepeatKey;
//PMT SHARIQ END
/*------------------------------------------------------------------------
*
* Global data
*
*------------------------------------------------------------------------*/
#if defined(__MMI_T9_V7__)
__align(4) T9CCAWFieldInfo FieldInfo;
extern T9STATUS T9FARCALL T9LoadChnLdb(T9CCFieldInfo *pCCFieldInfo, T9ChineseData T9FARDATA *pT9CCLdbHeader);
extern T9UINT T9ReadLdbData(T9FieldInfo *pFieldInfo, T9U32 dwOffset, T9U8 *pbDst, T9UINT nSize);
#else
__align(4) T9FieldInfo FieldInfo;
__align(4) T9AuxChineseInfo t9AuxChinese;
__align(4) T9U8 t9KeyBuf[T9_KEY_BUFFER_SIZE];
__align(4) T9U16 t9SelectPage[T9_MAX_SELECTION_BUFFER_SIZE];
__align(4) T9U8 t9AuxSelectBuf[T9_MAX_SELECTION_BUFFER_SIZE];
__align(4) T9U8 t9SpellBuf[T9SPELLBUFSIZE];
__align(4) T9Event t9event;
extern T9NUM FARCALL T9ReadLdbData(T9FieldInfo *, T9U32, T9U8 *, T9NUM);
#endif
__align(4) T9SYMB t9TxtBuf[(CHINESE_BUFFER_LENGTH)];
__align(4) T9AuxType t9AuxBuf[(CHINESE_BUFFER_LENGTH)];
T9U8 cursorTextWindow = 0;
T9U8 cursorSelectWindow = 1;
T9U8 cursorSymbolWindow = 1;
T9U8 cursorEnSymbolWindow = 1;
T9U16 curLSKStingId, curLSKIconId, curRSKStingId, curRSKIconId;
void (*curLSKFunction)(void)=NULL;
void (*curRSKFunction)(void)=NULL;
T9U8 numberMode = 0;
T9U16 curInputMethod = 888;
TIMER gpTimer;
T9U8 selectedCharIndex = 0;
T9U8 selectedSymbolPageIndex = 0;
T9U8 selectedEnSymbolPageIndex = 0;
T9U8 selectedSymbolIndex = 0;
T9U8 selectedEnSymbolIndex = 0;
unsigned int gTonePos = -1;
int gToneValue = -1;
single_line_input_box t9CompositionArea;
single_line_input_box t9SelectionArea;
T9SYMB *psBufferT1;
T9SYMB *psBufferT2;
T9U8 screenState = T9_SCREEN_STATE_A;
T9U8 continueSelectFlag = FALSE;
T9MINOR curPressKey;
T9U32 spellLength = 0;
T9U16 inputMethodFlag;
T9U32 t9InputboxFrameCounter = 0;
//PMT Dara Added on 7/12/04...to disable EMS support for NEPTUNE
#if !defined(MMI_LOW_MEMORY_PHONE)||defined(__MMI_MESSAGES_EMS__)
T9U32 t9InputboxFrameCounterForEMSInputBox = 0;
EMSTextFormat t9KeepEMSTextFormat;
#endif
//PMT end
void (*t9_inputbox_LSK_function)(void)=NULL;
T9U8 t9FrameTimerStart;
T9U32 t9EditorHeight;
static UI_string_type temp_left_softkey_text;
const KeyPad2T9Key keypad2T9KeyMap_English[] = {
{KEY_0, T9KEYAMBIGA},
{KEY_1, T9KEYAMBIG1},
{KEY_2, T9KEYAMBIG2},
{KEY_3, T9KEYAMBIG3},
{KEY_4, T9KEYAMBIG4},
{KEY_5, T9KEYAMBIG5},
{KEY_6, T9KEYAMBIG6},
{KEY_7, T9KEYAMBIG7},
{KEY_8, T9KEYAMBIG8},
{KEY_9, T9KEYAMBIG9},
{KEY_UP_ARROW, T9KEYPREV},
{KEY_DOWN_ARROW, T9KEYNEXT},
{KEY_LEFT_ARROW, T9KEYLEFT},
{KEY_RIGHT_ARROW, T9KEYRIGHT},
{KEY_RSK, T9KEYCLEAR},
{MAX_KEYS,T9KEYNONE}
};
// PMT dara for T9 thai
#ifdef __MMI_T9_THAI__
#ifdef T9LANG_Thai
const KeyPad2T9Key keypad2T9KeyMap_Thai[] = {
{KEY_0, T9KEYAMBIGA},
{KEY_1, T9KEYAMBIG1},
{KEY_2, T9KEYAMBIG2},
{KEY_3, T9KEYAMBIG3},
{KEY_4, T9KEYAMBIG4},
{KEY_5, T9KEYAMBIG5},
{KEY_6, T9KEYAMBIG6},
{KEY_7, T9KEYAMBIG7},
{KEY_8, T9KEYAMBIG8},
{KEY_9, T9KEYAMBIG9},
{KEY_STAR, T9KEYAMBIGB},
{KEY_POUND, T9KEYAMBIGC},
{KEY_UP_ARROW, T9KEYPREV},
{KEY_DOWN_ARROW, T9KEYNEXT},
{KEY_LEFT_ARROW, T9KEYLEFT},
{KEY_RIGHT_ARROW, T9KEYRIGHT},
{KEY_RSK, T9KEYCLEAR},
{MAX_KEYS,T9KEYNONE}
};
#endif
#endif
#if !defined(__MMI_T9_DEFAULT_KEY_DEFINITION__)
const KeyPad2T9Key keypad2T9KeyMap_TrChinese[] = {
{KEY_0, T9KEYAMBIGA},
{KEY_1, T9KEYAMBIG1},
{KEY_2, T9KEYAMBIG2},
{KEY_3, T9KEYAMBIG3},
{KEY_4, T9KEYAMBIG4},
{KEY_5, T9KEYAMBIG5},
{KEY_6, T9KEYAMBIG6},
{KEY_7, T9KEYAMBIG7},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -