From 84993ea6cea26e753b0bbaa808a7170bc73032d7 Mon Sep 17 00:00:00 2001 From: Paul Traina Date: Fri, 21 Aug 2020 17:35:49 -0700 Subject: [PATCH] Import vendor version 1.20.0821 --- package.nw/GridTracker.html | 33 ++- package.nw/data/awards.json | 4 +- package.nw/gt_roster.html | 24 +- package.nw/gt_update.html | 126 +++++----- package.nw/img/award-delete.svg | 57 ++--- package.nw/img/ffma_trophy.png | Bin 819 -> 0 bytes package.nw/img/gma_trophy.png | Bin 839 -> 0 bytes package.nw/img/us48_trophy.png | Bin 0 -> 815 bytes package.nw/lib/adif.js | 2 +- package.nw/lib/defaults.js | 17 +- package.nw/lib/gt.js | 430 ++++++++++++++------------------ package.nw/lib/roster.js | 193 +++++++++----- package.nw/lib/style_roster.css | 36 ++- 13 files changed, 482 insertions(+), 440 deletions(-) delete mode 100644 package.nw/img/ffma_trophy.png delete mode 100644 package.nw/img/gma_trophy.png create mode 100644 package.nw/img/us48_trophy.png diff --git a/package.nw/GridTracker.html b/package.nw/GridTracker.html index a8de738d..96152ddb 100644 --- a/package.nw/GridTracker.html +++ b/package.nw/GridTracker.html @@ -181,7 +181,7 @@
- + + + + + @@ -233,7 +262,7 @@
Map View
Map View Filters
Band @@ -224,6 +224,35 @@
Prop + +
Data
-
Callable Roster
+
Call Roster + Award Tracker
diff --git a/package.nw/data/awards.json b/package.nw/data/awards.json index 55c62898..24dcea7a 100644 --- a/package.nw/data/awards.json +++ b/package.nw/data/awards.json @@ -7511,7 +7511,7 @@ }, "ARRL": { "compiledBy": "N0TTL", - "sponsor": "Amatuer Radio Relay League", + "sponsor": "Amateur Radio Relay League", "website": "https://arrl.org/", "qsl_req": "confirmed", "mixed" : [ "160m", "80m", "40m", "30m", "20m", "17m", "15m", "12m", "10m", "6m", "2m", "1.5m", "70cm" , "23cm"], @@ -7654,7 +7654,7 @@ 291 ], "endorse": [ - "160m", "6m", "2m", "1.5m", "70cm", "23cm" + "Mixed" ], "mode": [ "Mixed", diff --git a/package.nw/gt_roster.html b/package.nw/gt_roster.html index f015d44c..3445b6f9 100644 --- a/package.nw/gt_roster.html +++ b/package.nw/gt_roster.html @@ -1,6 +1,6 @@ -GridTracker : Callable Roster +GridTracker : Call Roster @@ -11,7 +11,7 @@
-
+
@@ -88,24 +88,24 @@
-
-
- +
+
+
- + - + - + - + - + @@ -113,7 +113,7 @@
Wanted
Grid ITU ZoneGrid ITUz
DXCC US StateDXCC State
QRZUS CountyQRZCounty
WPXContinentWPXCont
OAMS
- +
@@ -121,7 +121,7 @@ - + diff --git a/package.nw/gt_update.html b/package.nw/gt_update.html index 0a366ab4..6a99bd05 100644 --- a/package.nw/gt_update.html +++ b/package.nw/gt_update.html @@ -1,71 +1,79 @@ -
+
-[v1.20.0819] August 19th, 2020
+[v1.20.0821] August 21st, 2020
 
-Callable Roster:
+GridTracker Main Window:
+	Update:
+		"Map View" renamed "Map View Filters"
+		"Callable Roster" renamed "Call Roster + Award Tracker"
+		Minimum width now 200 pixels (you can hide the map now)
+		
 	New:
-		"Window Always On Top" option in Settings -> "Call Roster"
-			default disabled
+		"Prop" added to "Map View Filters"
+			Propagation Mode for filtering Logbook data *only* 
+				Live data view is unaffected
 			
-		Award Tracker!
-			Click on "Logbook" and select "Award Tracker"
-			Click "Add Awards" and select your sponsor and award name
-			
-			Hover over the award indicator to get quick-stats
-			quick-stats is a place holder until I get the stats tab built
-			
-			Award Tracking is 'best guess'. confirm with your award sponsor the
-			validity of your logbooks, GridTracker will try its best but could
-			be wrong
-			
-			Award tally may be incorrect or incomplete, we are working on it
-			
-			Not every award is available yet for tracking
-			
-			Special thanks to NR0Q and KB2YSI for compiling awards definitions
-			
-			At this time IOTA is processed but not a trackable field (yet)
-		
-		US County (Wanted , Column, Right-Click Menu)
-			If US callsign database is enabled, best guess on stations county
-		
-		Continent (Wanted , Column, Right-Click Menu)
-			Why did I not have this sooner?!
-	
-		Changed "No Round-up and "Only Round-up" to "No" and "Only" Decode Message
-			If "No" or "Only" are checked, then the decoded message is checked
-			You can enter any thing you want (Grid, Callsign, CQ target)
-			The fields also support regex, but not required
-			
-		Compact Mode - Great for Contesting!!!
-			Right-click menu, "Compact Mode" only shows callsigns
-			The order is the order of the last column sorted in "Roster Mode"
-			I *will* be improving this in future releases!
-		
-		Text Sizing
-			Ctrl-0(zero) resets text size to default value
-				
 	Update:
-		"Reference" renamed "Logbook" with "Logbook Reference" tooltip
-		Added Spot report to tooltip in Spot column
-	
-Logbook Reference:
+		Removed "FFMA" and "GMA" award layers and replaced with "US48" layer
+			To view your Fred Fish Memorial "FFMA" Award:
+				Select "US48" hotkey (8) then;
+					Set your Band filter to "6m"
+			
+			To view your AMSAT GridMaster "GMA" Award:
+				Select "US48" hotkey (8) then;
+					Set your Band & Mode filters to "Mixed"
+					Set your Prop filter to "Satellite"
+		
+Call Roster:
+	Update:
+		Callable Roster renamed to "Call Roster"
+		
 	Fixed:
-		Turkey Region 1 now in Europe
+		Award Tracking:
+			"Wanted" box remains as it's needed
+			Fix bad filtering flags
+			
+		When enabling "Wanted" entities; right-click menu now tracks correctly 
+		
+		Issue with New/Unconfirmed callsigns not showing up at all
+		
+		Return of the "strikeout" on callsigns that have been confirmed
+			by popular demand
+			
+	Compact Mode:
+		Sorted by "Age" for now 
+			(Will add a right-click menu to select sort type later on)
+			
+		Added "DXCC" under "Callsign"
+		
+		Tooltip(mouse-over) added with decode details
+			(Will add Worked/Confirmed status by band/mode later on)
+			
+				
+PSK-Spots:
+	Fixed: 
+		Memory issue when 1500 spots in 24 hours
+			Thanks to mister "I get out" NR0Q for finding this one
+			
+Logging:
+	Local Files(s)
+		Details:
+			Filename now has a tooltip with the full file path
+		
+		
+		
+		
+		
+		
+		
+		
 		
-Lookups:
-	Update:
-		Display previous worked and confirmed by band
-	
-Legend:
-	Update:
-		Button moved from map settings back to the button panel
 
 
 Thank you for reading the entire update! 
@@ -79,10 +87,14 @@ Thank you for reading the entire update!
 
 
 
+
 Mention "phone-sofa" in any forum I read and I'll send you a GridTracker token
 to the address associated with your callsign lookup
 
 Please don't mention this easter-egg to anyone. I want to see who reads the update
-
+To the 21 of you out of 650-ish, who downloaded and read the update in v1.20.0819: + I salute you! And I'll be shipping out tokens when I get a chance! Thank you! + +
diff --git a/package.nw/img/award-delete.svg b/package.nw/img/award-delete.svg index 4dbd31ee..ba04aaed 100644 --- a/package.nw/img/award-delete.svg +++ b/package.nw/img/award-delete.svg @@ -1,46 +1,23 @@ - - - - - - - - - - - - - - - - - + viewBox="0 0 483 483" style="enable-background:new 0 0 483 483;" xml:space="preserve"> - - + + + + + + + + + - - - - - diff --git a/package.nw/img/ffma_trophy.png b/package.nw/img/ffma_trophy.png deleted file mode 100644 index 6e4542702929cb8c03625454cfbd3857ee65fc1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmV-31I+x1P) z&1(}u6u{T7>P1m6DtM^kL1ICr6w!XTJF|xV2ZB^V5iDNnUts+MauzG-MRJKCRB!eW z1-+FN)6MQ|*N+}NRJ0ngHO*#|^v!DT}kk?uB# zG}0dOE(}E&HQ>2HQB1mupLtgMF2wS&`2-HTeN-@|>1ZbffqK%sER#HpT^Y{^X$@ME7Ll)0FN0kVdd1_KK6X+_d(6%XI}PL1 zUVwPPmzbht2IyMq#=jKBeZQ59haoZZK7cNrr82sfDg^a%V;LVY2_9+b@&fDg(k)Yy zhUr>r5VRv!%VURv-`~#zXgW|S_kJyj2dQo<-q*;)iT_rCit?N4_%W)RIDn-}Hv%62 zq#eg+P)^+2;0eai5>*8sXTpnqxpb2_oqQ9xErip{JQoNqg^9TmwYRFMra&JYY5D!5g zWuXVmGa1ftH!1HOI63hQvx8?GS*P3v@C=4r%SxWXf7cj*_kP=u&a`#B8V1m*FV80j zpyM^$C^hbRNo5>>59a9l`iTIzI<_%aRs{p^I{;iTy6)<*=!E2ezZjMSUii3><{c;K z=AdtX0=&?<4>QWcB$NYq&JFJ>1K|v^@H?L=@SFrdE?5x(k8|C722@WH0GtuNMBTh# xIT9>M+io%d_MeZc7gis@Ko5Dj55UT`x(!pm1}6Cf{sI61002ovPDHLkV1l+aeTV=6 diff --git a/package.nw/img/gma_trophy.png b/package.nw/img/gma_trophy.png deleted file mode 100644 index 1ce4a0b0fc1243a405f65c08c6d439f0295f710e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P){B0?Z%O2_2iVL7lo{^!TE0F;(fkIq^&B)Ns_QwWbQ1RNl z+I7mH=wV!gi#gOcuZSm2ji^-s;??LW$m6fJ5=A`M+bgWLbbO~Kw98Qd{87=Np&?-{ zlYMXN(okPy0ER9-0wGJ6pQh7jjY;wCxDhC3QAb(9-Tr@fM`QqH74`TYlMf~(TI`(b z4CVZQ^^o*%p6}R;U!m2-N8mh)+W$tB9drR$DdMh6`HTi}?$$e<0$VMs7nmQR; z)bOR@w6JbPhLNG6{%9U!JwLK%qmaa61L|HA3u>{3tDoK;tSv=ypRY8xFD)*Cv0P}^d|!*;IQ5;s0}7j5|R;>1>#j*K^Sl&*uY2WN?b05508$+nVu z=BTBUC;prlFPCy%op6>I2$+bUpC8!5=ijRXHgwpXasA^M+6=sjcwfjK+x4$5uoNlt z<8|i_ryf>zv5V;<=kYI?hz>2(jBc6?0Cv4{({9qDatVl~<)^o=Noq0xRPj6q;2paw zW`Hb8X8nDXOQZ&P0O9ul$|ceT5Z3AOkBDfRShb>@i%ZOyfRK%2J>^!2HP6 zhd)yzn+gUHgf1MwVD;MpQZ-NyfOE{PlZG_#jC|e#YQQ$)6`p-g26zCzLAQuQA{|x( zd}Me4?s+xO9%$z*xTAdHYAvV>ngQVCIRL@l@=*~&lr)zv zRRk>})!ihMZr4xrVAa~ib=z)|cAdA`Y$j=HC(EV-50aUA@BQBQNRr^PsdBqAp;qG1 zkJo6s)U4GAfT;}H*|0)~;_vh0c&<(+cH#mE@H4VBbVV2dV<^N`xExu=+1}UyEGl1{ z(K}9A6g`Tou$)CbGn#zTHi+&5kgtk|U>tv|3en_q-QCh^$HezI*Di9n+# z@qVbvGEk2&0LxS!1CwK_&r&J0#-{jgTn`j8sBKQeo&JAkn=pVm9d-E@laDqfM(miI zJJB93# z-O>uImf>M(y=CHue2EPVRAb$exbl(vXv5c+C$_S1^w*n?)^QN_;4D!PVCCc}*;dle z9Cb|c)bI21^YRvQ>QL0#LXM2_yznm!00g-LxjT7fKNDi|O1OIg z0G@IHx9DFGKwkiLlqVUWN{)Q4lFJ(bz~%S66bArrnMfGFaEr({vQBdQ?m0q!oB tgj^1U1V+Y~D=nTPy%QON2>G5t{{UMv=4PEp4VC}^002ovPDHLkV1k9qf;IpE literal 0 HcmV?d00001 diff --git a/package.nw/lib/adif.js b/package.nw/lib/adif.js index 5600501f..c01daed3 100644 --- a/package.nw/lib/adif.js +++ b/package.nw/lib/adif.js @@ -1177,7 +1177,7 @@ function setAdifStartup(checkbox) worker += "
Min dB
"; for ( var i in g_startupLogs ) { - worker += ""; + worker += ""; } worker += "
"+ g_startupLogs[i].name + "
"+ g_startupLogs[i].name + "
"; } diff --git a/package.nw/lib/defaults.js b/package.nw/lib/defaults.js index 79d77143..8311d6ea 100644 --- a/package.nw/lib/defaults.js +++ b/package.nw/lib/defaults.js @@ -7,9 +7,11 @@ var validSettings = "alertSettings", "appSettings", "audioSettings", + "awardTracker", + "bandActivity", + "blockedCQ", "blockedCalls", "blockedDxcc", - "blockedCQ", "callsignLookups", "classicAlerts", "classicAlertsVersion", @@ -19,15 +21,12 @@ var validSettings = "mapMemory", "mapSettings", "msgSettings", - "receptionReports", "receptionSettings", "rosterSettings", "savedAlerts", "speechSettings", "startupLogs", "trustedQslSettings", - "bandActivity", - "awardTracker" ]; var def_appSettings = @@ -46,6 +45,7 @@ var def_appSettings = "gtBandFilter" : "auto", "gtFlagImgSrc" : 0, "gtModeFilter" : "auto", + "gtPropFilter" : "mixed", "gtMsgEnable" : true, "gtShareEnable" : true, "heatEnabled" : 0, @@ -185,6 +185,7 @@ var def_msgSettings = "msgAwayText" : "I am away from the shack at the moment" }; + var def_receptionSettings = { "lastSequenceNumber" : "0", // Treat as a string, it's friggin big @@ -240,11 +241,11 @@ var def_trustedQslSettings = }; var def_callsignLookups = { - "lotwUseEnable" : false, - "lotwWeeklyEnable" : false, + "lotwUseEnable" : true, + "lotwWeeklyEnable" : true, "lotwLastUpdate" : 0, - "eqslUseEnable" : false, - "eqslWeeklyEnable" : false, + "eqslUseEnable" : true, + "eqslWeeklyEnable" : true, "eqslLastUpdate" : 0, "ulsUseEnable" : true, "ulsWeeklyEnable" : true, diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index d016a3fd..105a4c29 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -1,8 +1,8 @@ // GridTracker ©2020 N0TTL var gtComment1 = "GridTracker is not open source, you may not change, modify or 'borrow' code for your needs that is redistributed in any form without first asking and receiving permission from N0TTL *and* N2VFL"; var gtComment2 = "Third party libraries and functions used are seperated to third-party.js or their respective lib .js files, the GT close-source directive does not apply to these files of course"; -var gtVersion = 1200819; -var gtBeta = "r4"; +var gtVersion = 1200821; +var gtBeta = ""; var g_startVersion = 0; @@ -95,8 +95,6 @@ function loadAllSettings() g_callsignLookups = loadDefaultsAndMerge("callsignLookups", def_callsignLookups); g_bandActivity = loadDefaultsAndMerge("bandActivity", def_bandActivity); - g_receptionReports = loadObjectIfExists("receptionReports"); - g_startupLogs = loadArrayIfExists("startupLogs"); g_mapMemory = loadArrayIfExists("mapMemory"); @@ -111,7 +109,7 @@ function loadAllSettings() } g_appSettings.mapMemory = JSON.stringify(g_mapMemory); } - + } loadAllSettings(); @@ -205,6 +203,8 @@ function saveAndCloseApp() { g_closing = true; + saveReceptionReports(); + try { var data = {}; @@ -218,6 +218,8 @@ function saveAndCloseApp() data.version = gtVersion; fs.writeFileSync(g_jsonDir + "internal_qso.json", JSON.stringify(data) ); + + } catch (e) { @@ -280,11 +282,12 @@ function clearAndReload() { { win.hide(); - win.setMinimumSize(400, 600); + win.on('close', function () { saveAndCloseApp(); }); win.show(); + win.setMinimumSize(200, 600); } @@ -431,8 +434,8 @@ var g_countyData = {}; var g_zipToCounty = {}; var g_stateToCounty = {}; var g_cntyToCounty = {}; -var g_ffmaData = {}; -var g_gmaaData = {}; +var g_us48Data = {}; + var g_startupFunctions = Array(); @@ -531,19 +534,19 @@ g_trophyImageArray[3] = "./img/wac_trophy.png"; g_trophyImageArray[4] = "./img/was_trophy.png"; g_trophyImageArray[5] = "./img/dxcc_trophy.png"; g_trophyImageArray[6] = "./img/usc_trophy.png"; -g_trophyImageArray[7] = "./img/ffma_trophy.png"; -g_trophyImageArray[8] = "./img/gma_trophy.png"; +g_trophyImageArray[7] = "./img/us48_trophy.png"; + var g_viewInfo = {}; g_viewInfo[0] = ["g_qsoGrids","Grids",0,0,0]; g_viewInfo[1] = ["g_cqZones","CQ Zones",0,0,40]; g_viewInfo[2] = ["g_ituZones","ITU Zones",0,0,90]; g_viewInfo[3] = ["g_wacZones","Continents",0,0,7]; -g_viewInfo[4] = ["g_wasZones","U.S. States",0,0,50]; +g_viewInfo[4] = ["g_wasZones","US States",0,0,50]; g_viewInfo[5] = ["g_worldGeoData","DXCCs",0,0,340]; -g_viewInfo[6] = ["g_countyData", "U.S. Counties",0,0,3220]; -g_viewInfo[7] = ["g_ffmaData", "Fred Fish Memorial Award",0,0,488]; -g_viewInfo[8] = ["g_gmaaData", " AMSAT GridMaster Award",0,0,488]; +g_viewInfo[6] = ["g_countyData", "US Counties",0,0,3220]; +g_viewInfo[7] = ["g_us48Data", "US Continental Grids",0,0,488]; + var g_spotImageArray = Array(); g_spotImageArray[0] = "./img/psk_spots_off.png"; @@ -580,6 +583,13 @@ function gtModeFilterChanged(selector) { redrawSpots(); } +function gtPropFilterChanged(selector) { + g_appSettings.gtPropFilter = selector.value; + + redrawGrids(); + redrawSpots(); +} + function setBandAndModeToAuto() { g_appSettings.gtModeFilter = g_appSettings.gtBandFilter = gtBandFilter.value = gtModeFilter.value = "auto"; @@ -1206,7 +1216,7 @@ function addDeDx(finalGrid, finalDXcall, cq, cqdx, locked, finalDEcall, finalRST if ( (g_appSettings.gtBandFilter.length == 0 || (g_appSettings.gtBandFilter == 'auto' ? myBand == band : g_appSettings.gtBandFilter == band)) && - (validateMapMode(mode))) { + (validateMapMode(mode)) && validatePropMode(finalPropMode)) { details.rect = qthToQsoBox(finalGrid, hash, cq, cqdx, locked, finalDEcall, worked, didConfirm, band, wspr); } @@ -1618,9 +1628,9 @@ function createSpotTipTable(toolElement) { var now = timeNowSec(); var myTooltip = document.getElementById("myTooltip"); var worker = ""; - if (toolElement.spot in g_receptionReports) { + if (toolElement.spot in g_receptionReports.spots) { g_layerSources["psk-hop"].clear(); - var report = g_receptionReports[toolElement.spot]; + var report = g_receptionReports.spots[toolElement.spot]; var LL = squareToLatLongAll(myRawGrid); var Lat = LL.la2 - ((LL.la2 - LL.la1) / 2); @@ -2289,7 +2299,7 @@ function registerHotKeys() { registerHotKey("KeyG", toggleGtMap); registerHotKey("KeyH", toggleHeatSpots); registerHotKey("KeyI", showRootInfoBox); - registerHotKey("KeyJ", setTrophyOverlay, 8); + //registerHotKey("KeyJ", setTrophyOverlay, 8); registerHotKey("KeyK", makeScreenshots); registerHotKey("KeyL", adifLoadDialog); registerHotKey("KeyM", toggleAlertMute); @@ -2381,7 +2391,7 @@ var g_currentOverlay = 0; function cycleTrophyOverlay() { g_currentOverlay++; - g_currentOverlay %= 9; + g_currentOverlay %= 8; setTrophyOverlay(g_currentOverlay); } @@ -2593,7 +2603,7 @@ function setTrophyOverlay(which) { } } if (which == 7) { - for (key in g_ffmaData) + for (key in g_us48Data) { var LL = squareToLatLong(key); var bounds = [ @@ -2604,48 +2614,22 @@ function setTrophyOverlay(which) { var boxColor = "#FF000015" var borderColor = "#0000FFFF"; var borderWeight = 0.1; - if (g_ffmaData[key].confirmed) + if (g_us48Data[key].confirmed) { boxColor = '#00FF0066'; borderWeight = 0.2; } - else if (g_ffmaData[key].worked) + else if (g_us48Data[key].worked) { boxColor = '#FFFF0066'; borderWeight = 0.2; } - g_currentShapes[key] = gridFeature(key, rectangle(bounds), "ffma", boxColor, borderColor, borderWeight); + g_currentShapes[key] = gridFeature(key, rectangle(bounds), "us48", boxColor, borderColor, borderWeight); g_layerSources["award"].addFeature(g_currentShapes[key]); } } - if (which == 8) { - for (key in g_gmaaData) - { - var LL = squareToLatLong(key); - var bounds = [ - [LL.lo1, LL.la1], - [LL.lo2, LL.la2] - ]; - - var boxColor = "#FF000020" - var borderColor = "#0000FFFF"; - var borderWeight = 0.1; - if (g_gmaaData[key].confirmed) - { - boxColor = '#00FF0066'; - borderWeight = 0.2; - } - else if (g_gmaaData[key].worked) - { - boxColor = '#FFFF0066'; - borderWeight = 0.2; - } - g_currentShapes[key] = gridFeature(key, rectangle(bounds), "gmaa", boxColor, borderColor, borderWeight); - g_layerSources["award"].addFeature(g_currentShapes[key]); - } - } updateSpotView(true); } @@ -2763,28 +2747,9 @@ function trophyOver(feature) { infoObject = g_countyData[name]; name = infoObject.geo.properties.n + ", " + infoObject.geo.properties.st; } - if (key == "ffma") { - trophy = "Fred Fish Memorial Award"; - infoObject = g_ffmaData[feature.get('grid')]; - name = feature.get('grid'); - - if (name in g_gridToState) { - zone = ""; - for (var x = 0; x < g_gridToDXCC[name].length; x++) { - if (name in g_gridToState) { - for (var y = 0; y < g_gridToState[name].length; y++) { - if (g_gridToDXCC[name][x] == g_StateData[g_gridToState[name][y]].dxcc && g_gridToDXCC[name][x] == 291) { - zone += g_StateData[g_gridToState[name][y]].name + ", "; - } - } - } - } - zone = zone.substr(0,zone.length-2);7 - } - } - if (key == "gmaa") { - trophy = "AMSAT GridMaster Award"; - infoObject = g_gmaaData[feature.get('grid')]; + if (key == "us48") { + trophy = "US Continental Grids"; + infoObject = g_us48Data[feature.get('grid')]; name = feature.get('grid'); if (name in g_gridToState) { @@ -2802,6 +2767,7 @@ function trophyOver(feature) { } } + var worker = ""; worker += ""; @@ -3031,7 +2997,7 @@ function mouseOverDataItem(mouseEvent, fromHover) { var top = 0; var noRoomLeft = false; var noRoomRight = false; - if (typeof mouseEvent.spot != "undefined" && g_receptionReports[mouseEvent.spot].bearing > 180) + if (typeof mouseEvent.spot != "undefined" && g_receptionReports.spots[mouseEvent.spot].bearing > 180) noRoomRight = true; myTooltip.style.left = (getMouseX() + 15) + 'px'; top = parseInt((getMouseY() - 20 - ((callListLength / 2) * 25))); @@ -3061,7 +3027,7 @@ function mouseMoveDataItem(mouseEvent) { var top = 0; var noRoomLeft = false; var noRoomRight = false; - if (typeof mouseEvent.spot != "undefined" && g_receptionReports[mouseEvent.spot].bearing > 180) + if (typeof mouseEvent.spot != "undefined" && g_receptionReports.spots[mouseEvent.spot].bearing > 180) noRoomRight = true; myTooltip.style.left = (getMouseX() + 15) + 'px'; top = Number(myTooltip.style.top); @@ -4010,22 +3976,15 @@ function clearQsoGrids() { g_countyData[key].worked_modes = {}; g_countyData[key].confirmed_modes = {}; } - for (var key in g_ffmaData) { - g_ffmaData[key].worked = false; - g_ffmaData[key].confirmed = false; - g_ffmaData[key].worked_bands = {}; - g_ffmaData[key].confirmed_bands = {}; - g_ffmaData[key].worked_modes = {}; - g_ffmaData[key].confirmed_modes = {}; - } - for (var key in g_gmaaData) { - g_gmaaData[key].worked = false; - g_gmaaData[key].confirmed = false; - g_gmaaData[key].worked_bands = {}; - g_gmaaData[key].confirmed_bands = {}; - g_gmaaData[key].worked_modes = {}; - g_gmaaData[key].confirmed_modes = {}; + for (var key in g_us48Data) { + g_us48Data[key].worked = false; + g_us48Data[key].confirmed = false; + g_us48Data[key].worked_bands = {}; + g_us48Data[key].confirmed_bands = {}; + g_us48Data[key].worked_modes = {}; + g_us48Data[key].confirmed_modes = {}; } + } function clearCalls() { @@ -5179,10 +5138,10 @@ function initiateQso(thisCall) { function spotLookupAndSetCall( spot ) { - var call = g_receptionReports[spot].call; - var grid = g_receptionReports[spot].grid; - var band = g_receptionReports[spot].band; - var mode = g_receptionReports[spot].mode; + var call = g_receptionReports.spots[spot].call; + var grid = g_receptionReports.spots[spot].grid; + var band = g_receptionReports.spots[spot].band; + var mode = g_receptionReports.spots[spot].mode; for ( var instance in g_instances ) { if ( g_instances[instance].valid && g_instances[instance].status.Band == band && g_instances[instance].status.MO == mode ) @@ -8601,6 +8560,14 @@ function createStatTable(title, infoObject, awardName) return wc1Table; } +function validatePropMode( propMode ) +{ + if ( g_appSettings.gtPropFilter == "mixed" ) + return true; + + return (g_appSettings.gtPropFilter == propMode); +} + function validateMapMode( mode ) { if ( g_appSettings.gtModeFilter.length == 0 ) @@ -8649,118 +8616,10 @@ function redrawGrids() { if ( didConfirm ) g_QSLcount++; - if (finalGrid.length > 0 ) - { - var gridCheck = finalGrid.substr(0, 4); - if ( band == "6m" ) - { - if ( gridCheck in g_ffmaData ) - { - if ( g_ffmaData[gridCheck].worked == false ) - { - g_ffmaData[gridCheck].worked = worked; - } - if (worked) - { - g_ffmaData[gridCheck].worked_bands["6m"] = ~~g_ffmaData[gridCheck].worked_bands["6m"] + 1; - g_ffmaData[gridCheck].worked_modes[mode] = ~~g_ffmaData[gridCheck].worked_modes[mode] + 1; - } - if ( g_ffmaData[gridCheck].confirmed == false ) - { - g_ffmaData[gridCheck].confirmed = didConfirm; - } - if (didConfirm) - { - g_ffmaData[gridCheck].confirmed_bands["6m"] = ~~g_ffmaData[gridCheck].confirmed_bands["6m"] + 1; - g_ffmaData[gridCheck].confirmed_modes[mode] = ~~g_ffmaData[gridCheck].confirmed_modes[mode] + 1; - } - - } - for ( var key in g_QSOhash[i].vucc_grids ) - { - var grid = g_QSOhash[i].vucc_grids[key].substr(0, 4); - if ( grid in g_ffmaData ) - { - if ( g_ffmaData[grid].worked == false ) - { - g_ffmaData[grid].worked = worked; - } - if (worked) - { - g_ffmaData[grid].worked_bands["6m"] = ~~g_ffmaData[grid].worked_bands["6m"] + 1; - g_ffmaData[grid].worked_modes[mode] = ~~g_ffmaData[grid].worked_modes[mode] + 1; - } - if ( g_ffmaData[grid].confirmed == false ) - { - g_ffmaData[grid].confirmed = didConfirm; - } - if (didConfirm) - { - g_ffmaData[grid].confirmed_bands["6m"] = ~~g_ffmaData[grid].confirmed_bands["6m"] + 1; - g_ffmaData[grid].confirmed_modes[mode] = ~~g_ffmaData[grid].confirmed_modes[mode] + 1; - } - - } - } - } - if ( g_QSOhash[i].propMode == "SAT" ) - { - if ( gridCheck in g_gmaaData ) - { - if ( g_gmaaData[gridCheck].worked == false ) - { - g_gmaaData[gridCheck].worked = worked; - } - if (worked) - { - g_gmaaData[gridCheck].worked_bands[band] = ~~g_gmaaData[gridCheck].worked_bands[band] + 1; - g_gmaaData[gridCheck].worked_modes[mode] = ~~g_gmaaData[gridCheck].worked_modes[mode] + 1; - } - if ( g_gmaaData[gridCheck].confirmed == false ) - { - g_gmaaData[gridCheck].confirmed = didConfirm; - } - if (didConfirm) - { - g_gmaaData[gridCheck].confirmed_bands[band] = ~~g_gmaaData[gridCheck].confirmed_bands[band] + 1; - g_gmaaData[gridCheck].confirmed_modes[mode] = ~~g_gmaaData[gridCheck].confirmed_modes[mode] + 1; - } - - } - for ( var key in g_QSOhash[i].vucc_grids ) - { - var grid = g_QSOhash[i].vucc_grids[key].substr(0, 4); - if ( grid in g_gmaaData ) - { - if ( g_gmaaData[grid].worked == false ) - { - g_gmaaData[grid].worked = worked; - } - if (worked) - { - g_gmaaData[grid].worked_bands[band] = ~~g_gmaaData[grid].worked_bands[band] + 1; - g_gmaaData[grid].worked_modes[mode] = ~~g_gmaaData[grid].worked_modes[mode] + 1; - } - if ( g_gmaaData[grid].confirmed == false ) - { - g_gmaaData[grid].confirmed = didConfirm; - } - if (didConfirm) - { - g_gmaaData[grid].confirmed_bands[band] = ~~g_gmaaData[grid].confirmed_bands[band] + 1; - g_gmaaData[grid].confirmed_modes[mode] = ~~g_gmaaData[grid].confirmed_modes[mode] + 1; - } - - } - } - } - } - - if ((g_appSettings.gtBandFilter.length == 0 || (g_appSettings.gtBandFilter == 'auto' ? myBand == g_QSOhash[i].band : g_appSettings.gtBandFilter == g_QSOhash[i].band)) && - validateMapMode(g_QSOhash[i].mode) ) + validateMapMode(g_QSOhash[i].mode) && validatePropMode(g_QSOhash[i].propMode)) { @@ -8871,6 +8730,29 @@ function redrawGrids() { { var gridCheck = finalGrid.substr(0, 4); + if ( finalDxcc == 291 && gridCheck in g_us48Data ) + { + if ( g_us48Data[gridCheck].worked == false ) + { + g_us48Data[gridCheck].worked = worked; + } + if (worked) + { + g_us48Data[gridCheck].worked_bands[band] = ~~g_us48Data[gridCheck].worked_bands[band] + 1; + g_us48Data[gridCheck].worked_modes[mode] = ~~g_us48Data[gridCheck].worked_modes[mode] + 1; + } + if ( g_us48Data[gridCheck].confirmed == false ) + { + g_us48Data[gridCheck].confirmed = didConfirm; + } + if (didConfirm) + { + g_us48Data[gridCheck].confirmed_bands[band] = ~~g_us48Data[gridCheck].confirmed_bands[band] + 1; + g_us48Data[gridCheck].confirmed_modes[mode] = ~~g_us48Data[gridCheck].confirmed_modes[mode] + 1; + } + + } + if (cqz.length > 0) { if (g_cqZones[cqz].worked == false) { @@ -8942,6 +8824,36 @@ function redrawGrids() { } } } + + if ( finalDxcc == 291 ) + { + for ( var key in g_QSOhash[i].vucc_grids ) + { + var grid = g_QSOhash[i].vucc_grids[key].substr(0, 4); + if ( grid in g_us48Data ) + { + if ( g_us48Data[grid].worked == false ) + { + g_us48Data[grid].worked = worked; + } + if (worked) + { + g_us48Data[grid].worked_bands[band] = ~~g_us48Data[grid].worked_bands[band] + 1; + g_us48Data[grid].worked_modes[mode] = ~~g_us48Data[grid].worked_modes[mode] + 1; + } + if ( g_us48Data[grid].confirmed == false ) + { + g_us48Data[grid].confirmed = didConfirm; + } + if (didConfirm) + { + g_us48Data[grid].confirmed_bands[band] = ~~g_us48Data[grid].confirmed_bands[band] + 1; + g_us48Data[grid].confirmed_modes[mode] = ~~g_us48Data[grid].confirmed_modes[mode] + 1; + } + + } + } + } } } @@ -10034,23 +9946,14 @@ function loadMaidenHeadData() { { var sqr = g_worldGeoData[key].mh[mh]; - g_ffmaData[sqr] = {}; - g_ffmaData[sqr].name = sqr; - g_ffmaData[sqr].worked = false; - g_ffmaData[sqr].confirmed = false; - g_ffmaData[sqr].worked_bands = {}; - g_ffmaData[sqr].confirmed_bands = {}; - g_ffmaData[sqr].worked_modes = {}; - g_ffmaData[sqr].confirmed_modes = {}; - - g_gmaaData[sqr] = {}; - g_gmaaData[sqr].name = sqr; - g_gmaaData[sqr].worked = false; - g_gmaaData[sqr].confirmed = false; - g_gmaaData[sqr].worked_bands = {}; - g_gmaaData[sqr].confirmed_bands = {}; - g_gmaaData[sqr].worked_modes = {}; - g_gmaaData[sqr].confirmed_modes = {}; + g_us48Data[sqr] = {}; + g_us48Data[sqr].name = sqr; + g_us48Data[sqr].worked = false; + g_us48Data[sqr].confirmed = false; + g_us48Data[sqr].worked_bands = {}; + g_us48Data[sqr].confirmed_bands = {}; + g_us48Data[sqr].worked_modes = {}; + g_us48Data[sqr].confirmed_modes = {}; } } @@ -10846,6 +10749,7 @@ function setPins() { function loadViewSettings() { gtBandFilter.value = g_appSettings.gtBandFilter; gtModeFilter.value = g_appSettings.gtModeFilter; + gtPropFilter.value = g_appSettings.gtPropFilter; distanceUnit.value = g_appSettings.distanceUnit; N1MMIpInput.value = g_N1MMSettings.ip; N1MMPortInput.value = g_N1MMSettings.port; @@ -11204,11 +11108,11 @@ function init() documentsDiv.style.display = "none"; startupDiv.style.display = "block"; startupStatusDiv.innerHTML = "Starting..."; - setTimeout(startupEngine, 50); openStatsWindow(false); openLookupWindow(false); openBaWindow(false); openCallRosterWindow(false); + setTimeout(startupEngine, 10); } } @@ -11218,7 +11122,7 @@ function startupEngine() var funcInfo = g_startupTable.shift(); funcInfo[0](); startupStatusDiv.innerHTML = funcInfo[1]; - setTimeout(startupEngine, 50); + setTimeout(startupEngine, 10); } else { startupStatusDiv.innerHTML = "Completed"; startupAdifLoadCheck(); @@ -12778,10 +12682,12 @@ function mediaCheck() { delete data; fs.unlinkSync(g_jsonDir + "internal_qso.json"); } + loadReceptionReports(); } catch (e) { } + return true; } @@ -12800,6 +12706,49 @@ function setRosterSpot( enabled ) g_rosterSpot = enabled; } +function saveReceptionReports() +{ + try { + fs.writeFileSync(g_jsonDir + "spots.json", JSON.stringify(g_receptionReports) ); + } + catch (e) + { + } +} + +function loadReceptionReports() +{ + + try { + var clear = true; + if (fs.existsSync(g_jsonDir + "spots.json") ) + { + g_receptionReports = JSON.parse(fs.readFileSync(g_jsonDir + "spots.json")); + if ( timeNowSec() - g_receptionReports.lastDownloadTimeSec <= 86400 ) + clear = false; + } + + if ( clear == true ) + { + g_receptionReports = + { + "lastDownloadTimeSec" : 0, + "lastSequenceNumber" : "0", + "spots" : {} + }; + } + } + catch (e) + { + g_receptionReports = + { + "lastDownloadTimeSec" : 0, + "lastSequenceNumber" : "0", + "spots" : {} + }; + } +} + function pskSpotCheck(timeSec) { if (g_mapSettings.offlineMode == true) return; @@ -12807,28 +12756,27 @@ function pskSpotCheck(timeSec) { if (myDEcall == null || myDEcall == "NOCALL" || myDEcall == "") return; - if (timeSec - g_receptionSettings.lastDownloadTimeSec > 120 && (g_spotsEnabled || g_rosterSpot) ) { - g_receptionSettings.lastDownloadTimeSec = timeSec; + if (timeSec - g_receptionReports.lastDownloadTimeSec > 120 && (g_spotsEnabled || g_rosterSpot) ) { + g_receptionReports.lastDownloadTimeSec = timeSec; localStorage.receptionSettings = JSON.stringify(g_receptionSettings); spotRefreshDiv.innerHTML = "..refreshing.."; - getBuffer("https://retrieve.pskreporter.info/query?rronly=1&lastseqno=" + g_receptionSettings.lastSequenceNumber + "&senderCallsign=" + encodeURIComponent(myRawCall) + "&appcontact=" + encodeURIComponent("tag.loomis@gmail.com"), + getBuffer("https://retrieve.pskreporter.info/query?rronly=1&lastseqno=" + g_receptionReports.lastSequenceNumber + "&senderCallsign=" + encodeURIComponent(myRawCall) + "&appcontact=" + encodeURIComponent("tag.loomis@gmail.com"), pskSpotResults, null, "https", 443); } else if (g_spotsEnabled) { - spotRefreshDiv.innerHTML = "Refresh: " + Number(120 - (timeSec - g_receptionSettings.lastDownloadTimeSec)).toDHMS(); + spotRefreshDiv.innerHTML = "Refresh: " + Number(120 - (timeSec - g_receptionReports.lastDownloadTimeSec)).toDHMS(); } } function pskSpotResults(buffer, flag) { - var shouldSave = false; var oParser = new DOMParser(); var oDOM = oParser.parseFromString(buffer, "text/xml"); var result = ""; if (oDOM != null) { var json = XML2jsobj(oDOM.documentElement); if (typeof json.lastSequenceNumber != "undefined") { - g_receptionSettings.lastSequenceNumber = json.lastSequenceNumber.value; + g_receptionReports.lastSequenceNumber = json.lastSequenceNumber.value; if (typeof json.receptionReport != "undefined") { for (var key in json.receptionReport) { @@ -12840,20 +12788,20 @@ function pskSpotResults(buffer, flag) { var band = Number(parseInt(json.receptionReport[key].frequency) / 1000000).formatBand(); var hash = call + mode + band + grid.substr(0,4); - if (hash in g_receptionReports) { - report = g_receptionReports[hash]; + if (hash in g_receptionReports.spots) { + report = g_receptionReports.spots[hash]; if (parseInt(json.receptionReport[key].flowStartSeconds) < report.when) continue; } else { - report = g_receptionReports[hash] = {}; + report = g_receptionReports.spots[hash] = {}; report.call = call; report.band = band; report.grid = grid; report.mode = mode; } - if (typeof json.receptionReport[key].receiverDXCCCode != "undefined") - report.dxcc = callsignToDxcc(json.receptionReport[key].receiverDXCCCode); + if (typeof json.receptionReport[key].receiverCallsign != "undefined") + report.dxcc = callsignToDxcc(json.receptionReport[key].receiverCallsign); else report.dxcc = -1; report.when = parseInt(json.receptionReport[key].flowStartSeconds); @@ -12867,7 +12815,7 @@ function pskSpotResults(buffer, flag) { SNR = 0; report.color = SNR; - shouldSave = true; + } } } @@ -12875,12 +12823,10 @@ function pskSpotResults(buffer, flag) { } } - g_receptionSettings.lastDownloadTimeSec = timeNowSec(); + g_receptionReports.lastDownloadTimeSec = timeNowSec(); localStorage.receptionSettings = JSON.stringify(g_receptionSettings); - if (shouldSave) { - localStorage.receptionReports = JSON.stringify(g_receptionReports); - } + redrawSpots(); if ( g_rosterSpot ) goProcessRoster(); @@ -12909,11 +12855,11 @@ function redrawSpots() { g_layerSources["psk-heat"].addFeature(spot); } - for (var key in g_receptionReports) { - report = g_receptionReports[key]; + for (var key in g_receptionReports.spots) { + report = g_receptionReports.spots[key]; if (now - report.when > 86400) { - delete g_receptionReports[key]; + delete g_receptionReports.spots[key]; shouldSave = true; continue; } @@ -12988,7 +12934,7 @@ function redrawSpots() { } } if (shouldSave) { - localStorage.receptionReports = JSON.stringify(g_receptionReports); + saveReceptionReports(); } spotCountDiv.innerHTML = "Spots: " + count; } @@ -13187,9 +13133,9 @@ function setRosterTimeView() { function getSpotTime( hash ) { - if (hash in g_receptionReports) + if (hash in g_receptionReports.spots) { - return g_receptionReports[hash]; + return g_receptionReports.spots[hash]; } else return null; diff --git a/package.nw/lib/roster.js b/package.nw/lib/roster.js index 85ed5721..bfa1ac1f 100644 --- a/package.nw/lib/roster.js +++ b/package.nw/lib/roster.js @@ -22,6 +22,7 @@ var g_menu = null; var g_callMenu = null; var g_ageMenu = null; var g_callingMenu = null; +var g_compactMenu = null; var g_targetHash = ""; var g_clearIgnores = null; var g_clearIgnoresCall = null; @@ -434,7 +435,7 @@ function viewRoster() if ( referenceNeed.value == 6 ) { callMode = "all"; - onlyHits = true; + onlyHits = false; isAwardTracker = true; g_rosterSettings.huntNeed = "confirmed"; } @@ -487,6 +488,7 @@ function viewRoster() for ( callHash in callRoster ) { var call = callRoster[callHash].DEcall; + callRoster[callHash].tx = true; callRoster[callHash].callObj.shouldAlert = false; callRoster[callHash].callObj.reason = Array(); @@ -851,7 +853,7 @@ function viewRoster() if ( g_awardTracker[award].enable ) { tx = testAward(award, callRoster[callHash].callObj, baseHash ); - if ( tx ) + if ( tx ) break; } @@ -873,6 +875,8 @@ function viewRoster() var unconf = "background-clip:content-box;box-shadow: 0 0 8px 3px inset "; for (var callHash in callRoster) { + + // Special case check for called station if ( callRoster[callHash].callObj.qrz == true && callRoster[callHash].tx == false ) { @@ -927,6 +931,11 @@ function viewRoster() didWork = true; callConf = unconf + callsign + inversionAlpha + ";"; + if ( testHash in g_confirmed.call ) + { + callPointer = "text-decoration: line-through; "; + callConf = ""; + } } @@ -952,13 +961,13 @@ function viewRoster() if ( g_rosterSettings.huntNeed == "worked" && didWork ) { - callRoster[testHash].callObj.reason.push("call"); + callRoster[callHash].callObj.reason.push("call"); callConf = unconf + callsign + inversionAlpha + ";"; } if ( didWork && (g_rosterSettings.huntNeed == "confirmed" && !(testHash in g_confirmed.call) ) ) { shouldAlert = true; - callRoster[testHash].callObj.reason.push("call"); + callRoster[callHash].callObj.reason.push("call"); callConf = unconf + callsign + inversionAlpha + ";"; } else if ( didWork && (g_rosterSettings.huntNeed == "confirmed" && (testHash in g_confirmed.call) ) ) @@ -1221,10 +1230,18 @@ function viewRoster() } } - newCallList.sort(r_sortFunction[g_rosterSettings.lastSortIndex]); - if ( g_rosterSettings.lastSortReverse == 1 ) + if ( g_rosterSettings.compact == false ) { - newCallList.reverse(); + newCallList.sort(r_sortFunction[g_rosterSettings.lastSortIndex]); + if ( g_rosterSettings.lastSortReverse == 1 ) + { + newCallList.reverse(); + } + } + else + { + // Age sort for now... make this happen Tag + newCallList.sort(r_sortFunction[6]).reverse(); } @@ -1331,7 +1348,7 @@ function viewRoster() var ituzone = (grid in window.opener.g_gridToITUZone ? window.opener.g_gridToITUZone[grid].join(", ") : "-"); var thisCall = newCallList[x].DEcall; - var thisClass = ""; + if ( thisCall.match("^[A-Z][0-9][A-Z](\/\w+)?$") ) newCallList[x].style.callsign = "class='oneByOne'"; if ( thisCall == window.opener.g_instances[newCallList[x].instance].status.DXcall ) @@ -1353,7 +1370,7 @@ function viewRoster() worker += ""; - worker += ""; if ( showBands ) @@ -1371,14 +1388,14 @@ function viewRoster() worker += ""; if ( g_rosterSettings.columns.Calling ) { - var lookString = (newCallList[x].CQ?"title='CQ'":"title='Calling'"); + var lookString = (newCallList[x].CQ?"name='CQ'":"name='Calling'"); worker += ""; } if ( g_rosterSettings.columns.Msg ) worker += ""; if ( g_rosterSettings.columns.DXCC ) - worker += ""; if ( g_rosterSettings.columns.Flag ) worker += ""; @@ -1462,9 +1479,13 @@ function viewRoster() } else { - worker += "
"; - worker += "
" + thisCall.formatCallsign() + "
"; + var tt = newCallList[x].RSTsent + "㏈, " + parseInt(newCallList[x].dt*100) +"ms, " + newCallList[x].delta + "hz" + (newCallList[x].grid.length? ", " + newCallList[x].grid:"") +", " + (timeNowSec() - newCallList[x].age).toDHMS(); + worker += "
"; + worker += "
"+ thisCall.formatCallsign() +"
"; + worker += "
" + window.opener.g_dxccToAltName[newCallList[x].dxcc] + "
"; + worker += "
"; + } if ( g_rosterSettings.realtime == false ) @@ -1870,7 +1891,7 @@ function updateAwardList( target = null ) var allEndorse = false; var tooltip = g_awards[award.sponsor].awards[award.name].tooltip+ " (" + g_awards[award.sponsor].sponsor + ")\n"; - tooltip += toTitleCase(award.test.look) + " QSO\n"; + tooltip += toTitleCase(award.test.qsl_req) + " QSO\n"; for ( var mode in award.comp.counts ) { tooltip += mode + "\n"; @@ -1910,7 +1931,7 @@ function updateAwardList( target = null ) if ( baseCount > 0 && endorseCount == endorseTotal ) allEndorse = true; - var cell = createCellHtml(row, "

