def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

#        pixmap = QPixmap("media/icons/lockenwickler_provisorium.png")
#        splash = QSplashScreen(pixmap, Qt.WindowStaysOnTopHint)
#        splash.setMask(pixmap.mask())
#        splash.showMessage("Starting...")
#        splash.show() 

        self.setupUi()

        self.consoleWindow = ConsoleWindow(False,  self)

        self.setupOgre()

        self.prefDialog = PreferencesDialog(self)
        self.objectPropertyWin = ObjectPropertyWin(self.OgreMainWinSceneMgr, self.gocManager, self)
        self.moduleExplorerWin = ModuleExplorer(self)
        self.modelSelectionDialog = ModelSelectionDialog(self.ogreRoot, self)
        self.materialSelectionDialog = MaterialSelectionDialog(self.ogreRoot, self)
        self.moduleManager.modelSelectionDialog = self.modelSelectionDialog
        self.moduleManager.materialSelectionDialog = self.materialSelectionDialog
        self.moduleDirectoryViewWin = ModuleDirectoryView(self)
        
        triggerManager = TriggerManager()
        
        self.gameObjectClassView = GameObjectClassView(self.moduleManager.gocManager)

        self.createDockWindows()

        self.mainTimer = QtCore.QTimer(self)
        self.mainTimer.connect(self.mainTimer, QtCore.SIGNAL("timeout()"), self.update)
        self.mainTimer.start(5)

        settings = QtCore.QSettings()
        self.restoreGeometry(settings.value("MainWindow/Geometry").toByteArray())
        self.restoreState(settings.value("MainWindow/DockWindows").toByteArray())
        if not self.prefDialog.setCfgPath(settings.value("Preferences/moduleCfgPath").toString()):
            self.prefDialog.show()
            self.moduleManager.moduleCfgPath = self.prefDialog.moduleCfgPath

        else:
            self.moduleManager.moduleCfgPath = self.prefDialog.moduleCfgPath
            
        self.prefDialog.setExternalEditorPath(str(settings.value("Preferences/externalEditorPath").toString()))
        
        if self.prefDialog.moduleCfgPath is not None:
            self.moduleDirectoryViewWin.modulesPath = self.prefDialog.moduleCfgPath.replace("modules.cfg", "")

        
        self.moduleManager.setModuleExplorer(self.moduleExplorerWin)
        self.moduleManager.setModuleDirView(self.moduleDirectoryViewWin)
        self.moduleManager.setPropertyWindow(self.objectPropertyWin)
        self.moduleManager.setContextMenuCallback(self.onContextMenuCallback)
        
        self.setWindowIcon(QIcon("media/icons/lockenwickler_provisorium_small.png"))
        self.setWindowTitle("Rastullahs Lockenwickler")
        
        self.editorSetupFinished = False
