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

Replace the ChooseItem control with new GoToItem #12

Conversation

timrae
Copy link

@timrae timrae commented Jan 15, 2017

As we discussed in mixxxdj#953, I've implemented a "go to" control.

It behaves slightly differently from how you suggested (it does a carriage return + tab, unless the currently focused pane is the WTrackTableView).

I found that it would be rather unintuitive to have the collapsing/uncollapsing together with this control (not to mention much more difficult to implement), as uncollapsing a folder is not always the appropriate action when browsing the filesystem. E.g. maybe we have ~/Music/SomeArtist which contains both songs and folders ( ~/Music/SomeArtist/abc.mp3 and ~/Music/SomeArtist/SomeAlbum/). When they click on the SomeArtist folder, we have no idea whether they want to "goto" SomeArtist, or they want to toggle the expanded state and show SomeAlbum in the tree.

So I think it's more intuitive to have it goto SomeArtist and use the MoveLeft / MoveRight controls to set the expanded state (most likely via a shift+right on the controller).

@daschuer
Copy link
Owner

Looks good thank you. I will test it in our common branch.

@daschuer daschuer merged commit 24c5a7d into daschuer:jmigual-library-redesign Jan 15, 2017
@daschuer
Copy link
Owner

I am staring to miss that feature on the cursor right keyboard key ...

It feels now just right, when browsing the Library. However it does not work quite well, when we use it in the Auto DJ or in the Prepare feature.

I think we have to make this more intelligent. Did you consider the idea using an unused key code to pass this event to the widget and special case it there?
In case of the library, it can actually be translated into enter+tab as long we stick with the single pane feature.

In general we should move focus to the related track table.

@timrae timrae deleted the replace-chooseitem-with-gotoitem branch January 16, 2017 13:24
@timrae
Copy link
Author

timrae commented Jan 16, 2017

@daschuer

However it does not work quite well, when we use it in the Auto DJ or in the Prepare feature.

I think those features are awkward to navigate with the keyboard as well... IMO the sidepane should just be skipped for these features. Maybe we can setFocusPolicy(Qt::ClickFocus); for those features.

@daschuer
Copy link
Owner

We may have then an accessibility problem when we have no mouse.

@timrae
Copy link
Author

timrae commented Jan 17, 2017

True... alternatively we could override the key handling so that up and down move the focus within the frame and tab changes the frame in the same way as the other features

daschuer pushed a commit that referenced this pull request Dec 11, 2017
fix positions of mixer controls, rearrange vinyl controls
daschuer pushed a commit that referenced this pull request Mar 16, 2022
…h sync

When loading a track that is not yet present in the library (and thus
doesn't have any BPM because it hasn't been analyzed yet) while another
deck is playing and both decks have sync enabled, a debug assertion is
triggered:

    DEBUG ASSERT: "isValid()" in function double mixxx::Bpm::value() const at src/track/bpm.h:53
    Aborted (core dumped)

The backtrace looks as follows:

    #0  0x00007f175c87234c in __pthread_kill_implementation () at /usr/lib/libc.so.6
    #1  0x00007f175c8254b8 in raise () at /usr/lib/libc.so.6
    #2  0x00007f175c80f534 in abort () at /usr/lib/libc.so.6
    #3  0x00007f175cf05ee4 in qt_assert(char const*, char const*, int) () at /usr/lib/libQt5Core.so.5
    #4  0x000055deb2e67e1c in mixxx::(anonymous namespace)::handleMessage(QtMsgType, QMessageLogContext const&, QString const&) (type=<optimized out>, context=<optimized out>, input=<optimized out>) at src/util/logging.cpp:355
    #5  0x00007f175cf47128 in  () at /usr/lib/libQt5Core.so.5
    #6  0x00007f175cf3fd8a in  () at /usr/lib/libQt5Core.so.5
    #7  0x00007f175cf06526 in QMessageLogger::critical(char const*, ...) const () at /usr/lib/libQt5Core.so.5
    #8  0x000055deb2e5c720 in mixxx_debug_assert(char const*, char const*, int, char const*) (assertion=assertion@entry=0x55deb39bd0db "isValid()", file=file@entry=0x55deb39bbf30 "src/track/bpm.h", line=line@entry=53, function=function@entry=0x55deb39bbf08 "double mixxx::Bpm::value() const") at gsrc/util/assert.h:9
    #9  0x000055deb2ee7e7e in mixxx_debug_assert_return_true(char const*, char const*, int, char const*) (function=0x55deb39bbf08 "double mixxx::Bpm::value() const", line=53, file=0x55deb39bbf30 "src/track/bpm.h", assertion=0x55deb39bd0db "isValid()") at gsrc/util/assert.h:18
    #10 mixxx::Bpm::value() const (this=<synthetic pointer>) at src/track/bpm.h:53
    #11 mixxx::operator*(mixxx::Bpm, double) (multiple=1, bpm=...) at src/track/bpm.h:160
    #12 SyncControl::setLocalBpm(mixxx::Bpm) (this=<optimized out>, localBpm=...) at src/engine/sync/synccontrol.cpp:567
    #13 0x000055deb34c7ba3 in EngineBuffer::postProcess(int) (this=0x55deb56eb060, iBufferSize=2048) at src/engine/enginebuffer.cpp:1318
    #14 0x000055deb3139023 in EngineMaster::processChannels(int) (this=0x55deb5449440, iBufferSize=<optimized out>) at src/engine/enginemaster.cpp:383
    #15 0x000055deb31394f7 in EngineMaster::process(int) (this=0x55deb5449440, iBufferSize=iBufferSize@entry=2048) at src/engine/enginemaster.cpp:410
    #16 0x000055deb2f91d0b in SoundManager::onDeviceOutputCallback(long) (this=<optimized out>, iFramesPerBuffer=iFramesPerBuffer@entry=1024) at src/soundio/soundmanager.cpp:596
    #17 0x000055deb32dd794 in SoundDevicePortAudio::callbackProcessClkRef(long, float*, float const*, PaStreamCallbackTimeInfo const*, unsigned long) (this=0x55deb553e6b0, framesPerBuffer=1024, out=<optimized out>, in=<optimized out>, timeInfo=<optimized out>, statusFlags=<optimized out>) at src/soundio/sounddeviceportaudio.cpp:965

This happens because `newLocalBpm` is invalid when `localBpm` is
invalid. Trying to do sync decks while no tempo information is available
does not make sense, so we only synchronize decks if the local BPM is
available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants