150276Speter/**************************************************************************** 2262685Sdelphij * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * 350276Speter * * 450276Speter * Permission is hereby granted, free of charge, to any person obtaining a * 550276Speter * copy of this software and associated documentation files (the * 650276Speter * "Software"), to deal in the Software without restriction, including * 750276Speter * without limitation the rights to use, copy, modify, merge, publish, * 850276Speter * distribute, distribute with modifications, sublicense, and/or sell * 950276Speter * copies of the Software, and to permit persons to whom the Software is * 1050276Speter * furnished to do so, subject to the following conditions: * 1150276Speter * * 1250276Speter * The above copyright notice and this permission notice shall be included * 1350276Speter * in all copies or substantial portions of the Software. * 1450276Speter * * 1550276Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 1650276Speter * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 1750276Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 1850276Speter * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 1950276Speter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 2050276Speter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 2150276Speter * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 2250276Speter * * 2350276Speter * Except as contained in this notice, the name(s) of the above copyright * 2450276Speter * holders shall not be used in advertising or otherwise to promote the * 2550276Speter * sale, use or other dealings in this Software without prior written * 2650276Speter * authorization. * 2750276Speter ****************************************************************************/ 2850276Speter 2950276Speter/**************************************************************************** 3050276Speter * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * 3150276Speter * and: Eric S. Raymond <esr@snark.thyrsus.com> * 32166124Srafan * and: Juergen Pfeifer 1996-on * 33166124Srafan * and: Thomas E. Dickey * 3450276Speter ****************************************************************************/ 3550276Speter 3650276Speter/* 3750276Speter * lib_slkrefr.c 3850276Speter * Write SLK window to the (virtual) screen. 3950276Speter */ 4050276Speter#include <curses.priv.h> 4150276Speter 42262629Sdelphij#ifndef CUR 43262629Sdelphij#define CUR SP_TERMTYPE 44262629Sdelphij#endif 4550276Speter 46262685SdelphijMODULE_ID("$Id: lib_slkrefr.c,v 1.29 2013/01/12 17:25:48 tom Exp $") 47262629Sdelphij 48262629Sdelphij#ifdef USE_TERM_DRIVER 49262629Sdelphij#define NumLabels InfoOf(SP_PARM).numlabels 50262629Sdelphij#else 51262629Sdelphij#define NumLabels num_labels 52262629Sdelphij#endif 53262629Sdelphij 5450276Speter/* 55184989Srafan * Paint the info line for the PC style SLK emulation. 56184989Srafan */ 57184989Srafanstatic void 58184989Srafanslk_paint_info(WINDOW *win) 59184989Srafan{ 60184989Srafan SCREEN *sp = _nc_screen_of(win); 61184989Srafan 62184989Srafan if (win && sp && (sp->slk_format == 4)) { 63184989Srafan int i; 64184989Srafan 65262629Sdelphij (void) mvwhline(win, 0, 0, 0, getmaxx(win)); 66184989Srafan wmove(win, 0, 0); 67184989Srafan 68184989Srafan for (i = 0; i < sp->_slk->maxlab; i++) { 69184989Srafan mvwprintw(win, 0, sp->_slk->ent[i].ent_x, "F%d", i + 1); 70184989Srafan } 71184989Srafan } 72184989Srafan} 73184989Srafan 74184989Srafan/* 7550276Speter * Write the soft labels to the soft-key window. 7650276Speter */ 7750276Speterstatic void 78262629Sdelphijslk_intern_refresh(SCREEN *sp) 7950276Speter{ 8076726Speter int i; 81262629Sdelphij int fmt; 82262629Sdelphij SLK *slk; 83262629Sdelphij int numlab; 8450276Speter 85262629Sdelphij if (sp == 0) 86262629Sdelphij return; 87262629Sdelphij 88262629Sdelphij slk = sp->_slk; 89262629Sdelphij fmt = sp->slk_format; 90262629Sdelphij numlab = NumLabels; 91262629Sdelphij 92262629Sdelphij if (slk->hidden) 93262629Sdelphij return; 94262629Sdelphij 9576726Speter for (i = 0; i < slk->labcnt; i++) { 9676726Speter if (slk->dirty || slk->ent[i].dirty) { 9776726Speter if (slk->ent[i].visible) { 98262629Sdelphij if (numlab > 0 && SLK_STDFMT(fmt)) { 99262629Sdelphij#ifdef USE_TERM_DRIVER 100262629Sdelphij CallDriver_2(sp, hwlabel, i + 1, slk->ent[i].form_text); 101262629Sdelphij#else 10276726Speter if (i < num_labels) { 103262685Sdelphij NCURSES_PUTP2("plab_norm", 104262685Sdelphij TPARM_2(plab_norm, 105262685Sdelphij i + 1, 106262685Sdelphij slk->ent[i].form_text)); 10776726Speter } 108262629Sdelphij#endif 10976726Speter } else { 110184989Srafan if (fmt == 4) 111184989Srafan slk_paint_info(slk->win); 112166124Srafan wmove(slk->win, SLK_LINES(fmt) - 1, slk->ent[i].ent_x); 113262685Sdelphij (void) wattrset(slk->win, (int) AttrOf(slk->attr)); 114166124Srafan waddstr(slk->win, slk->ent[i].form_text); 11576726Speter /* if we simulate SLK's, it's looking much more 11676726Speter natural to use the current ATTRIBUTE also 11776726Speter for the label window */ 118262685Sdelphij (void) wattrset(slk->win, (int) WINDOW_ATTRS(StdScreen(sp))); 11950276Speter } 12076726Speter } 12176726Speter slk->ent[i].dirty = FALSE; 12250276Speter } 12376726Speter } 12476726Speter slk->dirty = FALSE; 12550276Speter 126262629Sdelphij if (numlab > 0) { 127262629Sdelphij#ifdef USE_TERM_DRIVER 128262629Sdelphij CallDriver_1(sp, hwlabelOnOff, slk->hidden ? FALSE : TRUE); 129262629Sdelphij#else 13076726Speter if (slk->hidden) { 131262685Sdelphij NCURSES_PUTP2("label_off", label_off); 13276726Speter } else { 133262685Sdelphij NCURSES_PUTP2("label_on", label_on); 13450276Speter } 135262629Sdelphij#endif 13676726Speter } 13750276Speter} 13850276Speter 13950276Speter/* 14050276Speter * Refresh the soft labels. 14150276Speter */ 14276726SpeterNCURSES_EXPORT(int) 143262629SdelphijNCURSES_SP_NAME(slk_noutrefresh) (NCURSES_SP_DCL0) 14450276Speter{ 145262629Sdelphij T((T_CALLED("slk_noutrefresh(%p)"), (void *) SP_PARM)); 14650276Speter 147262629Sdelphij if (SP_PARM == 0 || SP_PARM->_slk == 0) 14876726Speter returnCode(ERR); 149262629Sdelphij if (SP_PARM->_slk->hidden) 15076726Speter returnCode(OK); 151262629Sdelphij slk_intern_refresh(SP_PARM); 15250276Speter 153262629Sdelphij returnCode(wnoutrefresh(SP_PARM->_slk->win)); 15450276Speter} 15550276Speter 156262629Sdelphij#if NCURSES_SP_FUNCS 157262629SdelphijNCURSES_EXPORT(int) 158262629Sdelphijslk_noutrefresh(void) 159262629Sdelphij{ 160262629Sdelphij return NCURSES_SP_NAME(slk_noutrefresh) (CURRENT_SCREEN); 161262629Sdelphij} 162262629Sdelphij#endif 163262629Sdelphij 16450276Speter/* 16550276Speter * Refresh the soft labels. 16650276Speter */ 16776726SpeterNCURSES_EXPORT(int) 168262629SdelphijNCURSES_SP_NAME(slk_refresh) (NCURSES_SP_DCL0) 16950276Speter{ 170262629Sdelphij T((T_CALLED("slk_refresh(%p)"), (void *) SP_PARM)); 17150276Speter 172262629Sdelphij if (SP_PARM == 0 || SP_PARM->_slk == 0) 17376726Speter returnCode(ERR); 174262629Sdelphij if (SP_PARM->_slk->hidden) 17576726Speter returnCode(OK); 176262629Sdelphij slk_intern_refresh(SP_PARM); 17750276Speter 178262629Sdelphij returnCode(wrefresh(SP_PARM->_slk->win)); 17950276Speter} 180262629Sdelphij 181262629Sdelphij#if NCURSES_SP_FUNCS 182262629SdelphijNCURSES_EXPORT(int) 183262629Sdelphijslk_refresh(void) 184262629Sdelphij{ 185262629Sdelphij return NCURSES_SP_NAME(slk_refresh) (CURRENT_SCREEN); 186262629Sdelphij} 187262629Sdelphij#endif 188