class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle("offset surface visualization")

        self.last_dir = '.'  # the last directory read from.

        mainFrame = QtGui.QFrame(self)

        self.scene = Scene()
        self.manip = OffsetManipulator()
        self.scene.context = self.manip
        self.glWidget = GLWidget(self.scene)

        mainLayout = QtGui.QVBoxLayout(mainFrame)
        mainLayout.addWidget(self.glWidget)
        mainLayout.setStretch(0, 1)

        fileMenu = self.menuBar().addMenu("File")
        open_obj = QtGui.QAction("Open &Obj",
                                 self,
                                 statusTip="Select OBJ file to load",
                                 triggered=self.spawnOpenFileDlg,
                                 shortcut="Ctrl+o")
        clear = QtGui.QAction("&Clear",
                              self,
                              statusTip="Clear the scene",
                              triggered=self.clear,
                              shortcut="Ctrl+x")
        fileMenu.addAction(open_obj)
        fileMenu.addAction(clear)

        viewMenu = self.menuBar().addMenu("View")
        toggle_cam_widget = QtGui.QAction(
            "Show Camera Movement Widgets",
            self,
            statusTip=
            "Control whether manipulation icons appear while the view is being manipulated",
            triggered=self.toggle_cam_widgets)
        toggle_cam_widget.setCheckable(True)
        toggle_cam_widget.setChecked(True)
        viewMenu.addAction(toggle_cam_widget)

        self.setCentralWidget(mainFrame)

    def clear(self):
        self.glWidget.clear_nodes()
        self.manip.clear_object()

    def toggle_cam_widgets(self, state):
        '''Toggles the display of camera control widgets on the camera control'''
        self.glWidget.toggle_cam_control_widget_display(state)

    def spawnOpenFileDlg(self):
        fileName = QtGui.QFileDialog.getOpenFileName(self, "Read OBJ file",
                                                     self.last_dir,
                                                     "OBJ files (*.obj)")
        if (fileName):
            self.clear()
            self.glWidget.addObjToScene(fileName, selectable=False)
            self.manip.set_object(self.scene.nodes[-1].drawable)
            path, fName = os.path.split(str(fileName))
            self.last_dir = path