merge-requests/237/merge
Tag 2023-01-17 04:42:36 -08:00
rodzic 34ae314e70
commit 84b6f94c2d
10 zmienionych plików z 267 dodań i 216 usunięć

Wyświetl plik

@ -977,8 +977,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
onclick="openSettingsTab(event, 'logSettingsDiv')">Logging</button>
<button data-i18n="settings.Alerts.label" class="settingsTablinks"
onclick="openSettingsTab(event, 'alertsDiv')">Alerts</button>
<button data-i18n="settings.CallRoster.label" class="settingsTablinks"
onclick="openSettingsTab(event, 'callRosterDiv')">Call Roster</button>
<button data-i18n="settings.OAMS.label" class="settingsTablinks"
onclick="openSettingsTab(event, 'chatSettingsDiv')">OAMS</button>
<button data-i18n="settings.Logbook.label" id="logbut" class="settingsTablinks"
@ -1080,6 +1078,24 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</table>
</div>
</td>
<td>
<div class="mapItem" id="multiRigCRDiv" style="display:none;">
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
</tr>
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.SwitchView.label" align="center">Switch View To Transmitting
Instance</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="focusRigValue" onchange="changeFocusRigValue(this);" />
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<table align="center">
@ -1118,6 +1134,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</table>
</div>
</td>
<td>
<div class="mapItem" id="haltTXDiv" style="display:none;">
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
</tr>
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.HaltTx.label" align="center">Halt TX On All Other Instances</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="haltAllOnTxValue" onchange="changeHaltOntTxValue(this);" />
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<table align="center">
@ -1975,7 +2008,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
@ -2428,7 +2460,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<td></td>
</tr>
</table>
<h2 data-i18n="settings.logging.other.title">Other Services</h2>
<table class="darkTable" align="center">
<tr>
@ -2454,136 +2485,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</td>
</tr>
</table>
</div>
<div id="callRosterDiv" class="settingsTabcontent">
<div class="mapItem">
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.AlwaysOnTop.label" align="center">Window Always On Top</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="rosterAlwaysOnTop" onchange="changeRosterTop(this);" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.MaxAge.label" align="center">Call Roster Max Age</td>
</tr>
<tr align="center">
<td align="center" id="rosterTimeTd">2m 0s</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="range" min="5" max="300" value="120" step="15" class="slider" id="rosterTime"
oninput="changeRosterTime()" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Clear Call Roster on Band change</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="clearRosterOnBandChange"
onchange="clearRosterOnBandChangeValueChanged(this);" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Call Roster Decode Delay On Focus</td>
</tr>
<td colspan="2">
<input type="checkbox" id="rosterDelayOnFocus" onchange="rosterDelayOnFocusValueChanged(this);" />
</td>
<tr align="center">
<td align="center" id="rosterDelayTimeTd">1500ms</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="50"
max="5000"
value="1500"
step="10"
class="slider"
id="rosterDelayTime"
oninput="changeRosterDelayTime()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="haltTXDiv" style="display: none">
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
</tr>
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.HaltTx.label" align="center">Halt TX On All Other Instances</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="haltAllOnTxValue" onchange="changeHaltOntTxValue(this);" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="multiRigCRDiv" style="display: none">
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
</tr>
<tr align="center">
<td data-i18n="settings.callroster.MultiRig.SwitchView.label" align="center">Switch View To Transmitting
Instance</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="focusRigValue" onchange="changeFocusRigValue(this);" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center" title="Alert when new 'Wanted Row(s)' appear in the Call Roster">
<tr>
<td data-i18n="settings.callroster.AudioAlert.label" colspan="2">Audio Alert On <b>New Wanted</b></td>
</tr>
<tr>
<td colspan="2">
<input type="checkbox" id="huntRoster" onchange="wantedChanged(this);" />
</td>
</tr>
<tr>
<td>
<select id="huntRosterNotify" onchange="wantedChanged(this);">
<option data-i18n="settings.callroster.AudioAlert.TextToSpeech" value="1">Text-to-Speech</option>
<option data-i18n="settings.callroster.AudioAlert.MediaFile" value="0">Media File</option>
</select>
</td>
<td>
<input id="huntRosterNotifyWord" type="text" class="inputTextValue" size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);" />
<select id="huntRosterNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
</table>
</div>
</div>
<div id="alertsDiv" class="settingsTabcontent">
<div id="alertMatrixDiv" style="display: inline-block">
@ -2760,6 +2661,36 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
oninput="ValidateText(this);wantedChanged(this);" />
<select id="huntStatesNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
<tr>
<td colspan="5">
<div class="mapItem">
<table align="center" title="Alert when new 'Wanted Row(s)' appear in the Call Roster">
<tr>
<td data-i18n="settings.callroster.AudioAlert.label" colspan="2">Call Roster On <b>New Wanted</b></td>
</tr>
<tr>
<td colspan="2">
<input type="checkbox" id="huntRoster" onchange="wantedChanged(this);" />
</td>
</tr>
<tr>
<td>
<select id="huntRosterNotify" onchange="wantedChanged(this);">
<option data-i18n="settings.callroster.AudioAlert.TextToSpeech" value="1">Text-to-Speech</option>
<option data-i18n="settings.callroster.AudioAlert.MediaFile" value="0">Media File</option>
</select>
</td>
<td>
<input id="huntRosterNotifyWord" type="text" class="inputTextValue" size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);" />
<select id="huntRosterNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
</table>
</div>
</td>
</tr>
</tr>
</table>
<table class="roundBorder" align="left"

Wyświetl plik

@ -43,8 +43,8 @@
<script src="./lib/roster/sendAlerts.js" type="text/javascript"></script>
<script src="./lib/screens.js" type="text/javascript"></script>
</head>
<body id="rosterBody" onload="init()" style="display: none;" class="roster" oncontextmenu="return handleContextMenu(event);">
<div id="MainCallRoster">
<body id="rosterBody" onload="init()" onresize="resize()" style="display: none;" class="roster" oncontextmenu="return handleContextMenu(event);">
<div id="MainCallRoster" style="display:block;";>
<header id="RosterControls">
<div id="TransmitControls">
<div id="txrxdec" style=" background-color: Green; border-style: outset; border-color: yellow; border-width: 3px; margin: 2px;" class="roundBorder">
@ -425,13 +425,102 @@
<div
id="editView"
class="roundBorder"
style="height: 100%; border: 3px solid #066; padding: 10px; margin: 10px; display: none"
style="height: 100%; width:95%; top:0px; left:0px; border: 3px solid #066; padding: 10px; margin: 10px; display: none; position: absolute;"
>
<div style="display: block; font-size: larger">Callsign, CQ and DXCC Ignores</div>
<br />
<div id="editTables"></div>
<div class="button" style="margin-top: 5px" onclick="closeEditIgnores()">Close</div>
<div style="top: 1px; right: 1px; position: absolute">
<button class="Xbutton" onclick="closeEditIgnores()">X</button>
</div>
</div>
<div id="settingsDiv" class="roundBorder" style="overflow: hidden;
margin: 0;
top: 10px;
left: 15%;
width: 70%;
display: none;
background-color: #000000;
padding: 0px;
text-align: center;
vertical-align: middle;
position: absolute;
z-index: 600;
border: 3px solid rgb(0, 50, 189);" >
<div class="mapItem" >
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.AlwaysOnTop.label" align="center">Window Always On Top</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="rosterAlwaysOnTop" onchange="changeRosterTop(this);" />
</td>
</tr>
</table>
</div>
<div class="mapItem" >
<table align="center">
<tr align="center">
<td data-i18n="settings.callroster.MaxAge.label" align="center">Call Roster Max Age</td>
</tr>
<tr align="center">
<td align="center" id="rosterTimeTd">2m 0s</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="range" min="5" max="300" value="120" step="5" class="slider" id="rosterTime"
oninput="changeRosterTime()" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Clear Call Roster on Band change</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="clearRosterOnBandChange"
onchange="clearRosterOnBandChangeValueChanged(this);" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Call Roster Decode Delay On Focus</td>
</tr>
<td colspan="2">
<input type="checkbox" id="rosterDelayOnFocus" onchange="rosterDelayOnFocusValueChanged(this);" />
</td>
<tr align="center">
<td align="center" id="rosterDelayTimeTd">1500ms</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="50"
max="5000"
value="1500"
step="10"
class="slider"
id="rosterDelayTime"
oninput="changeRosterDelayTime()"
/>
</td>
</tr>
</table>
</div>
<br />
<div style="top: 1px; right: 1px; position: absolute">
<button class="Xbutton" onclick="closeSettings()">X</button>
</div>
</div>
</body>
</html>

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -995,6 +995,7 @@
"roster.ignore.DXCCs": "DXCCs",
"roster.ignore.CQZones": "CQ 分區",
"roster.ignore.ITUZones": "ITU 分區",
"roster.menu.Settings": "Settings",
"roster.menu.HideControls": "隱藏控件",
"roster.menu.ShowControls": "顯示控件",
"roster.menu.CompactMode": "緊密模式",

