#include "scicalc.h" #include "calchelp.h" #include "unifunc.h" #define RED RGB(255,0,0) /* Red */ #define PURPLE RGB(255,0,255) /* Dark Purple */ #define BLUE RGB(0,0,255) /* Blue */ #define DKBLUE RGB(0,0,255) /* Dark Blue */ #define MAGENTA RGB(255,0,255) /* Magenta */ #define DKRED RGB(255,0,0) /* Dark Red. */ #define WHITE RGB(255,255,255) /* White */ #define BLACK RGB(0,0,0) /* Black */ extern BOOL g_fHighContrast; typedef struct { COLORREF crColor; // text color DWORD iHelpID; // the helpfile ID for this key // int bUnary :1, // true if this key is treated as a unary operator // bBinary :1, // true if this key is a binary operator // bUseInv :1, // true if this key deactivates the Inv checkbox when used // bUseHyp :1; // true if this key deactivates the Hyp checkbox when used } KEYDATA; // Control ID, Color, Help ID, Unary, Binary, Inv, Hyp KEYDATA keys[] = { { /*IDC_SIGN, */ BLUE, CALC_STD_SIGN, /*false, false, false, false*/ }, { /*IDC_CLEAR, */ DKRED, CALC_C, /*false, false, false, false*/ }, { /*IDC_CENTR, */ DKRED, CALC_CE, /*false, false, false, false*/ }, { /*IDC_BACK, */ DKRED, CALC_BACK, /*false, false, false, false*/ }, { /*IDC_STAT, */ DKBLUE, CALC_SCI_STA, /*false, false, false, false*/ }, { /*IDC_PNT, */ BLUE, CALC_STD_DECIMAL, /*false, false, false, false*/ }, { /*IDC_AND, */ RED, CALC_SCI_AND, /*false, false, false, false*/ }, { /*IDC_OR, */ RED, CALC_SCI_OR, /*false, false, false, false*/ }, { /*IDC_XOR, */ RED, CALC_SCI_XOR, /*false, false, false, false*/ }, { /*IDC_LSHF, */ RED, CALC_SCI_LSH, /*false, false, false, false*/ }, { /*IDC_DIV, */ RED, CALC_STD_SLASH, /*false, false, false, false*/ }, { /*IDC_MUL, */ RED, CALC_STD_ASTERISK, /*false, false, false, false*/ }, { /*IDC_ADD, */ RED, CALC_STD_PLUS, /*false, false, false, false*/ }, { /*IDC_SUB, */ RED, CALC_STD_MINUS, /*false, false, false, false*/ }, { /*IDC_MOD, */ RED, CALC_SCI_MOD, /*false, false, false, false*/ }, { /*IDC_PWR, */ PURPLE, CALC_SCI_XCARETY, /*false, false, false, false*/ }, { /*IDC_CHOP, */ RED, CALC_SCI_INT, /*false, false, false, false*/ }, { /*IDC_COM, */ RED, CALC_SCI_NOT, /*false, false, false, false*/ }, { /*IDC_SIN, */ PURPLE, CALC_SCI_SIN, /*false, false, false, false*/ }, { /*IDC_COS, */ PURPLE, CALC_SCI_COS, /*false, false, false, false*/ }, { /*IDC_TAN, */ PURPLE, CALC_SCI_TAN, /*false, false, false, false*/ }, { /*IDC_LN, */ PURPLE, CALC_SCI_LN, /*false, false, false, false*/ }, { /*IDC_LOG, */ PURPLE, CALC_SCI_LOG, /*false, false, false, false*/ }, { /*IDC_SQRT, */ DKBLUE, CALC_STD_SQRT, /*false, false, false, false*/ }, { /*IDC_SQR, */ PURPLE, CALC_SCI_XCARET2, /*false, false, false, false*/ }, { /*IDC_CUB, */ PURPLE, CALC_SCI_XCARET3, /*false, false, false, false*/ }, { /*IDC_FAC, */ PURPLE, CALC_SCI_FACTORIAL, /*false, false, false, false*/ }, { /*IDC_REC, */ PURPLE, CALC_1X, /*false, false, false, false*/ }, { /*IDC_DMS, */ PURPLE, CALC_SCI_DMS, /*false, false, false, false*/ }, { /*IDC_PERCENT,*/ DKBLUE, CALC_STD_PERCENT, /*false, false, false, false*/ }, { /*IDC_FE, */ PURPLE, CALC_SCI_FE, /*false, false, false, false*/ }, { /*IDC_PI, */ DKBLUE, CALC_SCI_PI, /*false, false, false, false*/ }, { /*IDC_EQU, */ RED, CALC_STD_EQUAL, /*false, false, false, false*/ }, { /*IDC_MCLEAR, */ RED, CALC_MC, /*false, false, false, false*/ }, { /*IDC_RECALL, */ RED, CALC_MR, /*false, false, false, false*/ }, { /*IDC_STORE, */ RED, CALC_MS, /*false, false, false, false*/ }, { /*IDC_MPLUS, */ RED, CALC_MPLUS, /*false, false, false, false*/ }, { /*IDC_EXP, */ PURPLE, CALC_SCI_EXP, /*false, false, false, false*/ }, { /*IDC_AVE, */ DKBLUE, CALC_SCI_AVE, /*false, false, false, false*/ }, { /*IDC_B_SUM, */ DKBLUE, CALC_SCI_SUM, /*false, false, false, false*/ }, { /*IDC_DEV, */ DKBLUE, CALC_SCI_S, /*false, false, false, false*/ }, { /*IDC_DATA, */ DKBLUE, CALC_SCI_DAT, /*false, false, false, false*/ }, { /*IDC_OPENP, */ PURPLE, CALC_SCI_OPENPAREN, /*false, false, false, false*/ }, { /*IDC_CLOSEP, */ PURPLE, CALC_SCI_CLOSEPAREN,/*false, false, false, false*/ }, { /*IDC_0, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_1, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_2, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_3, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_4, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_5, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_6, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_7, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_8, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_9, */ BLUE, CALC_STD_NUMBERS, /*false, false, false, false*/ }, { /*IDC_A, */ DKBLUE, CALC_SCI_ABCDEF, /*false, false, false, false*/ }, { /*IDC_B, */ DKBLUE, CALC_SCI_ABCDEF, /*false, false, false, false*/ }, { /*IDC_C, */ DKBLUE, CALC_SCI_ABCDEF, /*false, false, false, false*/ }, { /*IDC_D, */ DKBLUE, CALC_SCI_ABCDEF, /*false, false, false, false*/ }, { /*IDC_E, */ DKBLUE, CALC_SCI_ABCDEF, /*false, false, false, false*/ }, { /*IDC_F, */ DKBLUE, CALC_SCI_ABCDEF, /*false, false, false, false*/ } }; // Returns true if the given ID is one of Calc's command buttons BOOL IsValidID( int iID ) { if ( (iID >= IDC_SIGN) && (iID <= IDC_F) ) return TRUE; return FALSE; } // Used when processing WM_DRAWITEM to get the key color COLORREF GetKeyColor( int iID ) { if ( g_fHighContrast || !IsValidID( iID )) return GetSysColor(COLOR_BTNTEXT); if ( nCalc && (iID == IDC_REC) ) return DKBLUE; return keys[INDEXFROMID(iID)].crColor; } // Used when processing WM_CONTEXTHELP to get the Help ID. // This works for any control ID, not just the command buttons. ULONG_PTR GetHelpID( int iID ) { if ( IsValidID( iID ) ) { return keys[INDEXFROMID(iID)].iHelpID; } switch( iID ) { case IDC_HEX: return CALC_SCI_HEX; case IDC_DEC: return CALC_SCI_DEC; case IDC_OCT: return CALC_SCI_OCT; case IDC_BIN: return CALC_SCI_BIN; case IDC_DEG: return CALC_SCI_DEG; case IDC_RAD: return CALC_SCI_RAD; case IDC_GRAD: return CALC_SCI_GRAD; case IDC_QWORD: return CALC_SCI_QWORD; case IDC_DWORD: return CALC_SCI_DWORD; case IDC_WORD: return CALC_SCI_WORD; case IDC_BYTE: return CALC_SCI_BYTE; case IDC_INV: return CALC_SCI_INV; case IDC_HYP: return CALC_SCI_HYP; case IDC_DISPLAY: return CALC_STD_VALUE; case IDC_MEMTEXT: return CALC_SCI_MEM; case IDC_PARTEXT: return CALC_SCI_PARENS; } ASSERT( 0 ); // an invalid help ID has been used. return 0; } /* BOOL IsUnaryOperator( int iID ) { ASSERT( IsValidID( iID ) ); return keys[INDEXFROMID(iID)].bUnary; } BOOL IsBinaryOperator( int iID ) { ASSERT( IsValidID( iID ) ); return keys[INDEXFROMID(iID)].bBinary; } BOOL UsesInvKey( int iID ) { ASSERT( IsValidID( iID ) ); return keys[INDEXFROMID(iID)].bUseInv; } BOOL UsesHypKey( int iID ) { ASSERT( IsValidID( iID ) ); return keys[INDEXFROMID(iID)].bUseHyp; } */