Copy link to clipboard
Copied
I have set up notifications to determine the switch between book and document for these triggers:
105 FA_Note_PostActiveDocChange
2 FA_Note_PostOpenDoc
77 FA_Note_PostBookComponentOpen
17 FA_Note_PostOpenBook
Now, when switching between nothing (aka Welcome screen), book window and document window I get mixed results.
Any ideas, how determine whether I have left the document window and entered the book window?
There must be a method. The open FM Find/Change dialog switches from document to book indication when I leave the document window and click into the book window.
Copy link to clipboard
Copied
Hi Klaus, on FM2019 I see FA_Note_PostActiveDocChange triggered for every combination that you list. In fact, it is sometime triggered multiple times when switching to and from "nothing."
How are you testing this? I did something very simple... I imagine you are doing the same.
Notification(Constants.FA_Note_PostActiveDocChange , true);
. . .
function Notify(note, object, sparam, iparam)
{
switch (note)
{
case Constants.FA_Note_PostActiveDocChange:
alert("Doc change");
break;
}
}
When testing, I would recommend that you restart FM between any change in notification setup. I feel that I have experienced unpredictable behavior trying to change notifications while FM is running.
Russ
Copy link to clipboard
Copied
Thank You, Russ, for your comments
«When testing, I would recommend that you restart FM between any change in notification setup.»
Yes this is absolutely essential - and it seems to be also important to close FM orderly so that
case Constants.FA_Note_PreQuitSession:
KLD_F.RemoveNotifications ();
break;
is also executed and the notifications be removed. I have found that they survive if FM is just killed.
I have tested again:
Both a book and a document are open
Activating (cklich into) the book window does not trigger FA_Note_PostActiveDocChange. Leaving the document focus obviously is not a "change", although the document is no more active.
Activating the document of course does.
I have no idea how to get a notification when the user leaves the document and enters the book window. In a Find panel the radio buttons ("find in") Book or Document should be automatically set from the situation (FM standard Find/Repl does).
Copy link to clipboard
Copied
Hi Klaus, I just checked again to be sure. I get notification when I leave the document and enter the book window. In fact, I get a double notification. I did not investigate why there are two. Maybe I'm getting your notification by accident 🙂
Jokes aside, I'm not sure what else to say, what could be different from your setup. As a reminder, I'm using FM2019, but I don't suspect that has anything to do with it.
Russ
Copy link to clipboard
Copied
Hi Russ,
I have now the same results as You and also see what the double alert is - an indication that I am in the book window...
/* E:\_DDDprojects\_JSX-library\TestOnly\CheckNotifications1.jsx
#target framemaker
Notification(Constants.FA_Note_PostActiveDocChange , true);
function Notify(iNote, object, sparam, iparam) {
Console ("Notify iNote = " + iNote + " obj " + object.constructor.name);
switch (iNote) {
case Constants.FA_Note_PostActiveDocChange:
alert("Doc change");
break;
}
}
Procedure:
Copy link to clipboard
Copied
Strange things happen in the book window. It looks like the software can bounce...
var lastNote = undefined; // global
Notification(Constants.FA_Note_PostActiveDocChange , true);
function Notify(iNote, object, sparam, iparam) {
Console ("iNote = " + iNote + "; obj " + object.constructor.name);
switch (iNote) {
case Constants.FA_Note_PostActiveDocChange:
if (lastNote == 105 && !object.ObjectValid()) {
Console ("Notify book recognised");
Console (" book: " + app.ActiveBook.Name);
} else {
Console ("Notify document recognised");
}
break;
}
lastNote = iNote;
Console ("");
}
I click in the current document → since no change of doc, no trigger
I click in another open document → first entry in log
Then i click in the book window → 2nd to 4th entry in log
I click in the current document → 5th entry in log
Notify iNote = 105 obj Doc
Notify document recognised
Notify iNote = 105 obj InvalidObject
Notify book recognised
book: E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
Notify iNote = 105 obj InvalidObject
Notify book recognised
book: E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
Notify iNote = 105 obj InvalidObject
Notify book recognised
book: E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
Notify iNote = 105 obj Doc
Notify document recognised
Edit
in all cases sparam is «null» and iparam is 0
Copy link to clipboard
Copied
Has anyone any ideas why I get a triple response (notice) for one click into the book window?
Copy link to clipboard
Copied
This test may help a little bit more to imagine what's going on in the book window:
#target framemaker
var lastNote = undefined, oLastObj = undefined; // global
Notification(Constants.FA_Note_PostActiveDocChange , true);
function Notify(iNote, object, sparam, iparam) {
Console ("iNote = " + iNote + "; obj " + object.constructor.name + "; sparam «" + sparam + "»; iparam " + iparam);
switch (iNote) {
case Constants.FA_Note_PostActiveDocChange:
if (lastNote == 105 && !object.ObjectValid()) { // switch from doc → book window
Console (" book " + app.ActiveBook.Name);
} else {
Console (" document " + object.Name);
}
break;
}
lastNote = iNote;
oLastObj = object;
Console ("");
}
Console log:
iNote = 105; obj Doc; sparam «null»; iparam 0 <<<< tip into document
document E:\_DDDprojects\FM-FindRepl\Developer-log.fm
iNote = 105; obj Doc; sparam «null»; iparam 0 <<<< tip into book A
book E:\FM-Specials\FM-15-tests\BookWindow\Book-example.book
iNote = 105; obj InvalidObject; sparam «null»; iparam 0
book E:\FM-Specials\FM-15-tests\BookWindow\Book-example.book
iNote = 105; obj InvalidObject; sparam «null»; iparam 0
book E:\FM-Specials\FM-15-tests\BookWindow\Book-example.book
iNote = 105; obj InvalidObject; sparam «null»; iparam 0
book E:\FM-Specials\FM-15-tests\BookWindow\Book-example.book
iNote = 105; obj Doc; sparam «null»; iparam 0 <<<< tip on tab of book B
book E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
iNote = 105; obj InvalidObject; sparam «null»; iparam 0
book E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
iNote = 105; obj InvalidObject; sparam «null»; iparam 0
book E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
iNote = 105; obj InvalidObject; sparam «null»; iparam 0
book E:\_DDDprojects\FM-JsxLib\Docu\FMjsxLib.book
iNote = 105; obj Doc; sparam «null»; iparam 0 <<<< file in book A clicked
document E:\FM-Specials\FM-15-tests\BookWindow\book-file-B.fm