#include "pop_up_controller.h" #include "../i18n.h" #include "../apps_container.h" #include namespace HardwareTest { PopUpController::PopUpController() : ViewController(nullptr), m_contentView(this) { } View * PopUpController::view() { return &m_contentView; } void PopUpController::didBecomeFirstResponder() { m_contentView.setSelectedButton(0); } bool PopUpController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Left && m_contentView.selectedButton() == 1) { m_contentView.setSelectedButton(0); return true; } if (event == Ion::Events::Right && m_contentView.selectedButton() == 0) { m_contentView.setSelectedButton(1); return true; } return false; } PopUpController::ContentView::ContentView(Responder * parentResponder) : Responder(parentResponder), m_cancelButton(this, I18n::Message::Cancel, Invocation([](void * context, void * sender) { PopUpController::ContentView * view = (PopUpController::ContentView *)context; view->app()->dismissModalViewController(); }, this), KDText::FontSize::Small), m_okButton(this, I18n::Message::Ok, Invocation([](void * context, void * sender) { PopUpController::ContentView * view = (PopUpController::ContentView *)context; AppsContainer * appsContainer = (AppsContainer *)view->app()->container(); appsContainer->switchTo(appsContainer->hardwareTestAppSnapshot()); }, this), KDText::FontSize::Small), m_warningTextView(KDText::FontSize::Small, I18n::Message::Warning, 0.5, 0.5, KDColorWhite, KDColorBlack), m_messageTextView1(KDText::FontSize::Small, I18n::Message::HardwareTestLaunch1, 0.5, 0.5, KDColorWhite, KDColorBlack), m_messageTextView2(KDText::FontSize::Small, I18n::Message::HardwareTestLaunch2, 0.5, 0.5, KDColorWhite, KDColorBlack), m_messageTextView3(KDText::FontSize::Small, I18n::Message::HardwareTestLaunch3, 0.5, 0.5, KDColorWhite, KDColorBlack), m_messageTextView4(KDText::FontSize::Small, I18n::Message::HardwareTestLaunch4, 0.5, 0.5, KDColorWhite, KDColorBlack) { } void PopUpController::ContentView::drawRect(KDContext * ctx, KDRect rect) const { ctx->fillRect(bounds(), KDColorBlack); } void PopUpController::ContentView::setSelectedButton(int selectedButton) { m_cancelButton.setHighlighted(selectedButton == 0); m_okButton.setHighlighted(selectedButton == 1); if (selectedButton == 0) { app()->setFirstResponder(&m_cancelButton); } else { app()->setFirstResponder(&m_okButton); } } int PopUpController::ContentView::selectedButton() { if (m_cancelButton.isHighlighted()) { return 0; } return 1; } int PopUpController::ContentView::numberOfSubviews() const { return 7; } View * PopUpController::ContentView::subviewAtIndex(int index) { switch (index) { case 0: return &m_warningTextView; case 1: return &m_messageTextView1; case 2: return &m_messageTextView2; case 3: return &m_messageTextView3; case 4: return &m_messageTextView4; case 5: return &m_cancelButton; case 6: return &m_okButton; default: assert(false); return nullptr; } } void PopUpController::ContentView::layoutSubviews() { KDCoordinate height = bounds().height(); KDCoordinate width = bounds().width(); KDCoordinate textHeight = KDText::charSize(KDText::FontSize::Small).height(); m_warningTextView.setFrame(KDRect(0, k_topMargin, width, textHeight)); m_messageTextView1.setFrame(KDRect(0, k_topMargin+k_paragraphHeight+textHeight, width, textHeight)); m_messageTextView2.setFrame(KDRect(0, k_topMargin+k_paragraphHeight+2*textHeight, width, textHeight)); m_messageTextView3.setFrame(KDRect(0, k_topMargin+k_paragraphHeight+3*textHeight, width, textHeight)); m_messageTextView4.setFrame(KDRect(0, k_topMargin+k_paragraphHeight+4*textHeight, width, textHeight)); m_cancelButton.setFrame(KDRect(k_buttonMargin, height-k_buttonMargin-k_buttonHeight, (width-3*k_buttonMargin)/2, k_buttonHeight)); m_okButton.setFrame(KDRect(2*k_buttonMargin+(width-3*k_buttonMargin)/2, height-k_buttonMargin-k_buttonHeight, (width-3*k_buttonMargin)/2, k_buttonHeight)); } }