#!/usr/bin/env python
# iaC.py - A Qt4 Calculator example

import sys
from math import pi
from PyQt4 import QtCore, QtGui
from iac_ui import Ui_mainWindow
from filterEdit_ui import Ui_filterEdit


class iaC(QtGui.QMainWindow):
    sequenceNumber = 1
    windowList = []

    @QtCore.pyqtSignature("")
    def __init__(self, fileName=None, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.init()
        if fileName:
            self.loadFile(fileName)
        else:
            self.setCurrentFile(QtCore.QString())

        self.ui = Ui_mainWindow()
        self.ui.setupUi(self)


        if self.ui.listWidget.count() < 1:
            self.ui.deleteButton.setEnabled(False)
        else:
            self.ui.deleteButton.setEnabled(True)

        if self.ui.listWidget.count() < 2: 
            self.ui.upButton.setEnabled(False)
            self.ui.downButton.setEnabled(False)
        else:
            self.ui.downButton.setEnabled(True)
            self.ui.upButton.setEnabled(True)

    def closeEvent(self, event):
        if self.maybeSave():
            self.writeSettings()
            event.accept()
        else:
            event.ignore()

    @QtCore.pyqtSignature("")
    def newFile(self):
        other = MainWindow()
        MainWindow.windowList.append(other)
        other.move(self.x()+40, self.y()+40)
        other.show()

    @QtCore.pyqtSignature("")
    def open(self):
        fileName = QtGui.QFileDialog.getOpenFileName(self)
        if not fileName.isEmpty():
            existing = self.findMainWindow(fileName)
            if existing:
                existing.show()
                existing.raise_()
                existing.activateWindow()
                return

            if self.isUntitled and self.textBrowser.document().isEmpty() and not self.isWindowModified():
                self.loadFile(fileName)
            else:
                other = MainWindow(fileName)
                if other.isUntitled:
                    del other
                    return

                MainWindow.windowList.append(other)
                other.move(self.x() + 40, self.y() + 40)
                other.show()

    @QtCore.pyqtSignature("")
    def save(self):
        if self.isUntitled:
            return self.saveAs()
        else:
            return self.saveFile(self.curFile)

    @QtCore.pyqtSignature("")
    def saveAs(self):
        fileName = QtGui.QFileDialog.getSaveFileName(self, self.tr("Save As"), 
                                                     self.curFile)
        if fileName.isEmpty():
            return False

        return self.saveFile(fileName)

    @QtCore.pyqtSignature("")
    def about(self):
        QtGui.QMessageBox.about(self, self.tr("About SDI"),
            self.tr("The <b>SDI</b> example demonstrates how to write single "
                    "document interface applications using Qt."))

    @QtCore.pyqtSignature("")
    def documentWasModified(self):
        self.setWindowModified(True)


    @QtCore.pyqtSignature("")
    def init(self):
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.isUntitled = True
        self.textBrowser = QtGui.QTextBrowser()
        self.setCentralWidget(self.textBrowser)

        #self.createActions()
        #self.createMenus()
        #self.createToolBars()
        #self.createStatusBar()

        #self.readSettings()

        self.connect(self.textBrowser.document(), QtCore.SIGNAL("contentsChanged()"), self.documentWasModified)

    @QtCore.pyqtSignature("")
    def on_actionOpen_triggered(self):
        print "opening"
        self.open()

    @QtCore.pyqtSignature("")
    def on_addButton_clicked(self): 
        text = self.ui.lineEdit.text()
        # if the lineedit is not empty,
        if len(text):
            self.ui.listWidget.addItem(text)
            self.ui.lineEdit.clear()
            self.ui.deleteButton.setEnabled(True)
        # Check if the list has less than 2 items - if yes, disable the up/down buttons.
        if self.ui.listWidget.count() < 2: 
            self.ui.upButton.setEnabled(False)
            self.ui.downButton.setEnabled(False)
        else:
            self.ui.downButton.setEnabled(True)
            self.ui.upButton.setEnabled(True)

    @QtCore.pyqtSignature("")
    def on_deleteButton_clicked(self): 
        self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())
        if self.ui.listWidget.count() < 1:
            self.ui.deleteButton.setEnabled(False)
        else:
            self.ui.deleteButton.setEnabled(True)

        if self.ui.listWidget.count() < 2: 
            self.ui.upButton.setEnabled(False)
            self.ui.downButton.setEnabled(False)
        else:
            self.ui.downButton.setEnabled(True)
            self.ui.upButton.setEnabled(True)

    @QtCore.pyqtSignature("")
    def on_editButton_clicked(self):
        win = filterEdit()
        #win.setModal(true)
        win.show()

    @QtCore.pyqtSignature("")
    def createStatusBar(self):
        self.statusBar().showMessage(self.tr("Ready"))

    @QtCore.pyqtSignature("")
    def readSettings(self):
        settings = QtCore.QSettings("Trolltech", "SDI Example")
        pos = settings.value("pos", QtCore.QVariant(QtCore.QPoint(200, 200))).toPoint()
        size = settings.value("size", QtCore.QVariant(QtCore.QSize(400, 400))).toSize()
        self.resize(size)
        self.move(pos)

    @QtCore.pyqtSignature("")
    def writeSettings(self):
        settings = QtCore.QSettings("Trolltech", "SDI Example")
        settings.setValue("pos", QtCore.QVariant(self.pos()))
        settings.setValue("size", QtCore.QVariant(self.size()))

    @QtCore.pyqtSignature("")
    def maybeSave(self):
        if self.textBrowser.document().isModified():
            ret = QtGui.QMessageBox.warning(self, self.tr("SDI"),
                    self.tr("The document has been modified.\n"
                            "Do you want to save your changes?"),
                    QtGui.QMessageBox.Yes | QtGui.QMessageBox.Default,
                    QtGui.QMessageBox.No,
                    QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Escape)
            if ret == QtGui.QMessageBox.Yes:
                return save()
            elif ret == QtGui.QMessageBox.Cancel:
                return False
        return True

    @QtCore.pyqtSignature("")
    def loadFile(self, fileName):
        file = QtCore.QFile(fileName)
        if not file.open( QtCore.QFile.ReadOnly | QtCore.QFile.Text):
            QtGui.QMessageBox.warning(self, self.tr("SDI"),
                    self.tr("Cannot read file %1:\n%2.").arg(fileName).arg(file.errorString()))
            return

        instr = QtCore.QTextStream(file)
        QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
        self.textBrowser.setPlainText(instr.readAll())
        QtGui.QApplication.restoreOverrideCursor()

        self.setCurrentFile(fileName)
        self.statusBar().showMessage(self.tr("File loaded"), 2000)

    @QtCore.pyqtSignature("")
    def saveFile(self, fileName):
        file = QtCore.QFile(fileName)
        if not file.open( QtCore.QFile.WriteOnly | QtCore.QFile.Text):
            QtGui.QMessageBox.warning(self, self.tr("SDI"),
                    self.tr("Cannot write file %1:\n%2.").arg(fileName).arg(file.errorString()))
            return False

        outstr = QtCore.QTextStream(file)
        QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
        outstr << self.textBrowser.toPlainText()
        QtGui.QApplication.restoreOverrideCursor()

        self.setCurrentFile(fileName)
        self.statusBar().showMessage(self.tr("File saved"), 2000)
        return True

    @QtCore.pyqtSignature("")
    def setCurrentFile(self, fileName):
        self.isUntitled = fileName.isEmpty()
        if self.isUntitled:
            self.curFile = self.tr("document%1.txt").arg(iaC.sequenceNumber)
            iaC.sequenceNumber += 1
        else:
            self.curFile = QtCore.QFileInfo(fileName).canonicalFilePath()

        self.textBrowser.document().setModified(False)
        self.setWindowModified(False)
        self.setWindowTitle(self.tr("%1[*] - %2")
            .arg(self.strippedName(self.curFile)).arg(self.tr("SDI")))

    @QtCore.pyqtSignature("")
    def strippedName(self, fullFileName):
        return QtCore.QFileInfo(fullFileName).fileName()

    @QtCore.pyqtSignature("")
    def findMainWindow(self, fileName):
        canonicalFilePath = QtCore.QFileInfo(fileName).canonicalFilePath()

        for widget in QtGui.qApp.topLevelWidgets():
            if isinstance(widget, iaC) and widget.curFile == canonicalFilePath:
                return widget
        return 0




class filterEdit(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.ui = Ui_filterEdit()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win = iaC()
    win.show()
    sys.exit(app.exec_())