Beremiz constructor is strange!

Issue #13 closed
Павел Бельтюков created an issue

There is very strange code in Beremiz class constructor:

        if projectOpen is not None:
            projectOpen = DecodeFileSystemPath(projectOpen, False)

        if projectOpen is not None and os.path.isdir(projectOpen):
            self.CTR = ProjectController(self, self.Log)
            self.Controler = self.CTR
            result = self.CTR.LoadProject(projectOpen, buildpath)
            if not result:
                self.LibraryPanel.SetController(self.Controler)
                self.ProjectTree.Enable(True)
                self.PouInstanceVariablesPanel.SetController(self.Controler)
                self.RefreshConfigRecentProjects(os.path.abspath(projectOpen))
                self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
            else:
                self.ResetView()
                self.ShowErrorMessage(result)
        else:
            self.CTR = ctr
            self.Controler = ctr
            if ctr is not None:
                self.LibraryPanel.SetController(self.Controler)
                self.ProjectTree.Enable(True)
                self.PouInstanceVariablesPanel.SetController(self.Controler)
                self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)

In this code ctr argument is used only if projectOpen is not None, such things lead extra code in Beremiz based IDEs(see LPCManager), such as

    CTR = LPCProjectController(None, Log, buildpath)
    if projectOpen is not None and os.path.isdir(projectOpen):
        result = CTR.LoadProject(projectOpen)
        if result:
            Log.write("Error: Invalid project directory", result)
    else:
        Log.write("Error: No such file or directory")
#...
    frame = LPCBeremiz(None, ctr=CTR, debug=True)

I think that it's better to change Beremiz constructor in some way like:

    if ctr is not None:
         self.CTR = ctr
    else:
         self.CTR = ProjectController(self, self.Log)

    self.Controler = self.CTR
    if projectOpen is not None and os.path.isdir(projectOpen):
        result = self.CTR.LoadProject(projectOpen, buildpath)
        if not result:
            self.LibraryPanel.SetController(self.Controler)
            self.ProjectTree.Enable(True)
            self.PouInstanceVariablesPanel.SetController(self.Controler)
            self.RefreshConfigRecentProjects(os.path.abspath(projectOpen))
            self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
        else:
            self.ResetView()
            self.ShowErrorMessage(result)
    else:
        #show error message here

In such case people will have to write less code in their IDEs, but some old code like LPCManager will be broken.

Actually LPCManager is already broken as debuger data formats have changed!

Comments (1)

  1. Log in to comment