mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/stats] Start developping the input formula view in data
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
app_objs += $(addprefix apps/shared/,\
|
||||
banner_view.o\
|
||||
buffer_function_title_cell.o\
|
||||
buffer_text_view_with_text_field.o\
|
||||
button_with_separator.o\
|
||||
cursor_view.o\
|
||||
curve_view.o\
|
||||
|
||||
37
apps/shared/buffer_text_view_with_text_field.cpp
Normal file
37
apps/shared/buffer_text_view_with_text_field.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#include "buffer_text_view_with_text_field.h"
|
||||
|
||||
namespace Shared {
|
||||
|
||||
BufferTextViewWithTextField::BufferTextViewWithTextField(Responder * parentResponder, TextFieldDelegate * delegate, KDText::FontSize size) :
|
||||
View(),
|
||||
Responder(parentResponder),
|
||||
m_bufferTextView(size, 0.0f, 0.5f),
|
||||
m_textField(this, m_textFieldBuffer, m_textFieldBuffer, k_textFieldBufferSize, delegate, false, size, 0.0f, 0.5f),
|
||||
m_textFieldBuffer{}
|
||||
{
|
||||
}
|
||||
|
||||
KDSize BufferTextViewWithTextField::minimalSizeForOptimalDisplay() const {
|
||||
return m_bufferTextView.minimalSizeForOptimalDisplay();
|
||||
}
|
||||
|
||||
void BufferTextViewWithTextField::setBufferText(const char * text) {
|
||||
m_bufferTextView.setText(text);
|
||||
}
|
||||
|
||||
void BufferTextViewWithTextField::didBecomeFirstResponder() {
|
||||
app()->setFirstResponder(&m_textField);
|
||||
}
|
||||
|
||||
View * BufferTextViewWithTextField::subviewAtIndex(int index) {
|
||||
assert(index >= 0 && index < numberOfSubviews());
|
||||
View * views[] = {&m_bufferTextView, &m_textField};
|
||||
return views[index];
|
||||
}
|
||||
|
||||
void BufferTextViewWithTextField::layoutSubviews() {
|
||||
m_bufferTextView.setFrame(KDRect(0, 0, k_height, k_bufferTextWidth));
|
||||
m_textField.setFrame(KDRect(k_bufferTextWidth, 0, k_height, bounds().width() - k_bufferTextWidth));
|
||||
}
|
||||
|
||||
}
|
||||
30
apps/shared/buffer_text_view_with_text_field.h
Normal file
30
apps/shared/buffer_text_view_with_text_field.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef SHARED_BUFFER_TEXT_VIEW_WITH_TEXT_FIELD_H
|
||||
#define SHARED_BUFFER_TEXT_VIEW_WITH_TEXT_FIELD_H
|
||||
#include <escher.h>
|
||||
|
||||
namespace Shared {
|
||||
|
||||
class BufferTextViewWithTextField : public View, public Responder {
|
||||
public:
|
||||
constexpr static KDCoordinate k_height = 50; //TODO
|
||||
BufferTextViewWithTextField(Responder * parentResponder, TextFieldDelegate * delegate = nullptr, KDText::FontSize size = KDText::FontSize::Large);
|
||||
KDSize minimalSizeForOptimalDisplay() const override;
|
||||
void setBufferText(const char * text);
|
||||
void setTextFieldText(const char * text);
|
||||
|
||||
// Responder
|
||||
void didBecomeFirstResponder() override;
|
||||
private:
|
||||
constexpr static int k_textFieldBufferSize = TextField::maxBufferSize();
|
||||
constexpr static KDCoordinate k_bufferTextWidth = 70; //TODO
|
||||
int numberOfSubviews() const override { return 2; }
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
BufferTextView m_bufferTextView;
|
||||
TextField m_textField;
|
||||
char m_textFieldBuffer[k_textFieldBufferSize];
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Shared {
|
||||
|
||||
class EditableCellTableViewController : public TabTableController , public RegularTableViewDataSource , public TextFieldDelegate {
|
||||
class EditableCellTableViewController : public TabTableController , public RegularTableViewDataSource, public TextFieldDelegate {
|
||||
public:
|
||||
EditableCellTableViewController(Responder * parentResponder);
|
||||
bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "store_controller.h"
|
||||
#include "store_selectable_table_view.h"
|
||||
#include "../apps_container.h"
|
||||
#include "../constant.h"
|
||||
#include <escher/metric.h>
|
||||
@@ -9,6 +8,35 @@ using namespace Poincare;
|
||||
|
||||
namespace Shared {
|
||||
|
||||
StoreController::ContentView::ContentView(FloatPairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, TextFieldDelegate * textFieldDelegate) :
|
||||
View(),
|
||||
Responder(parentResponder),
|
||||
m_dataView(store, this, dataSource, selectionDataSource),
|
||||
m_formulaInputView(this, textFieldDelegate),
|
||||
m_displayInputFormulaView(false)
|
||||
{
|
||||
m_dataView.setBackgroundColor(Palette::WallScreenDark);
|
||||
m_dataView.setVerticalCellOverlap(0);
|
||||
m_dataView.setMargins(k_margin, k_scrollBarMargin, k_scrollBarMargin, k_margin);
|
||||
}
|
||||
|
||||
void StoreController::ContentView::didBecomeFirstResponder() {
|
||||
app()->setFirstResponder(&m_dataView);
|
||||
}
|
||||
|
||||
View * StoreController::ContentView::subviewAtIndex(int index) {
|
||||
assert(index >= 0 && index < numberOfSubviews());
|
||||
View * views[] = {&m_dataView, &m_formulaInputView};
|
||||
return views[index];
|
||||
}
|
||||
|
||||
void StoreController::ContentView::layoutSubviews() {
|
||||
KDRect dataViewFrame(0, 0, bounds().width(), bounds().height() - (m_displayInputFormulaView ? BufferTextViewWithTextField::k_height : 0));
|
||||
m_dataView.setFrame(dataViewFrame);
|
||||
KDRect formulaFrame(0, bounds().height() - BufferTextViewWithTextField::k_height, bounds().width(), m_displayInputFormulaView ? BufferTextViewWithTextField::k_height : 0);
|
||||
m_formulaInputView.setFrame(formulaFrame);
|
||||
}
|
||||
|
||||
StoreController::StoreController(Responder * parentResponder, FloatPairStore * store, ButtonRowController * header) :
|
||||
EditableCellTableViewController(parentResponder),
|
||||
ButtonRowDelegate(header, nullptr),
|
||||
@@ -143,12 +171,17 @@ void StoreController::didBecomeFirstResponder() {
|
||||
selectCellAtLocation(0, 0);
|
||||
}
|
||||
EditableCellTableViewController::didBecomeFirstResponder();
|
||||
app()->setFirstResponder(static_cast<ContentView *>(view()));
|
||||
}
|
||||
|
||||
Responder * StoreController::tabController() const {
|
||||
return (parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
SelectableTableView * StoreController::selectableTableView() {
|
||||
return static_cast<ContentView *>(view())->dataView();
|
||||
}
|
||||
|
||||
bool StoreController::cellAtLocationIsEditable(int columnIndex, int rowIndex) {
|
||||
if (rowIndex > 0) {
|
||||
return true;
|
||||
@@ -178,15 +211,11 @@ int StoreController::maxNumberOfElements() const {
|
||||
}
|
||||
|
||||
View * StoreController::loadView() {
|
||||
StoreSelectableTableView * tableView = new StoreSelectableTableView(m_store, this, this, this);
|
||||
tableView->setBackgroundColor(Palette::WallScreenDark);
|
||||
tableView->setVerticalCellOverlap(0);
|
||||
|
||||
ContentView * contentView = new ContentView(m_store, this, this, this, this);
|
||||
for (int i = 0; i < k_maxNumberOfEditableCells; i++) {
|
||||
m_editableCells[i] = new StoreCell(tableView, this, m_draftTextBuffer);
|
||||
m_editableCells[i] = new StoreCell(contentView->dataView(), this, m_draftTextBuffer);
|
||||
}
|
||||
tableView->setMargins(k_margin, k_scrollBarMargin, k_scrollBarMargin, k_margin - Metric::TableSeparatorThickness);
|
||||
return tableView;
|
||||
return contentView;
|
||||
}
|
||||
|
||||
void StoreController::unloadView(View * view) {
|
||||
@@ -194,7 +223,7 @@ void StoreController::unloadView(View * view) {
|
||||
delete m_editableCells[i];
|
||||
m_editableCells[i] = nullptr;
|
||||
}
|
||||
EditableCellTableViewController::unloadView(view);
|
||||
delete view;
|
||||
}
|
||||
|
||||
bool StoreController::cellShouldBeTransparent(int i, int j) {
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
#define SHARED_STORE_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#include "buffer_text_view_with_text_field.h"
|
||||
#include "editable_cell_table_view_controller.h"
|
||||
#include "float_pair_store.h"
|
||||
#include "store_cell.h"
|
||||
#include "store_parameter_controller.h"
|
||||
#include "store_selectable_table_view.h"
|
||||
|
||||
namespace Shared {
|
||||
|
||||
@@ -43,7 +45,26 @@ protected:
|
||||
constexpr static int k_numberOfTitleCells = 4;
|
||||
static constexpr int k_titleCellType = 0;
|
||||
static constexpr int k_editableCellType = 1;
|
||||
|
||||
class ContentView : public View , public Responder {
|
||||
public:
|
||||
ContentView(FloatPairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, TextFieldDelegate * textFieldDelegate);
|
||||
StoreSelectableTableView * dataView() { return &m_dataView; }
|
||||
// Responder
|
||||
void didBecomeFirstResponder() override;
|
||||
private:
|
||||
static constexpr KDCoordinate k_margin = 8;
|
||||
static constexpr KDCoordinate k_scrollBarMargin = Metric::CommonRightMargin;
|
||||
int numberOfSubviews() const override { return 1 + m_displayInputFormulaView; }
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
StoreSelectableTableView m_dataView;
|
||||
BufferTextViewWithTextField m_formulaInputView;
|
||||
bool m_displayInputFormulaView;
|
||||
};
|
||||
|
||||
Responder * tabController() const override;
|
||||
SelectableTableView * selectableTableView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
bool cellAtLocationIsEditable(int columnIndex, int rowIndex) override;
|
||||
@@ -59,7 +80,6 @@ protected:
|
||||
StoreParameterController m_storeParameterController;
|
||||
private:
|
||||
bool cellShouldBeTransparent(int i, int j);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ void TabTableController::willExitResponderChain(Responder * nextFirstResponder)
|
||||
}
|
||||
|
||||
SelectableTableView * TabTableController::selectableTableView() {
|
||||
return (SelectableTableView *)view();
|
||||
return static_cast<SelectableTableView *>(view());
|
||||
}
|
||||
|
||||
View * TabTableController::loadView() {
|
||||
|
||||
@@ -15,7 +15,7 @@ public:
|
||||
void viewWillAppear() override;
|
||||
void willExitResponderChain(Responder * nextFirstResponder) override;
|
||||
protected:
|
||||
SelectableTableView * selectableTableView();
|
||||
virtual SelectableTableView * selectableTableView();
|
||||
virtual View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
virtual Responder * tabController() const = 0;
|
||||
|
||||
Reference in New Issue
Block a user