Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Adding Bitmap Button to ListView

    Cinema 4D SDK
    c++ r20 sdk
    2
    5
    895
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      Ogers
      last edited by Ogers

      Hello,
      0_1548235493229_Capture.PNG
      I have created this listview (I found it easier than a treeview and it makes what I need) but instead of having checkbox using(LV_COLUMN_CHECKBOX) or buttons (LV_COLUMN_BUTTON) I would like to have bitmap button. I saw that there was LV_COLUMN_BMP for bitmap but I do not know if that will help me and how.
      Is there any way I can use something like a bitmap button where I can use icons or images on it for this case.
      I would really appreciate if you would offer me an example if such a thing can be done.
      Thank you in advance.

      1 Reply Last reply Reply Quote 0
      • M
        m_adam
        last edited by

        Hi @Ogers LV_COLUMN_BMP accept an icon id. You can also register your own icon (meaning you own bitmap) with RegisterIcon from the Icon Librabry.

        Note a ListView offer limited support if you want to directly draw into cells you will need to switch to a TreeView.

        Here an example for handling LV_COLUMN_BMP .

        #include "customgui_listview2.h"
        
        class ListViewDialog : public GeDialog
        {
        private:
        	SimpleListView			listview;
        	Int32 GADGET_LISTVIEW = 10001;
        
        public:
        
        	virtual Bool CreateLayout();
        	virtual Bool InitValues();
        	virtual Bool Command(Int32 id, const BaseContainer& msg);
        
        };
        
        Bool ListViewDialog::CreateLayout()
        {
        	// first call the parent instance
        	Bool res = GeDialog::CreateLayout();
        
        	// Create the LisTView
        	AddListView(GADGET_LISTVIEW, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0);
        	listview.AttachListView(this, GADGET_LISTVIEW);
        
        	return res;
        }
        
        Bool ListViewDialog::InitValues()
        {
        	// first call the parent instance
        	if (!GeDialog::InitValues())
        		return false;
        
        	// Define our Columns
        	BaseContainer layout = BaseContainer();
        	layout.SetInt32('chck', LV_COLUMN_CHECKBOX);
        	layout.SetInt32('name', LV_COLUMN_TEXT);
        	layout.SetInt32('bttn', LV_COLUMN_BUTTON);
        	layout.SetInt32('bmp', LV_COLUMN_BMP);
        	listview.SetLayout(4, layout);
        
        	// Fill our columns with 2 Entry
        	BaseContainer data = BaseContainer();
        	for (Int32 i = 0; i < 2; i++)
        	{
        		data.SetInt32('chck', true);
        		data.SetString('name', "Something"_s);
        		data.SetString('bttn', "..."_s);
        		data.SetInt32('bmp', IDM_KEY_LAST);
        		listview.SetItem(i, data);
        	}
        
        	// Update the listView
        	listview.DataChanged();
        
        	return true;
        }
        
        Bool ListViewDialog::Command(Int32 id, const BaseContainer& msg)
        {
        	// If there is an action on our ListView
        	if (id == GADGET_LISTVIEW)
        	{
        		// Check the column, if it's an action on the int(bmp) column ID
        		Int32 ColId = msg.GetInt32(LV_SIMPLE_COL_ID);
        		if(ColId == 'bmp')
        		{
        			// Retrieves all data of this lines
        			Int32 itemId = msg.GetInt32(LV_SIMPLE_ITEM_ID);
        			BaseContainer bc;
        			listview.GetItem(itemId, &bc);
        
        			// Get the current data of our int(bmp) column / BaseContainer
        			Int32 currIconId = bc.GetInt32('bmp');
        			switch(currIconId)
        			{
        				case IDM_KEY_LAST:
        					bc.SetInt32('bmp', Osphere);
        					break;
        				case Osphere:
        					bc.SetInt32('bmp', IDM_KEY_LAST);
        					break;
        				default:
        					bc.SetInt32('bmp', IDM_KEY_LAST);
        					break;
        			}
        
        			// Push back our change to the item
        			listview.SetItem(itemId, bc);
        
        			// Update the ListView
        			listview.DataChanged();
        		}
        	}
        	return true;
        }
        

        If you have any question left, please let me know.
        Cheers,
        Maxime.

        MAXON SDK Specialist

        Development Blog, MAXON Registered Developer

        1 Reply Last reply Reply Quote 0
        • O
          Ogers
          last edited by Ogers

          Hello @m_adam
          Thank you for your answer. I was looking more to have a bitmap button on my listView instead of just an icon, like a toggle button where the icon is changed when clicked. I have done it but not inside a listView. Is that possible to be done inside the listView.
          Thank you.

          M 1 Reply Last reply Reply Quote 0
          • M
            m_adam @Ogers
            last edited by m_adam

            @ogers said in Adding Bitmap Button to ListView:

            like a toggle button where the icon is changed when clicked

            It's exactly what the code I posted does. Take a look at the Command method.

            MAXON SDK Specialist

            Development Blog, MAXON Registered Developer

            1 Reply Last reply Reply Quote 0
            • O
              Ogers
              last edited by

              Thank you @m_adam
              It works fine

              1 Reply Last reply Reply Quote 0
              • First post
                Last post