mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
[apps/graph] ListParameterController: interval print float mode and
number of significant numbers are dynamically adjusted with the available space
This commit is contained in:
committed by
LeaNumworks
parent
05934717f1
commit
20abac86f4
@@ -53,6 +53,23 @@ char intervalBracket(double value, bool opening) {
|
||||
return std::isinf(value) == opening ? ']' : '[';
|
||||
}
|
||||
|
||||
void writeInterval(char * buffer, int bufferSize, double min, double max, int numberOfSignificantDigits, Preferences::PrintFloatMode mode) {
|
||||
int numberOfChar = 0;
|
||||
assert(bufferSize-1 > numberOfChar);
|
||||
buffer[numberOfChar++] = intervalBracket(min, true);
|
||||
int sizeRequiredForFloat = PrintFloat::bufferSizeForFloatsWithPrecision(numberOfSignificantDigits);
|
||||
assert(sizeRequiredForFloat < bufferSize - numberOfChar);
|
||||
numberOfChar += PrintFloat::ConvertFloatToText<double>(min, buffer+numberOfChar, sizeRequiredForFloat, numberOfSignificantDigits, mode);
|
||||
assert(bufferSize > numberOfChar);
|
||||
numberOfChar += strlcpy(buffer+numberOfChar, ",", bufferSize-numberOfChar);
|
||||
assert(sizeRequiredForFloat < bufferSize - numberOfChar);
|
||||
numberOfChar += PrintFloat::ConvertFloatToText<double>(max, buffer+numberOfChar, sizeRequiredForFloat, numberOfSignificantDigits, mode);
|
||||
assert(bufferSize-1 > numberOfChar);
|
||||
buffer[numberOfChar++] = intervalBracket(max, false);
|
||||
assert(bufferSize > numberOfChar);
|
||||
strlcpy(buffer+numberOfChar, " ", bufferSize-numberOfChar);
|
||||
}
|
||||
|
||||
void ListParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) {
|
||||
Shared::ListParameterController::willDisplayCellForIndex(cell, index);
|
||||
if ((cell == &m_typeCell || cell == &m_functionDomain) && !m_record.isNull()) {
|
||||
@@ -70,17 +87,11 @@ void ListParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
||||
double max = function->tMax();
|
||||
constexpr int bufferSize = BufferTextView::k_maxNumberOfChar;
|
||||
char buffer[bufferSize];
|
||||
int numberOfChar = 0;
|
||||
assert(bufferSize-1 > numberOfChar);
|
||||
buffer[numberOfChar++] = intervalBracket(min, true);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(min, buffer+numberOfChar, bufferSize-numberOfChar, Preferences::VeryShortNumberOfSignificantDigits);
|
||||
assert(bufferSize > numberOfChar);
|
||||
numberOfChar += strlcpy(buffer+numberOfChar, ",", bufferSize-numberOfChar);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(max, buffer+numberOfChar, bufferSize-numberOfChar, Preferences::VeryShortNumberOfSignificantDigits);
|
||||
assert(bufferSize-1 > numberOfChar);
|
||||
buffer[numberOfChar++] = intervalBracket(max, false);
|
||||
assert(bufferSize > numberOfChar);
|
||||
numberOfChar += strlcpy(buffer+numberOfChar, " ", bufferSize-numberOfChar);
|
||||
writeInterval(buffer, bufferSize, min, max, Preferences::VeryShortNumberOfSignificantDigits, Preferences::sharedPreferences()->displayMode());
|
||||
int numberOfAvailableChar = (m_functionDomain.bounds().width() - m_functionDomain.labelView()->bounds().width() - m_functionDomain.accessoryView()->bounds().width() - TableCell::k_labelMargin - TableCell::k_accessoryMargin)/KDFont::SmallFont->glyphSize().width();
|
||||
if (UTF8Helper::StringGlyphLength(buffer) > numberOfAvailableChar) {
|
||||
writeInterval(buffer, bufferSize, min, max, Preferences::VeryShortNumberOfSignificantDigits-1, Preferences::PrintFloatMode::Scientific);
|
||||
}
|
||||
m_functionDomain.setAccessoryText(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,13 +15,13 @@ public:
|
||||
virtual View * accessoryView() const;
|
||||
virtual View * subAccessoryView() const;
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
constexpr static KDCoordinate k_labelMargin = 10;
|
||||
constexpr static KDCoordinate k_accessoryMargin = 10;
|
||||
protected:
|
||||
int numberOfSubviews() const override;
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
constexpr static KDCoordinate k_separatorThickness = Metric::CellSeparatorThickness;
|
||||
constexpr static KDCoordinate k_labelMargin = 10;
|
||||
constexpr static KDCoordinate k_accessoryMargin = 10;
|
||||
private:
|
||||
constexpr static KDCoordinate k_accessoryBottomMargin = 3;
|
||||
Layout m_layout;
|
||||
|
||||
Reference in New Issue
Block a user