Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Track operations widget with layout #7537

Merged

Commits on Oct 9, 2024

  1. Track operations with layout

    Put the elements of the `TrackOperationsWidget` into layouts. These are:
    * The grip that can be used to move tracks
    * The gear icon that opens the operations menu
    * The mute button
    * The solo button
    
    The grip that can be used to move tracks around is extracted into its own class called `TrackGrip`. This has several advantages:
    * It can be put into a layout.
    * It can render itself at arbitrary sizes by simply repeating its pattern pixmap.
    * It can be used in a much more object-oriented way because it emits signals when it is grabbed and released.
    * It is responsible for locally updating its cursor state.
    
    The default cursor of the grip now is an open hand which indicates to the users that it can be grabbed. While being grabbed the cursor now is a closed hand.
    
    ## Technical details
    The class `TrackOperationsWidget` now holds an instance of `TrackGrip` and provides a getter to retrieve it. This getter is used by `TrackView` to connect to the two new signals `grabbed` and `released`. The method `TrackOperationsWidget::paintEvent` now only paints the background as it does not need to paint the grip anymore.
    
    The `TrackView` now handles the grabbing and release of the grip in `TrackView::onTrackGripGrabbed` and `TrackView::onTrackGripReleased`. Because the events and cursor states are now handled by `TrackGrip` this code could be removed from `TrackView::mousePressEvent`.
    
    There was a comment in `TrackView` which indicated that the `TrackOperationsWidget` had to be updated when the track is moved and released because it would hide some elements during the move. The comment and the corresponding code was removed because the operations widget does not hide its elements during moves (this was already the state before the changes made by this commit).
    
    Adjust the style sheets of the classic and default themes with regards to the `QPushButton` that's used to show the gear menu in the `TrackOperationsWidget`. The `>` has been removed because the `QPushButton` is not a direct decendent of the `TrackOperationsWidget` anymore.
    
    ### Wrapping of `PixmapButton` in `QWidget`
    The PixmapButtons that are used in `TrackOperationsWidget` current have to be wrapped into a `QWidget`. This is necessary due to some strange effect where the PixmapButtons are resized to a size that's larger than their minimum/fixed size when the method `show` is called in `TrackContainerView::realignTracks`. Specifically, with the default theme the buttons are resized from their minimum size of (16, 14) to (26, 26). This then makes them behave not as expected in layouts.
    
    The resizing is not done for QWidgets. Therefore we wrap the PixmapButton in a QWidget which is set to a fixed size that will be able to show the active and inactive pixmap. We can then use the QWidget in layouts without any disturbances.
    
    The resizing only seems to affect the track view hierarchy and is triggered by Qt's internal mechanisms. For example the buttons in the mixer view do not seem to be affected.
    
    If you want to debug this simply override "PixmapButton::resizeEvent" and trigger a break point in there, e.g. whenever the new size is not (16, 14).
    michaelgregorius committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    1388462 View commit details
    Browse the repository at this point in the history
  2. More layout-friendly PixmapButton

    Make the `PixmapButton` more friendly for layouts by implementing `minimumSizeHint`. It returns a size that accommodate to show the active and the inactive pixmap.
    
    Also make `sizeHint` return the minimum size hint. The previous implementation would have made layouts jump when the pixmap is toggled with pixmaps of different sizes.
    michaelgregorius committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    ea980bf View commit details
    Browse the repository at this point in the history

Commits on Oct 11, 2024

  1. Code review changes

    Don't use `SIGNAL` and `SLOT` to connect entities.
    
    Initialize `TrackGrip::m_track` to `nullptr` in the header.
    
    Whitespace adjustments for the lambda in `TrackOperationsWidget`.
    michaelgregorius committed Oct 11, 2024
    Configuration menu
    Copy the full SHA
    22ce2fd View commit details
    Browse the repository at this point in the history