ファイル選択ダイアログ
ここでは,ファイルの選択ダイアログの表示してみます。 開きたいファイルのパスや,保存するファイルのパスを取得する際にはファイルの選択ダイアログを使用するとファイルの選択が簡単に行えます。 注: KDE のファイル選択ダイアログを利用する可能性がある場合には FILEOPEN_SIMPLE の場合でも必ず initialize してください。 ファイルを開くダイアログ
まずは,ファイルを開くダイアログを表示使用する方法です。 ファイルダイアログは, com.sun.star.ui.dialogs.FilePicker サービスから提供されます。このサービスは createUnoService() メソッドでインスタンス化します。 Dim oFilePicker As Object oFilePicker = createUnoService( _ "com.sun.star.ui.dialogs.FilePicker" ) oFilePicker.initialize( Array( _ com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE ) ) この, oFilePicker を execute() するだけでダイアログが表示されます。 oFilePicker.execute() 表示フィルタの追加
ただ開くだけでは味気ないので,ファイルの種類別の表示フィルターを設定します。 表示フィルターの追加には, appendFilter() メソッドを使用します。 void appendFilter( [in]string タイトル, [in]string フィルタ ) のように指定します。複数の表示フィルタを使用するには,セミコロン ";" で区切ります (*.sxw;*.sxc)。 oFilePicker.appendFilter( "All Files (*.*)", "*.*" ) oFilePicker.appendFilter( "Dictionary (*.dic)", "*.dic" ) oFilePicker.appendFilter( "Writer and Calc", "*.sxw;*.sxc" ) ダイアログを表示したときに最初に表示されるフィルタを指定するには, setCurrentFilter() メソッドを使用します。 oFilePicker.setCurrentFilter( "All Files (*.*)" ) ' oFilePicker.setCurrentFilter( "Writer and Calc" ) setCurrentFilter() の引数にはフィルタのタイトルを指定します。タイトルのフィルタがなければエラーになります。 ファイルパスの取得
oFilePicker を execute() メソッドで表示したあと,ユーザーが OK または Cancel ボタンを押したかを取得する必要があります。 Dim nAccept As Integer nAccept = oFilePicker.execute() MsgBox nAccept Cancel を押すと "0" が, OK を押すと "1" が表示されます。これは, com.sun.star.ui.dialogs.ExecutableDialogResults に定義済みの定数で判断できます。 ファイルが選択されて閉じられるたあと, oFilePicker から ファイルの URL が取得します。 URL を取得するのは getFiles() メソッドです。 Dim sFiles() Dim sFileURL() As String nAccept = oFilePicker.execute() If nAccept = 1 Then sFiles() = oFilePicker.getFiles() sFileURL = sFiles(0) MsgBox sFileURL End If ファイルの URL が取得できます。 URL フォーマットからシステムパスに変換するには, StarBasic の runtime function の ConvertFromURL を使用します。 Dim sFilePath As String sFilePath = ConvertFromURL( sFileURL ) MsgBox sFilePath また, com.sun.star.ucb.FileContentProvider サービスを使用してもシステムパスに変換できます。 Dim oFileContenrProvider As Object oFileContentProvider = createUnoService( _ "com.sun.star.ucb.FileContentProvider" ) sFilePath = oFileContentProvider.getSystemPathFromURL( sFileURL ) MsgBox sFilePath ファイルの保存ダイアログ
ファイルの保存ダイアログは com.sun.star.ui.dialogs.FilePicker サービスを initialize() メソッドで初期化することで変更できます。 initialize() の引数の一つに com.sun.star.ui.dialogs.TemplateDescription の定数を指定します。 Dim nAny(0) nAny(0) = _ com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE oFilePicker.Initialize( nAny() ) Initialize() を使用するとチェックボックスなどの拡張されたファイルダイアログも表示できます。 「ファイルに拡張子をつける」チェックボックスを持ったファイルダイアログを使用するには次のようにします。このチェックボックスを使用すると表示フィルタで選ばれた拡張子が付いたファイルの URL が取得できます。 Dim nAny(0) nAny(0) = _ com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION oFilePicker.Initialize( nAny() ) このダイアログを execute() すると,「ファイルに拡張子をつける」チェックボックスが表示されていますが,始めはチェックが入っていません。始めからチェックを入れておくには setValue() メソッドを使用します。 setValue() は Intialize() より後に行います。 Dim nContentID, nAction As Integer nContentID = _ com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION oFilePicker.setValue( nContentID, nAction, True ) void setValue ( [in]integer コントロールID, [in]integer コントロールアクション, [in]any 値 ) コントロール ID は拡張されたコントロールの場合には com.sun.star.ui.dialogs.ExtendedFilePickerElementIds の定数を,拡張されていないコントロールの場合には com.sun.star.ui.dialogs.CommonFilePickerElementIds の定数で指定します。コントロールアクションは, com.sun.star.ui.dialos.ControlActions の定数で指定します。この定数はリストボックスとボタンのものしか定義されていませんのでここでは空の変数にしています (チェックボックスではいまのところ必要ないようです)。値はここではチェックした状態にするので True を指定します。 Initialize() ではなくインスタンス化する際に ProcessServiceManager から createInstanceWithArguments() メソッドでインスタンス化する際に初期化することもできます。 Dim oFilePicker As Object Dim oProcessServiceManager As Object Dim nAny(0) As Integer oProcessServiceManager = GetProcessServiceManager() nAny(0) = _ com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE oFilePicker = oProcessServiceManager.createInstanceWithArguments( _ "com.sun.star.ui.dialogs.FilePicker", nAny() ) 表示ディレクトリ
最初に表示するディレクトリを指定します。 sDir = "file:///home/user/Desktop" oFilePicker.setDisplayDirectory(sDir) Windows 7 では動作しない様子 http://www.openoffice.org/issues/show_bug.cgi?id=110141 複数ファイル選択モード
複数のファイルを選択できるように設定します。 oFilePicker.setMultiSelectionMode(True) 複数のファイルが選択された場合には getFiles メソッドの返り値が次のようになります。
返り値の要素数が 1 のときには選択されたファイルが一つです。 デフォルト名
ファイルのデフォルト名を指定します。ファイル名フィールドに最初に入力された状態になります。 sDefaultName = "Unititled" oFilePicker.setDefaultName(sDefaultName) ダイアログタイトル
ダイアログのタイトルを設定します。 sTitle = "Title" oFilePicker.setTitle(sTitle) |