X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.cpp;h=29c6fef4ee4f1ec3bb24742e46865ef8806eca1c;hb=60c426a05dee6636b61c29a747eb50ec5b005209;hp=269768669a5a44b8c94ac30c8ee7cbc9d2a2252f;hpb=00c518d66a61f28609b0eeddd0ce375d0002da94;p=pulseview.git diff --git a/pv/views/trace/view.cpp b/pv/views/trace/view.cpp index 2697686..29c6fef 100644 --- a/pv/views/trace/view.cpp +++ b/pv/views/trace/view.cpp @@ -129,6 +129,7 @@ View::View(Session &session, bool is_main_view, QWidget *parent) : offset_(0), updating_scroll_(false), settings_restored_(false), + header_was_shrunk_(false), sticky_scrolling_(false), // Default setting is set in MainWindow::setup_ui() always_zoom_to_fit_(false), tick_period_(0), @@ -886,7 +887,7 @@ void View::set_scroll_default() set_v_offset(extents.first); } -bool View::header_was_shrunk() const +void View::determine_if_header_was_shrunk() { const int header_pane_width = splitter_->sizes().front(); const int header_width = header_->extended_size_hint().width(); @@ -894,11 +895,19 @@ bool View::header_was_shrunk() const // 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)); + header_was_shrunk_ = (header_pane_width < (header_width - 10)); } -void View::expand_header_to_fit() +void View::resize_header_to_fit() { + // 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. + int splitter_area_width = 0; for (int w : splitter_->sizes()) splitter_area_width += w; @@ -1027,8 +1036,10 @@ bool View::eventFilter(QObject *object, QEvent *event) // resized to their final sizes. update_layout(); - if (!settings_restored_) - expand_header_to_fit(); + if (settings_restored_) + determine_if_header_was_shrunk(); + else + resize_header_to_fit(); if (scroll_needs_defaults_) { set_scroll_default(); @@ -1095,21 +1106,17 @@ void View::extents_changed(bool horz, bool vert) void View::on_signal_name_changed() { - if (!header_was_shrunk()) - expand_header_to_fit(); + if (!header_was_shrunk_) + resize_header_to_fit(); } 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(); + // The header can only shrink when the splitter is moved manually + determine_if_header_was_shrunk(); + + if (!header_was_shrunk_) + resize_header_to_fit(); } void View::h_scroll_value_changed(int value) @@ -1150,6 +1157,7 @@ void View::signals_changed() vector< shared_ptr > channels; shared_ptr sr_dev; + bool signals_added_or_removed = false; // Do we need to set the vertical scrollbar to its default position later? // We do if there are no traces, i.e. the scroll bar has no range set @@ -1281,6 +1289,7 @@ void View::signals_changed() TraceTreeItemOwner *const owner = trace->owner(); assert(owner); owner->remove_child_item(trace); + signals_added_or_removed = true; } // Remove any empty trace groups @@ -1305,13 +1314,12 @@ void View::signals_changed() if (item->enabled()) offset += extents.second; + signals_added_or_removed = true; } - 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(); + if (signals_added_or_removed && !header_was_shrunk_) + resize_header_to_fit(); update_layout();