News:

Accounts with zero posts and zero activity during the last months will be deleted periodically to fight SPAM!

Main Menu

Plugin 'compilergcc'

Started by LETARTARE, May 20, 2023, 04:00:55 PM

Previous topic - Next topic

LETARTARE

With the 'compilergcc' plugin in 'int CompilerGCC::Run(ProjectBuildTarget* target)' we find
Manager::Get()->GetLogManager()->Log(_("Checking for existence: ") + f.GetFullPath(), m_PageIndex);
    if ( (target->GetTargetType() != ttCommandsOnly) && !wxFileExists(f.GetFullPath()) )
    {
        int ret = cbMessageBox(_("It seems that this project has not been built yet.\n"
                                 "Do you want to build it now?"),
                               _("Information"),
                               wxYES_NO | wxCANCEL | wxICON_QUESTION);
        switch (ret)
        {
            case wxID_YES:
            {
                m_pProject->SetCurrentlyCompilingTarget(0);
                m_RunAfterCompile = true;
                Build(target);
                return -1;
            }
            case wxID_NO:
                break;
            default:
                m_pProject->SetCurrentlyCompilingTarget(0);
                return -1;
        }
    }

This verifies that the executable exists, because '&Run' has been activated.

Instead, '&Run' should be invalidated if the executable does not exist. This could be done automatically in
'void CompilerGCC::OnUpdateUI(wxUpdateUIEvent& event)' by :

    ...
    cbProject* prj = projectManager->GetActiveProject();
    cbEditor* ed = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor();
/// new
    if (id == idMenuRun)
    {
        event.Enable(exeExists(prj));
    }
    else
    ...

with 'exeExists(prj)' which would indicate whether the executable exists for example :
bool CompilerGCC::exeExists(cbProject* prj)
{
    bool valid = false;
    if (prj)
    {
        ProjectBuildTarget* pTarget = prj->GetBuildTarget(prj->GetActiveBuildTarget());
        if (pTarget)
        {
            wxString out = UnixFilename(pTarget->GetOutputFilename());
            Manager::Get()->GetMacrosManager()->ReplaceEnvVars(out);
            wxFileName file(out);
            file.MakeAbsolute(prj->GetBasePath());
            valid = ::wxFileExists(file.GetFullPath());
            valid = valid || (pTarget->GetTargetType() == ttCommandsOnly) ;
        }
    }

    return valid;
}

This approach seems to me to be more correct than checking afterwards whether the action taken is correct.
Because in the options allowed to the user: the option 'wxID_NO' leads to run anyway with an error !!

What do you think about this?
CB-13834, plugins-sdk-2.25.0 : Collector-2.6.5, AddOnForQt-5.1.2
1- Win7 Business Pack1 64bits : wx-3.2.8, gcc-15.2.0,
2- OpenSuse::Leap-15.6-64bits : wx-3.2.8;gtk3-u, gcc-15.2.0,
=> !! The messages are translated by 'Deepl'

killerbot

I agree, providing the user to click on something while we (the system) knows this is not possible, is not user friendly.

Would there still be added value in checking afterwards ... ?

LETARTARE

I don't think so. But this needs to be checked by other people.
It would then be necessary to delete the code presented first, which is no longer useful.

There is the same kind of code for 'int CompilerGCC::RunSingleFile(const wxString& filename)'.
CB-13834, plugins-sdk-2.25.0 : Collector-2.6.5, AddOnForQt-5.1.2
1- Win7 Business Pack1 64bits : wx-3.2.8, gcc-15.2.0,
2- OpenSuse::Leap-15.6-64bits : wx-3.2.8;gtk3-u, gcc-15.2.0,
=> !! The messages are translated by 'Deepl'

LETARTARE

Can I submit a ticket for a patch request ?
CB-13834, plugins-sdk-2.25.0 : Collector-2.6.5, AddOnForQt-5.1.2
1- Win7 Business Pack1 64bits : wx-3.2.8, gcc-15.2.0,
2- OpenSuse::Leap-15.6-64bits : wx-3.2.8;gtk3-u, gcc-15.2.0,
=> !! The messages are translated by 'Deepl'

killerbot


LETARTARE

CB-13834, plugins-sdk-2.25.0 : Collector-2.6.5, AddOnForQt-5.1.2
1- Win7 Business Pack1 64bits : wx-3.2.8, gcc-15.2.0,
2- OpenSuse::Leap-15.6-64bits : wx-3.2.8;gtk3-u, gcc-15.2.0,
=> !! The messages are translated by 'Deepl'

LETARTARE

CB-13834, plugins-sdk-2.25.0 : Collector-2.6.5, AddOnForQt-5.1.2
1- Win7 Business Pack1 64bits : wx-3.2.8, gcc-15.2.0,
2- OpenSuse::Leap-15.6-64bits : wx-3.2.8;gtk3-u, gcc-15.2.0,
=> !! The messages are translated by 'Deepl'