組込みダイアログ

ファイルを選択するダイアログやディレクトリを選択するダイアログを利用します。

ファイル選択ダイアログ

css.ui.dialogs.FilePicker サービスを利用します。このサービスを利用するとオプション設定に応じて表示されるダイアログが変わります。com.sun.star.ui.dialogs.OfficeFilePicker サービスを利用するといつでも OOo が提供するファイル選択ダイアログが利用できます。

from com.sun.star.ui.dialogs.ExecutableDialogResults import OK as EDR_OK
from com.sun.star.ui.dialogs.TemplateDescription import (
	FILEOPEN_SIMPLE as TD_FILEOPEN_SIMPLE, FILESAVE_SIMPLE as TD_FILESAVE_SIMPLE)

def get_file_url(ctx, multi_selection=False, open_file=True, filters=None, current_filter=''):

	fp = ctx.getServiceManager().createInstanceWithContext(
		'com.sun.star.ui.dialogs.FilePicker', ctx)

	if open_file:
		fp.initialize((TD_FILEOPEN_SIMPLE,))
	else:
		fp.initialize((TD_FILESAVE_SIMPLE,))
	fp.setMultiSelectionMode(multi_selection)
	if filters:
		for name, filter_value in filters:
			fp.appendFilter(name, filter_value)
	if current_filter:
		fp.setCurrentFilter(current_filter)
	
	if fp.execute() == EDR_OK:
		paths = fp.getFiles()
		if len(paths) == 1:
			return paths[0]
		else:
			dir_path = paths[0]
			return ['%s%s' % (dir_path, i) for i in paths[1:]]
	return None


def file_picker_test():
	ctx = XSCRIPTCONTEXT.getComponentContext()
	
	filters = [('All Files (*.*)', '*.*'), ('Text Files (*.txt)', '*.txt')]
	print(get_file_url(ctx, multi_selection=True, filters=filters, current_filter=filters[0][0]))

ディレクトリ選択ダイアログ

com.sun.star.ui.dialogs.FolderPicker サービスを利用します。このサービスではオプション設定に応じて表示されるダイアログが変わります。
com.sun.star.ui.dialogs.OfficeFolderPicker を利用するとユーザーの設定に関わらず OOo が提供するディレクトリ選択ダイアログが利用できます。

from com.sun.star.ui.dialogs.ExecutableDialogResults import OK as EDR_OK

def get_dir_url(ctx, description=''):
	dp = ctx.getServiceManager().createInstanceWithContext(
		'com.sun.star.ui.dialogs.FolderPicker', ctx)
	
	dp.setDescription(description)
	
	if dp.execute() == EDR_OK:
		return dp.getDirectory()
	return None


def folder_picker_test():
	ctx = XSCRIPTCONTEXT.getComponentContext()
	print(get_dir_url(ctx, description="choose a directory"))