4Misc_Start84Platform8¸@ ¬xHHLÿõÿô Xg(üHHØ(dh ¥8q8ROGI'HHõÿôÿ WKK"& com.apple.print.PageFormat.FormattingPrinter com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.FormattingPrinter HPLaserJet4MP com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 768 587.52001953125 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -11.94000244140625 -12.239999771118164 780.05999755859375 599.760009765625 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 768 587.52001953125 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -11.94000244140625 -12.239999771118164 780.05999755859375 599.760009765625 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName Letter com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PageFormatTicket com.apple.print.DocumentTicket.PMSpoolFormat com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.DocumentTicket.PMSpoolFormat application/pdf com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMColorMatchingMode com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorMatchingMode 0 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMColorSyncProfileID com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorSyncProfileID 1580 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopies com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopies 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopyCollate com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopyCollate com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMFirstPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMFirstPage 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMLastPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMLastPage 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMPageRange com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMPageRange 1 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PrintSettingsTicket ¬xHHLÿõÿô Xg(üHHØ(dh ¥8q8ROGI'HHõÿôÿ WKK"& com.apple.print.PageFormat.FormattingPrinter com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.FormattingPrinter HPLaserJet4MP com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2004-04-05T21:18:44Z com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 768 587.52001953125 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -11.94000244140625 -12.239999771118164 780.05999755859375 599.760009765625 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 768 587.52001953125 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -11.94000244140625 -12.239999771118164 780.05999755859375 599.760009765625 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName Letter com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2004-04-05T21:18:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PageFormatTicket com.apple.print.DocumentTicket.PMSpoolFormat com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.DocumentTicket.PMSpoolFormat application/pdf com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMColorMatchingMode com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorMatchingMode 0 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMColorSyncProfileID com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorSyncProfileID 1580 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopies com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopies 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopyCollate com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopyCollate com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMFirstPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMFirstPage 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMLastPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMLastPage 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMPageRange com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMPageRange 1 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PrintSettingsTicket ¬xHHÚ(ÿáÿâùFg(üHHØ(dh &1ò0ROGI'HHáÿâÿùFÚ(Ú(D~ com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 730 552 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -31 -30 761 582 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName Letter (Small) com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 730 552 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -31 -30 761 582 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName LetterSmall com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PageFormatTicket com.apple.print.PrintSettings.PMColorMode com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorMode 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopies com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopies 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMDestinationType com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMDestinationType 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMFirstPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMFirstPage 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMLastPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMLastPage 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMPageRange com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMPageRange 1 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PrintSettingsTicket ¬x HHÚ(ÿáÿâùFg(üHHØ(dh &1ò0 ROGI'HHáÿâÿùFÚ(Ú(D~ com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 730 552 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -31 -30 761 582 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMConstrainedPaper com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName Letter (Small) com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 730 552 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -31 -30 761 582 com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator CUPS_CPL com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName LetterSmall com.apple.print.ticket.client CUPS_CPL com.apple.print.ticket.modDate 2006-04-17T18:06:46Z com.apple.print.ticket.stateFlag 1 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PageFormatTicket com.apple.print.PrintSettings.PMColorMode com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorMode 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopies com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopies 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMDestinationType com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMDestinationType 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMFirstPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMFirstPage 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMLastPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMLastPage 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMPageRange com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMPageRange 1 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2006-04-17T18:06:47Z com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PrintSettingsTicket ^Graph*@@ä8Žã8ŽÃ?UUUUUUÅ?WDashSettings#úÿ  !0ü:¶üNormalÿÿÿÿ@ ÿGenevaÿÿÿÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHHHH$$0ü:¶üNormalÿÿÿÿ@ ÿGenevaÿÿÿÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHHHH$$4444440ü ,,Ž$üNormalÿÿÿÿ@ ÿGenevaÿÿÿÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHHHH$$4 4 4 4 4 4 ÒhomežBd›ÿÿÿ)ÎÌÞ£ÄMacintosh HD2:Documents:3DBarStuff:\ Macintosh HD2Ä£|\H+ 3DBarStuffÎ)ÅFøI DocumentsÄ£ÞÌÅGhÉ "Macintosh HD2:Documents:3DBarStuff 3DBarStuff Macintosh HD2/Documents/3DBarStuff/Volumes/Macintosh HD2ÿÿfGizmo_Procedures2pdœÿÿÿÿt¡·…üÃHardDisk:Programming:IgorDev:Igor Pro 5F:WaveMetrics Procedures:Gizmo Procedures:ÂHardDiskÃü#GH+¡s`Gizmo Procedures¡tÿÈ…• WaveMetrics ProceduresÃü…·È…÷ý¡s` ñ,_„d îµPHardDisk:Programming:IgorDev:Igor Pro 5F:WaveMetrics Procedures:Gizmo Procedures"Gizmo ProceduresHardDiskGProgramming/IgorDev/Igor Pro 5F/WaveMetrics Procedures/Gizmo Procedures/ÿÿ½RecentWindows‰3DBar ChartAdvanced Topics.ihfAnalysis.ihfCurve Fitting.ihfDemoLoader.ipfDialog Help.ihfErrors.ihfGizmo0Gizmo0 InfoHelp Browser 4Misc_End8ÔXOPState_Start 8Data Browserelp.ihfhGizmo ve Fitting.ihfPeakFunctions2alog Help.ihfErSQL.ihfdur`Gizmo0 InfoHelpGBLoadWave€®ÅData Browser‘root4XOPState_End8öGizmo_ErrorV_FlagS_nameQ@ÆQŒ4Q‘˜7UsUserBack!,\ü¡î|€ÀÄj÷+iÀ´niÀdataMatrix,\@ð?ð?ð?4ÀÈjÌj€?@@@@€@@@@ @€?€@À@ @@€?@ABCDEFGH¨n*H Ôjà˜îÄÅ«AÅtw1,\ð?ð?ð?ð?ÐjABCDEFGH®ž •Øjylevelsð?r™îÄjCÅ€?@@ @à@A0APApAp“°ö9ÀÜj8«AÅ̬AÅ`ninetySixWells,\ à?ð?ð?ð?¿%A=vj@´c‹@äUÞ@X#Aé%Õ@ òò@a%CA§Ž$A•r$AË“:AXFLA,@A%!AUõ†Azú@õGA´õuA”~Aº,¶@nÁÿ@±ñUAÒa¤@DHAWµë@-¹j@éN@AG£Ae *A}tAp¶‰@ r@gfAGîA°”ä@<ÝÀyq¾@•È6A’~A€–?AìKÑ@ЦNA:qý@å!‘A®á@²7/A€YA€Ü1A'AY#PA,ˆ$A¼ÀAf]AíˆØ@ôA©A˜B@( ŒAðY€AÕÞmAÖºA}ÚA†9AÙrA±ÛA½çAÄ$A-·›@ÁíÁ?êzŠ@ÝiA4-AÃ[Q@áe­AY¥ç@õ›!A,VAQAXjqA Ô@à…?iÑ=AŠö¼@ÑÑA¦BQAPÀ3AD±5AOô4AjÙ ?‹ A$ ¹@KK0AR6?zßAFªN@"‚sA PackagesresO¢O¢Øêÿ¿!äj WM_WaveSelectorListØêÿ¿!ìj WaveSelectorInfo0tØêÿ¿!ôj3¾i³@üjÆ+iÀwýÈListWaveôjð?ð?ð?ð?Yøjroot dataMatrix ninetySixWells Packagesrootrootrootrootrootroot:dataMatrixroot:ninetySixWellsroot:Packages$048<@DSfs Ûq`‘jÆ+iÀwýÈSelWaveôjð?ð?ð?ð?; B€B€? Gizmo3DBarChart0tØêÿ¿!‘jþrow@col@baseLineÀGizmo_ErrorV_FlagbarChartObjectName˜åÿ¿  Param3DBar0srcWaveNamectName˜åÿ¿ root:ninetySixWellsS_GizmoNamectName˜åÿ¿ Gizmo00Q.\ðP‘jÂvýÈÂvýÈìfakeWave‘j2"ð?ð?ð?ð?'™??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA??€?€?À?À?@@ @ @@@@@`@`@€@€@@@ @ @°@°@À@À@Ð@Ð@à@à@ð@ð@AAAAAAAA A A(A(A0A0A8A8A@A@AHA€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@APAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApA€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€AˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ¿%A¿%AÀÀ=vj@=vj@ÀÀ´c‹@´c‹@ÀÀäUÞ@äUÞ@ÀÀX#AX#AÀÀé%Õ@é%Õ@ÀÀ òò@ òò@ÀÀa%CAa%CAÀÀ§Ž$A§Ž$AÀÀ•r$A•r$AÀÀË“:AË“:AÀÀXFLAXFLAÀÀÀÀ¿%A¿%AÀÀ=vj@=vj@ÀÀ´c‹@´c‹@ÀÀäUÞ@äUÞ@ÀÀX#AX#AÀÀé%Õ@é%Õ@ÀÀ òò@ òò@ÀÀa%CAa%CAÀÀ§Ž$A§Ž$AÀÀ•r$A•r$AÀÀË“:AË“:AÀÀXFLAXFLAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ,@A,@AÀÀ%!A%!AÀÀUõ†AUõ†AÀÀzú@zú@ÀÀõGAõGAÀÀ´õuA´õuAÀÀ”~A”~AÀÀº,¶@º,¶@ÀÀnÁÿ@nÁÿ@ÀÀ±ñUA±ñUAÀÀÒa¤@Òa¤@ÀÀDHADHAÀÀÀÀ,@A,@AÀÀ%!A%!AÀÀUõ†AUõ†AÀÀzú@zú@ÀÀõGAõGAÀÀ´õuA´õuAÀÀ”~A”~AÀÀº,¶@º,¶@ÀÀnÁÿ@nÁÿ@ÀÀ±ñUA±ñUAÀÀÒa¤@Òa¤@ÀÀDHADHAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀWµë@Wµë@ÀÀ-¹j@-¹j@ÀÀéN@AéN@AÀÀG£AG£AÀÀe *Ae *AÀÀ}tA}tAÀÀp¶‰@p¶‰@ÀÀ r@ r@ÀÀgfAgfAÀÀGîAGîAÀÀ°”ä@°”ä@ÀÀ<ÝÀ<ÝÀÀÀÀÀWµë@Wµë@ÀÀ-¹j@-¹j@ÀÀéN@AéN@AÀÀG£AG£AÀÀe *Ae *AÀÀ}tA}tAÀÀp¶‰@p¶‰@ÀÀ r@ r@ÀÀgfAgfAÀÀGîAGîAÀÀ°”ä@°”ä@ÀÀ<ÝÀ<ÝÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀyq¾@yq¾@ÀÀ•È6A•È6AÀÀ’~A’~AÀÀ€–?A€–?AÀÀìKÑ@ìKÑ@ÀÀЦNAЦNAÀÀ:qý@:qý@ÀÀå!‘Aå!‘AÀÀ®á@®á@ÀÀ²7/A²7/AÀÀ€YA€YAÀÀ€Ü1A€Ü1AÀÀÀÀyq¾@yq¾@ÀÀ•È6A•È6AÀÀ’~A’~AÀÀ€–?A€–?AÀÀìKÑ@ìKÑ@ÀÀЦNAЦNAÀÀ:qý@:qý@ÀÀå!‘Aå!‘AÀÀ®á@®á@ÀÀ²7/A²7/AÀÀ€YA€YAÀÀ€Ü1A€Ü1AÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ'A'AÀÀY#PAY#PAÀÀ,ˆ$A,ˆ$AÀÀ¼ÀA¼ÀAÀÀf]Af]AÀÀíˆØ@íˆØ@ÀÀôAôAÀÀ©A©AÀÀ˜B@˜B@ÀÀ( ŒA( ŒAÀÀðY€AðY€AÀÀÕÞmAÕÞmAÀÀÀÀ'A'AÀÀY#PAY#PAÀÀ,ˆ$A,ˆ$AÀÀ¼ÀA¼ÀAÀÀf]Af]AÀÀíˆØ@íˆØ@ÀÀôAôAÀÀ©A©AÀÀ˜B@˜B@ÀÀ( ŒA( ŒAÀÀðY€AðY€AÀÀÕÞmAÕÞmAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÖºAÖºAÀÀ}ÚA}ÚAÀÀ†9A†9AÀÀÙrAÙrAÀÀ±ÛA±ÛAÀÀ½çA½çAÀÀÄ$AÄ$AÀÀ-·›@-·›@ÀÀÁíÁ?ÁíÁ?ÀÀêzŠ@êzŠ@ÀÀÝiAÝiAÀÀ4-A4-AÀÀÀÀÖºAÖºAÀÀ}ÚA}ÚAÀÀ†9A†9AÀÀÙrAÙrAÀÀ±ÛA±ÛAÀÀ½çA½çAÀÀÄ$AÄ$AÀÀ-·›@-·›@ÀÀÁíÁ?ÁíÁ?ÀÀêzŠ@êzŠ@ÀÀÝiAÝiAÀÀ4-A4-AÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÃ[Q@Ã[Q@ÀÀáe­Aáe­AÀÀY¥ç@Y¥ç@ÀÀõ›!Aõ›!AÀÀ,VA,VAÀÀQAQAÀÀXjqAXjqAÀÀ Ô@ Ô@ÀÀà…?à…?ÀÀiÑ=AiÑ=AÀÀŠö¼@Šö¼@ÀÀÑÑAÑÑAÀÀÀÀÃ[Q@Ã[Q@ÀÀáe­Aáe­AÀÀY¥ç@Y¥ç@ÀÀõ›!Aõ›!AÀÀ,VA,VAÀÀQAQAÀÀXjqAXjqAÀÀ Ô@ Ô@ÀÀà…?à…?ÀÀiÑ=AiÑ=AÀÀŠö¼@Šö¼@ÀÀÑÑAÑÑAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ¦BQA¦BQAÀÀPÀ3APÀ3AÀÀD±5AD±5AÀÀOô4AOô4AÀÀjÙ ?jÙ ?ÀÀ‹ A‹ AÀÀ$ ¹@$ ¹@ÀÀKK0AKK0AÀÀR6?R6?ÀÀzßAzßAÀÀFªN@FªN@ÀÀ"‚sA"‚sAÀÀÀÀ¦BQA¦BQAÀÀPÀ3APÀ3AÀÀD±5AD±5AÀÀOô4AOô4AÀÀjÙ ?jÙ ?ÀÀ‹ A‹ AÀÀ$ ¹@$ ¹@ÀÀKK0AKK0AÀÀR6?R6?ÀÀzßAzßAÀÀFªN@FªN@ÀÀ"‚sA"‚sAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÁòäl ‘jpvýÈpvýÈTW_gizmoObjectList‘jð?ð?ð?ð?(‘j AppendToGizmo light=Directional,name=light0 ModifyGizmo light=light0 property={ position,-0.769375,0.416830,0.484061,0.000000} ModifyGizmo light=light0 property={ direction,-0.769375,0.416830,0.484061} ModifyGizmo light=light0 property={ ambient,0.133333,0.133333,0.133333,1.000000} ModifyGizmo light=light0 property={ specular,1.000000,1.000000,1.000000,1.000000} AppendToGizmo Axes=boxAxes,name=axes0 ModifyGizmo ModifyObject=axes0,property={-1,axisScalingMode,1} ModifyGizmo ModifyObject=axes0,property={-1,axisColor,0,0,0,1} ModifyGizmo ModifyObject=axes0,property={0,ticks,3} ModifyGizmo ModifyObject=axes0,property={1,ticks,3} ModifyGizmo ModifyObject=axes0,property={3,ticks,3} ModifyGizmo ModifyObject=axes0,property={8,ticks,3} ModifyGizmo ModifyObject=axes0,property={0,numTicks,12} ModifyGizmo ModifyObject=axes0,property={1,numTicks,8} ModifyGizmo ModifyObject=axes0,property={1,tickmarkType,3} ModifyGizmo ModifyObject=axes0,property={8,tickmarkType,3} ModifyGizmo ModifyObject=axes0,property={1,tickLevelWave,root:ylevels} ModifyGizmo ModifyObject=axes0,property={6,tickLevelWave,root:ylevels} ModifyGizmo ModifyObject=axes0,property={8,tickLevelWave,root:ylevels} ModifyGizmo ModifyObject=axes0,property={1,tickLabelWave,root:tw1} ModifyGizmo ModifyObject=axes0,property={6,tickLabelWave,root:tw1} ModifyGizmo ModifyObject=axes0,property={8,tickLabelWave,root:tw1} ModifyGizmo modifyObject=axes0 property={Clipped,0} AppendToGizmo Surface=root:Packages:Gizmo3DBarChart:fakeWave,name=Param3DBar0 ModifyGizmo ModifyObject=Param3DBar0 property={ srcMode,4} ModifyGizmo ModifyObject=Param3DBar0 property={ surfaceCTab,Rainbow} ModifyGizmo modifyObject=Param3DBar0 property={calcNormals,1},Êm“ÒEy­áP‹Æ T›Þ!d˜æ!f¤ÀyÁ€$‘jõWiÀLriÀÐcolorWave‘jð?ð?ð?ð?)€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?À@8À@8À@8À@8€?€?€?€?€?€?À@8À@8À@8À@8€?€?€?€?€?€?À@8À@8À@8À@8€?€?€?€?€?€?À@8À@8À@8À@8€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€€7€€7€€7€€7€?€?€?€?€?€?€?€?€?€?€€7€€7€€7€€7€?€?€?€?€?€?€?€?€?€?€€7€€7€€7€€7€?€?€?€?€?€?€?€?€?€?€€7€€7€€7€€7€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€€8€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7€€7ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?ÍÌL?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€? GizmoLabelsart0tØêÿ¿!,‘jôGizmo_ErrorV_FlagS_GizmoName:’äj˜åÿ¿ Gizmo0 Gizmo0belsart0tØêÿ¿!8‘j z3Labelelsart0tØêÿ¿!@‘j~ appendZ3uScaleÐ?yRotation€F@xTranslationš™™™™™ù?zRotation€V@yTranslationš™™™™™Ù¿labelRedlabelGreenlabelBluez3String¿ªæ:’8‘jXäÿ¿ Xäz3 Label z1Labelelsart0tØêÿ¿!L‘j~ appendZ1uScaleÐ?yRotation€F@xTranslationš™™™™™ù¿yTranslationà?zRotation€VÀlabelRedlabelGreenlabelBluez1String¿ªæ:’8‘jXäÿ¿ z1 Label x0Labelelsart0tØêÿ¿!X‘j~ appendX0uScaleÐ?zTranslationð¿xTranslationš™™™™™Ù¿yTranslationgfffffö?x0TiltlabelRedlabelGreenlabelBluex0String¿ªæ:’8‘jXäÿ¿ x0 Label y0Labelelsart0tØêÿ¿!d‘j~ appendY0ð?uScaleÐ?zTranslationð¿xTranslationпyTranslationgfffffö?y0TiltlabelRedlabelGreenlabelBluey0String¿ªæ:’8‘jXäÿ¿ y0 Label *‘”d TXET0RGI“‘dWaveSelectorWidget.ipWaveSelectorWidget.ip#pragma rtGlobals=2 // Use modern global access method. #pragma version=1.04 #pragma IgorVersion=5.04 // ********************************** // Version 1.0 first release // This is the second beta release; it includes a change that is incompatible with the first. The parameters to // MakeListIntoWaveSelector() have been changed. // Version 1.01 // Fixed bug: MakeListIntoWaveSelector() set CDF to root:, but didn't restore user's CDF // Added reporting of double-click in notification proc // Version 1.02 // Fixed bug: List had extra rows below the rows containing wave names, etc. // Added extended notification proc: Added function parameters giving the name of the window containing the // list, and the name of the list. If you need this information, see WS_SetExtNotificationProc(). // Previously, the Selection Changed notification was not passed along when a data folder was selected. Now, // all selection changes are passed to the notification procedure. // Added WS_CountSelectedObjects() function. // Added constants for notification event codes. // Added two new event codes: WMWS_FolderOpened and WMWS_FolderClosed // Fixed bug: double-click in space below the data (in blank space at bottom of list) was interpreted as a real // double-click. // Version 1.03 // Made notification function name storage compatible with triple names. // Added object name filter function. // Prevented certain harmful interactions with the debugger. // Hook function to update the widget didn't work with lists in sub-windows // // Version 1.04 // Fixed a bug: in a datafolders-only list, if a datafolder was selected when WS_UpdateWaveSelectorWidget() // was called, the selected datafolder was opened even if it was closed before. // ********************************** // ********************************** // Documentation // // This procedure file provides functions to turn a listbox control in a control panel into a hierarchical wave // browser. This gives you the ability to make a control panel where you can select a wave from any datafolder. // This is a poor cousin of the WaveBrowser widget used in Igor's dialogs. // // Actually, the WaveSelectorWidget procedure file allows you to choose to display waves, numeric variables, // string variables, or just data folders. You cannot display a combination of waves, numeric variables and/or // string variables. // // Selections are made by clicking waves (or variables or strings). To select more than one wave, you can // hold down the shift key and drag over rows you wish to select. If you already have a wave selected, shift- // click to select everything between the existing selection and the click location. You can make non-continguous // selections by hold down the command key (Macintosh) or Cntrl key (Windows) and clicking. Cmd- or Cntrl- // clicking toggles the selected state of an item. // // Actually, the forgoing paragraph doesn't take account of the selectionMode optional parameter, which // can be used to prohibit multiple selections or discontiguous selections. // // Unlike the WaveBrowser widget in Igor's dialogs, objects are de-selected when they are hidden. Even // worse, objects are de-selected when a folder is opened. // // To use the WaveSelectorWidget, make a control panel with a bare-bones ListBox control, such as you get // if you use the command // ListBox listboxName,pos={left, top},size={width, height} // all by itself. This listbox is not useable as it has no listwave or selwave. // // You then call the function MakeListIntoWaveSelector(), which creates the necessary waves, sets up data // structures, attaches hook functions, etc., to make the listbox control into a hiearchical display of // data folders and (waves, variables, or strings) in your experiment. // // Note that this means you can't use a control panel recreation macro to build a control panel containing // a WaveSelectorWidget listbox. You must modify the recreation macro to simplify the ListBox command, // and you must add a call to MakeListIntoWaveSelector(). // // For an example of the use of WaveSelectorWidget, see Scatter Plot Matrix 2.ipf. You will find it in your // Igor Pro folder, in WaveMetrics Procedures:Graphing:. // // There is a demo of the WaveSelectorWidget; pull down the File menu and // select Examples->Programming->WaveSelectorWidgetExample.pxp // // Function Reference // // All the functions take two standard input parameters that identify the listbox control. These are: // windowname string expression giving the name of the window (graph or control panel) // containing the listbox control. // listcontrolname string expression giving the name of the listbox control. // // The Functions // // MakeListIntoWaveSelector(windowname, listcontrolname, [content, selectionMode, listoptions, matchStr, filterProcStr]) // content optional parameter to select what is displayed in the list. A set of constants // is provided for your convenience: // WMWS_Waves hierarchical display of waves in data folders // WMWS_NVars hierarchical display of numeric variables // in data folders // WMWS_Strings hierarchical display of string variables in // data folders // WMWS_DataFolders hierarchical display of just the data folders // if absent, defaults to WMWS_Waves // // selectionMode optional parameter to set the selection mode. A set of constants is provided // for your convenience: // WMWS_SelectionNonContinguous // Allows multiple, non-contiguous selections. // WMWS_SelectionContinguous // Allows multiple selections, but they must // be contiguous. // WMWS_SelectionSingle Only a single item my be selected at a time. // WMWS_SelectionNonContinguous is the default. // // listoptions optional parameter containing a string to be passed as the options parameter to the // WaveList() function. See documentation of WaveList(). The string is limited to 200 characters. // If listoptions is not set, it defaults to "". // Since it is passed to WaveList, it works only with a Wave Selector containing waves. // // matchStr optional parameter to select a subset of objects based on names and wildcards. See, for instance, // the WaveList() function for details. // // filterProcStr optional parameter to name a function to filter objects before they are put into the list. // The function itself has the following format: // // Function FilterProc(aName, contents) // String aName // object name with full data folder path // Variable contents // content code as described for the content parameter // // return 0 to reject or 1 to accept // end // // For example, to allow only objects starting with "w" (a trivial example that doesn't really // require a filter function): // // Function MyFilter(aName, contents) // String aName // Variable contents // // String leafName = ParseFilePath(0, aName, ":", 1, 0) // if (CmpStr(leafName[0], "v") == 0) // return 1 // endif // // return 0 // end // // Makes the specified listbox control into a WaveSelectorWidget. Setting content to WMWS_DataFolders // makes a listbox in which you can select data folders. Any other value of content does not include data folders // in the selection list, even though data folder rows can be selected. // // To set the value of an optional parameter, you must use the name of the parameter. For instance, to // call MakeListIntoWaveSelector() to display numeric variables, call it like this: // MakeListIntoWaveSelector("MyWindow", "MyListbox", content=WMWS_NVars) // // WS_SelectedObjectsList(windowname, listcontrolname) // // Returns a semicolon-separated list of selected items. Unless you created the widget with // content set to WMWS_DataFolders, the returned list does not include data folders. // Each list item is a complete path to the selected object. // // WS_CountSelectedObjects(windowname, listcontrolname) // // Returns a count of selected objects. Unless you created the widget with // content set to WMWS_DataFolders, the returned count does not include data folders. // May be faster than using WS_SelectedObjectsList() and then using ItemsInList() on the returned list. // If you will need the list, it is better to call WS_SelectedObjectsList() and then ItemsInList(). // // WS_SelectObjectList(windowname, listcontrolname, ObjectList) // ObjectList string containing a semicolon-separated list of object names. // // Selects the objects in the list. The object names must be full paths. Does *not* // clear any pre-existing selections, so you can build up selections by calling this function repeatedly. // // WS_SelectAnObject(windowname, listcontrolname, ObjectPath) // ObjectPath string containing the full path name of a single object to be selected. // // Adds a single object to the selections in the list. Does *not* clear any pre-existing selections, // so you can build up selections by calling this function repeatedly. If you wish to select a single // object, call WS_ClearSelection() first. // // WS_ClearSelection(windowname, listcontrolname) // // Programmatically de-selects any selected objects. // // WS_UpdateWaveSelectorWidget(windowname, listcontrolname) // // Should be rarely needed. Updates the list of objects by closing the root: folder, then opening any data // folders that were open before the root: data folder was closed. This function is used internally by // WaveSelectorWidget.ipf to update the contents whenever the window containing the list becomes the // active window, in case user actions have changed the contents. You might need this function if your // control panel makes or kills objects. // // WS_OpenAFolder(windowname, listcontrolname, FolderPathToOpen) // FolderPathToOpen String containing the full path to a data folder to be opened. // // Programmatically opens a data folder, displaying the contents of the folder. The path string may end // with a colon, but it is not required. If the folder's parent is not open, the folder will not be found // and WS_OpenAFolder will fail. // // WS_OpenAFolderFully(windowname, listcontrolname, FolderPathToOpen) // FolderPathToOpen String containing the full path to a data folder to be opened. // // Programmatically opens a data folder, displaying the contents of the folder. The path string may end // with a colon, but it is not required. WS_OpenAFolderFully travels down the folder path, making sure // all the folders in the path are open. Slower than WS_OpenAFolder, but surer. // // WS_CloseAFolder(windowname, listcontrolname, FolderPathToClose) // FolderPathToClose String containing the full path to a data folder to be closed. // // Programmatically closes a data folder, hiding the contents of the folder. The path string may end // with a colon, but it is not required. // // WS_SetNotificationProc(windowname, listcontrolname, procname [, isExtendedProc) // procname String containing the name of a funtion to be called when an item or items in // the list is selected. // isExtendedProc Optional parameter. If not present, or if zero, use this format: // // WS_NotificationProc(SelectedItem, EventCode) // String SelectedItem // string with full path to the item clicked on in the wave selector // Variable EventCode // the ListBox event code that triggered this notification // // .... function body .... // end // // if isExtendedProc is non-zero, notification proc has this format: // // WS_NotificationProc(SelectedItem, EventCode, OwningWindowName, ListboxControlName) // String SelectedItem // string with full path to the item clicked on in the wave selector // Variable EventCode // the ListBox event code that triggered this notification // String OwningWindowName // String containing the name of the window containing the listbox // String ListboxControlName // String containing the name of the listbox control // // .... function body .... // end // // Pass "" as procname to disable notification // // Since only one item is passed to the notification proc, if you need a list of selected items you will have to use // WS_SelectedObjectsList() to get the list. // // See the constants below for event codes. // // NOTE: all the events have the potential to change the list of selected objects. // // ********************************** // constants for content parameter to MakeListIntoWaveSelector() Constant WMWS_Waves = 1 Constant WMWS_NVars = 2 Constant WMWS_Strings = 3 Constant WMWS_DataFolders = 4 // constants for selectionMode parameter Constant WMWS_SelectionNonContinguous = 0 Constant WMWS_SelectionContinguous = 1 Constant WMWS_SelectionSingle = 2 // constants for notification events Constant WMWS_FolderOpened = 1 Constant WMWS_FolderClosed = 2 Constant WMWS_DoubleClick = 3 Constant WMWS_SelectionChanged = 4 Constant WMWS_SelectionChangedShift = 5 // constants for error codes from MakeListIntoWaveSelector() Constant WMWS_ErrorNoError = 0 Constant WMWS_ErrorOptionStringTooLong = 1 static Constant MAX_OBJ_NAME = 31 static Constant WaveSelectorVersion = 1 // structure used to store information about the widget as user data in the listbox control static Structure WaveSelectorListInfo int16 version int16 contents // one of WMWS_Waves, WMWS_NVars, WMWS_Strings, or WMWS_DataFolders char folderName[MAX_OBJ_NAME+1] // last element of path starting with root:Packages:WM_WaveSelectorList: char ListWaveName[MAX_OBJ_NAME+1] // resides in folder named by folderName char SelWaveName[MAX_OBJ_NAME+1] char wavelistOptions1[100] char wavelistOptions2[100] char wavelistMatchStr[MAX_OBJ_NAME+1] char nameFilterProcStr[3*MAX_OBJ_NAME+3] char NotificationProc[3*MAX_OBJ_NAME+3] int16 isExtendedProc EndStructure Function MakeListIntoWaveSelector(windowname, listcontrolname, [content, selectionMode, listoptions, matchStr, nameFilterProc]) String windowname String listcontrolname Variable content // one of WMWS_Waves, WMWS_NVars, WMWS_Strings, or WMWS_DataFolders Variable selectionMode String listoptions // a string to pass in the Options parameter of WaveList; overrides options String matchStr String nameFilterProc Variable err = WMWS_ErrorNoError if (ParamIsDefault(content)) content = WMWS_Waves endif if (ParamIsDefault(selectionMode)) selectionMode = WMWS_SelectionNonContinguous endif if (ParamIsDefault(listoptions)) listoptions = "" endif if (ParamIsDefault(matchStr)) matchStr = "*" endif if (ParamIsDefault(nameFilterProc)) nameFilterProc = "" endif if (strlen(listoptions) > 200) listoptions = "" err = WMWS_ErrorOptionStringTooLong endif Variable selectMode = 10 switch (selectionMode) case WMWS_SelectionNonContinguous: selectMode = 10 break; case WMWS_SelectionContinguous: selectMode = 7 break; case WMWS_SelectionSingle: selectMode = 6 break; endswitch STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version != 0) KillDataFolder $("root:Packages:WM_WaveSelectorList:"+ListInfo.folderName) endif ListInfo.version = WaveSelectorVersion ListInfo.contents = content ListInfo.NotificationProc = "" ListInfo.isExtendedProc = 0 Variable optionsLen = strlen(listoptions) if (optionsLen > 100) ListInfo.wavelistOptions1 = listoptions[0,99] ListInfo.wavelistOptions2 = listoptions[100,optionsLen-1] else ListInfo.wavelistOptions1 = listoptions ListInfo.wavelistOptions2 = "" endif ListInfo.wavelistMatchStr = matchStr ListInfo.nameFilterProcStr = nameFilterProc ListBox $listcontrolname, win=$windowname, proc=WaveSelectorListProc,mode=selectMode ListBox $listcontrolname, win=$windowname, widths={20,500},keySelectCol=1,editStyle=1 String SaveDF = GetDataFolder(1) SetDataFolder root: NewDataFolder/O/S Packages NewDataFolder/O/S WM_WaveSelectorList ListInfo.folderName = UniqueName("WaveSelectorInfo", 11, 0) NewDataFolder/O/S $ListInfo.folderName // one row, to be filled with the root object. Later, the root object will be opened and the opening code // will fill in the contents of the root object. Make/T/N=(1, 2, 2) ListWave // second layer holds full path info Make/N=(1, 2) SelWave ListBox $listcontrolname, win=$windowname, listWave=ListWave, selWave=SelWave ListInfo.ListWaveName = "ListWave" ListInfo.SelWaveName = "SelWave" String infoStr StructPut/S ListInfo, infoStr ListBox $listcontrolname, win=$windowname, userData(WaveSelectorInfo)=infoStr SetDataFolder SaveDF ListWave[0][1][0] = "root" ListWave[0][1][1] = "root" ListWave[0][0][1] = "root" SelWave[0][0] = 0x40 // it's a data folder, make it a disclosure control. The root folder starts out open, so it is in the open position. Variable index=0 Variable listrow = 1 String objname String indentString = " " OpenAFolder(ListInfo, 0) // open the root folder SelWave[0][0] = 0x50 // get root window name String rootwindowname = ParseFilePath(0, windowname, "#", 0, 0) String WaveWidgetList = GetUserData(windowname, "", "WaveWidgetList") SetWindow $rootwindowname, userdata(WaveWidgetList)+= "WindowName="+windowname+",ListName="+listcontrolname+";" SetWindow $rootwindowname, hook(WaveSelectorWidgetHook) = WMWS_WinHook return err end Function/S WS_SelectedObjectsList(windowname, listcontrolname) String windowname String listcontrolname STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return "" endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable nrows = DimSize(ListWave, 0) Variable i String theList = "" for (i = 0; i < nrows; i += 1) if ( (ListInfo.contents != WMWS_DataFolders) && (SelWave[i][0] & 0x40) ) continue // we don't want datafolders in the list unless this is a datafolder selection list endif if (SelWave[i][1] & 9) theList += ListWave[i][1][1] + ";" endif endfor return theList end Function WS_CountSelectedObjects(windowname, listcontrolname) String windowname String listcontrolname STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return 0 endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable nrows = DimSize(ListWave, 0) Variable i Variable theCount = 0 for (i = 0; i < nrows; i += 1) if ( (ListInfo.contents != WMWS_DataFolders) && (SelWave[i][0] & 0x40) ) continue // we don't want datafolders in the list unless this is a datafolder selection list endif if (SelWave[i][1] & 9) theCount += 1 endif endfor return theCount end Function WS_SelectObjectList(windowname, listcontrolname, ObjectList[, OpenFoldersAsNeeded]) String windowname String listcontrolname String ObjectList Variable OpenFoldersAsNeeded if (ParamIsDefault(OpenFoldersAsNeeded)) OpenFoldersAsNeeded = 0 endif Variable nItems = ItemsInList(ObjectList) Variable i for (i = 0; i < nItems; i += 1) WS_SelectAnObject(windowname, listcontrolname, StringFromList(i, ObjectList), OpenFoldersAsNeeded = OpenFoldersAsNeeded) endfor end Function WS_SelectAnObject(windowname, listcontrolname, ObjectPath[, OpenFoldersAsNeeded]) String windowname String listcontrolname String ObjectPath Variable OpenFoldersAsNeeded if (strlen(ObjectPath) == 0) return 0 endif if (ParamIsDefault(OpenFoldersAsNeeded)) OpenFoldersAsNeeded = 0 endif STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return -1 endif if (OpenFoldersAsNeeded) String PathToFolder = ObjectPath PathToFolder = ParseFilePath(1, ObjectPath, ":", 1, 0) WS_OpenAFolderFully(windowname, listcontrolname, PathToFolder) endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable nrows = DimSize(ListWave, 0) Variable i String theList = "" for (i = 0; i < nrows; i += 1) if ( (ListInfo.contents != WMWS_DataFolders) && (SelWave[i][0] & 0x40) ) continue // we don't want datafolders in the list unless this is a datafolder selection list endif if (CmpStr(ListWave[i][1][1], ObjectPath) == 0) SelWave[i][1] = SelWave[i][1] | 1 endif endfor return 0 end Function WS_ClearSelection(windowname, listcontrolname) String windowname String listcontrolname STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return NaN endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) SelWave[][1] = 0 end Function WS_UpdateWaveSelectorWidget(windowname, listcontrolname) String windowname String listcontrolname STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return -1 endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable nrows = DimSize(ListWave, 0) Variable i, j String theList = "" // first make a list of open data folders so we can open them again later for (i = 0; i < nrows; i += 1) if ((SelWave[i][0] & 0x50) == 0x50) // 0x40 means it's a checkbox row, which is a datafolder; 0x10 means it is checked, which means the data folder is open theList += ListWave[i][1][1] + ";" endif endfor String selectedWavesList = WS_SelectedObjectsList(windowname, listcontrolname) CloseAFolder(ListInfo, 0) // row zero is the root: data folder row. This will remove everything from the list Variable numFolders = ItemsInList(theList) if (numFolders > 0) for (i = 0; i < numFolders; i += 1) String folderPath = StringFromList(i, theList) Variable listrows = DimSize(ListWave, 0) for (j = 0; j < listrows; j += 1) if (CmpStr(ListWave[j][1][1], folderPath) == 0) OpenAFolder(ListInfo, j) SelWave[j][0] = 0x50 break; endif endfor endfor endif WS_SelectObjectList(windowname, listcontrolname, selectedWavesList, OpenFoldersAsNeeded = 1) end Function WS_OpenAFolder(windowname, listcontrolname, FolderPathToOpen) String windowname String listcontrolname String FolderPathToOpen if (strlen(FolderPathToOpen) == 0) return 0 endif STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return -1 endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable nrows = DimSize(ListWave, 0) Variable i Variable lastcharpos = StrLen(FolderPathToOpen)-1 if (CmpStr(FolderPathToOpen[lastcharpos], ":") == 0) FolderPathToOpen = FolderPathToOpen[0, lastcharpos-1] endif for (i = 0; i < nrows; i += 1) if ((SelWave[i][0] & 0x40) == 0) // is it a disclosure triangle? continue endif if (CmpStr(ListWave[i][1][1], FolderPathToOpen) == 0) if ( (SelWave[i][0] & 0x10) == 0) OpenAFolder(ListInfo, i) SelWave[i][0] = 0x50 // check the checkbox endif break; endif endfor return 0 end Function WS_OpenAFolderFully(windowname, listcontrolname, FolderPathToOpen) String windowname String listcontrolname String FolderPathToOpen if (strlen(FolderPathToOpen) == 0) return 0 endif STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return -1 endif String FolderPath = ParseFilePath(0, FolderPathToOpen, ":", 0, 0) if (CmpStr(FolderPath, "root") != 0) return -1 endif WS_OpenAFolder(windowname, listcontrolname, FolderPath) FolderPath += ":" Variable i = 1 do String dfStr = ParseFilePath(0, FolderPathToOpen, ":", 0, i) i += 1 if (strlen(dfStr) == 0) break; endif FolderPath += dfStr WS_OpenAFolder(windowname, listcontrolname, FolderPath) FolderPath += ":" while(1) end Function WS_CloseAFolder(windowname, listcontrolname, FolderPathToClose) String windowname String listcontrolname String FolderPathToClose if (strlen(FolderPathToClose) == 0) return 0 endif STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return -1 endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable nrows = DimSize(ListWave, 0) Variable i Variable lastcharpos = StrLen(FolderPathToClose)-1 if (CmpStr(FolderPathToClose[lastcharpos], ":") == 0) FolderPathToClose = FolderPathToClose[0, lastcharpos-1] endif for (i = 0; i < nrows; i += 1) if (CmpStr(ListWave[i][1][1], FolderPathToClose) == 0) CloseAFolder(ListInfo, i) SelWave[i][0] = 0x40 // un-check the checkbox break; endif endfor return 0 end Function WS_SetNotificationProc(windowname, listcontrolname, procname [, isExtendedProc]) String windowname String listcontrolname String procname Variable isExtendedProc STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(windowname, listcontrolname, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return -1 endif ListInfo.NotificationProc = procname ListInfo.isExtendedProc = isExtendedProc StructPut/S ListInfo, userdata ListBox $listcontrolname, win=$windowname, userData(WaveSelectorInfo)=userdata end // private functions Function namefiltertemplate(theNameWithPath, ListContents) String theNameWithPath Variable ListContents // can't imagine why this would be necessary, but better to have it than to want it return 1 end static Function OpenAFolder(ListInfo, DataFolderRow) STRUCT WaveSelectorListInfo &ListInfo Variable DataFolderRow // row number in list that contains the data folder to be opened Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) String parentDF = ListWave[DataFolderRow][1][1] String parentDFwColon = parentDF+":" String saveDF = GetDataFolder(1) String objects = "" Variable nObjects = 0 Variable i Variable nrows = 0 Variable nRowsTooMany = 0 // variable to count how many waves are rejected if (ListInfo.contents != WMWS_DataFolders) SetDataFolder $(parentDFwColon) if (ListInfo.contents == WMWS_Waves) objects = WaveList(ListInfo.wavelistMatchStr, ";", ListInfo.wavelistOptions1+ListInfo.wavelistOptions2) elseif (ListInfo.contents == WMWS_NVars) objects = VariableList(ListInfo.wavelistMatchStr, ";", 4)+VariableList(ListInfo.wavelistMatchStr, ";", 5) elseif (ListInfo.contents == WMWS_Strings) objects = StringList(ListInfo.wavelistMatchStr, ";") // else // nrows += CountObjects(parentDFwColon, ListInfo.contents) endif nObjects = ItemsInList(objects) if (strlen(ListInfo.nameFilterProcStr) > 0) FUNCREF namefiltertemplate namefilterproc = $ListInfo.nameFilterProcStr String oldList = objects objects = "" Variable oldNObjects = nObjects nObjects = 0 for (i = 0; i < oldNObjects; i += 1) String aName = StringFromList(i, oldList) if (namefilterproc(aName, ListInfo.contents)) objects += aName+";" nObjects += 1 endif endfor endif nrows += nObjects SetDatafolder saveDF endif nrows += CountObjects(parentDFwColon, 4) Variable listrow = DataFolderRow+1 InsertPoints DataFolderRow+1, nrows, SelWave, ListWave Variable index=0 String objname String indentString = " " + returnIndentString(ListWave[DataFolderRow][1][0]) SetDataFolder $(parentDFwColon) // waves if (ListInfo.contents != WMWS_DataFolders) for (i = 0; i < nObjects; i += 1) objname = StringFromList(i, objects) ListWave[listrow][0][1] = parentDF ListWave[listrow][1][1] = parentDFwColon+PossiblyQuoteName(objname) ListWave[listrow][1][0] = indentString+objname listrow += 1 endfor endif if (nRowsTooMany) DeletePoints/M=0 listrow, nRowsTooMany, ListWave, SelWave endif index = 0 // data folders do objname = GetIndexedObjName("", 4, index) if (strlen(objname) == 0) break endif ListWave[listrow][0][1] = parentDF ListWave[listrow][1][1] = parentDFwColon+PossiblyQuoteName(objname) ListWave[listrow][1][0] = indentString+objname SelWave[listrow][0] = 0x40 index += 1 listrow += 1 while(1) SelWave[DataFolderRow][0] = SelWave[DataFolderRow][0] & ~1 // de-select the row just clicked SetDatafolder saveDF end Function CloseAFolder(ListInfo, DataFolderRow) STRUCT WaveSelectorListInfo &ListInfo Variable DataFolderRow // row number in list that contains the data folder to be opened Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) String parentDF = ListWave[DataFolderRow][1][1] Variable endrow = DimSize(ListWave, 0) Variable parentLen = StrLen(parentDF) Variable index Variable listrow = DataFolderRow+1 for (index = listrow; index < endrow; index += 1) if (CmpStr(parentDF, (ListWave[index][1][1])[0,parentLen-1]) != 0) break; endif endfor Variable npnts = index - listrow DeletePoints listrow, npnts, ListWave, SelWave SelWave[DataFolderRow][0] = SelWave[DataFolderRow][0] & ~1 // de-select the disclosure triangle cell just clicked end Function WMWS_WinHook(H_Struct) STRUCT WMWinHookStruct &H_Struct Variable statusCode = 0 STRUCT WaveSelectorListInfo ListInfo Variable i = 0 do String ctrlName = "" String ControlWindowName = "" if (GetIndexedWaveListFromUD(i, H_Struct.winName, ControlWindowName, ctrlName) < 0) break; endif String userdata = GetUserData(ControlWindowName, ctrlName, "WaveSelectorInfo") ListInfo.version = 0 StructGet/S ListInfo, userdata if (ListInfo.version == 0) continue endif switch (H_Struct.eventCode) case 0: // activate WS_UpdateWaveSelectorWidget(ControlWindowName, ctrlName) break; case 2: // Kill window KillControl/W=$ControlWindowName $ctrlName KillDataFolder $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName) break; endswitch i += 1 while (1) return statusCode // 0 if nothing done, else 1 End Function WS_ExtNotificationTemplate(SelectedItem, EventCode, WindowName, ListboxName) String SelectedItem Variable EventCode String WindowName String ListboxName end Function WS_NotificationTemplate(SelectedItem, EventCode) String SelectedItem Variable EventCode end Static Function CallNotificationProc(object, event, windowName, listName, procName, isExtended) String object Variable event String windowName, listName String procName Variable isExtended if (isExtended) FUNCREF WS_ExtNotificationTemplate notifyFunc = $(procName) notifyFunc(object, event, windowName, listName) else FUNCREF WS_NotificationTemplate extNotifyFunc = $(procName) extNotifyFunc(object, event) endif end Function WaveSelectorListProc(LB_Struct) : ListboxControl STRUCT WMListboxAction &LB_Struct STRUCT WaveSelectorListInfo ListInfo String userdata = GetUserData(LB_Struct.win, LB_Struct.ctrlName, "WaveSelectorInfo") StructGet/S ListInfo, userdata if (ListInfo.version == 0) return 0 endif Wave SelWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.SelWaveName) Wave/T ListWave = $("root:Packages:WM_WaveSelectorList:"+ListInfo.FolderName+":"+ListInfo.ListWaveName) Variable index=0 switch(LB_Struct.eventCode) case 1: // mouse down if (LB_Struct.col == 0) // if a click in the list results in breaking into the debugger, the debugger fakes a mouse-up with bogus information. // This widget doesn't put a header in the list, but if it did, we could get a mouse-down in row -1 if ( (LB_Struct.row < 0) || (LB_Struct.row >= DimSize(SelWave, 0)) ) break; // click in row beyond any data (blank space at bottom of list box) endif if (SelWave[LB_Struct.row][0] & 0x40) SelWave[LB_Struct.row][0] = SelWave[LB_Struct.row][0] & ~1 endif endif break; case 2: // mouse up if (LB_Struct.col == 0) // if a click in the list results in breaking into the debugger, the debugger fakes a mouse-up with bogus information. // That is the only way I have found to get a row of -1 here. if ( (LB_Struct.row < 0) || (LB_Struct.row >= DimSize(SelWave, 0)) ) break; // click in row beyond any data (blank space at bottom of list box) endif if (SelWave[LB_Struct.row][0] & 0x40) if (SelWave[LB_Struct.row][0] & 0x10) // if it's checked, it needs to be opened OpenAFolder(ListInfo, LB_Struct.row) if (ListInfo.NotificationProc[0] != 0) CallNotificationProc(ListWave[LB_Struct.row][1][1], WMWS_FolderOpened, LB_Struct.win, LB_Struct.ctrlName, ListInfo.NotificationProc, ListInfo.isExtendedProc) endif else CloseAFolder(ListInfo, LB_Struct.row) if (ListInfo.NotificationProc[0] != 0) CallNotificationProc(ListWave[LB_Struct.row][1][1], WMWS_FolderClosed, LB_Struct.win, LB_Struct.ctrlName, ListInfo.NotificationProc, ListInfo.isExtendedProc) endif endif DoUpdate endif endif break; case 3: // double-click // if a click in the list results in breaking into the debugger, the debugger fakes a mouse-up with bogus information. // This widget doesn't put a header in the list, but if it did, we could get a mouse-down in row -1 if (LB_Struct.col == 1) if ( (LB_Struct.row < 0) || (LB_Struct.row >= DimSize(SelWave, 0)) ) break; // double-click in row beyond any data (blank space at bottom of list box) endif if ( (SelWave[LB_Struct.row][0] & 0x50) == 0x50 ) CloseAFolder(ListInfo, LB_Struct.row) SelWave[LB_Struct.row][0] = 0x40 SelWave[LB_Struct.row][1] = 0 elseif ( (SelWave[LB_Struct.row][0] & 0x50) == 0x40 ) OpenAFolder(ListInfo, LB_Struct.row) SelWave[LB_Struct.row][0] = 0x50 SelWave[LB_Struct.row][1] = 0 else // not a container row: report a double-click if (ListInfo.NotificationProc[0] != 0) CallNotificationProc(ListWave[LB_Struct.row][1][1], LB_Struct.eventCode, LB_Struct.win, LB_Struct.ctrlName, ListInfo.NotificationProc, ListInfo.isExtendedProc) endif endif endif break; case 4: // selection changed case 5: // shift-selection if (LB_Struct.col == 1) if (ListInfo.NotificationProc[0] != 0) CallNotificationProc(ListWave[LB_Struct.row][1][1], LB_Struct.eventCode, LB_Struct.win, LB_Struct.ctrlName, ListInfo.NotificationProc, ListInfo.isExtendedProc) endif endif break; endswitch end static Function/S returnIndentString(text) String text String returnStr Variable space = char2num(" ") Variable i=0 Variable len = StrLen(text) for (i = 0; i < len; i += 1) if (char2num(text[i]) != space) break; endif endfor returnStr = PadString("", i, space) return returnStr end static Function GetIndexedWaveListFromUD(index, rootWindowName, outWindowName, outListName) Variable index String rootWindowName, &outWindowName, &outListName String thelist = GetUserData(rootWindowName, "", "WaveWidgetList") if (index >= ItemsInList(thelist)) return -1 endif outWindowName = StringByKey("WindowName", stringfromlist(index, thelist), "=", ",") outListName = StringByKey("ListName", stringfromlist(index, thelist), "=", ",") return index endRH Monaco0«âr0«ârxHHÚ(ÿáÿâùFg(üHHØ(dh FÿHHHH$$ Rw‰T×RMPSRWMT1*íÿÿœë€îÿÿLœëŒ€ÿÿÈœë”L// Platform=Macintosh, IGORVersion=6.200, architecture=Intel Silent 101 // use | as bitwise or -- not comment. NewPath/Z Gizmo_Procedures "HardDisk:Programming:IgorDev:Igor Pro 5F:WaveMetrics Procedures:Gizmo Procedures:" SetDataFolder root:Packages:Gizmo3DBarChart: DefaultFont "Geneva" OpenProc/W=(427,48,1138,994)/J=95978/V=0 "WaveSelectorWidget.ip" MoveWindow/P 300,44,1572,1166 MoveWindow/C 6,826,1206,1029 WM3DBarChartPanel() Gizmo0() Window Gizmo0() : GizmoPlot PauseUpdate; Silent 1 // Building Gizmo 6 window... // Do nothing if the Gizmo XOP is not available. if(exists("NewGizmo")!=4) DoAlert 0, "Gizmo XOP must be installed" return endif NewGizmo/N=Gizmo0/T="Gizmo0" /W=(380,44,916,518) ModifyGizmo startRecMacro AppendToGizmo light=Directional,name=light0 ModifyGizmo light=light0 property={ position,-0.769375,0.416830,0.484061,0.000000} ModifyGizmo light=light0 property={ direction,-0.769375,0.416830,0.484061} ModifyGizmo light=light0 property={ ambient,0.133333,0.133333,0.133333,1.000000} ModifyGizmo light=light0 property={ specular,1.000000,1.000000,1.000000,1.000000} AppendToGizmo Axes=boxAxes,name=axes0 ModifyGizmo ModifyObject=axes0,property={-1,axisScalingMode,1} ModifyGizmo ModifyObject=axes0,property={-1,axisColor,0,0,0,1} ModifyGizmo ModifyObject=axes0,property={0,ticks,3} ModifyGizmo ModifyObject=axes0,property={1,ticks,3} ModifyGizmo ModifyObject=axes0,property={3,ticks,3} ModifyGizmo ModifyObject=axes0,property={8,ticks,3} ModifyGizmo ModifyObject=axes0,property={0,numTicks,12} ModifyGizmo ModifyObject=axes0,property={1,numTicks,8} ModifyGizmo ModifyObject=axes0,property={1,tickmarkType,3} ModifyGizmo ModifyObject=axes0,property={8,tickmarkType,3} ModifyGizmo ModifyObject=axes0,property={1,tickLevelWave,root:ylevels} ModifyGizmo ModifyObject=axes0,property={6,tickLevelWave,root:ylevels} ModifyGizmo ModifyObject=axes0,property={8,tickLevelWave,root:ylevels} ModifyGizmo ModifyObject=axes0,property={1,tickLabelWave,root:tw1} ModifyGizmo ModifyObject=axes0,property={6,tickLabelWave,root:tw1} ModifyGizmo ModifyObject=axes0,property={8,tickLabelWave,root:tw1} ModifyGizmo modifyObject=axes0 property={Clipped,0} AppendToGizmo Surface=root:Packages:Gizmo3DBarChart:fakeWave,name=Param3DBar0 ModifyGizmo ModifyObject=Param3DBar0 property={ srcMode,4} ModifyGizmo ModifyObject=Param3DBar0 property={ surfaceCTab,Rainbow} ModifyGizmo modifyObject=Param3DBar0 property={calcNormals,1} ModifyGizmo setDisplayList=0, object=light0 ModifyGizmo setDisplayList=1, object=Param3DBar0 ModifyGizmo setDisplayList=2, opName=clearColor0, operation=clearColor, data={1,1,0.5,1} ModifyGizmo setDisplayList=3, object=axes0 ModifyGizmo SETQUATERNION={-0.523928,0.179271,0.286850,-0.781729} ModifyGizmo autoscaling=1 ModifyGizmo currentGroupObject="" ModifyGizmo compile ModifyGizmo showInfo ModifyGizmo infoWindow={660,44,1090,346} ModifyGizmo bringToFront ModifyGizmo showAxisCue=1 ModifyGizmo endRecMacro End Window WM3DBarChartPanel() : Panel PauseUpdate; Silent 1 // building window... NewPanel /W=(667,373,971,757) as "3DBar Chart" SetDrawLayer UserBack DrawText 28,24,"Source wave (2D Matrix)" ListBox wm3dBarSourceList,pos={28,28},size={238,154},proc=WaveSelectorListProc ListBox wm3dBarSourceList,userdata(WaveSelectorInfo)= A"!!*'#=(-8`;e9cV@ruX08T&-Y0E;(Qzzz9PJQi=(-8`zzzzzz;e9cH@ // 17APR06 The following function appends a panel that lets you add and modify a 3D bar chart. // The data for the bar chart is expected to be arranged in a 2D wave where entries correspond to // the height of each bar. // The function WM_Make3DBarChartParametricWave() is used to convert a standard 2D wave into a parametric // wave for display in Gizmo. //===================================================================================== Function WM_Append3DBarChart() String oldDF=GetDataFolder(1) try SetDataFolder root: NewDataFolder/O/S Packages NewDataFolder/O/S Gizmo3DBarChart Variable/G row Variable/G col Variable/G baseLine String/G barChartObjectName String/G srcWaveName // WM_Build3DBarChartPanel() catch endtry SetDataFolder oldDF End //===================================================================================== Function WM_Build3DBarChartPanel() MakeListIntoWaveSelector("WM3DBarChartPanel", "wm3dBarSourceList", content=WMWS_Waves, listoptions="DIMS:2",selectionMode=WMWS_SelectionSingle) WS_ClearSelection("WM3DBarChartPanel", "wm3dBarSourceList") End //===================================================================================== // 09APR03 // The following function takes a 2D matrix wave corresponding the the height of bars // and creates a 3D parametric wave for Gizmo. minValue is the value at which the lower // plane is set and should have some reasonable relationship to the distribution of bar heights. Function WM_Make3DBarChartParametricWave(inWave,minValue) wave inWave Variable minValue Variable rows=DimSize(inWave,0) Variable cols=DimSize(inWave,1) Variable newRows=4*rows+2 Variable newCols=4*cols+2 Make/O/N=(newRows,newCols,3) fakeWave=minValue Variable i,j,xVal,yVal // first load the x and y planes fakeWave[][][0]=p<1 ? 0 : trunc((p-1)/2)+1 fakeWave[][][1]=q<1 ? 0 : trunc((q-1)/2)+1 fakeWave[][][0]*=DimDelta(inWave,0) fakeWave[][][1]*=DimDelta(inWave,1) fakeWave[][][0]+=DimOffset(inWave,0) fakeWave[][][1]+=DimOffset(inWave,1) xVal=0 for(i=2;i=0 && row=0 && col