campo-sirio/include/brwapp.cpp

108 lines
2.4 KiB
C++
Executable File

#include <brwapp.h>
#include <mailbox.h>
///////////////////////////////////////////////////////////
// TBrowse_application
///////////////////////////////////////////////////////////
void TBrowse_application::main_loop()
{
long recins = -1;
query_mode();
curr_mask().open_modal();
KEY k;
// Provoca l'autopremimento per il messaggio di LINK
if (lnflag()) curr_mask().send_key(K_AUTO_ENTER, 0);
do
{
// Dis/abilita cambio ditta
enable_menu_item(M_FILE_NEW, (curr_mask().mode() == MODE_QUERY));
k = curr_mask().run();
// Seleziona il cursore a clessidra se necessario
if (k != K_QUIT && k != K_F9)
xvt_scr_set_busy_cursor();
switch (k)
{
case K_ESC:
if (curr_mask().edit_mode())
file().reread(_unlock); // Unlock main file
if (curr_mask().query_mode())
{
curr_mask().reset();
set_fixed();
}
else query_mode();
if (lnflag()) k = K_QUIT;
break;
case K_QUIT:
if (curr_mask().mode() == MODE_MOD &&
(autoins_caller().not_empty() || lnflag()))
recins = file().recno();
break;
case K_ENTER:
if (find(0)) modify_mode();
else message_box("Registrazione assente"); // ocio
break;
case K_F9:
search_mode();
break;
default:
setkey();
int err = ~NOERR;
switch (k)
{
case K_HOME:
err = file().readat(first(), _testandlock);
break;
case K_NEXT:
err = file().reread();
err = file().next(_testandlock);
break;
case K_PREV:
err = file().reread();
err = file().prev(_testandlock);
break;
case K_END:
err = file().readat(last(), _testandlock);
break;
default:
break;
}
if (err == NOERR || err == _islocked) modify_mode();
else query_mode();
break;
}
if (k != K_QUIT && k != K_F9)
xvt_scr_reset_busy_cursor();
} while (k != K_QUIT);
if (curr_mask().is_open())
curr_mask().close_modal();
curr_mask().set_mode(NO_MODE);
if (recins > 0)
{
TString16 ri; ri << recins;
if (autoins_caller().not_empty())
{
TMessage msg(autoins_caller(), MSG_AI, ri);
msg.send();
}
if (lnflag())
{
TMessage msg(autoins_caller(), MSG_LN, ri);
msg.send();
}
}
}