mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[apps] MessageView for OnBoarding update and USBConnected controllers
Change-Id: I3a775a81a62c408c9d02d98be25518d03fe5f9bf
This commit is contained in:
@@ -4,12 +4,63 @@
|
||||
|
||||
namespace OnBoarding {
|
||||
|
||||
static I18n::Message sOnBoardingMessages[] = {I18n::Message::UpdateAvailable, I18n::Message::UpdateMessage1, I18n::Message::UpdateMessage2, I18n::Message::UpdateMessage3, I18n::Message::UpdateMessage4};
|
||||
UpdateController::MessageViewWithSkip::MessageViewWithSkip(I18n::Message * messages, KDColor * colors, uint8_t numberOfMessages) :
|
||||
MessageView(messages, colors, numberOfMessages),
|
||||
m_skipView(KDText::FontSize::Small, I18n::Message::Skip, 1.0f, 0.5f),
|
||||
m_okView()
|
||||
{
|
||||
}
|
||||
|
||||
static KDColor sOnBoardingColors[] = {KDColorBlack, KDColorBlack, KDColorBlack, KDColorBlack, Palette::YellowDark};
|
||||
int UpdateController::MessageViewWithSkip::numberOfSubviews() const {
|
||||
return MessageView::numberOfSubviews() + 2;
|
||||
}
|
||||
|
||||
View * UpdateController::MessageViewWithSkip::subviewAtIndex(int index) {
|
||||
uint8_t numberOfMainMessages = MessageView::numberOfSubviews();
|
||||
if (index < numberOfMainMessages) {
|
||||
return MessageView::subviewAtIndex(index);
|
||||
}
|
||||
if (index == numberOfMainMessages) {
|
||||
return &m_skipView;
|
||||
}
|
||||
if (index == numberOfMainMessages + 1) {
|
||||
return &m_okView;
|
||||
}
|
||||
assert(false);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void UpdateController::MessageViewWithSkip::layoutSubviews() {
|
||||
// Layout the main message
|
||||
MessageView::layoutSubviews();
|
||||
// Layout the "skip (OK)"
|
||||
KDCoordinate height = bounds().height();
|
||||
KDCoordinate width = bounds().width();
|
||||
KDCoordinate textHeight = KDText::charSize(KDText::FontSize::Small).height();
|
||||
KDSize okSize = m_okView.minimalSizeForOptimalDisplay();
|
||||
m_skipView.setFrame(KDRect(0, height-k_bottomMargin-textHeight, width-okSize.width()-k_okMargin-k_skipMargin, textHeight));
|
||||
m_okView.setFrame(KDRect(width - okSize.width()-k_okMargin, height-okSize.height()-k_okMargin, okSize));
|
||||
}
|
||||
|
||||
static I18n::Message sOnBoardingMessages[] = {
|
||||
I18n::Message::UpdateAvailable,
|
||||
I18n::Message::UpdateMessage1,
|
||||
I18n::Message::UpdateMessage2,
|
||||
I18n::Message::BlankMessage,
|
||||
I18n::Message::UpdateMessage3,
|
||||
I18n::Message::UpdateMessage4};
|
||||
|
||||
static KDColor sOnBoardingColors[] = {
|
||||
KDColorBlack,
|
||||
KDColorBlack,
|
||||
KDColorBlack,
|
||||
KDColorWhite,
|
||||
KDColorBlack,
|
||||
Palette::YellowDark};
|
||||
|
||||
UpdateController::UpdateController() :
|
||||
MessageController(sOnBoardingMessages, sOnBoardingColors)
|
||||
ViewController(nullptr),
|
||||
m_messageViewWithSkip(sOnBoardingMessages, sOnBoardingColors, 6)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,34 @@
|
||||
#ifndef ON_BOARDING_UPDATE_CONTROLLER_H
|
||||
#define ON_BOARDING_UPDATE_CONTROLLER_H
|
||||
|
||||
#include "../shared/message_controller.h"
|
||||
#include <escher.h>
|
||||
#include "../i18n.h"
|
||||
#include "../shared/message_view.h"
|
||||
#include "../shared/ok_view.h"
|
||||
|
||||
namespace OnBoarding {
|
||||
|
||||
class UpdateController : public MessageController {
|
||||
class UpdateController : public ViewController {
|
||||
public:
|
||||
UpdateController();
|
||||
View * view() override { return &m_messageViewWithSkip; }
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
private:
|
||||
class MessageViewWithSkip : public MessageView {
|
||||
public:
|
||||
MessageViewWithSkip(I18n::Message * messages, KDColor * colors, uint8_t numberOfMessages);
|
||||
protected:
|
||||
int numberOfSubviews() const override;
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
private:
|
||||
constexpr static KDCoordinate k_bottomMargin = 13;
|
||||
constexpr static KDCoordinate k_okMargin = 10;
|
||||
constexpr static KDCoordinate k_skipMargin = 4;
|
||||
MessageTextView m_skipView;
|
||||
Shared::OkView m_okView;
|
||||
};
|
||||
MessageViewWithSkip m_messageViewWithSkip;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ AsinhCommandWithArg = "asinh(x)"
|
||||
AtanhCommandWithArg = "atanh(x)"
|
||||
B = "b"
|
||||
BinomialCommandWithArg = "binomial(n,k)"
|
||||
BlankMessage = " "
|
||||
CapitalAlpha = "ALPHA"
|
||||
CeilCommandWithArg = "ceil(x)"
|
||||
ConfidenceCommandWithArg = "confidence(f,n)"
|
||||
|
||||
@@ -29,7 +29,7 @@ app_objs += $(addprefix apps/shared/,\
|
||||
list_controller.o\
|
||||
list_parameter_controller.o\
|
||||
memoized_curve_view_range.o\
|
||||
message_controller.o\
|
||||
message_view.o\
|
||||
new_function_cell.o\
|
||||
ok_view.o\
|
||||
parameter_text_field_delegate.o\
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
#include "message_controller.h"
|
||||
#include "../apps_container.h"
|
||||
#include <assert.h>
|
||||
|
||||
MessageController::MessageController(I18n::Message * messages, KDColor * colors) :
|
||||
MessageController::MessageController(I18n::Message * messages, KDColor * colors, uint8_t numberOfMessages) :
|
||||
ViewController(nullptr),
|
||||
m_contentView(messages, colors)
|
||||
m_messageViewWithSkip(messages, colors, numberOfMessages)
|
||||
{
|
||||
}
|
||||
|
||||
View * MessageController::view() {
|
||||
return &m_contentView;
|
||||
}
|
||||
|
||||
bool MessageController::handleEvent(Ion::Events::Event event) {
|
||||
if (event != Ion::Events::Back && event != Ion::Events::OnOff && event != Ion::Events::Home) {
|
||||
app()->dismissModalViewController();
|
||||
@@ -19,59 +14,3 @@ bool MessageController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
MessageController::ContentView::ContentView(I18n::Message * messages, KDColor * colors) :
|
||||
m_titleTextView(KDText::FontSize::Large, messages[0], 0.5f, 0.5f, colors[0]),
|
||||
m_messageTextView1(KDText::FontSize::Small, messages[1], 0.5f, 0.5f, colors[1]),
|
||||
m_messageTextView2(KDText::FontSize::Small, messages[2], 0.5f, 0.5f, colors[2]),
|
||||
m_messageTextView3(KDText::FontSize::Small, messages[3], 0.5f, 0.5f, colors[3]),
|
||||
m_messageTextView4(KDText::FontSize::Small, messages[4], 0.5f, 0.5f, colors[4]),
|
||||
m_skipView(KDText::FontSize::Small, I18n::Message::Skip, 1.0f, 0.5f),
|
||||
m_okView()
|
||||
{
|
||||
}
|
||||
|
||||
void MessageController::ContentView::drawRect(KDContext * ctx, KDRect rect) const {
|
||||
ctx->fillRect(bounds(), KDColorWhite);
|
||||
}
|
||||
|
||||
int MessageController::ContentView::numberOfSubviews() const {
|
||||
return 7;
|
||||
}
|
||||
|
||||
View * MessageController::ContentView::subviewAtIndex(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return &m_titleTextView;
|
||||
case 1:
|
||||
return &m_messageTextView1;
|
||||
case 2:
|
||||
return &m_messageTextView2;
|
||||
case 3:
|
||||
return &m_messageTextView3;
|
||||
case 4:
|
||||
return &m_messageTextView4;
|
||||
case 5:
|
||||
return &m_skipView;
|
||||
case 6:
|
||||
return &m_okView;
|
||||
default:
|
||||
assert(false);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void MessageController::ContentView::layoutSubviews() {
|
||||
KDCoordinate height = bounds().height();
|
||||
KDCoordinate width = bounds().width();
|
||||
KDCoordinate titleHeight = m_titleTextView.minimalSizeForOptimalDisplay().height();
|
||||
KDCoordinate textHeight = KDText::charSize(KDText::FontSize::Small).height();
|
||||
m_titleTextView.setFrame(KDRect(0, Metric::MessageScreenTitleMargin, width, titleHeight));
|
||||
m_messageTextView1.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight, width, textHeight));
|
||||
m_messageTextView2.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+textHeight, width, textHeight));
|
||||
m_messageTextView3.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+2*textHeight+Metric::MessageScreenParagraphMargin, width, textHeight));
|
||||
m_messageTextView4.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+3*textHeight+Metric::MessageScreenParagraphMargin, width, textHeight));
|
||||
KDSize okSize = m_okView.minimalSizeForOptimalDisplay();
|
||||
m_skipView.setFrame(KDRect(0, height-k_bottomMargin-textHeight, width-okSize.width()-k_okMargin-k_skipMargin, textHeight));
|
||||
m_okView.setFrame(KDRect(width - okSize.width()-k_okMargin, height-okSize.height()-k_okMargin, okSize));
|
||||
}
|
||||
|
||||
@@ -2,34 +2,15 @@
|
||||
#define SHARED_MESSAGE_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#include "ok_view.h"
|
||||
#include "message_view_with_skip.h"
|
||||
|
||||
class MessageController : public ViewController {
|
||||
public:
|
||||
MessageController(I18n::Message * messages, KDColor * colors);
|
||||
View * view() override;
|
||||
MessageController(I18n::Message * messages, KDColor * colors, uint8_t numberOfMessages);
|
||||
View * view() override { return &m_messageViewWithSkip; }
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
ContentView(I18n::Message * messages, KDColor * colors);
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
private:
|
||||
constexpr static KDCoordinate k_bottomMargin = 13;
|
||||
constexpr static KDCoordinate k_okMargin = 10;
|
||||
constexpr static KDCoordinate k_skipMargin = 4;
|
||||
int numberOfSubviews() const override;
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
MessageTextView m_titleTextView;
|
||||
MessageTextView m_messageTextView1;
|
||||
MessageTextView m_messageTextView2;
|
||||
MessageTextView m_messageTextView3;
|
||||
MessageTextView m_messageTextView4;
|
||||
MessageTextView m_skipView;
|
||||
Shared::OkView m_okView;
|
||||
};
|
||||
ContentView m_contentView;
|
||||
MessageViewWithSkip m_messageViewWithSkip;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
37
apps/shared/message_view.cpp
Normal file
37
apps/shared/message_view.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#include "message_view.h"
|
||||
#include <assert.h>
|
||||
|
||||
MessageView::MessageView(I18n::Message * messages, KDColor * colors, uint8_t numberOfMessages) {
|
||||
m_numberOfMessages = numberOfMessages < k_maxNumberOfMessages ? numberOfMessages : k_maxNumberOfMessages;
|
||||
for (uint8_t i = 0; i < m_numberOfMessages; i++) {
|
||||
m_messageTextViews[i].setFontSize(i == 0 ? KDText::FontSize::Large : KDText::FontSize::Small);
|
||||
m_messageTextViews[i].setMessage(messages[i]);
|
||||
m_messageTextViews[i].setAlignment(0.5f, 0.5f);
|
||||
m_messageTextViews[i].setTextColor(colors[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageView::drawRect(KDContext * ctx, KDRect rect) const {
|
||||
ctx->fillRect(bounds(), KDColorWhite);
|
||||
}
|
||||
|
||||
View * MessageView::subviewAtIndex(int index) {
|
||||
if (index >= m_numberOfMessages) {
|
||||
assert(false);
|
||||
return nullptr;
|
||||
}
|
||||
return &(m_messageTextViews[index]);
|
||||
}
|
||||
|
||||
void MessageView::layoutSubviews() {
|
||||
if (m_numberOfMessages == 0) {
|
||||
return;
|
||||
}
|
||||
KDCoordinate width = bounds().width();
|
||||
KDCoordinate titleHeight = m_messageTextViews[0].minimalSizeForOptimalDisplay().height();
|
||||
KDCoordinate textHeight = KDText::charSize(KDText::FontSize::Small).height();
|
||||
m_messageTextViews[0].setFrame(KDRect(0, k_titleMargin, width, titleHeight));
|
||||
for (uint8_t i = 1; i < m_numberOfMessages; i++) {
|
||||
m_messageTextViews[i].setFrame(KDRect(0, k_paragraphHeight + (i-1) * textHeight, width, textHeight));
|
||||
}
|
||||
}
|
||||
23
apps/shared/message_view.h
Normal file
23
apps/shared/message_view.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifndef SHARED_MESSAGE_VIEW_H
|
||||
#define SHARED_MESSAGE_VIEW_H
|
||||
|
||||
#include <escher.h>
|
||||
|
||||
class MessageView : public View {
|
||||
public:
|
||||
MessageView(I18n::Message * messages, KDColor * colors, uint8_t numberOfMessages);
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
protected:
|
||||
int numberOfSubviews() const override { return m_numberOfMessages; }
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
private:
|
||||
constexpr static KDCoordinate k_titleMargin = 40;
|
||||
constexpr static KDCoordinate k_paragraphHeight = 100;
|
||||
constexpr static uint8_t k_maxNumberOfMessages = 8;
|
||||
MessageTextView m_messageTextViews[k_maxNumberOfMessages];
|
||||
uint8_t m_numberOfMessages;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "usb_connected_controller.h"
|
||||
#include "../apps_container.h"
|
||||
#include <assert.h>
|
||||
#include "../i18n.h"
|
||||
|
||||
namespace USB {
|
||||
|
||||
@@ -9,6 +8,7 @@ static I18n::Message sUSBConnectedMessages[] = {
|
||||
I18n::Message::ConnectedMessage1,
|
||||
I18n::Message::ConnectedMessage2,
|
||||
I18n::Message::ConnectedMessage3,
|
||||
I18n::Message::BlankMessage,
|
||||
I18n::Message::ConnectedMessage4,
|
||||
I18n::Message::ConnectedMessage5,
|
||||
I18n::Message::ConnectedMessage6};
|
||||
@@ -18,63 +18,14 @@ static KDColor sUSBConnectedColors[] = {
|
||||
KDColorBlack,
|
||||
KDColorBlack,
|
||||
Palette::YellowDark,
|
||||
KDColorWhite,
|
||||
KDColorBlack,
|
||||
KDColorBlack,
|
||||
KDColorBlack};
|
||||
|
||||
USBConnectedController::ContentView::ContentView(I18n::Message * messages, KDColor * colors) :
|
||||
m_titleTextView(KDText::FontSize::Large, messages[0], 0.5f, 0.5f, colors[0]),
|
||||
m_messageTextView1(KDText::FontSize::Small, messages[1], 0.5f, 0.5f, colors[1]),
|
||||
m_messageTextView2(KDText::FontSize::Small, messages[2], 0.5f, 0.5f, colors[2]),
|
||||
m_messageTextView3(KDText::FontSize::Small, messages[3], 0.5f, 0.5f, colors[3]),
|
||||
m_messageTextView4(KDText::FontSize::Small, messages[4], 0.5f, 0.5f, colors[4]),
|
||||
m_messageTextView5(KDText::FontSize::Small, messages[5], 0.5f, 0.5f, colors[5]),
|
||||
m_messageTextView6(KDText::FontSize::Small, messages[6], 0.5f, 0.5f, colors[6])
|
||||
{
|
||||
}
|
||||
|
||||
void USBConnectedController::ContentView::drawRect(KDContext * ctx, KDRect rect) const {
|
||||
ctx->fillRect(bounds(), KDColorWhite);
|
||||
}
|
||||
|
||||
View * USBConnectedController::ContentView::subviewAtIndex(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return &m_titleTextView;
|
||||
case 1:
|
||||
return &m_messageTextView1;
|
||||
case 2:
|
||||
return &m_messageTextView2;
|
||||
case 3:
|
||||
return &m_messageTextView3;
|
||||
case 4:
|
||||
return &m_messageTextView4;
|
||||
case 5:
|
||||
return &m_messageTextView5;
|
||||
case 6:
|
||||
return &m_messageTextView6;
|
||||
default:
|
||||
assert(false);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void USBConnectedController::ContentView::layoutSubviews() {
|
||||
KDCoordinate width = bounds().width();
|
||||
KDCoordinate titleHeight = m_titleTextView.minimalSizeForOptimalDisplay().height();
|
||||
KDCoordinate textHeight = KDText::charSize(KDText::FontSize::Small).height();
|
||||
m_titleTextView.setFrame(KDRect(0, Metric::MessageScreenTitleMargin, width, titleHeight));
|
||||
m_messageTextView1.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight, width, textHeight));
|
||||
m_messageTextView2.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+textHeight, width, textHeight));
|
||||
m_messageTextView3.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+2*textHeight, width, textHeight));
|
||||
m_messageTextView4.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+3*textHeight+Metric::MessageScreenParagraphMargin, width, textHeight));
|
||||
m_messageTextView5.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+4*textHeight+Metric::MessageScreenParagraphMargin, width, textHeight));
|
||||
m_messageTextView6.setFrame(KDRect(0, Metric::MessageScreenParagraphHeight+5*textHeight+Metric::MessageScreenParagraphMargin, width, textHeight));
|
||||
}
|
||||
|
||||
USBConnectedController::USBConnectedController() :
|
||||
ViewController(nullptr),
|
||||
m_contentView(sUSBConnectedMessages, sUSBConnectedColors)
|
||||
m_messageView(sUSBConnectedMessages, sUSBConnectedColors, 8)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -2,32 +2,17 @@
|
||||
#define USB_USB_CONNECTED_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#include "../shared/message_view.h"
|
||||
|
||||
namespace USB {
|
||||
|
||||
class USBConnectedController : public ViewController {
|
||||
public:
|
||||
USBConnectedController();
|
||||
View * view() override { return &m_contentView; }
|
||||
View * view() override { return &m_messageView; }
|
||||
bool handleEvent(Ion::Events::Event event) override { return false; }
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
ContentView(I18n::Message * messages, KDColor * colors);
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
private:
|
||||
int numberOfSubviews() const override { return 7; }
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
MessageTextView m_titleTextView;
|
||||
MessageTextView m_messageTextView1;
|
||||
MessageTextView m_messageTextView2;
|
||||
MessageTextView m_messageTextView3;
|
||||
MessageTextView m_messageTextView4;
|
||||
MessageTextView m_messageTextView5;
|
||||
MessageTextView m_messageTextView6;
|
||||
};
|
||||
ContentView m_contentView;
|
||||
MessageView m_messageView;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -26,10 +26,6 @@ public:
|
||||
constexpr static KDCoordinate StoreRowHeight = 50;
|
||||
constexpr static KDCoordinate ToolboxRowHeight = 40;
|
||||
constexpr static KDCoordinate StackTitleHeight = 20;
|
||||
constexpr static KDCoordinate MessageScreenTitleMargin = 40;
|
||||
constexpr static KDCoordinate MessageScreenParagraphHeight = 100;
|
||||
constexpr static KDCoordinate MessageScreenParagraphMargin = 13;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user