2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://floralicense.org/license/
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.
18 * @file PhnDtmfKeypadPanel.cpp
19 * @brief Dtmf keypad implementation class
23 #include "PhnAppUtility.h"
24 #include "PhnCommonUtils.h"
25 #include "PhnDtmfKeypadPanel.h"
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;
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";
49 DtmfKeyPadPanel::DtmfKeyPadPanel(void)
51 __pActionListener = null;
54 DtmfKeyPadPanel::~DtmfKeyPadPanel(void)
59 DtmfKeyPadPanel::Initialize(IActionEventListener* pEventListener, Rectangle& boundsRect)
61 result r = Construct(IDL_DTMF_PANEL);
66 r = SetBounds(boundsRect);
71 __pActionListener = pEventListener;
72 //Add action listener.
73 AddListenersToButtons();
78 DtmfKeyPadPanel::OnInitializing(void)
80 result r = SetBackgroundtoButton();
85 DtmfKeyPadPanel::AddListenersToButtons()
87 for (int i = NUM_KEY1; i <= HASH_KEY; ++i)
89 String buttonName(IDC_BUTTON);
91 Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
96 pButton->SetActionId(i);
97 SetControlAlwaysOnTop(*pButton,true);
99 if(__pActionListener != null)
101 pButton->AddActionEventListener(*__pActionListener);
107 DtmfKeyPadPanel::SetBackgroundtoButton()
109 AppLogDebug("ENTER");
110 result r = E_FAILURE;
111 for (int i = 1; i <= 12; i++)
113 String buttonName(IDC_BUTTON);
114 buttonName.Append(i);
115 Button* pButton = static_cast<Button*>(GetControl(buttonName,true));
121 Rectangle canvasRect(0, 0, pButton->GetBounds().width, pButton->GetBounds().height);
123 canvasNormal.Construct(canvasRect);
124 Canvas canvasPressed;
125 canvasPressed.Construct(canvasRect);
127 String number(DialUtil::ConvertDialedNumberToString(pButton->GetActionId()));
128 switch (pButton->GetActionId())
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
299 //Set the final Bitmap to Button
300 DialUtil::DrawCanvasToButton(&canvasNormal, &canvasPressed, pButton);
312 DtmfKeyPadPanel::ConstructButtonCanvas(Canvas& canvas, Button* pButton, const String& bgImg, int buttonStatus)
320 AppResource* pAppResource = AppResource::GetInstance();
321 Bitmap* pBitmap = pAppResource->GetBitmapN(bgImg);
327 if (pBitmap->IsNinePatchedBitmap())
329 canvas.DrawNinePatchedBitmap(canvas.GetBounds(), *pBitmap);
333 if (buttonStatus == BUTTON_STATUS_NORMAL)
335 pButton->SetNormalBackgroundBitmap(*pBitmap);
339 pButton->SetPressedBackgroundBitmap(*pBitmap);
347 DtmfKeyPadPanel::DrawImageToCanvas(const String& image, Dimension imageDimention, Canvas& canvas, int pos)
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);
355 //Find position to draw bitmap
356 Point bitmapPos(0, 0);
361 bitmapPos.SetPosition(INITIAL_X_OFFSET + (LEFT_X_OFFSET - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
367 bitmapPos.SetPosition(INITIAL_X_OFFSET + LEFT_X_OFFSET + ((RIGHT_X_OFFSET - pBitmap->GetWidth()) / 2), (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
371 case POSITION_CENTER:
373 bitmapPos.SetPosition((canvas.GetBounds().width - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
379 canvas.DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
385 DtmfKeyPadPanel::DrawTextToCanvas(const String& buttonText, int textFontStyle, Canvas& canvas, int pos, int buttonStatus)
387 if (buttonText == null)
393 Font* font = GetTextFontN(textFontStyle);
396 Color* textColor = GetTextColorN(textFontStyle, buttonStatus);
398 //create text element
399 TextElement* pTextElement = new (std::nothrow) TextElement();
400 pTextElement->Construct(buttonText);
401 pTextElement->SetTextColor(*textColor);
402 pTextElement->SetFont(*font);
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);
413 //set the position of the text in canvas
419 textPos.SetPosition(INITIAL_TEXT_X_OFFSET + ((LEFT_TEXT_X_OFFSET - pEnrichedText->GetWidth()) / 2), (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
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);
429 case POSITION_CENTER:
431 textPos.SetPosition((canvas.GetBounds().width - pEnrichedText->GetWidth()) / 2, (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
436 //Draw EnrichedText to canvas
437 canvas.DrawText(textPos, *pEnrichedText);
440 pEnrichedText->RemoveAll(true);
441 delete pEnrichedText;
447 DtmfKeyPadPanel::GetTextFontN(int textFontStyle)
449 Font* font = new (std::nothrow) Font();
451 switch (textFontStyle)
453 case FONT_CALLING_TEXT:
455 font->Construct(FONT_STYLE_PLAIN, 94);
459 case FONT_KEYPAD_NUMBER:
461 font->Construct(FONT_STYLE_PLAIN, 112);
465 case FONT_KEYPAD_TEXT:
467 font->Construct(FONT_STYLE_PLAIN, 32);
472 case FONT_KEYPAD_PLUS:
474 font->Construct(FONT_STYLE_PLAIN, 64);
478 case FONT_KEYPAD_CANCEL:
480 font->Construct(FONT_STYLE_PLAIN, 34);
488 DtmfKeyPadPanel::GetTextColorN(int textColor, int buttonStatus)
490 Color* color = new (std::nothrow) Color();
492 if (buttonStatus == BUTTON_STATUS_PRESSED)
494 color->SetColorComponents(249, 249, 249);
500 case FONT_CALLING_TEXT:
502 color->SetColorComponents(0, 0, 0);
506 case FONT_KEYPAD_NUMBER:
508 color->SetColorComponents(255, 255, 255);
512 case FONT_KEYPAD_TEXT:
514 case FONT_KEYPAD_PLUS:
516 color->SetColorComponents(148, 177, 200);
520 case FONT_KEYPAD_CANCEL:
522 color->SetColorComponents(255, 255, 255);
530 DtmfKeyPadPanel::OnTerminating(void)
532 result r = E_SUCCESS;