123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- <?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
- ' Accepts the name of a control and returns the respective control model as object
- ' The Container can either be a whole document or a specific sheet of a Calc-Document
- ' 'CName' 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("No Control with the name '" & CName & "' found" , 16, GetProductName())
- End Function
- ' Gets the Shape of a Control( e. g. to reset the size or Position of the control
- ' Parameters:
- ' The 'oContainer' is the Document or a specific sheet of a Calc - Document
- ' 'CName' 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, "com.sun.star.drawing.XControlShape") then
- If ashape.Control.Name = CName then
- GetControlShape = aShape
- exit Function
- End If
- End If
- Next
- End Function
- ' Returns the View of a Control
- ' Parameters:
- ' The 'oContainer' is the Document or a specific sheet of a Calc - Document
- ' The 'oController' is always directly attached to the Document
- ' 'CName' 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("No Control with the name '" & CName & "' found" , 16, GetProductName())
- End Function
- ' Parameters:
- ' The 'oContainer' is the Document or a specific sheet of a Calc - Document
- ' 'CName' 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
- ' Returns a sequence of a group of controls like option buttons or checkboxes
- ' The 'oContainer' is the Document or a specific sheet of a Calc - Document
- ' 'sGroupName' 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("No Controlgroup with the name '" & sGroupName & "' found" , 16, GetProductName())
- End Function
- ' Returns the Referencevalue of a group of e.g. option buttons or check boxes
- ' 'oControlGroup' is a sequence of the Control objects
- Function GetRefValue(oControlGroup() as Object)
- Dim i as Integer
- For i = 0 To Ubound(oControlGroup())
- ' 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
- 'Note: The following services have to be called in the following order
- ' because otherwise Basic does not remove the FileDialog Service
- oFolderDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
- oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- InitPath = ConvertToUrl(oRefModel.Text)
- If InitPath = "" Then
- InitPath = GetPathSettings("Work")
- 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
- 'Dim ListAny(0)
- 'Note: The following services have to be called in the following order
- ' because otherwise Basic does not remove the FileDialog Service
- oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
- oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- 'ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE
- 'oFileDialog.initialize(ListAny())
- AddFiltersToDialog(FilterNames(), oFileDialog)
- InitPath = ConvertToUrl(oRefModel.Text)
- If InitPath = "" Then
- InitPath = GetPathSettings("Work")
- 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("com.sun.star.ui.dialogs.FilePicker")
- 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 = "" Then
- ' 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 = "FilterName"
- oStoreProperties(0).Value = FilterName
- oDocument.StoreAsUrl(sPath, oStoreProperties())
- End If
- End If
- oStoreDialog.dispose()
- StoreDocument() = sPath
- Exit Function
- NOSAVING:
- If Err <> 0 Then
- ' Msgbox("Document cannot be saved under '" & ConvertFromUrl(sPath) & "'", 48, GetProductName())
- sPath = ""
- 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("org.openoffice.Setup/Product")
- sProdName = oProdNameAccess.getByName("ooName")
- MaxIndex = Ubound(FilterNames(), 1)
- For i = 0 To MaxIndex
- Filternames(i,0) = ReplaceString(Filternames(i,0), sProdName,"%productname%")
- 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("com.sun.star.awt.Pointer")
- 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("RID_COMMON_7")
- QueryString = ReplaceString(QueryString, ConvertFromUrl(FilePath), "<PATH>")
- If Len(QueryString) > 190 Then
- QueryString = DeleteStr(QueryString, ".<BR>")
- End If
- QueryString = ReplaceString(QueryString, chr(13), "<BR>")
- lblYes = GetResText("RID_COMMON_8")
- lblYesToAll = GetResText("RID_COMMON_9")
- lblNo = GetResText("RID_COMMON_10")
- lblCancel = GetResText("RID_COMMON_11")
- DlgOverwrite = LoadDialog("Tools", "DlgOverwriteAll")
- 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("cmdNo").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>
|