source: tags/arb_5.3/PGT/entry_sel_dialog.cxx

Last change on this file was 3979, checked in by baderk, 18 years ago

The previous cleanup (mem-leaks removal) has gone too far and resulted in
segfaults. This patch at least removes the segfaults (the mem-leaks still
exist and will be removed later).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
Line 
1// Copyright (c) 2004 - 2005 Kai Bader <baderk@in.tum.de>
2//
3// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
5// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
6// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
7// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
8// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
9
10// CVS REVISION TAG  --  $Revision: 3979 $
11
12
13#include "arb_interface.hxx"
14#include "entry_sel_dialog.hxx"
15
16
17bool entrySelectionDialog::m_opened= false;
18
19
20/****************************************************************************
21*  ENTRY SELECTION DIALOG - CONSTRUCTOR
22****************************************************************************/
23entrySelectionDialog::entrySelectionDialog(MDialog *d) : MDialog(d)
24{
25    if(m_opened)
26    {
27//         this->~entrySelectionDialog();
28        return;
29    }
30    else m_opened= true;
31
32    // CREATE SHELL FOR THIS DIALOG
33    createShell("");
34
35    // CALL CREATE WINDOW FUNCTION
36    createWindow();
37
38    // SET WINDOW WIDTH
39    XtVaSetValues(m_shell,
40        XmNwidth, 300,
41        XmNheight, 500,
42        NULL);
43
44    // REALIZE WINDOW
45    realizeShell();
46
47    // SET WINDOW LABEL
48    setDialogTitle("PGT - Selection");
49
50    // DESELECT ALL WINDOW BUTTONS EXCEPT CLOSE AND MOVE
51    XtVaSetValues(m_shell, XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE, NULL);
52
53    // FILL THE LIST WITH ENTRIES...
54    getEntryNamesList(m_list, true);
55}
56
57
58/****************************************************************************
59*  ENTRY SELECTION DIALOG - DESTRUCTOR
60****************************************************************************/
61entrySelectionDialog::~entrySelectionDialog()
62{
63}
64
65
66/****************************************************************************
67*  MAIN DIALOG - CREATE WINDOW
68****************************************************************************/
69void entrySelectionDialog::createWindow()
70{
71    // CREATE TOP LEVEL WIDGET
72    m_top= XtVaCreateManagedWidget("top",
73        xmFormWidgetClass, m_shell,
74        XmNorientation, XmVERTICAL,
75        XmNmarginHeight, 0,
76        XmNmarginWidth, 0,
77        NULL);
78
79    // CREATE A SIMPLE LABEL
80    Widget label1= XtVaCreateManagedWidget("label",
81        xmLabelWidgetClass, m_top,
82        XmNlabelString, CreateDlgString("Select entry from the list:"),
83        XmNheight, 30,
84        XmNalignment, XmALIGNMENT_CENTER,
85        XmNtopAttachment, XmATTACH_FORM,
86        XmNleftAttachment, XmATTACH_FORM,
87        XmNrightAttachment, XmATTACH_FORM,
88        NULL);
89
90    // CREATE SPECIES LIST WIDGET
91    m_list= XmCreateScrolledList(m_top, const_cast<char*>("selectionList"), NULL, 0);
92    XtVaSetValues(m_list,
93        XmNallowResize, true,
94        XmNvisibleItemCount, 25,
95        NULL);
96    XtVaSetValues(XtParent(m_list),
97        XmNtopAttachment, XmATTACH_WIDGET,
98        XmNtopWidget, label1,
99        XmNleftAttachment, XmATTACH_FORM,
100        XmNrightAttachment, XmATTACH_FORM,
101        NULL);
102    XtManageChild(m_list);
103    XtAddCallback(m_list, XmNbrowseSelectionCallback, staticListCallback, this);
104
105    // CREATE AN EXIT BUTTON
106    Widget exitButton= XtVaCreateManagedWidget("exitButton",
107        xmPushButtonWidgetClass, m_top,
108        XmNlabelString, CreateDlgString("Close"),
109        XmNwidth, 100,
110        XmNheight, 30,
111        XmNrightAttachment, XmATTACH_FORM,
112        XmNtopAttachment, XmATTACH_WIDGET,
113        XmNtopWidget, m_list,
114        // XmNbottomAttachment, XmATTACH_FORM,
115        NULL);
116    XtAddCallback(exitButton, XmNactivateCallback, staticEntrySelExitButtonCallback, this);
117}
118
119
120/****************************************************************************
121*  CALLBACK - EXIT BUTTON CALLBACK
122*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
123****************************************************************************/
124void staticEntrySelExitButtonCallback(Widget widget, XtPointer clientData, XtPointer callData)
125{
126    // GET POINTER OF THE ORIGINAL CALLER
127    entrySelectionDialog *esD= (entrySelectionDialog *)clientData;
128
129    // CALL CLASS MEMBER FUNCTION
130    esD->exitButtonCallback(widget, callData);
131}
132
133
134/****************************************************************************
135*  CALLBACK - EXIT BUTTON CALLBACK
136****************************************************************************/
137void entrySelectionDialog::exitButtonCallback(Widget, XtPointer)
138{
139    m_opened= false;
140    this->closeDialog();
141}
142
143
144/****************************************************************************
145*  CALLBACK - SPECIES CALLBACK
146*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
147****************************************************************************/
148void staticListCallback(Widget widget, XtPointer clientData, XtPointer callData)
149{
150    // GET POINTER OF THE ORIGINAL CALLER
151    entrySelectionDialog *esD= (entrySelectionDialog *)clientData;
152
153    // CALL CLASS MEMBER FUNCTION
154    esD->listCallback(widget, callData);
155}
156
157
158/****************************************************************************
159*  CALLBACK - SPECIES CALLBACK
160****************************************************************************/
161void entrySelectionDialog::listCallback(Widget, XtPointer callData)
162{
163    // GET CALLBACK DATA
164    XmListCallbackStruct *cbs= (XmListCallbackStruct *)callData;
165    XmStringGetLtoR(cbs->item, XmFONTLIST_DEFAULT_TAG, &m_entry);
166
167    // TRIGGER ENTRY CHANGED CALLBACK
168    triggerListChange();
169}
170
171
172/****************************************************************************
173*  SET SPECIES DATA CHANGED CALLBACK
174****************************************************************************/
175void entrySelectionDialog::setListCallback(XtCallbackProc callback)
176{
177    m_listCallback= callback;
178    m_hasListCallback= true;
179}
180
181
182/****************************************************************************
183*  TRIGGER SPECIES DATA CHANGED CALLBACK
184****************************************************************************/
185void entrySelectionDialog::triggerListChange()
186{
187    if(m_hasListCallback)
188        m_listCallback(m_parent_widget, (XtPointer)m_parent_dialog, (XtPointer)&m_entry);
189}
190
Note: See TracBrowser for help on using the repository browser.