FilePicker: сменить надпись на кнопке

Автор eeigor, 2 февраля 2023, 12:27

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Подскажите, как сменить надпись на кнопке «Открыть» на «OK» в диалоге FilePicker?
Интерфейс, вроде, имеет методы get/setLabel, но они требуют aControlId. Как его получить, если это вообще об этом?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

С уважением,
Михаил Каганский

sokol92

В дополнение к ответу Михаила.
Если используются системные диалоги для открытия / сохранения файлов (Меню / Сервис / Параметры / Общие / Диалоги открытия/Сохранения), то изменение надписи для первой группы элементов управления (Common...) может не дать эффект. По моим наблюдением, надписи для второй группы элементов (Extended...) меняются успешно при любых параметрах показа диалогов.
Владимир.

eeigor

Спасибо. Можете привести рабочий пример. У меня метод oFilePicker.setLabel ничего не даёт: тихо завершается без ошибки. А .getLabel возвращает null string.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#4
Так я про кнопку "Открыть" это же и написал.

Вот пример выдачи диалога для открытия файла с возможностью указать опцию "Только для чтения". При выдаче информации о выбранном файле анализируется состояние дополнительной кнопки с надписью "Only for reading".
Sub TestGetFileOpenReadOnly()
  Dim oFilePicker, ctlId As Long
  oFilePicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
  oFilePicker.initialize(Array(com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_READONLY_VERSION))
 
  ctlId=com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_READONLY   ' CheckBox for ReadOnly
  With oFilePicker
    .setLabel ctlId, "Only for reading"
     If .execute() = 1 Then
       Msgbox "Selected file" & IIf(.getValue(ctlId, 0), " (ReadOnly)", "") & ": " & ConvertFromUrl(oFilePicker.getSelectedFiles()(0))
     End If
  End With  
End Sub
Владимир.

mikekaganski

Цитата: sokol92 от  2 февраля 2023, 13:09Если используются системные диалоги для открытия / сохранения файлов (Меню / Сервис / Параметры / Общие / Диалоги открытия/Сохранения), то изменение надписи для первой группы элементов управления (Common...) может не дать эффект.

Это следовало бы написать. И по крайней мере для кнопки "Открыть" и поля имени файла это можно исправить - если в реализации VistaFilePickerImpl::impl_sta_SetControlLabel для соответствующих констант вместо вызова IFileDialogCustomize::SetControlLabel вызывать IFileDialog::SetOkButtonLabel / IFileDialog::SetFileNameLabel.
С уважением,
Михаил Каганский

eeigor

#6
Спасибо. Теперь понял. Для кнопки "Открыть" (CommonFilePickerElementIds) у меня тоже не работает. Ошибок не выдаёт.

UPD. Поменял режим открытия с FILEOPEN_SIMPLE на FILEOPEN_PREVIEW. Никакого флажка предпросмотра файла с окошком не появилось.

A FileOpen dialog with additional controls.
   A checkbox "Show Preview"
   A window for displaying a file preview
Since LibreOffice 5.3

Что-то здесь не так...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Если используются диалоги LO, то отображаются все опции, если системные диалоги - то только те опции, которые поддерживаются соответствующими средствами ОС.
Например, запускаем пример с режимом FILEOPEN_LINK_PREVIEW_IMAGE_ANCHOR под AstraLinux. Видим чекбоксы "Вставить как связь", "Просмотр" и список "Привязка".
Запускаем по Windows и видим только "Связь" и "Привязка".
Владимир.

eeigor

#8
В любом случае для диалогов «Открыть/Сохранить файл» общей кнопкой по умолчанию должна быть «OK», а не Открыть/Сохранить.

Сейчас у меня заголовок окна «Выбрать файл шаблона...» при кнопке Открыть. А мне не нужно открывать, мне нужно только выбрать имя файла с полным путем к нему. Открывать на основе шаблона – другая операция.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#9
Это вопрос, скорее, к разработчикам ОС.

Например (Excel VBA):

Application.FileDialog(msoFileDialogFilePicker).Show
Вопреки ожиданиям, кнопка по умолчанию называется "Открыть" (а не OK или Выбрать). Название (конкретно этой кнопки) можно изменить с помощью свойства ButtonName.
Владимир.

eeigor

Владимир, ну тогда плохо, что мы не можем поменять надпись конкретно этой кнопки (о чем зд. и писали).
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

tdf#153330.

Скоро сможем (по меньшей мере, в Windows).  :)
Владимир.

eeigor

Круто. Я буду завидовать из Linux'а. :)
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

А в Linux Caolán McNamarа исправил баг, начиная с 7.4.6.  :)
Владимир.

mikekaganski

С уважением,
Михаил Каганский