class CCL::PriorityListModel

class PriorityListModel:
    public CCL::ListViewModel,
    public CCL::IItemDragVerifier
{
public:
    // fields

     IItemDragVerifier;

    // methods

    DECLARE_CLASS_ABSTRACT (PriorityListModel, ListViewModel);
    PROPERTY_VARIABLE (int, minDragIndex, MinDragIndex) const;
    IUnknown*CCL_API createDragSessionData (ItemIndexRef index);

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

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

    tbool CCL_API drawCell (ItemIndexRef index, int column, const DrawInfo& info);
    tbool CCL_API verifyTargetItem (ItemIndex& item, int& relation);
};

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 CheckBoxMouseHandler;

    // 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 (ListViewModel, ListViewModelBase);
    DECLARE_STRINGID_MEMBER (kItemChecked);
    ItemRemovalEnabled PROPERTY_BOOL (simpleItemCheck, SimpleItemCheck) const;
    ListViewItem* getItem (int index) const;
    Iterator* newIterator () const;
    void removeAll ();
    void addItem (ListViewItem* item);
    void insertItem (int index, ListViewItem* item);
    void addSorted (ListViewItem* item);
    bool removeItem (ListViewItem* item);
    void enableAll (bool state);
    void checkAll (bool state, bool onlyEnabled = true);
    void checkAlone (int index, bool state, bool onlyEnabled = true);
    void addSorter (ListViewSorter* sorter);
    void addTitleSorter (StringRef sorterTitle = nullptr);

    void addDetailSorter (
        StringID columnId,
        StringID detailId,
        StringRef sorterTitle = nullptr
    );

    ListViewSorter* getActiveSorter () const;
    ListViewSorter* getSorterWithID (StringID id) const;
    void sortBy (ListViewSorter* sorter);
    void resort ();
    int getFirstSelectedIndex () const;
    bool canRemoveSelectedItems () const;
    void removeSelectedItems ();
    virtual bool removeItems (ItemIndexRef index, const IItemSelection& selection);
    virtual bool getIndex (ItemIndex& index, const ListViewItem* item) const;
    virtual int CCL_API countFlatItems ();
    virtual tbool CCL_API canRemoveItem (ItemIndexRef index);
    virtual tbool CCL_API removeItem (ItemIndexRef index);

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

    virtual tbool CCL_API getSortColumnID (MutableCString& columnID, tbool& upwards);

    virtual tbool CCL_API measureCellContent (
        Rect& size,
        ItemIndexRef index,
        int column,
        const StyleInfo& info
    );

    virtual tbool CCL_API onItemFocused (ItemIndexRef index);

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

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

    virtual tbool CCL_API getItemAccessibilityInfo (
        AccessibilityInfo& info,
        ItemIndexRef index,
        int column
    ) const;

    virtual tbool CCL_API verifyTargetItem (ItemIndex& item, int& relation) = 0;