mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 08:47:28 +01:00
88 lines
3.0 KiB
C++
88 lines
3.0 KiB
C++
#include <escher/warning_controller.h>
|
|
#include <escher/container.h>
|
|
#include <algorithm>
|
|
|
|
WarningController::ContentView::ContentView() :
|
|
SolidColorView(KDColorBlack),
|
|
m_textView1(KDFont::SmallFont, (I18n::Message)0, k_middleAlignment, k_middleAlignment, KDColorWhite, KDColorBlack),
|
|
m_textView2(KDFont::SmallFont, (I18n::Message)0, k_middleAlignment, (1.0f-k_shiftedAlignment), KDColorWhite, KDColorBlack)
|
|
{
|
|
}
|
|
|
|
void WarningController::ContentView::setLabels(I18n::Message label1, I18n::Message label2) {
|
|
m_textView1.setMessage(label1);
|
|
m_textView2.setMessage(label2);
|
|
}
|
|
|
|
int WarningController::ContentView::numberOfSubviews() const {
|
|
return (strlen(m_textView2.text()) == 0) ? 1 : 2;
|
|
}
|
|
|
|
View * WarningController::ContentView::subviewAtIndex(int index) {
|
|
assert(index >= 0 && index < numberOfSubviews());
|
|
View * views[2] = {&m_textView1, &m_textView2};
|
|
return views[index];
|
|
}
|
|
|
|
void WarningController::ContentView::layoutSubviews(bool force) {
|
|
if (numberOfSubviews() == 1) {
|
|
m_textView1.setFrame(bounds(), force);
|
|
m_textView1.setAlignment(k_middleAlignment, k_middleAlignment);
|
|
return;
|
|
}
|
|
assert(numberOfSubviews() == 2);
|
|
KDRect fullBounds = bounds();
|
|
KDCoordinate halfHeight = fullBounds.height()/2;
|
|
m_textView1.setFrame(KDRect(fullBounds.topLeft(), fullBounds.width(), halfHeight), force);
|
|
m_textView1.setAlignment(k_middleAlignment, k_shiftedAlignment);
|
|
m_textView2.setFrame(KDRect(fullBounds.left(), fullBounds.top()+halfHeight, fullBounds.width(), halfHeight), force);
|
|
}
|
|
|
|
KDSize WarningController::ContentView::minimalSizeForOptimalDisplay() const {
|
|
KDSize textSize1 = m_textView1.minimalSizeForOptimalDisplay();
|
|
if (numberOfSubviews() == 1) {
|
|
return KDSize(textSize1.width() + k_horizontalMargin, textSize1.height() + 2*k_topAndBottomMargin);
|
|
}
|
|
assert(numberOfSubviews() == 2);
|
|
KDSize textSize2 = m_textView2.minimalSizeForOptimalDisplay();
|
|
return KDSize(std::max(textSize1.width(), textSize2.width()) + k_horizontalMargin,
|
|
textSize1.height() + textSize2.height() + 2*k_topAndBottomMargin + k_middleMargin);
|
|
}
|
|
|
|
WarningController::WarningController(Responder * parentResponder, I18n::Message warningMessage1, I18n::Message warningMessage2) :
|
|
ViewController(parentResponder),
|
|
m_contentView(),
|
|
m_warningMessage1(warningMessage1),
|
|
m_exitOnOKBackEXE(false)
|
|
{
|
|
}
|
|
|
|
void WarningController::setLabel(I18n::Message label1, I18n::Message label2, bool specialExitKeys) {
|
|
m_contentView.setLabels(label1, label2);
|
|
m_exitOnOKBackEXE = specialExitKeys;
|
|
}
|
|
|
|
const char * WarningController::title() {
|
|
return I18n::translate(m_warningMessage1);
|
|
}
|
|
|
|
View * WarningController::view() {
|
|
return &m_contentView;
|
|
}
|
|
|
|
bool WarningController::handleEvent(Ion::Events::Event event) {
|
|
if (m_exitOnOKBackEXE) {
|
|
if (event != Ion::Events::OK
|
|
&& event != Ion::Events::EXE
|
|
&& event != Ion::Events::Back)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
if (event == Ion::Events::USBPlug || event == Ion::Events::USBEnumeration) {
|
|
return false;
|
|
}
|
|
Container::activeApp()->dismissModalViewController();
|
|
return true;
|
|
}
|