Made some internal changes to improve UI responsiveness when lengthy operations are triggered, including rebuilding logs, updating QSO Information, and updating Summary.
Created a new Preferences pane for Band Maps. Moved the relevant settings from the General pane to the new one, and added settings for three band map callsign fonts: Needed Multiplier, Needed QSO, and Worked Before, and three band map callsign colors: Spotted By Me, Pass or Schedule, and Spotted by DXSpider.
Changed from Bitstream Vera Sans to Monaco, now that the former isn't needed to provide bold and italic variations in the Band Maps. Added FixedWidthFont choice to General preferences with default Monaco. The choice affects most of the fields in the Log window, and the Partials table. You can choose any font, not just fixed-width fonts, but I recommend either Monaco or Menlo. Menlo is a new Apple font in Snow Leopard; it is a derivative of Bitstream Vera Sans with a slashed zero and a few other tweaks, along with italic, bold, and bold-italic.
These CT multi-multi features work between two instances of SkookumLogger on separate computers: Announce (send to DXSpider), Broadcast (receive from DXSpider), Internal Spot, Gab, Partner, Run Frequency, Pass Frequency, Log Qso, Update Qso, Pass Info, Schedule Info. Need to test further in a "real" CT network to confirm that I have the packet messages formatted correctly. May add Notes after revising the SkookumLogger data model.
Tested with the new FTDI drivers for Snow Leopard. Unplugging the Winkeyer USB cable no longer causes a kernel panic on my development machine, so I added more elaborate alerts that are displayed when a USB port is "removed." Thanks W6FB.
Under some circumstances, SkookumLogger would display two Help menus. Fixed, again.
Changing the K3 serial port speed (CONFIG:RS232) after a successful connection caused SkookumLogger to almost always fail subsequent connection attempts. Fixed; thanks W6FB.
Installed Snow Leopard and Xcode 3.2 on my development machines. Sweet :-)
Modified the Helpify python script to use hiutil instead of Help Indexer; the latter presents a UI on Snow Leopard which blocks builds. The modified script may not work on Leopard -- I'm not sure that hiutil exists there. To undo the modification, edit Helpify/English.lproj/SkookumLoggerHelpify.py, find the line containing "hiutil", comment out that line and uncomment the line above it.
Added NSSets to Log to track hashed qsos and multipliers. Added qsoHash and multiplierHash methods to ContestRules and its subclasses. SkookumLogger uses them to massively speed up duplicate and multiplier testing. Removed OBE code that used NSPredicates to do those tasks. Can now rebuild a 7000-QSO ARRL DX log in seconds instead of minutes. This task could also handed off to Grand Central Dispatch (see next item), but I don't think it makes sense to allow modifying a log while it is being rebuilt.
Now use operation queues to avoid blocking the UI while updating Summary and QsoInformation window content. While NSOperationQueue and NSInvocationOperation are promoted as part of Snow Leopard's Grand Central Dispatch, they exist on Leopard as well, so this should Just Work.
Added code signing, to avoid "Do you want the application "SkookumLogger.app" to accept incoming network connections?" alerts when CT networking is on and a default firewall is enabled. The Sign build phase will fail if you don't have a certificate with identity "Willard Myers" -- either delete the build phase or create your own certificate and change the build phase script. See the Apple Code Signing Guide document for how to create a certificate.
Country and check-partial database downloads now also deposit files with appropriate names in /private/tftpboot/, for use by a tftp server when distributing files to CT/DOS machines at KC1XX.
The CtNetworkController singleton looks for multi.cfg in /private/tftpboot, then in the resources directory, to construct structures relating station number to station name.
Created QsoProtocol and used id<QsoProtocol> everywhere relevant. In addition to allowing the compiler to confirm that messages are sent to objects that understand them, this was needed to prevent a type warning caused by sending a setMode message to an unqualified id.
Created CtQso and refactored so that no objects other than CtQso and CtNetworkController know anything about the internals of CT objects and network messages.