# HG changeset patch # User Josef 'Jeff' Sipek # Date 1669868256 18000 # Wed Nov 30 23:17:36 2022 -0500 # Node ID 9049b866600b42fc07dc38d72375bc8853c19747 # Parent c0d8ba93221087ef57d7a37e9d0b0b5cbc5beb56 hlog: display a short recent contact list for the current call Split the space used by the recent contacts list into two sections - a 5 line section showing the recent contacts for the call currently being worked on, and the remainder for the last N contacts regardless of call. Signed-off-by: Josef 'Jeff' Sipek diff --git a/hlog/contest.c b/hlog/contest.c --- a/hlog/contest.c +++ b/hlog/contest.c @@ -85,8 +85,12 @@ #define STATUS_WIN_WIDTH CURRENT_WIN_WIDTH #define STATUS_WIN_ROW (WORK_WIN_ROW + WORK_WIN_HEIGHT) #define STATUS_WIN_COL 0 +#define RECENT_WORK_WIN_WIDTH CURRENT_WIN_WIDTH +#define RECENT_WORK_WIN_ROW (STATUS_WIN_ROW + STATUS_WIN_HEIGHT) +#define RECENT_WORK_WIN_COL 0 +#define RECENT_WORK_WIN_HEIGHT 5 #define RECENT_WIN_WIDTH CURRENT_WIN_WIDTH -#define RECENT_WIN_ROW (STATUS_WIN_ROW + STATUS_WIN_HEIGHT) +#define RECENT_WIN_ROW (RECENT_WORK_WIN_ROW + RECENT_WORK_WIN_HEIGHT + 1) #define RECENT_WIN_COL 0 #define RECENT_WIN_HEIGHT (CURRENT_WIN_ROW - RECENT_WIN_ROW) @@ -124,6 +128,7 @@ static WINDOW *header_win; /* location & time */ static WINDOW *supercheck_win; +struct recent recent_work_list; /* current contact history */ struct recent recent_list; /* all history */ /* the currently active form */ @@ -436,6 +441,10 @@ CALLOUT_WIN_COL - 1, CALLOUT_WIN_WIDTH + 2, ACS_LLCORNER, ACS_HLINE, ACS_RTEE); + /* recent lists separator */ + xwhline(stdscr, RECENT_WIN_ROW - 1, 0, RECENT_WIN_WIDTH + 1, + ACS_HLINE, ACS_HLINE, ACS_RTEE); + wrefresh(stdscr); /* refresh all the lines */ /* header with status */ @@ -470,6 +479,12 @@ ERROR_COLOR); ASSERT0(ret); + /* recent QSOs for current call */ + ret = recent_init(&recent_work_list, RECENT_WORK_WIN_HEIGHT, + RECENT_WORK_WIN_WIDTH, RECENT_WORK_WIN_ROW, + RECENT_WORK_WIN_COL, false); + recent_refresh(&recent_work_list, NULL); + /* recent QSOs */ ret = recent_init(&recent_list, RECENT_WIN_HEIGHT, RECENT_WIN_WIDTH, RECENT_WIN_ROW, RECENT_WIN_COL, true); @@ -488,6 +503,7 @@ wrefresh(supercheck_win); xform_refresh(&work); status_refresh(); + recent_refresh(&recent_work_list, qso_get_station_call(&contact->rx)); recent_refresh(&recent_list, NULL); xform_refresh(¤t); @@ -637,6 +653,7 @@ draw_location(); draw_clock(); + recent_refresh(&recent_work_list, qso_get_station_call(&contact->rx)); recent_refresh(&recent_list, NULL); sync_current(); refresh_windows(); @@ -648,6 +665,7 @@ delwin(header_win); callout_destroy(); delwin(supercheck_win); + recent_destroy(&recent_work_list); recent_destroy(&recent_list); status_deinit(); diff --git a/hlog/contest/contest.h b/hlog/contest/contest.h --- a/hlog/contest/contest.h +++ b/hlog/contest/contest.h @@ -40,6 +40,7 @@ */ extern struct xform work; /* current QSO contest exchange */ extern struct xform current; /* current QSO in full */ +extern struct recent recent_work_list; /* current contact history */ extern struct recent recent_list; /* all history */ /* diff --git a/hlog/contest/ui-work.c b/hlog/contest/ui-work.c --- a/hlog/contest/ui-work.c +++ b/hlog/contest/ui-work.c @@ -180,28 +180,33 @@ case 127: xform_driver(form, XFORM_REQ_DEL_PREV); field_changed(L, *qso); /* inform script */ + recent_invalidate(&recent_work_list); break; case KEY_DC: xform_driver(form, XFORM_REQ_DEL_THIS); field_changed(L, *qso); /* inform script */ + recent_invalidate(&recent_work_list); break; /* navigate between forms */ case KEY_ENTER: case '\n': end_qso(L, qso); + recent_invalidate(&recent_work_list); recent_invalidate(&recent_list); break; case '\x1b': /* escape */ abort_qso(L, qso); + recent_invalidate(&recent_work_list); break; default: if (!iscntrl(ch)) { xform_driver(form, ch); field_changed(L, *qso); /* inform script */ + recent_invalidate(&recent_work_list); } else { beep(); }