blob: 9403cb9d21e8f3c13a4449240ed714cb70200918 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _FILEDLG2_HXX
#define _FILEDLG2_HXX
#include <tools/debug.hxx>
#include <tools/fsys.hxx>
#ifndef _SV_BUTTON_HXX //autogen wg. PushButton
#include <vcl/button.hxx>
#endif
#include <vcl/unohelp.hxx>
class FixedText;
class Edit;
class ListBox;
class ListBox;
class Button;
class PathDialog;
class FileDialog;
class ImpPathDialog;
struct ImpFilterItem
{
String aName;
String aMask;
ImpFilterItem( const String & rFilter, const String & rMask )
{
aName = rFilter;
aMask = rMask;
}
};
DECLARE_LIST( ImpFilterList, ImpFilterItem* )
#include <vcl/lstbox.hxx>
class KbdListBox : public ListBox
{
public:
KbdListBox( Window* pParent, WinBits nStyle = WB_BORDER )
: ListBox ( pParent, nStyle )
{};
virtual long PreNotify( NotifyEvent& rNEvt );
};
class ImpPathDialog
{
friend class ImpFileDialog;
private:
PathDialog* pSvPathDialog;
Edit* pEdit;
FixedText* pDirTitel;
KbdListBox* pDirList;
FixedText* pDirPath;
ListBox* pDriveList;
FixedText* pDriveTitle;
PushButton* pLoadBtn;
PushButton* pOkBtn;
PushButton* pCancelBtn;
PushButton* pHomeBtn;
PushButton* pNewDirBtn;
sal_uInt16 nOwnChilds;
DirEntry aPath; // aktuell angewaehlter Pfad
sal_uInt16 nDirCount; // Anzahl der Verzeichnis-
// Verschachtelungen
::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCollator >
xCollator;
protected:
virtual void UpdateEntries( const sal_Bool bWithDirs );
void UpdateDirs( const DirEntry& rTmpPath );
sal_Bool IsFileOk( const DirEntry& rDirEntry );
void InitControls();
DECL_LINK( SelectHdl, ListBox * );
DECL_LINK( DblClickHdl, ListBox * );
DECL_LINK( ClickHdl, Button * );
public:
ImpPathDialog( PathDialog* pDlg, RESOURCE_TYPE nType, sal_Bool bCreateDir );
virtual ~ImpPathDialog();
virtual void SetPath( const String& rPath );
virtual void SetPath( const Edit& rEdit );
virtual String GetPath() const;
virtual void PreExecute();
virtual void PostExecute();
PathDialog* GetPathDialog() const { return pSvPathDialog; }
void SetOkButtonText( const String& rText ) { pOkBtn->SetText( rText ); }
void SetCancelButtonText( const String& rText ) { pCancelBtn->SetText( rText ); }
};
class ImpFileDialog : public ImpPathDialog
{
private:
FixedText* pFileTitel;
ListBox* pFileList;
FixedText* pTypeTitel;
ListBox* pTypeList;
WildCard aMask; // aktuelle Maske
ImpFilterList aFilterList; // Filterliste
sal_uInt16 nCurFilter; // aktueller Filter
sal_Bool bOpen; // sal_True = Open; sal_False = SAVEAS
protected:
void InitControls();
String ExtendFileName( DirEntry aEntry ) const;
DECL_LINK( SelectHdl, ListBox * );
DECL_LINK( DblClickHdl, ListBox * );
DECL_LINK( ClickHdl, Button * );
virtual void UpdateEntries( const sal_Bool bWithDirs );
sal_Bool IsFileOk( const DirEntry& rDirEntry );
public:
ImpFileDialog( PathDialog* pDlg, WinBits nStyle, RESOURCE_TYPE nType );
virtual ~ImpFileDialog();
void AddFilter( const String& rFilter, const String& rMask );
void RemoveFilter( const String& rFilter );
void RemoveAllFilter();
void SetCurFilter( const String& rFilter );
String GetCurFilter() const;
sal_uInt16 GetFilterCount() const { return (sal_uInt16)aFilterList.Count(); }
inline String GetFilterName( sal_uInt16 nPos ) const;
inline String GetFilterType( sal_uInt16 nPos ) const;
virtual void SetPath( const String& rPath );
virtual void SetPath( const Edit& rEdit );
virtual String GetPath() const;
virtual void PreExecute();
FileDialog* GetFileDialog() const { return (FileDialog*)GetPathDialog(); }
};
inline String ImpFileDialog::GetFilterName( sal_uInt16 nPos ) const
{
String aName;
ImpFilterItem* pItem = aFilterList.GetObject( nPos );
if ( pItem )
aName = pItem->aName;
return aName;
}
inline String ImpFileDialog::GetFilterType( sal_uInt16 nPos ) const
{
String aFilterMask;
ImpFilterItem* pItem = aFilterList.GetObject( nPos );
if ( pItem )
aFilterMask = pItem->aMask;
return aFilterMask;
}
class ImpSvFileDlg
{
private:
ImpPathDialog* pDlg;
public:
ImpSvFileDlg() { pDlg = 0; }
~ImpSvFileDlg() { delete pDlg; }
ImpPathDialog* GetDialog() const { return pDlg; }
void CreateDialog( PathDialog* pCreateFrom, WinBits nStyle, RESOURCE_TYPE nType, sal_Bool bCreate );
void SetOkButtonText( const String& rText ) { pDlg->SetOkButtonText( rText ); } // ihr habts ja nicht anders gewollt
void SetCancelButtonText( const String& rText ) { pDlg->SetCancelButtonText( rText ); }
};
#endif // _FILEDLG2_HXX