Skip to content
Snippets Groups Projects
Commit c4fe3cf5 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Merge branch 'dd_msg_reader_scrollable_mouse_click_hotspots' into 'master'

DDMsgReader: Mouse click support for the bottom help lines in scrollable mode (thanks to help from Nelgin)

See merge request !202
parents d2e44659 c32d46df
No related branches found
No related tags found
2 merge requests!463MRC mods by Codefenix (2024-10-20),!202DDMsgReader: Mouse click support for the bottom help lines in scrollable mode (thanks to help from Nelgin)
......@@ -44,8 +44,9 @@
* When saving messages with ANSI codes, Graphic is only used if the message has
* any ASCII drawing characters. (not sure if this really matters much though).
* Also, applied "use strict" and made some changes as necessary.
* 2022-07-06 Eric Oulashin Version 1.52 Beta
* Started working on mouse click support (mouse mods thanks to Nelgin)
* 2022-07-09 Eric Oulashin Version 1.52
* Mouse click support for the bottom help lines in scrollable mode
* (thanks to help from Nelgin)
*/
 
"use strict";
......@@ -122,12 +123,12 @@
// - Enable searching in traditional interface
// - Update the keys in the lightbar help line and traditional interface
 
// This script requires Synchronet version 3.17 or higher (for the require() function).
// This script requires Synchronet version 3.18 or higher (for mouse hotspot support).
// Exit if the Synchronet version is below the minimum.
if (system.version_num < 31700)
if (system.version_num < 31800)
{
var message = "\x01n\x01h\x01y\x01i* Warning:\x01n\x01h\x01w Digital Distortion Message Reader "
+ "requires version \x01g3.15\x01w or\r\n"
+ "requires version \x01g3.18\x01w or\r\n"
+ "higher of Synchronet. This BBS is using version \x01g" + system.version
+ "\x01w. Please notify the sysop.";
console.crlf();
......@@ -142,7 +143,6 @@ require("text.js", "Email"); // Text string definitions (referencing text.dat)
require("utf8_cp437.js", "utf8_cp437");
require("userdefs.js", "USER_UTF8");
require("dd_lightbar_menu.js", "DDLightbarMenu");
require("mouse_getkey.js", "mouse_getkey");
require("html2asc.js", 'html2asc');
require("attr_conv.js", "convertAttrsToSyncPerSysCfg");
require("graphic.js", 'Graphic');
......@@ -151,8 +151,8 @@ var ansiterm = require("ansiterm_lib.js", 'expand_ctrl_a');
 
 
// Reader version information
var READER_VERSION = "1.52 Beta";
var READER_DATE = "2022-07-06";
var READER_VERSION = "1.52";
var READER_DATE = "2022-07-09";
 
// Keyboard key codes for displaying on the screen
var UP_ARROW = ascii(24);
......@@ -260,6 +260,10 @@ var BLOCK1 = "\xB0"; // Dimmest block
var BLOCK2 = "\xB1";
var BLOCK3 = "\xB2";
var BLOCK4 = "\xDB"; // Brightest block
var MID_BLOCK = "\xDC";
var TALL_UPPER_MID_BLOCK = "\xFE";
var UPPER_CENTER_BLOCK = "\xDF";
var LOWER_CENTER_BLOCK = "\xDC";
 
 
const ERROR_PAUSE_WAIT_MS = 1500;
......@@ -894,10 +898,6 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs)
// extended read mode
this.numTabSpaces = 3;
 
// Things for mouse support
this.mouseTimeout = 0; // Timeout in ms. Currently using 0 for no timeout.
this.mouseEnabled = false; // To pass to mouse_getkey
// this.text is an object containing text used for various prompts & functions.
this.text = {
scrollbarBGChar: BLOCK1,
......@@ -1097,9 +1097,6 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs)
// Enhanced reader help line (will be set up in
// DigDistMsgReader_SetEnhancedReaderHelpLine())
this.enhReadHelpLine = "";
// This array will store object with x and y coordinates for mouse click locations
// for the enhanced reader help line, as well as a string describing the action.
this.enhReadHelpLineClickCoords = [];
 