" + g_awards[award.sponsor].awards[award.name].tooltip +" - "+award.sponsor ); + var cell = createCellHtml(row, "

" + award.name +" - "+award.sponsor ); cell.style.textAlign = "left"; cell.style.color = "lightblue"; @@ -2044,9 +2065,9 @@ function setVisual() huntingTr.style.display = "none"; callsignsTr.style.display = "none"; - huntingMatrixDiv.style.display = "none"; awardHunterTr.style.display = ""; awardWantedDiv.style.display = ""; + huntingMatrixDiv.style.display = ""; updateAwardList(); } else @@ -2199,6 +2220,12 @@ function wantedChanged(element) if ( t in g_rosterSettings.columns ) { g_rosterSettings.columns[t] = true; + + for (var i = 0; i < g_menu.items.length; ++i) { + if ( typeof g_menu.items[i].checked != "undefined" && g_menu.items[i].label == t ) + g_menu.items[i].checked = true; + } + } } @@ -2643,6 +2670,8 @@ function init() g_menu = new nw.Menu(); + g_compactMenu = new nw.Menu(); + // Bind a callback to item var item = new nw.MenuItem({ type: "normal", @@ -2665,27 +2694,31 @@ function init() } }); g_menu.append(item); + g_compactMenu.append(item); item = new nw.MenuItem({ type: "normal", - label: g_rosterSettings.compact? "Roster Mode":"Compact Mode", + label: "Compact Mode", click: function() { - if ( this.label == "Compact Mode" ) - { - this.label = "Roster Mode"; g_rosterSettings.compact = true; - } - else - { - this.label = "Compact Mode"; - g_rosterSettings.compact = false; - } localStorage.rosterSettings = JSON.stringify(g_rosterSettings); resize(); } }); g_menu.append(item); + item = new nw.MenuItem({ + type: "normal", + label: "Roster Mode", + click: function() { + + g_rosterSettings.compact = false; + localStorage.rosterSettings = JSON.stringify(g_rosterSettings); + resize(); + } + }); + g_compactMenu.append(item); + rosterHead.style.display = g_rosterSettings.controls?"block":"none"; @@ -2756,6 +2789,7 @@ function init() item = new nw.MenuItem({ type: 'separator' }); g_menu.append(item); + g_compactMenu.append(item); item = new nw.MenuItem({ type: "checkbox", @@ -2808,6 +2842,7 @@ function init() } }); g_menu.append(g_clearIgnores); + g_compactMenu.append(g_clearIgnores); g_clearIgnoresCall = new nw.MenuItem({ type: "normal", @@ -2861,6 +2896,7 @@ function init() } }); g_menu.append(g_clearCQIgnoreMainMenu); + g_compactMenu.append(g_clearCQIgnoreMainMenu); g_clearCQIgnore = new nw.MenuItem({ type: "normal", @@ -2913,6 +2949,7 @@ function init() } }); g_menu.append(g_clearDxccIgnoreMainMenu); + g_compactMenu.append(g_clearDxccIgnoreMainMenu); g_clearDxccIgnore = new nw.MenuItem({ type: "normal", @@ -2935,6 +2972,7 @@ function init() } }); g_menu.append(item); + g_compactMenu.append(item); item = new nw.MenuItem({ @@ -3006,35 +3044,60 @@ function init() g_clearCQIgnore.label = "Clear Ignore"; g_clearCQIgnore.enabled = false; } - if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title == "Callsign" ) - { - g_targetHash = ev.target.parentNode.id; - g_callMenu.popup(ev.x, ev.y); - } - else if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title == "Calling" ) - { - g_targetHash = ev.target.parentNode.id; - g_callingMenu.popup(ev.x, ev.y); - } - else if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title == "CQ" ) - { - if ( callRoster[ev.target.parentNode.id].DXcall != "CQ" ) + if ( typeof ev.target != 'undefined' ) + { + var name = ev.target.getAttribute("name"); + if ( name == "Callsign" ) { - g_targetCQ = ev.target.parentNode.id; - g_CQMenu.popup(ev.x, ev.y); + g_targetHash = ev.target.parentNode.id; + g_callMenu.popup(ev.x, ev.y); + } + else if ( name == "Calling" ) + { + g_targetHash = ev.target.parentNode.id; + g_callingMenu.popup(ev.x, ev.y); + } + else if ( name == "CQ" ) + { + if ( callRoster[ev.target.parentNode.id].DXcall != "CQ" ) + { + g_targetCQ = ev.target.parentNode.id; + g_CQMenu.popup(ev.x, ev.y); + } + } + else if ( name && name.startsWith("DXCC") ) + { + var dxcca = name.split("("); + var dxcc = parseInt(dxcca[1]); + g_targetDxcc = dxcc; + g_dxccMenu.popup(ev.x, ev.y); + } + else + { + if ( g_rosterSettings.compact == false ) + { + g_menu.popup(ev.x, ev.y); + } + else + { + g_compactMenu.popup(ev.x, ev.y); + } } - } - else if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title.startsWith("DXCC") ) - { - var dxcca = ev.target.title.split("("); - var dxcc = parseInt(dxcca[1]); - g_targetDxcc = dxcc; - g_dxccMenu.popup(ev.x, ev.y); } else { - g_menu.popup(ev.x, ev.y); + if ( g_rosterSettings.compact == false ) + { + g_menu.popup(ev.x, ev.y); + } + else + { + g_compactMenu.popup(ev.x, ev.y); + } } + + + return false; }); @@ -3103,37 +3166,31 @@ function getTypeFromMode(mode) } function testAward( awardName, obj, baseHash ) -{ - var rule = g_awardTracker[awardName].rule; - var test = g_awardTracker[awardName].test; - - if ( obj.dxcc < 1 ) - return false; - - if ( test.dxcc && rule.dxcc.indexOf(obj.dxcc) == -1 ) +{ + if ( g_awardTracker[awardName].test.dxcc && g_awardTracker[awardName].rule.dxcc.indexOf(obj.dxcc) == -1 ) return false; - if ( test.mode && rule.mode.indexOf(obj.mode) == -1 ) + if ( g_awardTracker[awardName].test.mode && g_awardTracker[awardName].rule.mode.indexOf(obj.mode) == -1 ) return false; - if ( test.band && rule.band.indexOf(obj.band) == -1 ) + if ( g_awardTracker[awardName].test.band && g_awardTracker[awardName].rule.band.indexOf(obj.band) == -1 ) return false; - if ( test.DEcall && rule.call.indexOf(obj.DEcall) == -1 ) + if ( g_awardTracker[awardName].test.DEcall && g_awardTracker[awardName].rule.call.indexOf(obj.DEcall) == -1 ) return false; - if ( test.cont && rule.cont.indexOf(obj.cont) == -1 ) + if ( g_awardTracker[awardName].test.cont && g_awardTracker[awardName].rule.cont.indexOf(obj.cont) == -1 ) return false; - if ( test.prop && rule.propMode != obj.propMode ) + if ( g_awardTracker[awardName].test.prop && g_awardTracker[awardName].rule.propMode != obj.propMode ) return false; - if ( test.sat && rule.satName.indexOf(obj.satName) == -1) + if ( g_awardTracker[awardName].test.sat && g_awardTracker[awardName].rule.satName.indexOf(obj.satName) == -1) return false; - return g_awardTypes[rule.type].test(g_awardTracker[awardName], obj, baseHash); - + return g_awardTypes[g_awardTracker[awardName].rule.type].test(g_awardTracker[awardName], obj, baseHash); } + function processAward( awardName ) { var award = g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name]; @@ -3159,7 +3216,9 @@ function processAward( awardName ) g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule.qsl_req == "confirmed" : g_awards[g_awardTracker[awardName].sponsor].qsl_req == "confirmed"); - test.look = ( ("qsl_req" in g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule)? + test.look = "confirmed"; + + test.qsl_req = ( ("qsl_req" in g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule)? g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule.qsl_req : g_awards[g_awardTracker[awardName].sponsor].qsl_req ); diff --git a/package.nw/lib/style_roster.css b/package.nw/lib/style_roster.css index dec7be88..d273ff09 100644 --- a/package.nw/lib/style_roster.css +++ b/package.nw/lib/style_roster.css @@ -103,8 +103,11 @@ option:disabled .controlItem { -webkit-appearance: none; - margin:2px; - padding:2px; + margin:0; + padding:0; + padding-top:1px; + margin-top:1px; + margin-bottom:1px; border-width:1px; border-color:#AAA; border-style:inset; @@ -179,11 +182,11 @@ table.darkTable thead th:first-child { } .dxCaller { - background-clip:content-box;box-shadow: 0 0 8px 3px inset lightgreen;background-color:#000;color:#FF0; + background-clip:content-box;box-shadow: 0 0 4px 4px inset #0F0;background-color:#000;color:#FF0; } .dxCalling { - background-clip:content-box;box-shadow: 0 0 8px 3px inset #F00;background-color:#000;color:#FF0; + background-clip:content-box;box-shadow: 0 0 4px 4px inset #F00;background-color:#000;color:#FF0; } @@ -192,16 +195,17 @@ table.darkTable thead th:first-child { cursor:pointer; margin:0px; padding:0px; - margin-right:1px; - margin-bottom:1px; - border-width:1px; + margin-right:2px; + margin-bottom:2px; + border-width:2px; border-color:#999; border-style:outset; - min-width: 5.5em; - + min-width: 9em; + min-height: 2em; display:inline-block; color:#EEE; -webkit-transition: border-style; + -webkit-border-radius:4px; } .compact:active @@ -211,4 +215,18 @@ table.darkTable thead th:first-child { .compact:hover { border-color:#FFF; +} + +.compactCallsign { + padding:3px; + overflow: hidden; + white-space: nowrap; +} + +.compactDXCC { + padding:3px; + max-width: 9em; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } \ No newline at end of file

" + trophy + "
" + thisCall.formatCallsign() + "" + grid + ""+newCallList[x].DXcall.formatCallsign() + ""+newCallList[x].msg+ "" + window.opener.g_dxccToAltName[newCallList[x].dxcc] + + worker += "" + window.opener.g_dxccToAltName[newCallList[x].dxcc] + " (" + window.opener.g_worldGeoData[window.opener.g_dxccToGeoData[newCallList[x].dxcc]].pp + ")