Column/row click and click-drag should follow the same rules

Issue #340 resolved
Robert Leach created an issue

USE CASE: WHAT DO YOU WANT TO DO?

I want to be able to be able to select rows without changing the selected columns and select whole rows (i.e. change column selection by selection all columns) by clicks & click-drags. I want to be able to do both types of selections.

STEPS TO REPRODUCE AN ISSUE (OR TRIGGER A NEW FEATURE)

In order to select whole rows, ignoring a column selection:

  1. Click-drag across some columns to select whole columns
  2. Click-drag across some rows to select whole rows

In order the select rows, respecting the column selection:

  1. Click-drag across some columns to select whole columns
  2. Single-click a starting row label
  3. Single-shift-click an ending row label

CURRENT BEHAVIOR

One example: Single-clicks of labels (or a tree-node) keep the opposing label selections. Click-drags of labels ignore the opposing label selections.

See comments below for other examples of inconsistent behavior.

EXPECTED BEHAVIOR

See the comment below which explains these desired modified behaviors:

  • click when nothing is selected - select an entire single row/col
  • click when something is selected - deselect current dim. selection and select a single row/col restricted to existing opposing dimension selection
  • click-drag when nothing is selected - select a set of entire rows/cols
  • click-drag when something is selected - deselect current dim. selection and select a set of rows/cols restricted to existing opposing dimension selection
  • shift-click when nothing is selected - Same as "click when nothing is selected"
  • shift-click when something is selected - select an additional set of rows/cols from closest selection to click restricted to existing opposing dimension selection
  • shift-click-drag when nothing is selected - Same as "click-drag when nothing is selected"
  • shift-click-drag when something is selected - select an additional set of rows/cols restricted to existing opposing dimension selection
  • option-click when nothing is selected - No change in selection
  • option-click when something is selected - deselect a single row/col
  • option-click-drag when nothing is selected - No change in selection
  • option-click-drag when something is selected - deselect a set of rows/cols
  • command-click when nothing is selected - Same as "click when nothing is selected"
  • command-click when something is selected - toggle a single row/col restricted to existing opposing dimension selection
  • command-click-drag when nothing is selected - Same as "click-drag when nothing is selected"
  • command-click-drag when something is selected - toggle a set of rows/cols restricted to existing opposing dimension selection

DEVELOPERS ONLY SECTION

SUGGESTED CHANGE (Pseudocode optional)

Rearrange the selection behaviors triggered for the different modifier clicks & click-drags. All the behaviors exist. They just need to be organized more consistently.

FILES AFFECTED (where the changes will be implemented) - developers only

  • LabelView
  • TRView

LEVEL OF EFFORT - developers only

minor

COMMENTS

There is definitely a duplicate BB issue out there. I think it mentions a modifier to select a "intersection". This issue more discretely defines the problem and how to solve it.

Comments (14)

  1. Robert Leach reporter
    • edited description

    Forgot to say what should be deselected when the option-shift modifiers are held.

  2. Robert Leach reporter

    There are a few other inconsistencies I've discovered:

    • Shift-clicking inside a selected area deselects the region from the closest edge

    This was originally intended to mimmic shift-clicks of files in finder windows (in list or column view). While it accurately represents that behavior, I'm not sure that in the context of selecting/deselecting an image area. Maybe it does, but in terms of image editors, there's usually an "add selection" tool and a "remove selection" tool, and that may be more intuitive. Perhaps shift-click and shift-click-drag should only add selection. When used inside a selection, it should probably do nothing. Conversely...

    • option-click only ever deselects one row/column

    This should probably be the opposite of the shift-click and option-click-drag should be the opposite of shift-click-drag.

    Command-click only toggles a single row/column and I think that's fine. But what's the intuitive way one would want narrow an entire row selection by clicked (or click-dragged columns). I.e. How would one positively select the combination of rows and columns that they want resulting in a contiguous rectangular selection using only 2 click-drags?

    • Selecting an entire set of rows and then clicking a single column results in a selection of only the previously selected rows in the clicked column whereas a click-drag selects entire columns, ignoring the previously selected rows.

    This is inconsistent and perhaps hints at the solution to the above question. A simple click-drag should respect previously selected elements of the other dimension.

    Alright, here are the new requirements that I think would be more intuitive and consistent. This relates only to click interactions of column and row labels:

    basic concepts:

    • click (no modifier) creates a new selection in the dimension clicked (i.e. deselects existing selections in that dimension) and does not change an existing selection in the opposing dimension (exception: when nothing is selected, it selects all applicable)
    • shift adds to an existing selection in the dimension clicked and does not change an existing selection in the opposing dimension (exception: when nothing is selected, it behaves like a regular click with no modifier)
    • option removes from an existing selection in the dimension clicked and does not change an existing selection in the opposing dimension
    • command precisely toggles individual selections in the dimension clicked (never in bulk)
    • -drag - applies changes to only the rows/cols dragged over.

    Shift and option clicks extend the closest selected/unselection region. The corresponding drags only affect the rows/cols dragged over. Command applies only to the specific rows/cols (i.e. does not extend).

    Specifics:

    • click when nothing is selected - select an entire single row/col
    • click when something is selected - deselect current dim. selection and select a single row/col restricted to existing opposing dimension selection
    • click-drag when nothing is selected - select a set of entire rows/cols
    • click-drag when something is selected - deselect current dim. selection and select a set of rows/cols restricted to existing opposing dimension selection
    • shift-click when nothing is selected - Same as "click when nothing is selected"
    • shift-click when something is selected - select an additional set of rows/cols from closest selection to click restricted to existing opposing dimension selection
    • shift-click-drag when nothing is selected - Same as "click-drag when nothing is selected"
    • shift-click-drag when something is selected - select an additional set of rows/cols restricted to existing opposing dimension selection
    • option-click when nothing is selected - No change in selection
    • option-click when something is selected - deselect a single row/col
    • option-click-drag when nothing is selected - No change in selection
    • option-click-drag when something is selected - deselect a set of rows/cols
    • command-click when nothing is selected - Same as "click when nothing is selected"
    • command-click when something is selected - toggle a single row/col restricted to existing opposing dimension selection
    • command-click-drag when nothing is selected - Same as "click-drag when nothing is selected"
    • command-click-drag when something is selected - toggle a set of rows/cols restricted to existing opposing dimension selection This will be more consistent behavior. I will edit the issue to reflect this.
  3. Robert Leach reporter

    For the code modification, there are 3 things to check for the nested conditional logic structure:

    1. Whether a selection already exists
    2. What modifier is held down (and modifier precedence: control (do nothing), shift, command, option)
    3. Whether it's a simple click or a drag.
  4. Robert Leach reporter

    This resolves issue #340. Clicks of row/column labels with modifiers and/or drags are now consistent both among eachother and with selections of tree nodes.

    → <<cset 29b6b80936fa>>

  5. Robert Leach reporter

    This resolves issue #340. Clicks of row/column labels with modifiers and/or drags are now consistent both among eachother and with selections of tree nodes.

    → <<cset 29b6b80936fa>>

  6. Log in to comment