class CCL::DocumentBlocks::TreeModel

class TreeModel:
    public CCL::TreeViewModel,
    public CCL::IParamObserver
{
public:
    // fields

     IParamObserver;

    // construction

    TreeModel (DocumentBlocks& component);

    // methods

    void addDocumentItem (UrlRef url, bool sort = true);
    void makeViews (bool state);
    void storeViewState ();
    void restoreViewState ();
    void getSelectedUrls (Container& urls, bool wantFolders, bool wantDocuments);
    void selectDocuments (UrlRef url, StringRef folderName);
    DocumentBlocks& getComponent () const;
    FolderNode* getRootFolder () const;
    void rebuild (Source* source);
    FolderNode* findFolderNode (UrlRef url, FolderSource& folderSource, bool create);
    void onVisibleChanged (bool state);
    void onColumnRectsChanged ();
    tbool CCL_API getUniqueItemName (MutableCString& name, ItemIndexRef index);
    tbool CCL_API drawCell (ItemIndexRef index, int column, const DrawInfo& info);
    tbool CCL_API editCell (ItemIndexRef index, int column, const EditInfo& info);
    tbool CCL_API canRemoveItem (ItemIndexRef index);
    tbool CCL_API removeItem (ItemIndexRef index);

    tbool CCL_API appendItemMenu (
        IContextMenu& menu,
        ItemIndexRef item,
        const IItemSelection& selection
    );

    tbool CCL_API canInsertData (
        ItemIndexRef index,
        int column,
        const IUnknownList& data,
        IDragSession* session,
        IView* targetView
    );

    tbool CCL_API insertData (
        ItemIndexRef index,
        int column,
        const IUnknownList& data,
        IDragSession* session
    );

    tbool CCL_API interpretCommand (
        const CommandMsg& msg,
        ItemIndexRef item,
        const IItemSelection& selection
    );

    void CCL_API notify (ISubject* subject, MessageRef msg);
    static const IUrl* getUrl (ListViewItem& item);
};

Inherited Members

