summaryrefslogtreecommitdiff
path: root/svx/source/inc/datanavi.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/inc/datanavi.hxx')
-rw-r--r--svx/source/inc/datanavi.hxx601
1 files changed, 601 insertions, 0 deletions
diff --git a/svx/source/inc/datanavi.hxx b/svx/source/inc/datanavi.hxx
new file mode 100644
index 000000000000..a8bfad89090b
--- /dev/null
+++ b/svx/source/inc/datanavi.hxx
@@ -0,0 +1,601 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SVX_DATANAVI_HXX
+#define _SVX_DATANAVI_HXX
+
+#include <vcl/dialog.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/lstbox.hxx>
+#include <vcl/menubtn.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/tabctrl.hxx>
+#include <vcl/tabpage.hxx>
+#include <vcl/toolbox.hxx>
+#include <svtools/inettbc.hxx>
+#include <svtools/svmedit.hxx>
+#include <svtools/svtreebx.hxx>
+#include <sfx2/dockwin.hxx>
+#include <sfx2/ctrlitem.hxx>
+#include <svx/simptabl.hxx>
+#include <rtl/ref.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XContainer.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/xforms/XFormsUIHelper1.hpp>
+#include <com/sun/star/xforms/XModel.hpp>
+#include <com/sun/star/xforms/XSubmission.hpp>
+#include <com/sun/star/xml/dom/XNode.hpp>
+#include <com/sun/star/xml/dom/events/XEventTarget.hpp>
+
+#include "datalistener.hxx"
+#include <vector>
+
+// forward ---------------------------------------------------------------
+
+class FmFormShell;
+
+//========================================================================
+//............................................................................
+namespace svxform
+{
+//............................................................................
+
+ enum DataGroupType
+ {
+ DGTUnknown = 0,
+ DGTInstance,
+ DGTSubmission,
+ DGTBinding
+ };
+
+ enum DataItemType
+ {
+ DITNone = 0,
+ DITText,
+ DITAttribute,
+ DITElement,
+ DITBinding
+ };
+
+ struct ItemNode;
+ class XFormsPage;
+ class DataNavigatorWindow;
+ class AddInstanceDialog;
+
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::xforms::XFormsUIHelper1 > XFormsUIHelper1_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::xml::dom::XNode > XNode_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet > XPropertySet_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::xforms::XModel > XModel_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainer > XContainer_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XNameContainer > XNameContainer_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::frame::XFrame > XFrame_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::frame::XModel > XFrameModel_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::xml::dom::events::XEventTarget > XEventTarget_ref;
+ typedef ::com::sun::star::uno::Reference<
+ ::com::sun::star::xforms::XSubmission > XSubmission_ref;
+
+ typedef ::com::sun::star::uno::Sequence<
+ ::com::sun::star::beans::PropertyValue > PropertyValue_seq;
+
+ typedef std::vector< XContainer_ref > ContainerList;
+ typedef std::vector< XEventTarget_ref > EventTargetList;
+
+ //========================================================================
+ class DataTreeListBox : public SvTreeListBox
+ {
+ private:
+ XFormsPage* m_pXFormsPage;
+ DataGroupType m_eGroup;
+
+ protected:
+ using SvTreeListBox::ExecuteDrop;
+
+ public:
+ DataTreeListBox( XFormsPage* pPage, DataGroupType _eGroup, const ResId& rResId );
+ ~DataTreeListBox();
+
+ virtual PopupMenu* CreateContextMenu( void );
+ virtual void ExcecuteContextMenuAction( sal_uInt16 _nSelectedPopupEntry );
+ virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
+ virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
+
+ void DeleteAndClear();
+ void RemoveEntry( SvLBoxEntry* _pEntry );
+ };
+
+ //========================================================================
+ class XFormsPage : public TabPage
+ {
+ private:
+ ToolBox m_aToolBox;
+ DataTreeListBox m_aItemList;
+
+ XFormsUIHelper1_ref m_xUIHelper;
+
+ DataNavigatorWindow* m_pNaviWin;
+ bool m_bHasModel;
+ DataGroupType m_eGroup;
+ ImageList m_TbxImageList;
+ ImageList m_TbxHCImageList;
+ // these strings are not valid on the Submission and Binding Page
+ // mb: furthermore these are properties of an instance, thus
+ // it would be much better to get/set them through the UIHelper
+ // interface.
+ String m_sInstanceName;
+ String m_sInstanceURL;
+ bool m_bLinkOnce;
+
+ DECL_LINK( TbxSelectHdl, ToolBox * );
+ DECL_LINK( ItemSelectHdl, DataTreeListBox * );
+
+ void AddChildren( SvLBoxEntry* _pParent,
+ const ImageList& _rImgLst,
+ const XNode_ref& _xNode );
+ bool DoToolBoxAction( sal_uInt16 _nToolBoxID );
+ SvLBoxEntry* AddEntry( ItemNode* _pNewNode, bool _bIsElement );
+ SvLBoxEntry* AddEntry( const XPropertySet_ref& _rPropSet );
+ void EditEntry( const XPropertySet_ref& _rPropSet );
+ bool RemoveEntry();
+
+ protected:
+ virtual long Notify( NotifyEvent& rNEvt );
+
+ public:
+ XFormsPage( Window* pParent, DataNavigatorWindow* _pNaviWin, DataGroupType _eGroup );
+ ~XFormsPage();
+
+ virtual void Resize();
+
+ inline bool HasModel() const { return m_bHasModel; }
+ String SetModel( const XModel_ref& _xModel, sal_uInt16 _nPagePos );
+ void ClearModel();
+ String LoadInstance( const PropertyValue_seq& _xPropSeq,
+ const ImageList& _rImgLst );
+
+ bool DoMenuAction( sal_uInt16 _nMenuID );
+ void EnableMenuItems( Menu* _pMenu );
+
+ inline SvLBoxEntry* GetSelectedItem() const { return m_aItemList.FirstSelected(); }
+ inline const String& GetInstanceName() const { return m_sInstanceName; }
+ inline const String& GetInstanceURL() const { return m_sInstanceURL; }
+ inline bool GetLinkOnce() const { return m_bLinkOnce; }
+ inline void SetInstanceName( const String &name ) { m_sInstanceName=name; }
+ inline void SetInstanceURL( const String &url ) { m_sInstanceURL=url; }
+ inline void SetLinkOnce( bool bLinkOnce ) { m_bLinkOnce=bLinkOnce; }
+
+ typedef com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> XPropertySet_t;
+ typedef com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode> XNode_t;
+
+ inline XPropertySet_t GetBindingForNode( const XNode_t &xNode ) { return m_xUIHelper->getBindingForNode(xNode,true); }
+ inline String GetServiceNameForNode( const XNode_t &xNode ) { return m_xUIHelper->getDefaultServiceNameForNode(xNode); }
+ inline XFormsUIHelper1_ref GetXFormsHelper( void ) const { return m_xUIHelper; }
+ };
+
+ //========================================================================
+
+ typedef std::vector< XFormsPage* > PageList;
+ typedef ::rtl::Reference < DataListener > DataListener_ref;
+
+ class DataNavigatorWindow : public Window
+ {
+ private:
+
+ ListBox m_aModelsBox;
+ MenuButton m_aModelBtn;
+ TabControl m_aTabCtrl;
+ MenuButton m_aInstanceBtn;
+
+ XFormsPage* m_pInstPage;
+ XFormsPage* m_pSubmissionPage;
+ XFormsPage* m_pBindingPage;
+
+ long m_nMinWidth;
+ long m_nMinHeight;
+ long m_nBorderHeight;
+ sal_uInt16 m_nLastSelectedPos;
+ bool m_bShowDetails;
+ bool m_bIsNotifyDisabled;
+ Size m_a2Size;
+ Size m_a3Size;
+ ImageList m_aItemImageList;
+ ImageList m_aItemHCImageList;
+ PageList m_aPageList;
+ ContainerList m_aContainerList;
+ EventTargetList m_aEventTargetList;
+ Timer m_aUpdateTimer;
+
+ DataListener_ref m_xDataListener;
+ XNameContainer_ref m_xDataContainer;
+ XFrame_ref m_xFrame;
+ XFrameModel_ref m_xFrameModel;
+
+ DECL_LINK( ModelSelectHdl, ListBox * );
+ DECL_LINK( MenuSelectHdl, MenuButton * );
+ DECL_LINK( MenuActivateHdl, MenuButton * );
+ DECL_LINK( ActivatePageHdl, TabControl* );
+ DECL_LINK( UpdateHdl, Timer* );
+
+ XFormsPage* GetCurrentPage( sal_uInt16& rCurId );
+ void LoadModels();
+ void SetPageModel();
+ void ClearAllPageModels( bool bClearPages );
+ void InitPages();
+ void CreateInstancePage( const PropertyValue_seq& _xPropSeq );
+ bool HasFirstInstancePage() const;
+ sal_uInt16 GetNewPageId() const;
+
+ protected:
+ virtual void Resize();
+
+ public:
+ DataNavigatorWindow( Window* pParent, SfxBindings* pBindings );
+ ~DataNavigatorWindow();
+
+ void SetDocModified();
+ void NotifyChanges( bool _bLoadAll = false );
+ void AddContainerBroadcaster( const XContainer_ref& xContainer );
+ void AddEventBroadcaster( const XEventTarget_ref& xTarget );
+ void RemoveBroadcaster();
+
+ inline const ImageList& GetItemImageList() const { return m_aItemImageList; }
+ inline const ImageList& GetItemHCImageList() const { return m_aItemHCImageList; }
+ inline bool IsShowDetails() const { return m_bShowDetails; }
+ inline void DisableNotify( bool _bDisable ) { m_bIsNotifyDisabled = _bDisable; }
+ };
+
+ //========================================================================
+ class DataNavigator : public SfxDockingWindow, public SfxControllerItem
+ {
+ private:
+ DataNavigatorWindow m_aDataWin;
+
+ protected:
+ virtual void Resize();
+ virtual sal_Bool Close();
+ virtual void GetFocus();
+ virtual Size CalcDockingSize( SfxChildAlignment );
+ virtual SfxChildAlignment CheckAlignment( SfxChildAlignment, SfxChildAlignment );
+
+ public:
+ DataNavigator( SfxBindings* pBindings, SfxChildWindow* pMgr, Window* pParent );
+ virtual ~DataNavigator();
+
+ using Window::Update;
+ using SfxDockingWindow::StateChanged;
+
+ void Update( FmFormShell* pFormShell );
+ void StateChanged( sal_uInt16 nSID, SfxItemState eState,
+ const SfxPoolItem* pState );
+ };
+
+ //========================================================================
+ class SVX_DLLPUBLIC DataNavigatorManager : public SfxChildWindow
+ {
+ public:
+ SVX_DLLPRIVATE DataNavigatorManager( Window* pParent, sal_uInt16 nId,
+ SfxBindings* pBindings, SfxChildWinInfo* pInfo );
+ SFX_DECL_CHILDWINDOW( DataNavigatorManager );
+ };
+
+ //========================================================================
+ class AddDataItemDialog : public ModalDialog
+ {
+ private:
+
+ FixedLine m_aItemFL;
+ FixedText m_aNameFT;
+ Edit m_aNameED;
+ FixedText m_aDefaultFT;
+ Edit m_aDefaultED;
+ PushButton m_aDefaultBtn;
+
+ FixedLine m_aSettingsFL;
+ FixedText m_aDataTypeFT;
+ ListBox m_aDataTypeLB;
+
+ CheckBox m_aRequiredCB;
+ PushButton m_aRequiredBtn;
+ CheckBox m_aRelevantCB;
+ PushButton m_aRelevantBtn;
+ CheckBox m_aConstraintCB;
+ PushButton m_aConstraintBtn;
+ CheckBox m_aReadonlyCB;
+ PushButton m_aReadonlyBtn;
+ CheckBox m_aCalculateCB;
+ PushButton m_aCalculateBtn;
+
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ XFormsUIHelper1_ref m_xUIHelper;
+ XPropertySet_ref m_xBinding;
+ XPropertySet_ref m_xTempBinding;
+
+ ItemNode* m_pItemNode;
+ DataItemType m_eItemType;
+ String m_sFL_Element;
+ String m_sFL_Attribute;
+ String m_sFL_Binding;
+ String m_sFT_BindingExp;
+
+ DECL_LINK( CheckHdl, CheckBox * );
+ DECL_LINK( ConditionHdl, PushButton * );
+ DECL_LINK( OKHdl, OKButton * );
+
+ void InitDialog();
+ void InitFromNode();
+ void InitDataTypeBox();
+
+ public:
+ AddDataItemDialog(
+ Window* pParent, ItemNode* _pNode, const XFormsUIHelper1_ref& _rUIHelper );
+ ~AddDataItemDialog();
+
+ void InitText( DataItemType _eType );
+ };
+
+ //========================================================================
+ class AddConditionDialog : public ModalDialog
+ {
+ private:
+ FixedText m_aConditionFT;
+ MultiLineEdit m_aConditionED;
+ FixedText m_aResultFT;
+ FixedText m_aResultWin;
+ PushButton m_aEditNamespacesBtn;
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ Timer m_aResultTimer;
+ ::rtl::OUString m_sPropertyName;
+
+ XFormsUIHelper1_ref m_xUIHelper;
+ XPropertySet_ref m_xBinding;
+
+ DECL_LINK( ModifyHdl, MultiLineEdit * );
+ DECL_LINK( ResultHdl, Timer * );
+ DECL_LINK( EditHdl, PushButton * );
+ DECL_LINK( OKHdl, OKButton * );
+
+ public:
+ AddConditionDialog( Window* pParent,
+ const ::rtl::OUString& _rPropertyName, const XPropertySet_ref& _rBinding );
+ ~AddConditionDialog();
+
+ inline XFormsUIHelper1_ref GetUIHelper() const { return m_xUIHelper; }
+ inline String GetCondition() const { return m_aConditionED.GetText(); }
+ inline void SetCondition( const String& _rCondition );
+ };
+
+ inline void AddConditionDialog::SetCondition( const String& _rCondition )
+ {
+ m_aConditionED.SetText( _rCondition );
+ m_aResultTimer.Start();
+ }
+
+ //========================================================================
+ class NamespaceItemDialog : public ModalDialog
+ {
+ private:
+ typedef std::vector< ::rtl::OUString > PrefixList;
+
+ FixedText m_aNamespacesFT;
+ SvxSimpleTable m_aNamespacesList;
+ PushButton m_aAddNamespaceBtn;
+ PushButton m_aEditNamespaceBtn;
+ PushButton m_aDeleteNamespaceBtn;
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ AddConditionDialog* m_pConditionDlg;
+ PrefixList m_aRemovedList;
+
+ XNameContainer_ref& m_rNamespaces;
+
+ DECL_LINK( SelectHdl, SvxSimpleTable * );
+ DECL_LINK( ClickHdl, PushButton * );
+ DECL_LINK( OKHdl, OKButton * );
+
+ void LoadNamespaces();
+
+ public:
+ NamespaceItemDialog( AddConditionDialog* pParent, XNameContainer_ref& _rContainer );
+ ~NamespaceItemDialog();
+ };
+
+ //========================================================================
+ class ManageNamespaceDialog : public ModalDialog
+ {
+ private:
+ FixedText m_aPrefixFT;
+ Edit m_aPrefixED;
+ FixedText m_aUrlFT;
+ Edit m_aUrlED;
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ AddConditionDialog* m_pConditionDlg;
+
+ DECL_LINK( OKHdl, OKButton * );
+
+ public:
+ ManageNamespaceDialog( Window* pParent, AddConditionDialog* _pCondDlg, bool _bIsEdit );
+ ~ManageNamespaceDialog();
+
+ inline void SetNamespace( const String& _rPrefix, const String& _rURL );
+ inline String GetPrefix() const { return m_aPrefixED.GetText(); }
+ inline String GetURL() const { return m_aUrlED.GetText(); }
+ };
+
+ void ManageNamespaceDialog::SetNamespace( const String& _rPrefix, const String& _rURL )
+ {
+ m_aPrefixED.SetText( _rPrefix );
+ m_aUrlED.SetText( _rURL );
+ }
+
+ //========================================================================
+ class AddSubmissionDialog : public ModalDialog
+ {
+ private:
+ FixedLine m_aSubmissionFL;
+ FixedText m_aNameFT;
+ Edit m_aNameED;
+ FixedText m_aActionFT;
+ Edit m_aActionED;
+ FixedText m_aMethodFT;
+ ListBox m_aMethodLB;
+ FixedText m_aRefFT;
+ Edit m_aRefED;
+ PushButton m_aRefBtn;
+ FixedText m_aBindFT;
+ ListBox m_aBindLB;
+ FixedText m_aReplaceFT;
+ ListBox m_aReplaceLB;
+
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ ItemNode* m_pItemNode;
+
+ XFormsUIHelper1_ref m_xUIHelper;
+ XSubmission_ref m_xNewSubmission;
+ XPropertySet_ref m_xSubmission;
+ XPropertySet_ref m_xTempBinding;
+ XPropertySet_ref m_xCreatedBinding;
+
+ DECL_LINK( RefHdl, PushButton * );
+ DECL_LINK( OKHdl, OKButton * );
+
+ void FillAllBoxes();
+
+ public:
+ AddSubmissionDialog( Window* pParent, ItemNode* _pNode,
+ const XFormsUIHelper1_ref& _rUIHelper );
+ ~AddSubmissionDialog();
+
+ inline const XSubmission_ref& GetNewSubmission() const { return m_xNewSubmission; }
+ };
+
+ //========================================================================
+ class AddModelDialog : public ModalDialog
+ {
+ private:
+ FixedLine m_aModelFL;
+ FixedText m_aNameFT;
+ Edit m_aNameED;
+ CheckBox m_aModifyCB;
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ public:
+ AddModelDialog( Window* pParent, bool _bEdit );
+ ~AddModelDialog();
+
+ inline String GetName() const { return m_aNameED.GetText(); }
+ inline void SetName( const String& _rName ) { m_aNameED.SetText( _rName );}
+
+ inline bool GetModifyDoc() const { return bool( m_aModifyCB.IsChecked() ); }
+ inline void SetModifyDoc( const bool _bModify ) { m_aModifyCB.Check( _bModify ); }
+ };
+
+ //========================================================================
+ class AddInstanceDialog : public ModalDialog
+ {
+ private:
+ FixedLine m_aInstanceFL;
+ FixedText m_aNameFT;
+ Edit m_aNameED;
+ FixedText m_aURLFT;
+ SvtURLBox m_aURLED;
+ PushButton m_aFilePickerBtn;
+ CheckBox m_aLinkInstanceCB;
+ FixedLine m_aButtonsFL;
+ OKButton m_aOKBtn;
+ CancelButton m_aEscBtn;
+ HelpButton m_aHelpBtn;
+
+ String m_sAllFilterName;
+
+ DECL_LINK( FilePickerHdl, PushButton * );
+
+ public:
+ AddInstanceDialog( Window* pParent, bool _bEdit );
+ ~AddInstanceDialog();
+
+ inline void SetRenameMode();
+ inline String GetName() const { return m_aNameED.GetText(); }
+ inline void SetName( const String& _rName ) { m_aNameED.SetText( _rName );}
+ inline String GetURL() const { return m_aURLED.GetText(); }
+ inline void SetURL( const String& _rURL ) { m_aURLED.SetText( _rURL );}
+ inline bool IsLinkInstance() const { return ( m_aLinkInstanceCB.IsChecked() != sal_False ); }
+ inline void SetLinkInstance( bool _bLink ) { m_aLinkInstanceCB.Check( _bLink != false ); }
+ };
+
+ inline void AddInstanceDialog::SetRenameMode()
+ {
+ m_aURLFT.Disable();
+ m_aURLED.Disable();
+ m_aFilePickerBtn.Disable();
+ m_aLinkInstanceCB.Disable();
+ }
+
+ //========================================================================
+ class LinkedInstanceWarningBox : public MessBox
+ {
+ public:
+ LinkedInstanceWarningBox( Window* pParent );
+ };
+
+//............................................................................
+} // namespace svxform
+//............................................................................
+
+#endif // _SVX_DATANAVI_HXX
+