Skip to content

Commit

Permalink
closes #870: Feature request: selection preserves color
Browse files Browse the repository at this point in the history
  • Loading branch information
EdwinChang24 committed Nov 20, 2023
1 parent d291063 commit 146a350
Show file tree
Hide file tree
Showing 14 changed files with 117 additions and 28 deletions.
1 change: 1 addition & 0 deletions lib/src/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,7 @@ const css_selector_deletion = 'deletion-cross';
const css_selector_insertion_group = 'insertion-group';
const css_selector_deletion_group = 'deletion-group';
const css_selector_selected = 'selected';
const css_selector_selected_pink = 'selected-pink';

const css_selector_context_menu_item_disabled = 'context_menu_item_disabled';

Expand Down
13 changes: 11 additions & 2 deletions lib/src/view/design_main_strand.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ mixin DesignMainStrandPropsMixin on UiProps {
num modification_font_size;
bool invert_y;
BuiltMap<int, Point<num>> helix_idx_to_svg_position_map;
bool retain_strand_color_on_selection;
}

class DesignMainStrandProps = UiProps with DesignMainStrandPropsMixin, TransformByHelixGroupPropsMixin;
Expand All @@ -100,7 +101,11 @@ class DesignMainStrandComponent extends UiComponent2<DesignMainStrandProps>

var classname = constants.css_selector_strand;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.strand.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down Expand Up @@ -149,7 +154,8 @@ class DesignMainStrandComponent extends UiComponent2<DesignMainStrandProps>
..moving_dna_ends = props.moving_dna_ends
..geometry = props.geometry
..helix_idx_to_svg_position_map = helix_idx_to_svg_position_y_map_on_strand
..only_display_selected_helices = props.only_display_selected_helices)(),
..only_display_selected_helices = props.only_display_selected_helices
..retain_strand_color_on_selection = props.retain_strand_color_on_selection)(),
_insertions(),
_deletions(),
if (props.show_domain_names ||
Expand Down Expand Up @@ -188,6 +194,7 @@ class DesignMainStrandComponent extends UiComponent2<DesignMainStrandProps>
..display_connector = props.modification_display_connector
..helix_idx_to_svg_position_y_map =
props.helix_idx_to_svg_position_map.map((i, p) => MapEntry(i, p.y))
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = 'modifications')(),
]);
}
Expand Down Expand Up @@ -298,6 +305,7 @@ class DesignMainStrandComponent extends UiComponent2<DesignMainStrandProps>
..transform = transform_of_helix(domain.helix)
..svg_position_y = props.helix_idx_to_svg_position_map[helix.idx].y
..display_reverse_DNA_right_side_up = props.display_reverse_DNA_right_side_up
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = util.id_insertion(domain, selectable_insertion.insertion.offset))());
}
}
Expand Down Expand Up @@ -332,6 +340,7 @@ class DesignMainStrandComponent extends UiComponent2<DesignMainStrandProps>
..selected = props.selected_deletions_in_strand.contains(selectable_deletion)
..transform = transform_of_helix(domain.helix)
..svg_position_y = props.helix_idx_to_svg_position_map[domain.helix].y
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = id)());
}
}
Expand Down
7 changes: 6 additions & 1 deletion lib/src/view/design_main_strand_crossover.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ mixin DesignMainStrandCrossoverPropsMixin on UiProps {
Geometry geometry;
num prev_domain_helix_svg_position_y;
num next_domain_helix_svg_position_y;
bool retain_strand_color_on_selection;
}

class DesignMainStrandCrossoverProps = UiProps
Expand All @@ -63,7 +64,11 @@ class DesignMainStrandCrossoverComponent

var classname = constants.css_selector_crossover;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.strand.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
7 changes: 6 additions & 1 deletion lib/src/view/design_main_strand_deletion.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ mixin DesignMainStrandDeletionPropsMixin on UiProps {
Domain get domain => selectable_deletion.domain;
int get deletion => selectable_deletion.offset;
num svg_position_y;
bool retain_strand_color_on_selection;
}

class DesignMainStrandDeletionProps = UiProps with DesignMainStrandDeletionPropsMixin;
Expand Down Expand Up @@ -55,7 +56,11 @@ class DesignMainStrandDeletionComponent extends UiComponent2<DesignMainStrandDel

var classname = constants.css_selector_deletion_group;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.selectable_deletion.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
7 changes: 6 additions & 1 deletion lib/src/view/design_main_strand_dna_end.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ mixin DesignMainDNAEndPropsMixin on UiProps {
bool drawing_potential_crossover;
bool moving_this_dna_end;
Point<num> helix_svg_position;
bool retain_strand_color_on_selection;
}

class DesignMainDNAEndProps = UiProps with DesignMainDNAEndPropsMixin;
Expand Down Expand Up @@ -94,7 +95,11 @@ class DesignMainDNAEndComponent extends UiComponent2<DesignMainDNAEndProps> with
}

if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
7 changes: 6 additions & 1 deletion lib/src/view/design_main_strand_domain.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ mixin DesignMainDomainPropsMixin on UiProps {
BuiltMap<int, Helix> helices;
BuiltMap<String, HelixGroup> groups;
Geometry geometry;
bool retain_strand_color_on_selection;
}

class DesignMainDomainProps = UiProps with DesignMainDomainPropsMixin, TransformByHelixGroupPropsMixin;
Expand All @@ -70,7 +71,11 @@ class DesignMainDomainComponent extends UiComponent2<DesignMainDomainProps>

var classname = constants.css_selector_domain;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.strand.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
7 changes: 6 additions & 1 deletion lib/src/view/design_main_strand_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ mixin DesignMainExtensionPropsMixin on UiProps {
BuiltMap<int, Helix> helices;
BuiltMap<String, HelixGroup> groups;
Geometry geometry;
bool retain_strand_color_on_selection;
}

class DesignMainExtensionProps = UiProps with DesignMainExtensionPropsMixin, TransformByHelixGroupPropsMixin;
Expand All @@ -76,7 +77,11 @@ class DesignMainExtensionComponent extends UiComponent2<DesignMainExtensionProps

var classname = constants.css_selector_extension;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.strand.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
8 changes: 7 additions & 1 deletion lib/src/view/design_main_strand_insertion.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ mixin DesignMainStrandInsertionPropsMixin on UiProps {
Insertion get insertion => selectable_insertion.insertion;

Domain get domain => selectable_insertion.domain;

bool retain_strand_color_on_selection;
}

class DesignMainStrandInsertionProps = UiProps with DesignMainStrandInsertionPropsMixin;
Expand All @@ -50,7 +52,11 @@ class DesignMainStrandInsertionComponent extends UiComponent2<DesignMainStrandIn
render() {
var classname = constants.css_selector_insertion_group;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.selectable_insertion.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
7 changes: 6 additions & 1 deletion lib/src/view/design_main_strand_loopout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ mixin DesignMainLoopoutPropsMixin on UiProps {
Geometry geometry;
num prev_helix_svg_position_y;
num next_helix_svg_position_y;
bool retain_strand_color_on_selection;
}

class DesignMainLoopoutProps = UiProps with DesignMainLoopoutPropsMixin, TransformByHelixGroupPropsMixin;
Expand All @@ -69,7 +70,11 @@ class DesignMainLoopoutComponent extends UiStatefulComponent2<DesignMainLoopoutP
render() {
var classname = constants.css_selector_loopout;
if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.strand.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
8 changes: 7 additions & 1 deletion lib/src/view/design_main_strand_modification.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ mixin DesignMainStrandModificationProps on UiProps {
num helix_svg_position_y;

Extension ext; // optional; used if mod is on extension

bool retain_strand_color_on_selection;
}

class DesignMainStrandModificationComponent extends UiComponent2<DesignMainStrandModificationProps> {
Expand Down Expand Up @@ -87,7 +89,11 @@ class DesignMainStrandModificationComponent extends UiComponent2<DesignMainStran
}

if (props.selected) {
classname += ' ' + constants.css_selector_selected;
if (props.retain_strand_color_on_selection) {
classname += ' ' + constants.css_selector_selected;
} else {
classname += ' ' + constants.css_selector_selected_pink;
}
}
if (props.strand.is_scaffold) {
classname += ' ' + constants.css_selector_scaffold;
Expand Down
5 changes: 5 additions & 0 deletions lib/src/view/design_main_strand_modifications.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ mixin DesignMainStrandModificationsPropsMixin on UiProps {

BuiltSet<SelectableModification> selected_modifications_in_strand;
BuiltMap<int, num> helix_idx_to_svg_position_y_map;

bool retain_strand_color_on_selection;
}

class DesignMainStrandModificationsProps = UiProps
Expand Down Expand Up @@ -65,6 +67,7 @@ class DesignMainStrandModificationsComponent extends UiComponent2<DesignMainStra
..helix_svg_position_y = props.helix_idx_to_svg_position_y_map[helix_5p.idx]
..ext = ext
..geometry = props.geometry
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = "5'")());
}
}
Expand All @@ -88,6 +91,7 @@ class DesignMainStrandModificationsComponent extends UiComponent2<DesignMainStra
..helix_svg_position_y = props.helix_idx_to_svg_position_y_map[helix_3p.idx]
..ext = ext
..geometry = props.geometry
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = "3'")());
}
}
Expand Down Expand Up @@ -125,6 +129,7 @@ class DesignMainStrandModificationsComponent extends UiComponent2<DesignMainStra
..dna_idx_mod = dna_idx_mod
..helix_svg_position_y = props.helix_idx_to_svg_position_y_map[helix.idx]
..geometry = props.geometry
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = "internal-${dna_idx_mod}")());
}
} else if (ss_with_mod is Loopout) {
Expand Down
6 changes: 6 additions & 0 deletions lib/src/view/design_main_strand_paths.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ mixin DesignMainStrandPathsPropsMixin on UiProps {
List<ContextMenuItem> Function(Strand strand, {Substrand substrand, Address address, ModificationType type})
context_menu_strand;
BuiltMap<int, Point<num>> helix_idx_to_svg_position_map;
bool retain_strand_color_on_selection;
}

class DesignMainStrandPathsProps = UiProps
Expand Down Expand Up @@ -115,6 +116,7 @@ class DesignMainStrandPathsComponent extends UiComponent2<DesignMainStrandPathsP
..geometry = props.geometry
..strand_tooltip = props.strand_tooltip
..helix_svg_position = props.helix_idx_to_svg_position_map[helix.idx]
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = "domain-$i")());

// don't draw 5' or 3' end of a circular strand
Expand All @@ -141,6 +143,7 @@ class DesignMainStrandPathsComponent extends UiComponent2<DesignMainStrandPathsP
..moving_this_dna_end = props.moving_dna_ends && end_selected
..drawing_potential_crossover = props.drawing_potential_crossover
..helix_svg_position = props.helix_idx_to_svg_position_map[helix.idx]
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = key)());
is_5p = false;
}
Expand Down Expand Up @@ -170,6 +173,7 @@ class DesignMainStrandPathsComponent extends UiComponent2<DesignMainStrandPathsP
..next_helix = next_helix
..prev_helix_svg_position_y = props.helix_idx_to_svg_position_map[prev_helix.idx].y
..next_helix_svg_position_y = props.helix_idx_to_svg_position_map[next_helix.idx].y
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = "loopout-$i")());
}
} else if (substrand is Extension) {
Expand Down Expand Up @@ -216,6 +220,7 @@ class DesignMainStrandPathsComponent extends UiComponent2<DesignMainStrandPathsP
..moving_this_dna_end = props.moving_dna_ends && end_selected
..drawing_potential_crossover = props.drawing_potential_crossover
..helix_svg_position = props.helix_idx_to_svg_position_map[adj_helix.idx]
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = key)());
}
}
Expand Down Expand Up @@ -243,6 +248,7 @@ class DesignMainStrandPathsComponent extends UiComponent2<DesignMainStrandPathsP
..geometry = props.geometry
..prev_domain_helix_svg_position_y = props.helix_idx_to_svg_position_map[prev_ss.helix].y
..next_domain_helix_svg_position_y = props.helix_idx_to_svg_position_map[next_ss.helix].y
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = 'crossover-paths-${idx_crossover - 1}')());
}
}
Expand Down
5 changes: 4 additions & 1 deletion lib/src/view/design_main_strands.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ UiFactory<DesignMainStrandsProps> ConnectedDesignMainStrands =
..domain_label_font_size = state.ui_state.domain_label_font_size
..helix_idx_to_svg_position_map = state.helix_idx_to_svg_position_map
..display_reverse_DNA_right_side_up = state.ui_state.display_reverse_DNA_right_side_up
..geometry = state.design.geometry;
..geometry = state.design.geometry
..retain_strand_color_on_selection = state.ui_state.retain_strand_color_on_selection;
})(DesignMainStrands);

UiFactory<DesignMainStrandsProps> DesignMainStrands = _$DesignMainStrands;
Expand Down Expand Up @@ -73,6 +74,7 @@ mixin DesignMainStrandsProps on UiProps {
bool display_reverse_DNA_right_side_up;
Geometry geometry;
BuiltMap<int, Point<num>> helix_idx_to_svg_position_map;
bool retain_strand_color_on_selection;
}

class DesignMainStrandsComponent extends UiComponent2<DesignMainStrandsProps> with PureComponent {
Expand Down Expand Up @@ -131,6 +133,7 @@ class DesignMainStrandsComponent extends UiComponent2<DesignMainStrandsProps> wi
..geometry = props.geometry
..helix_idx_to_svg_position_map = props.helix_idx_to_svg_position_map
..display_reverse_DNA_right_side_up = props.display_reverse_DNA_right_side_up
..retain_strand_color_on_selection = props.retain_strand_color_on_selection
..key = strand.toString())());
}

Expand Down
Loading

0 comments on commit 146a350

Please sign in to comment.