1 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */
2
3 /* AbiSource Application Framework
4 * Copyright (C) 1998 AbiSource, Inc.
5 * Copyright (C) 2005 Hubert Figuiere
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 * 02110-1301 USA.
21 */
22
23 #include <string.h>
24
25 #include "ut_assert.h"
26 #include "ut_debugmsg.h"
27 #include "ut_string_class.h"
28
29 #include "xap_Dialog.h"
30 #include "xap_DialogFactory.h"
31 #include "xap_App.h"
32 #include "xap_Frame.h"
33 #include "xap_Widget.h"
34
35 /*****************************************************************/
36
XAP_Dialog(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)37 XAP_Dialog::XAP_Dialog(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id,
38 const char * helpUrl )
39 : m_pApp ( NULL ), m_pDlgFactory ( pDlgFactory ), m_id ( id ),
40 m_helpUrl(NULL)
41 {
42 m_pApp = pDlgFactory->getApp();
43
44 if (helpUrl)
45 m_helpUrl = new UT_String (helpUrl);
46 else
47 m_helpUrl = new UT_String (); // create an empty one
48 }
49
~XAP_Dialog(void)50 XAP_Dialog::~XAP_Dialog(void)
51 {
52 delete m_helpUrl;
53 }
54
55
getWidgetValueInt(xap_widget_id wid)56 int XAP_Dialog::getWidgetValueInt(xap_widget_id wid)
57 {
58 XAP_Widget *w = getWidget(wid);
59 int retval = w->getValueInt();
60 delete w;
61 return retval;
62 }
63
64
setWidgetValueInt(xap_widget_id wid,int value)65 void XAP_Dialog::setWidgetValueInt(xap_widget_id wid, int value)
66 {
67 XAP_Widget *w = getWidget(wid);
68 w->setValueInt(value);
69 delete w;
70 }
71
setWidgetLabel(xap_widget_id wid,const UT_UTF8String & val)72 void XAP_Dialog::setWidgetLabel(xap_widget_id wid, const UT_UTF8String &val)
73 {
74 XAP_Widget *w = getWidget(wid);
75 w->setLabel(val);
76 delete w;
77 }
78
setWidgetLabel(xap_widget_id wid,const std::string & val)79 void XAP_Dialog::setWidgetLabel(xap_widget_id wid, const std::string &val)
80 {
81 XAP_Widget *w = getWidget(wid);
82 w->setLabel(val);
83 delete w;
84 }
85
86 void
maybeClosePopupPreviewBubbles()87 XAP_Dialog::maybeClosePopupPreviewBubbles()
88 {
89 }
90
91 void
maybeReallowPopupPreviewBubbles()92 XAP_Dialog::maybeReallowPopupPreviewBubbles()
93 {
94 }
95
96
97
98 /*****************************************************************/
99
XAP_Dialog_NonPersistent(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)100 XAP_Dialog_NonPersistent::XAP_Dialog_NonPersistent(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id, const char * helpUrl )
101 : XAP_Dialog(pDlgFactory,id, helpUrl)
102 {
103 }
104
~XAP_Dialog_NonPersistent(void)105 XAP_Dialog_NonPersistent::~XAP_Dialog_NonPersistent(void)
106 {
107 }
108
109
110
111 /*****************************************************************/
112
XAP_TabbedDialog_NonPersistent(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)113 XAP_TabbedDialog_NonPersistent::XAP_TabbedDialog_NonPersistent(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id, const char * helpUrl )
114 : XAP_Dialog_NonPersistent(pDlgFactory,id, helpUrl),
115 m_pageNum(-1)
116 {
117 }
118
~XAP_TabbedDialog_NonPersistent(void)119 XAP_TabbedDialog_NonPersistent::~XAP_TabbedDialog_NonPersistent(void)
120 {
121 }
122
123 /*****************************************************************/
124
XAP_Dialog_Persistent(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)125 XAP_Dialog_Persistent::XAP_Dialog_Persistent(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id, const char * helpUrl)
126 : XAP_Dialog(pDlgFactory,id, helpUrl),
127 m_bInUse(false)
128 {
129 }
130
~XAP_Dialog_Persistent(void)131 XAP_Dialog_Persistent::~XAP_Dialog_Persistent(void)
132 {
133 }
134
useStart(void)135 void XAP_Dialog_Persistent::useStart(void)
136 {
137 UT_ASSERT_HARMLESS(!m_bInUse);
138 m_bInUse = true;
139 }
140
useEnd(void)141 void XAP_Dialog_Persistent::useEnd(void)
142 {
143 UT_ASSERT_HARMLESS(m_bInUse);
144 m_bInUse = false;
145 }
146
147 /*****************************************************************/
148
XAP_Dialog_FramePersistent(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)149 XAP_Dialog_FramePersistent::XAP_Dialog_FramePersistent(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id, const char * helpUrl)
150 : XAP_Dialog_Persistent(pDlgFactory,id, helpUrl)
151 {
152 }
153
~XAP_Dialog_FramePersistent(void)154 XAP_Dialog_FramePersistent::~XAP_Dialog_FramePersistent(void)
155 {
156 }
157
useStart(void)158 void XAP_Dialog_FramePersistent::useStart(void)
159 {
160 XAP_Dialog_Persistent::useStart();
161 }
162
useEnd(void)163 void XAP_Dialog_FramePersistent::useEnd(void)
164 {
165 XAP_Dialog_Persistent::useEnd();
166 }
167
168 /*****************************************************************/
169
XAP_Dialog_AppPersistent(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)170 XAP_Dialog_AppPersistent::XAP_Dialog_AppPersistent(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id, const char * helpUrl)
171 : XAP_Dialog_Persistent(pDlgFactory,id, helpUrl)
172 {
173 }
174
~XAP_Dialog_AppPersistent(void)175 XAP_Dialog_AppPersistent::~XAP_Dialog_AppPersistent(void)
176 {
177 }
178
useStart(void)179 void XAP_Dialog_AppPersistent::useStart(void)
180 {
181 XAP_Dialog_Persistent::useStart();
182 }
183
useEnd(void)184 void XAP_Dialog_AppPersistent::useEnd(void)
185 {
186 XAP_Dialog_Persistent::useEnd();
187 }
188
189
190
XAP_Dialog_Modeless(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id,const char * helpUrl)191 XAP_Dialog_Modeless::XAP_Dialog_Modeless(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id, const char * helpUrl)
192 : XAP_Dialog_AppPersistent(pDlgFactory,id, helpUrl)
193 {
194 UT_return_if_fail(pDlgFactory);
195
196 m_pDlgFactory = pDlgFactory;
197 m_id = id;
198 m_pApp = pDlgFactory->getApp();
199 m_pDialog = (XAP_Dialog_Modeless *) this;
200
201 UT_ASSERT_HARMLESS(m_pApp);
202 }
203
~XAP_Dialog_Modeless(void)204 XAP_Dialog_Modeless::~XAP_Dialog_Modeless(void)
205 {
206 }
207
useStart(void)208 void XAP_Dialog_Modeless::useStart(void)
209 {
210 xxx_UT_DEBUGMSG(("Called generic useStart in XAP_DIALOG_Modeless \n"));
211 }
212
useEnd(void)213 void XAP_Dialog_Modeless::useEnd(void)
214 {
215 xxx_UT_DEBUGMSG(("Called generic useEnd in XAP_DIALOG_Modeless \n"));
216 }
217
modeless_cleanup(void)218 void XAP_Dialog_Modeless::modeless_cleanup(void)
219 {
220 UT_sint32 sid = (UT_sint32) getDialogId();
221 m_pApp->forgetModelessId( (UT_sint32) sid);
222 m_pDlgFactory->releaseDialog(m_pDialog);
223 maybeReallowPopupPreviewBubbles();
224 }
225
isRunning(void) const226 bool XAP_Dialog_Modeless::isRunning(void) const
227 {
228
229 UT_sint32 sid = (UT_sint32) getDialogId();
230 return m_pApp->isModelessRunning(sid);
231 }
232
getActiveFrame(void) const233 XAP_Frame * XAP_Dialog_Modeless::getActiveFrame(void) const
234 {
235 // This function returns the frame currently connected to a modeless dialog
236
237 XAP_Frame * pFrame = m_pApp->getLastFocussedFrame();
238 if(pFrame == (XAP_Frame *) NULL)
239 {
240 pFrame = m_pApp->getFrame(0);
241 }
242 return pFrame;
243 }
244
245
setActiveFrame(XAP_Frame * pFrame)246 void XAP_Dialog_Modeless::setActiveFrame(XAP_Frame *pFrame)
247 {
248 notifyActiveFrame(pFrame);
249 }
250
251
252 std::string
BuildWindowName(const char * pDialogName) const253 XAP_Dialog_Modeless::BuildWindowName( const char * pDialogName ) const
254 {
255 const UT_uint32 width = 100;
256 char pWindowName[width];
257
258 BuildWindowName( pWindowName, pDialogName, width );
259 std::string ret = pWindowName;
260 return ret;
261 }
262
263
264 void
BuildWindowName(char * pWindowName,const char * pDialogName,UT_uint32 width) const265 XAP_Dialog_Modeless::BuildWindowName(char * pWindowName, const char * pDialogName, UT_uint32 width ) const
266 {
267 // This function constructs and returns the window name of a modeless dialog by
268 // concatenating the active frame with the dialog name
269
270 *pWindowName = '\0';
271 UT_UTF8String wn = UT_UTF8String(pDialogName);
272
273 XAP_Frame* pFrame = getActiveFrame();
274 if (pFrame)
275 {
276 wn += " - ";
277 wn += pFrame->getTitle();
278 }
279
280 UT_uint32 len = UT_MIN(wn.byteLength(), width);
281 strncpy(pWindowName, wn.utf8_str(), len);
282 pWindowName[len] = '\0';
283 }
284
285
Page(const gchar * _title,AbiNativeWidget * _widget)286 XAP_NotebookDialog::Page::Page(const gchar *_title, AbiNativeWidget * _widget)
287 {
288 title = g_strdup(_title);
289 widget = _widget;
290 }
291
~Page()292 XAP_NotebookDialog::Page::~Page()
293 {
294 g_free(title);
295 }
296