⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configtree.cpp

📁 ecos实时嵌入式操作系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
wxIconStateInfoDB::wxIconStateInfoDB(wxImageList* imageList){    m_imageList = imageList;    DeleteContents(TRUE);}void wxIconStateInfoDB::AppendInfo(wxIconStateInfo* info){    Append(info);}// Easy way of initialising both the image list and the// info db. It will generate image ids itself while appending the icon.bool wxIconStateInfoDB::AddInfo(const wxString& name, const wxIcon& icon, int state, bool enabled){    wxASSERT (m_imageList != NULL);        wxIconStateInfo* info = FindInfo(name);    if (!info)    {        info = new wxIconStateInfo(name);        Append(info);    }    info->SetIconId(state, enabled, m_imageList->Add(icon));    return TRUE;}wxIconStateInfo* wxIconStateInfoDB::FindInfo(const wxString& name) const{    wxNode* node = First();    while (node)    {        wxIconStateInfo* info = (wxIconStateInfo*) node->Data();        if (info->GetName() == name)            return info;        node = node->Next();    }    return NULL;}int wxIconStateInfoDB::GetIconId(const wxString& name, int state, bool enabled) const{    wxIconStateInfo* info = FindInfo(name);    if (!info)        return -1;    return info->GetIconId(state, enabled);}bool wxIconStateInfoDB::SetIconId(const wxString& name, int state, bool enabled, int iconId){    wxIconStateInfo* info = FindInfo(name);    if (!info)        return FALSE;    info->SetIconId(state, enabled, iconId);    return TRUE;}#if 0wxIcon wxIconStateInfoDB::GetIcon(const wxString& name, int state, bool enabled) const{    wxASSERT( m_imageList != NULL );        wxIconStateInfo* info = FindInfo(name);    if (!info)        return wxNullIcon;    int id = info->GetIconId(state, enabled);    if (id < 0)        return wxNullIcon;    else        return m_imageList->GetImage(id); // Doesn't exist}#endif/** ecSplitterScrolledWindow* This window holds the tree and value windows.* We derive a new class mainly to intercept popup menu commands from both child windows* without resorting to placing their handlers in the main frame.*/BEGIN_EVENT_TABLE(ecSplitterScrolledWindow, wxSplitterScrolledWindow)    EVT_MENU(ecID_WHATS_THIS, ecSplitterScrolledWindow::OnWhatsThis)    EVT_MENU(ecID_TREE_PROPERTIES, ecSplitterScrolledWindow::OnProperties)    EVT_MENU(ecID_TREE_RESTORE_DEFAULTS, ecSplitterScrolledWindow::OnRestoreDefaults)    EVT_MENU(ecID_TREE_VISIT_DOC, ecSplitterScrolledWindow::OnVisitDoc)    EVT_MENU(ecID_TREE_VIEW_HEADER, ecSplitterScrolledWindow::OnViewHeader)    EVT_MENU(ecID_TREE_UNLOAD_PACKAGE, ecSplitterScrolledWindow::OnUnloadPackage)    EVT_UPDATE_UI(ecID_TREE_RESTORE_DEFAULTS, ecSplitterScrolledWindow::OnUpdateRestoreDefaults)    EVT_UPDATE_UI(ecID_TREE_VISIT_DOC, ecSplitterScrolledWindow::OnUpdateVisitDoc)    EVT_UPDATE_UI(ecID_TREE_VIEW_HEADER, ecSplitterScrolledWindow::OnUpdateViewHeader)    EVT_UPDATE_UI(ecID_TREE_UNLOAD_PACKAGE, ecSplitterScrolledWindow::OnUpdateUnloadPackage)END_EVENT_TABLE()static bool ecIsMenuForItem(wxCommandEvent& event){    wxObject* obj = event.GetEventObject();    wxMenu* menu = NULL;    if (obj->IsKindOf(CLASSINFO(wxMenu)))    {        // Menu has some client data which tells us if the menu was clicked over an item        // or not        menu = (wxMenu*) obj;        return (bool) (menu->GetClientData() != 0) ;    }    else        return FALSE;}void ecSplitterScrolledWindow::OnWhatsThis(wxCommandEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0 && ecIsMenuForItem(event))    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                wxPoint pt = wxGetMousePosition();        wxString msg;        msg.Printf("Popping at %d x %d", pt.x, pt.y);        wxLogDebug(msg);        wxGetApp().GetHelpController().DisplayTextPopup(item->GetDescription(), wxGetMousePosition());    }    else        event.Skip();}void ecSplitterScrolledWindow::OnProperties(wxCommandEvent& event){    wxObject* obj = event.GetEventObject();    wxMenu* menu = NULL;    if (obj->IsKindOf(CLASSINFO(wxMenu)))    {        // Menu has some client data which tells us if the menu was clicked over an item        // or not        menu = (wxMenu*) obj;    }    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;        wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0 && ecIsMenuForItem(event))    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                ecConfigPropertiesDialog dialog(wxGetApp().GetTopWindow(), item);        dialog.SetTitle(item->GetName());        dialog.ShowModal();    }}void ecSplitterScrolledWindow::OnRestoreDefaults(wxCommandEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;        wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0 && ecIsMenuForItem(event))    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();        if (item->HasModifiedChildren())        {            int ans = wxMessageBox(_("Restore defaults for nested items?"), wxGetApp().GetSettings().GetAppName(), wxYES_NO|wxCANCEL|wxICON_QUESTION);            switch (ans)            {            case wxYES:                RestoreDefault(id, TRUE);                break;            case wxNO:                RestoreDefault(id, FALSE);                break;            case wxCANCEL:                break;            default:                wxASSERT(FALSE);                break;            }        }        else        {            RestoreDefault(id, FALSE);        }        // current values may have changed so refresh the other views        wxGetApp().GetConfigToolDoc ()->UpdateFailingRuleCount ();                if (item->GetOptionType () != ecOptionTypeNone)        {            ecConfigToolHint hint(item, ecValueChanged);            wxGetApp().GetConfigToolDoc ()->UpdateAllViews (NULL, & hint);        }    }}void ecSplitterScrolledWindow::RestoreDefault(wxTreeItemId h, bool bRecurse /* = FALSE */, bool bTopLevel /* = TRUE */){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    ecConfigItem* ti = ((ecTreeItemData*) treeCtrl->GetItemData(h))->GetConfigItem();    const CdlValuable valuable = ti->GetCdlValuable();    if (valuable && (CdlValueFlavor_None != valuable->get_flavor ())) // skip the root node and nodes without a value        valuable->set_source (CdlValueSource_Default);    treeCtrl->SetItemText (h, ti->GetItemNameOrMacro ()); // remove asterisk in control view        if (bTopLevel && ti->HasRadio ()) // if user-specified item is a radio button    {        for (ecConfigItem * pItem = ti->FirstRadio (); pItem; pItem = pItem->NextRadio ())        {            if (ti != pItem)            {                const CdlValuable valuable = pItem->GetCdlValuable();                wxASSERT (valuable);                valuable->set_source (CdlValueSource_Default); // restore default for each sibling radio button                treeCtrl->SetItemText (pItem->GetTreeItem(), pItem->GetItemNameOrMacro ()); // remove asterisk in control view            }                    }    }        if (bRecurse)    {        long cookie;        for (h = treeCtrl->GetFirstChild(h, cookie); h; h = treeCtrl->GetNextSibling(h))        {            RestoreDefault (h, TRUE, FALSE);        }    }}void ecSplitterScrolledWindow::OnVisitDoc(wxCommandEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0 && ecIsMenuForItem(event))    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                item->ViewURL();    }    else        event.Skip();}void ecSplitterScrolledWindow::OnViewHeader(wxCommandEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0 && ecIsMenuForItem(event))    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                item->ViewHeader();    }    else        event.Skip();}void ecSplitterScrolledWindow::OnUnloadPackage(wxCommandEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0)    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                if (wxYES == wxMessageBox(_("Are you sure you wish to unload this package?"), wxGetApp().GetSettings().GetAppName(),                wxYES_NO|wxICON_QUESTION))        {            item->Unload();            wxGetApp().GetConfigToolDoc()->RegenerateData();        }    }}void ecSplitterScrolledWindow::OnUpdateRestoreDefaults(wxUpdateUIEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0)    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                event.Enable( IsChanged(id, TRUE ) );    }}void ecSplitterScrolledWindow::OnUpdateVisitDoc(wxUpdateUIEvent& event){    event.Enable( TRUE );}void ecSplitterScrolledWindow::OnUpdateViewHeader(wxUpdateUIEvent& event){    ecConfigToolDoc *pDoc=wxGetApp().GetConfigToolDoc();    event.Enable( pDoc && !pDoc->GetBuildTree().IsEmpty() ) ;}void ecSplitterScrolledWindow::OnUpdateUnloadPackage(wxUpdateUIEvent& event){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    wxTreeItemId id = treeCtrl->GetSelection();    if (id != 0)    {        ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();                event.Enable( item->IsPackage() );    }}bool ecSplitterScrolledWindow::IsChanged(wxTreeItemId id, bool bRecurse){    ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL);    wxASSERT (treeCtrl != NULL) ;    ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem();    bool rc = item->Modified ();    if(!rc && bRecurse)    {        long cookie;        for (id=treeCtrl->GetFirstChild(id, cookie);id;id=treeCtrl->GetNextSibling(id))        {            if (IsChanged(id,TRUE))            {                rc=TRUE;                break;            }        }    }    return rc;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -