Top > OOoBasic > Generic > filedialog

ファイル選択ダイアログ Edit

ここでは,ファイルの選択ダイアログの表示してみます。

開きたいファイルのパスや,保存するファイルのパスを取得する際にはファイルの選択ダイアログを使用するとファイルの選択が簡単に行えます。

注: KDE のファイル選択ダイアログを利用する可能性がある場合には FILEOPEN_SIMPLE の場合でも必ず initialize してください。

ファイルを開くダイアログ Edit

まずは,ファイルを開くダイアログを表示使用する方法です。

ファイルダイアログは, 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()

表示フィルタの追加 Edit

ただ開くだけでは味気ないので,ファイルの種類別の表示フィルターを設定します。 表示フィルターの追加には, 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() の引数にはフィルタのタイトルを指定します。タイトルのフィルタがなければエラーになります。

ファイルパスの取得 Edit

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

ファイルの保存ダイアログ Edit

ファイルの保存ダイアログは 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() )

表示ディレクトリ Edit

最初に表示するディレクトリを指定します。

sDir = "file:///home/user/Desktop"
oFilePicker.setDisplayDirectory(sDir)

Windows 7 では動作しない様子 http://www.openoffice.org/issues/show_bug.cgi?id=110141

複数ファイル選択モード Edit

複数のファイルを選択できるように設定します。

oFilePicker.setMultiSelectionMode(True)

複数のファイルが選択された場合には getFiles メソッドの返り値が次のようになります。

  • index 0: ディレクトリへの URL
  • index 1: 一つ目のファイル
  • index 2 ... 2: 二つ目のファイル...

返り値の要素数が 1 のときには選択されたファイルが一つです。

デフォルト名 Edit

ファイルのデフォルト名を指定します。ファイル名フィールドに最初に入力された状態になります。

sDefaultName = "Unititled"
oFilePicker.setDefaultName(sDefaultName)

ダイアログタイトル Edit

ダイアログのタイトルを設定します。

sTitle = "Title"
oFilePicker.setTitle(sTitle)

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes