summaryrefslogtreecommitdiffstats
path: root/wizards/source/tools/ModuleControls.xba
blob: 059956cb1b555706fb3662a52eea09fbdfd3633e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ModuleControls" script:language="StarBasic">Option Explicit

Public DlgOverwrite as Object
Public Const SBOVERWRITEUNDEFINED as Integer = 0
Public Const SBOVERWRITECANCEL as Integer = 2
Public Const SBOVERWRITEQUERY as Integer = 7
Public Const SBOVERWRITEALWAYS as Integer = 6
Public Const SBOVERWRITENEVER as Integer = 8
Public iGeneralOverwrite as Integer



&apos; Accepts the name of a control and returns the respective control model as object
&apos; The Container can either be a whole document or a specific sheet of a Calc-Document
&apos; &apos;CName&apos; is the name of the Control
Function getControlModel(oContainer as Object, CName as String)
Dim aForm, oForms as Object
Dim i as Integer
	oForms = oContainer.Drawpage.GetForms
	For i = 0 To oForms.Count-1
		aForm = oForms.GetbyIndex(i)
		If aForm.HasByName(CName) Then
			GetControlModel = aForm.GetbyName(CName)
			Exit Function
		End If
	Next i
	Msgbox(&quot;No Control with the name &apos;&quot; &amp; CName &amp; &quot;&apos; found&quot; , 16, GetProductName())
End Function



