@@ -5,7 +5,6 @@ import 'package:built_collection/built_collection.dart';
55import 'package:color/color.dart' ;
66import 'package:over_react/over_react.dart' ;
77import 'package:scadnano/src/state/dialog.dart' ;
8- import 'package:smart_dialogs/smart_dialogs.dart' ;
98
109import 'transform_by_helix_group.dart' ;
1110import '../state/geometry.dart' ;
@@ -216,7 +215,8 @@ class DesignMainLoopoutComponent extends UiStatefulComponent2<DesignMainLoopoutP
216215 int new_length = await app.disable_keyboard_shortcuts_while (() => ask_for_length (
217216 'change loopout length (0 to convert to crossover)' ,
218217 current_length: props.loopout.loopout_num_bases,
219- lower_bound: 0 ));
218+ lower_bound: 0 ,
219+ dialog_type: DialogType .set_loopout_length));
220220 if (new_length == null || new_length == props.loopout.loopout_num_bases) {
221221 return ;
222222 }
@@ -435,122 +435,29 @@ String loopout_path_description_same_helix_same_direction(Loopout loopout, Helix
435435 return path;
436436}
437437
438- // String loopout_path_description_within_group_new(Helix prev_helix, Helix next_helix, Domain prev_domain,
439- // Domain next_domain, Loopout loopout, bool include_start_M) {
440- // Helix top_helix = prev_helix;
441- // Helix bot_helix = next_helix;
442- // Geometry geometry = prev_helix.geometry;
443- // Domain top_domain = prev_domain;
444- // Domain bot_domain = next_domain;
445- // if (top_helix.idx == bot_helix.idx) {
446- // top_helix = bot_helix = next_helix;
447- // if (!prev_domain.forward) {
448- // top_domain = next_domain;
449- // bot_domain = prev_domain;
450- // }
451- // } else if (top_helix.svg_position.y > bot_helix.svg_position.y) {
452- // top_helix = next_helix;
453- // bot_helix = prev_helix;
454- // top_domain = next_domain;
455- // bot_domain = prev_domain;
456- // }
457- // bool top_dom_is_prev = top_domain == prev_domain;
458- //
459- // int top_offset = top_dom_is_prev ? top_domain.offset_3p : top_domain.offset_5p;
460- // int bot_offset = top_dom_is_prev ? bot_domain.offset_5p : bot_domain.offset_3p;
461- // int prev_offset = top_dom_is_prev ? top_offset : bot_offset;
462- // int next_offset = top_dom_is_prev ? bot_offset : top_offset;
463- //
464- // var prev_svg = prev_helix.svg_base_pos(prev_offset, prev_domain.forward);
465- // var next_svg = next_helix.svg_base_pos(next_offset, next_domain.forward);
466- //
467- // var top_svg = prev_svg;
468- // var bot_svg = next_svg;
469- // if (top_helix.idx == bot_helix.idx) {
470- // if (!prev_domain.forward) {
471- // top_svg = next_svg;
472- // bot_svg = prev_svg;
473- // }
474- // } else if (top_helix.svg_position.y > bot_helix.svg_position.y) {
475- // top_svg = next_svg;
476- // bot_svg = prev_svg;
477- // }
478- //
479- // var w, h;
480- //
481- // if (top_helix.idx == bot_helix.idx) {
482- // w = 1.5 * util.sigmoid(loopout.loopout_length - 1) * geometry.base_width_svg;
483- // // h = 5 * util.sigmoid(loopout.loopout_length - 5) * geometry.base_height_svg;
484- // h = 5 * util.sigmoid(loopout.loopout_length - 1) * geometry.base_height_svg;
485- // print('h = $h');
486- // } else {
487- // w = 2 * util.sigmoid(loopout.loopout_length) * geometry.base_width_svg;
488- // h = 5 * util.sigmoid(loopout.loopout_length - 3) * geometry.base_height_svg;
489- // }
490- //
491- // var y_offset_bot = bot_svg.y;
492- // var y_offset_top = top_svg.y;
493- // var x_offset_bot = bot_svg.x;
494- // var x_offset_top = top_svg.x;
495- // if (top_offset == top_domain.start) {
496- // x_offset_top -= w;
497- // } else {
498- // x_offset_top += w;
499- // }
500- // if (bot_offset == bot_domain.start) {
501- // x_offset_bot -= w;
502- // } else {
503- // x_offset_bot += w;
504- // }
505- // y_offset_top += h;
506- // y_offset_bot -= h;
507- //
508- // var c_bot = Point<num>(x_offset_bot, y_offset_bot);
509- // var c_top = Point<num>(x_offset_top, y_offset_top);
510- //
511- // var vector = bot_svg - top_svg;
512- // num angle_radians_from_x_axis = -atan2(vector.y, vector.x);
513- // num angle_degrees_from_x_axis = util.to_degrees(angle_radians_from_x_axis);
514- // num angle_degrees_from_y_axis = 90 - angle_degrees_from_x_axis;
515- // var c_bot_rot = util.rotate(c_bot, angle_degrees_from_y_axis, origin: prev_svg);
516- // var c_top_rot = util.rotate(c_top, angle_degrees_from_y_axis, origin: next_svg);
517- // print('top offset = ${top_offset}');
518- // print(' angle = ${angle_degrees_from_y_axis}');
519- //
520- // var path = (include_start_M ? 'M ${prev_svg.x} ${prev_svg.y} ' : '') +
521- // 'C ${c_bot_rot.x} ${c_bot_rot.y} ${c_top_rot.x} ${c_top_rot.y} '
522- // '${next_svg.x} ${next_svg.y}';
523- //
524- // return path;
525- // }
526-
527- Future <int > ask_for_length (String title, {int current_length, int lower_bound}) async {
528- // https://pub.dev/documentation/smart_dialogs/latest/smart_dialogs/Info/get.html
529- String buttontype = DiaAttr .CHECKBOX ;
530- String htmlTitleText = title;
531- List <String > textLabels = ['new length:' ];
532- List <List <String >> comboInfo = null ;
533- List <String > defaultInputTexts = ['${current_length }' ];
534- List <int > widths = [1 ];
535- List <String > isChecked = null ;
536- bool alternateRowColor = false ;
537- List <String > buttonLabels = ['OK' , 'Cancel' ];
538-
539- UserInput result = await Info .get (buttontype, htmlTitleText, textLabels, comboInfo, defaultInputTexts,
540- widths, isChecked, alternateRowColor, buttonLabels);
541-
542- if (result.buttonCode != 'DIA_ACT_OK' ) {
543- return null ;
544- }
545-
546- String length_str = result.getUserInput (0 )[0 ];
547- int length = int .tryParse (length_str);
548- if (length == null ) {
549- Info .show ('"$length_str " is not a valid integer' );
550- return null ;
551- } else if (length < lower_bound) {
552- Info .show ('length must be at least ${lower_bound }, but it is $length_str ' );
553- return null ;
438+ Future <int > ask_for_length (String title,
439+ {int current_length, int lower_bound, DialogType dialog_type, String tooltip = "" }) async {
440+ int length_idx = 0 ;
441+ var items = List <DialogItem >.filled (1 , null );
442+ items[length_idx] = DialogInteger (
443+ label: 'new length:' ,
444+ value: current_length,
445+ tooltip: tooltip,
446+ );
447+ var dialog = Dialog (
448+ title: title,
449+ type: dialog_type,
450+ items: items,
451+ use_saved_response: false ,
452+ );
453+
454+ List <DialogItem > results = await util.dialog (dialog);
455+ if (results == null ) return current_length;
456+
457+ int length = (results[length_idx] as DialogInteger ).value;
458+ if (length < lower_bound) {
459+ window.alert ('length must be at least ${lower_bound }, but you entered $length ' );
460+ return current_length;
554461 }
555462
556463 return length;
0 commit comments