def init_view(self):
        """Initilize the Frame."""

        # frame
        from degras.frame.frame_agent   import Frame
        frame = Frame()

        from degras.frame.menubar_agent import Menubar
        menubar = Menubar()
        frame.set_menubar( menubar.get_view() )

        # initialize
        frame.init()
        frame.show()


        # append work flow canvas
        from degras.workflow.wfcanvas_agent import WorkFlowCanvas
        workflow_panel = WorkFlowCanvas(frame)
        # workflow_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            workflow_panel, wx.aui.AuiPaneInfo().Name('WorkFlowCanvas').
            Caption('Work Flow Canvas').Centre().Layer(0).CloseButton(False).
            MaximizeButton(True).MinSize(wx.Size(400,400))
        )

        # add system tree viewer
        systemview_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            systemview_panel, wx.aui.AuiPaneInfo().Name('SystemView').
            Caption('System').Right().Layer(0).CloseButton(True).
            MaximizeButton(True).MinSize(wx.Size(200,100))
        )

        # # add log viewer
        # panel = wx.Panel(frame.get_view(), -1)
        # frame.append_pane(
            # panel, wx.aui.AuiPaneInfo().Name('LogView').
            # Caption('Log View').Bottom().Layer(0).CloseButton(False).
            # MaximizeButton(False).MinSize(wx.Size(200,100))
        # )

        # add job manager
        from degras.jobmanager.manager_agent import JobManager
        from degras.jobmanager.manager_model import ManagerModel
        jobmodel = ManagerModel()
        self.jobmanager = JobManager(frame, jobmodel)
        frame.append_pane(
            self.jobmanager.get_view(), wx.aui.AuiPaneInfo().Name('JobManager').
            Caption('Job Manager').Bottom().Layer(0).CloseButton(True).
            MaximizeButton(True).MinSize(wx.Size(200,100))
        )
        
        # add Project viewer
        project_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            project_panel, wx.aui.AuiPaneInfo().Name('ProjectView').
            Caption('Project').Left().Layer(1).Position(0).
            CloseButton(True).MaximizeButton(True).MinSize(wx.Size(200,100))
        )

        # add property viewer
        property_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            property_panel, wx.aui.AuiPaneInfo().Name('PropertyView').
            Caption('Property').Left().Layer(1).Position(1).
            CloseButton(True).MaximizeButton(True).MinSize(wx.Size(200,100))
        )
class Nagara(wx.App):

    def OnInit(self, configs={}):
        """Constructor."""

        self.configs = configs if configs else {}

        # self.cur_prj = project.Project(root='', name='test project')
        # self.projects = [self.cur_prj]
                         
        self.init_view()
        # self.init_project()
        # self.init_molview()
        # self.init_workflow()

        # self.initMenu()
        self.initEverythingElse()
        return True

    def init_view(self):
        """Initilize the Frame."""

        # frame
        from degras.frame.frame_agent   import Frame
        frame = Frame()

        from degras.frame.menubar_agent import Menubar
        menubar = Menubar()
        frame.set_menubar( menubar.get_view() )

        # initialize
        frame.init()
        frame.show()


        # append work flow canvas
        from degras.workflow.wfcanvas_agent import WorkFlowCanvas
        workflow_panel = WorkFlowCanvas(frame)
        # workflow_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            workflow_panel, wx.aui.AuiPaneInfo().Name('WorkFlowCanvas').
            Caption('Work Flow Canvas').Centre().Layer(0).CloseButton(False).
            MaximizeButton(True).MinSize(wx.Size(400,400))
        )

        # add system tree viewer
        systemview_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            systemview_panel, wx.aui.AuiPaneInfo().Name('SystemView').
            Caption('System').Right().Layer(0).CloseButton(True).
            MaximizeButton(True).MinSize(wx.Size(200,100))
        )

        # # add log viewer
        # panel = wx.Panel(frame.get_view(), -1)
        # frame.append_pane(
            # panel, wx.aui.AuiPaneInfo().Name('LogView').
            # Caption('Log View').Bottom().Layer(0).CloseButton(False).
            # MaximizeButton(False).MinSize(wx.Size(200,100))
        # )

        # add job manager
        from degras.jobmanager.manager_agent import JobManager
        from degras.jobmanager.manager_model import ManagerModel
        jobmodel = ManagerModel()
        self.jobmanager = JobManager(frame, jobmodel)
        frame.append_pane(
            self.jobmanager.get_view(), wx.aui.AuiPaneInfo().Name('JobManager').
            Caption('Job Manager').Bottom().Layer(0).CloseButton(True).
            MaximizeButton(True).MinSize(wx.Size(200,100))
        )
        
        # add Project viewer
        project_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            project_panel, wx.aui.AuiPaneInfo().Name('ProjectView').
            Caption('Project').Left().Layer(1).Position(0).
            CloseButton(True).MaximizeButton(True).MinSize(wx.Size(200,100))
        )

        # add property viewer
        property_panel = wx.Panel(frame.get_view(), -1)
        frame.append_pane(
            property_panel, wx.aui.AuiPaneInfo().Name('PropertyView').
            Caption('Property').Left().Layer(1).Position(1).
            CloseButton(True).MaximizeButton(True).MinSize(wx.Size(200,100))
        )

        # self.test_jobmodel()



    def test_jobmodel(self): 
        # create Job
        from degras.jobmanager.tests.jobmock import JobMock
        job = JobMock(1)
        
        self.jobmanager.append_job(job)
        #print model.get_job_dict()
        #managermodel.append(job)
        #managermodel.append(job)
        #managermodel.append(job)
        #managermodel.append(job)
        #managermodel.append(job)


        import time
        def append_job(interval, job):
            time.sleep(interval)
            self.jobmanager.append_job(job)
            time.sleep(interval)
            self.jobmanager.append_job(job)

        import threading
        t = threading.Thread(name=None, target=append_job, args=[3, job])
        t.start()


        # toolbar

    def init_projectmanager(self):
        pass

    def appendProject(self, project):
        """Append the project settings to the project list."""
        self.projects.append(project)
        self.cur_prj = project

    def getCurPrj(self):
        """Get the active project."""
        return self.cur_prj

    def getProjects(self):
        """Get the projects."""
        return self.projects

    def initEverythingElse(self):
        # sizer.Fit(self.frame)
        # sizer.SetSizeHints(self.frame)
        pass

    def runGrid(self, evt):
        pass

    def onExit(self, evt):
        connectcluster.close()
        if self.setting.getRemoteInfo().isActive:
            try:
                self.closeRemote()
            except:
                pass
        self.frame.Close()
        quit()

    def onErrorHandler(self, message):
        self.printLog("In ErrorHandlerFunc()")

        dlg = wx.MessageDialog(None, message, caption="Error!",
                style=wx.OK|wx.ICON_ERROR|wx.STAY_ON_TOP,
                pos=wx.DefaultPosition)
        ret = dlg.ShowModal()

    def printLog(self, message):
        pass

    def getCurPrj(self):
        """Return a reference to the current project."""
        return self.cur_prj

    def getConfigs(self):
        return self.configs
                

#   def onSettingRemote(self, evt):

#       self.remoteHost = 
#       self.remoteUser =

#   def initFrame(self):
#       pass

    def initMenu(self):
        pass