-fpermissive to allow GCC to compile old C++
[oweals/cde.git] / cde / programs / dtmail / MotifApp / ToggleButtonInterface.C
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $TOG: ToggleButtonInterface.C /main/6 1998/09/21 18:50:08 mgreess $ */
24 /*
25  *+SNOTICE
26  *
27  *      RESTRICTED CONFIDENTIAL INFORMATION:
28  *      
29  *      The information in this document is subject to special
30  *      restrictions in a confidential disclosure agreement bertween
31  *      HP, IBM, Sun, USL, SCO and Univel.  Do not distribute this
32  *      document outside HP, IBM, Sun, USL, SCO, or Univel wihtout
33  *      Sun's specific written approval.  This documment and all copies
34  *      and derivative works thereof must be returned or destroyed at
35  *      Sun's request.
36  *
37  *      Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
38  *
39  *+ENOTICE
40  */
41 //////////////////////////////////////////////////////////////
42 // ToggleButtonInterface.C: A toggle button interface to a Cmd object
43 ///////////////////////////////////////////////////////////////
44 #include <stdlib.h>
45 #include <ctype.h>
46 #include "Cmd.h"
47 #include "MotifCmds.h"
48 #include "ToggleButtonInterface.h"
49 #include <Xm/ToggleB.h>
50 #include "Help.hh"
51
52 ToggleButtonInterface::ToggleButtonInterface ( 
53     Widget parent, 
54     Cmd *cmd 
55 ) : CmdInterface ( cmd )
56 {
57
58     // We need to generate a button name that doesn't have illegal characters.
59     //
60     char *w_name = new char[200];
61     strcpy(w_name, _name);
62     for (char * cur = w_name; *cur; cur++) {
63         if (isspace(*cur) || *cur == ',') {
64             *cur = '_';
65             continue;
66         }
67
68         if (*cur == '.') {
69             *cur = 0;
70             break;
71         }
72     }
73
74     XmString label = XmStringCreateLocalized(cmd->getLabel());
75
76     if (0 ==  strcmp(cmd->className(),"ToggleButtonCmd"))
77     {
78         ToggleButtonCmd *tbc = (ToggleButtonCmd*) cmd;
79         Boolean         visible_when_off = tbc->visibleWhenOff();
80         unsigned char   indicator_type = tbc->indicatorType();
81
82         _w = XtVaCreateWidget (w_name, 
83                 xmToggleButtonWidgetClass,
84                 parent,
85                 XmNlabelString, label,
86                 XmNvisibleWhenOff, visible_when_off,
87                 XmNindicatorType, indicator_type,
88                 NULL);
89     }
90     else
91         _w = XtVaCreateWidget (w_name, 
92                 xmToggleButtonWidgetClass,
93                 parent,
94                 XmNlabelString, label,
95                 XmNvisibleWhenOff, TRUE,
96                 NULL);
97
98     XmStringFree(label);
99
100     printHelpId("_w", _w);
101
102     // XtAddCallback(_w, XmNhelpCallback, HelpCB, helpId);
103     // free(helpId);
104
105     installDestroyHandler();
106     
107     // The _active member is set when each instance is registered
108     // with an associated Cmd object. Now that a widget exists,
109     // set the widget's sensitivity according to its active state.
110     
111     if ( _active )
112         activate();     
113     else
114         deactivate();   
115
116 #ifdef GNU_CC  // No idea what the right ifdef is for automatically recognizing g++
117     
118     // G++ reportedly doesn't like the form expected by cfront. I'm
119     // told this will work, but I haven't tested it myself.
120     
121     XtAddCallback ( _w,  
122                    XmNvalueChangedCallback, 
123                    executeCmdCallback,
124                    (XtPointer) this );  
125 #else
126
127     XtAddCallback ( _w,  
128                    XmNvalueChangedCallback,
129                    &CmdInterface::executeCmdCallback,
130                    (XtPointer) this );  
131 #endif
132     delete [] w_name;
133 }
134
135 #ifndef CAN_INLINE_VIRTUALS
136 ToggleButtonInterface::~ToggleButtonInterface (void)
137 {
138 }
139 #endif /* ! CAN_INLINE_VIRTUALS */