class CCL::BrowserListModel

class BrowserListModel: public BrowserModelBase
{
public:
    // construction

    BrowserListModel (Browser& browser);

    // methods

    bool getNodeIndex (ItemIndex& index, const BrowserNode* node);
    BrowserNode* findNode (const IRecognizer* recognizer) const;
    BrowserNode* findNodeInstance (BrowserNode* node) const;
    BrowserNode* getParent () const;
    void setParent (BrowserNode* node, Container* oldNodes = nullptr);

    bool extractChildNodesForReuse (
        ObjectList& childNodes,
        BrowserNode* node,
        ITreeItem* treeItem
    );

    void collectNodes (Container& result, BrowserNode::NodeFlags flags);
    void addNode (BrowserNode* node, int index = -1);
    bool removeNode (BrowserNode* node);
    void selectNode (BrowserNode* node, bool exclusive);
    void checkAutoSelect ();
    void invalidateNode (BrowserNode* node);
    void updateParentIcon ();
    BrowserNode* getFocusNode (bool onlyIfSelected = false) const;
    BrowserNode* resolveNode (ItemIndexRef index) const;
    int CCL_API countFlatItems ();
    tbool CCL_API onItemFocused (ItemIndexRef index);

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

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