HamBook – Diff between revs 54 and 56
?pathlinks?
Rev 54 | Rev 56 | |||
---|---|---|---|---|
Line 8... | Line 8... | |||
8 | using System.Threading.Tasks; |
8 | using System.Threading.Tasks; |
|
9 | using System.Windows.Forms; |
9 | using System.Windows.Forms; |
|
10 | using HamBook.Properties; |
10 | using HamBook.Properties; |
|
11 | using HamBook.Radios; |
11 | using HamBook.Radios; |
|
12 | using HamBook.Radios.Generic; |
12 | using HamBook.Radios.Generic; |
|
- | 13 | using HamBook.Radios.Yaesu.FT_891; |
||
13 | using HamBook.Utilities; |
14 | using HamBook.Utilities; |
|
- | 15 | using HamBook.Utilities.Serialization; |
||
14 | using Serilog; |
16 | using Serilog; |
|
15 | using static Org.BouncyCastle.Crypto.Digests.SkeinEngine; |
17 | using static System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar; |
|
Line 16... | Line 18... | |||
16 | |
18 | |
|
17 | namespace HamBook |
19 | namespace HamBook |
|
18 | { |
20 | { |
|
19 | public partial class MenuForm : Form |
21 | public partial class MenuForm : Form |
|
20 | { |
22 | { |
|
- | 23 | private static ScheduledContinuation _searchTextBoxChangedContinuation; |
||
Line 21... | Line 24... | |||
21 | private static ScheduledContinuation _searchTextBoxChangedContinuation; |
24 | private readonly CancellationTokenSource _cancellationTokenSource; |
|
22 | |
- | ||
23 | private readonly CatAssemblies _catAssemblies; |
- | ||
24 | private readonly MenuIndex _menuIndex; |
25 | |
|
25 | private CancellationToken _cancellationToken; |
26 | private readonly CatAssemblies _catAssemblies; |
|
26 | private CancellationToken _localCancellationToken; |
27 | private readonly CancellationToken _localCancellationToken; |
|
27 | private readonly CancellationTokenSource _localCancellationTokenSource; |
- | ||
28 | private readonly CancellationTokenSource _cancellationTokenSource; |
28 | private readonly CancellationTokenSource _localCancellationTokenSource; |
|
- | 29 | private CancellationToken _cancellationToken; |
||
29 | private CancellationTokenSource _readLinkedCancellationTokenSource; |
30 | private CancellationTokenSource _readCancellationTokenSource; |
|
30 | private CancellationTokenSource _readCancellationTokenSource; |
31 | private CancellationTokenSource _readLinkedCancellationTokenSource; |
|
31 | private Task _readMenuTask; |
32 | private Task _readMenuTask; |
|
32 | private CancellationTokenSource _writeCancellationTokenSource; |
33 | private CancellationTokenSource _writeCancellationTokenSource; |
|
- | 34 | private CancellationTokenSource _writeLinkedCancellationTokenSource; |
||
Line 33... | Line 35... | |||
33 | private CancellationTokenSource _writeLinkedCancellationTokenSource; |
35 | private Task _writeMenuTask; |
|
34 | private Task _writeMenuTask; |
36 | private readonly Radios.Generic.RadioMenu _radioMenu; |
|
35 | |
37 | |
|
36 | public MenuForm() |
38 | public MenuForm() |
|
Line 48... | Line 50... | |||
48 | Configuration = configuration; |
50 | Configuration = configuration; |
|
49 | _catAssemblies = catAssemblies; |
51 | _catAssemblies = catAssemblies; |
|
50 | _cancellationToken = cancellationToken; |
52 | _cancellationToken = cancellationToken; |
|
Line 51... | Line 53... | |||
51 | |
53 | |
|
52 | _searchTextBoxChangedContinuation = new ScheduledContinuation(); |
54 | _searchTextBoxChangedContinuation = new ScheduledContinuation(); |
|
Line 53... | Line 55... | |||
53 | _menuIndex = MenuIndex.Create(Configuration.Radio); |
55 | _radioMenu = Radios.Generic.RadioMenu.Create(Configuration.Radio); |
|
54 | |
56 | |
|
55 | _cancellationTokenSource = |
57 | _cancellationTokenSource = |
|
56 | CancellationTokenSource.CreateLinkedTokenSource(_localCancellationToken, cancellationToken); |
58 | CancellationTokenSource.CreateLinkedTokenSource(_localCancellationToken, cancellationToken); |
|
Line 134... | Line 136... | |||
134 | |
136 | |
|
135 | return value; |
137 | return value; |
|
Line 136... | Line 138... | |||
136 | }, "3.0"); |
138 | }, "3.0"); |
|
- | 139 | |
||
- | 140 | AddMenuItem("0404", "BEACON INTERVAL", |
||
137 | |
141 | () => |
|
- | 142 | { |
||
138 | AddMenuItem("0404", "BEACON INTERVAL", |
143 | return new[] { "OFF" }.Concat(Mathematics.GenerateRange(1, 690).Select(i => i.ToString())); |
|
Line 139... | Line 144... | |||
139 | () => { return new[] { "OFF" }.Concat(Mathematics.GenerateRange(1, 690).Select(i => i.ToString())); }, |
144 | }, |
|
140 | "OFF"); |
145 | "OFF"); |
|
Line 550... | Line 555... | |||
550 | break; |
555 | break; |
|
551 | case DataGridViewRowProgressFailure<int> rowProgressFailure: |
556 | case DataGridViewRowProgressFailure<int> rowProgressFailure: |
|
552 | Log.Error(rowProgressFailure.Exception, $"{Resources.Could_not_read_menu}"); |
557 | Log.Error(rowProgressFailure.Exception, $"{Resources.Could_not_read_menu}"); |
|
553 | dataGridView1.Rows[rowProgressFailure.Row.Index].DefaultCellStyle.BackColor = Color.Red; |
558 | dataGridView1.Rows[rowProgressFailure.Row.Index].DefaultCellStyle.BackColor = Color.Red; |
|
Line -... | Line 559... | |||
- | 559 | |
||
554 | |
560 | toolStripStatusLabel1.Text = |
|
555 | toolStripStatusLabel1.Text = $"{Resources.Could_not_write_menu} {rowProgressFailure.Data:0000}"; |
561 | $"{Resources.Could_not_write_menu} {rowProgressFailure.Data:0000}"; |
|
556 | break; |
562 | break; |
|
Line 557... | Line 563... | |||
557 | } |
563 | } |
|
558 | |
564 | |
|
Line 579... | Line 585... | |||
579 | { |
585 | { |
|
580 | var count = rows.Count; |
586 | var count = rows.Count; |
|
Line 581... | Line 587... | |||
581 | |
587 | |
|
582 | for (var i = 0; i < count && !cancellationToken.IsCancellationRequested; ++i) |
588 | for (var i = 0; i < count && !cancellationToken.IsCancellationRequested; ++i) |
|
583 | { |
589 | { |
|
584 | if (!int.TryParse($"{rows[i].Cells["IndexColumn"].Value}", out var menu)) |
- | ||
585 | { |
- | ||
586 | continue; |
- | ||
Line 587... | Line 590... | |||
587 | } |
590 | if (!int.TryParse($"{rows[i].Cells["IndexColumn"].Value}", out var menu)) continue; |
|
588 | |
591 | |
|
589 | try |
592 | try |
|
590 | { |
- | ||
591 | var value = $"{rows[i].Cells["ValueColumn"].Value}"; |
- | ||
592 | int parameter = 0; |
- | ||
593 | switch (menu) |
- | ||
594 | { |
- | ||
595 | case 205: |
- | ||
596 | parameter = Array.IndexOf(new[] { "OFF", "0.5", "1.0", "2.0" }, value); |
- | ||
597 | break; |
- | ||
598 | case 508: |
- | ||
599 | case 509: |
- | ||
600 | case 510: |
- | ||
601 | case 511: |
- | ||
602 | case 512: |
- | ||
603 | case 515: |
- | ||
604 | case 1623: |
- | ||
605 | case 206: |
- | ||
606 | parameter = Array.IndexOf(new[] { "DISABLE", "ENABLE" }, value); |
- | ||
607 | break; |
- | ||
608 | case 207: |
- | ||
609 | parameter = Array.IndexOf(new[] { "UPPER", "LOWER" }, value); |
- | ||
610 | break; |
- | ||
611 | case 401: |
- | ||
612 | parameter = Array.IndexOf(new[] { "OFF", "BUG", "ELEKEY-A", "ELEKEY-B", "ELEKEY-Y", "ACS" }, |
- | ||
613 | value); |
- | ||
614 | break; |
- | ||
615 | case 1006: |
- | ||
616 | case 1007: |
- | ||
617 | case 402: |
- | ||
618 | parameter = Array.IndexOf(new[] { "NOR", "REV" }, value); |
- | ||
619 | break; |
- | ||
620 | case 403: |
- | ||
621 | var list = new List<string>(); |
- | ||
622 | for (var j = 2.0; j <= 4.5; j += 0.1) |
- | ||
623 | { |
- | ||
624 | var v = $"{(decimal)j:f1}"; |
- | ||
625 | list.Add(v); |
- | ||
626 | } |
- | ||
627 | |
- | ||
628 | parameter = list.IndexOf(value); |
- | ||
629 | break; |
- | ||
630 | case 404: |
- | ||
631 | parameter = Array.IndexOf( |
- | ||
632 | new[] { "OFF" }.Concat(Mathematics.GenerateRange(1, 690).Select(o => o.ToString())) |
- | ||
633 | .ToArray(), value); |
- | ||
634 | break; |
- | ||
635 | case 405: |
- | ||
636 | parameter = Array.IndexOf(new[] { "1290", "AUNO", "AUNT", "A2NO", "A2NT", "12NO", "12NT" }, |
- | ||
637 | value); |
- | ||
638 | break; |
- | ||
639 | case 407: |
- | ||
640 | case 408: |
- | ||
641 | case 409: |
- | ||
642 | case 410: |
- | ||
643 | case 411: |
- | ||
644 | parameter = Array.IndexOf(new[] { "TEXT", "MESSAGE" }, value); |
- | ||
645 | break; |
- | ||
646 | case 501: |
- | ||
647 | parameter = Array.IndexOf(new[] { 1, 3, 10 }, value); |
- | ||
648 | break; |
- | ||
649 | case 502: |
- | ||
650 | parameter = Array.IndexOf(new[] { 10, 30, 50 }, value); |
- | ||
651 | break; |
- | ||
652 | case 505: |
- | ||
653 | parameter = Array.IndexOf(new[] { "RF", "SQL" }, value); |
- | ||
654 | break; |
- | ||
655 | case 506: |
- | ||
656 | parameter = Array.IndexOf(new[] { 4800, 9600, 19200, 38400 }, value); |
- | ||
657 | break; |
- | ||
658 | case 507: |
- | ||
659 | parameter = Array.IndexOf(new[] { 10, 100, 1000, 3000 }, value); |
- | ||
660 | break; |
- | ||
661 | case 513: |
- | ||
662 | parameter = Array.IndexOf(Mathematics.GenerateRange(-20, 20).ToArray(), value); |
- | ||
663 | break; |
- | ||
664 | case 514: |
- | ||
665 | parameter = Array.IndexOf( |
- | ||
666 | new[] { "OFF" }.Concat(Mathematics.GenerateRange(1, 30).Select(o => o.ToString())) |
- | ||
667 | .ToArray(), |
- | ||
668 | value); |
- | ||
669 | break; |
- | ||
670 | case 516: |
- | ||
671 | parameter = Array.IndexOf(new[] { "PAUSE", "TIME" }, value); |
- | ||
672 | break; |
- | ||
673 | case 517: |
- | ||
674 | parameter = Array.IndexOf(Mathematics.GenerateRange(-25, 25).ToArray(), value); |
- | ||
675 | break; |
- | ||
676 | case 518: |
- | ||
677 | parameter = Array.IndexOf(new[] { "RX", "TX", "TRX" }, value); |
- | ||
678 | break; |
- | ||
679 | case 519: |
- | ||
680 | parameter = Array.IndexOf(new[] { "OFF", "1", "2", "4", "6", "8", "10", "12" }, value); |
- | ||
681 | break; |
- | ||
682 | case 520: |
- | ||
683 | parameter = Array.IndexOf(new[] { "NORMAL", "CONTEST" }, value); |
- | ||
684 | break; |
- | ||
685 | case 601: |
- | ||
686 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50) |
- | ||
687 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
688 | break; |
- | ||
689 | case 1102: |
- | ||
690 | case 1104: |
- | ||
691 | case 1002: |
- | ||
692 | case 1004: |
- | ||
693 | case 806: |
- | ||
694 | case 808: |
- | ||
695 | case 704: |
- | ||
696 | case 702: |
- | ||
697 | case 604: |
- | ||
698 | case 602: |
- | ||
699 | parameter = Array.IndexOf(new[] { 6, 18 }, value); |
- | ||
700 | break; |
- | ||
701 | case 603: |
- | ||
702 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50) |
- | ||
703 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
704 | break; |
- | ||
705 | case 1105: |
- | ||
706 | case 901: |
- | ||
707 | case 809: |
- | ||
708 | case 605: |
- | ||
709 | parameter = Array.IndexOf(new[] { "MIC", "REAR" }, value); |
- | ||
710 | break; |
- | ||
711 | case 1108: |
- | ||
712 | case 903: |
- | ||
713 | case 810: |
- | ||
714 | case 607: |
- | ||
715 | parameter = Array.IndexOf(new[] { "DAKY", "RTS", "DTR" }, value); |
- | ||
716 | break; |
- | ||
717 | case 701: |
- | ||
718 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50) |
- | ||
719 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
720 | break; |
- | ||
721 | case 703: |
- | ||
722 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50) |
- | ||
723 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
724 | break; |
- | ||
725 | case 706: |
- | ||
726 | parameter = Array.IndexOf(new[] { "OFF", "50M", "ON" }, value); |
- | ||
727 | break; |
- | ||
728 | case 1107: |
- | ||
729 | case 707: |
- | ||
730 | parameter = Array.IndexOf(new[] { "USB", "LSB", "AUTO" }, value); |
- | ||
731 | break; |
- | ||
732 | case 708: |
- | ||
733 | parameter = Array.IndexOf(new[] { "SEMI", "FULL" }, value); |
- | ||
734 | break; |
- | ||
735 | case 709: |
- | ||
736 | parameter = Array.IndexOf(Mathematics.GenerateRange(30, 3000, 10).ToArray(), value); |
- | ||
737 | break; |
- | ||
738 | case 710: |
- | ||
739 | parameter = Array.IndexOf(new[] { string.Empty, "2", "4" }, value); |
- | ||
740 | break; |
- | ||
741 | case 711: |
- | ||
742 | parameter = Array.IndexOf(new[] { "FREQ", "PITCH" }, value); |
- | ||
743 | break; |
- | ||
744 | case 712: |
- | ||
745 | parameter = Array.IndexOf(new[] { "OFF", "DAKY", "RTS", "DTR" }, value); |
- | ||
746 | break; |
- | ||
747 | case 713: |
- | ||
748 | parameter = Array.IndexOf(new[] { 15, 20, 25, 30 }, value); |
- | ||
749 | break; |
- | ||
750 | case 801: |
- | ||
751 | parameter = Array.IndexOf(new[] { "PSK", "OTHERS" }, value); |
- | ||
752 | break; |
- | ||
753 | case 802: |
- | ||
754 | parameter = Array.IndexOf(new[] { 1000, 1500, 2000 }, value); |
- | ||
755 | break; |
- | ||
756 | case 803: |
- | ||
757 | parameter = Array.IndexOf(Mathematics.GenerateRange(-3000, 3000, 10).ToArray(), value); |
- | ||
758 | break; |
- | ||
759 | case 804: |
- | ||
760 | parameter = Array.IndexOf(Mathematics.GenerateRange(-3000, 3000, 10).ToArray(), value); |
- | ||
761 | break; |
- | ||
762 | case 805: |
- | ||
763 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50) |
- | ||
764 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
765 | break; |
- | ||
766 | case 807: |
- | ||
767 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50) |
- | ||
768 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
769 | break; |
- | ||
770 | case 1011: |
- | ||
771 | case 812: |
- | ||
772 | parameter = Array.IndexOf(new[] { "USB", "LSB" }, value); |
- | ||
773 | break; |
- | ||
774 | case 904: |
- | ||
775 | parameter = Array.IndexOf(Mathematics.GenerateRange(0, 1000, 10).ToArray(), value); |
- | ||
776 | break; |
- | ||
777 | case 905: |
- | ||
778 | parameter = Array.IndexOf(Mathematics.GenerateRange(0, 4000, 10).ToArray(), value); |
- | ||
779 | break; |
- | ||
780 | case 906: |
- | ||
781 | parameter = Array.IndexOf(new[] { "Tn-Rn", "Tn-Riv", "Tiv-Rn", "Tiv-Riv" }, value); |
- | ||
782 | break; |
- | ||
783 | case 1001: |
- | ||
784 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50) |
- | ||
785 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
786 | break; |
- | ||
787 | case 1003: |
- | ||
788 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50) |
- | ||
789 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
790 | break; |
- | ||
791 | case 1005: |
- | ||
792 | parameter = Array.IndexOf(new[] { "SHIFT", "DTR", "RTS" }, value); |
- | ||
793 | break; |
- | ||
794 | case 1009: |
- | ||
795 | parameter = Array.IndexOf(new[] { 170, 200, 425, 850 }, value); |
- | ||
796 | break; |
- | ||
797 | case 1010: |
- | ||
798 | parameter = Array.IndexOf(new[] { 1275, 2125 }, value); |
- | ||
799 | break; |
- | ||
800 | case 1101: |
- | ||
801 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50) |
- | ||
802 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
803 | break; |
- | ||
804 | case 1103: |
- | ||
805 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50) |
- | ||
806 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
807 | break; |
- | ||
808 | case 1109: |
- | ||
809 | parameter = Array.IndexOf( |
- | ||
810 | new[] { "100-3000", "100-2900", "200-2800", "300-2700", "400-2600" }, value); |
- | ||
811 | break; |
- | ||
812 | case 1201: |
- | ||
813 | parameter = Array.IndexOf(new[] { "NARROW", "MEDIUM", "WIDE" }, value); |
- | ||
814 | break; |
- | ||
815 | case 1202: |
- | ||
816 | parameter = Array.IndexOf(Mathematics.GenerateRange(-40, 20).ToArray(), value); |
- | ||
817 | break; |
- | ||
818 | case 1204: |
- | ||
819 | parameter = Array.IndexOf(new[] { "NARROW", "WIDE" }, value); |
- | ||
820 | break; |
- | ||
821 | case 1301: |
- | ||
822 | parameter = Array.IndexOf(new[] { "OFF", "3", "5", "10" }, value); |
- | ||
823 | break; |
- | ||
824 | case 1302: |
- | ||
825 | parameter = Array.IndexOf(new[] { 37.5, 75, 150, 375, 750 }, value); |
- | ||
826 | break; |
- | ||
827 | case 1401: |
- | ||
828 | parameter = Array.IndexOf(new[] { 50, 100, 500 }, value); |
- | ||
829 | break; |
- | ||
830 | case 1402: |
- | ||
831 | parameter = Array.IndexOf(new[] { 2, 5, 10 }, value); |
- | ||
832 | break; |
- | ||
833 | case 1403: |
- | ||
834 | case 1404: |
- | ||
835 | parameter = Array.IndexOf(new[] { 2, 5, 10 }, value); |
- | ||
836 | break; |
- | ||
837 | case 1405: |
- | ||
838 | parameter = Array.IndexOf(new[] { 2, 5, 10 }, value); |
- | ||
839 | break; |
- | ||
840 | case 1406: |
- | ||
841 | parameter = Array.IndexOf(new[] { 2.5, 5, 2.9, 10, 12.5, 25 }, value); |
- | ||
842 | break; |
- | ||
843 | case 1407: |
- | ||
844 | parameter = Array.IndexOf(new[] { 5, 6.25, 10, 12.5, 15, 20, 25 }, value); |
- | ||
845 | break; |
- | ||
846 | case 1501: |
- | ||
847 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 700, 100) |
- | ||
848 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
849 | break; |
- | ||
850 | case 1504: |
- | ||
851 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 1500, 100) |
- | ||
852 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
853 | break; |
- | ||
854 | case 1514: |
- | ||
855 | case 1511: |
- | ||
856 | case 1508: |
- | ||
857 | case 1505: |
- | ||
858 | parameter = Array.IndexOf(Mathematics.GenerateRange(-20, 10).ToArray(), value); |
- | ||
859 | break; |
- | ||
860 | case 1507: |
- | ||
861 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(1500, 3200, 100) |
- | ||
862 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
863 | break; |
- | ||
864 | case 1510: |
- | ||
865 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 700, 100) |
- | ||
866 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
867 | break; |
- | ||
868 | case 1513: |
- | ||
869 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 1500, 100) |
- | ||
870 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
871 | break; |
- | ||
872 | case 1515: |
- | ||
873 | parameter = Array.IndexOf(Mathematics.GenerateRange(1, 10).ToArray(), value); |
- | ||
874 | break; |
- | ||
875 | case 1516: |
- | ||
876 | parameter = Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(1500, 3200, 100) |
- | ||
877 | .Select(o => o.ToString())).ToArray(), value); |
- | ||
878 | break; |
- | ||
879 | case 1614: |
- | ||
880 | case 1613: |
- | ||
881 | case 1612: |
- | ||
882 | case 1611: |
- | ||
883 | case 1610: |
- | ||
884 | case 1609: |
- | ||
885 | case 1608: |
- | ||
886 | case 1607: |
- | ||
887 | case 1606: |
- | ||
888 | case 1603: |
- | ||
889 | case 1604: |
- | ||
890 | case 1601: |
- | ||
891 | parameter = Array.IndexOf(Mathematics.GenerateRange(5, 100).ToArray(), value); |
- | ||
892 | break; |
- | ||
893 | case 1605: |
- | ||
894 | case 1602: |
- | ||
895 | parameter = Array.IndexOf(Mathematics.GenerateRange(5, 40).ToArray(), value); |
- | ||
896 | break; |
- | ||
897 | case 1615: |
- | ||
898 | parameter = Array.IndexOf(new[] { "OFF", "EXTERNAL", "ATAS", "LAMP" }, value); |
- | ||
899 | break; |
- | ||
900 | case 1616: |
- | ||
901 | parameter = Array.IndexOf(new[] { "MIC", "DATA" }, value); |
- | ||
902 | break; |
- | ||
903 | case 1618: |
- | ||
904 | parameter = Array.IndexOf(Mathematics.GenerateRange(30, 3000, 10).ToArray(), value); |
- | ||
905 | break; |
- | ||
906 | case 1622: |
- | ||
907 | case 1620: |
- | ||
908 | case 1619: |
- | ||
909 | parameter = Array.IndexOf(Mathematics.GenerateRange(0, 100).ToArray(), value); |
- | ||
910 | break; |
- | ||
911 | case 1621: |
- | ||
912 | parameter = Array.IndexOf(Mathematics.GenerateRange(30, 3000).ToArray(), value); |
- | ||
913 | break; |
- | ||
914 | default: |
- | ||
915 | if (!int.TryParse(value, out parameter)) |
- | ||
916 | { |
- | ||
917 | throw new ArgumentException(Resources.Invalid_menu_item); |
- | ||
918 | } |
- | ||
919 | |
- | ||
Line -... | Line 593... | |||
- | 593 | { |
||
- | 594 | var value = $"{rows[i].Cells["ValueColumn"].Value}"; |
||
920 | break; |
595 | |
|
Line 921... | Line 596... | |||
921 | } |
596 | var parameter = _radioMenu.MenuToCAT(menu, value); |
|
922 | |
597 | |
|
923 | await _catAssemblies.CatWriteAsync<int>("EX", new object[] { menu, parameter }, cancellationToken); |
598 | await _catAssemblies.CatWriteAsync<int>("EX", new object[] { menu, parameter }, cancellationToken); |
|
Line 1088... | Line 763... | |||
1088 | break; |
763 | break; |
|
1089 | case DataGridViewRowProgressFailure<int> rowProgressFailure: |
764 | case DataGridViewRowProgressFailure<int> rowProgressFailure: |
|
1090 | Log.Error(rowProgressFailure.Exception, $"{Resources.Could_not_read_menu}"); |
765 | Log.Error(rowProgressFailure.Exception, $"{Resources.Could_not_read_menu}"); |
|
1091 | dataGridView1.Rows[rowProgressFailure.Row.Index].DefaultCellStyle.BackColor = Color.Red; |
766 | dataGridView1.Rows[rowProgressFailure.Row.Index].DefaultCellStyle.BackColor = Color.Red; |
|
Line -... | Line 767... | |||
- | 767 | |
||
1092 | |
768 | toolStripStatusLabel1.Text = |
|
1093 | toolStripStatusLabel1.Text = $"{Resources.Could_not_read_menu} {rowProgressFailure.Data:0000}"; |
769 | $"{Resources.Could_not_read_menu} {rowProgressFailure.Data:0000}"; |
|
1094 | break; |
770 | break; |
|
Line 1095... | Line 771... | |||
1095 | } |
771 | } |
|
1096 | |
772 | |
|
Line 1104... | Line 780... | |||
1104 | }); |
780 | }); |
|
Line 1105... | Line 781... | |||
1105 | |
781 | |
|
Line 1106... | Line 782... | |||
1106 | await Task.Run(() => ReadMenu(list, progress, cancellationToken), cancellationToken); |
782 | await Task.Run(() => ReadMenu(list, progress, cancellationToken), cancellationToken); |
|
1107 | |
- | ||
1108 | if (!_cancellationToken.IsCancellationRequested) |
783 | |
|
1109 | { |
784 | if (!_cancellationToken.IsCancellationRequested) |
|
1110 | try |
785 | try |
|
1111 | { |
786 | { |
|
1112 | toolStripProgressBar1.Value = toolStripProgressBar1.Maximum; |
787 | toolStripProgressBar1.Value = toolStripProgressBar1.Maximum; |
|
1113 | toolStripStatusLabel1.Text = "Done."; |
788 | toolStripStatusLabel1.Text = "Done."; |
|
1114 | } |
789 | } |
|
1115 | catch(NullReferenceException ex) |
790 | catch (NullReferenceException ex) |
|
1116 | { |
791 | { |
|
1117 | // toolStripProgressBar1 disposed on close |
- | ||
1118 | } |
792 | // toolStripProgressBar1 disposed on close |
|
Line 1119... | Line 793... | |||
1119 | } |
793 | } |
|
1120 | } |
794 | } |
|
1121 | |
795 | |
|
1122 | private async Task ReadMenu(IReadOnlyList<DataGridViewRow> rows, IProgress<DataGridViewRowProgress> progress, |
796 | private async Task ReadMenu(IReadOnlyList<DataGridViewRow> rows, IProgress<DataGridViewRowProgress> progress, |
|
Line 1123... | Line 797... | |||
1123 | CancellationToken cancellationToken) |
797 | CancellationToken cancellationToken) |
|
1124 | { |
798 | { |
|
1125 | var count = rows.Count; |
799 | var count = rows.Count; |
|
1126 | |
- | ||
1127 | for (var i = 0; i < count && !cancellationToken.IsCancellationRequested; ++i) |
- | ||
1128 | { |
- | ||
Line 1129... | Line 800... | |||
1129 | if (!int.TryParse($"{rows[i].Cells["IndexColumn"].Value}", out var menu)) |
800 | |
|
1130 | { |
801 | for (var i = 0; i < count && !cancellationToken.IsCancellationRequested; ++i) |
|
1131 | continue; |
802 | { |
|
Line 1176... | Line 847... | |||
1176 | return dataGridView.SelectedRows.OfType<DataGridViewRow>().OrderBy(row => row.Index); |
847 | return dataGridView.SelectedRows.OfType<DataGridViewRow>().OrderBy(row => row.Index); |
|
1177 | } |
848 | } |
|
Line 1178... | Line 849... | |||
1178 | |
849 | |
|
1179 | private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) |
850 | private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) |
|
1180 | { |
- | ||
1181 | |
851 | { |
|
Line 1182... | Line 852... | |||
1182 | } |
852 | } |
|
1183 | |
853 | |
|
1184 | private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) |
854 | private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) |
|
Line 1192... | Line 862... | |||
1192 | { |
862 | { |
|
1193 | } |
863 | } |
|
Line 1194... | Line 864... | |||
1194 | |
864 | |
|
1195 | private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) |
865 | private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) |
|
1196 | { |
- | ||
1197 | |
866 | { |
|
Line 1198... | Line 867... | |||
1198 | } |
867 | } |
|
1199 | |
868 | |
|
1200 | private void DataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) |
- | ||
1201 | { |
869 | private void DataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) |
|
Line 1202... | Line 870... | |||
1202 | |
870 | { |
|
1203 | } |
871 | } |
|
1204 | |
- | ||
1205 | private void DataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) |
872 | |
|
Line 1206... | Line 873... | |||
1206 | { |
873 | private void DataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) |
|
1207 | |
874 | { |
|
1208 | } |
875 | } |
|
Line 1302... | Line 969... | |||
1302 | CancellationTokenSource.CreateLinkedTokenSource(new[] |
969 | CancellationTokenSource.CreateLinkedTokenSource(new[] |
|
1303 | { _cancellationTokenSource.Token, _cancellationToken }); |
970 | { _cancellationTokenSource.Token, _cancellationToken }); |
|
Line 1304... | Line 971... | |||
1304 | |
971 | |
|
1305 | _writeMenuTask = WriteMenu(_writeLinkedCancellationTokenSource.Token); |
972 | _writeMenuTask = WriteMenu(_writeLinkedCancellationTokenSource.Token); |
|
- | 973 | } |
||
- | 974 | |
||
- | 975 | private void exportToolStripMenuItem_Click(object sender, EventArgs e) |
||
- | 976 | { |
||
- | 977 | saveFileDialog1.ShowDialog(); |
||
- | 978 | } |
||
- | 979 | |
||
- | 980 | private async void saveFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e) |
||
- | 981 | { |
||
- | 982 | if (e.Cancel) |
||
- | 983 | { |
||
- | 984 | return; |
||
- | 985 | } |
||
- | 986 | |
||
- | 987 | var rows = GetAllDataGridViewRows(dataGridView1); |
||
- | 988 | var count = rows.Count; |
||
- | 989 | toolStripProgressBar1.Minimum = 0; |
||
- | 990 | toolStripProgressBar1.Maximum = count; |
||
- | 991 | toolStripProgressBar1.Value = toolStripProgressBar1.Minimum; |
||
- | 992 | |
||
- | 993 | var dataGridViewRows = new ConcurrentQueue<DataGridViewRow>(); |
||
- | 994 | var dataGridViewRowsTaskCompletionSource = new TaskCompletionSource<object>(); |
||
- | 995 | var radioMenuTaskCompletionSource = new TaskCompletionSource<object>(); |
||
- | 996 | |
||
- | 997 | var radioMenu = new RadioMenu(); |
||
- | 998 | |
||
- | 999 | async void IdleHandler(object idleHandlerSender, EventArgs idleHandlerArgs) |
||
- | 1000 | { |
||
- | 1001 | await dataGridViewRowsTaskCompletionSource.Task; |
||
- | 1002 | |
||
- | 1003 | try |
||
- | 1004 | { |
||
- | 1005 | if (!dataGridViewRows.TryDequeue(out var row)) |
||
- | 1006 | { |
||
- | 1007 | Application.Idle -= IdleHandler; |
||
- | 1008 | |
||
- | 1009 | toolStripStatusLabel1.Text = "Done."; |
||
- | 1010 | |
||
- | 1011 | radioMenuTaskCompletionSource.TrySetResult(new { }); |
||
- | 1012 | return; |
||
- | 1013 | } |
||
- | 1014 | |
||
- | 1015 | if (!int.TryParse($"{row.Cells["IndexColumn"].Value}", out var index)) |
||
- | 1016 | { |
||
- | 1017 | return; |
||
- | 1018 | } |
||
- | 1019 | |
||
- | 1020 | var value = $"{row.Cells["ValueColumn"].Value}"; |
||
- | 1021 | |
||
- | 1022 | var radioMenuItem = new RadioMenuItem |
||
- | 1023 | { |
||
- | 1024 | Index = index, |
||
- | 1025 | Value = value |
||
- | 1026 | }; |
||
- | 1027 | |
||
- | 1028 | radioMenu.RadioMenuItem.Add(radioMenuItem); |
||
- | 1029 | |
||
- | 1030 | toolStripStatusLabel1.Text = $"Exported menu {row.Index:0000}"; |
||
- | 1031 | |
||
- | 1032 | toolStripProgressBar1.Increment(1); |
||
- | 1033 | statusStrip1.Update(); |
||
- | 1034 | } |
||
- | 1035 | catch (Exception exception) |
||
- | 1036 | { |
||
- | 1037 | Log.Error(exception, Resources.Could_not_update_data_grid_view); |
||
- | 1038 | } |
||
- | 1039 | } |
||
- | 1040 | |
||
- | 1041 | Application.Idle += IdleHandler; |
||
- | 1042 | try |
||
- | 1043 | { |
||
- | 1044 | foreach (var row in rows) |
||
- | 1045 | { |
||
- | 1046 | dataGridViewRows.Enqueue(row); |
||
- | 1047 | } |
||
- | 1048 | |
||
- | 1049 | dataGridViewRowsTaskCompletionSource.TrySetResult(new { }); |
||
- | 1050 | } |
||
- | 1051 | catch (Exception exception) |
||
- | 1052 | { |
||
- | 1053 | Application.Idle -= IdleHandler; |
||
- | 1054 | |
||
- | 1055 | Log.Error(exception, Resources.Unable_to_create_radio_menu); |
||
- | 1056 | } |
||
- | 1057 | |
||
- | 1058 | await radioMenuTaskCompletionSource.Task; |
||
- | 1059 | |
||
- | 1060 | var fileName = saveFileDialog1.FileName; |
||
- | 1061 | switch (await Serialization.Serialize(radioMenu, fileName, "RadioMenu", |
||
- | 1062 | "<!ATTLIST Configuration xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>", |
||
- | 1063 | _localCancellationToken)) |
||
- | 1064 | { |
||
- | 1065 | case SerializationSuccess<RadioMenu> radioMenuSerializationSuccess: |
||
- | 1066 | Log.Information(Resources.Radio_menu_serialized_successfully); |
||
- | 1067 | break; |
||
- | 1068 | case SerializationFailure serializationFailure: |
||
- | 1069 | Log.Warning(serializationFailure.Exception.Message, Resources.Radio_menu_failed_to_serialize); |
||
- | 1070 | break; |
||
- | 1071 | } |
||
- | 1072 | } |
||
- | 1073 | |
||
- | 1074 | private void importToolStripMenuItem_Click(object sender, EventArgs e) |
||
- | 1075 | { |
||
- | 1076 | openFileDialog1.ShowDialog(); |
||
- | 1077 | } |
||
- | 1078 | |
||
- | 1079 | private async void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e) |
||
- | 1080 | { |
||
- | 1081 | if (e.Cancel) |
||
- | 1082 | { |
||
- | 1083 | return; |
||
- | 1084 | } |
||
- | 1085 | |
||
- | 1086 | RadioMenu radioMenu = null; |
||
- | 1087 | |
||
- | 1088 | var fileName = openFileDialog1.FileName; |
||
- | 1089 | var deserializationResult = |
||
- | 1090 | await Serialization.Deserialize<RadioMenu>(fileName, |
||
- | 1091 | "urn:hambook-radiomenu-schema", "RadioMenu.xsd", |
||
- | 1092 | _localCancellationToken); |
||
- | 1093 | |
||
- | 1094 | switch (deserializationResult) |
||
- | 1095 | { |
||
- | 1096 | case SerializationSuccess<RadioMenu> serializationSuccess: |
||
- | 1097 | Log.Information(Resources.Deserialized_radio_menu); |
||
- | 1098 | radioMenu = serializationSuccess.Result; |
||
- | 1099 | break; |
||
- | 1100 | case SerializationFailure serializationFailure: |
||
- | 1101 | Log.Warning(serializationFailure.Exception, Resources.Failed_to_deserialize_radio_menu); |
||
- | 1102 | return; |
||
- | 1103 | } |
||
- | 1104 | |
||
- | 1105 | var rows = GetAllDataGridViewRows(dataGridView1); |
||
- | 1106 | var count = rows.Count; |
||
- | 1107 | var menuIndexToRow = new Dictionary<int, DataGridViewRow>(); |
||
- | 1108 | foreach (var row in rows) |
||
- | 1109 | { |
||
- | 1110 | if (!int.TryParse($"{row.Cells["IndexColumn"].Value}", out var index)) |
||
- | 1111 | { |
||
- | 1112 | continue; |
||
- | 1113 | } |
||
- | 1114 | |
||
- | 1115 | menuIndexToRow.Add(index, row); |
||
- | 1116 | } |
||
- | 1117 | |
||
- | 1118 | toolStripProgressBar1.Minimum = 0; |
||
- | 1119 | toolStripProgressBar1.Maximum = count; |
||
- | 1120 | toolStripProgressBar1.Value = toolStripProgressBar1.Minimum; |
||
- | 1121 | |
||
- | 1122 | var radioMenuItems = new ConcurrentQueue<RadioMenuItem>(); |
||
- | 1123 | var radioMenuItemsTaskCompletionSource = new TaskCompletionSource<object>(); |
||
- | 1124 | |
||
- | 1125 | async void IdleHandler(object idleHandlerSender, EventArgs idleHandlerArgs) |
||
- | 1126 | { |
||
- | 1127 | await radioMenuItemsTaskCompletionSource.Task; |
||
- | 1128 | |
||
- | 1129 | try |
||
- | 1130 | { |
||
- | 1131 | if (!radioMenuItems.TryDequeue(out var radioMenuItem)) |
||
- | 1132 | { |
||
- | 1133 | Application.Idle -= IdleHandler; |
||
- | 1134 | |
||
- | 1135 | dataGridView1.Sort(dataGridView1.Columns["IndexColumn"], ListSortDirection.Ascending); |
||
- | 1136 | toolStripStatusLabel1.Text = "Done."; |
||
- | 1137 | |
||
- | 1138 | return; |
||
- | 1139 | } |
||
- | 1140 | |
||
- | 1141 | menuIndexToRow[radioMenuItem.Index].Cells["ValueColumn"].Value = radioMenuItem.Value; |
||
- | 1142 | toolStripStatusLabel1.Text = $"Imported menu {radioMenuItem.Index:0000}"; |
||
- | 1143 | |
||
- | 1144 | toolStripProgressBar1.Increment(1); |
||
- | 1145 | statusStrip1.Update(); |
||
- | 1146 | } |
||
- | 1147 | catch (Exception exception) |
||
- | 1148 | { |
||
- | 1149 | Log.Error(exception, Resources.Could_not_update_data_grid_view); |
||
- | 1150 | } |
||
- | 1151 | } |
||
- | 1152 | |
||
- | 1153 | Application.Idle += IdleHandler; |
||
- | 1154 | try |
||
- | 1155 | { |
||
- | 1156 | foreach (var radioMenuItem in radioMenu.RadioMenuItem) |
||
- | 1157 | { |
||
- | 1158 | radioMenuItems.Enqueue(radioMenuItem); |
||
- | 1159 | } |
||
- | 1160 | |
||
- | 1161 | radioMenuItemsTaskCompletionSource.TrySetResult(new { }); |
||
- | 1162 | } |
||
- | 1163 | catch (Exception exception) |
||
- | 1164 | { |
||
- | 1165 | Application.Idle -= IdleHandler; |
||
- | 1166 | |
||
- | 1167 | Log.Error(exception, Resources.Unable_to_create_radio_menu); |
||
- | 1168 | } |
||
1306 | } |
1169 | } |
|
1307 | } |
1170 | } |
|
1308 | } |
1171 | } |