def __init__(self, parent, main):
        QtGui.QWidget.__init__(self, parent)

        self.main = main

        self.project_file_path = None
        self.project_settings_file = None
        self.project_settings = None

        mainLayout = QtGui.QHBoxLayout()
        mainLayout.setContentsMargins(0, 0, 0, 0)
        mainLayout.setSpacing(0)
        self.setLayout(mainLayout)

        #########################################
        ## Editor/Terminal on left, Compiler Bar on right
        self.editorCompilerSplitter = QtGui.QSplitter(self)
        mainLayout.addWidget(self.editorCompilerSplitter, 20)
        self.editorCompilerSplitter.setOrientation(QtCore.Qt.Horizontal)

        ####################################################
        ## Editor at top, Terminal at bottom Splitter
        self.editorTerminalSplitter = QtGui.QSplitter(self)
        self.editorTerminalSplitter.setOrientation(QtCore.Qt.Vertical)
        self.editorCompilerSplitter.addWidget(self.editorTerminalSplitter)

        #########################################
        ## Editor Widget
        self.editor = EditorWidget(self, self.main)
        self.editorTerminalSplitter.addWidget(self.editor)

        #########################################
        ## Terminal Widget
        self.terminalWidget = TerminalWidget(self, self.main)
        self.editorTerminalSplitter.addWidget(self.terminalWidget)

        ##############################################################
        ### Arduino Compiler Bar
        self.arduinoCompilerBar = ArduinoCompilerBar(self, self.main)
        self.connect(self.arduinoCompilerBar, QtCore.SIGNAL("compile_action"),
                     self.on_compile_action)
        self.connect(self.arduinoCompilerBar,
                     QtCore.SIGNAL("project_settings_changed"),
                     self.on_project_settings_changed)

        self.editorCompilerSplitter.addWidget(self.arduinoCompilerBar)

        ## Layout tweeks - TODO store thas in project
        self.editorCompilerSplitter.setStretchFactor(0, 2)
        self.editorCompilerSplitter.setStretchFactor(1, 0)

        self.editorTerminalSplitter.setStretchFactor(0, 5)
        self.editorTerminalSplitter.setStretchFactor(1, 2)