class Lockenwickler(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

#        pixmap = QPixmap("media/icons/lockenwickler_provisorium.png")
#        splash = QSplashScreen(pixmap, Qt.WindowStaysOnTopHint)
#        splash.setMask(pixmap.mask())
#        splash.showMessage("Starting...")
#        splash.show() 

        self.setupUi()

        self.consoleWindow = ConsoleWindow(False,  self)

        self.setupOgre()

        self.prefDialog = PreferencesDialog(self)
        self.objectPropertyWin = ObjectPropertyWin(self.OgreMainWinSceneMgr, self.gocManager, self)
        self.moduleExplorerWin = ModuleExplorer(self)
        self.modelSelectionDialog = ModelSelectionDialog(self.ogreRoot, self)
        self.materialSelectionDialog = MaterialSelectionDialog(self.ogreRoot, self)
        self.moduleManager.modelSelectionDialog = self.modelSelectionDialog
        self.moduleManager.materialSelectionDialog = self.materialSelectionDialog
        self.moduleDirectoryViewWin = ModuleDirectoryView(self)
        
        triggerManager = TriggerManager()
        
        self.gameObjectClassView = GameObjectClassView(self.moduleManager.gocManager)

        self.createDockWindows()

        self.mainTimer = QtCore.QTimer(self)
        self.mainTimer.connect(self.mainTimer, QtCore.SIGNAL("timeout()"), self.update)
        self.mainTimer.start(5)

        settings = QtCore.QSettings()
        self.restoreGeometry(settings.value("MainWindow/Geometry").toByteArray())
        self.restoreState(settings.value("MainWindow/DockWindows").toByteArray())
        if not self.prefDialog.setCfgPath(settings.value("Preferences/moduleCfgPath").toString()):
            self.prefDialog.show()
            self.moduleManager.moduleCfgPath = self.prefDialog.moduleCfgPath

        else:
            self.moduleManager.moduleCfgPath = self.prefDialog.moduleCfgPath
            
        self.prefDialog.setExternalEditorPath(str(settings.value("Preferences/externalEditorPath").toString()))
        
        if self.prefDialog.moduleCfgPath is not None:
            self.moduleDirectoryViewWin.modulesPath = self.prefDialog.moduleCfgPath.replace("modules.cfg", "")

        
        self.moduleManager.setModuleExplorer(self.moduleExplorerWin)
        self.moduleManager.setModuleDirView(self.moduleDirectoryViewWin)
        self.moduleManager.setPropertyWindow(self.objectPropertyWin)
        self.moduleManager.setContextMenuCallback(self.onContextMenuCallback)
        
        self.setWindowIcon(QIcon("media/icons/lockenwickler_provisorium_small.png"))
        self.setWindowTitle("Rastullahs Lockenwickler")
        
        self.editorSetupFinished = False
        
#        splash.finish(self)

    def createAction(self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"):
        action = QtGui.QAction(text, self)
        if icon is not None:
            action.setIcon(QtGui.QIcon("media/icons/%s" % icon))
        if shortcut is not None:
            action.setShortcut(shortcut)
        if tip is not None:
            action.setToolTip(tip)
            action.setStatusTip(tip)
        if slot is not None:
            self.connect(action, QtCore.SIGNAL(signal), slot)

        action.setCheckable(checkable)

        return action

    def addActions(self, target, actions):
        for act in actions:
            if act is None:
               target.addSeparator()
            else:
                target.addAction(act)

    def setupUi(self):
        self.setObjectName("MainWindow")

        self.centralwidget = QtGui.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")

        self.hboxlayout = QtGui.QHBoxLayout(self.centralwidget)
        self.hboxlayout.setContentsMargins(0, 0, 0, 0)
        self.hboxlayout.setObjectName("hboxlayout")

        self.gridlayout = QtGui.QGridLayout()
        self.gridlayout.setObjectName("gridlayout")
        self.gridlayout.setContentsMargins(0, 0, 0, 0)
        
        self.menubar = QtGui.QMenuBar(self)
        self.menubar.setObjectName("menubar")

        self.menuFile = QtGui.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")

        self.menuEdit = QtGui.QMenu(self.menubar)
        self.menuEdit.setObjectName("menuEdit")

        self.menuView = QtGui.QMenu(self.menubar)
        self.menuView.setObjectName("menuView")
        self.setMenuBar(self.menubar)


        self.statusbar = QtGui.QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)

#####################################
        self.actionNeu =self.createAction("&New Module",  self.actionNewSlot,  QKeySequence.New,  "filenew.png",  "New Module")
        self.actionNeu.setObjectName("actionNeu")

        self.actionOpen = self.createAction("&Open Module",  self.actionOpenSlot,  QKeySequence.Open,  "fileopen.png",  "Open Module")
        self.actionOpen.setObjectName("actionOpen")
        
        self.actionSave = self.createAction("&Save",  self.actionSaveSlot,  QKeySequence.Save,  "filesave.png",  "Save Module")
        self.actionSave.setObjectName("actionSave")
        
        self.actionRunModule = self.createAction("&Save and Run",  self.actionRunModuleSlot,  "Alt+R",  "fileexport.png",  "Save And Run Module")
        self.actionRunModule.setObjectName("actionRunModule")

        self.actionClose = self.createAction("Quit",  self.actionQuitSlot,  "Alt+Q",  "exit.png",  "Quit")
        self.actionClose.setObjectName("actionQuit")
#####################################


#####################################
        self.actionDelete = self.createAction("Delete",  self.actionDeleteSlot,  QKeySequence.Delete,  "editdelete.png",  "Delete")
        self.actionDelete.setObjectName("actionDelete")

        self.actionCopy = self.createAction("Copy",  self.actionCopySlot,  QKeySequence.Copy,  "editcopy.png",  "Copy")
        self.actionCopy.setObjectName("actionCopy")

        self.actionCut = self.createAction("Cut",  self.actionCutSlot,  QKeySequence.Cut,  "editcut.png",  "Cut")
        self.actionCut.setObjectName("actionCut")

        self.actionPaste = self.createAction("Paste",  self.actionPasteSlot,  QKeySequence.Paste,  "editpaste.png",  "Paste")
        self.actionPaste.setObjectName("actionPaste")

        self.actionSelect = self.createAction("&Select",  self.actionSelectSlot,  "Space",  "cursor.png",  "Move selected object")
        self.actionSelect.setObjectName("actionSelect")

        self.actionMove = self.createAction("&Move",  self.actionMoveSlot,  "g",  "move.png",  "Move selected object")
        self.actionMove.setObjectName("actionMove")

        self.actionRotate = self.createAction("&Rotate",  self.actionRotateSlot,  "r",  "rotate.png",  "Rotate selected object")
        self.actionRotate.setObjectName("actionRotate")

        self.actionScale = self.createAction("&Scale",  self.actionScaleSlot,  "x",  "resizecol.png",  "Scale selected object")
        self.actionScale.setObjectName("actionScale")

        self.actionOneClickEntityPlacement = self.createAction("&OneClickEntityPlacement",  self.actionOneClickEntityPlacementSlot,  "",  "resizecol.png",  "Add an Entity just by a click")
        self.actionOneClickEntityPlacement.setObjectName("actionOneClickEntityPlacement")
        self.actionOneClickEntityPlacement.setCheckable(True)

#####################################
#####################################
        self.actionSceneExplorer = self.createAction("&Scene Exlporer",  self.toggleModuleExplorer,  "Alt+E",  "view_tree.png",  "Module Explorer",  False)
        self.actionSceneExplorer.setObjectName("actionSceneExplorer")
        
        self.actionModuleDirView = self.createAction("&Directory Explorer",  self.toggleModuleDirView,  "Alt+D",  "view_tree.png",  "Module Directory Explorer",  False)
        self.actionModuleDirView.setObjectName("actionDirectoryExplorer")
        
        self.actionPreferences = self.createAction("&Preferences",  self.togglePreferencesWindow,  None,  "configure.png",  "Lockenwickler Preferences",  False)
        self.actionPreferences.setObjectName("actionPreferences")

        self.actionProperty_Window = self.createAction("Pr&operty Window",  self.togglePropertyWindow,  "Alt+P",  "unsortedlist1.png",  "Property Window")
        self.actionProperty_Window.setObjectName("actionProperty_Window")

        self.actionObject_Selection = self.createAction("&Model Preview Window",  self.toggleModelPreviewWindow,  "Alt+O",  "tux.png",  "Model Preview")
        self.actionObject_Selection.setObjectName("actionObject_Selection")
        
        self.actionMaterial_Selection = self.createAction("Material &Preview Window",  self.toggleMaterialPreviewWindow,  "Alt+M",  "colors.png",  "Material Preview")
        self.actionMaterial_Selection.setObjectName("actionMaterial_Selection")

        self.actionGameObjectClass_Selection = self.createAction("&Game Object Class Preview Window",  self.toggleGameObjectViewWindow,  "Ctrl+G",  "multirow.png",  "GameObjectClass Preview")
        self.actionGameObjectClass_Selection.setObjectName("actionObject_Selection")

        self.actionConsole_Window = self.createAction("&Console Window",  self.toggleConsoleWindow,  "Alt+C",  "console.png",  "Console Window")
        self.actionConsole_Window.setObjectName("actionConsole_Window")
        
        self.actionTerrainTools_Window = self.createAction("&Terrain Tools",  self.toggleTerrainToolsWindow,  "Alt+T",  "terrain_small.png",  "Console Window")
        self.actionTerrainTools_Window.setObjectName("actionTerrainTools_Window")
        
        self.actionToggleViewportGrid = self.createAction("&Toggle Grid",  self.toggleViewportGrid,  "Alt+G",  "console.png",  "Toggle Viewport Grid")
        self.actionToggleViewportGrid.setObjectName("actionToggleViewportGrid")

#####################################
#####################################


        self.menuFile.addAction(self.actionNeu)
        self.menuFile.addAction(self.actionOpen)
        self.menuFile.addAction(self.actionSave)
        self.menuFile.addAction(self.actionRunModule)
        self.menuFile.addAction(self.actionClose)

        self.menuEdit.addAction(self.actionSelect)
        self.menuEdit.addAction(self.actionMove)
        self.menuEdit.addAction(self.actionRotate)
        self.menuEdit.addAction(self.actionScale)
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.actionDelete)
        self.menuEdit.addAction(self.actionCopy)
        self.menuEdit.addAction(self.actionCut)
        self.menuEdit.addAction(self.actionPaste)
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.actionOneClickEntityPlacement)
        

        self.menuView.addAction(self.actionSceneExplorer)
        self.menuView.addAction(self.actionModuleDirView)
        self.menuView.addAction(self.actionPreferences)
        self.menuView.addAction(self.actionProperty_Window)
        self.menuView.addAction(self.actionObject_Selection)
        self.menuView.addAction(self.actionMaterial_Selection)
        self.menuView.addAction(self.actionGameObjectClass_Selection)
        self.menuView.addAction(self.actionConsole_Window)
        self.menuView.addAction(self.actionTerrainTools_Window)
        self.menuView.addAction(self.actionToggleViewportGrid)
        
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())
        self.menubar.addAction(self.menuView.menuAction())

        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)

    def retranslateUi(self):
        self.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "File", None, QtGui.QApplication.UnicodeUTF8))
        self.menuEdit.setTitle(QtGui.QApplication.translate("MainWindow", "Edit", None, QtGui.QApplication.UnicodeUTF8))
        self.menuView.setTitle(QtGui.QApplication.translate("MainWindow", "View", None, QtGui.QApplication.UnicodeUTF8))
        self.actionNeu.setText(QtGui.QApplication.translate("MainWindow", "New Module", None, QtGui.QApplication.UnicodeUTF8))
        self.actionMove.setText(QtGui.QApplication.translate("MainWindow", "Move", None, QtGui.QApplication.UnicodeUTF8))
        self.actionRotate.setText(QtGui.QApplication.translate("MainWindow", "Rotate", None, QtGui.QApplication.UnicodeUTF8))
        self.actionSceneExplorer.setText(QtGui.QApplication.translate("MainWindow", "Module Explorer", None, QtGui.QApplication.UnicodeUTF8))
        self.actionPreferences.setText(QtGui.QApplication.translate("MainWindow", "Preferences", None, QtGui.QApplication.UnicodeUTF8))
        self.actionProperty_Window.setText(QtGui.QApplication.translate("MainWindow", "Property Window", None, QtGui.QApplication.UnicodeUTF8))
        self.actionObject_Selection.setText(QtGui.QApplication.translate("MainWindow", "Object Selection", None, QtGui.QApplication.UnicodeUTF8))
        self.actionClose.setText(QtGui.QApplication.translate("MainWindow", "Quit", None, QtGui.QApplication.UnicodeUTF8))
        self.actionConsole_Window.setText(QtGui.QApplication.translate("MainWindow", "Console Window", None, QtGui.QApplication.UnicodeUTF8))

    def setupOgre(self, pluginCfgPath="./Plugins.cfg", ogreCfgPath="./ogre.cfg", logPath="./ogre.log"):
        if platform.system() == "Windows":
            pluginCfgPath="./Plugins-windows.cfg"
        else:
            pluginCfgPath="./Plugins-linux.cfg"

        root = og.Root(pluginCfgPath, ogreCfgPath, logPath)
        self.ogreRoot = root

        if  not self.ogreRoot.restoreConfig() and not self.ogreRoot.showConfigDialog():
            sys.exit('Quit from Config Dialog')

        root.initialise(False)

        self.pivotRenderQueueListener = PivotRenderQueueListener()
        self.OgreMainWinSceneMgr = self.ogreRoot.createSceneManager(og.ST_GENERIC, "OgreMainWinSceneMgr")
        self.OgreMainWinSceneMgr.ambientLight = og.ColourValue(4, 4, 4)
        self.OgreMainWinSceneMgr.addRenderQueueListener(self.pivotRenderQueueListener)
        
        self.moduleName = ""
        self.myTerrainManager = MyTerrainManager(self.OgreMainWinSceneMgr)
        self.moduleManager = ModuleManager(self.ogreRoot,  self.OgreMainWinSceneMgr)
        self.moduleManager.myTerrainManager = self.myTerrainManager
        self.gocManager = self.moduleManager.gocManager
        
        self.ogreMainWindow = OgreMainWindow.OgreMainWindow(self.moduleManager,  root,  self.OgreMainWinSceneMgr,  self)
        self.gridlayout.addWidget(self.ogreMainWindow,0,0,1,1)
        self.hboxlayout.addLayout(self.gridlayout)
        self.setCentralWidget(self.centralwidget)
        
        self.myTerrainManager.ogreMainWindow = self.ogreMainWindow
        
        oglog = og.LogManager.getSingleton().getDefaultLog()
        oglog.addListener(self.consoleWindow.lockenLog)

    def finishEditorSetup(self):
        if not self.editorSetupFinished:
            og.ResourceGroupManager.getSingleton().addResourceLocation("./media", "FileSystem", "General", False)
            og.ResourceGroupManager.getSingleton().initialiseAllResourceGroups()

            self.moduleManager.pivot = Pivot(self.OgreMainWinSceneMgr)
            self.moduleManager.pivot.hide()
            self.editorSetupFinished = True
        
    def update(self):
        self.ogreRoot.renderOneFrame()
        if platform.system() == "Linux":
            self.ogreMainWindow.updateRenderWindow()
            self.modelSelectionDialog.updateRenderWindow()
            self.materialSelectionDialog.updateRenderWindow()

    def actionOpenSlot(self):
        self.finishEditorSetup()
        self.moduleManager.openLoadModuleDialog()

    def actionNewSlot(self):
        newModuleWiz = NewModuleWizard(self.moduleManager, self)
        newModuleWiz.exec_()
        return
        
    def actionSaveSlot(self):
        self.moduleManager.save()
        
    def actionRunModuleSlot(self):
        self.moduleManager.save()
        if platform.system() == "Windows":
            workingDir = self.prefDialog.moduleCfgPath.replace("/modules/modules.cfg", "")
            executable = os.path.join(workingDir, "Rastullah.exe")
            executable = executable.replace("/",  "\\")
            if os.path.isfile(executable):
                subprocess.Popen([executable, "--module", self.moduleManager.mainModule.name], 0, None, None, None, None, None, False, False, workingDir)

        
    def actionQuitSlot(self):
        self.close()

    def actionDeleteSlot(self):
        self.moduleManager.deleteObjects()

    def actionCopySlot(self):
        self.moduleManager.copyObjects()

    def actionCutSlot(self):
        self.moduleManager.cutObjects()

    def actionPasteSlot(self):
        self.moduleManager.pasteObjects(self.ogreMainWindow.getCameraToViewportRay())

    def actionSelectSlot(self):
        self.moduleManager.pivot.hide()

    def actionMoveSlot(self):
        self.moduleManager.pivot.setMoveMode()

    def actionRotateSlot(self):
        self.moduleManager.pivot.setRotateMode()

    def actionScaleSlot(self):
        self.moduleManager.pivot.setScaleMode()

    def actionOneClickEntityPlacementSlot(self):
        self.moduleManager.setOneClickEntityPlacement(self.actionOneClickEntityPlacement.isChecked())

    def togglePreferencesWindow(self):
        if self.prefDialog.isHidden():
            self.prefDialog.show()
        else:
            self.prefDialog.hide()

    def toggleModelPreviewWindow(self):
        if self.modelSelectionDock.isHidden():
            self.modelSelectionDock.show()
        else:
            self.modelSelectionDock.hide()
    
    def toggleMaterialPreviewWindow(self):
        if self.materialSelectionDock.isHidden():
            self.materialSelectionDock.show()
        else:
            self.materialSelectionDock.hide()

    def toggleGameObjectViewWindow(self):
        if self.gameObjectClassViewDock.isHidden():
            self.gameObjectClassViewDock.show()
        else:
            self.gameObjectClassViewDock.hide()

    def toggleModuleExplorer(self):
        if self.moduleExplorerDock.isHidden():
            self.moduleExplorerDock.show()
        else:
            self.moduleExplorerDock.hide()
            
    def toggleModuleDirView(self):
        if self.moduleDirectoryViewDock.isHidden():
            self.moduleDirectoryViewDock.show()
        else:
            self.moduleDirectoryViewDock.hide()

    def togglePropertyWindow(self):
        if self.propertyDock.isHidden():
            self.propertyDock.show()
        else:
            self.propertyDock.hide()

    def toggleConsoleWindow(self):
        if self.consoleDock.isHidden():
            self.consoleDock.show()
        else:
            self.consoleDock.hide()
            
    def toggleTerrainToolsWindow(self):
        if self.myTerrainManagerDock.isHidden():
            self.myTerrainManagerDock.show()
        else:
            self.myTerrainManagerDock.hide()

    def toggleViewportGrid(self):
        self.ogreMainWindow.toggleViewportGrid()

    def createDockWindows(self):
        self.modelSelectionDock = QtGui.QDockWidget(self.tr("Models"), self)
        self.modelSelectionDock.setObjectName("ModelSelectionDockWindow")
        self.modelSelectionDock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.modelSelectionDock.setWidget(self.modelSelectionDialog)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.modelSelectionDock)
        
        self.materialSelectionDock = QtGui.QDockWidget(self.tr("Materials"), self)
        self.materialSelectionDock.setObjectName("MaterialSelectionDockWindow")
        self.materialSelectionDock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.materialSelectionDock.setWidget(self.materialSelectionDialog)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.materialSelectionDock)
        self.tabifyDockWidget(self.modelSelectionDock, self.materialSelectionDock)
        
        self.gameObjectClassViewDock = QtGui.QDockWidget(self.tr("GameObjectClasses"), self)
        self.gameObjectClassViewDock.setObjectName("GameObjectClassView")
        self.gameObjectClassViewDock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.gameObjectClassViewDock.setWidget(self.gameObjectClassView)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.gameObjectClassViewDock)        
        self.tabifyDockWidget(self.modelSelectionDock, self.gameObjectClassViewDock)
        
        self.propertyDock = QtGui.QDockWidget(self.tr("Properties"), self)
        self.propertyDock.setObjectName("PropertyDockWindow")
        self.propertyDock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.propertyDock.setWidget(self.objectPropertyWin)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.propertyDock)

        self.moduleExplorerDock = QtGui.QDockWidget(self.tr("Module Explorer"), self)
        self.moduleExplorerDock.setObjectName("ModuleExplorerDockWindow")
        self.moduleExplorerDock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.moduleExplorerDock.setWidget(self.moduleExplorerWin)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.moduleExplorerDock)
        self.tabifyDockWidget(self.moduleExplorerDock, self.propertyDock)
        
        self.moduleDirectoryViewDock = QtGui.QDockWidget(self.tr("Module Directory View"), self)
        self.moduleDirectoryViewDock.setObjectName("ModuleDirectoryViewDockWindow")
        self.moduleDirectoryViewDock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea | QtCore.Qt.TopDockWidgetArea | QtCore.Qt.BottomDockWidgetArea)
        self.moduleDirectoryViewDock.setWidget(self.moduleDirectoryViewWin)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.moduleDirectoryViewDock)
        
        self.myTerrainManagerDock = self.myTerrainManager.getDockWidget(self)
        
        self.consoleDock = QtGui.QDockWidget(self.tr("Console"), self)
        self.consoleDock.setObjectName("ConsoleDockWindow")
        self.consoleDock.setAllowedAreas(QtCore.Qt.BottomDockWidgetArea | QtCore.Qt.TopDockWidgetArea)
        self.consoleDock.setWidget(self.consoleWindow)
        self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, self.consoleDock)

        self.fileToolBar = self.addToolBar("File Toolbar")
        self.fileToolBar.setObjectName("FileToolBar")
        self.fileToolBar.setAllowedAreas(QtCore.Qt.TopToolBarArea | QtCore.Qt.BottomToolBarArea)
        self.fileToolBar.addAction(self.actionNeu)
        self.fileToolBar.addAction(self.actionOpen)
        self.fileToolBar.addAction(self.actionSave)
        self.fileToolBar.addAction(self.actionRunModule)
        self.fileToolBar.addAction(self.actionClose)
        self.addToolBar(QtCore.Qt.TopToolBarArea, self.fileToolBar)

        self.moveToolBar = self.addToolBar("Transformation Bar")
        self.moveToolBar.setObjectName("TransformationBar")
        self.moveToolBar.setAllowedAreas(QtCore.Qt.TopToolBarArea | QtCore.Qt.BottomToolBarArea)
        self.moveToolBar.addAction(self.actionSelect)
        self.moveToolBar.addAction(self.actionMove)
        self.moveToolBar.addAction(self.actionRotate)
        self.moveToolBar.addAction(self.actionScale)
        self.addToolBar(QtCore.Qt.TopToolBarArea, self.moveToolBar)

    def keyPressEvent(self,  event):
        if not event.isAutoRepeat():
            self.ogreMainWindow.keyPressEvent(event)

    def keyReleaseEvent(self,  event):
        if not event.isAutoRepeat():
            self.ogreMainWindow.keyReleaseEvent(event)
        pass

    def onContextMenuCallback(self, actions, menus):
        menu = QMenu("My Menu!!")
        menu.addAction(self.actionDelete)
        menu.addAction(self.actionCopy)
        menu.addAction(self.actionCut)
        menu.addAction(self.actionPaste)
        menu.addSeparator()
        
        for m in menus:
            menu.addMenu(m)
        for a in actions:
            menu.addAction(a)

        menu.exec_(QCursor.pos())

    def connectActionButtons(self):
        pass

    def saveOnClose(self):
#        reply = QtGui.QMessageBox.question(self,  "Rastullahs Lockenwickler - Unsaved Chages",  "Save unsaved changes?",  QtGui.QMessageBox.Yes|QtGui.QMessageBox.No|QtGui.QMessageBox.Cancel)
#        if reply == QtGui.QMessageBox.Cancel:
#            return False
#        if reply == QtGui.QMessageBox.Yes:
#            print""
#            #TODO: implement save here
        return True

    def closeEvent(self,  event):
        if self.saveOnClose():
            settings = QtCore.QSettings()
            settings.setValue("Preferences/moduleCfgPath", QtCore.QVariant(self.prefDialog.lineEdit.text()))
            settings.setValue("MainWindow/Geometry",  QtCore.QVariant(self.saveGeometry()))
            settings.setValue("MainWIndow/DockWindows",  QtCore.QVariant(self.saveState()))
            settings.setValue("Preferences/externalEditorPath",  QtCore.QVariant(self.prefDialog.externalTextAppLineEdit.text()))
            #self.ogreRoot.shutdown()
        else:
            event.ignore()