diff g23m/condat/ms/src/bmi/MmiSoftKeys.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/MmiSoftKeys.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,593 @@
+/*******************************************************************************
+
+					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:		Softkeys
+ $File:		    MmiSoftkeys.c
+ $Revision:		1.0                                                       
+                                                                              
+ $Author:		Condat(UK)                                                         
+ $Date:		    22/02/01                                                      
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+
+  
+
+********************************************************************************
+
+ $History:
+
+       xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357
+       To display '?' to indicate to the user that help is available for a STK menu
+
+	25/10/00			Original Condat(UK) BMI version.	
+	   
+ $End
+
+*******************************************************************************/
+
+
+/*******************************************************************************
+                                                                              
+                                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 "mfw_sys.h"
+#include "prim.h"
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+#include "mfw_lng.h"
+#include "mfw_phb.h"
+#include "mfw_nm.h"
+#include "dspl.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+
+#include "MmiMmi.h"
+#include "MmiMain.h"
+
+#include "MmiUserData.h"
+#include "MmiSoftKeys.h"
+#include "MmiResources.h"
+
+#include "mmiColours.h"
+
+typedef struct
+{
+    MfwHnd leftKeyHandler;
+    MfwHnd rightKeyHandler;
+
+    LangTxt leftKeyLabel;
+    LangTxt rightKeyLabel;
+} SoftKeysData, *SoftKeys;
+
+
+#ifdef LSCREEN
+#define HorizontalOffset 4
+#else
+#define HorizontalOffset 1
+#endif
+#define LeftMargin       (HorizontalOffset)
+#define RightMargin      (HorizontalOffset)
+
+#define ALLOC_MEMORY mfwAlloc
+#define FREE_MEMORY  mfwFree
+
+static U8    softKeyFont              = 0;
+static UBYTE softKeysDisplayAttibutes = DSPL_TXTATTR_NORMAL;
+
+
+/*
+ * Change the <font> and <displayAttibutes> for _all_ softkeys.
+ * All consecutive calls of softKeysUpdate() will reflect the change.
+ * Returns SOFTKEYS_CHANGED when everything went fine,
+ * or SOFTKEYS_FAILURE on failure.
+ */
+SoftKeysResult softKeysAttributes( U8 font, UBYTE displayAttibutes)
+{
+    if( font == (U8)-1 )
+    {
+        return SOFTKEYS_FAILURE;
+    }
+
+    softKeyFont              = font;
+    softKeysDisplayAttibutes = displayAttibutes;
+
+    return SOFTKEYS_CHANGED;
+}
+
+
+/*
+ * Creates the softkeys for <window>, which will display the
+ * <leftKeyLabel> and <rightKeyLabel> in the softkey area
+ * on the screen, and invoke <leftKeyCallBack> or <rightKeyCallBack>
+ * when the approrpiate key is pressed. Returns SOFTKEYS_CREATED when
+ * everything went fine, or SOFTKEYS_FAILURE on failure.
+ */
+SoftKeysResult softKeysHndCreate( MfwHnd window, SoftKeysSetup *setup)
+{
+	if( window == NULL || setup == NULL )
+    {
+        return SOFTKEYS_FAILURE;
+    }
+
+	return softKeysWinCreate( (MfwWin *)((MfwHdr *)window)->data, setup);
+}
+
+
+SoftKeysResult softKeysWinCreate( MfwWin *window, SoftKeysSetup *setup)
+{
+    SoftKeys newKeys;
+
+    if( window == NULL || setup == NULL )
+    {
+        return SOFTKEYS_FAILURE;
+    }
+
+    newKeys = (SoftKeys)ALLOC_MEMORY(sizeof(SoftKeysData));
+
+    if( newKeys == NULL )
+    {
+        return SOFTKEYS_FAILURE;
+    }
+
+    if( userDataWinSet( window, UD_SOFTKEYS, (void *)newKeys) == NULL )
+    {
+        FREE_MEMORY( (void *)newKeys, sizeof(SoftKeysData));
+
+        return SOFTKEYS_FAILURE;
+    }
+
+    newKeys->leftKeyHandler  = kbdCreate( NULL, KEY_LEFT,
+                                          setup->leftKeyCallBack);
+    newKeys->rightKeyHandler = kbdCreate( NULL, KEY_RIGHT,
+                                          setup->rightKeyCallBack);
+
+    newKeys->leftKeyLabel    = setup->leftKeyLabel;
+    newKeys->rightKeyLabel   = setup->rightKeyLabel;
+
+    if( newKeys->leftKeyHandler == NULL || newKeys->rightKeyHandler == NULL )
+    {
+        kbdDelete(newKeys->leftKeyHandler);
+        kbdDelete(newKeys->rightKeyHandler);
+
+        userDataWinDelete( window, UD_SOFTKEYS);
+
+        FREE_MEMORY( (void *)newKeys, sizeof(SoftKeysData));
+
+        return SOFTKEYS_FAILURE;
+    }
+
+    return SOFTKEYS_CREATED;
+}
+
+
+/*
+ * Change the setup of the softkeys for <window>. Use TxtNull if you
+ * don't want to change a ...Label, and NULL if you don't want to change
+ * a ...CallBack. Returns SOFTKEYS_CHANGED when everything went fine,
+ * or SOFTKEYS_FAILURE on failure.
+ */
+SoftKeysResult softKeysHndSet( MfwHnd window, SoftKeysSetup *changes)
+{
+	if( window == NULL || changes == NULL )
+    {
+        return SOFTKEYS_FAILURE;
+    }
+
+	return softKeysWinSet( (MfwWin *)((MfwHdr *)window)->data, changes);
+}
+
+
+SoftKeysResult softKeysWinSet( MfwWin *window, SoftKeysSetup *changes)
+{
+    SoftKeys softKeys = (SoftKeys)userDataWinGet( window, UD_SOFTKEYS);
+
+    if( window == NULL || softKeys == NULL || changes == NULL )
+    {
+        return SOFTKEYS_FAILURE;
+    }
+
+    if( changes->leftKeyCallBack != NULL )
+    {
+        MfwHnd NewKeyHandler = kbdCreate( NULL, KEY_LEFT,
+                                          changes->leftKeyCallBack);
+
+        if( NewKeyHandler == NULL )
+        {
+            return SOFTKEYS_FAILURE;
+        }
+        else
+        {
+            kbdDelete(softKeys->leftKeyHandler);
+
+            softKeys->leftKeyHandler = NewKeyHandler;
+        }
+    }
+
+    if( changes->rightKeyCallBack != NULL )
+    {
+        MfwHnd NewKeyHandler = kbdCreate( NULL, KEY_LEFT,
+                                          changes->rightKeyCallBack);
+
+        if( NewKeyHandler == NULL )
+        {
+            return SOFTKEYS_FAILURE;
+        }
+        else
+        {
+            kbdDelete(softKeys->rightKeyHandler);
+
+            softKeys->rightKeyHandler = NewKeyHandler;
+        }
+    }
+
+    if( changes->leftKeyLabel != TxtNull )
+    {
+        softKeys->leftKeyLabel = changes->leftKeyLabel;
+    }
+
+    if( changes->rightKeyLabel != TxtNull )
+    {
+        softKeys->rightKeyLabel = changes->rightKeyLabel;
+    }
+
+    return SOFTKEYS_CHANGED;
+}
+
+
+/*
+ * You will need to call this whenever <window> is updated.
+ */
+void softKeysHndUpdate(MfwHnd window)
+{
+	if( window == NULL )
+    {
+        return;
+    }
+
+	softKeysWinUpdate((MfwWin *)((MfwHdr *)window)->data);
+}
+
+
+void softKeysWinUpdate(MfwWin *window)
+{
+    SoftKeys    softKeys     = (SoftKeys)userDataWinGet( window, UD_SOFTKEYS);
+    U8          oldFont      = dspl_SelectFontbyID(softKeyFont);
+
+    if( window == NULL || softKeys == NULL )
+    {
+        return;
+    }
+
+    PROMPT( LeftMargin,Mmi_layout_line(LAST_LINE_TOP), 0, softKeys->leftKeyLabel);
+
+    dspl_SelectFontbyID(oldFont);
+}
+
+
+/*
+ * Deletes the softkeys for <window>.
+ */
+void softkeysHndDelete(MfwHnd window)
+{
+	if( window == NULL )
+    {
+        return;
+    }
+
+	softkeysWinDelete((MfwWin *)((MfwHdr *)window)->data);
+}
+
+
+void softkeysWinDelete(MfwWin *window)
+{
+    SoftKeys softKeys = (SoftKeys)userDataWinDelete( window, UD_SOFTKEYS);
+
+    if( window == NULL || softKeys == NULL )
+    {
+        return;
+    }
+
+    kbdDelete(softKeys->leftKeyHandler);
+    kbdDelete(softKeys->rightKeyHandler);
+
+    FREE_MEMORY( (void *)softKeys, sizeof(SoftKeysData));
+}
+typedef struct {
+	char* str;
+	int posX;
+	int posY;
+} T_SK_DATA;
+typedef struct {
+	T_SK_DATA  lsk;
+	T_SK_DATA  rsk;
+	MfwRect*	rect;
+} T_SK_DSPL_STRUCT;
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+static void softKeys_displayAll(T_SK_DSPL_STRUCT* sk_data , int format, unsigned int colIndex )
+{
+	resources_setSKColour(colIndex);
+//	#ifdef COLOURDISPLAY	
+	dspl_Clear(	sk_data->rect->px,
+				sk_data->rect->py,
+				sk_data->rect->px+sk_data->rect->sx-1,
+				sk_data->rect->py+sk_data->rect->sy-1);
+	/* Line height must be less than rect.sy */	
+//	#endif
+	if (sk_data->lsk.str!= NULL)
+		dspl_TextOut(sk_data->lsk.posX, sk_data->lsk.posY,DSPL_TXTATTR_CURRENT_MODE, sk_data->lsk.str);
+	if (sk_data->rsk.str!= NULL)
+		dspl_TextOut(sk_data->rsk.posX, sk_data->rsk.posY,DSPL_TXTATTR_CURRENT_MODE, sk_data->rsk.str);
+	resources_restoreMnuColour();
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void softKeys_displayStrXY(char* leftSoftKey_str,char* rightSoftKey_str, int format, unsigned int colIndex, MfwRect* rect )
+{
+	MfwRect defRect;
+	
+	T_SK_DSPL_STRUCT sk_data;
+	sk_data.lsk.str = leftSoftKey_str;
+	sk_data.rsk.str = rightSoftKey_str;
+	if (rect != NULL)
+		sk_data.rect = rect;
+	else
+	{
+		Mmi_layout_softkeyArea( &defRect );	
+		sk_data.rect = &defRect;
+	}
+	sk_data.lsk.posY = sk_data.rect->py + (sk_data.rect->sy-Mmi_layout_line_height())/2;
+	sk_data.rsk.posY = sk_data.lsk.posY;
+	sk_data.lsk.posX = sk_data.rect->px+LeftMargin;
+	sk_data.rsk.posX = sk_data.rect->px+sk_data.rect->sx-RightMargin-dspl_GetTextExtent(sk_data.rsk.str, 0);
+
+	softKeys_displayAll( &sk_data , format, colIndex);
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void softKeys_displayStr(char* leftSoftKey_str,char* rightSoftKey_str, int format, int unsigned colIndex)
+{
+	softKeys_displayStrXY(leftSoftKey_str, rightSoftKey_str,format,colIndex, NULL);
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void softKeys_displayId(int leftSoftKey,int rightSoftKey, int format, unsigned int colIndex)
+{
+	char *lsk,*rsk;
+	lsk = MmiRsrcGetText(leftSoftKey);
+	rsk = MmiRsrcGetText(rightSoftKey);
+	softKeys_displayStrXY(lsk,rsk,format,colIndex,NULL);
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+//Old function - replace with calls to 'softKeys_displayId'
+//GW 28/11/02 - Removed commented out code
+void displaySoftKeys(int leftSoftKey,int rightSoftKey)
+{
+	char *lsk,*rsk;
+	lsk = MmiRsrcGetText(leftSoftKey);
+	rsk = MmiRsrcGetText(rightSoftKey);
+	softKeys_displayStrXY(lsk,rsk,0, COLOUR_LIST_SUBMENU, NULL);
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void displaySoftKeysXY(int leftSoftKey,int rightSoftKey,int lskX,int rskX, int lpos)
+{
+	char *lsk,*rsk;
+	MfwRect rect;
+	
+	lsk = MmiRsrcGetText(leftSoftKey);
+	rsk = MmiRsrcGetText(rightSoftKey);
+	rect.px = lskX;
+	rect.py = lpos;
+	rect.sx = rskX-lskX;
+	rect.sy = Mmi_layout_softkeyHeight();
+	softKeys_displayStrXY(lsk, rsk, 0,COLOUR_LIST_MAIN, &rect);
+
+
+
+}
+
+
+/*******************************************************************************
+
+ $Function:    	displaySoftKeys_edition
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+void displaySoftKeys_edition(int leftSoftKey,int index, int rightSoftKey)
+{
+	char *lsk,*rsk, *ind;
+	USHORT lpos;
+	
+	lsk = MmiRsrcGetText(leftSoftKey);
+	ind = MmiRsrcGetText(index);
+	rsk = MmiRsrcGetText(rightSoftKey);
+	lpos = Mmi_layout_line(SECOND_LAST_LINE_TOP);
+
+	dspl_TextOut(LeftMargin,lpos, 0,lsk);
+
+	dspl_TextOut( 5 + dspl_GetTextExtent(lsk, (USHORT)strlen(lsk)) ,lpos, 0, ind);
+
+    dspl_TextOut((mmiScrX-1)-RightMargin-dspl_GetTextExtent(rsk, (USHORT)strlen(rsk)),lpos ,0, rsk);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	displayCustSoftKeys
+
+ $Description:	Display softkeys with text strings instead of text ID's
+ 
+ $Returns:		None
+
+ $Arguments:	LeftSoftKey -	char array to be displayed at the bottom-left of the display 
+ 								or NULL if no string is to be displayed
+ 				RightSoftKey- 	char array to be displayed at the bottom-right of the display
+ 								or NULL if no string is to be displayed
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+// SH - 25/5/01
+// This function provided for WAP, to allow the printing of custom softkeys
+// from strings provided.
+
+void displayCustSoftKeys(char *LeftSoftKey, char *RightSoftKey)
+{
+	softKeys_displayStrXY(LeftSoftKey,RightSoftKey,0,COLOUR_LIST_MAIN, NULL);
+}
+
+        
+/*******************************************************************************
+
+ $Function:    	displayHelpSymbol
+
+ $Description:	Displaying '?' to indicate to the user that help is available for a menu
+                     xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357
+ 
+ $Returns:	None
+
+ $Arguments:	None 			
+*******************************************************************************/
+void displayHelpSymbol(void)
+{
+    MfwRect defRect, rect;
+    U16 line_height;
+    T_SK_DSPL_STRUCT sk_data;
+    Mmi_layout_softkeyArea( &defRect );	
+    rect.px = defRect.sx >> 1;     
+    rect.py = defRect.py + 4;
+    resources_setSKColour(COLOUR_LIST_XX);
+    //Display the symbol in the center between the softkeys
+    dspl_TextOut(rect.px, rect.py, DSPL_TXTATTR_CURRENT_MODE, "?");
+    resources_restoreMnuColour();
+
+}