diff dwtestoo.cpp @ 2929:2ab97b349958

C++: Add Page 3 - Tree to dwtestoo.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 30 Dec 2022 09:35:00 +0000
parents 102b96d77f89
children d8117d36ed27
line wrap: on
line diff
--- a/dwtestoo.cpp	Fri Dec 30 04:15:27 2022 +0000
+++ b/dwtestoo.cpp	Fri Dec 30 09:35:00 2022 +0000
@@ -358,6 +358,39 @@
         render2->Redraw();
     }
 
+    DW::Menu *ItemContextMenu(DW::StatusText *status_text, const char *text)
+    {
+        DW::Menu *menu = new DW::Menu();
+        DW::Menu *submenu = new DW::Menu();
+        DW::MenuItem *menuitem = submenu->AppendItem("File", 0L, TRUE);
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+        menuitem = submenu->AppendItem("Date", 0L, TRUE);
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+        menuitem = submenu->AppendItem("Size", 0L, TRUE);
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+        menuitem = submenu->AppendItem("None", 0L, TRUE);
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+
+        menuitem = submenu->AppendItem("Sort", submenu);
+
+        menuitem = submenu->AppendItem("Make Directory");
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+
+        menuitem = submenu->AppendItem(DW_MENU_SEPARATOR);
+        menuitem = submenu->AppendItem("Rename Entry");
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+
+        menuitem = submenu->AppendItem("Delete Entry");
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+
+        menuitem = submenu->AppendItem(DW_MENU_SEPARATOR);
+        menuitem = submenu->AppendItem("View File");
+        menuitem->ConnectClicked([status_text, text]() -> int { status_text->SetText(text); return TRUE; });
+
+        return menu;
+    }
+
     // Add the menus to the window
     void CreateMenus() {
         // Setup the menu
@@ -597,6 +630,7 @@
         });
     }
 
+    // Notebook page 2
     void CreateRender(DW::Box *notebookbox) {
         int vscrollbarwidth, hscrollbarheight;
         wchar_t widestring[100] = L"DWTest Wide";
@@ -946,6 +980,71 @@
 
         app->TaskBarInsert(render1, fileicon, "DWTest");
     }
+
+    // Notebook page 3
+    void CreateTree(DW::Box *notebookbox)
+    {
+        // create a box to pack into the notebook page
+        DW::ListBox *listbox = new DW::ListBox(TRUE);
+        notebookbox->PackStart(listbox, 500, 200, TRUE, TRUE, 0);
+        listbox->Append("Test 1");
+        listbox->Append("Test 2");
+        listbox->Append("Test 3");
+        listbox->Append("Test 4");
+        listbox->Append("Test 5");
+
+        // now a tree area under this box 
+        DW::Tree *tree = new DW::Tree();
+        if(tree->GetHWND())
+        {
+            notebookbox->PackStart(tree, 500, 200, TRUE, TRUE, 1);
+
+            /* and a status area to see whats going on */
+            DW::StatusText *tree_status = new DW::StatusText();
+            notebookbox->PackStart(tree_status, 100, DW_SIZE_AUTO, TRUE, FALSE, 1);
+
+            // set up our signal trappers...
+            tree->ConnectItemContext([this, tree_status](char *text, int x, int y, void *data) -> int
+            {
+                char buf[201] = {0};
+                DW::Menu *popupmenu = ItemContextMenu(tree_status, "Item context menu clicked.");
+
+                snprintf(buf, 200, "DW_SIGNAL_ITEM_CONTEXT: Text: %s x: %d y: %d", text, x, y);
+                tree_status->SetText(buf);
+                popupmenu->Popup(this, x, y);
+                return FALSE;
+            });
+            tree->ConnectItemSelect([tree_status](HTREEITEM item, char *text, void *itemdata)
+            {
+                char buf[201] = {0};
+
+                snprintf(buf, 200, "DW_SIGNAL_ITEM_SELECT:Item: %x Text: %s Item Data: %x", DW_POINTER_TO_UINT(item), text, DW_POINTER_TO_UINT(itemdata));
+                tree_status->SetText(buf);
+                return FALSE;
+            });
+
+            HTREEITEM t1 = tree->Insert("tree folder 1", foldericon, DW_NULL, DW_INT_TO_POINTER(1));
+            HTREEITEM t2 = tree->Insert("tree folder 2", foldericon, DW_NULL, DW_INT_TO_POINTER(2));
+            tree->Insert("tree file 1", fileicon, t1, DW_INT_TO_POINTER(3));
+            tree->Insert("tree file 2", fileicon, t1, DW_INT_TO_POINTER(4));
+            tree->Insert("tree file 3", fileicon, t2, DW_INT_TO_POINTER(5));
+            tree->Insert("tree file 4", fileicon, t2, DW_INT_TO_POINTER(6));
+            tree->Change(t1, "tree folder 1", foldericon);
+            tree->Change(t2, "tree folder 2", foldericon);
+            tree->SetData(t2, DW_INT_TO_POINTER(100));
+            tree->Expand(t1);
+            char *title = tree->GetTitle(t1);
+            this->app->Debug("t1 title \"%s\" data %d t2 data %d\n", title, DW_POINTER_TO_INT(tree->GetData(t1)),
+                     DW_POINTER_TO_INT(tree->GetData(t2)));
+            this->app->Free(title);
+        }
+        else
+        {
+            DW::Text *text = new DW::Text("Tree widget not available.");
+            notebookbox->PackStart(text, 500, 200, TRUE, TRUE, 1);
+        }
+    }
+
 public:
     // Constructor creates the application
     DWTest(const char *title): DW::Window(title) {
@@ -1024,6 +1123,13 @@
         notebook->Pack(notebookpage, notebookbox);
         notebook->PageSetText(notebookpage, "render");
 
+        // Create Notebook Page 3 - Tree
+        notebookbox = new DW::Box(DW_VERT, 5);
+        CreateTree(notebookbox);
+        notebookpage = notebook->PageNew();
+        notebook->Pack(notebookpage, notebookbox);
+        notebook->PageSetText(notebookpage, "tree");
+
         // Finalize the window
         this->SetSize(640, 550);