* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef PULSEVIEW_PV_VIEW_RULER_HPP
-#define PULSEVIEW_PV_VIEW_RULER_HPP
+#ifndef PULSEVIEW_PV_VIEWS_TRACEVIEW_RULER_HPP
+#define PULSEVIEW_PV_VIEWS_TRACEVIEW_RULER_HPP
#include <functional>
#include <memory>
#include "marginwidget.hpp"
#include <pv/util.hpp>
+using std::function;
+using std::pair;
+using std::shared_ptr;
+using std::vector;
+
+namespace RulerTest {
+struct tick_position_test_0;
+struct tick_position_test_1;
+struct tick_position_test_2;
+}
+
namespace pv {
-namespace view {
+namespace views {
+namespace TraceView {
class TimeItem;
class ViewItem;
{
Q_OBJECT
-private:
+ friend struct RulerTest::tick_position_test_0;
+ friend struct RulerTest::tick_position_test_1;
+ friend struct RulerTest::tick_position_test_2;
+private:
/// Height of the ruler in multipes of the text height
static const float RulerHeight;
Ruler(View &parent);
public:
- QSize sizeHint() const;
+ QSize sizeHint() const override;
/**
* The extended area that the header widget would like to be sized to.
* @remarks This area is the area specified by sizeHint, extended by
* the area to overlap the viewport.
*/
- QSize extended_size_hint() const;
+ QSize extended_size_hint() const override;
+
+ /**
+ * Formats a timestamp depending on its distance to another timestamp.
+ *
+ * Heuristic function, useful when multiple timestamps should be put side by
+ * side. The function procedes in the following order:
+ * - If 't' is zero, "0" is returned.
+ * - If 'unit' is 'TimeUnit::Samples', 'pv::util::format_time_si_adjusted()'
+ * is used to format 't'.
+ * - If a zoomed out view is detected (determined by 'precision' and
+ * 'distance'), 'pv::util::format_time_minutes() is used.
+ * - For timestamps "near the origin" (determined by 'distance'),
+ * 'pv::util::format_time_si_adjusted()' is used.
+ * - If none of the previous was true, 'pv::util::format_time_minutes()'
+ * is used again.
+ *
+ * @param distance The distance between the timestamp to format and
+ * an adjacent one.
+ * @param t The value to format
+ * @param prefix The SI prefix to use.
+ * @param unit The representation of the timestamp value.
+ * @param precision The number of digits after the decimal separator.
+ * @param sign Whether or not to add a sign also for positive numbers.
+ *
+ * @return The formated value.
+ */
+ static QString format_time_with_distance(
+ const pv::util::Timestamp& distance,
+ const pv::util::Timestamp& t,
+ pv::util::SIPrefix prefix = pv::util::SIPrefix::unspecified,
+ pv::util::TimeUnit unit = pv::util::TimeUnit::Time,
+ unsigned precision = 0,
+ bool sign = true);
private:
/**
* Gets the time items.
*/
- std::vector< std::shared_ptr<pv::view::ViewItem> > items();
+ vector< shared_ptr<ViewItem> > items() override;
/**
* Gets the first view item which has a label that contains @c pt .
* @return the view item that has been found, or and empty
* @c shared_ptr if no item was found.
*/
- std::shared_ptr<pv::view::ViewItem> get_mouse_over_item(
- const QPoint &pt);
+ shared_ptr<ViewItem> get_mouse_over_item(const QPoint &pt) override;
-private:
- void paintEvent(QPaintEvent *event);
+ void paintEvent(QPaintEvent *event) override;
- void mouseDoubleClickEvent(QMouseEvent *e);
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
/**
* Draw a hover arrow under the cursor position.
struct TickPositions
{
- std::vector<std::pair<double, QString>> major;
- std::vector<double> minor;
+ vector<pair<double, QString>> major;
+ vector<double> minor;
};
/**
* tick positions.
*/
static TickPositions calculate_tick_positions(
- const double major_period,
+ const pv::util::Timestamp& major_period,
const pv::util::Timestamp& offset,
const double scale,
const int width,
- std::function<QString(const pv::util::Timestamp&)> format_function);
+ function<QString(const pv::util::Timestamp&)> format_function);
protected:
void resizeEvent(QResizeEvent*) override;
void invalidate_tick_position_cache();
};
-} // namespace view
+} // namespace TraceView
+} // namespace views
} // namespace pv
-#endif // PULSEVIEW_PV_VIEW_RULER_HPP
+#endif // PULSEVIEW_PV_VIEWS_TRACEVIEW_RULER_HPP