&apos; Gets the Shape of a Control( e. g. to reset the size or Position of the control
&apos; Parameters:
&apos; The &apos;oContainer&apos; is the Document or a specific sheet of a Calc - Document
&apos; &apos;CName&apos; is the Name of the Control
Function GetControlShape(oContainer as Object,CName as String)
Dim i as integer
Dim aShape as Object
	For i = 0 to oContainer.DrawPage.Count-1
		aShape = oContainer.DrawPage(i)
		If HasUnoInterfaces(aShape, &quot;com.sun.star.drawing.XControlShape&quot;) then
			If ashape.Control.Name = CName then
				GetControlShape = aShape
				exit Function
			End If
		End If
	Next
End Function


&apos; Returns the View of a Control
&apos; Parameters:
&apos; The &apos;oContainer&apos; is the Document or a specific sheet of a Calc - Document
&apos; The &apos;oController&apos; is always directly attached to the Document
&apos; &apos;CName&apos; is the Name of the Control
Function getControlView(oContainer , oController as Object, CName as String) as Object
Dim aForm, oForms, oControlModel as Object
Dim i as Integer
	oForms = oContainer.DrawPage.Forms
	For i = 0 To oForms.Count-1
		aForm = oforms.GetbyIndex(i)
		If aForm.HasByName(CName) Then
			oControlModel = aForm.GetbyName(CName)
			GetControlView = oController.GetControl(oControlModel)
			Exit Function
		End If
	Next i
	Msgbox(&quot;No Control with the name &apos;&quot; &amp; CName &amp; &quot;&apos; found&quot; , 16, GetProductName())
End Function



&apos; Parameters:
&apos; The &apos;oContainer&apos; is the Document or a specific sheet of a Calc - Document
&apos; &apos;CName&apos; is the Name of the Control
Function DisposeControl(oContainer as Object, CName as String) as Boolean
Dim aControl as Object

	aControl = GetControlModel(oContainer,CName)
	If not IsNull(aControl) Then
		aControl.Dispose()
		DisposeControl = True
	Else
		DisposeControl = False
	End If
End Function


&apos; Returns a sequence of a group of controls like option buttons or checkboxes
&apos; The &apos;oContainer&apos; is the Document or a specific sheet of a Calc - Document
&apos; &apos;sGroupName&apos; is the Name of the Controlgroup
Function GetControlGroupModel(oContainer as Object, sGroupName as String )
Dim aForm, oForms As Object
Dim aControlModel() As Object
Dim i as integer

	oForms = oContainer.DrawPage.Forms
	For i = 0 To oForms.Count-1
		aForm = oForms(i)
		If aForm.HasbyName(sGroupName) Then
			aForm.GetGroupbyName(sGroupName,aControlModel)
			GetControlGroupModel = aControlModel
			Exit Function
		End If
	Next i
	Msgbox(&quot;No Controlgroup with the name &apos;&quot; &amp; sGroupName &amp; &quot;&apos; found&quot; , 16, GetProductName())
End Function


&apos; Returns the Referencevalue of a group of e.g. option buttons or check boxes
&apos; &apos;oControlGroup&apos; is a sequence of the Control objects
Function GetRefValue(oControlGroup() as Object)
Dim i as Integer
	For i = 0 To Ubound(oControlGroup())
&apos;		oControlGroup(i).DefaultState = oControlGroup(i).State
		If oControlGroup(i).State Then
			GetRefValue = oControlGroup(i).RefValue
			exit Function
		End If
	Next
	GetRefValue() = -1
End Function


Function GetRefValueOfControlGroup(oContainer as Object, GroupName as String)
Dim oOptGroup() as Object
Dim iRef as Integer
	oOptGroup() = GetControlGroupModel(oContainer, GroupName)
	iRef = GetRefValue(oOptGroup())
	GetRefValueofControlGroup = iRef
End Function


Function GetOptionGroupValue(oContainer as Object, OptGroupName as String) as Boolean
Dim oRulesOptions() as Object
	oRulesOptions() = GetControlGroupModel(oContainer, OptGroupName)
	GetOptionGroupValue = oRulesOptions(0).State
End Function



Function WriteOptValueToCell(oSheet as Object, OptGroupName as String, iCol as Integer, iRow as Integer) as Boolean
Dim bOptValue as Boolean
Dim oCell as Object
	bOptValue = GetOptionGroupValue(oSheet, OptGroupName)
	oCell = oSheet.GetCellByPosition(iCol, iRow)
	oCell.SetValue(ABS(CInt(bOptValue)))
	WriteOptValueToCell() = bOptValue
End Function


Function LoadDialog(Libname as String, DialogName as String, Optional oLibContainer)
Dim oLib as Object
Dim oLibDialog as Object
Dim oRuntimeDialog as Object
	If IsMissing(oLibContainer ) then
		oLibContainer = DialogLibraries
	End If
	oLibContainer.LoadLibrary(LibName)
	oLib = oLibContainer.GetByName(Libname)
	oLibDialog = oLib.GetByName(DialogName)
	oRuntimeDialog = CreateUnoDialog(oLibDialog)
	LoadDialog() = oRuntimeDialog
End Function


Sub GetFolderName(oRefModel as Object)
Dim oFolderDialog as Object
Dim iAccept as Integer
Dim sPath as String
Dim InitPath as String
Dim RefControlName as String
Dim oUcb as object
	&apos;Note: The following services have to be called in the following order
	&apos; because otherwise Basic does not remove the FileDialog Service
	oFolderDialog = CreateUnoService(&quot;com.sun.star.ui.dialogs.FolderPicker&quot;)
	oUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
	InitPath = ConvertToUrl(oRefModel.Text)
	If InitPath = &quot;&quot; Then
		InitPath = GetPathSettings(&quot;Work&quot;)
	End If
	If oUcb.Exists(InitPath) Then
		oFolderDialog.SetDisplayDirectory(InitPath)
	End If
	iAccept = oFolderDialog.Execute()
	If iAccept = 1 Then
		sPath = oFolderDialog.GetDirectory()
		If oUcb.Exists(sPath) Then
			oRefModel.Text = ConvertFromUrl(sPath)
		End If
	End If
End Sub


Sub GetFileName(oRefModel as Object, Filternames())
Dim oFileDialog as Object
Dim iAccept as Integer
Dim sPath as String
Dim InitPath as String
Dim RefControlName as String
Dim oUcb as object
&apos;Dim ListAny(0)
	&apos;Note: The following services have to be called in the following order
	&apos; because otherwise Basic does not remove the FileDialog Service
	oFileDialog = CreateUnoService(&quot;com.sun.star.ui.dialogs.FilePicker&quot;)
	oUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
	&apos;ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE
	&apos;oFileDialog.initialize(ListAny())
	AddFiltersToDialog(FilterNames(), oFileDialog)
	InitPath = ConvertToUrl(oRefModel.Text)
	If InitPath = &quot;&quot; Then
		InitPath = GetPathSettings(&quot;Work&quot;)
	End If
	If oUcb.Exists(InitPath) Then
		oFileDialog.SetDisplayDirectory(InitPath)
	End If
	iAccept = oFileDialog.Execute()
	If iAccept = 1 Then
		sPath = oFileDialog.Files(0)
		If oUcb.Exists(sPath) Then
			oRefModel.Text = ConvertFromUrl(sPath)
		End If
	End If
	oFileDialog.Dispose()
End Sub


Function StoreDocument(oDocument as Object, FilterNames() as String, DefaultName as String, DisplayDirectory as String, Optional iAddProcedure as Integer) as String
Dim NoArgs() as New com.sun.star.beans.PropertyValue
Dim oStoreProperties(0) as New com.sun.star.beans.PropertyValue
Dim oStoreDialog as Object
Dim iAccept as Integer
Dim sPath as String
Dim ListAny(0) as Long
Dim UIFilterName as String
Dim FilterName as String
Dim FilterIndex as Integer
	ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION_PASSWORD
	oStoreDialog = CreateUnoService(&quot;com.sun.star.ui.dialogs.FilePicker&quot;)
	oStoreDialog.Initialize(ListAny())
	AddFiltersToDialog(FilterNames(), oStoreDialog)
	oStoreDialog.SetDisplayDirectory(DisplayDirectory)
	oStoreDialog.SetDefaultName(DefaultName)
	oStoreDialog.setValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION,0, true)

	iAccept = oStoreDialog.Execute()
	If iAccept = 1 Then
		sPath = oStoreDialog.Files(0)
		UIFilterName = oStoreDialog.GetCurrentFilter()
		FilterIndex = IndexInArray(UIFilterName, FilterNames())
		FilterName = FilterNames(FilterIndex,2)
		If Not IsMissing(iAddProcedure) Then
			Select Case iAddProcedure
				Case 1
					CommitLastDocumentChanges(sPath)
			End Select
		End If
		On Local Error Goto NOSAVING
		If FilterName = &quot;&quot;  Then
			&apos; Todo: Catch the case that a document that has to be overwritten is writeprotected (e.g. it is open)
			oDocument.StoreAsUrl(sPath, NoArgs())
		Else
			oStoreProperties(0).Name = &quot;FilterName&quot;
			oStoreProperties(0).Value = FilterName
			oDocument.StoreAsUrl(sPath, oStoreProperties())
		End If
	End If
	oStoreDialog.dispose()
	StoreDocument() = sPath
	Exit Function
NOSAVING:
	If Err &lt;&gt; 0 Then
&apos;		Msgbox(&quot;Document cannot be saved under &apos;&quot; &amp; ConvertFromUrl(sPath) &amp; &quot;&apos;&quot;, 48, GetProductName())
		sPath = &quot;&quot;
		oStoreDialog.dispose()
		Resume NOERROR
		NOERROR:
	End If
End Function


Sub AddFiltersToDialog(FilterNames() as String, oDialog as Object)
Dim i as Integer
Dim MaxIndex as Integer
Dim ViewFiltername as String
Dim oProdNameAccess as Object
Dim sProdName as String
	oProdNameAccess = GetRegistryKeyContent(&quot;org.openoffice.Setup/Product&quot;)
	sProdName = oProdNameAccess.getByName(&quot;ooName&quot;)
	MaxIndex = Ubound(FilterNames(), 1)
	For i = 0 To MaxIndex
		Filternames(i,0) = ReplaceString(Filternames(i,0), sProdName,&quot;%productname%&quot;)
		oDialog.AppendFilter(FilterNames(i,0), FilterNames(i,1))
	Next i
	oDialog.SetCurrentFilter(FilterNames(0,0))
End Sub


Sub SwitchMousePointer(oWindowPeer as Object, bDoEnable as Boolean)
Dim oWindowPointer as Object
	oWindowPointer = CreateUnoService(&quot;com.sun.star.awt.Pointer&quot;)
	If bDoEnable Then
		oWindowPointer.SetType(com.sun.star.awt.SystemPointer.ARROW)
	Else
		oWindowPointer.SetType(com.sun.star.awt.SystemPointer.WAIT)
	End If
	oWindowPeer.SetPointer(oWindowPointer)
End Sub


Sub ShowOverwriteAllDialog(FilePath as String, sTitle as String)
Dim QueryString as String
Dim LocRetValue as Integer
Dim lblYes as String
Dim lblNo as String
Dim lblYesToAll as String
Dim lblCancel as String
Dim OverwriteModel as Object
	If InitResources(GetProductName()) Then
		QueryString = GetResText(&quot;RID_COMMON_7&quot;)
		QueryString = ReplaceString(QueryString, ConvertFromUrl(FilePath), &quot;&lt;PATH&gt;&quot;)
		If Len(QueryString) &gt; 190 Then
			QueryString = DeleteStr(QueryString, &quot;.&lt;BR&gt;&quot;)
		End If
		QueryString = ReplaceString(QueryString, chr(13), &quot;&lt;BR&gt;&quot;)
		lblYes = GetResText(&quot;RID_COMMON_8&quot;)
		lblYesToAll = GetResText(&quot;RID_COMMON_9&quot;)
		lblNo = GetResText(&quot;RID_COMMON_10&quot;)
		lblCancel = GetResText(&quot;RID_COMMON_11&quot;)
		DlgOverwrite = LoadDialog(&quot;Tools&quot;, &quot;DlgOverwriteAll&quot;)
		DlgOverwrite.Title = sTitle
		OverwriteModel = DlgOverwrite.Model
		OverwriteModel.cmdYes.Label = lblYes
		OverwriteModel.cmdYesToAll.Label = lblYesToAll
		OverwriteModel.cmdNo.Label = lblNo
		OverwriteModel.cmdCancel.Label = lblCancel
		OverwriteModel.lblQueryforSave.Label = QueryString
		OverwriteModel.cmdNo.DefaultButton = True
		DlgOverwrite.GetControl(&quot;cmdNo&quot;).SetFocus()
		iGeneralOverwrite = 999
		LocRetValue = DlgOverwrite.execute()
		If iGeneralOverwrite = 999 Then
			iGeneralOverwrite = SBOVERWRITECANCEL
		End If
		DlgOverwrite.dispose()
	Else
		iGeneralOverwrite = SBOVERWRITECANCEL
	End If
End Sub


Sub SetOVERWRITEToQuery()
	iGeneralOverwrite = SBOVERWRITEQUERY
	DlgOverwrite.EndExecute()
End Sub


Sub SetOVERWRITEToAlways()
	iGeneralOverwrite = SBOVERWRITEALWAYS
	DlgOverwrite.EndExecute()
End Sub


Sub SetOVERWRITEToNever()
	iGeneralOverwrite = SBOVERWRITENEVER
	DlgOverwrite.EndExecute()
End Sub
</script:module>