/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 . */ #pragma once #include #include #include #include "sdtreelb.hxx" #include // forward namespace vcl { class Window; } namespace sd { class DrawDocShell; class SdNavigatorFloat; } class Menu; class SdNavigatorControllerItem; class SdPageNameControllerItem; enum class NavState { NONE = 0x000000, TableUpdate = 0x000100, BtnFirstEnabled = 0x001000, BtnFirstDisabled = 0x002000, BtnPrevEnabled = 0x004000, BtnPrevDisabled = 0x008000, BtnLastEnabled = 0x010000, BtnLastDisabled = 0x020000, BtnNextEnabled = 0x040000, BtnNextDisabled = 0x080000, }; namespace o3tl { template<> struct typed_flags : is_typed_flags {}; } class NavDocInfo { public: NavDocInfo() : bName(false) , bActive(false) , mpDocShell(nullptr) { } bool HasName() const { return bName; } bool IsActive() const { return bActive; } void SetName( bool bOn ) { bName = bOn; } void SetActive( bool bOn ) { bActive = bOn; } ::sd::DrawDocShell* GetDrawDocShell() {return mpDocShell;} private: friend class SdNavigatorWin; bool bName : 1; bool bActive : 1; ::sd::DrawDocShell* mpDocShell; }; namespace sd { class SdNavigatorFloat : public SfxNavigator { private: std::unique_ptr m_xNavWin; bool m_bSetInitialFocusOnActivate; public: SdNavigatorFloat(SfxBindings* _pBindings, SfxChildWindow* pMgr, vcl::Window* pParent, SfxChildWinInfo* pInfo); void InitTreeLB(const SdDrawDocument* pDoc); void FreshTree(const SdDrawDocument* pDoc); virtual void Activate() override; virtual void dispose() override; virtual ~SdNavigatorFloat() override; }; } class SD_DLLPUBLIC SdNavigatorWin : public PanelLayout { public: typedef ::std::function UpdateRequestFunctor; /** Create a new instance of the navigator. @param bUseActiveUpdate When , the default, then the SdNavigatorWin object will make a SID_NAVIGATOR_INIT call whenever it thinks an update is necessary. When the navigator will rely on others to trigger updates. */ SdNavigatorWin(weld::Widget* pParent, SfxBindings* pBindings, SfxNavigator* pNavigatorDlg); void SetUpdateRequestFunctor(const UpdateRequestFunctor& rUpdateRequest); virtual ~SdNavigatorWin() override; void InitTreeLB( const SdDrawDocument* pDoc ); void RefreshDocumentLB( const OUString* pDocName = nullptr ); void FirstFocus(); bool InsertFile(const OUString& rFileName); NavigatorDragType GetNavigatorDragType(); SdPageObjsTLV& GetObjects(); private: friend class SdNavigatorFloat; friend class SdNavigatorControllerItem; friend class SdPageNameControllerItem; std::unique_ptr mxToolbox; std::unique_ptr mxTlbObjects; std::unique_ptr mxLbDocs; std::unique_ptr mxDragModeMenu; std::unique_ptr mxShapeMenu; VclPtr mxNavigatorDlg; bool mbDocImported; OUString maDropFileName; NavigatorDragType meDragType; std::vector maDocList; SfxBindings* mpBindings; std::unique_ptr mpNavigatorCtrlItem; std::unique_ptr mpPageNameCtrlItem; /** This flag controls whether all shapes or only the named shapes are shown. */ // bool mbShowAllShapes; static OUString GetDragTypeSdBmpId(NavigatorDragType eDT); NavDocInfo* GetDocInfo(); DECL_LINK( SelectToolboxHdl, const OString&, void ); DECL_LINK( DropdownClickToolBoxHdl, const OString&, void ); DECL_LINK( ClickObjectHdl, weld::TreeView&, bool ); DECL_LINK( SelectDocumentHdl, weld::ComboBox&, void ); DECL_LINK( MenuSelectHdl, const OString&, void ); DECL_LINK( ShapeFilterCallback, const OString&, void ); DECL_LINK( KeyInputHdl, const KeyEvent&, bool ); void SetDragImage(); public: //when object is marked , fresh the corresponding entry tree . void FreshTree ( const SdDrawDocument* pDoc ); virtual weld::Window* GetFrameWeld() const override; }; /** * ControllerItem for Navigator */ class SdNavigatorControllerItem : public SfxControllerItem { public: SdNavigatorControllerItem( sal_uInt16, SdNavigatorWin*, SfxBindings*, const SdNavigatorWin::UpdateRequestFunctor& rUpdateRequest); protected: virtual void StateChangedAtToolBoxControl( sal_uInt16 nSId, SfxItemState eState, const SfxPoolItem* pState ) override; private: SdNavigatorWin* pNavigatorWin; const SdNavigatorWin::UpdateRequestFunctor maUpdateRequest; }; /** * ControllerItem for Navigator to show the page in the TreeLB */ class SdPageNameControllerItem : public SfxControllerItem { public: SdPageNameControllerItem( sal_uInt16, SdNavigatorWin*, SfxBindings*); protected: virtual void StateChangedAtToolBoxControl( sal_uInt16 nSId, SfxItemState eState, const SfxPoolItem* pState ) override; private: SdNavigatorWin* pNavigatorWin; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */