]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - c++/cursesp.cc
ncurses 5.7 - patch 20100703
[ncurses.git] / c++ / cursesp.cc
index bb5506c008ed3f9e8d57538ecbc03a736ec7be38..9c4eab6954ec5c156df3560dac42c5022a163f22 100644 (file)
@@ -1,49 +1,70 @@
 // * this is for making emacs happy: -*-Mode: C++;-*-
-/*
-  written and
-  Copyright (C) 1993 by Anatoly Ivasyuk (anatoly@nick.csh.rit.edu)
+/****************************************************************************
+ * Copyright (c) 1998-2003,2005 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, 1993, 1997                                    *
+ ****************************************************************************/
 
 #include "internal.h"
+#include "cursesp.h"
 
-MODULE_ID("$Id: cursesp.cc,v 1.6 1997/05/04 01:02:08 tom Exp $")
+MODULE_ID("$Id: cursesp.cc,v 1.25 2005/08/06 22:12:36 tom Exp $")
 
-#pragma  implementation
-#include "cursesp.h"
+NCursesPanel* NCursesPanel::dummy = static_cast<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, reinterpret_cast<void *>(hook));
+}
 
-NCursesPanel::~NCursesPanel() {
-  UserHook* hook = (UserHook*)::panel_userptr(p);
-  assert(hook && hook->m_back==this && hook->m_owner==p);
+NCursesPanel::~NCursesPanel()
+{
+  UserHook* hook = UserPointer();
+  assert(hook != 0 && hook->m_back==this && hook->m_owner==p);
   delete hook;
   ::del_panel(p);
   ::update_panels();
-  ::doupdate();
 }
 
 void
-NCursesPanel::redraw() {
+NCursesPanel::redraw()
+{
   PANEL *pan;
-  
+
   pan = ::panel_above(NULL);
   while (pan) {
     ::touchwin(panel_window(pan));
@@ -53,43 +74,65 @@ NCursesPanel::redraw() {
   ::doupdate();
 }
 
-void
-NCursesPanel::refresh() {
+int
+NCursesPanel::refresh()
+{
   ::update_panels();
-  ::doupdate();
+  return ::doupdate();
+}
+
+int
+NCursesPanel::noutrefresh()
+{
+  ::update_panels();
+  return OK;
 }
 
 void
-NCursesPanel::boldframe(const char *title, const char* btitle) {
+NCursesPanel::boldframe(const char *title, const char* btitle)
+{
   standout();
   frame(title, btitle);
   standend();
 }
 
 void
-NCursesPanel::frame(const char *title,const char *btitle) {
+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) 
+NCursesPanel::label(const char *tLabel, const char *bLabel)
+{
+  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));
+NCursesPanel::centertext(int row,const char *labelText)
+{
+  if (labelText) {
+    int x = (maxx() - ::strlen(labelText)) / 2;
+    if (x<0)
+      x=0;
+    OnError(addstr(row, x, labelText, width()));
+  }
+}
+
+int
+NCursesPanel::getKey(void)
+{
+  return getch();
 }