diff options
Diffstat (limited to 'basctl/source/inc/bastype2.hxx')
-rw-r--r-- | basctl/source/inc/bastype2.hxx | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/basctl/source/inc/bastype2.hxx b/basctl/source/inc/bastype2.hxx new file mode 100644 index 000000000..c376852e3 --- /dev/null +++ b/basctl/source/inc/bastype2.hxx @@ -0,0 +1,301 @@ +/* -*- 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 . + */ + +#ifndef INCLUDED_BASCTL_SOURCE_INC_BASTYPE2_HXX +#define INCLUDED_BASCTL_SOURCE_INC_BASTYPE2_HXX + +#include <sal/config.h> + +#include <memory> + +#include "doceventnotifier.hxx" + +#include <vcl/weld.hxx> +#include "sbxitem.hxx" +#include <o3tl/typed_flags_set.hxx> + +class SbModule; +class SbxVariable; + +enum class BrowseMode +{ + Modules = 0x01, + Subs = 0x02, + Dialogs = 0x04, + All = Modules | Subs | Dialogs, +}; +namespace o3tl { + template<> struct typed_flags<BrowseMode> : is_typed_flags<BrowseMode, 0x7> {}; +} + +namespace basctl +{ +using namespace ::com::sun::star::uno; + +enum EntryType +{ + OBJ_TYPE_UNKNOWN, + OBJ_TYPE_DOCUMENT, + OBJ_TYPE_LIBRARY, + OBJ_TYPE_MODULE, + OBJ_TYPE_DIALOG, + OBJ_TYPE_METHOD, + OBJ_TYPE_DOCUMENT_OBJECTS, + OBJ_TYPE_USERFORMS, + OBJ_TYPE_NORMAL_MODULES, + OBJ_TYPE_CLASS_MODULES +}; + +class Entry +{ +private: + EntryType m_eType; + +public: + explicit Entry(EntryType eType) + : m_eType(eType) + { + } + + virtual ~Entry(); + + Entry(Entry const &) = default; + Entry(Entry &&) = default; + Entry & operator =(Entry const &) = default; + Entry & operator =(Entry &&) = default; + + EntryType GetType () const { return m_eType; } +}; + +class DocumentEntry : public Entry +{ +private: + ScriptDocument m_aDocument; + LibraryLocation m_eLocation; + +public: + DocumentEntry ( + ScriptDocument const& rDocument, + LibraryLocation eLocation, + EntryType eType = OBJ_TYPE_DOCUMENT + ); + virtual ~DocumentEntry () override; + + ScriptDocument const& GetDocument() const { return m_aDocument; } + LibraryLocation GetLocation() const { return m_eLocation; } +}; + +class LibEntry : public DocumentEntry +{ +private: + OUString m_aLibName; + +public: + LibEntry ( + ScriptDocument const& rDocument, + LibraryLocation eLocation, + OUString const& rLibName + ); + virtual ~LibEntry () override; + + OUString const& GetLibName () const { return m_aLibName; } +}; + +class EntryDescriptor +{ + ScriptDocument m_aDocument; + LibraryLocation m_eLocation; + OUString m_aLibName; + OUString m_aLibSubName; // for vba entry: Document Objects, Class Modules, Forms and Normal Modules + OUString m_aName; + OUString m_aMethodName; + EntryType m_eType; + +public: + EntryDescriptor (); + EntryDescriptor ( + ScriptDocument const& rDocument, + LibraryLocation eLocation, + OUString const& rLibName, + OUString const& rLibSubName, + OUString const& rName, + EntryType eType + ); + EntryDescriptor ( + ScriptDocument const& rDocument, + LibraryLocation eLocation, + OUString const& rLibName, + OUString const& rLibSubName, + OUString const& rName, + OUString const& rMethodName, + EntryType eType + ); + + ScriptDocument const& GetDocument() const { return m_aDocument; } + LibraryLocation GetLocation() const { return m_eLocation; } + + const OUString& GetLibName() const { return m_aLibName; } + const OUString& GetLibSubName() const { return m_aLibSubName; } + const OUString& GetName() const { return m_aName; } + const OUString& GetMethodName() const { return m_aMethodName; } + void SetMethodName( const OUString& aMethodName ) { m_aMethodName = aMethodName; } + + EntryType GetType() const { return m_eType; } + void SetType( EntryType eType ) { m_eType = eType; } +}; + + +/* + Classification of types and pointers in the Entries: + + OBJ_TYPE_DOCUMENT DocumentEntry + OBJ_TYPE_LIBRARY Entry + OBJ_TYPE_MODULE Entry + OBJ_TYPE_DIALOG Entry + OBJ_TYPE_METHOD Entry + +*/ + +class SbTreeListBox : public DocumentEventListener +{ +private: + std::unique_ptr<weld::TreeView> m_xControl; + std::unique_ptr<weld::TreeIter> m_xIter; + weld::Window* m_pTopLevel; + bool m_bFreezeOnFirstAddRemove; + BrowseMode nMode; + DocumentEventNotifier m_aNotifier; + void SetEntryBitmaps(const weld::TreeIter& rIter, const OUString& rImage); + +protected: + DECL_LINK(RequestingChildrenHdl, const weld::TreeIter&, bool); + DECL_LINK(OpenCurrentHdl, weld::TreeView&, bool); + void ImpCreateLibEntries(const weld::TreeIter& rShellRootEntry, const ScriptDocument& rDocument, LibraryLocation eLocation); + void ImpCreateLibSubEntries(const weld::TreeIter& rLibRootEntry, const ScriptDocument& rDocument, const OUString& rLibName); + void ImpCreateLibSubEntriesInVBAMode(const weld::TreeIter& rLibRootEntry, const ScriptDocument& rDocument, const OUString& rLibName ); + void ImpCreateLibSubSubEntriesInVBAMode(const weld::TreeIter& rLibRootEntry, const ScriptDocument& rDocument, const OUString& rLibName); + bool ImpFindEntry(weld::TreeIter& rIter, const OUString& rText); + + // DocumentEventListener + virtual void onDocumentCreated( const ScriptDocument& _rDocument ) override; + virtual void onDocumentOpened( const ScriptDocument& _rDocument ) override; + virtual void onDocumentSave( const ScriptDocument& _rDocument ) override; + virtual void onDocumentSaveDone( const ScriptDocument& _rDocument ) override; + virtual void onDocumentSaveAs( const ScriptDocument& _rDocument ) override; + virtual void onDocumentSaveAsDone( const ScriptDocument& _rDocument ) override; + virtual void onDocumentClosed( const ScriptDocument& _rDocument ) override; + virtual void onDocumentTitleChanged( const ScriptDocument& _rDocument ) override; + virtual void onDocumentModeChanged( const ScriptDocument& _rDocument ) override; + +public: + SbTreeListBox(std::unique_ptr<weld::TreeView> xControl, weld::Window* pTopLevel); + virtual ~SbTreeListBox() override; + + void ScanEntry( const ScriptDocument& rDocument, LibraryLocation eLocation ); + void ScanAllEntries(); + void UpdateEntries(); + + bool IsEntryProtected(const weld::TreeIter* pEntry); + + void SetMode( BrowseMode nM ) { nMode = nM; } + BrowseMode GetMode() const { return nMode; } + + SbModule* FindModule(const weld::TreeIter* pEntry); + SbxVariable* FindVariable(const weld::TreeIter* pEntry); + bool FindRootEntry(const ScriptDocument& rDocument, LibraryLocation eLocation, weld::TreeIter& rIter); + bool FindEntry(const OUString& rText, EntryType eType, weld::TreeIter& rIter); + EntryDescriptor GetEntryDescriptor(const weld::TreeIter* pEntry); + + static ItemType ConvertType (EntryType eType); + bool IsValidEntry(weld::TreeIter& rEntry); + void AddEntry(const OUString& rText, const OUString& rImage, + const weld::TreeIter* pParent, bool bChildrenOnDemand, + std::unique_ptr<Entry>&& rUserData, + weld::TreeIter* pRet = nullptr); + + void connect_changed(const Link<weld::TreeView&, void>& rLink) { m_xControl->connect_changed(rLink); } + std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pIter = nullptr) const { return m_xControl->make_iterator(pIter); } + void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const { m_xControl->copy_iterator(rSource, rDest); } + bool get_selected(weld::TreeIter* pIter) const { return m_xControl->get_selected(pIter); } + void select(const weld::TreeIter& rIter) { m_xControl->select(rIter); } + void unselect(const weld::TreeIter& rIter) { m_xControl->unselect(rIter); } + void remove(const weld::TreeIter& rIter) { m_xControl->remove(rIter); } + bool get_cursor(weld::TreeIter* pIter) const { return m_xControl->get_cursor(pIter); } + void set_cursor(const weld::TreeIter& rIter) { m_xControl->set_cursor(rIter); } + OUString get_text(const weld::TreeIter& rIter) const { return m_xControl->get_text(rIter); } + void set_text(const weld::TreeIter& rIter, const OUString& rText) { m_xControl->set_text(rIter, rText); } + OUString get_id(const weld::TreeIter& rIter) const { return m_xControl->get_id(rIter); } + bool get_iter_first(weld::TreeIter& rIter) const { return m_xControl->get_iter_first(rIter); } + bool iter_next_sibling(weld::TreeIter& rIter) const { return m_xControl->iter_next_sibling(rIter); } + bool iter_children(weld::TreeIter& rIter) const { return m_xControl->iter_children(rIter); } + bool iter_parent(weld::TreeIter& rIter) const { return m_xControl->iter_parent(rIter); } + int get_iter_depth(const weld::TreeIter& rIter) const { return m_xControl->get_iter_depth(rIter); } + bool get_row_expanded(const weld::TreeIter& rIter) const { return m_xControl->get_row_expanded(rIter); } + void expand_row(const weld::TreeIter& rIter) { m_xControl->expand_row(rIter); } + void set_size_request(int nWidth, int nHeight) { m_xControl->set_size_request(nWidth, nHeight); } + float get_approximate_digit_width() const { return m_xControl->get_approximate_digit_width(); } + int get_height_rows(int nRows) const { return m_xControl->get_height_rows(nRows); } + int get_iter_index_in_parent(const weld::TreeIter& rIter) const { return m_xControl->get_iter_index_in_parent(rIter); } + void connect_editing(const Link<const weld::TreeIter&, bool>& rStartLink, + const Link<const std::pair<const weld::TreeIter&, OUString>&, bool>& rEndLink) + { + m_xControl->connect_editing(rStartLink, rEndLink); + } + + void make_sorted() { m_xControl->make_sorted(); }; + void make_unsorted() { m_xControl->make_unsorted(); } + bool get_sort_order() const { return m_xControl->get_sort_order(); } + void set_sort_order(bool bAscending) { m_xControl->set_sort_order(bAscending); } + + void set_sort_indicator(TriState eState, int nColumn = -1) + { + m_xControl->set_sort_indicator(eState, nColumn); + } + TriState get_sort_indicator(int nColumn = -1) + { + return m_xControl->get_sort_indicator(nColumn); + } + + int get_sort_column() const { return m_xControl->get_sort_column(); } + void set_sort_column(int nColumn) { m_xControl->set_sort_column(nColumn); } + + void set_sort_func(const std::function<int(const weld::TreeIter&, const weld::TreeIter&)>& func) + { + m_xControl->set_sort_func(func); + } + + void RemoveEntry(const weld::TreeIter& rIter); + void RemoveEntry(const ScriptDocument&); + + OUString GetRootEntryName(const ScriptDocument& rDocument, LibraryLocation eLocation) const; + static OUString GetRootEntryBitmaps(const ScriptDocument& rDocument); + + void SetCurrentEntry (EntryDescriptor const &); + + weld::TreeView& get_widget() { return *m_xControl; } + +private: + LibraryType GetLibraryType() const; +}; + +} // namespace basctl + +#endif // INCLUDED_BASCTL_SOURCE_INC_BASTYPE2_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |