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 CallDtmfKeypadPanel.cpp
19 * @brief Dtmf keypad implementation class
23 #include "CallAppUtility.h"
24 #include "CallCommonUtils.h"
25 #include "CallDtmfKeypadPanel.h"
26 #include "CallTypes.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 int W_DTMF_BTN = 212;
46 const int H_DTMF_BTN = 134;
47 const Color COLOR_KEYPAD_BG(0, 0, 0, 100);
48 const wchar_t* IDC_TEXTBOX = L"IDC_NUM_EDITFIELD";
49 const wchar_t* IDC_BUTTON = L"IDC_BUTTON";
50 const wchar_t* IDC_DTMF_KEY_BG_LABEL = L"IDC_DTMF_KEY_BG_LABEL";
52 DtmfKeyPadPanel::DtmfKeyPadPanel(void)
54 __pActionListener = null;
57 DtmfKeyPadPanel::~DtmfKeyPadPanel(void)
62 DtmfKeyPadPanel::Initialize(IActionEventListener* pEventListener, Rectangle& boundsRect)
64 result r = Construct(IDL_DTMF_PANEL);
70 r = SetBounds(boundsRect);
76 //disable auto link detection
77 EditField* pTextBox = static_cast<EditField*>(GetControl(IDC_TEXTBOX));
80 pTextBox->SetAutoLinkMask(0);
83 __pActionListener = pEventListener;
88 DtmfKeyPadPanel::OnInitializing(void)
90 RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetPortraitLayoutN());
91 if (pRelativeLayout != null)
93 pRelativeLayout->Update();
94 delete pRelativeLayout;
97 pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetLandscapeLayoutN());
98 if (pRelativeLayout != null)
100 pRelativeLayout->Update();
101 delete pRelativeLayout;
104 //Set background bitmap
105 Label* pKeyBgLbl = static_cast<Label*>(GetControl(IDC_DTMF_KEY_BG_LABEL, true));
106 Bitmap* pKeyBgBitmap = AppUtility::GetBitmapFromResourcesN(IDB_KEYPAD_BG, pKeyBgLbl->GetWidth(), pKeyBgLbl->GetHeight());
107 if (pKeyBgBitmap != null)
109 pKeyBgLbl->SetBackgroundBitmap(*pKeyBgBitmap);
115 Panel* pKeysPanel = new (std::nothrow) Panel();
116 pKeysPanel->Construct(IDL_DTMF_KEYS_PANEL);
117 pKeysPanel->SetBounds(pKeyBgLbl->GetBounds());
118 AddControl(*pKeysPanel);
120 //Add action listener and bg to buttons.
121 AddListenersToButtons();
122 result r = SetBackgroundtoButton();
127 DtmfKeyPadPanel::AddListenersToButtons()
129 for (int i = NUM_KEY1; i <= HASH_KEY; ++i)
131 String buttonName(IDC_BUTTON);
132 buttonName.Append(i);
133 Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
138 pButton->SetActionId(i);
139 SetControlAlwaysOnTop(*pButton,true);
141 if(__pActionListener != null)
143 pButton->AddActionEventListener(*__pActionListener);
149 DtmfKeyPadPanel::SetBackgroundtoButton()
151 AppLogDebug("ENTER");
152 result r = E_FAILURE;
153 for (int i = 1; i <= 12; i++)
155 String buttonName(IDC_BUTTON);
156 buttonName.Append(i);
157 Button* pButton = static_cast<Button*>(GetControl(buttonName,true));
164 Rectangle canvasRect(0, 0, W_DTMF_BTN, H_DTMF_BTN);
166 canvasNormal.Construct(canvasRect);
167 canvasNormal.SetBackgroundColor(Color(255,255,255,0));
168 canvasNormal.Clear();
170 Canvas canvasPressed;
171 canvasPressed.Construct(canvasRect);
173 String number(DialUtil::ConvertDialedNumberToString(pButton->GetActionId()));
174 switch (pButton->GetActionId())
178 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
179 DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasNormal, POSITION_RIGHT);
181 //Set canvas for pressed state of the button
182 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
183 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
184 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
185 DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasPressed, POSITION_RIGHT);
191 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
192 DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
194 //Set canvas for pressed state of the button
195 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
196 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
197 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
198 DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
204 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
205 DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
207 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
208 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
209 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
210 DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
216 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
217 DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
219 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
220 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
221 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
222 DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
228 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
229 DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
231 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
232 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
233 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
234 DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
240 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
241 DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
243 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
244 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
245 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
246 DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
252 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
253 DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
255 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
256 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
257 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
258 DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
264 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
265 DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
267 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
268 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
269 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
270 DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
276 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
277 DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
279 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
280 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
281 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
282 DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
288 DrawTextToCanvas(L"*", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
289 DrawTextToCanvas(L"P", FONT_KEYPAD_P, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
290 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
291 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
292 DrawTextToCanvas(L"*", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
293 DrawTextToCanvas(L"P", FONT_KEYPAD_P, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
299 DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
300 DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
302 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
303 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
304 DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
305 DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
311 DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
313 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
314 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
315 DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
320 //Set the final Bitmap to Button
321 DialUtil::DrawCanvasToButton(&canvasNormal, &canvasPressed, pButton);
333 DtmfKeyPadPanel::SetPressedBgToCanvas(Canvas& canvas, const String& bgImg)
336 AppResource* pAppResource = AppResource::GetInstance();
337 Bitmap* pBitmap = pAppResource->GetBitmapN(bgImg);
343 if (pBitmap->IsNinePatchedBitmap())
345 canvas.DrawNinePatchedBitmap(canvas.GetBounds(), *pBitmap);
349 pBitmap->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
350 pBitmap->Scale(Dimension(canvas.GetBounds().width, canvas.GetBounds().height));
351 canvas.DrawBitmap(Point(0,0), *pBitmap);
358 DtmfKeyPadPanel::DrawImageToCanvas(const String& image, Dimension imageDimention, Canvas& canvas, int pos)
360 //create and scale bitmap
361 AppResource* pAppResource = AppResource::GetInstance();
362 Bitmap* pBitmap = pAppResource->GetBitmapN(image);
363 pBitmap->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
364 pBitmap->Scale(imageDimention);
366 //Find position to draw bitmap
367 Point bitmapPos(0, 0);
372 bitmapPos.SetPosition(INITIAL_X_OFFSET + (LEFT_X_OFFSET - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
378 bitmapPos.SetPosition(INITIAL_X_OFFSET + LEFT_X_OFFSET + ((RIGHT_X_OFFSET - pBitmap->GetWidth()) / 2), (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
382 case POSITION_CENTER:
384 bitmapPos.SetPosition((canvas.GetBounds().width - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
390 canvas.DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
396 DtmfKeyPadPanel::DrawTextToCanvas(const String& buttonText, int textFontStyle, Canvas& canvas, int pos, int buttonStatus)
398 if (buttonText == null)
404 Font* font = GetTextFontN(textFontStyle);
407 Color* textColor = GetTextColorN(textFontStyle, buttonStatus);
409 //create text element
410 TextElement* pTextElement = new (std::nothrow) TextElement();
411 pTextElement->Construct(buttonText);
412 pTextElement->SetTextColor(*textColor);
413 pTextElement->SetFont(*font);
415 //get dimensions of the text
416 Dimension textDimension;
417 font->GetTextExtent(buttonText, buttonText.GetLength(), textDimension);
418 textDimension.height = textDimension.height + font->GetDescender();
419 //create enriched text
420 EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
421 pEnrichedText->Construct(textDimension);
422 pEnrichedText->Add(*pTextElement);
424 //set the position of the text in canvas
430 textPos.SetPosition(INITIAL_TEXT_X_OFFSET + ((LEFT_TEXT_X_OFFSET - pEnrichedText->GetWidth()) / 2), (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
436 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);
440 case POSITION_CENTER:
442 textPos.SetPosition((canvas.GetBounds().width - pEnrichedText->GetWidth()) / 2, (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
447 //Draw EnrichedText to canvas
448 canvas.DrawText(textPos, *pEnrichedText);
451 pEnrichedText->RemoveAll(true);
452 delete pEnrichedText;
458 DtmfKeyPadPanel::GetTextFontN(int textFontStyle)
460 Font* font = new (std::nothrow) Font();
462 switch (textFontStyle)
464 case FONT_KEYPAD_NUMBER:
466 font->Construct(FONT_STYLE_PLAIN, 112);
470 case FONT_KEYPAD_TEXT:
472 font->Construct(FONT_STYLE_PLAIN, 30);
478 font->Construct(FONT_STYLE_PLAIN, 60);
482 case FONT_KEYPAD_PLUS:
484 font->Construct(FONT_STYLE_PLAIN, 64);
492 DtmfKeyPadPanel::GetTextColorN(int textColor, int buttonStatus)
494 Color* color = new (std::nothrow) Color();
496 if (buttonStatus == BUTTON_STATUS_PRESSED)
498 color->SetColorComponents(255, 255, 255);
504 case FONT_KEYPAD_NUMBER:
506 color->SetColorComponents(242, 242, 242);
510 case FONT_KEYPAD_TEXT:
512 color->SetColorComponents(197, 197, 197);
517 case FONT_KEYPAD_PLUS:
519 color->SetColorComponents(218, 218, 218);
527 DtmfKeyPadPanel::OnTerminating(void)
529 result r = E_SUCCESS;