ncurses 5.2
[ncurses.git] / c++ / cursesp.cc
index bb5506c008ed3f9e8d57538ecbc03a736ec7be38..50095d3d21444d1f8b5b53315537fecca4b84957 100644 (file)
@@ -1,49 +1,68 @@
 // * this is for making emacs happy: -*-Mode: C++;-*-
-/*
-  written and
-  Copyright (C) 1993 by Anatoly Ivasyuk (anatoly@nick.csh.rit.edu)
+/****************************************************************************
+ * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc.              *
+ *                                                                          *
+ * Permission is hereby granted, free of charge, to any person obtaining a  *
+ * copy of this software and associated documentation files (the            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
 
-  Modified by Juergen Pfeifer, April 1997
-*/
+/****************************************************************************
+ *   Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1993,1997            *
+ ****************************************************************************/
 
+#include "cursesp.h"
 #include "internal.h"
+#include <string.h>
 
-MODULE_ID("$Id: cursesp.cc,v 1.6 1997/05/04 01:02:08 tom Exp $")
+MODULE_ID("$Id: cursesp.cc,v 1.16 2000/07/15 21:08:13 tom Exp $")
 
-#pragma  implementation
-#include "cursesp.h"
+NCursesPanel* NCursesPanel::dummy = (NCursesPanel*)0;
 
-NCursesPanel::NCursesPanel(int lines,
-                          int cols,
-                          int begin_y,
-                          int begin_x)
-  : NCursesWindow(lines, cols, begin_y, begin_x) {
-    
-    p = ::new_panel(w);
-    if (!p)
-      OnError(ERR);
-    
-    UserHook* hook = new UserHook;
-    hook->m_user  = NULL;
-    hook->m_back  = this;
-    hook->m_owner = p;
-    ::set_panel_userptr(p, (const void *)hook);
-}
+void NCursesPanel::init() {
+  p = ::new_panel(w);
+  if (!p)
+    OnError(ERR);
 
+  UserHook* hook = new UserHook;
+  hook->m_user  = NULL;
+  hook->m_back  = this;
+  hook->m_owner = p;
+  ::set_panel_userptr(p, (void *)hook);
+}
 
 NCursesPanel::~NCursesPanel() {
   UserHook* hook = (UserHook*)::panel_userptr(p);
-  assert(hook && hook->m_back==this && hook->m_owner==p);
+  assert(hook != 0 && hook->m_back==this && hook->m_owner==p);
   delete hook;
   ::del_panel(p);
   ::update_panels();
-  ::doupdate();
 }
 
 void
 NCursesPanel::redraw() {
   PANEL *pan;
-  
+
   pan = ::panel_above(NULL);
   while (pan) {
     ::touchwin(panel_window(pan));
@@ -53,10 +72,16 @@ NCursesPanel::redraw() {
   ::doupdate();
 }
 
-void
+int
 NCursesPanel::refresh() {
   ::update_panels();
-  ::doupdate();
+  return doupdate();
+}
+
+int
+NCursesPanel::noutrefresh() {
+  ::update_panels();
+  return OK;
 }
 
 void
@@ -71,25 +96,29 @@ NCursesPanel::frame(const char *title,const char *btitle) {
   int err = OK;
   if (!title && !btitle) {
     err = box();
-  } 
+  }
   else {
     err = box();
     if (err==OK)
-      label(title,btitle); 
+      label(title,btitle);
   }
   OnError(err);
 }
 
 void
 NCursesPanel::label(const char *tLabel, const char *bLabel) {
-  if (tLabel) 
+  if (tLabel)
     centertext(0,tLabel);
-  if (bLabel) 
+  if (bLabel)
     centertext(maxy(),bLabel);
 }
 
 void
 NCursesPanel::centertext(int row,const char *label) {
-  if (label) 
-    OnError(addstr(row,(maxx() - strlen(label)) / 2, label));
+  if (label) {
+    int x = (maxx() - strlen(label)) / 2;
+    if (x<0)
+      x=0;
+    OnError(addstr(row, x, label, width()));
+  }
 }