#!/usr/bin/env python

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from TreeView import View
from TreeModel import Model
import ConfigParser,  os.path
from TreeItem import Item

class MainWindow(QMainWindow):

    def __init__(self,version='Unknown', parent=None):
        super(MainWindow, self).__init__(parent)
        self.__version__ = version
        
        fileQuitAction = self.createAction("&Quit", self.quitApp, "Ctrl+Q", "filequit", "Close the application")
        self.addDiskAction = self.createAction("&Add", self.addDiskMenu, "Ctrl+A", "add disk", "Add a new disk")
        self.removeDiskAction = self.createAction("&Remove", self.removeDiskMenu, "Ctrl+R", "remove disk", "Remove an existant disk")
        
        # Menu bar
        self.fileMenu = self.menuBar().addMenu("&File")
        self.fileMenu.addAction(fileQuitAction)
        self.runMenu = self.menuBar().addMenu("&Options")
        self.runMenu.addAction(self.addDiskAction)
        self.runMenu.addAction(self.removeDiskAction)

        view = QTreeView()
        self.model = Model()
        view.setModel(self.model)
        self.setCentralWidget(view)
        
        
        self.config = ConfigParser.ConfigParser()
        if os.path.exists(os.path.join(os.environ['HOME'], '.diskinfo.ini')):
            self.config.read(os.path.join(os.environ['HOME'], '.diskinfo.ini'))
            if self.config.has_section('DISCS'):
                for disk in self.config.options('DISCS'):
                    self.addDisk(disk, self.config.get('DISCS', disk))
        if not self.config.has_section("DISCS"):
            self.config.add_section("DISCS")
        
    def addDiskMenu(self):
        path = QFileDialog.getExistingDirectory(self, "Choose disk/folder","/home", QFileDialog.ShowDirsOnly)
        if path:
            name= os.path.basename(os.path.abspath(str(path)))
            self.addDisk(name, str(path))
    
    def addDisk(self, name, path):
        self.model.rootItem.appendChild(Item([name, path, 0], self.model.rootItem))
        print "added: ", name, path
        if not self.config.has_option('DISCS', name):
            self.config.set('DISCS', name, path)
          
    def createAction(self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"):
        action = QAction(text, self)
        if icon is not None:
            action.setIcon(QIcon(":/%s.png" % 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, SIGNAL(signal), slot)
        if checkable:
            action.setCheckable(True)
        return action
        
    def removeDisk(self):
        pass
    def removeDiskMenu(self):
        pass
        
    def quitApp(self):
        file = open(os.path.join(os.environ['HOME'], '.diskinfo.ini'), 'w')
        self.config.write(file)
        file.close()
        print "wrote file ", os.path.join(os.environ['HOME'], '.diskinfo.ini')
        self.close()
        
