Summary: | Time increment value is sometimes 'strange' | ||
---|---|---|---|
Product: | [Applications] kst | Reporter: | Matthew Truch <matt> |
Component: | general | Assignee: | kst |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | 1.0.0 | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Matthew Truch
2004-12-01 19:52:46 UTC
CVS commit by netterfield: BUG: 94232 Make tick intervals special for hours, minutes, and seconds.... M +54 -12 kst2dplot.cpp 1.307 M +1 -1 kst2dplot.h 1.127 --- kdeextragear-2/kst/kst/kst2dplot.cpp #1.306:1.307 @@ -70,7 +70,4 @@ #endif -static double ticks[] = {1.0, 2.0, 4.0, 5.0, 10.0}; -static int iNumTicks = sizeof(ticks) / sizeof(double); - inline int d2i(double x) { return int(floor(x+0.5)); @@ -1517,4 +1514,5 @@ void Kst2DPlot::genAxisTickLabels(QPaint int iShort = 0; int i; + int base = 10; if (isX && _isXAxisInterpreted) { @@ -1563,9 +1561,12 @@ void Kst2DPlot::genAxisTickLabels(QPaint scale /= 60.0 * 60.0; strUnits = i18n("hours"); + base = 24; } else if( range > 10.0 * 60.0 ) { scale /= 60.0; strUnits = i18n("minutes"); + base = 60; } else { strUnits = i18n("seconds"); + base = 60; } break; @@ -1590,5 +1591,5 @@ void Kst2DPlot::genAxisTickLabels(QPaint tp.delta = false; - setTicks(tp.tick, tp.org, Max*scale, Min*scale, bLog, isX); + setTicks(tp.tick, tp.org, Max*scale, Min*scale, bLog, isX, base); tp.tick /= scale; tp.org /= scale; @@ -2446,9 +2447,30 @@ void Kst2DPlot::GenerateDefaultLabels() void Kst2DPlot::setTicks(double& tick, double& org, - double max, double min, bool is_log, bool isX) { + double max, double min, bool is_log, bool isX, + int base) { double St = 0.0; double Exp; - int auto_tick = 5; + int auto_tick; int majorDensity = isX ? _xMajorTicks : _yMajorTicks; + double *ticks; + int *autominor; + int nt; + + static double b10_ticks[] = {1.0, 2.0, 5.0, 10.0}; + static int b10_autominor[]= { 5, 4, 5, 5}; + static int n_b10_ticks = sizeof(b10_ticks) / sizeof(double); + static double b24_ticks[] = {1.0, 2.0, 4.0, 6.0, 12.0, 24.0}; + static int b24_autominor[]= { 5, 4, 4, 6, 6, 6}; + static int n_b24_ticks = sizeof(b24_ticks) / sizeof(double); + static double b60_ticks[] = + {1.0, 2.0, 5.0, 10.0, 15.0, 20.0, 30.0, 60.0}; + static int b60_autominor[] = + { 5, 4, 5, 5, 3, 4, 6, 6}; + + static int n_b60_ticks = sizeof(b60_ticks) / sizeof(double); + + ticks = b10_ticks; + nt = n_b10_ticks; + autominor = b10_autominor; // @@ -2477,5 +2499,5 @@ void Kst2DPlot::setTicks(double& tick, d tick = ticks[0] * Exp; - for (int i=1; i<iNumTicks; i++) { + for (int i=1; i<nt; i++) { if (fabs((ticks[i] * Exp) - St) < fabs(tick - St)) { tick = ticks[i] * Exp; @@ -2487,15 +2509,35 @@ void Kst2DPlot::setTicks(double& tick, d // determine tick interval... // + Exp = 0; + if (base == 60) { + if ((b60_ticks[0]*0.7<St) && + (b60_ticks[n_b60_ticks-1]>St*0.7)) { + Exp = 1.0; + ticks = b60_ticks; + autominor = b60_autominor; + nt = n_b60_ticks; + } + } else if (base == 24) { + if ((b24_ticks[0]*0.7<St) && + (b24_ticks[n_b24_ticks-1]>St*0.7)) { + Exp = 1.0; + ticks = b24_ticks; + autominor = b24_autominor; + nt = n_b24_ticks; + } + } + + if (Exp<0.5) { Exp = pow(10.0, floor(log10(St))); + } tick = ticks[0] * Exp; - for (int i=1; i<iNumTicks; i++) { + auto_tick = autominor[0]; + for (int i=1; i<nt; i++) { if (fabs((ticks[i] * Exp) - St) < fabs(tick - St)) { tick = ticks[i] * Exp; + auto_tick = autominor[i]; } } - if (tick == 2.0*Exp || tick == 4.0*Exp) { - auto_tick = 4; - } } --- kdeextragear-2/kst/kst/kst2dplot.h #1.126:1.127 @@ -359,5 +359,5 @@ private: QPainter& p, bool& bOffsetX, bool& bOffsetY); void setTicks(double& tick, double& org, - double max, double min, bool is_log, bool isX); + double max, double min, bool is_log, bool isX, int base); double convertTimeValueToJD(double valueIn); double convertTimeDiffValueToDays(double diffIn); |