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_TEXTBOX";
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 TextBox* pTextBox = static_cast<TextBox*>(GetControl(IDC_TEXTBOX));
80 pTextBox->SetAutoLinkMask(0);
82 __pActionListener = pEventListener;
87 DtmfKeyPadPanel::OnInitializing(void)
89 RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetPortraitLayoutN());
90 if (pRelativeLayout != null)
92 pRelativeLayout->Update();
93 delete pRelativeLayout;
96 pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetLandscapeLayoutN());
97 if (pRelativeLayout != null)
99 pRelativeLayout->Update();
100 delete pRelativeLayout;
103 //Set background bitmap
104 Label* pKeyBgLbl = static_cast<Label*>(GetControl(IDC_DTMF_KEY_BG_LABEL, true));
105 Bitmap* pKeyBgBitmap = AppUtility::GetBitmapFromResourcesN(IDB_KEYPAD_BG, pKeyBgLbl->GetWidth(), pKeyBgLbl->GetHeight());
106 if (pKeyBgBitmap != null)
108 pKeyBgLbl->SetBackgroundBitmap(*pKeyBgBitmap);
114 Panel* pKeysPanel = new (std::nothrow) Panel();
115 pKeysPanel->Construct(IDL_DTMF_KEYS_PANEL);
116 pKeysPanel->SetBounds(pKeyBgLbl->GetBounds());
117 AddControl(*pKeysPanel);
119 //Add action listener and bg to buttons.
120 AddListenersToButtons();
121 result r = SetBackgroundtoButton();
126 DtmfKeyPadPanel::AddListenersToButtons()
128 for (int i = NUM_KEY1; i <= HASH_KEY; ++i)
130 String buttonName(IDC_BUTTON);
131 buttonName.Append(i);
132 Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
137 pButton->SetActionId(i);
138 SetControlAlwaysOnTop(*pButton,true);
140 if(__pActionListener != null)
142 pButton->AddActionEventListener(*__pActionListener);
148 DtmfKeyPadPanel::SetBackgroundtoButton()
150 AppLogDebug("ENTER");
151 result r = E_FAILURE;
152 for (int i = 1; i <= 12; i++)
154 String buttonName(IDC_BUTTON);
155 buttonName.Append(i);
156 Button* pButton = static_cast<Button*>(GetControl(buttonName,true));
163 Rectangle canvasRect(0, 0, W_DTMF_BTN, H_DTMF_BTN);
165 canvasNormal.Construct(canvasRect);
166 canvasNormal.SetBackgroundColor(Color(255,255,255,0));
167 canvasNormal.Clear();
169 Canvas canvasPressed;
170 canvasPressed.Construct(canvasRect);
172 String number(DialUtil::ConvertDialedNumberToString(pButton->GetActionId()));
173 switch (pButton->GetActionId())
177 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
178 DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasNormal, POSITION_RIGHT);
180 //Set canvas for pressed state of the button
181 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
182 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
183 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
184 DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasPressed, POSITION_RIGHT);
190 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
191 DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
193 //Set canvas for pressed state of the button
194 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
195 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
196 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
197 DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
203 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
204 DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
206 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
207 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
208 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
209 DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
215 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
216 DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
218 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
219 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
220 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
221 DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
227 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
228 DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
230 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
231 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
232 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
233 DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
239 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
240 DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
242 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
243 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
244 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
245 DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
251 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
252 DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
254 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
255 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
256 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
257 DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
263 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
264 DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
266 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
267 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
268 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
269 DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
275 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
276 DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
278 r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
279 TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
280 DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
281 DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
287 DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(75, 36), canvasNormal, POSITION_LEFT);
288 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 DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(75, 36), canvasPressed, POSITION_LEFT);
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;