Apache OpenOffice (AOO) Bugzilla – Issue 123516
Undocumented and cumbersome css.ui.dialogs.ColorPicker
Last modified: 2017-05-20 10:44:53 UTC
Since 3.4.0 there is a color picker that can be "used" from the API, but it is undocumented and cumbersome, as the following OO Basic code shows: REM ***** BASIC ***** Option Explicit Sub Main Dim oParent as Object Dim oDialog as Object oParent = ThisComponent.getCurrentController().getFrame().getContainerWindow() oDialog = CreateUnoService("com.sun.star.ui.dialogs.ColorPicker") 'the dialog must be initialized with the Parent window oDialog.initialize(Array(oParent)) 'the dialog implements css.beans.XPropertyAccess Dim aProps(1) as new com.sun.star.beans.PropertyValue ' the original selected color aProps(0).Name = "Color" aProps(0).Value = RGB(255,0,0) ' the "mode" is an implementation detail! ' 2 = show control with previous color aProps(1).Name = "Mode" aProps(1).Value = 2 oDialog.setPropertyValues(aProps) 'this is broken oDialog.setTitle("Color Picker API Demo") If oDialog.execute() = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then ' retrieving the selected color is cumbersome Dim nSelectedColor as Long Dim aPropVals() aPropVals = oDialog.getPropertyValues() Dim n as Long For n = 0 To UBound(aPropVals) If aPropVals(n).Name = "Color" Then nSelectedColor = aPropVals(n).Value Exit For End If Next MsgBox "Selected color: RGB( " & _ CStr(Red(nSelectedColor)) & ", " & _ CStr(Green(nSelectedColor)) & ", " & _ CStr(Blue(nSelectedColor)) & " )" End If End Sub
Created attachment 81806 [details] ColorPicker service draft
Created attachment 81807 [details] XColorPicker interface draft
Created attachment 81808 [details] Sample AOO Basic code
Maybe it would be nice to add this in API documentation: http://www.openoffice.org/api/docs/common/ref/com/sun/star/ui/dialogs/module-ix.html
(In reply to oooforum from comment #4) > Maybe it would be nice to add this in API documentation: > http://www.openoffice.org/api/docs/common/ref/com/sun/star/ui/dialogs/module- > ix.html I've changed a bit the IDL, because it was exposing some internal implementation details (namely, the preview control displaying the original color).
Created attachment 82073 [details] ColorPicker service, second draft
Created attachment 82074 [details] XColorPicker interface, second draft
The second draft hides the dialog's implementation details by using two interfaces: css::ui::dialogs::XControlInformation; css::ui::dialogs::XControlAccess; Showing a color picker, displaying the original color, can be done with the following Basic code: Sub ColorPicker_PreviousColor Dim oWin as Object oWin = ThisComponent.getCurrentController().getFrame().getContainerWindow() Dim oDlg oDlg = com.sun.star.ui.dialogs.ColorPicker.create(oWin, RGB(255,0,0)) oDlg.setTitle("Color Picker Demo") oDlg.setControlProperty("PreviousColor","Visible",True) Dim nResult% nResult = oDlg.execute() If nResult = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then Dim nColor as Long nColor = oDlg.SelectedColor MsgBox "Selected color: RGB(" & _ CStr(Red(nColor)) & "," & _ CStr(Green(nColor)) & "," & _ CStr(Blue(nColor)) & ")" End If End Sub Instead of using strings ("PreviousColor","Visible"), it would be better to use constants, like the FilePicker does (XFilePickerControlAccess with CommonFilePickerElementIds, ExtendedFilePickerElementIds). But for now the color picker only exposes one control (original color preview) with one property (visible).
Reset the assignee to the default "issues@openoffice.apache.org".