Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/cursesapp.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 // * This makes emacs happy -*-Mode: C++;-*- | |
2 /**************************************************************************** | |
3 * Copyright 2019-2020,2021 Thomas E. Dickey * | |
4 * Copyright 1998-2005,2011 Free Software Foundation, Inc. * | |
5 * * | |
6 * Permission is hereby granted, free of charge, to any person obtaining a * | |
7 * copy of this software and associated documentation files (the * | |
8 * "Software"), to deal in the Software without restriction, including * | |
9 * without limitation the rights to use, copy, modify, merge, publish, * | |
10 * distribute, distribute with modifications, sublicense, and/or sell * | |
11 * copies of the Software, and to permit persons to whom the Software is * | |
12 * furnished to do so, subject to the following conditions: * | |
13 * * | |
14 * The above copyright notice and this permission notice shall be included * | |
15 * in all copies or substantial portions of the Software. * | |
16 * * | |
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * | |
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * | |
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * | |
20 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * | |
21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * | |
22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * | |
23 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * | |
24 * * | |
25 * Except as contained in this notice, the name(s) of the above copyright * | |
26 * holders shall not be used in advertising or otherwise to promote the * | |
27 * sale, use or other dealings in this Software without prior written * | |
28 * authorization. * | |
29 ****************************************************************************/ | |
30 | |
31 /**************************************************************************** | |
32 * Author: Juergen Pfeifer, 1997 * | |
33 ****************************************************************************/ | |
34 | |
35 // $Id: cursesapp.h,v 1.18 2021/06/17 21:26:02 tom Exp $ | |
36 | |
37 #ifndef NCURSES_CURSESAPP_H_incl | |
38 #define NCURSES_CURSESAPP_H_incl | |
39 | |
40 #include <ncursesw/cursslk.h> | |
41 | |
42 #if (defined(_WIN32) || defined(_WIN64)) | |
43 # define NCURSES_CXX_MAIN_NAME cursespp_main | |
44 # define NCURSES_CXX_MAIN \ | |
45 int main(int argc, char *argv[]) { \ | |
46 return NCURSES_CXX_MAIN_NAME(argc, argv); \ | |
47 } | |
48 #else | |
49 # define NCURSES_CXX_MAIN_NAME main | |
50 #endif | |
51 NCURSES_CXX_IMPEXP int NCURSES_CXX_MAIN_NAME(int argc, char *argv[]); | |
52 | |
53 class NCURSES_CXX_IMPEXP NCursesApplication { | |
54 public: | |
55 typedef struct _slk_link { // This structure is used to maintain | |
56 struct _slk_link* prev; // a stack of SLKs | |
57 Soft_Label_Key_Set* SLKs; | |
58 } SLK_Link; | |
59 private: | |
60 static int rinit(NCursesWindow& w); // Internal Init function for title | |
61 static NCursesApplication* theApp; // Global ref. to the application | |
62 | |
63 static SLK_Link* slk_stack; | |
64 | |
65 protected: | |
66 static NCursesWindow* titleWindow; // The Title Window (if any) | |
67 | |
68 bool b_Colors; // Is this a color application? | |
69 NCursesWindow* Root_Window; // This is the stdscr equiv. | |
70 | |
71 // Initialization of attributes; | |
72 // Rewrite this in your derived class if you prefer other settings | |
73 virtual void init(bool bColors); | |
74 | |
75 // The number of lines for the title window. Default is no title window | |
76 // You may rewrite this in your derived class | |
77 virtual int titlesize() const { | |
78 return 0; | |
79 } | |
80 | |
81 // This method is called to put something into the title window initially | |
82 // You may rewrite this in your derived class | |
83 virtual void title() { | |
84 } | |
85 | |
86 // The layout used for the Soft Label Keys. Default is to have no SLKs. | |
87 // You may rewrite this in your derived class | |
88 virtual Soft_Label_Key_Set::Label_Layout useSLKs() const { | |
89 return Soft_Label_Key_Set::None; | |
90 } | |
91 | |
92 // This method is called to initialize the SLKs. Default is nothing. | |
93 // You may rewrite this in your derived class | |
94 virtual void init_labels(Soft_Label_Key_Set& S) const { | |
95 (void) S; | |
96 } | |
97 | |
98 // Your derived class must implement this method. The return value must | |
99 // be the exit value of your application. | |
100 virtual int run() = 0; | |
101 | |
102 // The constructor is protected, so you may use it in your derived | |
103 // class constructor. The argument tells whether or not you want colors. | |
104 NCursesApplication(bool wantColors = FALSE); | |
105 | |
106 NCursesApplication& operator=(const NCursesApplication& rhs) | |
107 { | |
108 if (this != &rhs) { | |
109 *this = rhs; | |
110 } | |
111 return *this; | |
112 } | |
113 | |
114 NCursesApplication(const NCursesApplication& rhs) | |
115 : b_Colors(rhs.b_Colors), | |
116 Root_Window(rhs.Root_Window) | |
117 { | |
118 } | |
119 | |
120 static NCursesWindow *&getTitleWindow(); | |
121 | |
122 public: | |
123 virtual ~NCursesApplication() THROWS(NCursesException); | |
124 | |
125 // Get a pointer to the current application object | |
126 static NCursesApplication* getApplication(); | |
127 | |
128 // This method runs the application and returns its exit value | |
129 int operator()(void); | |
130 | |
131 // Process the commandline arguments. The default implementation simply | |
132 // ignores them. Your derived class may rewrite this. | |
133 virtual void handleArgs(int argc, char* argv[]) { | |
134 (void) argc; | |
135 (void) argv; | |
136 } | |
137 | |
138 // Does this application use colors? | |
139 inline bool useColors() const { | |
140 return b_Colors; | |
141 } | |
142 | |
143 // Push the Key Set S onto the SLK Stack. S then becomes the current set | |
144 // of Soft Labelled Keys. | |
145 void push(Soft_Label_Key_Set& S); | |
146 | |
147 // Throw away the current set of SLKs and make the previous one the | |
148 // new current set. | |
149 bool pop(); | |
150 | |
151 // Retrieve the current set of Soft Labelled Keys. | |
152 Soft_Label_Key_Set* top() const; | |
153 | |
154 // Attributes to use for menu and forms foregrounds | |
155 virtual chtype foregrounds() const { | |
156 return b_Colors ? static_cast<chtype>(COLOR_PAIR(1)) : A_BOLD; | |
157 } | |
158 | |
159 // Attributes to use for menu and forms backgrounds | |
160 virtual chtype backgrounds() const { | |
161 return b_Colors ? static_cast<chtype>(COLOR_PAIR(2)) : A_NORMAL; | |
162 } | |
163 | |
164 // Attributes to use for inactive (menu) elements | |
165 virtual chtype inactives() const { | |
166 return b_Colors ? static_cast<chtype>(COLOR_PAIR(3)|A_DIM) : A_DIM; | |
167 } | |
168 | |
169 // Attributes to use for (form) labels and SLKs | |
170 virtual chtype labels() const { | |
171 return b_Colors ? static_cast<chtype>(COLOR_PAIR(4)) : A_NORMAL; | |
172 } | |
173 | |
174 // Attributes to use for form backgrounds | |
175 virtual chtype dialog_backgrounds() const { | |
176 return b_Colors ? static_cast<chtype>(COLOR_PAIR(4)) : A_NORMAL; | |
177 } | |
178 | |
179 // Attributes to use as default for (form) window backgrounds | |
180 virtual chtype window_backgrounds() const { | |
181 return b_Colors ? static_cast<chtype>(COLOR_PAIR(5)) : A_NORMAL; | |
182 } | |
183 | |
184 // Attributes to use for the title window | |
185 virtual chtype screen_titles() const { | |
186 return b_Colors ? static_cast<chtype>(COLOR_PAIR(6)) : A_BOLD; | |
187 } | |
188 | |
189 }; | |
190 | |
191 #endif /* NCURSES_CURSESAPP_H_incl */ |