Wyświetl plik

@ -995,6 +995,7 @@
"roster.ignore.DXCCs": "DXCCs",
"roster.ignore.CQZones": "CQ分区",
"roster.ignore.ITUZones": "ITU分区",
"roster.menu.Settings": "Settings",
"roster.menu.HideControls": "隐藏控件栏",
"roster.menu.ShowControls": "显示控件栏",
"roster.menu.CompactMode": "紧凑模式",

Wyświetl plik

@ -995,6 +995,7 @@
"roster.ignore.DXCCs": "DXCCs",
"roster.ignore.CQZones": "CQ Zones",
"roster.ignore.ITUZones": "ITU Zones",
"roster.menu.Settings": "Settings",
"roster.menu.HideControls": "Hide Controls",
"roster.menu.ShowControls": "Show Controls",
"roster.menu.CompactMode": "Compact Mode",

Wyświetl plik

@ -33,7 +33,6 @@ var validSettings = [
var def_appSettings = {
alertMute: 0,
rosterAlwaysOnTop: false,
centerGridsquare: "",
chatUUID: "",
clearOnCQ: false,
@ -64,9 +63,6 @@ var def_appSettings = {
lookupPasswordQth: "",
lookupService: "CALLOOK",
lookupCallookPreferred: false,
clearRosterOnBandChange: false,
rosterDelayOnFocus: false,
rosterDelayTime: 1500,
moonPath: 0,
moonTrack: 0,
mouseTrack: 0,
@ -125,7 +121,6 @@ var def_mapSettings = {
pathColor: 0,
qrzDxccFallback: false,
qrzPathColor: 1,
rosterTime: 120,
shadow: 0.1,
splitQSL: true,
trafficDecode: true,

Wyświetl plik

@ -2507,7 +2507,6 @@ function openCallRosterWindow(show = true)
{
g_callRosterWindowHandle.setMinimumSize(390, 250);
g_callRosterWindowHandle.setResizable(true);
setRosterTop();
});
new_win.on("close", function ()
{
@ -6182,7 +6181,7 @@ function handleWsjtxStatus(newMessage)
}
}
if (g_appSettings.clearRosterOnBandChange && g_instances[newMessage.instance].oldStatus)
if (g_rosterInitialized && g_callRosterWindowHandle.window.g_rosterSettings.clearRosterOnBandChange && g_instances[newMessage.instance].oldStatus)
{
if (g_instances[newMessage.instance].oldStatus.Band != newMessage.Band || g_instances[newMessage.instance].oldStatus.MO != newMessage.MO)
{
@ -12315,10 +12314,6 @@ function loadMapSettings()
focusRigValue.checked = g_mapSettings.focusRig;
haltAllOnTxValue.checked = g_mapSettings.haltAllOnTx;
clearRosterOnBandChange.checked = g_appSettings.clearRosterOnBandChange;
rosterDelayOnFocus.checked = g_appSettings.rosterDelayOnFocus;
rosterDelayTime.value = g_appSettings.rosterDelayTime;
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
trafficDecode.checked = g_mapSettings.trafficDecode;
setSpotImage();
@ -12834,7 +12829,6 @@ function loadViewSettings()
}
spotPathChange();
setRosterTimeView();
setLegendAndGridSettings();
}
@ -13030,8 +13024,6 @@ function startupButtonsAndInputs()
alertMuteImg.src = g_alertImageArray[g_appSettings.alertMute];
modeImg.src = g_maidenheadModeImageArray[g_appSettings.sixWideMode];
rosterAlwaysOnTop.checked = g_appSettings.rosterAlwaysOnTop;
if (g_appSettings.centerGridsquare.length > 0)
{
homeQTHInput.value = g_appSettings.centerGridsquare.substr(0, 6);
@ -13792,24 +13784,6 @@ function loadLookupDetails()
else lookupCredentials.style.display = "block";
}
function clearRosterOnBandChangeValueChanged(what)
{
g_appSettings.clearRosterOnBandChange = clearRosterOnBandChange.checked;
saveAppSettings();
}
function rosterDelayOnFocusValueChanged(what)
{
g_appSettings.rosterDelayOnFocus = rosterDelayOnFocus.checked;
saveAppSettings();
}
function changeRosterDelayTime()
{
g_appSettings.rosterDelayTime = rosterDelayTime.value;
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
}
function lookupValueChanged(what)
{
if (g_appSettings.lookupService != lookupService.value)
@ -15931,41 +15905,6 @@ function gotoDonate()
gui.Shell.openExternal("https://gridtracker.org/donations/");
}
function changeRosterTime()
{
g_mapSettings.rosterTime = rosterTime.value;
setRosterTimeView();
saveMapSettings();
goProcessRoster();
}
function changeRosterTop(butt)
{
g_appSettings.rosterAlwaysOnTop = butt.checked;
setRosterTop();
}
function setRosterTop()
{
if (g_rosterInitialized)
{
try
{
g_callRosterWindowHandle.setAlwaysOnTop(g_appSettings.rosterAlwaysOnTop);
}
catch (e)
{
console.error(e);
}
}
}
function setRosterTimeView()
{
rosterTime.value = g_mapSettings.rosterTime;
rosterTimeTd.innerHTML = Number(rosterTime.value).toDHMS();
}
function getSpotTime(hash)
{
if (hash in g_receptionReports.spots)

Wyświetl plik

@ -146,9 +146,13 @@ var g_defaultSettings = {
controlsExtended: true,
compact: false,
settingProfiles: false,
sortColumn: "Age",
sortReverse: true
sortReverse: true,
clearRosterOnBandChange: false,
rosterAlwaysOnTop: false,
rosterDelayOnFocus: false,
rosterDelayTime: 1500,
rosterTime: 120
};
const LOGBOOK_LIVE_BAND_LIVE_MODE = "0";
@ -1406,6 +1410,20 @@ function clearAllITUzIgnores()
window.opener.goProcessRoster();
}
function openSettings()
{
MainCallRoster.style.display = "block";
settingsDiv.style.display = "block";
editView.style.display = "none";
}
function closeSettings()
{
MainCallRoster.style.display = "block";
settingsDiv.style.display = "none";
editView.style.display = "none";
}
function closeEditIgnores()
{
MainCallRoster.style.display = "block";
@ -1544,14 +1562,21 @@ function openIgnoreEdit()
worker += "</table></div>";
editTables.innerHTML = worker;
editView.style.height = (window.innerHeight - 50) + "px";
editView.style.height = (window.innerHeight - 45) + "px";
}
function onMyKeyDown(event)
{
if (!g_typingInRoster)
{
window.opener.onMyKeyDown(event);
if (event.code == "KeyS" && event.ctrlKey == true)
{
openSettings();
}
else
{
window.opener.onMyKeyDown(event);
}
}
}
@ -1600,6 +1625,8 @@ function init()
// callback to addControls();
loadRosteri18n();
setRosterTop();
}
// From i18n.js
@ -1649,9 +1676,7 @@ function addControls()
this.label = hideControlsText;
g_rosterSettings.controls = true;
}
g_compactMenu.items[0].label = g_rosterSettings.controls
? hideControlsText
: showControlsText;
g_compactMenu.items[0].label = g_rosterSettings.controls ? hideControlsText : showControlsText;
localStorage.rosterSettings = JSON.stringify(g_rosterSettings);
setVisual();
}
@ -1673,15 +1698,33 @@ function addControls()
this.label = hideControlsText;
g_rosterSettings.controls = true;
}
g_menu.items[0].label = g_rosterSettings.controls
? hideControlsText
: showControlsText;
g_menu.items[0].label = g_rosterSettings.controls ? hideControlsText : showControlsText;
localStorage.rosterSettings = JSON.stringify(g_rosterSettings);
setVisual();
}
});
g_compactMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.Settings"),
click: function ()
{
openSettings();
}
});
g_menu.append(item);
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.Settings"),
click: function ()
{
openSettings();
}
});
g_compactMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.CompactMode"),
@ -2181,6 +2224,13 @@ function addControls()
noUnknownDXCC.checked = g_rosterSettings.noUnknownDXCC;
clearRosterOnBandChange.checked = g_rosterSettings.clearRosterOnBandChange;
rosterDelayOnFocus.checked = g_rosterSettings.rosterDelayOnFocus;
rosterDelayTime.value = g_rosterSettings.rosterDelayTime;
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
setRosterTimeView();
setVisual();
document.addEventListener("keydown", onMyKeyDown, false);
@ -2190,6 +2240,50 @@ function addControls()
updateInstances();
}
function clearRosterOnBandChangeValueChanged(what)
{
g_rosterSettings.clearRosterOnBandChange = clearRosterOnBandChange.checked;
writeRosterSettings();
}
function rosterDelayOnFocusValueChanged(what)
{
g_rosterSettings.rosterDelayOnFocus = rosterDelayOnFocus.checked;
writeRosterSettings();
}
function changeRosterDelayTime()
{
g_rosterSettings.rosterDelayTime = rosterDelayTime.value;
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
writeRosterSettings();
}
function changeRosterTime()
{
g_rosterSettings.rosterTime = rosterTime.value;
setRosterTimeView();
writeRosterSettings();
viewRoster();
}
function changeRosterTop(butt)
{
g_rosterSettings.rosterAlwaysOnTop = butt.checked;
setRosterTop();
}
function setRosterTop()
{
nw.Window.get().setAlwaysOnTop(g_rosterSettings.rosterAlwaysOnTop);
}
function setRosterTimeView()
{
rosterTime.value = g_rosterSettings.rosterTime;
rosterTimeTd.innerHTML = Number(rosterTime.value).toDHMS();
}
function handleContextMenu(ev)
{
if (editView.style.display == "inline-block") return false;

Wyświetl plik

@ -40,7 +40,7 @@ function processRosterFiltering(callRoster, rosterSettings)
continue;
}
if (rosterSettings.now - callObj.age > window.opener.g_mapSettings.rosterTime)
if (rosterSettings.now - callObj.age > g_rosterSettings.rosterTime)
{
entry.tx = false;
entry.alerted = false;