mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[apps/settings] Fix sub controller viewWillAppear /
didEnterResponderChain behaviours This fixes the following bug: when editing the number of significant digits, input "1+", click on "OK", the data was reloaded and "1+" disappeared...
This commit is contained in:
@@ -94,13 +94,5 @@ bool DisplayModeController::textFieldDidFinishEditing(TextField * textField, con
|
||||
}
|
||||
return true;
|
||||
}
|
||||
int DisplayModeController::initialSelectedRow() const {
|
||||
int row = selectedRow();
|
||||
/* If the significant number of digits row was selected, keep selecting it,
|
||||
* else select the display mode currently used. */
|
||||
if (row == numberOfRows() - 1) {
|
||||
return row;
|
||||
}
|
||||
return PreferencesController::initialSelectedRow();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ public:
|
||||
private:
|
||||
static constexpr int k_resultFormatType = 0;
|
||||
static constexpr int k_significantDigitsType = 1;
|
||||
int initialSelectedRow() const override;
|
||||
MessageTableCellWithEditableTextWithSeparator m_editableCell;
|
||||
};
|
||||
|
||||
|
||||
@@ -82,7 +82,12 @@ bool ExamModeController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
|
||||
void ExamModeController::didEnterResponderChain(Responder * previousFirstResponder) {
|
||||
GenericSubController::didEnterResponderChain(previousFirstResponder);
|
||||
/* When a pop-up is dismissed, the exam mode status might have changed. We
|
||||
* reload the selection as the number of rows might have also changed. We
|
||||
* force to reload the entire data because they might have changed. */
|
||||
selectCellAtLocation(0, initialSelectedRow());
|
||||
m_selectableTableView.reloadData();
|
||||
// We add a message when the mode exam is on
|
||||
m_contentView.layoutSubviews(true);
|
||||
}
|
||||
|
||||
@@ -111,4 +116,14 @@ void ExamModeController::willDisplayCellForIndex(HighlightCell * cell, int index
|
||||
}
|
||||
}
|
||||
|
||||
int ExamModeController::initialSelectedRow() const {
|
||||
int row = selectedRow();
|
||||
if (row >= numberOfRows()) {
|
||||
return numberOfRows()-1;
|
||||
} else if (row < 0) {
|
||||
return 0;
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ private:
|
||||
MessageTextView m_deactivateLine2;
|
||||
MessageTextView m_deactivateLine3;
|
||||
};
|
||||
int initialSelectedRow() const override;
|
||||
static constexpr int k_maxNumberOfCells = 2;
|
||||
ContentView m_contentView;
|
||||
MessageTableCell m_cell[k_maxNumberOfCells];
|
||||
|
||||
@@ -22,15 +22,22 @@ const char * GenericSubController::title() {
|
||||
return "";
|
||||
}
|
||||
|
||||
void GenericSubController::didEnterResponderChain(Responder * previousFirstResponder) {
|
||||
selectCellAtLocation(0, initialSelectedRow());
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
void GenericSubController::didBecomeFirstResponder() {
|
||||
Container::activeApp()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
void GenericSubController::viewWillAppear() {
|
||||
/* This can't be done in didEnterResponderChain because we don't want it to
|
||||
* be done everytime the pop-up disappears. For example, if we are editing a
|
||||
* field and a pop-up shows up with a warning, we don't want to reload the
|
||||
* entire table when dismissing the pop-up (that would erase the edition). */
|
||||
selectCellAtLocation(0, initialSelectedRow());
|
||||
/* A unique SubController is used for all sub pages of settings. We have to
|
||||
* reload its data when it is displayed as it could switch from displaying
|
||||
* "Angle unit" data to "Complex format" data for instance. */
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
bool GenericSubController::handleEvent(Ion::Events::Event event) {
|
||||
if (event == Ion::Events::Left) {
|
||||
stackController()->pop();
|
||||
@@ -83,14 +90,4 @@ StackViewController * GenericSubController::stackController() const {
|
||||
return (StackViewController *)parentResponder();
|
||||
}
|
||||
|
||||
int GenericSubController::initialSelectedRow() const {
|
||||
int row = selectedRow();
|
||||
if (row >= numberOfRows()) {
|
||||
return numberOfRows()-1;
|
||||
} else if (row < 0) {
|
||||
return 0;
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ public:
|
||||
GenericSubController(Responder * parentResponder);
|
||||
const char * title() override;
|
||||
View * view() override { return &m_selectableTableView; }
|
||||
void didEnterResponderChain(Responder * previousFirstResponder) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
int numberOfRows() const override;
|
||||
KDCoordinate rowHeight(int j) override;
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
void viewDidDisappear() override;
|
||||
protected:
|
||||
StackViewController * stackController() const;
|
||||
virtual int initialSelectedRow() const;
|
||||
virtual int initialSelectedRow() const { return 0; }
|
||||
constexpr static KDCoordinate k_topBottomMargin = 13;
|
||||
SelectableTableView m_selectableTableView;
|
||||
MessageTree * m_messageTreeModel;
|
||||
|
||||
Reference in New Issue
Block a user