diff --git a/package.nw/gt_update.odt b/package.nw/gt_update.odt
index a233116..0db049a 100644
Binary files a/package.nw/gt_update.odt and b/package.nw/gt_update.odt differ
diff --git a/package.nw/lib/roster.js b/package.nw/lib/roster.js
index 1f983fb..cfca2f7 100644
--- a/package.nw/lib/roster.js
+++ b/package.nw/lib/roster.js
@@ -161,7 +161,8 @@ var g_defaultSettings = {
rosterAlwaysOnTop: false,
rosterDelayOnFocus: false,
rosterDelayTime: 1500,
- rosterTime: 120
+ rosterTime: 120,
+ compactEntity: "DXCC"
};
g_def_displayFilters = {
@@ -444,14 +445,14 @@ function realtimeRoster()
function getSpotString(callObj)
{
- let result = "";
+ let result = " ";
if (callObj.spot && callObj.spot.when > 0)
{
when = timeNowSec() - callObj.spot.when;
if (when <= window.opener.g_receptionSettings.viewHistoryTimeSec)
{ result = parseInt(when).toDHM(); }
}
- if (result) result += " / " + callObj.spot.snr;
+ if (result != " ") result += " / " + callObj.spot.snr;
return result;
}
@@ -2329,6 +2330,19 @@ function addControls()
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
setRosterTimeView();
+ for (const column in ROSTER_COLUMNS)
+ {
+ if (column != "Callsign")
+ {
+ var option = newOption(column, column);
+ if (column == g_rosterSettings.compactEntity)
+ {
+ option.selected = true;
+ }
+ compactEntitySelect.appendChild(option);
+ }
+ }
+
setVisual();
document.addEventListener("keydown", onMyKeyDown, false);
@@ -2338,6 +2352,12 @@ function addControls()
updateInstances();
}
+function compactEntityChanged()
+{
+ g_rosterSettings.compactEntity = compactEntitySelect.value;
+ viewRoster();
+}
+
function clearRosterOnBandChangeValueChanged(what)
{
g_rosterSettings.clearRosterOnBandChange = clearRosterOnBandChange.checked;
diff --git a/package.nw/lib/roster/renderCompactRoster.js b/package.nw/lib/roster/renderCompactRoster.js
index 3e5c8c5..07f09e7 100644
--- a/package.nw/lib/roster/renderCompactRoster.js
+++ b/package.nw/lib/roster/renderCompactRoster.js
@@ -1,5 +1,8 @@
+g_isCompactCounty = false;
+
function renderCompactRosterHeaders()
{
+ g_isCompactCounty = (g_rosterSettings.compactEntity == "County");
return "
";
}
@@ -8,10 +11,18 @@ function renderCompactRosterRow(callObj, showBand)
var ID = callObj.DEcall + callObj.band + callObj.mode;
var title = callObj.RSTsent + "㏈, " + parseInt(callObj.dt * 100) + "ms, " + callObj.delta + "hz" + (callObj.grid.length ? ", " + callObj.grid : "") + ", " + (timeNowSec() - callObj.age).toDHMS();
var bandView = showBand ? "
" + callObj.band + "
" : "";
- var worker = "
";
- worker += "
" + callObj.DEcall.formatCallsign() + bandView + "
";
- worker += "
" + window.opener.g_dxccToAltName[callObj.dxcc] + "
";
- worker += "
";
+ if (g_rosterSettings.compactEntity == "Band")
+ {
+ bandView = "";
+ }
+ var onClick = " onClick='initiateQso(\"" + ID + "\")' id='" + ID + "' title='" + title + "' ";
+ var wholeClick = (g_isCompactCounty ? "" : onClick);
+ var callsignClick = (g_isCompactCounty ? onClick : "");
+ var worker = "
";
+ worker += "
" + callObj.DEcall.formatCallsign() + bandView + "
";
+ worker += "
";
+ worker += renderEntryForColumn(g_rosterSettings.compactEntity, callObj, "div");
+ worker += "
";
return worker;
}
diff --git a/package.nw/lib/roster/rosterColumnFunctions.js b/package.nw/lib/roster/rosterColumnFunctions.js
index 6908ff4..0603c1f 100644
--- a/package.nw/lib/roster/rosterColumnFunctions.js
+++ b/package.nw/lib/roster/rosterColumnFunctions.js
@@ -29,13 +29,13 @@ function renderHeaderForColumn(column)
return renderRosterTableHTML("th", attrs)
}
-function renderEntryForColumn(column, entry)
+function renderEntryForColumn(column, entry, element = "td")
{
const columnInfo = ROSTER_COLUMNS[column]
let attrs = (columnInfo && columnInfo.tableData && columnInfo.tableData(entry)) || {}
- return renderRosterTableHTML("td", attrs)
+ return renderRosterTableHTML(element, attrs)
}
function renderRosterTableHTML(tag, attrs)
diff --git a/package.nw/lib/roster/rosterColumns.js b/package.nw/lib/roster/rosterColumns.js
index ebcfde6..d81aa45 100644
--- a/package.nw/lib/roster/rosterColumns.js
+++ b/package.nw/lib/roster/rosterColumns.js
@@ -95,7 +95,7 @@ const ROSTER_COLUMNS = {
tableData: (callObj) => ({
rawAttrs: callObj.style.grid,
onClick: `centerOn("${callObj.grid}")`,
- html: callObj.grid
+ html: (callObj.grid.length > 0 ? callObj.grid : " ")
})
},
@@ -119,7 +119,7 @@ const ROSTER_COLUMNS = {
title: window.opener.g_dxccInfo[callObj.dxcc].pp,
name: `DXCC (${callObj.dxcc})`,
rawAttrs: callObj.style.dxcc,
- html: [window.opener.g_dxccToAltName[callObj.dxcc], callObj.dxccSuffix].join(" ")
+ html: (callObj.dxccSuffix ? [window.opener.g_dxccToAltName[callObj.dxcc], callObj.dxccSuffix].join(" ") : window.opener.g_dxccToAltName[callObj.dxcc])
})
},
@@ -128,7 +128,7 @@ const ROSTER_COLUMNS = {
tableData: (callObj) => ({
align: "center",
style: "margin:0; padding:0;",
- html: `
`
+ html: `
`
})
},
@@ -137,7 +137,7 @@ const ROSTER_COLUMNS = {
tableData: (callObj) => ({
align: "center",
rawAttrs: callObj.style.state,
- html: callObj.state ? callObj.state.substr(3) : ""
+ html: callObj.state ? callObj.state.substr(3) : " "
})
},
@@ -150,7 +150,7 @@ const ROSTER_COLUMNS = {
let attrs = {
align: "center",
rawAttrs: callObj.style.cnty,
- html: callObj.cnty ? window.opener.g_cntyToCounty[callObj.cnty] : ""
+ html: callObj.cnty ? window.opener.g_cntyToCounty[callObj.cnty] : " "
}
if (callObj.cnty && callObj.qual == false)
{
@@ -168,7 +168,7 @@ const ROSTER_COLUMNS = {
tableData: (callObj) => ({
align: "center",
rawAttrs: callObj.style.cont,
- html: callObj.cont ? callObj.cont : ""
+ html: callObj.cont ? callObj.cont : " "
})
},
@@ -201,7 +201,7 @@ const ROSTER_COLUMNS = {
tableHeader: () => ({ html: `Dist (${window.opener.distanceUnit.value.toLowerCase()})` }),
tableData: (callObj) => ({
style: "color: cyan;",
- html: Math.round(callObj.distance * MyCircle.validateRadius(window.opener.distanceUnit.value))
+ html: (callObj.distance > 0 ? Math.round(callObj.distance * MyCircle.validateRadius(window.opener.distanceUnit.value)) : " ")
})
},
@@ -209,7 +209,7 @@ const ROSTER_COLUMNS = {
compare: callObjSimpleComparer("heading"),
tableData: (callObj) => ({
style: "color: yellow;",
- html: Math.round(callObj.heading)
+ html: (callObj.distance > 0 ? Math.round(callObj.heading) : " ")
})
},
@@ -235,7 +235,7 @@ const ROSTER_COLUMNS = {
compare: callObjSimpleComparer("px"),
tableData: (callObj) => ({
rawAttrs: callObj.style.px,
- html: callObj.px ? callObj.px : ""
+ html: callObj.px ? callObj.px : " "
})
},
@@ -281,6 +281,12 @@ const ROSTER_COLUMNS = {
}
}
}
+ else
+ {
+ return {
+ html: " "
+ }
+ }
}
},
@@ -289,7 +295,7 @@ const ROSTER_COLUMNS = {
tableData: (callObj) => ({
style: "color: #0F0;",
align: "center",
- html: (callObj.DEcall in window.opener.g_eqslCallsigns ? "✔" : "")
+ html: (callObj.DEcall in window.opener.g_eqslCallsigns ? "✔" : " ")
})
},
@@ -298,7 +304,7 @@ const ROSTER_COLUMNS = {
tableData: (callObj) => ({
style: "color: #0F0;",
align: "center",
- html: (callObj.DEcall in window.opener.g_oqrsCallsigns ? "✔" : "")
+ html: (callObj.DEcall in window.opener.g_oqrsCallsigns ? "✔" : " ")
})
},
@@ -325,7 +331,7 @@ const ROSTER_COLUMNS = {
align: "center",
style: "margin: 0; padding: 0; cursor: pointer; background-clip: content-box; box-shadow: 0 0 4px 4px inset #2222FFFF;",
onClick: `openChatToCid("${callObj.gt}")`,
- html: "
"
+ html: "
"
}
}
else
@@ -334,10 +340,16 @@ const ROSTER_COLUMNS = {
align: "center",
style: "margin: 0; padding: 0; cursor: pointer;",
onClick: `openChatToCid("${callObj.gt}")`,
- html: "
"
+ html: "
"
}
}
}
+ else
+ {
+ return {
+ html: " "
+ }
+ }
}
},
@@ -406,7 +418,7 @@ function potaColumnRef(callObj)
}
else
{
- return "";
+ return " ";
}
}
@@ -431,7 +443,7 @@ function wantedColumnParts(callObj, options)
if (Object.keys(callObj.hunting).length == 0)
{
- return [];
+ return [" "];
}
let parts = [];
diff --git a/package.nw/lib/style_roster.css b/package.nw/lib/style_roster.css
index 3db32e7..7b9ae7b 100644
--- a/package.nw/lib/style_roster.css
+++ b/package.nw/lib/style_roster.css
@@ -522,9 +522,11 @@ table.rosterTable thead th:first-child {
white-space: nowrap;
}
-.compactDXCC {
+.compactData {
padding: 2px;
max-width: 9em;
+ min-width: 9em;
+ max-height: 14px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;