📄 configtree.cpp
字号:
wxRect rect; if (GetBoundingRect(id, rect)) { GetPropertiesMenu()->SetClientData((void*) TRUE); PopupMenu(GetPropertiesMenu(), 100, rect.GetTop() + 4); } } } else if (event.GetKeyCode() == '<') { if (id.IsOk()) { ecConfigItem* item = ((ecTreeItemData*) GetItemData(id))->GetConfigItem(); item->BumpItem(-1); } } else if (event.GetKeyCode() == '>') { if (id.IsOk()) { ecConfigItem* item = ((ecTreeItemData*) GetItemData(id))->GetConfigItem(); item->BumpItem(+1); } } else if (event.GetKeyCode() == WXK_SPACE) { if (id.IsOk()) { ecConfigItem* item = ((ecTreeItemData*) GetItemData(id))->GetConfigItem(); item->BumpItem(0); } } else if (event.GetKeyCode() == WXK_RETURN && event.AltDown()) { if (id.IsOk()) { ecConfigItem* item = ((ecTreeItemData*) GetItemData(id))->GetConfigItem(); ecConfigPropertiesDialog dialog(wxGetApp().GetTopWindow(), item); dialog.SetTitle(item->GetName()); dialog.ShowModal(); } } else { event.Skip(); }}void ecConfigTreeCtrl::OnCollapseExpand(wxTreeEvent& event){ if (GetCompanionWindow()) GetCompanionWindow()->Refresh();}// show help for this windowvoid ecConfigTreeCtrl::OnHelp(wxHelpEvent& event){ wxPoint pt = ScreenToClient(event.GetPosition()); int flags = 0; wxTreeItemId id = HitTest(pt, flags); wxHelpProvider *helpProvider = wxHelpProvider::Get(); if ( helpProvider && id > 0) { ecConfigItem* item = ((ecTreeItemData*) GetItemData(id))->GetConfigItem(); if (item) { wxGetApp().GetHelpController().DisplayTextPopup(item->GetDescription(), event.GetPosition()); return; } } event.Skip();}/** ecValueWindow*/IMPLEMENT_CLASS(ecValueWindow, wxTreeCompanionWindow)BEGIN_EVENT_TABLE(ecValueWindow, wxTreeCompanionWindow) EVT_PAINT(ecValueWindow::OnPaint) EVT_MOUSE_EVENTS(ecValueWindow::OnMouseEvent) EVT_SCROLLWIN(ecValueWindow::OnScroll) EVT_TREE_ITEM_EXPANDED(-1, ecValueWindow::OnExpand) EVT_TREE_ITEM_COLLAPSED(-1, ecValueWindow::OnExpand)END_EVENT_TABLE()ecValueWindow::ecValueWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& sz, long style):wxTreeCompanionWindow(parent, id, pos, sz, style){ SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_LISTBOX)); if (!wxGetApp().GetSettings().GetWindowSettings().GetUseDefaults() && wxGetApp().GetSettings().GetWindowSettings().GetFont(wxT("Configuration")).Ok()) { SetFont(wxGetApp().GetSettings().GetWindowSettings().GetFont(wxT("Configuration"))); } else SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT)); m_editWindow = NULL; m_configItem = NULL;}void ecValueWindow::OnPaint(wxPaintEvent& event){ wxPaintDC dc(this); if (!m_treeCtrl) return; wxPen pen(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID); dc.SetPen(pen); dc.SetBrush(* wxTRANSPARENT_BRUSH); wxFont font(GetFont()); dc.SetFont(font); //dc.SetTextForeground(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT)); dc.SetBackgroundMode(wxTRANSPARENT); wxSize clientSize = GetClientSize(); wxRect itemRect; int cy=0; wxTreeItemId h, lastH; for(h=m_treeCtrl->GetFirstVisibleItem();h;h=m_treeCtrl->GetNextVisible(h)) { if (m_treeCtrl->GetBoundingRect(h, itemRect)) { cy = itemRect.GetTop(); wxRect drawItemRect(0, cy, clientSize.x, itemRect.GetHeight()); lastH = h; // Draw the actual item DrawItem(dc, h, drawItemRect); dc.DrawLine(0, cy, clientSize.x, cy); } } if (lastH && lastH.IsOk() && m_treeCtrl->GetBoundingRect(lastH, itemRect)) { cy = itemRect.GetBottom(); dc.DrawLine(0, cy, clientSize.x, cy); }}// Returns the rectangle which will enclose the value for this tree itemwxRect ecValueWindow::GetItemRect(ecConfigItem* item){ if (!m_treeCtrl) return wxRect(0, 0, 0, 0); wxSize clientSize = GetClientSize(); wxRect itemRect; int cy=0; wxTreeItemId h; for(h=m_treeCtrl->GetFirstVisibleItem();h;h=m_treeCtrl->GetNextVisible(h)) { ecTreeItemData* data = (ecTreeItemData*) m_treeCtrl->GetItemData(h); if (data->GetConfigItem() == item) { if (m_treeCtrl->GetBoundingRect(h, itemRect)) { cy = itemRect.GetTop(); wxRect drawItemRect(0, cy, clientSize.x, itemRect.GetHeight()); return drawItemRect; } else return wxRect(0, 0, 0, 0); } } return wxRect(0, 0, 0, 0);}void ecValueWindow::OnMouseEvent(wxMouseEvent& event){ if (event.LeftDown() && (event.GetX() > 2)) { // Find if this corresponds to a tree item int flags = 0; wxTreeItemId item = m_treeCtrl->HitTest(wxPoint(4, event.GetY()), flags); if (item.IsOk()) { m_treeCtrl->SelectItem(item); ecConfigItem* configItem = ((ecTreeItemData*) m_treeCtrl->GetItemData(item))->GetConfigItem(); if (configItem->CanEdit()) BeginEditing(configItem); } } else if (event.RightDown()) { // Find if this corresponds to a tree item int flags = 0; wxTreeItemId item = m_treeCtrl->HitTest(wxPoint(4, event.GetY()), flags); if (item != 0) { ecConfigItem* configItem = ((ecTreeItemData*) m_treeCtrl->GetItemData(item))->GetConfigItem(); m_treeCtrl->SelectItem(item); ((ecConfigTreeCtrl*) m_treeCtrl)->GetPropertiesMenu()->SetClientData((void*) TRUE); PopupMenu(((ecConfigTreeCtrl*) m_treeCtrl)->GetPropertiesMenu(), event.GetX(), event.GetY()); } else { wxGetApp().GetWhatsThisMenu()->SetClientData((void*) FALSE); PopupMenu(wxGetApp().GetWhatsThisMenu(), event.GetX(), event.GetY()); } }}void ecValueWindow::DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect){ if (m_treeCtrl) { ecConfigItem* item = ((ecTreeItemData*) m_treeCtrl->GetItemData(id))->GetConfigItem(); if (!item) return; wxString text = item->GetDisplayValue(); if (text.IsEmpty()) return; static wxColour normalColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT); static wxColour disabledColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_GRAYTEXT); dc.SetTextForeground( (item->GetActive() && (item->GetConfigType() != ecPackage)) ? normalColour : disabledColour ); int textW, textH; dc.GetTextExtent(text, & textW, & textH); int x = 2; int y = rect.GetY() + wxMax(0, (rect.GetHeight() - textH) / 2); dc.DrawText(text, x, y); }}bool ecValueWindow::BeginEditing(ecConfigItem* item){ if (m_configItem) EndEditing(); m_configItem = item; m_editWindow = item->CreateEditWindow(this); if (m_editWindow) { m_editWindow->Show(FALSE); item->TransferDataToWindow(m_editWindow); // Position the control PositionEditWindow(); m_editWindow->Show(TRUE); m_editWindow->SetFocus(); return TRUE; } else { m_configItem = NULL; return FALSE; }}// Position the controlvoid ecValueWindow::PositionEditWindow(){ if (!m_configItem || !m_editWindow) return; // Position the control wxSize clientSize = GetClientSize(); wxRect itemRect; m_treeCtrl->GetBoundingRect(m_configItem->GetTreeItem(), itemRect); wxSize sz = m_editWindow->GetSize(); // m_editWindow->SetSize(2, itemRect.y+1, clientSize.x, itemRect.GetHeight() /* -2 */); m_editWindow->SetSize(0, itemRect.y, clientSize.x, sz.y);}bool ecValueWindow::EndEditing(){ if (m_configItem) { if (m_editWindow && !wxGetApp().GetValuesLocked()) m_configItem->TransferDataFromWindow(m_editWindow); m_configItem = NULL; } if (m_editWindow) { delete m_editWindow; m_editWindow = NULL; } return TRUE;}void ecValueWindow::OnScroll(wxScrollWinEvent& event){ wxTreeCompanionWindow::OnScroll(event); PositionEditWindow();}void ecValueWindow::OnExpand(wxTreeEvent& event){ wxTreeCompanionWindow::OnExpand(event); EndEditing();}/** wxIconStateInfo*/wxIconStateInfo::wxIconStateInfo(const wxString& name){ m_maxStates = 0; m_name = name; int i; for (i = 0; i < wxMAX_ICON_STATES; i++) m_states[i] = 0;}int wxIconStateInfo::GetIconId(int state, bool enabled) const{ wxASSERT ( state < (wxMAX_ICON_STATES * 2) ); wxASSERT ( state < m_maxStates ); return m_states[state * 2 + (enabled ? 0 : 1)];}void wxIconStateInfo::SetIconId(int state, bool enabled, int iconId){ wxASSERT ( state < (wxMAX_ICON_STATES * 2) ); if (state+1 > m_maxStates) m_maxStates = state+1; m_states[state * 2 + (enabled ? 0 : 1)] = iconId;}/** wxIconStateInfoDb* Contains a list of wxIconStateInfos*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -