blob: 56a81b755e18e4ad678c1aef2851d2e3aec12ead [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 _SVTOOLS_TEMPLWIN_HXX
#define _SVTOOLS_TEMPLWIN_HXX
#include <tools/resary.hxx>
#include <vcl/splitwin.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/window.hxx>
#include <svtools/headbar.hxx>
#include <svtools/fileview.hxx>
#include <svtools/ivctrl.hxx>
#include <svtools/svmedit2.hxx>
#include <svl/restrictedpaths.hxx>
#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/lang/Locale.hpp>
namespace com{ namespace sun { namespace star { namespace awt { class XWindow; } } } }
namespace com{ namespace sun { namespace star { namespace frame { class XFrame; } } } }
namespace com{ namespace sun { namespace star { namespace document {
class XDocumentProperties;
} } } }
namespace svtools
{
class ODocumentInfoPreview;
}
// class SvtDummyHeaderBar_Impl ------------------------------------------
class SvtDummyHeaderBar_Impl : public Window
{
private:
void UpdateBackgroundColor();
public:
SvtDummyHeaderBar_Impl( Window* pParent );
~SvtDummyHeaderBar_Impl();
virtual void DataChanged( const DataChangedEvent& rDCEvt );
};
// class SvtIconWindow_Impl ----------------------------------------------
class SvtIconWindow_Impl : public Window
{
private:
SvtDummyHeaderBar_Impl aDummyHeaderBar; // spaceholder instead of HeaderBar
SvtIconChoiceCtrl aIconCtrl;
String aNewDocumentRootURL;
String aTemplateRootURL;
String aMyDocumentsRootURL;
String aSamplesFolderRootURL;
long nMaxTextLength;
SvxIconChoiceCtrlEntry* GetEntry( const String& rURL ) const;
public:
SvtIconWindow_Impl( Window* pParent );
~SvtIconWindow_Impl();
virtual void Resize();
inline long GetMaxTextLength() const { return nMaxTextLength; }
inline void SetClickHdl( const Link& rLink ) { aIconCtrl.SetClickHdl( rLink ); }
String GetSelectedIconURL() const;
String GetSelectedIconText() const;
String GetCursorPosIconURL() const;
String GetIconText( const String& rURL ) const;
void InvalidateIconControl();
void SetCursorPos( sal_uLong nPos );
sal_uLong GetCursorPos() const;
sal_uLong GetSelectEntryPos() const;
void SetFocus();
long CalcHeight() const;
sal_Bool IsRootURL( const String& rURL ) const;
sal_uLong GetRootPos( const String& rURL ) const;
void UpdateIcons( sal_Bool _bHiContrast );
inline sal_Bool ProcessKeyEvent( const KeyEvent& rKEvt );
inline const String& GetTemplateRootURL() const { return aTemplateRootURL; }
inline const String& GetMyDocumentsRootURL() const { return aMyDocumentsRootURL; }
inline const String& GetSamplesFolderURL() const { return aSamplesFolderRootURL; }
void SelectFolder(sal_Int32 nFolderPos);
};
inline sal_Bool SvtIconWindow_Impl::ProcessKeyEvent( const KeyEvent& rKEvt )
{
return ( rKEvt.GetKeyCode().IsMod2() ? aIconCtrl.DoKeyInput( rKEvt ) : sal_False );
}
// class SvtFileViewWindow_Impl ------------------------------------------
class SvtTemplateWindow;
class SvtFileViewWindow_Impl : public Window
{
private:
SvtTemplateWindow& rParent;
SvtFileView aFileView;
Link aNewFolderLink;
String aCurrentRootURL;
String aFolderURL;
String aMyDocumentsURL;
String aSamplesFolderURL;
::svt::RestrictedPaths
aURLFilter;
sal_Bool bIsTemplateFolder;
::com::sun::star::uno::Sequence< ::rtl::OUString >
GetNewDocContents() const;
public:
SvtFileViewWindow_Impl( SvtTemplateWindow* pParent );
~SvtFileViewWindow_Impl();
virtual void Resize();
inline void SetSelectHdl( const Link& rLink ) { aFileView.SetSelectHdl( rLink ); }
inline void SetDoubleClickHdl( const Link& rLink ) { aFileView.SetDoubleClickHdl( rLink ); }
inline void SetNewFolderHdl( const Link& rLink ) { aNewFolderLink = rLink; }
inline void ResetCursor() { aFileView.ResetCursor(); }
inline sal_Bool IsTemplateFolder() const { return bIsTemplateFolder; }
inline String GetFolderURL() const { return aFolderURL; }
inline String GetRootURL() const { return aCurrentRootURL; }
inline void OpenRoot( const String& rRootURL )
{ aCurrentRootURL = rRootURL; OpenFolder( rRootURL ); }
inline void SetMyDocumentsURL( const String& _rNewURL ) { aMyDocumentsURL = _rNewURL; }
inline void SetSamplesFolderURL( const String& _rNewURL ) { aSamplesFolderURL = _rNewURL; }
String GetSelectedFile() const;
void OpenFolder( const String& rURL );
sal_Bool HasPreviousLevel( String& rURL ) const;
String GetFolderTitle() const;
void SetFocus();
};
// class SvtFrameWindow_Impl ---------------------------------------------
class SvtDocInfoTable_Impl : public ResStringArray
{
private:
String aEmptyString;
public:
SvtDocInfoTable_Impl();
const String& GetString( long nId ) const;
};
class SvtExtendedMultiLineEdit_Impl : public ExtMultiLineEdit
{
public:
SvtExtendedMultiLineEdit_Impl( Window* pParent,WinBits _nBits );
inline ~SvtExtendedMultiLineEdit_Impl() {}
inline void Clear() { SetText( String() ); }
void InsertEntry( const String& rTitle, const String& rValue );
};
class SvtFrameWindow_Impl : public Window
{
private:
::com::sun::star::uno::Reference < ::com::sun::star::frame::XFrame >
xFrame;
::com::sun::star::uno::Reference < ::com::sun::star::document::XDocumentProperties>
m_xDocProps;
::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >
xWindow;
::svtools::ODocumentInfoPreview*
pEditWin;
Window* pTextWin;
Window* pEmptyWin;
::com::sun::star::lang::Locale aLocale;
SvtDocInfoTable_Impl aInfoTable;
String aCurrentURL;
::rtl::OUString m_aOpenURL;
sal_Bool bDocInfo;
void ShowDocInfo( const String& rURL );
void ViewEditWin();
void ViewTextWin();
void ViewEmptyWin();
void ViewNonEmptyWin(); // views depending on bDocInfo
struct SvtExecuteInfo
{
::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch;
::com::sun::star::util::URL aTargetURL;
};
DECL_STATIC_LINK( SvtFrameWindow_Impl, ExecuteHdl_Impl, SvtExecuteInfo* );
public:
SvtFrameWindow_Impl( Window* pParent );
~SvtFrameWindow_Impl();
virtual void Resize();
void OpenFile( const String& rURL, sal_Bool bPreview, sal_Bool bIsTemplate, sal_Bool bAsTemplate );
void ToggleView( sal_Bool bDocInfo );
};
// class SvtTemplateWindow -----------------------------------------------
class HistoryList_Impl;
class SvtTemplateWindow : public Window
{
private:
ToolBox aFileViewTB;
ToolBox aFrameWinTB;
SplitWindow aSplitWin;
SvtIconWindow_Impl* pIconWin;
SvtFileViewWindow_Impl* pFileWin;
SvtFrameWindow_Impl* pFrameWin;
HistoryList_Impl* pHistoryList;
Link aSelectHdl;
Link aDoubleClickHdl;
Link aNewFolderHdl;
Link aSendFocusHdl;
Timer aSelectTimer;
String aFolderTitle;
virtual void Resize();
DECL_LINK( IconClickHdl_Impl, SvtIconChoiceCtrl* );
DECL_LINK( FileSelectHdl_Impl, SvtFileView* );
DECL_LINK( FileDblClickHdl_Impl, SvtFileView* );
DECL_LINK( NewFolderHdl_Impl, SvtFileView* );
DECL_LINK( TimeoutHdl_Impl, Timer* );
DECL_LINK( ClickHdl_Impl, ToolBox* );
DECL_LINK( ResizeHdl_Impl, SplitWindow* ); // used for split and initial setting of toolbar pos
void PrintFile( const String& rURL );
void AppendHistoryURL( const String& rURL, sal_uLong nGroup );
void OpenHistory();
void DoAction( sal_uInt16 nAction );
void InitToolBoxes();
void InitToolBoxImages();
void UpdateIcons();
protected:
virtual long PreNotify( NotifyEvent& rNEvt );
virtual void DataChanged( const DataChangedEvent& rDCEvt );
public:
SvtTemplateWindow( Window* pParent );
~SvtTemplateWindow();
inline void SetSelectHdl( const Link& rLink ) { aSelectHdl = rLink; }
inline void SetDoubleClickHdl( const Link& rLink ) { aDoubleClickHdl = rLink; }
inline void SetNewFolderHdl( const Link& rLink ) { aNewFolderHdl = rLink; }
inline void SetSendFocusHdl( const Link& rLink ) { aSendFocusHdl = rLink; }
inline sal_Bool IsTemplateFolderOpen() const { return pFileWin->IsTemplateFolder(); }
inline sal_Bool HasIconWinFocus() const { return pIconWin->HasChildPathFocus(); }
void ReadViewSettings( );
void WriteViewSettings( );
sal_Bool IsFileSelected() const;
String GetSelectedFile() const;
void OpenFile( sal_Bool bNotAsTemplate );
String GetFolderTitle() const;
String GetFolderURL() const;
void SetFocus( sal_Bool bIconWin );
void OpenTemplateRoot();
void SetPrevLevelButtonState( const String& rURL ); // sets state (enable/disable) for previous level button
void ClearHistory();
long CalcHeight() const;
void SelectFolder(sal_Int32 nFolderPosition);
};
#endif // _SVTOOLS_TEMPLWIN_HXX