1// * this is for making emacs happy: -*-Mode: C++;-*- 2/**************************************************************************** 3 * Copyright (c) 1998-2003,2005 Free Software Foundation, Inc. * 4 * * 5 * Permission is hereby granted, free of charge, to any person obtaining a * 6 * copy of this software and associated documentation files (the * 7 * "Software"), to deal in the Software without restriction, including * 8 * without limitation the rights to use, copy, modify, merge, publish, * 9 * distribute, distribute with modifications, sublicense, and/or sell * 10 * copies of the Software, and to permit persons to whom the Software is * 11 * furnished to do so, subject to the following conditions: * 12 * * 13 * The above copyright notice and this permission notice shall be included * 14 * in all copies or substantial portions of the Software. * 15 * * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 19 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 21 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 22 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 23 * * 24 * Except as contained in this notice, the name(s) of the above copyright * 25 * holders shall not be used in advertising or otherwise to promote the * 26 * sale, use or other dealings in this Software without prior written * 27 * authorization. * 28 ****************************************************************************/ 29 30/**************************************************************************** 31 * Author: Juergen Pfeifer, 1993, 1997 * 32 ****************************************************************************/ 33 34#include "internal.h" 35#include "cursesp.h" 36 37MODULE_ID("$Id: cursesp.cc,v 1.25 2005/08/06 22:12:36 tom Exp $") 38 39NCursesPanel* NCursesPanel::dummy = static_cast<NCursesPanel*>(0); 40 41void NCursesPanel::init() 42{ 43 p = ::new_panel(w); 44 if (!p) 45 OnError(ERR); 46 47 UserHook* hook = new UserHook; 48 hook->m_user = NULL; 49 hook->m_back = this; 50 hook->m_owner = p; 51 ::set_panel_userptr(p, reinterpret_cast<void *>(hook)); 52} 53 54NCursesPanel::~NCursesPanel() 55{ 56 UserHook* hook = UserPointer(); 57 assert(hook != 0 && hook->m_back==this && hook->m_owner==p); 58 delete hook; 59 ::del_panel(p); 60 ::update_panels(); 61} 62 63void 64NCursesPanel::redraw() 65{ 66 PANEL *pan; 67 68 pan = ::panel_above(NULL); 69 while (pan) { 70 ::touchwin(panel_window(pan)); 71 pan = ::panel_above(pan); 72 } 73 ::update_panels(); 74 ::doupdate(); 75} 76 77int 78NCursesPanel::refresh() 79{ 80 ::update_panels(); 81 return ::doupdate(); 82} 83 84int 85NCursesPanel::noutrefresh() 86{ 87 ::update_panels(); 88 return OK; 89} 90 91void 92NCursesPanel::boldframe(const char *title, const char* btitle) 93{ 94 standout(); 95 frame(title, btitle); 96 standend(); 97} 98 99void 100NCursesPanel::frame(const char *title,const char *btitle) 101{ 102 int err = OK; 103 if (!title && !btitle) { 104 err = box(); 105 } 106 else { 107 err = box(); 108 if (err==OK) 109 label(title,btitle); 110 } 111 OnError(err); 112} 113 114void 115NCursesPanel::label(const char *tLabel, const char *bLabel) 116{ 117 if (tLabel) 118 centertext(0,tLabel); 119 if (bLabel) 120 centertext(maxy(),bLabel); 121} 122 123void 124NCursesPanel::centertext(int row,const char *labelText) 125{ 126 if (labelText) { 127 int x = (maxx() - ::strlen(labelText)) / 2; 128 if (x<0) 129 x=0; 130 OnError(addstr(row, x, labelText, width())); 131 } 132} 133 134int 135NCursesPanel::getKey(void) 136{ 137 return getch(); 138} 139