Tizen 2.0 Release
[apps/osp/Phone.git] / src / PhnDtmfKeypadPanel.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://floralicense.org/license/
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file    PhnDtmfKeypadPanel.cpp
19  * @brief       Dtmf keypad implementation class
20  */
21 #include <FApp.h>
22 #include <FMedia.h>
23 #include "PhnAppUtility.h"
24 #include "PhnCommonUtils.h"
25 #include "PhnDtmfKeypadPanel.h"
26 #include "PhnTypes.h"
27
28 using namespace Tizen::App;
29 using namespace Tizen::Base;
30 using namespace Tizen::Graphics;
31 using namespace Tizen::Media;
32 using namespace Tizen::Ui;
33 using namespace Tizen::Ui::Controls;
34 using namespace Tizen::Ui::Scenes;
35
36 const int W_VOICE_CALL_ICON = 70;
37 const int H_VOICE_CALL_ICON = 36;
38 const int INITIAL_X_OFFSET = 13;
39 const int LEFT_X_OFFSET = 77;
40 const int RIGHT_X_OFFSET = 121;
41 const int INITIAL_TEXT_X_OFFSET = 24;
42 const int LEFT_TEXT_X_OFFSET = 64;
43 const int LEFT_TEXT_X_MARGIN = 18;
44 const int RIGHT_TEXT_X_OFFSET = 94;
45 const Color COLOR_KEYPAD_BG(0, 0, 0, 100);
46 const wchar_t* IDC_TEXTBOX = L"IDC_TEXTBOX";
47 const wchar_t* IDC_BUTTON = L"IDC_BUTTON";
48
49 DtmfKeyPadPanel::DtmfKeyPadPanel(void)
50 {
51         __pActionListener = null;
52 }
53
54 DtmfKeyPadPanel::~DtmfKeyPadPanel(void)
55 {
56 }
57
58 bool
59 DtmfKeyPadPanel::Initialize(IActionEventListener* pEventListener, Rectangle& boundsRect)
60 {
61         result r = Construct(IDL_DTMF_PANEL);
62         if (IsFailed(r))
63         {
64                 return false;
65         }
66         r = SetBounds(boundsRect);
67         if (IsFailed(r))
68         {
69                 return false;
70         }
71         __pActionListener = pEventListener;
72         //Add action listener.
73         AddListenersToButtons();
74         return true;
75 }
76
77 result
78 DtmfKeyPadPanel::OnInitializing(void)
79 {
80         result r = SetBackgroundtoButton();
81         return r;
82 }
83
84 void
85 DtmfKeyPadPanel::AddListenersToButtons()
86 {
87         for (int i = NUM_KEY1; i <= HASH_KEY; ++i)
88         {
89                 String buttonName(IDC_BUTTON);
90                 buttonName.Append(i);
91                 Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
92                 if(pButton == null)
93                 {
94                         continue;
95                 }
96                 pButton->SetActionId(i);
97                 SetControlAlwaysOnTop(*pButton,true);
98                 //Add Listeners
99                 if(__pActionListener != null)
100                 {
101                         pButton->AddActionEventListener(*__pActionListener);
102                 }
103         }
104 }
105
106 result
107 DtmfKeyPadPanel::SetBackgroundtoButton()
108 {
109         AppLogDebug("ENTER");
110         result r = E_FAILURE;
111         for (int i = 1; i <= 12; i++)
112         {
113                 String buttonName(IDC_BUTTON);
114                 buttonName.Append(i);
115                 Button* pButton = static_cast<Button*>(GetControl(buttonName,true));
116                 if(pButton == null)
117                 {
118                         continue;
119                 }
120
121                 Rectangle canvasRect(0, 0, pButton->GetBounds().width, pButton->GetBounds().height);
122                 Canvas canvasNormal;
123                 canvasNormal.Construct(canvasRect);
124                 Canvas canvasPressed;
125                 canvasPressed.Construct(canvasRect);
126
127                 String number(DialUtil::ConvertDialedNumberToString(pButton->GetActionId()));
128                 switch (pButton->GetActionId())
129                 {
130                 case NUM_KEY1:
131                 {
132                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
133                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
134                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
135                         DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasNormal, POSITION_RIGHT);
136
137                         //Set canvas for pressed state of the button
138                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
139                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
140                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
141                         DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasPressed, POSITION_RIGHT);
142                 }
143                 break;
144
145                 case NUM_KEY2:
146                 {
147                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
148                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
149                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
150                         DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
151
152                         //Set canvas for pressed state of the button
153                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
154                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
155                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
156                         DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
157                 }
158                 break;
159
160                 case NUM_KEY3:
161                 {
162                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
163                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
164                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
165                         DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
166
167                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
168                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
169                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
170                         DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
171                 }
172                 break;
173
174                 case NUM_KEY4:
175                 {
176                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
177                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
178                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
179                         DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
180
181                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
182                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
183                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
184                         DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
185                 }
186                 break;
187
188                 case NUM_KEY5:
189                 {
190                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
191                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
192                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
193                         DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
194
195                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
196                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
197                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
198                         DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
199                 }
200                 break;
201
202                 case NUM_KEY6:
203                 {
204                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
205                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
206                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
207                         DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
208
209                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
210                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
211                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
212                         DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
213                 }
214                 break;
215
216                 case NUM_KEY7:
217                 {
218                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
219                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
220                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
221                         DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
222
223                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
224                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
225                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
226                         DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
227                 }
228                 break;
229
230                 case NUM_KEY8:
231                 {
232                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
233                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
234                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
235                         DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
236
237                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
238                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
239                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
240                         DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
241                 }
242                 break;
243
244                 case NUM_KEY9:
245                 {
246                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
247                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
248                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
249                         DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
250
251                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
252                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
253                         DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
254                         DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
255                 }
256                 break;
257
258                 case PAUSE_KEY:
259                 {
260                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
261                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
262                         DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(75, 36), canvasNormal, POSITION_LEFT);
263                         DrawTextToCanvas(L"P", FONT_KEYPAD_P, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
264
265                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
266                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
267                         DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(75, 36), canvasPressed, POSITION_LEFT);
268                         DrawTextToCanvas(L"P", FONT_KEYPAD_P, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
269                 }
270                 break;
271
272                 case NUM_KEY0:
273                 {
274                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
275                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
276                         DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
277                         DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
278
279                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
280                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
281                         DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
282                         DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
283                 }
284                 break;
285
286                 case HASH_KEY:
287                 {
288                         r = ConstructButtonCanvas(canvasNormal, pButton, IDB_KEYPAD_BUTTON_NORMAL, BUTTON_STATUS_NORMAL);
289                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
290                         DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
291
292                         r = ConstructButtonCanvas(canvasPressed, pButton, IDB_KEYPAD_BUTTON_PRESS, BUTTON_STATUS_PRESSED);
293                         TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() ConstructButtonCanvas failed");
294                         DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
295                 }
296
297                 break;
298                 }
299                 //Set the final Bitmap to Button
300                 DialUtil::DrawCanvasToButton(&canvasNormal, &canvasPressed, pButton);
301         }
302
303         AppLogDebug("EXIT");
304         return E_SUCCESS;
305
306 CATCH:
307         RemoveAllControls();
308         return r;
309 }
310
311 result
312 DtmfKeyPadPanel::ConstructButtonCanvas(Canvas& canvas, Button* pButton, const String& bgImg, int buttonStatus)
313 {
314         if (pButton == null)
315         {
316                 return E_FAILURE;
317         }
318
319         //Construct a canvas
320         AppResource* pAppResource = AppResource::GetInstance();
321         Bitmap* pBitmap = pAppResource->GetBitmapN(bgImg);
322         if (pBitmap == null)
323         {
324                 return E_FAILURE;
325         }
326
327         if (pBitmap->IsNinePatchedBitmap())
328         {
329                 canvas.DrawNinePatchedBitmap(canvas.GetBounds(), *pBitmap);
330         }
331         else
332         {
333                 if (buttonStatus == BUTTON_STATUS_NORMAL)
334                 {
335                         pButton->SetNormalBackgroundBitmap(*pBitmap);
336                 }
337                 else
338                 {
339                         pButton->SetPressedBackgroundBitmap(*pBitmap);
340                 }
341         }
342         delete pBitmap;
343         return E_SUCCESS;
344 }
345
346 void
347 DtmfKeyPadPanel::DrawImageToCanvas(const String& image, Dimension imageDimention, Canvas& canvas, int pos)
348 {
349         //create and scale bitmap
350         AppResource* pAppResource = AppResource::GetInstance();
351         Bitmap* pBitmap = pAppResource->GetBitmapN(image);
352         pBitmap->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
353         pBitmap->Scale(imageDimention);
354
355         //Find position to draw bitmap
356         Point bitmapPos(0, 0);
357         switch (pos)
358         {
359         case POSITION_LEFT:
360         {
361                 bitmapPos.SetPosition(INITIAL_X_OFFSET + (LEFT_X_OFFSET - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
362         }
363         break;
364
365         case POSITION_RIGHT:
366         {
367                 bitmapPos.SetPosition(INITIAL_X_OFFSET + LEFT_X_OFFSET + ((RIGHT_X_OFFSET - pBitmap->GetWidth()) / 2), (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
368         }
369         break;
370
371         case POSITION_CENTER:
372         {
373                 bitmapPos.SetPosition((canvas.GetBounds().width - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
374         }
375         break;
376         }
377
378         //draw bitmap
379         canvas.DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
380         delete pBitmap;
381         pBitmap = null;
382 }
383
384 void
385 DtmfKeyPadPanel::DrawTextToCanvas(const String& buttonText, int textFontStyle, Canvas& canvas, int pos, int buttonStatus)
386 {
387         if (buttonText == null)
388         {
389                 return;
390         }
391
392         //get text font
393         Font* font = GetTextFontN(textFontStyle);
394
395         //get text color
396         Color* textColor = GetTextColorN(textFontStyle, buttonStatus);
397
398         //create text element
399         TextElement* pTextElement = new (std::nothrow) TextElement();
400         pTextElement->Construct(buttonText);
401         pTextElement->SetTextColor(*textColor);
402         pTextElement->SetFont(*font);
403
404         //get dimensions of the text
405         Dimension textDimension;
406         font->GetTextExtent(buttonText, buttonText.GetLength(), textDimension);
407         textDimension.height = textDimension.height + font->GetDescender();
408         //create enriched text
409         EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
410         pEnrichedText->Construct(textDimension);
411         pEnrichedText->Add(*pTextElement);
412
413         //set the position of the text in canvas
414         Point textPos(0, 0);
415         switch (pos)
416         {
417         case POSITION_LEFT:
418         {
419                 textPos.SetPosition(INITIAL_TEXT_X_OFFSET + ((LEFT_TEXT_X_OFFSET - pEnrichedText->GetWidth()) / 2), (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
420         }
421         break;
422
423         case POSITION_RIGHT:
424         {
425                 textPos.SetPosition(INITIAL_TEXT_X_OFFSET + LEFT_TEXT_X_OFFSET + LEFT_TEXT_X_MARGIN + ((RIGHT_TEXT_X_OFFSET - pEnrichedText->GetWidth()) / 2), (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
426         }
427         break;
428
429         case POSITION_CENTER:
430         {
431                 textPos.SetPosition((canvas.GetBounds().width - pEnrichedText->GetWidth()) / 2, (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
432         }
433         break;
434         }
435
436         //Draw EnrichedText to canvas
437         canvas.DrawText(textPos, *pEnrichedText);
438
439         // Cleans up
440         pEnrichedText->RemoveAll(true);
441         delete pEnrichedText;
442         delete textColor;
443         delete font;
444 }
445
446 Font*
447 DtmfKeyPadPanel::GetTextFontN(int textFontStyle)
448 {
449         Font* font = new (std::nothrow) Font();
450
451         switch (textFontStyle)
452         {
453         case FONT_CALLING_TEXT:
454         {
455                 font->Construct(FONT_STYLE_PLAIN, 94);
456         }
457         break;
458
459         case FONT_KEYPAD_NUMBER:
460         {
461                 font->Construct(FONT_STYLE_PLAIN, 112);
462         }
463         break;
464
465         case FONT_KEYPAD_TEXT:
466         {
467                 font->Construct(FONT_STYLE_PLAIN, 32);
468         }
469         break;
470
471         case FONT_KEYPAD_P:
472         case FONT_KEYPAD_PLUS:
473         {
474                 font->Construct(FONT_STYLE_PLAIN, 64);
475         }
476         break;
477
478         case FONT_KEYPAD_CANCEL:
479         {
480                 font->Construct(FONT_STYLE_PLAIN, 34);
481         }
482         break;
483         }
484         return font;
485 }
486
487 Color*
488 DtmfKeyPadPanel::GetTextColorN(int textColor, int buttonStatus)
489 {
490         Color* color = new (std::nothrow) Color();
491
492         if (buttonStatus == BUTTON_STATUS_PRESSED)
493         {
494                 color->SetColorComponents(249, 249, 249);
495                 return color;
496         }
497
498         switch (textColor)
499         {
500         case FONT_CALLING_TEXT:
501         {
502                 color->SetColorComponents(0, 0, 0);
503         }
504         break;
505
506         case FONT_KEYPAD_NUMBER:
507         {
508                 color->SetColorComponents(255, 255, 255);
509         }
510         break;
511
512         case FONT_KEYPAD_TEXT:
513         case FONT_KEYPAD_P:
514         case FONT_KEYPAD_PLUS:
515         {
516                 color->SetColorComponents(148, 177, 200);
517         }
518         break;
519
520         case FONT_KEYPAD_CANCEL:
521         {
522                 color->SetColorComponents(255, 255, 255);
523         }
524         break;
525         }
526         return color;
527 }
528
529 result
530 DtmfKeyPadPanel::OnTerminating(void)
531 {
532         result r = E_SUCCESS;
533         RemoveAllControls();
534         return r;
535 }