diff --git a/apps/solver/equation_list_view.cpp b/apps/solver/equation_list_view.cpp index 98fa071b8..ae19c0dde 100644 --- a/apps/solver/equation_list_view.cpp +++ b/apps/solver/equation_list_view.cpp @@ -7,7 +7,7 @@ namespace Solver { EquationListView::EquationListView(Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource) : Responder(parentResponder), View(), - m_displayBrace(false), + m_braceStyle(BraceStyle::None), m_listView(this, dataSource, selectionDataSource), m_braceView(), m_scrollBraceView(&m_braceView, this) @@ -21,9 +21,9 @@ EquationListView::EquationListView(Responder * parentResponder, TableViewDataSou m_scrollBraceView.setBackgroundColor(KDColorWhite); } -void EquationListView::displayBrace(bool displayBrace) { - if (m_displayBrace != displayBrace) { - m_displayBrace = displayBrace; +void EquationListView::setBraceStyle(BraceStyle style) { + if (m_braceStyle != style) { + m_braceStyle = style; layoutSubviews(); } } @@ -48,10 +48,14 @@ void EquationListView::didBecomeFirstResponder() { void EquationListView::layoutSubviews() { m_listView.setFrame(KDRect(0, 0, bounds().width(), bounds().height())); - if (m_displayBrace) { + if (m_braceStyle != BraceStyle::None) { KDCoordinate braceWidth = m_braceView.minimalSizeForOptimalDisplay().width(); - m_braceView.setSize(KDSize(braceWidth, m_listView.minimalSizeForOptimalDisplay().height()-Metric::StoreRowHeight-2*k_margin)); - m_scrollBraceView.setFrame(KDRect(0, 0, k_braceTotalWidth, m_listView.minimalSizeForOptimalDisplay().height()-Metric::StoreRowHeight-offset().y())); + KDCoordinate braceHeight = m_listView.minimalSizeForOptimalDisplay().height()-2*k_margin; + braceHeight = m_braceStyle == BraceStyle::OneRowShort ? braceHeight - Metric::StoreRowHeight : braceHeight; + m_braceView.setSize(KDSize(braceWidth, braceHeight)); + KDCoordinate scrollBraceHeight = m_listView.minimalSizeForOptimalDisplay().height()-offset().y(); + scrollBraceHeight = m_braceStyle == BraceStyle::OneRowShort ? scrollBraceHeight - Metric::StoreRowHeight : scrollBraceHeight; + m_scrollBraceView.setFrame(KDRect(0, 0, k_braceTotalWidth, scrollBraceHeight)); } else { m_scrollBraceView.setFrame(KDRectZero); } diff --git a/apps/solver/equation_list_view.h b/apps/solver/equation_list_view.h index f212e6819..59bbaed98 100644 --- a/apps/solver/equation_list_view.h +++ b/apps/solver/equation_list_view.h @@ -7,8 +7,13 @@ namespace Solver { class EquationListView : public Responder, public View, public ScrollViewDelegate, public ScrollViewDataSource { public: + enum class BraceStyle { + None, + OneRowShort, + Full + }; EquationListView(Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource); - void displayBrace(bool displayBrace); + void setBraceStyle(BraceStyle style); void scrollViewDidChangeOffset(ScrollViewDataSource * scrollViewDataSource) override; void didBecomeFirstResponder() override; SelectableTableView * selectableTableView() { @@ -27,7 +32,7 @@ private: KDSize minimalSizeForOptimalDisplay() const override; constexpr static KDCoordinate k_braceWidth = 10; }; - bool m_displayBrace; + BraceStyle m_braceStyle; SelectableTableView m_listView; BraceView m_braceView; ScrollView m_scrollBraceView; diff --git a/apps/solver/list_controller.cpp b/apps/solver/list_controller.cpp index 346d44b6a..d17bd18bd 100644 --- a/apps/solver/list_controller.cpp +++ b/apps/solver/list_controller.cpp @@ -200,7 +200,8 @@ bool ListController::removeModelRow(ExpressionModel * model) { void ListController::reloadBrace() { EquationListView * listView = static_cast(view()); - listView->displayBrace(m_equationStore->numberOfModels() > 1); + EquationListView::BraceStyle braceStyle = m_equationStore->numberOfModels() <= 1 ? EquationListView::BraceStyle::None : (m_equationStore->numberOfModels() == m_equationStore->maxNumberOfModels() ? EquationListView::BraceStyle::Full : EquationListView::BraceStyle::OneRowShort); + listView->setBraceStyle(braceStyle); listView->layoutSubviews(); }