// Read the enhanced message header file and populate this.enhMsgHeaderLines,
// the header text for enhanced reader mode. The enhanced reader header file
......@@ -1292,43 +1289,44 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs)
this.subBoardListHdrPrintfStr = this.colors.areaChooserMsgAreaHeaderColor + " %5s %-"
+ +(this.subBoardNameLen-3) + "s %-7s %-19s";
// Lightbar area chooser help line text
// For PageUp, normally I'd think KEY_PAGEUP should work, but that triggers sending a telegram instead. \x1b[V seems to work though.
this.lightbarAreaChooserHelpLine = "\x01n"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + ""
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@CLEAR_HOT@@`" + UP_ARROW + "`" + KEY_UP + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + ""
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`" + DOWN_ARROW + "`" + KEY_DOWN + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "HOME"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`HOME`" + KEY_HOME + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "END"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`END`" + KEY_END + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "#"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "PgUp"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`PgUp`" + "\x1b[V" + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + "/"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "Dn"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`Dn`" + KEY_PAGEDN + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "F"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`F`F@"
+ this.colors.lightbarAreaChooserHelpLineParenColor + ")"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + "irst pg, "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "L"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`L`L@"
+ this.colors.lightbarAreaChooserHelpLineParenColor + ")"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + "ast pg, "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "CTRL-F"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`CTRL-F`" + CTRL_F + "@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "/"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`/`/@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "N"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`N`N@"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + ", "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "Q"
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`Q`Q@"
+ this.colors.lightbarAreaChooserHelpLineParenColor + ")"
+ this.colors.lightbarAreaChooserHelpLineGeneralColor + "uit, "
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "?";
+ this.colors.lightbarAreaChooserHelpLineHotkeyColor + "@`?`?@";
var lbAreaChooserHelpLineLen = 72;
// Pad the lightbar key help text on either side to center it on the screen
// (but leave off the last character to avoid screen drawing issues)
var textLen = strip_ctrl(this.lightbarAreaChooserHelpLine).length;
var padLen = console.screen_columns - textLen - 1;
var padLen = console.screen_columns - lbAreaChooserHelpLineLen - 1;
var leftPadLen = Math.floor(padLen/2);
var rightPadLen = padLen - leftPadLen - 2;
var rightPadLen = padLen - leftPadLen;
this.lightbarAreaChooserHelpLine = this.colors.lightbarAreaChooserHelpLineGeneralColor
+ format("%" + leftPadLen + "s", "")
+ this.lightbarAreaChooserHelpLine
......@@ -3402,6 +3400,7 @@ function DigDistMsgReader_ListMessages_Lightbar(pAllowChgSubBoard)
function DisplayHelpLine(pHelpLineText)
{
console.gotoxy(1, console.screen_rows);
// Mouse: console.print replaced with console.putmsg for mouse click hotspots
//console.print(pHelpLineText);
console.putmsg(pHelpLineText); // console.putmsg() can process @-codes, which we use for mouse click tracking
console.cleartoeol("\x01n");
......@@ -4676,15 +4675,7 @@ function DigDistMsgReader_ReadMessageEnhanced_Scrollable(msgHeader, allowChgMsgA
this.colors.msgBodyColor, writeMessage,
this.msgAreaLeft, this.msgAreaTop, this.msgAreaWidth,
msgAreaHeight, 1, console.screen_rows,
msgScrollbarUpdateFn, scrollbarInfoObj,
this.enhReadHelpLineClickCoords);
if (scrollRetObj.mouse != null)
{
// See if there was a click in one of the reader help line click coordinates
var clickCoordRetObj = this.ScrollReaderDetermineClickCoordAction(scrollRetObj, this.enhReadHelpLineClickCoords);
if (clickCoordRetObj.actionStr.length > 0)
scrollRetObj.lastKeypress = clickCoordRetObj.actionStr; // A bit of a kludge
}
msgScrollbarUpdateFn, scrollbarInfoObj);
topMsgLineIdx = scrollRetObj.topLineIdx;
retObj.lastKeypress = scrollRetObj.lastKeypress;
switch (retObj.lastKeypress)
......@@ -6594,6 +6585,7 @@ function DigDistMsgReader_DisplayEnhancedMsgReadHelpLine(pScreenRow, pDisplayChg
var displayChgAreaOpt = (typeof(pDisplayChgAreaOpt) == "boolean" ? pDisplayChgAreaOpt : true);
// Move the cursor to the desired location on the screen and display the help line
console.gotoxy(1, typeof(pScreenRow) == "number" ? pScreenRow : console.screen_rows);
// TODO: Mouse: console.print replaced with console.putmsg for mouse click hotspots
//console.print(displayChgAreaOpt ? this.enhReadHelpLine : this.enhReadHelpLineWithoutChgArea);
// console.putmsg() handles @-codes, which we use for mouse click tracking
console.putmsg(displayChgAreaOpt ? this.enhReadHelpLine : this.enhReadHelpLineWithoutChgArea);
......@@ -7304,16 +7296,7 @@ function DigDistMsgReader_DisplayMessageListNotesHelp()
// appropriate keys to the prompt & help text.
function DigDistMsgReader_SetMsgListPauseTextAndLightbarHelpLine()
{
/*
var helpLineHotkeyColor = "\x01r";
var helpLineNormalColor = "\x01b";
var helpLineParenColor = "\x01m";
*/
/*
this.colors.lightbarMsgListHelpLineGeneralColor
this.colors.lightbarMsgListHelpLineHotkeyColor
this.colors.lightbarMsgListHelpLineParenColor
*/
 
// Set the traditional UI pause prompt text.
// If the user can delete messages, then append D as a valid key.
......@@ -7423,25 +7406,26 @@ function DigDistMsgReader_SetMsgListPauseTextAndLightbarHelpLine()
+ this.colors["tradInterfaceContPromptUserInputColor"];
 
// Set the lightbar help text for message listing. The @-codes are for mouse click tracking.
this.msgListLightbarModeHelpLine = this.colors.lightbarMsgListHelpLineHotkeyColor + '@CLEAR_HOT@@`' + UP_ARROW + '`\x1e@'
// For PageUp, normally I'd think KEY_PAGEUP should work, but that triggers sending a telegram instead. \x1b[V seems to work though.
this.msgListLightbarModeHelpLine = this.colors.lightbarMsgListHelpLineHotkeyColor + "@CLEAR_HOT@@`" + UP_ARROW + "`" + KEY_UP + "@"
+ this.colors.lightbarMsgListHelpLineGeneralColor + ", "
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`' + DOWN_ARROW + '`\x0a@'
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`" + DOWN_ARROW + "`" + KEY_DOWN + "@"
+ this.colors.lightbarMsgListHelpLineGeneralColor + ", "
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`PgUp`\x1b[V@'
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`PgUp`" + "\x1b[V" + "@"
+ this.colors.lightbarMsgListHelpLineGeneralColor + "/"
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`Dn`\x0e@'
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`Dn`" + KEY_PAGEDN + "@"
+ this.colors.lightbarMsgListHelpLineGeneralColor + ", "
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`ENTER`\x0d@'
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`ENTER`" + KEY_ENTER + "@"
+ this.colors.lightbarMsgListHelpLineGeneralColor + ", "
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`HOME`\x02@'
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`HOME`" + KEY_HOME + "@"
+ this.colors.lightbarMsgListHelpLineGeneralColor + ", "
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`END`\x05@';
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`END`" + KEY_END + "@";
var lbHelpLineLen = 31;
// If the user can delete messages, then append DEL as a valid key.
if (this.CanDelete() || this.CanDeleteLastMsg())
{
this.msgListLightbarModeHelpLine += this.colors.lightbarMsgListHelpLineGeneralColor + ", "
+ this.colors.lightbarMsgListHelpLineHotkeyColor + '@`DEL`\x7f@';
+ this.colors.lightbarMsgListHelpLineHotkeyColor + "@`DEL`" + KEY_DEL + "@";
lbHelpLineLen += 5;
}
this.msgListLightbarModeHelpLine += this.colors.lightbarMsgListHelpLineGeneralColor
......@@ -7490,42 +7474,44 @@ function DigDistMsgReader_SetMsgListPauseTextAndLightbarHelpLine()
// reader mode
function DigDistMsgReader_SetEnhancedReaderHelpLine()
{
this.enhReadHelpLine = this.colors.enhReaderHelpLineHotkeyColor + UP_ARROW
// For PageUp, normally I'd think KEY_PAGEUP should work, but that triggers sending a telegram instead. \x1b[V seems to work though.
this.enhReadHelpLine = this.colors.enhReaderHelpLineHotkeyColor + "@CLEAR_HOT@@`" + UP_ARROW + "`" + KEY_UP + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + DOWN_ARROW
+ this.colors.enhReaderHelpLineHotkeyColor + "@`" + DOWN_ARROW + "`" + KEY_DOWN + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + LEFT_ARROW
+ this.colors.enhReaderHelpLineHotkeyColor + "@`" + LEFT_ARROW + "`" + KEY_LEFT + "@"
+ this.colors.enhReaderHelpLineGeneralColor +", "
+ this.colors.enhReaderHelpLineHotkeyColor + RIGHT_ARROW
+ this.colors.enhReaderHelpLineHotkeyColor + "@`" + RIGHT_ARROW + "`" + KEY_RIGHT + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + "PgUp"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`PgUp`" + "\x1b[V" + "@"
+ this.colors.enhReaderHelpLineGeneralColor + "/"
+ this.colors.enhReaderHelpLineHotkeyColor + "Dn"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`Dn`" + KEY_PAGEDN + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + "HOME"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`HOME`" + KEY_HOME + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + "END"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`END`" + KEY_END + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor;
if (this.CanDelete() || this.CanDeleteLastMsg())
this.enhReadHelpLine += "DEL" + this.colors.enhReaderHelpLineGeneralColor + ", " + this.colors.enhReaderHelpLineHotkeyColor;
this.enhReadHelpLine += "@`DEL`" + KEY_DEL + "@" + this.colors.enhReaderHelpLineGeneralColor + ", " + this.colors.enhReaderHelpLineHotkeyColor;
if (this.CanEdit() && (console.screen_columns > 87))
this.enhReadHelpLine += "E" + this.colors.enhReaderHelpLineParenColor + ")" + this.colors.enhReaderHelpLineGeneralColor + "dit, " + this.colors.enhReaderHelpLineHotkeyColor;
this.enhReadHelpLine += "F" + this.colors.enhReaderHelpLineParenColor + ")"
this.enhReadHelpLine += "@`E`E@" + this.colors.enhReaderHelpLineParenColor + ")" + this.colors.enhReaderHelpLineGeneralColor + "dit, " + this.colors.enhReaderHelpLineHotkeyColor;
this.enhReadHelpLine += "@`F`F@" + this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "irst, "
+ this.colors.enhReaderHelpLineHotkeyColor + "L"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`L`L@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "ast, "
+ this.colors.enhReaderHelpLineHotkeyColor + "R"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`R`R@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "eply, "
+ this.colors.enhReaderHelpLineHotkeyColor + "C"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`C`C@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "hg area, "
+ this.colors.enhReaderHelpLineHotkeyColor + "Q"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`Q`Q@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "uit, "
+ this.colors.enhReaderHelpLineHotkeyColor + "?";
+ this.colors.enhReaderHelpLineHotkeyColor + "@`?`?@";
// Center the help text based on the console width
var numCharsRemaining = console.screen_columns - console.strlen(this.enhReadHelpLine) - 1;
var numCharsOnEachSide = Math.floor(numCharsRemaining/2);
......@@ -7545,39 +7531,41 @@ function DigDistMsgReader_SetEnhancedReaderHelpLine()
}
 
// Create a version without the change area option
this.enhReadHelpLineWithoutChgArea = this.colors.enhReaderHelpLineHotkeyColor + UP_ARROW
// For PageUp, normally I'd think KEY_PAGEUP should work, but that triggers sending a telegram instead. \x1b[V seems to work though.
this.enhReadHelpLineWithoutChgArea = this.colors.enhReaderHelpLineHotkeyColor + "@CLEAR_HOT@ @`" + UP_ARROW + "`" + KEY_UP + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + DOWN_ARROW
+ this.colors.enhReaderHelpLineHotkeyColor + "@`" + DOWN_ARROW + "`" + KEY_DOWN + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + LEFT_ARROW
+ this.colors.enhReaderHelpLineHotkeyColor + "@`" + LEFT_ARROW + "`" + KEY_LEFT + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + RIGHT_ARROW
+ this.colors.enhReaderHelpLineHotkeyColor + "@`" + RIGHT_ARROW + "`" + KEY_RIGHT + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + "PgUp"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`PgUp`" + "\x1b[V" + "@"
+ this.colors.enhReaderHelpLineGeneralColor + "/"
+ this.colors.enhReaderHelpLineHotkeyColor + "Dn"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`Dn`" + KEY_PAGEDN + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + "HOME"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`HOME`" + KEY_HOME + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor + "END"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`END`" + KEY_END + "@"
+ this.colors.enhReaderHelpLineGeneralColor + ", "
+ this.colors.enhReaderHelpLineHotkeyColor;
if (this.CanDelete() || this.CanDeleteLastMsg())
this.enhReadHelpLineWithoutChgArea += "DEL" + this.colors.enhReaderHelpLineGeneralColor + ", " + this.colors.enhReaderHelpLineHotkeyColor;
this.enhReadHelpLineWithoutChgArea += "@`DEL`" + KEY_DEL + "@" + this.colors.enhReaderHelpLineGeneralColor + ", " + this.colors.enhReaderHelpLineHotkeyColor;
if (this.CanEdit())
this.enhReadHelpLineWithoutChgArea += "E" + this.colors.enhReaderHelpLineParenColor + ")" + this.colors.enhReaderHelpLineGeneralColor + "dit, " + this.colors.enhReaderHelpLineHotkeyColor;
this.enhReadHelpLineWithoutChgArea += "F" + this.colors.enhReaderHelpLineParenColor + ")"
this.enhReadHelpLineWithoutChgArea += "@`E`E@" + this.colors.enhReaderHelpLineParenColor + ")" + this.colors.enhReaderHelpLineGeneralColor + "dit, " + this.colors.enhReaderHelpLineHotkeyColor;
this.enhReadHelpLineWithoutChgArea += "@`F`F@" + this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "irst, "
+ this.colors.enhReaderHelpLineHotkeyColor + "L"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`L`L@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "ast, "
+ this.colors.enhReaderHelpLineHotkeyColor + "R"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`R`R@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "eply, "
+ this.colors.enhReaderHelpLineHotkeyColor + "Q"
+ this.colors.enhReaderHelpLineHotkeyColor + "@`Q`Q@"
+ this.colors.enhReaderHelpLineParenColor + ")"
+ this.colors.enhReaderHelpLineGeneralColor + "uit, "
+ this.colors.enhReaderHelpLineHotkeyColor + "?";
+ this.colors.enhReaderHelpLineHotkeyColor + "@`?`?@ ";
// Center the help text based on the console width
numCharsRemaining = console.screen_columns - console.strlen(this.enhReadHelpLineWithoutChgArea) - 2;
numCharsOnEachSide = Math.floor(numCharsRemaining/2);
......@@ -7594,31 +7582,6 @@ function DigDistMsgReader_SetEnhancedReaderHelpLine()
for (var i = 0; i < numCharsRemaining; ++i)
this.enhReadHelpLineWithoutChgArea += " ";
}
// Set up this.enhReadHelpLineClickCoords as an array of objects containing X and Y
// coordinates for mouse click coordinates
this.enhReadHelpLineClickCoords = [];
var helpLineNoAttrs = stripCtrlFromEnhReadHelpLine_ReplaceArrowChars(this.enhReadHelpLine);
var clickX = 0;
var toSearch = [UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, "PgUp", "Dn,", "HOME", "END", "DEL",
"E)", "F)", "L)", "R)", "C)", "Q)", "?"];
for (var i = 0; i < toSearch.length; ++i)
{
var helpLineIdx = helpLineNoAttrs.indexOf(toSearch[i]);
if (helpLineIdx > -1)
{
// TODO: We don't really need to include the ) on the ones with the ). That is
// just to ensure we find the right ones.
for (var strI = 0; strI < toSearch[i].length; ++strI)
{
var clickInfoObj = { x: helpLineIdx+strI+1,
y: console.screen_rows,
actionStr: toSearch[i]
};
this.enhReadHelpLineClickCoords.push(clickInfoObj);
}
}
}
}
function stripCtrlFromEnhReadHelpLine_ReplaceArrowChars(pHelpLine)
{
......@@ -8238,17 +8201,18 @@ function DigDistMsgReader_DisplaySyncMsgHeader(pMsgHdr)
// Generate a string describing the message attributes, then output the default
// header.
var allMsgAttrStr = makeAllMsgAttrStr(pMsgHdr);
console.print("\x01n\x01w���������������������������������������������������������������������������۲��");
console.print("\x01n\x01w" + charStr(HORIZONTAL_DOUBLE, 78));
console.crlf();
console.print("\x01n\x01w�����\x01cFrom\x01w\x01h: \x01b" + pMsgHdr["from"].substr(0, console.screen_columns-12));
var horizSingleFive = charStr(HORIZONTAL_SINGLE, 5);
console.print("\x01n\x01w" + horizSingleFive + "\x01cFrom\x01w\x01h: \x01b" + pMsgHdr["from"].substr(0, console.screen_columns-12));
console.crlf();
console.print("\x01n\x01w�����\x01cTo \x01w\x01h: \x01b" + pMsgHdr["to"].substr(0, console.screen_columns-12));
console.print("\x01n\x01w" + horizSingleFive + "\x01cTo \x01w\x01h: \x01b" + pMsgHdr["to"].substr(0, console.screen_columns-12));
console.crlf();
console.print("\x01n\x01w�����\x01cSubj\x01w\x01h: \x01b" + pMsgHdr["subject"].substr(0, console.screen_columns-12));
console.print("\x01n\x01w" + horizSingleFive + "\x01cSubj\x01w\x01h: \x01b" + pMsgHdr["subject"].substr(0, console.screen_columns-12));
console.crlf();
console.print("\x01n\x01w�����\x01cDate\x01w\x01h: \x01b" + dateTimeStr.substr(0, console.screen_columns-12));
console.print("\x01n\x01w" + horizSingleFive + "\x01cDate\x01w\x01h: \x01b" + dateTimeStr.substr(0, console.screen_columns-12));
console.crlf();
console.print("\x01n\x01w�����\x01cAttr\x01w\x01h: \x01b" + allMsgAttrStr.substr(0, console.screen_columns-12));
console.print("\x01n\x01w" + horizSingleFive + "\x01cAttr\x01w\x01h: \x01b" + allMsgAttrStr.substr(0, console.screen_columns-12));
console.crlf();
}
}
......@@ -10579,7 +10543,9 @@ function DigDistMsgReader_PromptAndDeleteSelectedMessages(pPromptLoc, pClearProm
function DigDistMsgReader_WriteLightbarChgMsgAreaKeysHelpLine()
{
console.gotoxy(1, console.screen_rows);
console.print(this.lightbarAreaChooserHelpLine);
//console.print(this.lightbarAreaChooserHelpLine);
console.putmsg(this.lightbarAreaChooserHelpLine); // console.putmsg() can process @-codes, which we use for mouse click tracking
console.print("\x01n");
}
 
// For the DigDistMsgReader class: Outputs the header line to appear above
......@@ -10981,7 +10947,7 @@ function DigDistMsgReader_SelectMsgArea_Traditional()
//console.crlf();
this.ListMsgGrps(grpSearchText);
console.crlf();
console.print("\x01n\x01b\x01h \x01n\x01cWhich, \x01h/\x01n\x01c or \x01hCTRL-F\x01n\x01c, \x01hQ\x01n\x01cuit, or [\x01h" +
console.print("\x01n\x01b\x01h" + TALL_UPPER_MID_BLOCK + " \x01n\x01cWhich, \x01h/\x01n\x01c or \x01hCTRL-F\x01n\x01c, \x01hQ\x01n\x01cuit, or [\x01h" +
+(msg_area.sub[this.subBoardCode].grp_index+1) + "\x01n\x01c]: \x01h");
// Accept Q (quit), / or CTRL_F (Search) or a file library number
selectedGrp = console.getkeys("Q/" + CTRL_F, msg_area.grp_list.length);
......@@ -11036,7 +11002,7 @@ function DigDistMsgReader_SelectMsgArea_Traditional()
this.DisplayAreaChgHdr();
this.ListSubBoardsInMsgGroup(selectedGrp-1, defaultSubBoard-1, null, subSearchText);
console.crlf();
console.print("\x01n\x01b\x01h \x01n\x01cWhich, \x01h/\x01n\x01c or \x01hCTRL-F\x01n\x01c, \x01hQ\x01n\x01cuit, or [\x01h" +
console.print("\x01n\x01b\x01h" + TALL_UPPER_MID_BLOCK + " \x01n\x01cWhich, \x01h/\x01n\x01c or \x01hCTRL-F\x01n\x01c, \x01hQ\x01n\x01cuit, or [\x01h" +
defaultSubBoard + "\x01n\x01c]: \x01h");
// Accept Q (quit), / or CTRL_F (Search) or a sub-board number
selectedSubBoard = console.getkeys("Q/" + CTRL_F, msg_area.grp_list[selectedGrp - 1].sub_list.length);
......@@ -11529,7 +11495,7 @@ function DigDistMsgReader_showChooseMsgAreaHelpScreen(pLightbar, pClearScreen)
console.crlf();
console.print("\x01n\x01c\x01hMessage area (sub-board) chooser");
console.crlf();
console.print("\x01k��������������������������������\x01n");
console.print("\x01k" + charStr(HORIZONTAL_SINGLE, 32) + "\x01n");
console.crlf();
console.print("\x01cFirst, a listing of message groups is displayed. One can be chosen by typing");
console.crlf();
......@@ -11541,7 +11507,7 @@ function DigDistMsgReader_showChooseMsgAreaHelpScreen(pLightbar, pClearScreen)
console.crlf();
console.print("Keyboard commands:");
console.crlf();
console.print("\x01k\x01h�����������������\x01n");
console.print("\x01k\x01h" + charStr(HORIZONTAL_SINGLE, 18) + "\x01n");
console.crlf();
console.print("\x01n\x01c\x01h/\x01n\x01c or \x01hCTRL-F\x01n\x01c: Find group/sub-board");
console.crlf();
......@@ -11555,7 +11521,7 @@ function DigDistMsgReader_showChooseMsgAreaHelpScreen(pLightbar, pClearScreen)
console.crlf();
console.print("\x01n\x01cThe lightbar interface also allows up & down navigation through the lists:");
console.crlf();
console.print("\x01k\x01h��������������������������������������������������������������������������");
console.print("\x01k\x01h" + charStr(HORIZONTAL_SINGLE, 74));
console.crlf();
console.print("\x01n\x01c\x01hUp\x01n\x01c/\x01hdown arrow\x01n\x01c: Move the cursor up/down one line");
console.crlf();
......@@ -15178,14 +15144,9 @@ function userHandleAliasNameMatch(pName)
// Return value: An object with the following properties:
// lastKeypress: The last key pressed by the user (a string)
// topLineIdx: The new top line index of the text lines, in case of scrolling
// mouse: An object containing mouse event information, or null
// if the user didn't use the mouse on the last user input
// TODO: Use the parameter pOutsideMouseEventCoords for X & Y coordinates of mouse click
// coordinates outside the scrollable region so that calling code can respond to those
// mouse events
function scrollTextLines(pTxtLines, pTopLineIdx, pTxtAttrib, pWriteTxtLines, pTopLeftX, pTopLeftY,
pWidth, pHeight, pPostWriteCurX, pPostWriteCurY, pScrollUpdateFn,
pScrollbarInfo, pOutsideMouseEventCoords)
pScrollbarInfo)
{
// Variables for the top line index for the last page, scrolling, etc.
var topLineIdxForLastPage = pTxtLines.length - pHeight;
......@@ -15200,8 +15161,7 @@ function scrollTextLines(pTxtLines, pTopLineIdx, pTxtAttrib, pWriteTxtLines, pTo
 
var retObj = {
lastKeypress: "",
topLineIdx: pTopLineIdx,
mouse: null
topLineIdx: pTopLineIdx
};
 
// Create an array of color/attribute codes for each line of
......@@ -15257,133 +15217,7 @@ function scrollTextLines(pTxtLines, pTopLineIdx, pTxtAttrib, pWriteTxtLines, pTo
 
// Get a keypress from the user and take action based on it
console.gotoxy(pPostWriteCurX, pPostWriteCurY);
//retObj.lastKeypress = getKeyWithESCChars(K_UPPER|K_NOCRLF|K_NOECHO|K_NOSPIN);
var mk = mouse_getkey(K_NOCRLF|K_NOECHO|K_NOSPIN, this.mouseTimeout > 1 ? this.mouseTimeout : undefined, this.mouseEnabled);
retObj.mouse = mk.mouse;
var mouseNoAction = false;
if (mk.mouse !== null)
{
// See if the user clicked anywhere in the scrollable window area
var clickRegion = {
left: pTopLeftX,
//right: pTopLeftX + pWidth - 1,
right: pTopLeftX + pWidth,
top: pTopLeftY,
bottom: pTopLeftY + pHeight - 1
};
// Button 0 is the left/main mouse button
if (mk.mouse.press && (mk.mouse.button == 0) && (mk.mouse.motion == 0) &&
(mk.mouse.x >= clickRegion.left) && (mk.mouse.x <= clickRegion.right) &&
(mk.mouse.y >= clickRegion.top) && (mk.mouse.y <= clickRegion.bottom))
{
// If the scrollbar is enabled, then see if the mouse click was
// in the scrollbar region. If below the scrollbar bright blocks,
// then we'll want to do a PageDown. If above the scrollbar bright
// blocks, then we'll want to do a PageUp.
var scrollbarX = console.screen_columns;
if (mk.mouse.x == scrollbarX)
{
// If scrollbar information is available, then we can check to see if
// the mouse was clicked in the empty regions of the scrollbar.
if ((typeof(pScrollbarInfo) == "object") && pScrollbarInfo.hasOwnProperty("solidBlockLastStartRow") && pScrollbarInfo.hasOwnProperty("numSolidScrollBlocks"))
{
var scrollbarSolidBlockEndRow = pScrollbarInfo.solidBlockLastStartRow + pScrollbarInfo.numSolidScrollBlocks - 1;
if (mk.mouse.y < pScrollbarInfo.solidBlockLastStartRow)
retObj.lastKeypress = KEY_PAGE_UP;
else if (mk.mouse.y > scrollbarSolidBlockEndRow)
retObj.lastKeypress = KEY_PAGE_DOWN;
else
{
// Mouse click no-action
// TODO: Can we detect if they're holding the mouse down
// and scroll while the user holds the mouse & scrolls on
// the scrollbar?
retObj.lastKeypress = "";
mouseNoAction = true;
mouseInputOnly_continue = true;
}
}
else
{
// No mouse action
retObj.lastKeypress = "";
mouseNoAction = true;
mouseInputOnly_continue = true;
}
}
}
// If pOutsideMouseEventCoords is an array, then look through it
// for any coordinates outside of clickRegion, and if found,
// we'll want to exit the input loop and return.
else if((typeof(pOutsideMouseEventCoords) == "object") && (pOutsideMouseEventCoords.length > 0))
{
var foundOutsideCoord = false;
var coordActionStr = "";
for (var coordsIdx = 0; (coordsIdx < pOutsideMouseEventCoords.length) && !foundOutsideCoord; ++coordsIdx)
{
// If the current element has x & y properties, then
// if either the x & y coordinate is outside the scrollable
// region and the mouse click x & y coordinates match the current
// element's coordinates, then we've found an ousdide coordinate.
if (pOutsideMouseEventCoords[coordsIdx].hasOwnProperty("x") && pOutsideMouseEventCoords[coordsIdx].hasOwnProperty("y"))
{
var xCoordOutsideClickRegion = ((pOutsideMouseEventCoords[coordsIdx].x < clickRegion.left) || (pOutsideMouseEventCoords[coordsIdx].x > clickRegion.right));
var yCoordOutsideClickRegion = ((pOutsideMouseEventCoords[coordsIdx].y < clickRegion.top) || (pOutsideMouseEventCoords[coordsIdx].y > clickRegion.bottom));
if (xCoordOutsideClickRegion || yCoordOutsideClickRegion)
{
foundOutsideCoord = ((mk.mouse.x == pOutsideMouseEventCoords[coordsIdx].x) && (mk.mouse.y == pOutsideMouseEventCoords[coordsIdx].y));
if (foundOutsideCoord)
coordActionStr = pOutsideMouseEventCoords[coordsIdx].actionStr;
}
}
}
// If we found an outside coordinate, check to see if it's for a
// scroll navigation action. If not, then we went to exit the input loop.
if (foundOutsideCoord)
{
if (coordActionStr == UP_ARROW)
retObj.lastKeypress = KEY_UP;
else if (coordActionStr == DOWN_ARROW)
retObj.lastKeypress = KEY_DOWN;
else if (coordActionStr.indexOf("PgUp") == 0)
retObj.lastKeypress = KEY_PAGE_UP;
else if (coordActionStr.indexOf("Dn") == 0)
retObj.lastKeypress = KEY_PAGE_DOWN;
else if (coordActionStr.indexOf("HOME") == 0)
retObj.lastKeypress = KEY_HOME;
else if (coordActionStr.indexOf("END") == 0)
retObj.lastKeypress = KEY_END;
else
{
// The click coordinate is not for a scroll action, so
// we should exit the input loop to let the calling code
// handle it.
retObj.lastKeypress = "";
mouseNoAction = true;
mouseInputOnly_continue = false;
continueOn = false;
break;
}
}
}
else
{
// The mouse click is outside the click region. Set the appropriate
// variables for mouse no-action.
// TODO: Perhaps this may also need to be done in some places above
// where no action needs to be taken
retObj.lastKeypress = "";
mouseNoAction = true;
mouseInputOnly_continue = true;
}
}
else
{
// mouse is null, so a keybaord key must have been pressed
retObj.lastKeypress = mk.key.toUpperCase();
}
if (mouseInputOnly_continue)
continue;
retObj.lastKeypress = getKeyWithESCChars(K_UPPER|K_NOCRLF|K_NOECHO|K_NOSPIN);
if (!continueOn)
break;
 
......@@ -18519,6 +18353,24 @@ function textHasDrawingChars(pText)
return drawingCharsFound;
}
 
// Returns a string with a character repeated a given number of times
//
// Parameters:
// pChar: The character to repeat in the string
// pNumTimes: The number of times to repeat the character
//
// Return value: A string with the given character repeated the given number of times
function charStr(pChar, pNumTimes)
{
if (typeof(pChar) !== "string" || pChar.length == 0 || typeof(pNumTimes) !== "number" || pNumTimes < 1)
return "";
var str = "";
for (var i = 0; i < pNumTimes; ++i)
str += pChar;
return str;
}
// For debugging: Writes some text on the screen at a given location with a given pause.
//
// Parameters:
......
Digital Distortion Message Reader
Version 1.51
Release date: 2022-07-05
Version 1.52
Release date: 2022-07-09
by
......
......@@ -5,6 +5,8 @@ Revision History (change log)
=============================
Version Date Description
------- ---- -----------
1.52 2022-07-09 Mouse click support for the bottom help lines in scrolling
mode (thanks to help from Nelgin)
1.51 2022-07-05 Graphic is now only used when using the scrollable
interface. Also, when creating the Graphic, now
subtracting 1 from the reading area height to avoid making
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment