X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=c%2B%2B%2Fcursslk.h;h=6451d4405e933862e20938ae12916a97550070a6;hp=1598b0634baba1ee4bd67aa3ef76c8d811bdc184;hb=460005b642d978c6d4b48810803514bd36a6245b;hpb=0eb88fc5281804773e2a0c7a488a4452463535ce diff --git a/c++/cursslk.h b/c++/cursslk.h index 1598b063..6451d440 100644 --- a/c++/cursslk.h +++ b/c++/cursslk.h @@ -1,6 +1,7 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright 2019,2020 Thomas E. Dickey * + * Copyright 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 * @@ -28,20 +29,20 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ -// $Id: cursslk.h,v 1.5 1999/05/16 17:30:08 juergen Exp $ +// $Id: cursslk.h,v 1.16 2020/02/29 15:46:00 anonymous.maarten Exp $ -#ifndef _CURSSLK_H -#define _CURSSLK_H +#ifndef NCURSES_CURSSLK_H_incl +#define NCURSES_CURSSLK_H_incl #include -class Soft_Label_Key_Set { +class NCURSES_IMPEXP Soft_Label_Key_Set { public: // This inner class represents the attributes of a Soft Label Key (SLK) - class Soft_Label_Key { + class NCURSES_IMPEXP Soft_Label_Key { friend class Soft_Label_Key_Set; public: typedef enum { Left=0, Center=1, Right=2 } Justification; @@ -51,28 +52,45 @@ public: Justification format; // The Justification int num; // The number of the Label - Soft_Label_Key() : label((char*)0),format(Left),num(-1) { + Soft_Label_Key() : label(NULL), format(Left), num(-1) { } - + virtual ~Soft_Label_Key() { delete[] label; }; public: // Set the text of the Label - void operator=(char *text); - + Soft_Label_Key& operator=(char *text); + // Set the Justification of the Label - inline void operator=(Justification just) { + Soft_Label_Key& operator=(Justification just) { format = just; + return *this; } - + // Retrieve the text of the label inline char* operator()(void) const { - return label; + return label; + } + + Soft_Label_Key& operator=(const Soft_Label_Key& rhs) + { + if (this != &rhs) { + *this = rhs; + } + return *this; + } + + Soft_Label_Key(const Soft_Label_Key& rhs) + : label(NULL), + format(rhs.format), + num(rhs.num) + { + *this = rhs.label; } }; - + public: typedef enum { None = -1, @@ -87,7 +105,7 @@ private: static Label_Layout format; // Layout of the Key Sets static int num_labels; // Number Of Labels in Key Sets bool b_attrInit; // Are attributes initialized - + Soft_Label_Key *slk_array; // The array of SLK's // Init the Key Set @@ -105,13 +123,13 @@ protected: } // Remove SLK's from screen - void clear() { + void clear() { if (ERR==::slk_clear()) Error("slk_clear"); - } + } // Restore them - void restore() { + void restore() { if (ERR==::slk_restore()) Error("slk_restore"); } @@ -128,29 +146,45 @@ public: // with a layout by the constructor above. This layout will be reused. Soft_Label_Key_Set(); - virtual ~Soft_Label_Key_Set(); + Soft_Label_Key_Set& operator=(const Soft_Label_Key_Set& rhs) + { + if (this != &rhs) { + *this = rhs; + init(); // allocate a new slk_array[] + } + return *this; + } + + Soft_Label_Key_Set(const Soft_Label_Key_Set& rhs) + : b_attrInit(rhs.b_attrInit), + slk_array(NULL) + { + init(); // allocate a new slk_array[] + } + + virtual ~Soft_Label_Key_Set() THROWS(NCursesException); // Get Label# i. Label counting starts with 1! Soft_Label_Key& operator[](int i); // Retrieve number of Labels - inline int labels() const { return num_labels; } + inline int labels() const { return num_labels; } // Refresh the SLK portion of the screen - inline void refresh() { + inline void refresh() { if (ERR==::slk_refresh()) Error("slk_refresh"); } // Mark the SLK portion of the screen for refresh, defer actual refresh // until next update call. - inline void noutrefresh() { + inline void noutrefresh() { if (ERR==::slk_noutrefresh()) Error("slk_noutrefresh"); } // Mark the whole SLK portion of the screen as modified - inline void touch() { + inline void touch() { if (ERR==::slk_touch()) Error("slk_touch"); } @@ -202,4 +236,4 @@ public: } }; -#endif // _CURSSLK_H +#endif /* NCURSES_CURSSLK_H_incl */