X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=61b03b2e16b8495b8d8c6e8f0093bb4b7830a978;hb=76750c410e299f9ba9f0f9d1e220713861cc67b6;hp=f3afd937795104d18768ca65089091819a5e351e;hpb=37849039c0a75b20f198292979e843267d29ea7e;p=pulseview.git diff --git a/pv/view/view.cpp b/pv/view/view.cpp index f3afd937..61b03b2e 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -204,6 +204,9 @@ View::View(Session &session, bool is_main_view, QWidget *parent) : connect(ruler_, SIGNAL(selection_changed()), this, SIGNAL(selection_changed())); + connect(splitter_, SIGNAL(splitterMoved(int, int)), + this, SLOT(on_splitter_moved())); + connect(this, SIGNAL(hover_point_changed()), this, SLOT(on_hover_point_changed())); @@ -373,7 +376,7 @@ void View::set_scale(double scale) { if (scale_ != scale) { scale_ = scale; - Q_EMIT scale_changed(); + scale_changed(); } } @@ -386,7 +389,7 @@ void View::set_offset(const pv::util::Timestamp& offset) { if (offset_ != offset) { offset_ = offset; - Q_EMIT offset_changed(); + offset_changed(); } } @@ -416,7 +419,7 @@ void View::set_tick_prefix(pv::util::SIPrefix tick_prefix) { if (tick_prefix_ != tick_prefix) { tick_prefix_ = tick_prefix; - Q_EMIT tick_prefix_changed(); + tick_prefix_changed(); } } @@ -429,7 +432,7 @@ void View::set_tick_precision(unsigned tick_precision) { if (tick_precision_ != tick_precision) { tick_precision_ = tick_precision; - Q_EMIT tick_precision_changed(); + tick_precision_changed(); } } @@ -442,7 +445,7 @@ void View::set_tick_period(const pv::util::Timestamp& tick_period) { if (tick_period_ != tick_period) { tick_period_ = tick_period; - Q_EMIT tick_period_changed(); + tick_period_changed(); } } @@ -455,7 +458,7 @@ void View::set_time_unit(pv::util::TimeUnit time_unit) { if (time_unit_ != time_unit) { time_unit_ = time_unit; - Q_EMIT time_unit_changed(); + time_unit_changed(); } } @@ -869,29 +872,32 @@ void View::set_scroll_default() set_v_offset(extents.first); } -bool View::header_fully_visible() const +bool View::header_was_shrunk() const { const int header_pane_width = splitter_->sizes().front(); const int header_width = header_->extended_size_hint().width(); - return (header_pane_width >= header_width); + // Allow for a slight margin of error so that we also accept + // slight differences when e.g. a label name change increased + // the overall width + return (header_pane_width < (header_width - 10)); } -void View::update_layout() +void View::expand_header_to_fit() { - // Only adjust pane sizes if the header hasn't been partially hidden by the user - if (header_fully_visible()) { - int splitter_area_width = 0; - for (int w : splitter_->sizes()) - splitter_area_width += w; - - // Make sure the header has enough horizontal space to show all labels fully - QList pane_sizes; - pane_sizes.push_back(header_->extended_size_hint().width()); - pane_sizes.push_back(splitter_area_width - header_->extended_size_hint().width()); - splitter_->setSizes(pane_sizes); - } + int splitter_area_width = 0; + for (int w : splitter_->sizes()) + splitter_area_width += w; + + // Make sure the header has enough horizontal space to show all labels fully + QList pane_sizes; + pane_sizes.push_back(header_->extended_size_hint().width()); + pane_sizes.push_back(splitter_area_width - header_->extended_size_hint().width()); + splitter_->setSizes(pane_sizes); +} +void View::update_layout() +{ update_scroll(); } @@ -1040,8 +1046,13 @@ void View::row_item_appearance_changed(bool label, bool content) void View::time_item_appearance_changed(bool label, bool content) { - if (label) + if (label) { ruler_->update(); + + // Make sure the header pane width is updated, too + update_layout(); + } + if (content) viewport_->update(); } @@ -1055,6 +1066,19 @@ void View::extents_changed(bool horz, bool vert) lazy_event_handler_.start(); } +void View::on_splitter_moved() +{ + // Setting the maximum width of the header widget doesn't work as + // expected because the splitter would allow the user to make the + // pane wider than that, creating empty space as a result. + // To make this work, we stricly enforce the maximum width by + // expanding the header unless the user shrunk it on purpose. + // As we're then setting the width of the header pane, we set the + // splitter to the maximum allowed position. + if (!header_was_shrunk()) + expand_header_to_fit(); +} + void View::h_scroll_value_changed(int value) { if (updating_scroll_) @@ -1250,6 +1274,12 @@ void View::signals_changed() offset += extents.second; } + + if (!new_top_level_items.empty()) + // Expand the header pane because the header should become fully + // visible when new signals are added + expand_header_to_fit(); + update_layout(); header_->update();