Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
UppHub
Status & Roadmap
FAQ
Authors & License
Forums
Funding U++
Search on this site











SourceForge.net Logo

SourceForge.net Logo

GitHub Logo

Discord Logo

ColumnListDnD

 

Drag&Drop with ColumnList

 

 

main.cpp

 

#include <CtrlLib/CtrlLib.h>

 

using namespace Upp;

 

class MyApp : public TopWindow {

public:

    typedef MyApp CLASSNAME;

 

    ColumnList list;

 

    void DropInsert(int i, PasteClip& d)

    {

        if(AcceptText(d))

            list.Insert(i, GetString(d));

        if(AcceptInternal<ColumnList>(d, "mydrag"))

            list.InsertDrop(i, d);

    }

 

    void DropSum(int ii, PasteClip& d) {

        if(AcceptInternal<ColumnList>(d, "mydrag")) {

            const ColumnList& src = GetInternal<ColumnList>(d);

            int sum = 0;

            for(int i = 0; i < src.GetCount(); i++)

                if(src.IsSel(i))

                    sum += atoi(~String(src[i]));

            list.Set(ii, AsString(sum));

            d.SetAction(DND_COPY);

            list.SetCursor(ii);

        }

    }

    

    void Drag()

    {

        if(list.DoDragAndDrop(InternalClip(list, "mydrag"), list.GetDragSample()) == DND_MOVE)

            list.RemoveSelection();

    }

 

    MyApp()

    {

        SetRect(0, 0, 228, 356);

        Add(list.SizePos());

 

        list.Columns(3);

        list.MultiSelect();

        list.WhenDropInsert = [=](int i, PasteClip& d) { DropInsert(i, d); };

        list.WhenDropItem = [=](int i, PasteClip& d) { DropSum(i, d); };

        

        list.WhenDrag = [=] { Drag(); };

 

        for(int i = 0; i < 500; i++)

            list.Add(AsString(i));

    }

};

 

GUI_APP_MAIN

{

    MyApp w;

 

    w.Run();

}

 

 

 

 

Do you want to contribute?