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

📄 admindlg.cpp

📁 ecos实时嵌入式操作系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                strCommand.Printf (wxT("add %s --accept_license"), (const wxChar*) strPathName);                strCommand.Replace (wxT("\\"), wxT("/")); // backslashes -> forward slashes for Tcl_EvalFile                if (! EvalTclFile (3, strCommand, _("Adding package")))  // if not successful                {                    // try the next file                }                else                {                                    bRepositoryChanged = TRUE;                }            }        }                // refresh the package tree only if necessary                if (bRepositoryChanged && ! PopulatePackageTree (m_strRepository))        {        }    }}void ecAdminDialog::OnRemove(wxCommandEvent& event){    wxTreeCtrl* treeCtrl = (wxTreeCtrl*) FindWindow( ecID_ADMIN_DIALOG_TREE) ;    const wxTreeItemId hTreeItem = treeCtrl->GetSelection ();    if (! hTreeItem || !hTreeItem.IsOk())        return;        if (wxYES != wxMessageBox (_("The selected package will be deleted from the repository. Core eCos packages may be restored only by reinstalling eCos.\n\nDo you wish to continue?"),        _("Remove Package"), wxYES_NO | wxICON_EXCLAMATION))        return;    ecAdminItemData* data = (ecAdminItemData*) treeCtrl->GetItemData (hTreeItem);    if (data) // if a package node is selected    {        // remove all package version nodes        wxString pstrPackage(data->m_string);                bool bStatus = TRUE;        long cookie;        wxTreeItemId hChildItem = treeCtrl->GetFirstChild (hTreeItem, cookie);        while (hChildItem && bStatus)        {            const wxTreeItemId hNextChildItem = treeCtrl->GetNextSibling (hChildItem);			            bStatus = RemovePackageVersion (hChildItem);            hChildItem = hNextChildItem;        }                // remove the package node                if (bStatus)        {            treeCtrl->Delete (hTreeItem);        }    }    else // a version node is selected    {        // remove the version node                const wxTreeItemId hParentItem = treeCtrl->GetParent (hTreeItem);        wxASSERT (hParentItem && hParentItem.IsOk() );        if (RemovePackageVersion (hTreeItem) && ! treeCtrl->ItemHasChildren (hParentItem)) // if the only version was deleted        {            // remove the package node                        treeCtrl->Delete (hParentItem);         }    }}void ecAdminDialog::OnClose(wxCommandEvent& event){    event.Skip();}bool ecAdminDialog::FindUserToolsPath(){#ifdef __WXMSW__    HKEY hKey;    if (ERROR_SUCCESS != RegOpenKeyEx (HKEY_CURRENT_USER, _T("Software\\eCos Configuration Tool\\Paths\\UserToolsDir"), 0, KEY_READ, &hKey))        return FALSE;        TCHAR szBuffer [MAX_PATH + 1];    DWORD dwBufferLength = MAX_PATH + 1;    LONG lStatus = RegQueryValueEx (hKey, _T("Folder"), NULL, NULL, (LPBYTE) szBuffer, &dwBufferLength);    RegCloseKey (hKey);    if (ERROR_SUCCESS != lStatus)        return FALSE;        m_strUserTools = szBuffer;    // TRACE (_T("User tools found at %s\n"), m_strUserTools);    return ! m_strUserTools.IsEmpty ();#else    // wxMessageBox("Sorry, ecAdminDialog::FindUserToolsPath not implemented for this platform.");    return FALSE;#endif}bool ecAdminDialog::RemovePackageVersion (wxTreeItemId hTreeItem){    wxTreeCtrl* treeCtrl = (wxTreeCtrl*) FindWindow( ecID_ADMIN_DIALOG_TREE) ;    const wxTreeItemId hParentItem = treeCtrl->GetParent (hTreeItem);    wxASSERT (hParentItem);    ecAdminItemData* data = (ecAdminItemData*) treeCtrl->GetItemData (hParentItem);    wxASSERT( data );    if (!data)        return FALSE;    wxString pstrPackage = data->m_string ;    wxString strCommand;    wxString itemText(treeCtrl->GetItemText (hTreeItem));    strCommand.Printf (wxT("remove %s --version %s"), (const wxChar*) pstrPackage, (const wxChar*) itemText);    if (! EvalTclFile (3, strCommand, wxT("Removing package"))) // if not successful        return false;        treeCtrl->Delete (hTreeItem); // remove the selected item from the tree    return TRUE;}void ecAdminDialog::ClearPackageTree (){    wxTreeCtrl* treeCtrl = (wxTreeCtrl*) FindWindow( ecID_ADMIN_DIALOG_TREE) ;    wxTreeItemId hPackage = treeCtrl->GetRootItem ();    if (! hPackage.IsOk()) // if no packages in the tree...        return;     // ...nothing to do        while (hPackage.IsOk())    {        const wxTreeItemId hNextPackage = treeCtrl->GetNextSibling(hPackage);        treeCtrl->Delete (hPackage);        hPackage = hNextPackage;    }}// Trivial handlers; otherwise CdlPackagesDatabaseBody::make asserts.static void CdlErrorHandler (std::string message){};static void CdlWarningHandler (std::string message){};bool ecAdminDialog::PopulatePackageTree (const wxString& packageDatabase){    wxTreeCtrl* treeCtrl = (wxTreeCtrl*) FindWindow( ecID_ADMIN_DIALOG_TREE) ;    // delete any existing CDL database        if (m_CdlPkgData)    {        delete m_CdlPkgData;        m_CdlPkgData = NULL;    }        // load the package database        try    {        // Cdl asserts unless the handlers are present.        m_CdlPkgData = CdlPackagesDatabaseBody::make (ecUtils::UnicodeToStdStr (packageDatabase), &CdlErrorHandler, &CdlWarningHandler);    }    catch (CdlStringException exception)    {        wxString strMessage;        strMessage.Printf (_("Error loading database:\n\n%s"), (const wxChar*) wxString (exception.get_message ().c_str ()));        wxMessageBox(strMessage, wxGetApp().GetSettings().GetAppName(), wxICON_EXCLAMATION|wxOK);        return FALSE;    }    catch (...)    {        wxMessageBox(_("Error loading database"), (const wxChar*) wxGetApp().GetSettings().GetAppName(), wxICON_EXCLAMATION|wxOK);        return FALSE;    }        // clear the old package tree        ClearPackageTree ();        // Add a root item    wxTreeItemId rootId = m_treeCtrl->AddRoot(_("Packages"), 0, -1);    // populate the new package tree        const std::vector<std::string>& packages = m_CdlPkgData->get_packages ();    for (std::vector<std::string>::const_iterator package = packages.begin (); package != packages.end (); package++)    {        // add a package node                wxTreeItemId hPackage = treeCtrl->AppendItem (treeCtrl->GetRootItem(), wxString (m_CdlPkgData->get_package_aliases (*package) [0].c_str ()));        treeCtrl->SetItemData (hPackage, new ecAdminItemData(wxString (package->c_str ())));        treeCtrl->SetItemImage (hPackage, 0, wxTreeItemIcon_Normal);        treeCtrl->SetItemImage (hPackage, 0, wxTreeItemIcon_Selected);        treeCtrl->SetItemImage (hPackage, 0, wxTreeItemIcon_Expanded);        treeCtrl->SetItemImage (hPackage, 0, wxTreeItemIcon_SelectedExpanded);                const std::vector<std::string>& versions = m_CdlPkgData->get_package_versions (* package);        for (std::vector<std::string>::const_iterator version = versions.begin (); version != versions.end (); version++)        {            // add a version node            const wxTreeItemId hVersion = treeCtrl->AppendItem ( hPackage, wxString (version->c_str ()));            treeCtrl->SetItemImage (hVersion, 1, wxTreeItemIcon_Normal);            treeCtrl->SetItemImage (hVersion, 1, wxTreeItemIcon_Selected);            treeCtrl->SetItemImage (hVersion, 1, wxTreeItemIcon_Expanded);            treeCtrl->SetItemImage (hVersion, 1, wxTreeItemIcon_SelectedExpanded);        }        treeCtrl->SortChildren (hPackage); // sort the version nodes    }        treeCtrl->SortChildren (treeCtrl->GetRootItem()); // sort the package nodes    treeCtrl->Expand(treeCtrl->GetRootItem());        return TRUE;}bool ecAdminDialog::EvalTclFile(int nargc, const wxString& Argv, const wxString& msg){    wxProgressDialog dlgWait(msg, _("Please wait..."), 100, this);    dlgWait.Update(50);//TRACE (_T("Evaluating ecosadmin.tcl %s\n"), pszArgv);    // set up the data structure which is passed to the Tcl thread    wxString strArgc;    strArgc.Printf (wxT("%d"), nargc);    std::string argv0 = ecUtils::UnicodeToStdStr (m_strRepository) + "/ecosadmin.tcl";    std::string argv = ecUtils::UnicodeToStdStr (Argv);    std::string argc = ecUtils::UnicodeToStdStr (strArgc);    Tcl_Interp * interp = Tcl_CreateInterp ();#ifdef __WXMSW__    Tcl_Channel outchan = Tcl_OpenFileChannel (interp, "nul", "a+", 777);    Tcl_SetStdChannel (outchan, TCL_STDOUT); // direct standard output to NUL:#endif    const char * pszStatus = Tcl_SetVar (interp, "argv0", (char*) argv0.c_str(), 0);    pszStatus = Tcl_SetVar (interp, "argv", (char*) argv.c_str(), 0);    pszStatus = Tcl_SetVar (interp, "argc", (char*) argc.c_str(), 0);    pszStatus = Tcl_SetVar (interp, "gui_mode", "1", 0); // return errors in result string    int nStatus = Tcl_EvalFile (interp, (char*) argv0.c_str());    const char* result = Tcl_GetStringResult (interp);#ifdef __WXMSW__    Tcl_SetStdChannel (NULL, TCL_STDOUT);    Tcl_UnregisterChannel (interp, outchan);#endif    Tcl_DeleteInterp (interp);    wxString strErrorMessage (result);    // report any error    if (! strErrorMessage.IsEmpty ())    {        wxString msg (_("Command execution error:\n\n") + strErrorMessage);        wxMessageBox(msg, wxGetApp().GetSettings().GetAppName(), wxICON_EXCLAMATION|wxOK);	return FALSE;    }    else if (TCL_OK != nStatus)    {        wxString msg (_("Command execution error"));        wxMessageBox(msg, wxGetApp().GetSettings().GetAppName(), wxICON_EXCLAMATION|wxOK);    return FALSE;    }    return TRUE;}

⌨️ 快捷键说明

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