blob: 382f9c4b00f7a2842aae38912e5dfa0d2c475a58 [file] [log] [blame]
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301/****************************************************************************
Steve Kondikae271bc2015-11-15 02:50:53 +01002 * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. *
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05303 * *
4 * Permission is hereby granted, free of charge, to any person obtaining a *
5 * copy of this software and associated documentation files (the *
6 * "Software"), to deal in the Software without restriction, including *
7 * without limitation the rights to use, copy, modify, merge, publish, *
8 * distribute, distribute with modifications, sublicense, and/or sell *
9 * copies of the Software, and to permit persons to whom the Software is *
10 * furnished to do so, subject to the following conditions: *
11 * *
12 * The above copyright notice and this permission notice shall be included *
13 * in all copies or substantial portions of the Software. *
14 * *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
18 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
21 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
22 * *
23 * Except as contained in this notice, the name(s) of the above copyright *
24 * holders shall not be used in advertising or otherwise to promote the *
25 * sale, use or other dealings in this Software without prior written *
26 * authorization. *
27 ****************************************************************************/
28
29/****************************************************************************
30 * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
31 * and: Eric S. Raymond <esr@snark.thyrsus.com> *
32 * and: Juergen Pfeifer 1996-on *
33 * and: Thomas E. Dickey *
34 ****************************************************************************/
35
36/*
37 * lib_slkrefr.c
38 * Write SLK window to the (virtual) screen.
39 */
40#include <curses.priv.h>
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053041
Steve Kondikae271bc2015-11-15 02:50:53 +010042#ifndef CUR
43#define CUR SP_TERMTYPE
44#endif
45
46MODULE_ID("$Id: lib_slkrefr.c,v 1.30 2014/03/08 20:32:59 tom Exp $")
47
48#ifdef USE_TERM_DRIVER
49#define NumLabels InfoOf(SP_PARM).numlabels
50#else
51#define NumLabels num_labels
52#endif
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053053
54/*
55 * Paint the info line for the PC style SLK emulation.
56 */
57static void
58slk_paint_info(WINDOW *win)
59{
60 SCREEN *sp = _nc_screen_of(win);
61
62 if (win && sp && (sp->slk_format == 4)) {
63 int i;
64
Steve Kondikae271bc2015-11-15 02:50:53 +010065 (void) mvwhline(win, 0, 0, 0, getmaxx(win));
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053066 wmove(win, 0, 0);
67
68 for (i = 0; i < sp->_slk->maxlab; i++) {
69 mvwprintw(win, 0, sp->_slk->ent[i].ent_x, "F%d", i + 1);
70 }
71 }
72}
73
74/*
75 * Write the soft labels to the soft-key window.
76 */
77static void
Steve Kondikae271bc2015-11-15 02:50:53 +010078slk_intern_refresh(SCREEN *sp)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053079{
80 int i;
Steve Kondikae271bc2015-11-15 02:50:53 +010081 int fmt;
82 SLK *slk;
83 int numlab;
84
85 if (sp == 0)
86 return;
87
88 slk = sp->_slk;
89 fmt = sp->slk_format;
90 numlab = NumLabels;
91
92 if (slk->hidden)
93 return;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053094
95 for (i = 0; i < slk->labcnt; i++) {
96 if (slk->dirty || slk->ent[i].dirty) {
97 if (slk->ent[i].visible) {
Steve Kondikae271bc2015-11-15 02:50:53 +010098 if (numlab > 0 && SLK_STDFMT(fmt)) {
99#ifdef USE_TERM_DRIVER
100 CallDriver_2(sp, td_hwlabel, i + 1, slk->ent[i].form_text);
101#else
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530102 if (i < num_labels) {
Steve Kondikae271bc2015-11-15 02:50:53 +0100103 NCURSES_PUTP2("plab_norm",
104 TPARM_2(plab_norm,
105 i + 1,
106 slk->ent[i].form_text));
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530107 }
Steve Kondikae271bc2015-11-15 02:50:53 +0100108#endif
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530109 } else {
110 if (fmt == 4)
111 slk_paint_info(slk->win);
112 wmove(slk->win, SLK_LINES(fmt) - 1, slk->ent[i].ent_x);
Steve Kondikae271bc2015-11-15 02:50:53 +0100113 (void) wattrset(slk->win, (int) AttrOf(slk->attr));
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530114 waddstr(slk->win, slk->ent[i].form_text);
115 /* if we simulate SLK's, it's looking much more
116 natural to use the current ATTRIBUTE also
117 for the label window */
Steve Kondikae271bc2015-11-15 02:50:53 +0100118 (void) wattrset(slk->win, (int) WINDOW_ATTRS(StdScreen(sp)));
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530119 }
120 }
121 slk->ent[i].dirty = FALSE;
122 }
123 }
124 slk->dirty = FALSE;
125
Steve Kondikae271bc2015-11-15 02:50:53 +0100126 if (numlab > 0) {
127#ifdef USE_TERM_DRIVER
128 CallDriver_1(sp, td_hwlabelOnOff, slk->hidden ? FALSE : TRUE);
129#else
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530130 if (slk->hidden) {
Steve Kondikae271bc2015-11-15 02:50:53 +0100131 NCURSES_PUTP2("label_off", label_off);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530132 } else {
Steve Kondikae271bc2015-11-15 02:50:53 +0100133 NCURSES_PUTP2("label_on", label_on);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530134 }
Steve Kondikae271bc2015-11-15 02:50:53 +0100135#endif
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530136 }
137}
138
139/*
140 * Refresh the soft labels.
141 */
142NCURSES_EXPORT(int)
Steve Kondikae271bc2015-11-15 02:50:53 +0100143NCURSES_SP_NAME(slk_noutrefresh) (NCURSES_SP_DCL0)
144{
145 T((T_CALLED("slk_noutrefresh(%p)"), (void *) SP_PARM));
146
147 if (SP_PARM == 0 || SP_PARM->_slk == 0)
148 returnCode(ERR);
149 if (SP_PARM->_slk->hidden)
150 returnCode(OK);
151 slk_intern_refresh(SP_PARM);
152
153 returnCode(wnoutrefresh(SP_PARM->_slk->win));
154}
155
156#if NCURSES_SP_FUNCS
157NCURSES_EXPORT(int)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530158slk_noutrefresh(void)
159{
Steve Kondikae271bc2015-11-15 02:50:53 +0100160 return NCURSES_SP_NAME(slk_noutrefresh) (CURRENT_SCREEN);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530161}
Steve Kondikae271bc2015-11-15 02:50:53 +0100162#endif
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530163
164/*
165 * Refresh the soft labels.
166 */
167NCURSES_EXPORT(int)
Steve Kondikae271bc2015-11-15 02:50:53 +0100168NCURSES_SP_NAME(slk_refresh) (NCURSES_SP_DCL0)
169{
170 T((T_CALLED("slk_refresh(%p)"), (void *) SP_PARM));
171
172 if (SP_PARM == 0 || SP_PARM->_slk == 0)
173 returnCode(ERR);
174 if (SP_PARM->_slk->hidden)
175 returnCode(OK);
176 slk_intern_refresh(SP_PARM);
177
178 returnCode(wrefresh(SP_PARM->_slk->win));
179}
180
181#if NCURSES_SP_FUNCS
182NCURSES_EXPORT(int)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530183slk_refresh(void)
184{
Steve Kondikae271bc2015-11-15 02:50:53 +0100185 return NCURSES_SP_NAME(slk_refresh) (CURRENT_SCREEN);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530186}
Steve Kondikae271bc2015-11-15 02:50:53 +0100187#endif