aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/windows/baseWindow.py
blob: 2fc2b1359fc6a2eb59794b8316ba0bb1d39266d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
from PyQt5.QtCore import QDir
from PyQt5.QtWidgets import (QFileDialog, QMessageBox)

'''
Base Window is a rather abstract object containing the common methods of
all widgets.
As such, it does not have an init function and is meant to be inherited
by subsequent classes.
'''
class BaseWindowController(object):

    '''
    def setUpBaseWindowBehavior(self):
        self.w.bind("close", self.windowCloseCallback)
        if isinstance(self.w, vanilla.Sheet):
            self.w.bind("became key", self.windowSelectCallback)
            self.w.bind("resigned key", self.windowDeselectCallback)
        else:
            self.w.bind("became main", self.windowSelectCallback)
            self.w.bind("resigned main", self.windowDeselectCallback)

    def windowCloseCallback(self, sender):
        self.w.unbind("close", self.windowCloseCallback)
        if isinstance(self.w, vanilla.Sheet):
            self.w.unbind("became key", self.windowSelectCallback)
            self.w.unbind("resigned key", self.windowDeselectCallback)
        else:
            self.w.unbind("became main", self.windowSelectCallback)
            self.w.unbind("resigned main", self.windowDeselectCallback)

    def windowSelectCallback(self, sender):
        pass

    def windowDeselectCallback(self, sender):
        pass
    '''

    def startProgress(self, text="", tickCount=None):
        try:
            from defconQt.windows.progressWindow import ProgressWindow
        except:
            from progressWindow import ProgressWindow
        return ProgressWindow(text, tickCount, self.w)

    def showMessage(self, messageText, informativeText, callback=None):
        QMessageBox.information(self.w.activeWindow(), messageText, informativeText)
        #if callback is None:
        #    return 1
        #vanilla.dialogs.message(parentWindow=self.w.getNSWindow(), messageText=messageText, informativeText=informativeText, resultCallback=callback)

    def showAskYesNo(self, messageText, informativeText, callback=None):#
        result = QMessageBox.question(self.w.activeWindow(), messageText, informativeText, QMessageBox.Yes | QMessageBox.No)
        #vanilla.dialogs.askYesNo(parentWindow=self.w.getNSWindow(), messageText=messageText, informativeText=informativeText, resultCallback=callback)
        if callback is None:
            if result == QMessageBox.Yes:
                return 1
            else:
                return 0
        #    return alert._value

    def showGetFolder(self, callback=None):#
        directory = QFileDialog.getExistingDirectory(parent=self.w.activeWindow(), directory=QDir.currentPath())
        if callback is None:
            return directory
        #vanilla.dialogs.getFolder(parentWindow=self.w.getNSWindow(), resultCallback=callback)

    def showGetFile(self, fileTypes, callback, allowsMultipleSelection=False):
        # TODO: Mac OS sees UFO as file, make sure that this accepts it eveywhere
        # Note: fileTypes must follow QT convention e.g. "All Files (*);;Text Files (*.txt)"
        # Note#2: getOpenFileNames may pack in an array while getOpenFileName does not
        if allowsMultipleSelection: # why would you do this in a Font Editor?
            files = QFileDialog.getOpenFileNames(parent=self.w.activeWindow(), directory=QDir.currentPath(), filter=fileTypes)
        else:
            files = QFileDialog.getOpenFileName(parent=self.w.activeWindow(), directory=QDir.currentPath(), filter=fileTypes)
        #vanilla.dialogs.getFile(fileTypes=fileTypes, allowsMultipleSelection=allowsMultipleSelection,
        #    parentWindow=self.w.getNSWindow(), resultCallback=callback)

    def showPutFile(self, fileTypes, callback=None, fileName=None, directory=None, accessoryView=None):#
        # ! fileTypes

        # basic instance cannot put a default file name, use the base class
        #result = QFileDialog.getSaveFileName(parent=self.w, directory=directory, filter=fileTypes)
        # https://github.com/qtproject/qt/blob/98530cbc3a0bbb633bab96eebb535d7f92ecb1fa/src/gui/dialogs/qfiledialog.cpp#L1965
        dlg = QFileDialog(parent=self.w.activeWindow(), filter=fileTypes)
        dlg.setFileMode(QFileDialog.AnyFile)
        dlg.setAcceptMode(QFileDialog.AcceptSave)
        if directory: dlg.setDirectory(directory)
        if fileName: dlg.selectFile(fileName)
        if (dlg.exec_() == QDialog.Accepted):
            result = dialog.selectedFiles().value(0)
        if callback is None:
            return result
        '''
        if accessoryView is not None:
            w, h = accessoryView._posSize[2:]
            accessoryView._nsObject.setFrame_(((0, 0), (w, h)))
            accessoryView = accessoryView._nsObject
        vanilla.dialogs.putFile(fileTypes=fileTypes,
            parentWindow=self.w.getNSWindow(), resultCallback=callback, fileName=fileName, directory=directory, accessoryView=accessoryView)
        '''