public:
    // typedefs

    typedef CStringRef MemberID;
    typedef const IItemModel::DrawInfo& DrawInfoRef;

    // enums

    enum SwipeMethod;

    // classes

    class BoxedEditInfo;
    class EditControlOperation;
    class ItemVisitor;

    template <typename Lambda>
    class LambdaItemVisitor;

    class SwipeItemsMouseHandler;
    class TouchMouseHandler;
    class ColumnInfo;

    template <typename Lambda>
    class LambdaViewItemVisitor;

    class ViewItemVisitor;
    class ListViewAdapter;

    // fields

    static constexpr const int kDefaultTextTrimMode = Font::kTrimModeRight;
     IItemModel;
    SubtitlesEnabled editModeParam;

    // methods

    virtual tresult CCL_API queryInterface (UIDRef iid, void** ptr) = 0;
    virtual unsigned int CCL_API retain () = 0;
    virtual unsigned int CCL_API release () = 0;
    Unknown& operator = (const Unknown&);
    unsigned int getRetainCount () const;
    virtual Object*CCL_API revealObject (const void* moduleAddress) = 0;
    virtual void CCL_API addObserver (IObserver* observer) = 0;
    virtual void CCL_API removeObserver (IObserver* observer) = 0;
    virtual void CCL_API signal (MessageRef msg) = 0;
    virtual void CCL_API deferSignal (IMessage* msg) = 0;
    static ISubject void addObserver (IUnknown* unknown, IObserver* observer);
    static void removeObserver (IUnknown* unknown, IObserver* observer);
    virtual void CCL_API notify (ISubject* subject, MessageRef msg) = 0;

    static IObserver void notify (
        IUnknown* unknown,
        ISubject* subject,
        MessageRef msg
    );

    virtual const ITypeInfo&CCL_API getTypeInfo () const = 0;
    virtual tbool CCL_API getProperty (Variant& var, MemberID propertyId) const = 0;
    virtual tbool CCL_API setProperty (MemberID propertyId, const Variant& var) = 0;
    virtual tbool CCL_API getPropertyNames (IPropertyCollector& collector) const = 0;
    virtual tbool CCL_API invokeMethod (Variant& returnValue, MessageRef msg) = 0;
    DECLARE_BASE_CLASS (Object);
    virtual void CCL_API removeObserver (IObserver* observer);
    virtual void CCL_API signal (MessageRef msg);
    virtual void CCL_API deferSignal (IMessage* msg);
    virtual void deferChanged ();
    virtual void CCL_API notify (ISubject* subject, MessageRef msg);
    virtual bool equals (const Object& obj) const;
    virtual int compare (const Object& obj) const;
    virtual bool load (const Storage& storage);
    virtual bool save (const Storage& storage) const;
    virtual bool save (const OutputStorage& storage) const;
    virtual bool toString (String& string, int flags = 0) const;
    virtual int getHashCode (int size) const;
    IUnknown* asUnknown ();
    static void addGarbageCollected (Object* obj, bool globalScope = true);
    static void deferDestruction (Object* obj);
    static const void* getModuleAddress ();
    IItemView* getItemView () const;
    const auto& getItemViews () const;
    IItemView* getItemViewByName (StringRef name);
    void makeFirst (IItemView* itemView);
    void makeLast (IItemView* itemView);
    void CCL_API viewAttached (IItemView* itemView);
    void CCL_API viewDetached (IItemView* itemView);

    void drawIcon (
        DrawInfoRef info,
        IImage* icon,
        bool enabled = true,
        bool fitImage = true,
        int margin = 0
    );

    void drawIconWithOverlay (
        DrawInfoRef info,
        IImage* icon,
        IImage* overlay = nullptr,
        bool enabled = true,
        bool fitImage = true,
        int margin = 0
    );

    void drawOverlay (DrawInfoRef info, RectRef iconRect, IImage* overlay);

    void drawButtonImage (
        DrawInfoRef info,
        IImage* image,
        bool pressed,
        bool enabled = true
    );

    void calcCheckBoxRect (
        Rect& checkRect,
        DrawInfoRef info,
        AlignmentRef alignment = Alignment::kHCenter
    );

    void drawCheckBox (
        DrawInfoRef info,
        bool checked,
        bool enabled = true,
        AlignmentRef alignment = Alignment::kHCenter
    );

    void calcButtonRect (
        Rect& buttonRect,
        DrawInfoRef info,
        StringRef title,
        Coord verticalMargin = 0
    );

    void drawButton (
        DrawInfoRef info,
        StringRef title,
        bool enabled = true,
        Coord verticalMargin = 0
    );

    void drawSelectBoxArrow (DrawInfoRef info, bool enabled = true, int margin = 0);
    SolidBrush getTextBrush (DrawInfoRef info, bool enabled);

    void drawTitle (
        DrawInfoRef info,
        StringRef title,
        bool enabled = true,
        int fontStyle = 0,
        AlignmentRef alignment = Alignment::kLeft|Alignment::kVCenter,
        int trimMode = kDefaultTextTrimMode
    );

    void drawText (
        DrawInfoRef info,
        StringRef text,
        AlignmentRef alignment = Alignment::kCenter,
        bool enabled = true,
        int fontStyle = 0,
        Coord margin = 0
    );

    void calcTitleRects (
        Rect& titleRect,
        Rect& subTitleRect,
        DrawInfoRef info,
        Coord spacing
    );

    void drawTitleWithSubtitle (
        DrawInfoRef info,
        StringRef title,
        StringRef subTitle,
        bool enabled = true,
        int fontStyle = 0,
        Coord lineSpacing = 4,
        int trimMode = kDefaultTextTrimMode
    );

    void drawVerticalBar (
        IGraphics& graphics,
        RectRef rect,
        float value,
        Color backColor,
        Color hiliteColor,
        Coord margin = 1
    );

    void drawHorizontalBar (
        IGraphics& graphics,
        RectRef rect,
        float value,
        Color backColor,
        Color hiliteColor,
        Coord margin = 1
    );

    DECLARE_CLASS (ItemModel, Object);
    Object void invalidate ();
    void invalidateItem (ItemIndexRef index);
    void updateColumns ();

    IAsyncOperation* editString (
        StringRef initialValue,
        RectRef rect,
        const EditInfo& info,
        IVisualStyle* visualStyle = nullptr
    );

    IAsyncOperation* editString (
        StringRef initialValue,
        RectRef rect,
        IItemView* view = nullptr,
        IVisualStyle* visualStyle = nullptr
    );

    IAsyncOperation* editValue (
        IParameter* param,
        const EditInfo& info,
        IVisualStyle* visualStyle = nullptr
    );

    IAsyncOperation* startEditOperation (
        IParameter* param,
        ViewBox& editControl,
        const EditInfo& info,
        IVisualStyle* visualStyle = nullptr
    );

    IVisualStyle* createEditStyle ();
    virtual void CCL_API notify (ISubject* subject, MessageRef msg);

    DECLARE_STRINGID_MEMBER (kSwipeEditDone) protected bool doPopupSlider (
        IParameter* param,
        const EditInfo& info,
        PointRef position,
        bool horizontal = false,
        StringID popupSliderDecorForm = nullptr
    );

    bool doPopupColorPalette (
        Color& color,
        IColorPalette* palette,
        const EditInfo& info
    );

    bool setEditControl (ViewBox& editControl, const EditInfo& info);

    bool swipeItems (
        IView* itemView,
        const MouseEvent& mouseEvent,
        ItemVisitor* itemVisitor,
        SwipeMethod method = SwipeMethod::kMultiple
    );

    template  <typename Lambda>
    bool swipeItems (
        IView* itemView,
        const MouseEvent& mouseEvent,
        Lambda visitItem
    );

    template  <typename Lambda>
    bool swipeItemsSingle (
        IView* itemView,
        const MouseEvent& mouseEvent,
        Lambda visitItem
    );

    AbstractTouchHandler* wrapMouseHandler (
        IMouseHandler* mouseHandler,
        IView* view
    );

    virtual tbool CCL_API invokeMethod (Variant& returnValue, MessageRef msg);
    DECLARE_CLASS_ABSTRACT (ListViewModelBase, ItemModel);
    DECLARE_STRINGID_MEMBER (kIconID);
    SubtitlesEnabled PROPERTY_BOOL (keepSelectedItem, KeepSelectedItem);
    SubtitlesEnabled EditModeParam IColumnHeaderList& getColumns ();
    void setColumnAlignment (int columnIndex, AlignmentRef alignment);
    Alignment getColumnAlignment (int columnIndex) const;
    void setListViewType (Styles::ListViewType viewType);
    Styles::ListViewType getListViewType () const;
    ListViewItem* getFocusItem () const;
    ListViewItem* getFirstSelectedItem () const;
    void getSelectedItems (Container& selected) const;
    bool isAnyItemChecked ();

    template  <typename Lambda>
    bool visitItems (Lambda visitItem);

    template  <typename Lambda>
    bool visitSelectedItems (Lambda visitItem);

    virtual bool getIndex (ItemIndex& index, const ListViewItem* item) const;
    virtual tbool CCL_API getItemTitle (String& title, ItemIndexRef index);
    virtual IImage*CCL_API getItemIcon (ItemIndexRef index);
    virtual IImage*CCL_API getItemThumbnail (ItemIndexRef index);

    virtual tbool CCL_API getItemTooltip (
        String& tooltip,
        ItemIndexRef index,
        int column
    );

    virtual StringID CCL_API getItemBackground (ItemIndexRef index);
    virtual tbool CCL_API canSelectItem (ItemIndexRef index);
    virtual tbool CCL_API createColumnHeaders (IColumnHeaderList& list);

    virtual tbool CCL_API drawCell (
        ItemIndexRef index,
        int column,
        const DrawInfo& info
    );

    virtual tbool CCL_API editCell (
        ItemIndexRef index,
        int column,
        const EditInfo& info
    );

    virtual IUnknown*CCL_API createDragSessionData (ItemIndexRef index);
    virtual void CCL_API notify (ISubject* subject, MessageRef msg);
    DECLARE_CLASS (TreeViewModel, ListViewModelBase);
    PROPERTY_SHARED_AUTO (TreeViewNode, rootNode, RootNode) const;
    ITreeView* getTreeView () const;
    void redrawNode (TreeViewNode* node);
    void refreshNode (TreeViewNode* node);
    void expandNode (TreeViewNode* node);
    void makeNodeVisible (TreeViewNode* node);
    void setFocusNode (TreeViewNode* node);
    TreeViewNode* getFocusNode () const;
    virtual tbool CCL_API getRootItem (ItemIndex& index);
    virtual int CCL_API countFlatItems ();
    virtual tbool CCL_API isItemFolder (ItemIndexRef index);
    virtual tbool CCL_API canExpandItem (ItemIndexRef index);
    virtual tbool CCL_API canAutoExpandItem (ItemIndexRef index);
    virtual tbool CCL_API getSubItems (IUnknownList& items, ItemIndexRef index);
    virtual void CCL_API signal (MessageRef msg);
    IItemModel* getListViewAdapter ();
    virtual tbool CCL_API paramChanged (IParameter* param) = 0;
    virtual void CCL_API paramEdit (IParameter* param, tbool begin) = 0;