Skip to content

Commit

Permalink
Added the button for base pair display
Browse files Browse the repository at this point in the history
  • Loading branch information
rayzhuca committed Mar 4, 2024
1 parent f4a80f4 commit 77e21ef
Show file tree
Hide file tree
Showing 8 changed files with 107 additions and 0 deletions.
16 changes: 16 additions & 0 deletions lib/src/actions/actions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4011,6 +4011,22 @@ abstract class ExampleDesignsLoad
static Serializer<ExampleDesignsLoad> get serializer => _$exampleDesignsLoadSerializer;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// pair lines display

abstract class BasePairTypeSet
with BuiltJsonSerializable
implements Action, Built<BasePairTypeSet, BasePairTypeSetBuilder> {
int get selected_idx;

/************************ begin BuiltValue boilerplate ************************/
factory BasePairTypeSet({int selected_idx}) = _$BasePairTypeSet._;

BasePairTypeSet._();

static Serializer<BasePairTypeSet> get serializer => _$basePairTypeSetSerializer;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// change helix position

Expand Down
6 changes: 6 additions & 0 deletions lib/src/reducers/app_ui_state_reducer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:built_collection/built_collection.dart';
import 'package:redux/redux.dart';
import 'package:scadnano/src/reducers/design_reducer.dart';
import 'package:scadnano/src/reducers/strands_copy_info_reducer.dart';
import 'package:scadnano/src/state/base_pair_display_type.dart';
import 'package:scadnano/src/state/dna_assign_options.dart';
import 'package:scadnano/src/state/modification.dart';
import 'package:scadnano/src/state/strand.dart';
Expand Down Expand Up @@ -230,6 +231,10 @@ bool display_major_tick_widths_all_helices_reducer(
bool _, actions.SetDisplayMajorTickWidthsAllHelices action) =>
action.show;

BasePairDisplayType base_pair_type_idx_reducer(
BasePairDisplayType set_base_pair_display, actions.BasePairTypeSet action) =>
BasePairDisplayType.types[action.selected_idx];

bool show_base_pair_lines_reducer(bool _, actions.ShowBasePairLinesSet action) => action.show_base_pair_lines;

bool show_base_pair_lines_with_mismatches_reducer(
Expand Down Expand Up @@ -451,6 +456,7 @@ AppUIStateStorables app_ui_state_storable_local_reducer(AppUIStateStorables stor
..display_base_offsets_of_major_ticks_only_first_helix = TypedReducer<bool, actions.SetDisplayBaseOffsetsOfMajorTicksOnlyFirstHelix>(display_base_offsets_of_major_ticks_only_first_helix_reducer)(storables.display_base_offsets_of_major_ticks_only_first_helix, action)
..display_major_tick_widths = TypedReducer<bool, actions.SetDisplayMajorTickWidths>(display_major_tick_widths_reducer)(storables.display_major_tick_widths, action)
..display_major_tick_widths_all_helices = TypedReducer<bool, actions.SetDisplayMajorTickWidthsAllHelices>(display_major_tick_widths_all_helices_reducer)(storables.display_major_tick_widths_all_helices, action)
..base_pair_display_type = TypedReducer<BasePairDisplayType, actions.BasePairTypeSet>(base_pair_type_idx_reducer)(storables.base_pair_display_type, action)
..show_base_pair_lines = TypedReducer<bool, actions.ShowBasePairLinesSet>(show_base_pair_lines_reducer)(storables.show_base_pair_lines, action)
..show_base_pair_lines_with_mismatches = TypedReducer<bool, actions.ShowBasePairLinesWithMismatchesSet>(show_base_pair_lines_with_mismatches_reducer)(storables.show_base_pair_lines_with_mismatches, action)
..export_svg_text_separately = TypedReducer<bool, actions.ExportSvgTextSeparatelySet>(export_svg_text_separately_reducer)(storables.export_svg_text_separately, action)
Expand Down
3 changes: 3 additions & 0 deletions lib/src/serializers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:built_collection/built_collection.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'package:color/color.dart';
import 'package:scadnano/src/dna_file_type.dart';
import 'package:scadnano/src/state/base_pair_display_type.dart';
import 'package:scadnano/src/state/dna_extensions_move.dart';
import 'package:scadnano/src/state/undo_redo.dart';
import 'package:tuple/tuple.dart';
Expand Down Expand Up @@ -137,6 +138,7 @@ part 'serializers.g.dart';
SelectionBoxRemove,
SelectionRope,
Line,
BasePairDisplayType,
SelectionRopeCreate,
SelectionRopeMouseMove,
SelectionRopeAddPoint,
Expand Down Expand Up @@ -316,6 +318,7 @@ part 'serializers.g.dart';
StrandPasteKeepColorSet,
ExampleDesigns,
ExampleDesignsLoad,
BasePairTypeSet,
HelixPositionSet,
HelixGridPositionSet,
InlineInsertionsDeletions,
Expand Down
3 changes: 3 additions & 0 deletions lib/src/state/app_ui_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import '../state/local_storage_design_choice.dart';

import 'app_ui_state_storables.dart';
import '../serializers.dart';
import 'base_pair_display_type.dart';
import 'context_menu.dart';
import 'dialog.dart';
import 'design.dart';
Expand Down Expand Up @@ -162,6 +163,8 @@ abstract class AppUIState with BuiltJsonSerializable implements Built<AppUIState

bool get show_domain_labels => storables.show_domain_labels;

BasePairDisplayType get base_pair_display_type => storables.base_pair_display_type;

bool get show_base_pair_lines => storables.show_base_pair_lines;

bool get show_base_pair_lines_with_mismatches => storables.show_base_pair_lines_with_mismatches;
Expand Down
4 changes: 4 additions & 0 deletions lib/src/state/app_ui_state_storables.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:built_value/built_value.dart';

import '../state/local_storage_design_choice.dart';
import '../serializers.dart';
import 'base_pair_display_type.dart';
import 'select_mode_state.dart';
import 'edit_mode.dart';
import '../constants.dart' as constants;
Expand Down Expand Up @@ -34,6 +35,8 @@ abstract class AppUIStateStorables

bool get show_domain_labels;

BasePairDisplayType get base_pair_display_type;

bool get show_base_pair_lines;

bool get show_base_pair_lines_with_mismatches;
Expand Down Expand Up @@ -139,6 +142,7 @@ abstract class AppUIStateStorables
b.show_strand_labels = false;
b.show_domain_names = false;
b.show_domain_labels = false;
b.base_pair_display_type = BasePairDisplayType.none;
b.show_base_pair_lines = false;
b.show_base_pair_lines_with_mismatches = false;
b.strand_name_font_size = constants.default_strand_name_font_size;
Expand Down
54 changes: 54 additions & 0 deletions lib/src/state/base_pair_display_type.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import 'dart:html';

import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:built_collection/built_collection.dart';

part 'base_pair_display_type.g.dart';

class BasePairDisplayType extends EnumClass {
const BasePairDisplayType._(String name) : super(name);

@memoized
int get hashCode;

static Serializer<BasePairDisplayType> get serializer => _$basePairDisplayTypeSerializer;

/******************** end BuiltValue boilerplate *********************/

static const BasePairDisplayType none = _$none;
static const BasePairDisplayType lines = _$lines;
static const BasePairDisplayType rectangle = _$rectangle; // used to join two Domains with Crossover
static BuiltList<BasePairDisplayType> types = const [none, lines, rectangle].toBuiltList();

static BuiltSet<BasePairDisplayType> get values => _$values;

static BasePairDisplayType valueOf(String name) => _$valueOf(name);

String to_json() => name;

String display_name() {
// edit this to display a different string than the identifier name above
switch (this) {
case none:
return 'none';
case lines:
return 'lines';
case rectangle:
return 'rectangle';
}
return super.toString();
}

@override
String toString() => display_name();

static BasePairDisplayType from_json(String the_name) {
for (var val in values) {
if (val.name == the_name) {
return val;
}
}
throw ArgumentError('there is no base pair display type with name "${the_name}"');
}
}
1 change: 1 addition & 0 deletions lib/src/state/dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class DialogType extends EnumClass {
static const DialogType move_selected_helices_to_group = _$move_selected_helices_to_group;
static const DialogType export_dna_sequences = _$export_dna_sequences;
static const DialogType load_example_dna_design = _$load_example_dna_design;
static const DialogType base_pair_display = _$base_pair_display;
static const DialogType add_extension = _$add_extension;
static const DialogType set_extension_name = _$set_extension_name;
static const DialogType set_extension_display_length_angle = _$set_extension_display_length_angle;
Expand Down
20 changes: 20 additions & 0 deletions lib/src/view/menu.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:built_collection/built_collection.dart';
import 'package:path/path.dart' as path;
import 'package:over_react/over_react.dart';
import 'package:over_react/over_react_redux.dart';
import 'package:scadnano/src/state/base_pair_display_type.dart';

import 'react_bootstrap.dart';

Expand Down Expand Up @@ -134,6 +135,7 @@ mixin MenuPropsMixin on UiProps {
bool autofit;
bool only_display_selected_helices;
ExampleDesigns example_designs;
// SetBasePairDisplay base_pair_display_types;
bool design_has_insertions_or_deletions;
bool undo_stack_empty;
bool redo_stack_empty;
Expand Down Expand Up @@ -1001,6 +1003,10 @@ or real coordinates in nanometers, depending on whether a grid is selected).'''
..id = 'view_menu_base_pairs'
..key = 'view_menu_base_pairs-dropdown'
..className = 'submenu_item')([
(MenuDropdownItem()
..on_click = ((_) => app.disable_keyboard_shortcuts_while(base_pair_display_dialog))
..display = 'Base pair display'
..key = 'base-pair-display')(),
(MenuBoolean()
..value = props.show_base_pair_lines
..display = 'Base pair lines'
Expand Down Expand Up @@ -1436,6 +1442,20 @@ However, it may be less stable than the main site.'''
int selected_idx = (results[0] as DialogRadio).selected_idx;
props.dispatch(actions.ExampleDesignsLoad(selected_idx: selected_idx));
}

Future<void> base_pair_display_dialog() async {
var dialog = Dialog(title: 'Base pair display', type: DialogType.base_pair_display, items: [
DialogRadio(
label: 'types',
options: BasePairDisplayType.types.map((v) => v.display_name()),
),
]);
List<DialogItem> results = await util.dialog(dialog);
if (results == null) return;

int selected_idx = (results[0] as DialogRadio).selected_idx;
props.dispatch(actions.BasePairTypeSet(selected_idx: selected_idx));
}
}

typedef ActionFromIntCreator = actions.Action Function(int);
Expand Down

0 comments on commit 77e21ef

Please sign in to comment.