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