📄 mytreectrl.cpp
字号:
case WXK_F13: key = wxT("F13"); break; case WXK_F14: key = wxT("F14"); break; case WXK_F15: key = wxT("F15"); break; case WXK_F16: key = wxT("F16"); break; case WXK_F17: key = wxT("F17"); break; case WXK_F18: key = wxT("F18"); break; case WXK_F19: key = wxT("F19"); break; case WXK_F20: key = wxT("F20"); break; case WXK_F21: key = wxT("F21"); break; case WXK_F22: key = wxT("F22"); break; case WXK_F23: key = wxT("F23"); break; case WXK_F24: key = wxT("F24"); break; case WXK_NUMLOCK: key = wxT("NUMLOCK"); break; case WXK_SCROLL: key = wxT("SCROLL"); break; case WXK_PAGEUP: key = wxT("PAGEUP"); break; case WXK_PAGEDOWN: key = wxT("PAGEDOWN"); break; case WXK_NUMPAD_SPACE: key = wxT("NUMPAD_SPACE"); break; case WXK_NUMPAD_TAB: key = wxT("NUMPAD_TAB"); break; case WXK_NUMPAD_ENTER: key = wxT("NUMPAD_ENTER"); break; case WXK_NUMPAD_F1: key = wxT("NUMPAD_F1"); break; case WXK_NUMPAD_F2: key = wxT("NUMPAD_F2"); break; case WXK_NUMPAD_F3: key = wxT("NUMPAD_F3"); break; case WXK_NUMPAD_F4: key = wxT("NUMPAD_F4"); break; case WXK_NUMPAD_HOME: key = wxT("NUMPAD_HOME"); break; case WXK_NUMPAD_LEFT: key = wxT("NUMPAD_LEFT"); break; case WXK_NUMPAD_UP: key = wxT("NUMPAD_UP"); break; case WXK_NUMPAD_RIGHT: key = wxT("NUMPAD_RIGHT"); break; case WXK_NUMPAD_DOWN: key = wxT("NUMPAD_DOWN"); break; case WXK_NUMPAD_PAGEUP: key = wxT("NUMPAD_PAGEUP"); break; case WXK_NUMPAD_PAGEDOWN: key = wxT("NUMPAD_PAGEDOWN"); break; case WXK_NUMPAD_END: key = wxT("NUMPAD_END"); break; case WXK_NUMPAD_BEGIN: key = wxT("NUMPAD_BEGIN"); break; case WXK_NUMPAD_INSERT: key = wxT("NUMPAD_INSERT"); break; case WXK_NUMPAD_DELETE: key = wxT("NUMPAD_DELETE"); break; case WXK_NUMPAD_EQUAL: key = wxT("NUMPAD_EQUAL"); break; case WXK_NUMPAD_MULTIPLY: key = wxT("NUMPAD_MULTIPLY"); break; case WXK_NUMPAD_ADD: key = wxT("NUMPAD_ADD"); break; case WXK_NUMPAD_SEPARATOR: key = wxT("NUMPAD_SEPARATOR"); break; case WXK_NUMPAD_SUBTRACT: key = wxT("NUMPAD_SUBTRACT"); break; case WXK_NUMPAD_DECIMAL: key = wxT("NUMPAD_DECIMAL"); break; default: { if ( keycode < 128 && wxIsprint((int)keycode) ) key.Printf(wxT("'%c'"), (char)keycode); else if ( keycode > 0 && keycode < 27 ) key.Printf(_("Ctrl-%c"), wxT('A') + keycode - 1); else key.Printf(wxT("unknown (%ld)"), keycode); } } } /*wxLogMessage( wxT("%s event: %s (flags = %c%c%c%c)"), name, key.c_str(), event.ControlDown() ? wxT('C') : wxT('-'), event.AltDown() ? wxT('A') : wxT('-'), event.ShiftDown() ? wxT('S') : wxT('-'), event.MetaDown() ? wxT('M') : wxT('-'));*/}void MyTreeCtrl::OnTreeKeyDown(wxTreeEvent& event){ //LogKeyEvent(wxT("Tree key down "), event.GetKeyEvent()); event.Skip();}void MyTreeCtrl::OnBeginDrag(wxTreeEvent& event){ // need to explicitly allow drag if ( event.GetItem() != GetRootItem() ) { m_draggedItem = event.GetItem(); wxPoint clientpt = event.GetPoint(); wxPoint screenpt = ClientToScreen(clientpt); /*wxLogMessage(wxT("OnBeginDrag: started dragging %s at screen coords (%i,%i)"), GetItemText(m_draggedItem).c_str(), screenpt.x, screenpt.y);*/ event.Allow(); } else { //wxLogMessage(wxT("OnBeginDrag: this item can't be dragged.")); }}void MyTreeCtrl::OnEndDrag(wxTreeEvent& event){ wxTreeItemId itemSrc = m_draggedItem, itemDst = event.GetItem(); m_draggedItem = (wxTreeItemId)0l; // where to copy the item? if ( itemDst.IsOk() && !ItemHasChildren(itemDst) ) { // copy to the parent then itemDst = GetItemParent(itemDst); } if ( !itemDst.IsOk() ) { //(wxT("OnEndDrag: can't drop here.")); return; } wxString text = GetItemText(itemSrc); /*wxLogMessage(wxT("OnEndDrag: '%s' copied to '%s'."), text.c_str(), GetItemText(itemDst).c_str());*/ // just do append here - we could also insert it just before/after the item // on which it was dropped, but this requires slightly more work... we also // completely ignore the client data and icon of the old item but could // copy them as well. // // Finally, we only copy one item here but we might copy the entire tree if // we were dragging a folder. int image = m_showImages ? TreeCtrlIcon_File : -1; AppendItem(itemDst, text, image);}void MyTreeCtrl::OnBeginLabelEdit(wxTreeEvent& event){ //wxLogMessage(wxT("OnBeginLabelEdit")); // for testing, prevent this item's label editing wxTreeItemId itemId = event.GetItem(); if ( IsTestItem(itemId) ) { //wxMessageBox(wxT("You can't edit this item.")); event.Veto(); } else if ( itemId == GetRootItem() ) { // test that it is possible to change the text of the item being edited SetItemText(itemId, _T("Editing root item")); }}void MyTreeCtrl::OnEndLabelEdit(wxTreeEvent& event){ //wxLogMessage(wxT("OnEndLabelEdit")); // don't allow anything except letters in the labels if ( !event.GetLabel().IsWord() ) { //wxMessageBox(wxT("The new label should be a single word.")); event.Veto(); }}void MyTreeCtrl::OnItemCollapsing(wxTreeEvent& event){ //wxLogMessage(wxT("OnItemCollapsing")); // for testing, prevent the user from collapsing the first child folder wxTreeItemId itemId = event.GetItem(); //if ( IsTestItem(itemId) ) //{ //wxMessageBox(wxT("You can't collapse this item.")); // event.Veto(); //}}/*void MyTreeCtrl::OnItemActivated(wxTreeEvent& event){ // show some info about this item wxTreeItemId itemId = event.GetItem(); MyTreeItemData *item = (MyTreeItemData *)GetItemData(itemId); if ( item != NULL ) { item->ShowInfo(this); } // wxLogMessage(wxT("OnItemActivated"));}*/void MyTreeCtrl::OnItemMenu(wxTreeEvent& event){ wxTreeItemId itemId = event.GetItem(); //MyTreeItemData *item = itemId.IsOk() ? (MyTreeItemData *)GetItemData(itemId) : NULL; wxPoint clientpt = event.GetPoint(); //wxPoint screenpt = ClientToScreen(clientpt); //wxLogMessage(wxT("OnItemMenu for item \"%s\" at screen coords (%i, %i)"), // item ? item->GetDesc() : _T(""), screenpt.x, screenpt.y); ShowMenu(itemId, clientpt); event.Skip();}void MyTreeCtrl::OnContextMenu(wxContextMenuEvent& event){ wxPoint pt = event.GetPosition(); //wxLogMessage(wxT("OnContextMenu at screen coords (%i, %i)"), pt.x, pt.y);}void MyTreeCtrl::ShowMenu(wxTreeItemId id, const wxPoint& pt){ wxMenu menu; wxCSConv conv(_("gb2312")); MyTreeItemData *itemData; if ( id.IsOk() ) { itemData = (MyTreeItemData *)GetItemData(id); wxString desc = itemData->GetDesc(); if(desc.Contains(_T("Root2"))) { menu.Append(TreeTest_ToDev, wxString("按设备显示 ",conv)); menu.Append(TreeTest_ToReady, wxString("按预案显示 ",conv)); menu.Enable(TreeTest_ToDev,true); menu.Enable(TreeTest_ToReady,false); } if(desc.Contains(_T("Root1"))){ menu.Append(TreeTest_ToDev, wxString("按设备显示 ",conv)); menu.Append(TreeTest_ToReady, wxString("按预案显示 ",conv)); menu.Enable(TreeTest_ToDev,false); menu.Enable(TreeTest_ToReady,true); } }#if wxUSE_MENUS PopupMenu(&menu, pt);#endif // wxUSE_MENUS}void MyTreeCtrl::OnItemRClick(wxTreeEvent& event){ wxTreeItemId itemId = event.GetItem(); //MyTreeItemData *item = itemId.IsOk() ? (MyTreeItemData *)GetItemData(itemId) : NULL; //wxLogMessage(wxT("Item \"%s\" right clicked"), item ? item->GetDesc() // : _T("")); event.Skip();}void MyTreeCtrl::OnRMouseDown(wxMouseEvent& event){ //wxLogMessage(wxT("Right mouse button down")); event.Skip();}void MyTreeCtrl::OnRMouseUp(wxMouseEvent& event){ //wxLogMessage(wxT("Right mouse button up")); event.Skip();}void MyTreeCtrl::OnRMouseDClick(wxMouseEvent& event){ /*wxTreeItemId id = HitTest(event.GetPosition()); if ( !id ) wxLogMessage(wxT("No item under mouse")); else { MyTreeItemData *item = (MyTreeItemData *)GetItemData(id); if ( item ) wxLogMessage(wxT("Item '%s' under mouse"), item->GetDesc()); }*/ event.Skip();}static inline const wxChar *Bool2String(bool b){ return b ? wxT("") : wxT("not ");}void MyTreeItemData::ShowInfo(wxTreeCtrl *tree){ /*wxLogMessage(wxT("Item '%s': %sselected, %sexpanded, %sbold,\n") wxT("%u children (%u immediately under this item)."), m_desc.c_str(), Bool2String(tree->IsSelected(GetId())), Bool2String(tree->IsExpanded(GetId())), Bool2String(tree->IsBold(GetId())), unsigned(tree->GetChildrenCount(GetId())), unsigned(tree->GetChildrenCount(GetId(), false)));*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -