[escher] Divide class selectable table view delegate in 2: selectable

table view data source & selectable table view delegate

Change-Id: I90fbd61e271db3754c13bd0069b95c2026de6814
This commit is contained in:
Émilie Feral
2017-05-17 17:03:03 +02:00
parent 71284311bb
commit af4d6b6e81
54 changed files with 153 additions and 136 deletions

View File

@@ -181,7 +181,7 @@ CalculationSelectableTableView * HistoryController::selectableTableView() {
}
View * HistoryController::loadView() {
CalculationSelectableTableView * tableView = new CalculationSelectableTableView(this, this, this);
CalculationSelectableTableView * tableView = new CalculationSelectableTableView(this, this, this, this);
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
m_calculationHistory[i] = new HistoryViewCell(tableView);
}

View File

@@ -11,7 +11,7 @@ namespace Calculation {
class App;
class HistoryController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDelegate {
class HistoryController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDataSource, public SelectableTableViewDelegate {
public:
HistoryController(Responder * parentResponder, CalculationStore * calculationStore);

View File

@@ -5,7 +5,7 @@
namespace Calculation {
class ScrollableExpressionView : public ScrollableView, public ScrollViewDelegate {
class ScrollableExpressionView : public ScrollableView, public ScrollViewDataSource {
public:
ScrollableExpressionView(Responder * parentResponder);
void setExpression(Poincare::ExpressionLayout * expressionLayout);

View File

@@ -3,8 +3,8 @@
namespace Calculation {
CalculationSelectableTableView::CalculationSelectableTableView(Responder * parentResponder, TableViewDataSource * dataSource,
SelectableTableViewDelegate * delegate) :
::SelectableTableView(parentResponder, dataSource, 0, 0, 0, 0, 0, 0, delegate, false)
SelectableTableViewDataSource * selectionDataSource, SelectableTableViewDelegate * delegate) :
::SelectableTableView(parentResponder, dataSource, 0, 0, 0, 0, 0, 0, selectionDataSource, delegate, false)
{
}

View File

@@ -8,7 +8,7 @@ namespace Calculation {
class CalculationSelectableTableView : public ::SelectableTableView {
public:
CalculationSelectableTableView(Responder * parentResponder, TableViewDataSource * dataSource,
SelectableTableViewDelegate * delegate = nullptr);
SelectableTableViewDataSource * selectionDataSource, SelectableTableViewDelegate * delegate = nullptr);
void scrollToCell(int i, int j) override;
void scrollToSubviewOfTypeOfCellAtLocation(HistoryViewCell::SubviewType subviewType, int i, int j);
};

View File

@@ -8,7 +8,7 @@ namespace Graph {
class ValuesController;
class DerivativeParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class DerivativeParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
DerivativeParameterController(ValuesController * valuesController);

View File

@@ -7,7 +7,7 @@ extern "C" {
namespace Home {
Controller::ContentView::ContentView(Controller * controller) :
m_selectableTableView(controller, controller, 0, 0, 0, k_sideMargin, 0, k_sideMargin, controller, true, false,
m_selectableTableView(controller, controller, 0, 0, 0, k_sideMargin, 0, k_sideMargin, controller, controller, true, false,
KDColorBlack, k_indicatorThickness, Palette::GreyDark, Palette::GreyMiddle, k_indicatorMargin)
{
}

View File

@@ -8,7 +8,7 @@ class AppsContainer;
namespace Home {
class Controller : public ViewController, public SimpleTableViewDataSource, public SelectableTableViewDelegate {
class Controller : public ViewController, public SimpleTableViewDataSource, public SelectableTableViewDataSource, public SelectableTableViewDelegate {
public:
Controller(Responder * parentResponder, ::AppsContainer * container);

View File

@@ -134,7 +134,7 @@ void MathToolbox::ListController::setFirstSelectedRow(int firstSelectedRow) {
MathToolbox::MathToolbox() :
Toolbox(nullptr, &m_listController),
m_selectableTableView(SelectableTableView(&m_listController, this, 0, 1, 0, 0, 0, 0, this, false)),
m_selectableTableView(SelectableTableView(&m_listController, this, 0, 1, 0, 0, 0, 0, this, nullptr, false)),
m_listController(this, &m_selectableTableView),
m_nodeModel(nullptr)
{

View File

@@ -8,7 +8,7 @@
* where we are located. It enables to know which rows are leaves and which are
* subtrees. */
class MathToolbox : public Toolbox, public ListViewDataSource, public SelectableTableViewDelegate {
class MathToolbox : public Toolbox, public ListViewDataSource, public SelectableTableViewDataSource {
public:
MathToolbox();
void didBecomeFirstResponder() override;

View File

@@ -8,7 +8,7 @@
namespace OnBoarding {
class LanguageController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class LanguageController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
LanguageController(Responder * parentResponder, LogoController * logoController, UpdateController * updateController);
View * view() override;

View File

@@ -56,7 +56,7 @@ void ImageCell::setImage(const Image * image, const Image * focusedImage) {
ImageTableView::ImageTableView(Responder * parentResponder, Calculation * calculation, CalculationController * calculationController) :
View(),
Responder(parentResponder),
m_selectableTableView(this, this, 0, 0, 0, 0, 0, 0, this, false, false),
m_selectableTableView(this, this, 0, 0, 0, 0, 0, 0, this, nullptr, false, false),
m_isSelected(false),
m_selectedIcon(0),
m_calculation(calculation),

View File

@@ -26,7 +26,7 @@ private:
const Image * m_focusedIcon;
};
class ImageTableView : public View, public Responder, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class ImageTableView : public View, public Responder, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
ImageTableView(Responder * parentResponder, Calculation * calculation, CalculationController * calculationController);
void setCalculation(Calculation * calculation, int index);

View File

@@ -8,7 +8,7 @@
namespace Probability {
class LawController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class LawController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
LawController(Responder * parentResponder);
~LawController();

View File

@@ -7,7 +7,7 @@
namespace Regression {
class InitialisationParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class InitialisationParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
InitialisationParameterController(Responder * parentResponder, Store * store);
View * view() override;

View File

@@ -8,7 +8,7 @@
namespace Regression {
class PredictionParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class PredictionParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
PredictionParameterController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor);
View * view() override;

View File

@@ -15,7 +15,7 @@ TypeParameterController::TypeParameterController(Responder * parentResponder, Se
m_singleRecurrenceCell(I18n::Message::SingleRecurrence, cellLayout),
m_doubleRecurenceCell(I18n::Message::DoubleRecurrence, cellLayout),
m_expressionLayouts{},
m_selectableTableView(this, this, 0, 1, topMargin, rightMargin, bottomMargin, leftMargin, this, false),
m_selectableTableView(this, this, 0, 1, topMargin, rightMargin, bottomMargin, leftMargin, this, nullptr, false),
m_sequenceStore(sequenceStore),
m_sequence(nullptr),
m_listController(list)

View File

@@ -8,7 +8,7 @@ namespace Sequence {
class ListController;
class TypeParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class TypeParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore, ListController * list,
TableCell::Layout cellLayout, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0,

View File

@@ -7,7 +7,7 @@
namespace Settings {
class MainController : public ViewController, public ListViewDataSource, public SelectableTableViewDelegate {
class MainController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource {
public:
MainController(Responder * parentResponder);
~MainController();

View File

@@ -6,7 +6,7 @@
namespace Settings {
class SubController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class SubController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
SubController(Responder * parentResponder);
~SubController();

View File

@@ -189,7 +189,7 @@ I18n::Message FloatParameterController::okButtonText() {
}
View * FloatParameterController::loadView() {
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this);
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this, this);
m_okButton = new ButtonWithSeparator(tableView, okButtonText(), Invocation([](void * context, void * sender) {
FloatParameterController * parameterController = (FloatParameterController *) context;
parameterController->buttonAction();

View File

@@ -10,7 +10,7 @@ namespace Shared {
/* This controller edits float parameter of any model (given through
* parameterAtIndex and setParameterAtIndex). */
class FloatParameterController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDelegate, public TextFieldDelegate {
class FloatParameterController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDataSource, public SelectableTableViewDelegate, public TextFieldDelegate {
public:
FloatParameterController(Responder * parentResponder);
void didBecomeFirstResponder() override;

View File

@@ -9,7 +9,7 @@
namespace Shared {
class FunctionCurveParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class FunctionCurveParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
FunctionCurveParameterController(InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor);
View * view() override;

View File

@@ -7,7 +7,7 @@
namespace Shared {
class InitialisationParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class InitialisationParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
InitialisationParameterController(Responder * parentResponder, Shared::InteractiveCurveViewRange * graphRange);
View * view() override;

View File

@@ -294,7 +294,7 @@ bool ListController::removeFunctionRow(Function * function) {
View * ListController::loadView() {
m_emptyCell = new EvenOddCell();
m_addNewFunction = new NewFunctionCell(m_addNewMessage);
return new SelectableTableView(this, this, 0, 0, 0, 0, 0, 0, this, false, true);
return new SelectableTableView(this, this, 0, 0, 0, 0, 0, 0, this, nullptr, false, true);
}
void ListController::unloadView(View * view) {

View File

@@ -9,7 +9,7 @@
namespace Shared {
class ListController : public DynamicViewController, public ButtonRowDelegate, public TableViewDataSource, public SelectableTableViewDelegate {
class ListController : public DynamicViewController, public ButtonRowDelegate, public TableViewDataSource, public SelectableTableViewDataSource {
public:
ListController(Responder * parentResponder, FunctionStore * functionStore, ButtonRowController * header, ButtonRowController * footer, I18n::Message text);
int numberOfColumns() override;

View File

@@ -8,7 +8,7 @@
namespace Shared {
class ListParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class ListParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
ListParameterController(Responder * parentResponder, FunctionStore * functionStore, I18n::Message functionColorMessage, I18n::Message deleteFunctionMessage);

View File

@@ -7,7 +7,7 @@
namespace Shared {
class StoreParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class StoreParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
StoreParameterController(Responder * parentResponder, FloatPairStore * store);
void selectXColumn(bool xColumnSelected);

View File

@@ -29,7 +29,7 @@ SelectableTableView * TabTableController::selectableTableView() {
}
View * TabTableController::loadView() {
return new SelectableTableView(this, m_dataSource, 0, 0, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this, true, true);
return new SelectableTableView(this, m_dataSource, 0, 0, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this, this, true, true);
}
void TabTableController::unloadView(View * view) {

View File

@@ -8,7 +8,7 @@ namespace Shared {
/* Tab table controller is a controller whose view is a selectable table view
* and whose one ancestor is a tab */
class TabTableController : public DynamicViewController, public SelectableTableViewDelegate {
class TabTableController : public DynamicViewController, public SelectableTableViewDelegate, public SelectableTableViewDataSource {
public:
TabTableController(Responder * parentResponder, TableViewDataSource * dataSource);
void didBecomeFirstResponder() override;

View File

@@ -296,7 +296,7 @@ float ValuesController::evaluationOfAbscissaAtColumn(float abscissa, int columnI
}
View * ValuesController::loadView() {
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 0, k_topMargin, k_rightMargin, k_bottomMargin, k_leftMargin, this, true, true, Palette::WallScreenDark, 13, Palette::GreyDark, Palette::GreyMiddle);
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 0, k_topMargin, k_rightMargin, k_bottomMargin, k_leftMargin, this, this, true, true, Palette::WallScreenDark, 13, Palette::GreyDark, Palette::GreyMiddle);
m_abscissaTitleCell = new EvenOddMessageTextCell(KDText::FontSize::Small);
for (int i = 0; i < k_maxNumberOfAbscissaCells; i++) {
m_abscissaCells[i] = new EvenOddEditableTextCell(tableView, this, m_draftTextBuffer, KDText::FontSize::Small);

View File

@@ -7,7 +7,7 @@
namespace Shared {
class ValuesFunctionParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class ValuesFunctionParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
ValuesFunctionParameterController(char symbol);

View File

@@ -5,7 +5,7 @@
#include "interval_parameter_controller.h"
namespace Shared {
class ValuesParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDelegate {
class ValuesParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
ValuesParameterController(Responder * parentResponder, IntervalParameterController * intervalParameterController, I18n::Message title);

View File

@@ -12,7 +12,7 @@ VariableBoxController::ContentViewController::ContentViewController(Responder *
m_firstSelectedRow(0),
m_previousSelectedRow(0),
m_currentPage(Page::RootMenu),
m_selectableTableView(SelectableTableView(this, this, 0, 1, 0, 0, 0, 0, this, false))
m_selectableTableView(SelectableTableView(this, this, 0, 1, 0, 0, 0, 0, this, nullptr, false))
{
}

View File

@@ -14,7 +14,7 @@ public:
void viewWillAppear() override;
void viewDidDisappear() override;
private:
class ContentViewController : public ViewController, public ListViewDataSource, public SelectableTableViewDelegate {
class ContentViewController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource {
public:
ContentViewController(Responder * parentResponder, Poincare::Context * context);
View * view() override;

View File

@@ -40,10 +40,11 @@ objs += $(addprefix escher/src/,\
responder.o\
run_loop.o\
scroll_view.o\
scroll_view_delegate.o\
scroll_view_data_source.o\
scroll_view_indicator.o\
scrollable_view.o\
selectable_table_view.o\
selectable_table_view_data_source.o\
selectable_table_view_delegate.o\
simple_list_view_data_source.o\
simple_table_view_data_source.o\

View File

@@ -43,10 +43,11 @@
#include <escher/palette.h>
#include <escher/responder.h>
#include <escher/scroll_view.h>
#include <escher/scroll_view_delegate.h>
#include <escher/scroll_view_data_source.h>
#include <escher/scroll_view_indicator.h>
#include <escher/scrollable_view.h>
#include <escher/selectable_table_view.h>
#include <escher/selectable_table_view_data_source.h>
#include <escher/selectable_table_view_delegate.h>
#include <escher/simple_table_view_data_source.h>
#include <escher/simple_list_view_data_source.h>

View File

@@ -3,12 +3,12 @@
#include <escher/view.h>
#include <escher/scroll_view_indicator.h>
#include <escher/scroll_view_delegate.h>
#include <escher/scroll_view_data_source.h>
#include <escher/palette.h>
class ScrollView : public View {
public:
ScrollView(View * contentView, ScrollViewDelegate * delegate, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0,
ScrollView(View * contentView, ScrollViewDataSource * dataSource, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0,
KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0, bool showIndicators = true,
bool colorBackground = true, KDColor backgroundColor = Palette::WallScreen, KDCoordinate indicatorThickness = 20,
KDColor indicatorColor = Palette::GreyDark, KDColor backgroundIndicatorColor = Palette::GreyMiddle,
@@ -30,7 +30,7 @@ protected:
virtual void logAttributes(std::ostream &os) const override;
#endif
private:
ScrollViewDelegate * m_delegate;
ScrollViewDataSource * m_dataSource;
int numberOfSubviews() const override;
View * subviewAtIndex(int index) override;

View File

@@ -0,0 +1,15 @@
#ifndef ESCHER_SCROLL_VIEW_DATA_SOURCE_H
#define ESCHER_SCROLL_VIEW_DATA_SOURCE_H
#include <kandinsky.h>
class ScrollViewDataSource {
public:
ScrollViewDataSource();
KDPoint offset() const;
bool setOffset(KDPoint offset);
private:
KDPoint m_offset;
};
#endif

View File

@@ -1,15 +0,0 @@
#ifndef ESCHER_SCROLL_VIEW_DELEGATE_H
#define ESCHER_SCROLL_VIEW_DELEGATE_H
#include <kandinsky.h>
class ScrollViewDelegate {
public:
ScrollViewDelegate();
KDPoint offset() const;
bool setOffset(KDPoint offset);
private:
KDPoint m_offset;
};
#endif

View File

@@ -6,7 +6,7 @@
class ScrollableView : public Responder, public ScrollView {
public:
ScrollableView(Responder * parentResponder, View * view, ScrollViewDelegate * delegate);
ScrollableView(Responder * parentResponder, View * view, ScrollViewDataSource * dataSource);
bool handleEvent(Ion::Events::Event event) override;
void reloadScroll();
protected:

View File

@@ -3,6 +3,7 @@
#include <escher/table_view.h>
#include <escher/app.h>
#include <escher/selectable_table_view_data_source.h>
#include <escher/selectable_table_view_delegate.h>
#include <escher/table_view_data_source.h>
#include <escher/palette.h>
@@ -18,7 +19,7 @@ class SelectableTableView : public TableView, public Responder {
public:
SelectableTableView(Responder * parentResponder, TableViewDataSource * dataSource, KDCoordinate horizontalCellOverlapping, KDCoordinate verticalCellOverlapping,
KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0,
KDCoordinate leftMargin = 0, SelectableTableViewDelegate * delegate = nullptr,
KDCoordinate leftMargin = 0, SelectableTableViewDataSource * selectionDataSource = nullptr, SelectableTableViewDelegate * delegate = nullptr,
bool showIndicators = true, bool colorBackground = true, KDColor backgroundColor = Palette::WallScreen,
KDCoordinate indicatorThickness = 20, KDColor indicatorColor = Palette::GreyDark,
KDColor backgroundIndicatorColor = Palette::GreyMiddle, KDCoordinate indicatorMargin = 14);
@@ -33,6 +34,7 @@ public:
bool selectCellAtLocation(int i, int j);
HighlightCell * selectedCell();
protected:
SelectableTableViewDataSource * m_selectionDataSource;
SelectableTableViewDelegate * m_delegate;
private:
void unhighlightSelectedCell();

View File

@@ -0,0 +1,21 @@
#ifndef ESCHER_SELECTABLE_TABLE_VIEW_DATA_SOURCE_H
#define ESCHER_SELECTABLE_TABLE_VIEW_DATA_SOURCE_H
#include <escher/scroll_view_data_source.h>
class SelectableTableView;
class SelectableTableViewDataSource : public ScrollViewDataSource {
public:
SelectableTableViewDataSource();
int selectedRow();
int selectedColumn();
void selectRow(int j);
void selectColumn(int i);
void selectCellAtLocation(int i, int j);
private:
int m_selectedCellX;
int m_selectedCellY;
};
#endif

View File

@@ -1,22 +1,11 @@
#ifndef ESCHER_SELECTABLE_TABLE_VIEW_DELEGATE_H
#define ESCHER_SELECTABLE_TABLE_VIEW_DELEGATE_H
#include <escher/scroll_view_delegate.h>
class SelectableTableView;
class SelectableTableViewDelegate : public ScrollViewDelegate {
class SelectableTableViewDelegate {
public:
SelectableTableViewDelegate();
int selectedRow();
int selectedColumn();
void selectRow(int j);
void selectColumn(int i);
void selectCellAtLocation(int i, int j);
virtual void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY);
private:
int m_selectedCellX;
int m_selectedCellY;
};
#endif

View File

@@ -8,7 +8,7 @@
class TableView : public ScrollView {
public:
TableView(TableViewDataSource * dataSource, ScrollViewDelegate * scrollDelegate, KDCoordinate horizontalCellOverlapping, KDCoordinate verticalCellOverlapping, KDCoordinate topMargin = 0,
TableView(TableViewDataSource * dataSource, ScrollViewDataSource * scrollDataSource, KDCoordinate horizontalCellOverlapping, KDCoordinate verticalCellOverlapping, KDCoordinate topMargin = 0,
KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0,
bool showIndicators = true, bool colorBackground = true, KDColor backgroundColor = Palette::WallScreen,
KDCoordinate indicatorThickness = 20, KDColor indicatorColor = Palette::GreyDark,

View File

@@ -6,7 +6,7 @@
#include <escher/text_cursor_view.h>
#include <string.h>
class TextField : public ScrollableView, public ScrollViewDelegate {
class TextField : public ScrollableView, public ScrollViewDataSource {
public:
TextField(Responder * parentResponder, char * textBuffer, char * draftTextBuffer, size_t textBufferSize,
TextFieldDelegate * delegate = nullptr, bool hasTwoBuffers = true, KDText::FontSize size = KDText::FontSize::Large, float horizontalAlignment = 0.0f,

View File

@@ -4,13 +4,13 @@ extern "C" {
#include <assert.h>
}
ScrollView::ScrollView(View * contentView, ScrollViewDelegate * delegate, KDCoordinate topMargin, KDCoordinate rightMargin,
ScrollView::ScrollView(View * contentView, ScrollViewDataSource * dataSource, KDCoordinate topMargin, KDCoordinate rightMargin,
KDCoordinate bottomMargin, KDCoordinate leftMargin, bool showIndicators, bool colorBackground,
KDColor backgroundColor, KDCoordinate indicatorThickness, KDColor indicatorColor,
KDColor backgroundIndicatorColor, KDCoordinate indicatorMargin) :
View(),
m_topMargin(topMargin),
m_delegate(delegate),
m_dataSource(dataSource),
m_contentView(contentView),
m_verticalScrollIndicator(ScrollViewIndicator::Direction::Vertical, indicatorColor, backgroundIndicatorColor, indicatorMargin),
m_horizontalScrollIndicator(ScrollViewIndicator::Direction::Horizontal, indicatorColor, backgroundIndicatorColor, indicatorMargin),
@@ -22,7 +22,7 @@ ScrollView::ScrollView(View * contentView, ScrollViewDelegate * delegate, KDCoor
m_colorBackground(colorBackground),
m_backgroundColor(backgroundColor)
{
assert(m_delegate != nullptr);
assert(m_dataSource != nullptr);
}
bool ScrollView::hasVerticalIndicator() const {
@@ -130,13 +130,13 @@ void ScrollView::updateScrollIndicator() {
}
void ScrollView::setContentOffset(KDPoint offset) {
if (m_delegate->setOffset(offset)) {
if (m_dataSource->setOffset(offset)) {
layoutSubviews();
}
}
KDPoint ScrollView::contentOffset() const {
return m_delegate->offset();
return m_dataSource->offset();
}
KDCoordinate ScrollView::topMargin() const {

View File

@@ -0,0 +1,19 @@
#include <escher/scroll_view_data_source.h>
ScrollViewDataSource::ScrollViewDataSource() :
m_offset(KDPointZero)
{
}
KDPoint ScrollViewDataSource::offset() const {
return m_offset;
}
bool ScrollViewDataSource::setOffset(KDPoint offset) {
if (offset != m_offset) {
m_offset = offset;
return true;
}
return false;
}

View File

@@ -1,19 +0,0 @@
#include <escher/scroll_view_delegate.h>
ScrollViewDelegate::ScrollViewDelegate() :
m_offset(KDPointZero)
{
}
KDPoint ScrollViewDelegate::offset() const {
return m_offset;
}
bool ScrollViewDelegate::setOffset(KDPoint offset) {
if (offset != m_offset) {
m_offset = offset;
return true;
}
return false;
}

View File

@@ -2,9 +2,9 @@
#include <escher/metric.h>
#include <assert.h>
ScrollableView::ScrollableView(Responder * parentResponder, View * view, ScrollViewDelegate * delegate) :
ScrollableView::ScrollableView(Responder * parentResponder, View * view, ScrollViewDataSource * dataSource) :
Responder(parentResponder),
ScrollView(view, delegate, 0, 0, 0, 0, false, false),
ScrollView(view, dataSource, 0, 0, 0, 0, false, false),
m_manualScrolling(0)
{
}

View File

@@ -2,35 +2,38 @@
#include <assert.h>
SelectableTableView::SelectableTableView(Responder * parentResponder, TableViewDataSource * dataSource, KDCoordinate horizontalCellOverlapping, KDCoordinate verticalCellOverlapping, KDCoordinate topMargin, KDCoordinate rightMargin, KDCoordinate bottomMargin, KDCoordinate leftMargin,
SelectableTableViewDelegate * delegate, bool showIndicators, bool colorBackground, KDColor backgroundColor,
SelectableTableViewDataSource * selectionDataSource, SelectableTableViewDelegate * delegate, bool showIndicators, bool colorBackground, KDColor backgroundColor,
KDCoordinate indicatorThickness, KDColor indicatorColor, KDColor backgroundIndicatorColor, KDCoordinate indicatorMargin) :
TableView(dataSource, delegate, horizontalCellOverlapping, verticalCellOverlapping, topMargin, rightMargin, bottomMargin, leftMargin, showIndicators, colorBackground, backgroundColor,
TableView(dataSource, selectionDataSource, horizontalCellOverlapping, verticalCellOverlapping, topMargin, rightMargin, bottomMargin, leftMargin, showIndicators, colorBackground, backgroundColor,
indicatorThickness, indicatorColor, backgroundIndicatorColor, indicatorMargin),
Responder(parentResponder),
m_selectionDataSource(selectionDataSource),
m_delegate(delegate)
{
assert(m_delegate != nullptr);
assert(m_selectionDataSource != nullptr);
}
int SelectableTableView::selectedRow() {
return m_delegate->selectedRow();
return m_selectionDataSource->selectedRow();
}
int SelectableTableView::selectedColumn() {
return m_delegate->selectedColumn();
return m_selectionDataSource->selectedColumn();
}
void SelectableTableView::selectRow(int j) {
m_delegate->selectRow(j);
m_selectionDataSource->selectRow(j);
}
void SelectableTableView::selectColumn(int i) {
m_delegate->selectColumn(i);
m_selectionDataSource->selectColumn(i);
}
void SelectableTableView::didEnterResponderChain(Responder * previousFirstResponder) {
selectCellAtLocation(selectedColumn(), selectedRow());
m_delegate->tableViewDidChangeSelection(this, 0, -1);
if (m_delegate) {
m_delegate->tableViewDidChangeSelection(this, 0, -1);
}
}
void SelectableTableView::willExitResponderChain(Responder * nextFirstResponder) {

View File

@@ -0,0 +1,28 @@
#include <escher/selectable_table_view_data_source.h>
SelectableTableViewDataSource::SelectableTableViewDataSource() :
m_selectedCellX(0),
m_selectedCellY(-1)
{
}
int SelectableTableViewDataSource::selectedRow() {
return m_selectedCellY;
}
int SelectableTableViewDataSource::selectedColumn() {
return m_selectedCellX;
}
void SelectableTableViewDataSource::selectRow(int j) {
m_selectedCellY = j;
}
void SelectableTableViewDataSource::selectColumn(int i) {
m_selectedCellX = i;
}
void SelectableTableViewDataSource::selectCellAtLocation(int i, int j) {
m_selectedCellX = i;
m_selectedCellY = j;
}

View File

@@ -1,32 +1,4 @@
#include <escher/selectable_table_view_delegate.h>
SelectableTableViewDelegate::SelectableTableViewDelegate() :
m_selectedCellX(0),
m_selectedCellY(-1)
{
}
int SelectableTableViewDelegate::selectedRow() {
return m_selectedCellY;
}
int SelectableTableViewDelegate::selectedColumn() {
return m_selectedCellX;
}
void SelectableTableViewDelegate::selectRow(int j) {
m_selectedCellY = j;
}
void SelectableTableViewDelegate::selectColumn(int i) {
m_selectedCellX = i;
}
void SelectableTableViewDelegate::selectCellAtLocation(int i, int j) {
m_selectedCellX = i;
m_selectedCellY = j;
}
void SelectableTableViewDelegate::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) {
}

View File

@@ -7,11 +7,11 @@ extern "C" {
#define MIN(x,y) ((x)<(y) ? (x) : (y))
TableView::TableView(TableViewDataSource * dataSource, ScrollViewDelegate * scrollDelegate, KDCoordinate horizontalCellOverlapping, KDCoordinate verticalCellOverlapping, KDCoordinate topMargin, KDCoordinate rightMargin,
TableView::TableView(TableViewDataSource * dataSource, ScrollViewDataSource * scrollDataSource, KDCoordinate horizontalCellOverlapping, KDCoordinate verticalCellOverlapping, KDCoordinate topMargin, KDCoordinate rightMargin,
KDCoordinate bottomMargin, KDCoordinate leftMargin, bool showIndicators, bool colorBackground,
KDColor backgroundColor, KDCoordinate indicatorThickness, KDColor indicatorColor,
KDColor backgroundIndicatorColor, KDCoordinate indicatorMargin) :
ScrollView(&m_contentView, scrollDelegate, topMargin, rightMargin, bottomMargin, leftMargin, showIndicators, colorBackground,
ScrollView(&m_contentView, scrollDataSource, topMargin, rightMargin, bottomMargin, leftMargin, showIndicators, colorBackground,
backgroundColor, indicatorThickness, indicatorColor, backgroundIndicatorColor, indicatorMargin),
m_contentView(this, dataSource, horizontalCellOverlapping, verticalCellOverlapping)
{