[apps] MessageView for OnBoarding update and USBConnected controllers

Change-Id: I3a775a81a62c408c9d02d98be25518d03fe5f9bf
This commit is contained in:
Léa Saviot
2018-04-05 14:57:36 +02:00
parent 3059f27c00
commit 50cc2a310b
11 changed files with 151 additions and 167 deletions

View File

@@ -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)
{
}

View File

@@ -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;
};
}

View File

@@ -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)"

View File

@@ -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\

View File

@@ -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));
}

View File

@@ -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

View 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));
}
}

View 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

View File

@@ -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)
{
}

View File

@@ -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;
};
}

View File

@@ -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