+ double range = m_current->GetEndY() - m_current->GetStartY();
+ double offset = ((double) m_current->GetOffsetY() / (double)client_height ) * range;
+ double start = m_current->GetStartY() - offset;
+ double end = m_current->GetEndY() - offset;
+ int int_log_range = (int)floor( log10( range ) );
+ double step = 1.0;
+ if (int_log_range > 0)
+ {
+ for (int i = 0; i < int_log_range; i++)
+ step *= 10;
+ }
+ if (int_log_range < 0)
+ {
+ for (int i = 0; i < -int_log_range; i++)
+ step /= 10;
+ }
+ double lower = ceil(start / step) * step;
+ double upper = floor(end / step) * step;
+ int steps = (int)ceil((upper-lower)/step);
+ if (steps < 3)
+ {
+ step /= 2;
+ if (lower-step > start) lower -= step;
+ }
+
+ double current = lower;
+ while (current < upper+(step/2))
+ {
+ int y = (int)((m_current->GetEndY()-current) / range * (double)client_height) - 1;
+ y -= m_current->GetOffsetY();
+ if ((y > 10) && (y < client_height-7))
+ {
+ dc.DrawLine( pos.x-15, y, pos.x-7, y );
+ wxString label;
+ label.Printf( "%.1f", current );
+ dc.DrawText( label, pos.x-45, y-7 );
+ }
+
+ current += step;
+ }
+