FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiCalculatorMain.c @ 75:8697f358f505
backlight rework: Condat light driver accepts levels
The present change is another intermediate step on the path toward
new FreeCalypso backlight handling. At this intermediate step the
Condat light driver accepts 0-255 backlight levels driven by MFW,
and puts them out on PWL on Luna development boards. At the same
time on C139 it is now possible to turn on the display backlight
with or without the keypad bl - the lsb of the 0-255 backlight level
controls the keypad bl.
MFW presently drives only 0 and 255 backlight levels, thus there is
no visible behavioral change yet - but the plan for subsequent stages
of this backlight rework is to add a dimmed backlight state
(no keypad bl on C139) during active calls.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 24 Oct 2020 20:44:04 +0000 |
parents | 67bfe9f274f6 |
children | c0052fe355d3 |
line wrap: on
line source
/******************************************************************************* 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 (6349) $Module: Calculator $File: MmiCalculatorMain.c $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description This provides the main calculator functionality ******************************************************************************** $History: MmiCalculatorMain.c 25/10/00 Original Condat(UK) BMI version. xrashmic 20 Oct, 2005 MMI-SPR-33845 To display BACK softkey when no more character are left in the calulator editor Oct 20, 2004 REF: CRR 25755 xnkulkar Description: calculator -divide by zero operation is allowed. Fix: Display "Not Allowed" message when user tries to divide a number by 0 and do not perform the division. Also, show the editor again so that user can enter a number other than 0. $End *******************************************************************************/ #define MAX_CALC_TOTAL 999999999 #define MIN_CALC_TOTAL -99999999 /****************************************************************************** Include Files *******************************************************************************/ #define ENTITY_MFW /* includes */ #include <string.h> #include <stdio.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 "message.h" #include "prim.h" #include "aci_cmh.h" #include "mfw_mfw.h" #include "mfw_win.h" /* SPR#1428 - SH - New Editor changes */ #ifndef NEW_EDITOR #include "mfw_edt.h" #endif #include "mfw_tim.h" #include "mfw_phb.h" #include "ksd.h" #include "psa.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_sms.h" #include "dspl.h" #include "MmiMmi.h" #include "MmiDummy.h" #include "MmiDialogs.h" #include "MmiLists.h" #include "MmiIdle.h" #include "MmiSoftKeys.h" #include "Mmiicons.h" #include "MmiMenu.h" #include "MmiMain.h" #include "MmiStart.h" #include "MmiPins.h" #include "MmiSettings.h" /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR #include "ATBCommon.h" #include "ATBDisplay.h" #include "ATBEditor.h" #include "AUIEditor.h" #include "AUICalcEditor.h" #else #include "MmiEditor.h" #endif #include "MmiBookShared.h" #include "mmiSmsMenu.h" #include "MmiCalculatorMain.h" #include "mmiColours.h" #include "cus_aci.h" #include "pcm.h" /******************************************************************************* Function Prototypes *******************************************************************************/ static T_MFW_HND calc_create(MfwHnd parent_window); void calc_destroy(MfwHnd own_window); static void calcGetNumberCB( T_MFW_HND win, USHORT Identifier, SHORT reason ); static void calcGetOperandCB( T_MFW_HND win, USHORT Identifier, SHORT reason ); static void calc_DialogCB( T_MFW_HND win, USHORT event, SHORT identifier, void *parameter); T_MFW_HND calc_start(T_MFW_HND parent_window); double calcGetRunningTotal(void); char operatorSymbol(UBYTE operator); static void calc_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason); /******************************************************************************* Static Global Variable(s) *******************************************************************************/ static double running_total; static T_MFW_HND calculator_win = NULL; // Oct 20, 2004 REF: CRR 25755 xnkulkar // Added this flag to detect 'divide by zero' operation BOOL divideByZero = FALSE; /******************************************************************************* Public Functions *******************************************************************************/ /******************************************************************************* $Function: calculator $Description: Starts the calculator function on user selection $Returns: MFW_EVENT_CONSUMED if event handled, otherwise MFW_EVENT_PASSED $Arguments: menu, menu item *******************************************************************************/ int calculator(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND parent = mfwParent( mfw_header()); TRACE_FUNCTION("calculator()"); calc_start(parent); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: calcPlus $Description: Handles the selction of the "Plus" option in the calculator menu $Returns: MFW_EVENT_CONSUMED if event handled, otherwise MFW_EVENT_PASSED $Arguments: menu, menu item *******************************************************************************/ int calcPlus(MfwMnu* m, MfwMnuItem* i) { T_MFW_WIN* win_data; tCalcData* data; TRACE_FUNCTION("calcPlus()"); //if new window successfully created if (calculator_win NEQ NULL) { win_data = ( (T_MFW_HDR *) calculator_win )->data; data = (tCalcData*)win_data->user; data->operation = PLUS;//set the arithmetic operation SEND_EVENT (calculator_win, CALC_ENTER_OPERAND, 0, 0); } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: calcMinus $Description: Handles the selection of the "Minus" option in the calculator menu $Returns: MFW_EVENT_CONSUMED if event handled, otherwise MFW_EVENT_PASSED $Arguments: menu, menu item *******************************************************************************/ int calcMinus(MfwMnu* m, MfwMnuItem* i) { T_MFW_WIN* win_data; tCalcData* data; //if new window successfully created TRACE_FUNCTION("calcMinus()"); if (calculator_win NEQ NULL) { win_data = ( (T_MFW_HDR *) calculator_win )->data; data = (tCalcData*)win_data->user; data->operation = MINUS;//set the arithmetic operation SEND_EVENT (calculator_win, CALC_ENTER_OPERAND, 0, 0); } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: calcDivide $Description: Handles the selection of the "Divide" option in the calculator menu $Returns: MFW_EVENT_CONSUMED if event handled, otherwise MFW_EVENT_PASSED $Arguments: menu, menu item *******************************************************************************/ int calcDivide(MfwMnu* m, MfwMnuItem* i) { T_MFW_WIN* win_data; tCalcData* data; TRACE_FUNCTION("calcDivide()"); //if new window successfully created if (calculator_win NEQ NULL) { win_data = ( (T_MFW_HDR *) calculator_win )->data; data = (tCalcData*)win_data->user; data->operation = DIVIDE;//set the arithmetic operation SEND_EVENT (calculator_win, CALC_ENTER_OPERAND, 0, 0); } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: calcMultiply $Description: Handles the selection of the "Multiply" option in the calculator menu $Returns: MFW_EVENT_CONSUMED if event handled, otherwise MFW_EVENT_PASSED $Arguments: menu, menu item *******************************************************************************/ int calcMultiply(MfwMnu* m, MfwMnuItem* i) { T_MFW_WIN* win_data; tCalcData* data; TRACE_FUNCTION("calcMultiply()"); //if new window successfully created if (calculator_win NEQ NULL) { win_data = ( (T_MFW_HDR *) calculator_win )->data; data = (tCalcData*)win_data->user; data->operation = MULTIPLY;//set the arithmetic operation SEND_EVENT (calculator_win, CALC_ENTER_OPERAND, 0, 0); } return MFW_EVENT_CONSUMED; } // Oct 20, 2004 REF: CRR 25755 xnkulkar /******************************************************************************* $Function: info_screen_cb $Description: Callback function for info screen $Returns: nothing $Arguments: Parent Window handle, identifier and reason *******************************************************************************/ static void info_screen_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) { // Send CALC_ENTER_OPERAND event tp prompt the user to enter the operand again SEND_EVENT (calculator_win, CALC_ENTER_OPERAND, 0, 0); } /******************************************************************************* $Function: calcEquals $Description: Handles the selection of the "Equals" option in the calculator menu $Returns: MFW_EVENT_CONSUMED if event handled, otherwise MFW_EVENT_PASSED $Arguments: menu, menu item *******************************************************************************/ int calcEquals(MfwMnu* m, MfwMnuItem* i) { TRACE_FUNCTION("calcEquals()"); // Oct 20, 2004 REF: CRR 25755 xnkulkar // if 'divide by zero' operation is attempted if(divideByZero == TRUE) { divideByZero = FALSE; // disable the flag info_screen(0, TxtNotAllowed, TxtNull,(T_VOID_FUNC) info_screen_cb); // display "Not Allowed" message return MFW_EVENT_CONSUMED; // consume the event } if (calculator_win NEQ NULL) { SEND_EVENT (calculator_win, CALC_DISPLAY_RESULT, 0, 0); } return MFW_EVENT_CONSUMED; } /******************************************************************************* Private Functions *******************************************************************************/ /******************************************************************************* $Function: calcGetRunningTotal $Description: If the calculator's running total value ever needs to be accessed by code in another file, then this function ought to be made public to prevent to allow safe access; $Returns: Calculator's running total (double) $Arguments: none *******************************************************************************/ double calcGetRunningTotal(void) { TRACE_FUNCTION("calcGetRunningTotal()"); return running_total; } /******************************************************************************* $Function: operatorSymbol $Description: returns character corresponding to arithmetic operation $Returns: Operator character $Arguments: Operator enum *******************************************************************************/ char operatorSymbol(UBYTE operator) { TRACE_FUNCTION("operatorSymbol()"); switch (operator) { case (PLUS): return '+'; // break; // RAVI case (MINUS): return '-'; // break; // RAVI case (MULTIPLY): return '*'; // break; // RAVI case (DIVIDE): return '/'; // break; // RAVI default: return '\0'; // break; // RAVI } } /******************************************************************************* $Function: calc_start $Description: Creates the calculator window and calls for it to be initialised $Returns: Window $Arguments: Parent Window *******************************************************************************/ T_MFW_HND calc_start(T_MFW_HND parent_window) { T_MFW_HND win = calc_create(parent_window); TRACE_FUNCTION("calc_start()"); if (win NEQ NULL) { SEND_EVENT (win, CALC_INIT, 0, 0); } return win; } /******************************************************************************* $Function: calc_create $Description: Creates the calculator window and connect the dialog data to it $Returns: Window $Arguments: Parent Window *******************************************************************************/ static T_MFW_HND calc_create(MfwHnd parent_window) { tCalcData * data = (tCalcData *)ALLOC_MEMORY (sizeof (tCalcData )); T_MFW_WIN * win; TRACE_FUNCTION("calc_create()"); if (data EQ NULL) { return NULL; } // Create window handler data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL); if (data->win EQ NULL) { return NULL; } // connect the dialog data to the MFW-window data->mmi_control.dialog = (T_DIALOG_FUNC)calc_DialogCB; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; data->parent_win = parent_window; calculator_win = data->win; return data->win; } /******************************************************************************* $Function: calc_DialogCB $Description: Callback function for the calculator window $Returns: nothing $Arguments: Window, event, identifier (not used), parameter (not used) *******************************************************************************/ static void calc_DialogCB(T_MFW_HND win, USHORT e, SHORT identifier, void *parameter) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tCalcData* data = (tCalcData *) win_data->user; char display_buffer[28] = ""; #ifdef NEW_EDITOR // T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ // RAVI #else // T_EDITOR_DATA editor_data; // RAVI #endif char* running_total_out; // char debug_buffer[50]; // RAVI TRACE_FUNCTION("calc_DialogCB()"); switch( e ) { //when window first created case CALC_INIT: { //set running total to 0 and display in editor TRACE_EVENT("CALC-INIT-JGG"); running_total = 0; data->menu_options_win = NULL; /* SPR#1428 - SH - New editor: calc starts with 0 */ #ifdef NEW_EDITOR sprintf(data->buffer, "%s", "0"); /* SH - calc starts off with '0'*/ #else sprintf(data->buffer, "%s", ""); /* SH - calc starts off with nothing*/ #endif calcSetEditor(win);//set editor with default attribute values /* SPR#1428 - SH - New Editor changes: use calc editor */ #ifdef NEW_EDITOR AUI_edit_SetEvents(&data->editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)calcGetNumberCB); data->editor_win = AUI_calc_Start(win, &data->editor_data); #else /* NEW_EDITOR */ data->editor_data.Callback = (T_EDIT_CB)calcGetNumberCB; data->editor_win = editor_start(win, &(data->editor_data)); /* start the editor */ #endif /* NEW_EDITOR */ winShow(data->win); } break; //when an arithmetic operator has been selected from the calc menu case CALC_ENTER_OPERAND: { TRACE_EVENT("CALC_ENTER_OPERAND"); /* This memory alloc seems to fix a problem where running_total_out * would become an empty string after sevaral running calculations */ running_total_out = (char*)ALLOC_MEMORY(22*sizeof(char)); /* SH - change malloc to ALLOC_MEMORY */ running_total_out[0] = '\0'; /* Display the first operand and the operator symbol * above the operand to be entered */ if ( (long)calcGetRunningTotal() == calcGetRunningTotal()) sprintf((char*)running_total_out, "%d", (long)calcGetRunningTotal()); else sprintf((char*)running_total_out, "%f", calcGetRunningTotal()); if (running_total_out[8] == '.') running_total_out[8] = '\0'; else running_total_out[9] = '\0'; sprintf((char*)display_buffer,"%s %c", running_total_out, operatorSymbol(data->operation)); FREE_MEMORY((void*)running_total_out, 22*sizeof(char)); /* SH - change free to FREE_MEMORY */ /* SPR#1428 - SH - Calc now starts off with '0' */ #ifdef NEW_EDITOR sprintf(data->buffer, "%s", "0"); /* SH - calc starts off with '0'*/ #else sprintf(data->buffer, "%s", ""); /* SH - calc starts off with nothing*/ #endif calcSetEditor(win); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_SetEvents(&data->editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)calcGetOperandCB); AUI_edit_SetTextStr(&data->editor_data, TxtSoftOptions, TxtDelete, TxtCalculator, (UBYTE *)display_buffer); AUI_edit_SetAltTextStr(&data->editor_data, 1, TxtSoftOptions, TRUE, TxtSoftBack);//x0035544 17-11-2005 data->input_number_win = AUI_calc_Start(win, &data->editor_data); #else /* NEW_EDITOR */ data->editor_data.TextString = display_buffer; data->editor_data.editor_attr.win.px = 0; data->editor_data.editor_attr.win.py = Mmi_layout_line(3); //30 data->editor_data.editor_attr.win.sx = SCREEN_SIZE_X; data->editor_data.editor_attr.win.sy = numberLineHeight()+2; data->editor_data.Callback = (T_EDIT_CB)calcGetOperandCB; data->input_number_win = editor_start(win, &(data->editor_data)); /* start the editor */ #endif /* NEW_EDITOR */ winShow(data->win); /* Marcus: Issue 1039: 05/09/2002: Start */ if (data->menu_options_win != NULL) { bookMenuDestroy( data->menu_options_win ); data->menu_options_win = NULL; } /* Marcus: Issue 1039: 05/09/2002: End */ } break; //when "Equals" selected from calc menu case CALC_DISPLAY_RESULT: { //if running total out of display range, set it to 0 if ((calcGetRunningTotal() > MAX_CALC_TOTAL) || (calcGetRunningTotal() < MIN_CALC_TOTAL)) running_total =0; //Convert running total double to string //if integer total, don't display any decimal places if ( (long)calcGetRunningTotal() == calcGetRunningTotal()) sprintf(data->buffer, "%d", (long) calcGetRunningTotal()); else //if a floating-point total, display as many decimal places as will fit sprintf(data->buffer, "%f", (double) calcGetRunningTotal()); //if last number in display is a decimal point if (data->buffer[8] == '.') data->buffer[8] = '\0';//remove it data->buffer[9] = '\0'; //ensure string is properly terminated //ensure string is no longer than 9 chars calcSetEditor(win); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_SetEvents(&data->editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)calcGetNumberCB); AUI_calc_Start(win, &data->editor_data); #else /* NEW_EDITOR */ data->editor_data.Callback = (T_EDIT_CB)calcGetNumberCB; editor_start(win, &(data->editor_data)); /* start the editor */ #endif /* NEW_EDITOR */ /* Marcus: Issue 1039: 05/09/2002: Start */ if (data->menu_options_win != NULL) { bookMenuDestroy( data->menu_options_win ); data->menu_options_win = NULL; } /* Marcus: Issue 1039: 05/09/2002: End */ winShow(data->win); } break; default: { TRACE_EVENT("calc_DialogCB(): Unknown Event"); } break; } } /******************************************************************************* $Function: calcGetNumberCB $Description: Callback function for the editor window $Returns: nothing $Arguments: Window, identifier (not used), reason (not used) *******************************************************************************/ static void calcGetNumberCB( T_MFW_HND win, USHORT Identifier, SHORT reason) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tCalcData *data = (tCalcData *) win_data->user; float after_decimal = 0; int digits_after_point = 0; int i; char* end; // char debug[40]; // RAVI TRACE_FUNCTION("calcGetNumberCB()"); switch (reason ) { case INFO_KCD_LEFT: { TRACE_EVENT("Left button pressed in calculator"); //get the number entered before the decimal point running_total = strtol(data->buffer, &end, 10); if (strlen(end) != 0) { //if decimal point entered if ((end[0] == '.') && isdigit(end[1]))//get number after decimal point { end++; digits_after_point = strlen(end); after_decimal = strtol(end, &end, 10); } //convert number after decimal point to it's actual fractional value for (i=0; i < digits_after_point; i++) after_decimal = after_decimal/10; //add whole number and fraction together running_total = running_total + after_decimal; } if (data->menu_options_win != NULL) bookMenuDestroy( data->menu_options_win ); //start the calculator option menu and kill this window data->menu_options_win = bookMenuStart( data->win, calcOptionMenuAttributes(),0); SEND_EVENT(data->menu_options_win, ADD_CALLBACK, NULL, (void *)calc_menu_cb); } break; case INFO_KCD_HUP: case INFO_KCD_RIGHT: { TRACE_EVENT("Right button pressed in calculator"); calc_destroy(win); } break; default: { /* otherwise no action to be performed */ /*calc_destroy(win); */ /*SH - do not destroy calc for other key */ break; } } } /******************************************************************************* $Function: calcGetOperandCB $Description: Callback function for the editor window, when second number in operation is entered. $Returns: nothing $Arguments: Window, identifier (not used), reason (not used) *******************************************************************************/ static void calcGetOperandCB( T_MFW_HND win, USHORT Identifier, SHORT reason) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tCalcData *data = (tCalcData *) win_data->user; // char* buffer; // RAVI float operand = 0; float after_decimal = 0; int digits_after_point = 0; int i; char* end; char debug[40]; TRACE_FUNCTION("calcGetOperandCB()"); TRACE_EVENT_P2("ID, reason: %d, %d", Identifier, reason); switch (reason ) { case INFO_KCD_LEFT: /* SPR#1428 - SH - New Editor: Can use '*' or centre button as 'equals', to show result */ #ifdef NEW_EDITOR #ifdef COLOURDISPLAY case INFO_KCD_SELECT: #endif /* COLOURDISPLAY */ case INFO_KCD_STAR: #endif /* NEW_EDITOR */ { //Get whole number before decimal point operand = strtol(data->buffer, &end, 10); //if buffer not pointing at an empty string now if (strlen(end) != 0) { //if decimal point entered if ((end[0] == '.') && isdigit(end[1]))//get number after decimal point { end++; digits_after_point = strlen(end); after_decimal = strtol(end, &end, 10); sprintf(debug,"Digits after decimal: %f.", after_decimal); } //convert number after decimal point to an appropriate fraction for (i=0; i < digits_after_point; i++) after_decimal = after_decimal/10; //add whole and fraction together operand = operand + after_decimal; } //perform the arithmetic function requested switch (data->operation) { case PLUS: running_total = running_total + operand; break; case MINUS: running_total = running_total - operand;break; case MULTIPLY: running_total = running_total * operand;break; case DIVIDE: // Oct 20, 2004 REF: CRR 25755 xnkulkar // if the attempted division is by zero if(operand == 0) { divideByZero = TRUE; // enable the flag } else // else perform the division operation { running_total = running_total / operand; } break; default: TRACE_EVENT("Unknown calc operation"); break; } /* SPR#1428 - SH - New Editor: Can use '*' as 'equals', to show result */ #ifdef NEW_EDITOR #ifdef COLOURDISPLAY if (reason==INFO_KCD_STAR || reason==INFO_KCD_SELECT) #else /* COLOURDISPLAY */ if (reason==INFO_KCD_STAR) #endif /* COLOURDISPLAY */ { TRACE_EVENT("Star key - show result"); /* Star didn't destroy window automatically, do it here */ if (data->menu_options_win != NULL) { bookMenuDestroy( data->menu_options_win ); data->menu_options_win = NULL; } if (data->input_number_win) { AUI_calc_Destroy(data->input_number_win); data->input_number_win = NULL; } SEND_EVENT(data->win, CALC_DISPLAY_RESULT, 0, 0); } else #endif /* NEW_EDITOR */ { //Show option menu if (data->menu_options_win != NULL) bookMenuDestroy( data->menu_options_win ); data->menu_options_win = bookMenuStart( data->win, calcOptionMenuAttributes(),0); } } break; case INFO_KCD_HUP: case INFO_KCD_RIGHT: { TRACE_EVENT("Right button pressed in calculator"); calc_destroy(win); } break; default: { /* otherwise no action to be performed */ break; } } } static void calc_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) parent_win )->data; tCalcData* data = (tCalcData *) win_data->user; TRACE_FUNCTION("calc_menu_cb()"); //set menu window to NULL to prevent any dealloc problems data->menu_options_win = NULL; calc_destroy(parent_win); } /******************************************************************************* $Function: calcSetEditor $Description: Sets the editor attributes to defaults for the calculator module $Returns: nothing $Arguments: Window *******************************************************************************/ void calcSetEditor(T_MFW_HND win) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tCalcData* data = (tCalcData *) win_data->user; TRACE_FUNCTION("calcSetEditor()"); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR { AUI_edit_SetDefault(&data->editor_data); AUI_edit_SetDisplay(&data->editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT); AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE *)data->buffer, 10); AUI_edit_SetMode(&data->editor_data, 0, ED_CURSOR_NONE); AUI_edit_SetEvents(&data->editor_data, 0, TRUE, FOREVER, NULL); AUI_edit_SetTextStr(&data->editor_data, TxtSoftOptions, TxtDelete, TxtCalculator, NULL); //xrashmic 20 Oct, 2005 MMI-SPR-33845 //Editor always starts with min one character "0" and //alterRight softkey is set to "BACK" here. data->editor_data.min_enter=1; data->editor_data.AltRightSoftKey=TxtSoftBack ; AUI_edit_SetFormatAttr(&data->editor_data, DS_ALIGN_RIGHT); } #else /* NEW_EDITOR */ editor_attr_init(&((data->editor_data).editor_attr), 0, edtCurBar1, 0, data->buffer, 10, COLOUR_EDITOR); editor_data_init( &data->editor_data, NULL, TxtSoftOptions, TxtDelete, NULL, 1, CALC_MODE, FOREVER); data->editor_data.hide = FALSE; data->editor_data.Identifier = 0xFFFF ; data->editor_data.destroyEditor = TRUE; #endif /* NEW_EDITOR */ return; } /******************************************************************************* $Function: calc_destroy $Description: Destroys the calculator editor window and frees up memory $Returns: nothing $Arguments: Window *******************************************************************************/ void calc_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; tCalcData * data = NULL; TRACE_EVENT ("calc_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; if (win_data != NULL) //PATCH TB data = (tCalcData *)win_data->user; if (data) { win_delete (data->win); /* Marcus: Issue 1039: 05/09/2002: Start */ if (data->menu_options_win != NULL) { bookMenuDestroy( data->menu_options_win ); data->menu_options_win = NULL; } /* Marcus: Issue 1039: 05/09/2002: End */ // Free Memory FREE_MEMORY ((void *)data, sizeof (tCalcData)); } else { TRACE_EVENT ("calc_destroy() called twice"); } } }