Annotation of task.pl, Revision 1.1
1.0 philip 1: #! /usr/bin/perl -w
2:
3: # Philip Plane
4: # philip@xinqu.net
5: # EW Task Tool Version 1.0
6:
7: use Tk;
8: use Tk::widgets qw/Dialog ErrorDialog ROText/;
9: use strict;
10:
11: # Generate task declaration suitable to EW.
12: # example supplied looks like this:
13:
14: #FLIGHT DECLARATION
15: #-------------------
16: #
17: #Description: To Heaven and Back
18: #Take Off LatLong: 0000000N00000000E TAKE OFF
19: #Start LatLon: 0000000N00000000E START
20: #TP LatLon: 0000000N00000000E TURN POINT
21: #TP LatLon: 0000000N00000000E TURN POINT
22: #TP LatLon: 0000000N00000000E TURN POINT
23: #TP LatLon: 0000000N00000000E TURN POINT
24: #TP LatLon: 0000000N00000000E TURN POINT
25: #TP LatLon: 0000000N00000000E TURN POINT
26: #TP LatLon: 0000000N00000000E TURN POINT
27: #TP LatLon: 0000000N00000000E TURN POINT
28: #TP LatLon: 0000000N00000000E TURN POINT
29: #TP LatLon: 0000000N00000000E TURN POINT
30: #Finish LatLon: 0000000N00000000E FINISH
31: #Land LatLon: 0000000N00000000E LAND
32:
33: my $mw = MainWindow->new;
34: $mw->CmdLine;
35: $mw->title("Turnpoints");
36: $mw->minsize(175,50);
37: $mw->configure(-menu => my $menubar = $mw->Menu);
38:
39: my $file = $menubar->cascade(qw/-label File -underline 0 -menuitems/ =>
40: [
41: [command => 'Open', -command => [\&load_dat]],
42: [command => 'Exit', -command => [\&exit]],
43: ]);
44:
45: my $igc = $menubar->cascade(qw/-label Task -underline 0 -menuitems/ =>
46: [
47: [command => 'Add', -command => [\&add_to_task]],
48: [command => 'Delete', -command => [\&del_from_task]],
49: [command => 'Write', -command => [\&write_task]],
50: ]);
51:
52: my $help = $menubar->cascade(qw/-label Help -underline 0 -menuitems/ =>
53: [
54: [command => 'About'],
55: [command => 'Add'],
56: [command => 'Delete'],
57: [command => 'Write'],
58: [command => 'Open'],
59: ]);
60:
61: my $DIALOG_ABOUT = $mw->Dialog(
62: -title => 'About Task tool',
63: -bitmap => 'info',
64: -default_button => 'OK',
65: -buttons => ['OK'],
66: -text => "EW Task tool\nPhilip Plane\n" .
67: "9 March 2007\n\nPerl Version $]" .
68: "\nTk Version $Tk::VERSION\n\n" .
69: "Creates task definitions for the EW MicroRecorder",
70: );
71:
72: $help->cget(-menu)->entryconfigure('About',
73: -command => [$DIALOG_ABOUT => 'Show'],
74: );
75:
76: my $DIALOG_ADD = $mw->Dialog(
77: -title => 'Adding to Task',
78: -bitmap => 'info',
79: -default_button => 'OK',
80: -buttons => ['OK'],
81: -text => "To add a turnpoint from the turnpoint list " .
82: "to the task, select the turnpoint from the " .
83: "turnpoint list, then select Add from the Task " .
84: "menu. The turnpoint will be added to the bottom " .
85: "of the task.",
86: );
87:
88: $help->cget(-menu)->entryconfigure('Add',
89: -command => [$DIALOG_ADD => 'Show'],
90: );
91:
92:
93: my $DIALOG_DELETE = $mw->Dialog(
94: -title => 'Delete from task',
95: -bitmap => 'info',
96: -default_button => 'OK',
97: -buttons => ['OK'],
98: -text => "To delete a turnpoint from the task, select " .
99: "the turnpoint from the task list, then " .
100: "select Delete from the task menu. The turnpoint " .
101: "will be deleted from the task.",
102: );
103:
104: $help->cget(-menu)->entryconfigure('Delete',
105: -command => [$DIALOG_DELETE => 'Show'],
106: );
107:
108: my $DIALOG_WRITE = $mw->Dialog(
109: -title => 'Write task',
110: -bitmap => 'info',
111: -default_button => 'OK',
112: -buttons => ['OK'],
113: -text => "Opens a window with the task presented in the " .
114: "format used by the EW MicroRecorder. " .
115: "This is intended to be cut and pasted into the " .
116: "configuration file on the MicroRecorder. " ,
117: );
118:
119: $help->cget(-menu)->entryconfigure('Write',
120: -command => [$DIALOG_WRITE => 'Show'],
121: );
122:
123: my $DIALOG_OPEN = $mw->Dialog(
124: -title => 'Open file',
125: -bitmap => 'info',
126: -default_button => 'OK',
127: -buttons => ['OK'],
128: -text => "Opens a turnpoint file in Cambridge .DAT " .
129: "format. This is loaded into the left pane " .
130: "to allow turnpoints the be selected and added " .
131: "to the task. " ,
132: );
133:
134: $help->cget(-menu)->entryconfigure('Open',
135: -command => [$DIALOG_OPEN => 'Show'],
136: );
137:
138: $mw->Label(-text=>"Turnpoints")->grid( "x", $mw->Label(-text=>"Task"));
139:
140: my $lb = $mw->Scrolled("Listbox",
141: -scrollbars => "e",
142: -selectmode => "single")->grid(-row=> 0,
143: -column=> 0,
144: -rowspan=> 2,
145: -sticky=> "nsew");
146:
147: $mw->Button(-text=>"Add ->", -command=> \&add_to_task )->grid(-row=> 0,
148: -column=> 1,
149: -sticky=> "sew");
150:
151:
152: my $task = $mw->Scrolled("Listbox",
153: -scrollbars => "e",
154: -selectmode => "single")->grid(-row=> 0,
155: -column=> 2,
156: -rowspan=> 2,
157: -sticky=> "nsew");
158:
159: $mw->Button(-text=>"Del <-", -command=> \&del_from_task )->grid(-row=> 1,
160: -column=> 1,
161: -sticky=> "new");
162:
163:
164: my @dat = ();
165: my %lat = ();
166: my %lng = ();
167:
168: sub load_dat {
169: my $types = [
170: ['DAT Files','.dat'],
171: ['DAT Files','.DAT'],
172: ];
173:
174: my $igc = $mw->getOpenFile(-initialdir=>'C:',
175: -filetypes=>$types);
176: if ( defined $igc ){
177: my @igc = split /\//,$igc;
178: my $igcfile = pop @igc;
179: open IGC, $igc or die "Can't open $igc : $!\n";
180: my @log = <IGC>;
181: close IGC;
182: while ( $_ = shift @log ){
183: if ( $_ =~ /^\d/ ){
184: @dat = split(/\,/,$_);
185: if ( $dat[4] =~ /T|S|F/ ){
186: if ( $dat[5] eq "" ) { $dat[5] = $dat[0] }
187: $lat{$dat[5]} = $dat[1];
188: $lng{$dat[5]} = $dat[2];
189: $lb->insert('end',$dat[5]);
190: }
191: }
192: }
193: }
194: }
195:
196: sub add_to_task {
197: my @selection = $lb->curselection();
198: foreach ( @selection ){
199: my $turnpoint =$lb->get($_);
200: $task->insert('end',$turnpoint);
201: }
202: }
203:
204: sub del_from_task {
205: my @selection = $task->curselection();
206: foreach ( @selection ){
207: $task->delete($_);
208: }
209: }
210:
211: sub write_task {
212: my $bwin = $mw->Toplevel();
213: $bwin->title("Flight Declaration");
214: my $text = $bwin->Scrolled("Text")->pack();
215: $text->delete("1.0","end");
216: $text->insert("end","FLIGHT DECLARATION\n");
217: $text->insert("end","-------------------\n");
218: $text->insert("end","\n");
219: $text->insert("end","Description: To Heaven and Back\n");
220: my @elements = $task->get(0,'end');
221: my $start = shift @elements;
222: my $finish = pop @elements;
223: my $lat = $lat{$start};
224: my $lng = $lng{$start};
225: $lat =~ s/://;
226: $lng =~ s/://;
1.1 ! philip 227: $lat =~ s/\.//;
! 228: $lng =~ s/\.//;
1.0 philip 229: $text->insert("end","Start LatLon: " . $lat . $lng . " " . $start . "\n");
230: foreach ( @elements ){
231: my $lat = $lat{$start};
232: my $lng = $lng{$start};
233: $lat =~ s/://;
1.1 ! philip 234: $lat =~ s/\.//;
1.0 philip 235: $lng =~ s/://;
1.1 ! philip 236: $lng =~ s/\.//;
1.0 philip 237: $text->insert("end","TP LatLon: " . $lat . $lng . " " . $_ . "\n");
238: }
239: $lat = $lat{$finish};
240: $lng = $lng{$finish};
241: $lat =~ s/://;
1.1 ! philip 242: $lat =~ s/\.//;
1.0 philip 243: $lng =~ s/://;
1.1 ! philip 244: $lng =~ s/\.//;
1.0 philip 245: $text->insert("end","Finish LatLon: " . $lat . $lng . " " . $finish . "\n");
246: }
247: MainLoop;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>