1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#!/usr/bin/perl -w 2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonuse strict; 3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonuse Tk; 4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonuse Tk::Xrm; 5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonuse Tk qw(exit); 6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $version="Analyzer 20020429"; 8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy %bases; 10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $first_file=undef; 11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $last_file=undef; 12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $fileno=0; 13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @panel_labels; 15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @panel_ones; 16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @panel_twos; 17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @panel_onevars; 18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @panel_twovars; 19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @panel_keys; 20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $panel_count; 21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson# pop the toplevels 23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $toplevel=new MainWindow(-class=>'AnalyzerGraph'); 25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $Xname=$toplevel->Class; 26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname.geometry", "800x600",20); 27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $geometry=$toplevel->optionGet('geometry',''); 29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$geometry=~/^(\d+)x(\d+)/; 30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->configure(-width=>$1); 32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->configure(-height=>$2); 33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname.background", "#4fc627",20); 39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*highlightBackground", "#80c0d3",20); 40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname.Panel.background", "#4fc627",20); 41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname.Panel.foreground", "#d0d0d0",20); 42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname.Panel.font", 43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*',20); 44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Statuslabel.font", 45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*',20); 46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Statuslabel.foreground", "#606060"); 47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Status.font", 48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*',20); 49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*AlertDetail.font", 51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*',20); 52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*background", "#d0d0d0",20); 55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*foreground", '#000000',20); 56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Button*background", "#f0d0b0",20); 58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Button*foreground", '#000000',20); 59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Button*borderWidth", '2',20); 60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Button*relief", 'groove',20); 61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Button*padY", 1,20); 62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$toplevel->optionAdd("$Xname*Scale*background", "#f0d0b0",20); 64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Scale*foreground", '#000000',20); 65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Scale*borderWidth", '1',20); 66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$toplevel->optionAdd("$Xname*Scale*relief", 'groove',20); 67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Scale*padY", 1,20); 68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Checkbutton*background", "#f0d0b0",20); 70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Checkbutton*foreground", '#000000',20); 71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Checkbutton*borderWidth", '2',20); 72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Checkbutton*relief", 'groove',20); 73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*activeBackground", "#ffffff",20); 75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*activeForeground", '#0000a0',20); 76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*borderWidth", 0,20); 77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*relief", 'flat',20); 78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*activeBorderWidth", 1,20); 79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*highlightThickness", 0,20); 80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*padX", 2,20); 81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*padY", 2,20); 82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*font", 83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*',20); 84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Entry.font", 85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*',20); 86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit.font", 87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*',20); 88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit.relief", 'groove',20); 89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit.padX", 1,20); 90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit.padY", 1,20); 91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit.borderWidth", 2,20); 92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit*background", "#a0a0a0",20); 93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Exit*disabledForeground", "#ffffff",20); 94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$toplevel->optionAdd("$Xname*Canvas.background", "#c0c0c0",20); 96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Entry.background", "#ffffff",20); 98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Entry.disabledForeground", "#c0c0c0",20); 99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Entry.relief", "sunken",20); 100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Entry.borderWidth", 1,20); 101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Field.background", "#ffffff",20); 103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Field.disabledForeground", "#c0c0c0",20); 104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->optionAdd("$Xname*Field.relief", "flat",20); 10511b179627c411772f1eac023d915ab8532e55211Mathieu$toplevel->optionAdd("$Xname*Field.borderWidth", 1,20); 10611b179627c411772f1eac023d915ab8532e55211Mathieu 10711b179627c411772f1eac023d915ab8532e55211Mathieu$toplevel->optionAdd("$Xname*Label.disabledForeground", "#c0c0c0",20); 10811b179627c411772f1eac023d915ab8532e55211Mathieu$toplevel->optionAdd("$Xname*Label.borderWidth", 1,20); 10911b179627c411772f1eac023d915ab8532e55211Mathieu 11011b179627c411772f1eac023d915ab8532e55211Mathieu$toplevel->configure(-background=>$toplevel->optionGet("background","")); 11111b179627c411772f1eac023d915ab8532e55211Mathieu 112920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$toplevel->resizable(FALSE,FALSE); 113ffecf3c5c207d0275d480970fd025cb9526b1905Mathieu 114ffecf3c5c207d0275d480970fd025cb9526b1905Mathieumy $panel=new MainWindow(-class=>'AnalyzerPanel'); 115ffecf3c5c207d0275d480970fd025cb9526b1905Mathieumy $X2name=$panel->Class; 116ffecf3c5c207d0275d480970fd025cb9526b1905Mathieu 117ffecf3c5c207d0275d480970fd025cb9526b1905Mathieu$panel->optionAdd("$X2name.background", "#353535",20); 118ffecf3c5c207d0275d480970fd025cb9526b1905Mathieu$panel->optionAdd("$X2name*highlightBackground", "#80c0d3",20); 119ffecf3c5c207d0275d480970fd025cb9526b1905Mathieu$panel->optionAdd("$X2name.Panel.background", "#353535",20); 120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name.Panel.foreground", "#4fc627",20); 121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name.Panel.font", 122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-o-*-*-18-*-*-*-*-*-*-*',20); 123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Statuslabel.font", 124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*',20); 125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Statuslabel.foreground", "#4fc627",20); 126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Status.font", 127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*',20); 128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*AlertDetail.font", 130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*',20); 131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*background", "#d0d0d0",20); 134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*foreground", '#000000',20); 135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Button*background", "#f0d0b0",20); 137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Button*foreground", '#000000',20); 138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Button*borderWidth", '2',20); 139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Button*relief", 'groove',20); 140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Button*padY", 1,20); 141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Checkbutton*background", "#f0d0b0",20); 143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Checkbutton*foreground", '#000000',20); 144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Checkbutton*borderWidth", '2',20); 145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$panel->optionAdd("$X2name*Checkbutton*padX", '0',20); 146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$panel->optionAdd("$X2name*Checkbutton*padY", '0',20); 147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$panel->optionAdd("$X2name*Checkbutton*relief", 'groove',20); 148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*activeBackground", "#ffffff",20); 150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*activeForeground", '#0000a0',20); 151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*borderWidth", 0,20); 152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*relief", 'flat',20); 153920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*activeBorderWidth", 1,20); 154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*highlightThickness", 0,20); 155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*padX", 2,20); 156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*padY", 2,20); 157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*font", 158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*',20); 159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Entry.font", 160920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*',20); 161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 162920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit.font", 163920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson '-*-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*',20); 164920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit.relief", 'groove',20); 165920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit.padX", 1,20); 166920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit.padY", 1,20); 167920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit.borderWidth", 2,20); 168920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit*background", "#a0a0a0",20); 169920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Exit*disabledForeground", "#ffffff",20); 170920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 171920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Entry.background", "#ffffff",20); 172920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Entry.disabledForeground", "#c0c0c0",20); 173920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Entry.relief", "sunken",20); 174920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Entry.borderWidth", 1,20); 175920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 176920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Field.background", "#ffffff",20); 177920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Field.disabledForeground", "#c0c0c0",20); 178920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Field.relief", "flat",20); 179920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Field.borderWidth", 1,20); 180920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 181920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Label.disabledForeground", "#c0c0c0",20); 182920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->optionAdd("$X2name*Label.borderWidth", 1,20); 183920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 184920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->configure(-background=>$panel->optionGet("background","")); 185920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 186920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson#$panel->resizable("FALSE","FALSE"); 187920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 188920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $panel_shell=$panel->Label(Name=>"shell",-borderwidth=>1,-relief=>'raised')-> 189920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>10,-y=>36,-relwidth=>1.0,-relheight=>1.0, 190920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -width=>-20,-height=>-46,-anchor=>'nw'); 191920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 192920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $panel_quit=$panel_shell->Button(-class=>"Exit",-text=>"quit",-command=>[sub{Shutdown()}])-> 193920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>-1,-y=>-1,-relx=>1.0,-rely=>1.0,-anchor=>'se'); 194920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 195920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panel->Label(Name=>"logo text",-class=>"Panel",-text=>$version)-> 196920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>5,-y=>5,-anchor=>'nw'); 197920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 198920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 199920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $graph_shell=$toplevel->Label(Name=>"shell",-borderwidth=>1,-relief=>'raised')-> 200920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>10,-y=>36,-relwidth=>1.0,-relheight=>1.0, 201920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -width=>-20,-height=>-46,-anchor=>'nw'); 202920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 203920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $graph_status=$toplevel->Label(Name=>"logo text",-class=>"Panel",-text=>"Starting up")-> 204920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>5,-y=>5,-anchor=>'nw'); 205920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 206920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 207920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $panely=5; 208920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy $panel_rescan=$panel_shell->Button(-text=>"rescan",-command=>[sub{scan_directory()}])-> 209920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>-5,-relx=>1.,-y=>$panely,-anchor=>'ne'); 210920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$panely+=$panel_rescan->reqheight()+6; 211920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 212920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 213920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$temp=$graph_shell->Button(-text=>"<<", 214920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -command=>[sub{$fileno-=10;$fileno=$first_file if($fileno<$first_file); 215920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson load_graph();}])-> 216920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>5,-y=>-5,-rely=>1.,-relwidth=>.2,-width=>-5,-anchor=>'sw'); 217920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$graph_shell->Button(-text=>">>", 218920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -command=>[sub{$fileno+=10;$fileno=$last_file if($fileno>$last_file); 219920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson load_graph();}])-> 220920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>-5,-y=>-5,-relwidth=>.2,-rely=>1.,-width=>-5,-relx=>1.,-anchor=>'se'); 221920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$graph_shell->Button(-text=>"<", 222920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -command=>[sub{$fileno-=1;$fileno=$first_file if($fileno<$first_file); 223920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson load_graph();}])-> 224920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>5,-y=>-5,-relwidth=>.3,-width=>-7,-rely=>1.,-relx=>.2,-anchor=>'sw'); 225920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$graph_shell->Button(-text=>">", 226920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -command=>[sub{$fileno+=1;$fileno=$last_file if($fileno>$last_file); 227920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson load_graph();}])-> 228920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>-5,-y=>-5,-relwidth=>.3,-width=>-7,-rely=>1.,-relx=>.8,-anchor=>'se'); 229920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$graphy=-10-$temp->reqheight(); 230920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$graph_slider=$temp=$graph_shell->Scale(-bigincrement=>1, 231920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -resolution=>1, 232920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -showvalue=>'TRUE',-variable=>\$fileno,-orient=>'horizontal')-> 233920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>5,-y=>$graphy,-relwidth=>1.,-rely=>1.,-width=>-10,-anchor=>'sw'); 234920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$graphy-=$temp->reqheight()+5; 235920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 236920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$onecrop; 237920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$twocrop; 238920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 239920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$oneresize=$temp=$graph_shell->Checkbutton(-text=>"rescale",-variable=>\$onecrop, 240920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -command=>[sub{draw_graph();}])-> 241920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-x=>5,-y=>5,-anchor=>'nw'); 242920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 243920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$one=$graph_shell->Canvas()-> 244920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-relwidth=>1.,-width=>-10,-relheight=>.5,-height=>($graphy/2)-5-$temp->reqheight(), 245920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -x=>5,-y=>5+$temp->reqheight,-anchor=>'nw'); 246920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 247920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 248920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$tworesize=$temp=$graph_shell->Checkbutton(-text=>"rescale",-variable=>\$twocrop, 249920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -command=>[sub{draw_graph();}])-> 250920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-rely=>1.,-y=>5,-anchor=>'nw',-in=>$one); 251920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy$two=$graph_shell->Canvas()-> 252920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson place(-relwidth=>1.,-relheight=>1.,-rely=>1.,-y=>5+$temp->reqheight(),-anchor=>'nw',-in=>$one); 253920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 254920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonscan_directory(); 255920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 256920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy%onestate; 257920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy%twostate; 258920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonmy @data; 259920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 260920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$onestate{"canvas"}=$one; 261920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$onestate{"vars"}=\@panel_onevars; 262920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$twostate{"canvas"}=$two; 263920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$twostate{"vars"}=\@panel_twovars; 264920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 265920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$graph_slider->configure(-command=>[sub{load_graph()}]); 266920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonload_graph(); 267920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$toplevel->bind('MainWindow','<Configure>',[sub{$toplevel->update(); 268920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson draw_graph()}]); 269920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 270920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben DodsonTk::MainLoop(); 271920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 272920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonsub load_graph{ 273920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 274920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson scan_directory()if(!defined($panel_count)); 275920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 276920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson @data=undef; 277920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 278920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for(my$i=0;$i<$panel_count;$i++){ 279920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$filename=$panel_keys[$i]."_$fileno.m"; 280920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if(open F, "$filename"){ 281920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $data[$i]=[(<F>)]; 282920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson close F; 283920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 284920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 285920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson draw_graph(); 286920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} 287920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 288920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonsub graphhelper{ 289920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my($graph)=@_; 290920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$count=0; 291920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my@colors=("#ff0000","#00df00","#0000ff","#ffff00","#ff00ff","#00ffff","#ffffff", 29248bd9fd589daaa11705dce8480c5b51f5b4a9e0fElliott Hughes "#9f0000","#007f00","#00009f","#8f8f00","#8f008f","#008f8f","#000000"); 293920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 294920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$w=$graph->{"canvas"}; 295920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$rescale=0; 296920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 297920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Status("Plotting $fileno"); 298920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('foo'); 299920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('legend'); 300920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('lines'); 301920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 302920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # count range 303920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for(my$i=0;$i<$panel_count;$i++){ 304920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if($graph->{"vars"}->[$i]){ 305920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if(defined($data[$i])){ 306920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if(!defined($graph->{"minx"})){ 307920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $data[$i]->[0]=~m/^\s*(-?[0-9\.]*)[ ,]+(-?[0-9\.]*)/; 308920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"maxx"}=$1; 309920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"minx"}=$1; 310920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"maxy"}=$2; 311920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"miny"}=$2; 312920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $rescale=1; 313920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 314920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 315920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for(my$j=0;$j<=$#{$data[$i]};$j++){ 316920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $data[$i]->[$j]=~m/^\s*(-?[0-9\.]*)[ ,]+(-?[0-9\.]*)/; 317920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $rescale=1 if($1>$graph->{"maxx"}); 318920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $rescale=1 if($1<$graph->{"minx"}); 319920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $rescale=1 if($2>$graph->{"maxy"}); 320920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $rescale=1 if($2<$graph->{"miny"}); 321920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"maxx"}=$1 if($1>$graph->{"maxx"}); 322920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"minx"}=$1 if($1<$graph->{"minx"}); 323920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"maxy"}=$2 if($2>$graph->{"maxy"}); 324920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"miny"}=$2 if($2<$graph->{"miny"}); 325920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 326920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 327920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $count++; 328920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 329920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 330920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 331920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$width=$w->width(); 332920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$height=$w->height(); 333920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 334920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $rescale=1 if(!defined($graph->{"width"}) || 335920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $width!=$graph->{"width"} || 336920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $height!=$graph->{"height"}); 337920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 338920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"width"}=$width; 339920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $graph->{"height"}=$height; 340920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 341920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if(defined($graph->{"maxx"})){ 342920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # draw axes, labels 343920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # look for appropriate axis scales 344920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 345920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if($rescale){ 346920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 347920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('ylabel'); 348920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('xlabel'); 349920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('axes'); 350920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 351920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$yscale=1.; 352920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$xscale=1.; 353920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$iyscale=1.; 354920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$ixscale=1.; 355920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson while(($graph->{"maxx"}-$graph->{"minx"})*$xscale>15){$xscale*=.1;$ixscale*=10.;} 356920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson while(($graph->{"maxy"}-$graph->{"miny"})*$yscale>15){$yscale*=.1;$iyscale*=10.;} 357920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 358920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson while(($graph->{"maxx"}-$graph->{"minx"})*$xscale<3){$xscale*=10.;$ixscale*=.1;} 359920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson while(($graph->{"maxy"}-$graph->{"miny"})*$yscale<3){$yscale*=10.;$iyscale*=.1;} 360920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 361920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # how tall are the x axis labels? 362920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->createText(-1,-1,-anchor=>'se',-tags=>['foo'],-text=>"0123456789."); 363920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my($x1,$y1,$x2,$y2)=$w->bbox('foo'); 364920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->delete('foo'); 365920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$maxlabelheight=$y2-$y1; 366920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$useabley=$height-$maxlabelheight-3; 367920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$pixelpery=$useabley/($graph->{"maxy"}-$graph->{"miny"}); 368920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 369920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # place y axis labels at proper spacing/height 370920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$lasty=-$maxlabelheight/2; 371920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$topyval=int($graph->{"maxy"}*$yscale+1.)*$iyscale; 372920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 373920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for(my$i=0;;$i++){ 374920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$yval= $topyval-$i*$iyscale; 375920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$y= ($graph->{"maxy"}-$yval)*$pixelpery; 376920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson last if($y>$useabley); 377920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if($y-$maxlabelheight>=$lasty){ 378920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->createText(0,$y,-anchor=>'e',-tags=>['ylabel'],-text=>"$yval"); 379920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $lasty=$y; 380920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 381920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 382920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 383920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # get the max ylabel width and place them at proper x 384920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ($x1,$y1,$x2,$y2)=$w->bbox('ylabel'); 385920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$maxylabelwidth=$x2-$x1; 386920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->move('ylabel',$maxylabelwidth,0); 387920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 388920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$beginx=$maxylabelwidth+3; 389920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$useablex=$width-$beginx; 390920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 391920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # draw basic axes 392920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->createLine($beginx,0,$beginx,$useabley,$width,$useabley, 393920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -tags=>['axes'],-width=>2); 394920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # draw y tix 395920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $lasty=-$maxlabelheight/2; 396920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for(my$i=0;;$i++){ 397920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$yval= $topyval-$i*$iyscale; 398920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$y= ($graph->{"maxy"}-$yval)*$pixelpery; 399920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson last if($y>$useabley); 400920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if($yval==0){ 401920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->createLine($beginx,$y,$width,$y, 402920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -tags=>['axes'],-width=>1); 403920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson }else{ 404920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if($y-$maxlabelheight>=$lasty){ 405920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $w->createLine($beginx,$y,$width,$y, 406920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -tags=>['axes'],-width=>1, 407920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson -stipple=>'gray50'); 408920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 409920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson $lasty=$y; 410920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 411920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 412920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 413920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 414920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson # place x axis labels at proper spacing 415920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$topxval=int($graph->{"maxx"}*$xscale+1.)*$ixscale; 416920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$pixelperx=$useablex/($graph->{"maxx"}-$graph->{"minx"}); 417920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 418920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for(my$i=0;;$i++){ 419920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$xval= $topxval-$i*$ixscale; 420920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson my$x= $width-($graph->{"maxx"}-$xval)*$pixelperx; 421920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 422ffecf3c5c207d0275d480970fd025cb9526b1905Mathieu last if($x<$beginx); 423 # bounding boxen are hard. place temp labels. 424 $w->createText(-1,-1,-anchor=>'e',-tags=>['foo'],-text=>"$xval"); 425 } 426 427 ($x1,$y1,$x2,$y2)=$w->bbox('foo'); 428 my$maxxlabelwidth=$x2-$x1; 429 $w->delete('foo'); 430 my$lastx=$width; 431 432 for(my$i=0;;$i++){ 433 my$xval= $topxval-$i*$ixscale; 434 my$x= $width-($graph->{"maxx"}-$xval)*$pixelperx; 435 436 last if($x-$maxxlabelwidth/2<0 || $x<$beginx); 437 if($xval==0 && $x<$width){ 438 $w->createLine($x,0,$x,$useabley,-tags=>['axes'],-width=>1); 439 } 440 441 if($x+$maxxlabelwidth<=$lastx){ 442 $w->createText($x,$height-1,-anchor=>'s',-tags=>['xlabel'],-text=>"$xval"); 443 $w->createLine($x,0,$x,$useabley,-tags=>['axes'],-width=>1,-stipple=>"gray50"); 444 $lastx=$x; 445 } 446 } 447 $graph->{"labelheight"}=$maxlabelheight; 448 $graph->{"xo"}=$beginx; 449 $graph->{"ppx"}=$pixelperx; 450 $graph->{"ppy"}=$pixelpery; 451 } 452 453 # plot the files 454 $count=0; 455 my$legendy=$graph->{"labelheight"}/2; 456 for(my$i=0;$i<$panel_count;$i++){ 457 if($graph->{"vars"}->[$i]){ 458 $count++; # count here for legend color selection stability 459 if(defined($data[$i])){ 460 # place a legend placard; 461 my$color=$colors[($count-1)%($#colors+1)]; 462 $w->createText($width,$legendy,-anchor=>'e',-tags=>['legend'], 463 -fill=>$color,-text=>$panel_keys[$i]); 464 $legendy+=$graph->{"labelheight"}; 465 466 # plot the lines 467 my@pairs=map{if(/^\s*(-?[0-9\.]*)[ ,]+(-?[0-9\.]*)/){ 468 (($1-$graph->{"minx"})*$graph->{"ppx"}+$graph->{"xo"}, 469 (-$2+$graph->{"maxy"})*$graph->{"ppy"})}} (@{$data[$i]}); 470 471 $w->createLine((@pairs),-fill=>$color,-tags=>['lines']); 472 } 473 } 474 } 475 } 476} 477 478sub draw_graph{ 479 480 if($onecrop){ 481 $onestate{"minx"}=undef; 482 $onestate{"miny"}=undef; 483 $onestate{"maxx"}=undef; 484 $onestate{"maxy"}=undef; 485 } 486 if($twocrop){ 487 $twostate{"minx"}=undef; 488 $twostate{"miny"}=undef; 489 $twostate{"maxx"}=undef; 490 $twostate{"maxy"}=undef; 491 } 492 493 for(my$i=0;$i<$panel_count;$i++){ 494 if($twostate{"vars"}->[$i]){ 495 496 #re-place the canvases 497 498 $oneresize->place(-x=>5,-y=>5,-anchor=>'nw'); 499 500 $one->place(-relwidth=>1.,-width=>-10,-relheight=>.5, 501 -height=>($graphy/2)-5-$oneresize->reqheight(), 502 -x=>5,-y=>5+$oneresize->reqheight,-anchor=>'nw'); 503 504 $tworesize->place(-rely=>1.,-y=>5,-anchor=>'nw',-in=>$one); 505 $two->place(-relwidth=>1.,-relheight=>1.,-rely=>1., 506 -y=>5+$tworesize->reqheight(),-anchor=>'nw',-in=>$one); 507 508 graphhelper(\%onestate); 509 graphhelper(\%twostate); 510 return; 511 } 512 } 513 514 $oneresize->place(-x=>5,-y=>5,-anchor=>'nw'); 515 516 $one->place(-relwidth=>1.,-width=>-10,-relheight=>1., 517 -height=>$graphy-5-$oneresize->reqheight(), 518 -x=>5,-y=>5+$oneresize->reqheight,-anchor=>'nw'); 519 520 $tworesize->placeForget(); 521 $two->placeForget(); 522 523 graphhelper(\%onestate); 524} 525 526sub depopulate_panel{ 527 my $win; 528 foreach $win (@panel_labels){ 529 $win->destroy(); 530 } 531 @panel_labels=(); 532 foreach $win (@panel_ones){ 533 $win->destroy(); 534 } 535 @panel_ones=(); 536 foreach $win (@panel_twos){ 537 $win->destroy(); 538 } 539 @panel_twos=(); 540 @panel_keys=(); 541} 542 543sub populate_panel{ 544 my $localy=$panely; 545 my $key; 546 my $i=0; 547 foreach $key (sort (keys %bases)){ 548 $panel_keys[$i]=$key; 549 if(!defined($panel_onevars[$i])){ 550 $panel_onevars[$i]=0; 551 $panel_twovars[$i]=0; 552 } 553 554 my $temp=$panel_twos[$i]=$panel_shell-> 555 Checkbutton(-variable=>\$panel_twovars[$i],-command=>['main::draw_graph'],-text=>'2')-> 556 place(-y=>$localy,-x=>-5,-anchor=>"ne",-relx=>1.); 557 my $oney=$temp->reqheight(); 558 my $onex=$temp->reqwidth()+15; 559 560 $temp=$panel_ones[$i]=$panel_shell-> 561 Checkbutton(-variable=>\$panel_onevars[$i],-command=>['main::draw_graph'],-text=>'1')-> 562 place(-y=>0,-x=>0,-anchor=>"ne",-in=>$temp,-bordermode=>'outside'); 563 $oney=$temp->reqheight() if ($oney<$temp->reqheight()); 564 $onex+=$temp->reqwidth(); 565 566 $temp=$panel_labels[$i]=$panel_shell->Label(-text=>$key,-class=>'Field',-justify=>'left')-> 567 place(-y=>$localy,-x=>5,-anchor=>"nw",-relwidth=>1.,-width=>-$onex, 568 -bordermode=>'outside'); 569 $oney=$temp->reqheight() if ($oney<$temp->reqheight()); 570 571 $localy+=$oney+2; 572 $i++; 573 } 574 $panel_count=$i; 575 576 $localy+=$panel_quit->reqheight()+50; 577 my $geometry=$panel->geometry(); 578 $geometry=~/^(\d+)/; 579 580 $panel->configure(-height=>$localy); 581 $panel->configure(-width=>$1); 582} 583 584sub Shutdown{ 585 Tk::exit(); 586} 587 588sub Status{ 589 my$text=shift @_; 590 $graph_status->configure(-text=>"$text"); 591 $toplevel->update(); 592} 593 594sub scan_directory{ 595 596 %bases=(); 597 my$count=0; 598 599 $first_file=undef; 600 $last_file=undef; 601 602 if(opendir(D,".")){ 603 my$file; 604 while(defined($file=readdir(D))){ 605 if($file=~m/^(\S*)_(\d+).m/){ 606 $bases{"$1"}="0"; 607 $first_file=$2 if(!defined($first_file) || $2<$first_file); 608 $last_file=$2 if(!defined($last_file) || $2>$last_file); 609 $count++; 610 611 Status("Reading... $count")if($count%117==0); 612 } 613 } 614 closedir(D); 615 } 616 Status("Done Reading: $count files"); 617 depopulate_panel(); 618 populate_panel(); 619 620 $fileno=$first_file if($fileno<$first_file); 621 $fileno=$last_file if($fileno>$last_file); 622 623 $graph_slider->configure(-from=>$first_file,-to=>$last_file); 624 625} 626 627 628 629 630 631