Package mcbase :: Package widgets :: Module mcfiledialog
[hide private]
[frames] | no frames]

Source Code for Module mcbase.widgets.mcfiledialog

  1  # -*- coding: utf-8 -*- 
  2   
  3  ########################################################################## 
  4  # mcfiledialog.py 
  5  # 
  6  # Non blocking file dialog for MOCOP project. 
  7  # 
  8  # (C) 2009 Likya Software 
  9  ########################################################################## 
 10   
 11  import os, sys 
 12   
 13  from twisted.internet import defer 
 14  from PyQt4.Qt import * 
15 16 17 -class MCFileDialog(QFileDialog):
18
19 - def __init__(self, *args):
20 ''' 21 File Dialog nesnesi oluşturur. 22 ''' 23 QFileDialog.__init__(self, *args) 24 25 self.deferer = defer.Deferred()
26
27 - def userFolders(self):
28 ''' 29 Folders to be listed in sidebar. 30 ''' 31 sidebarUrls = self.sidebarUrls() 32 33 # We add folders like "My Documents", "Desktop" 34 if sys.platform.startswith('win'): 35 36 try: 37 import winshell 38 39 desktopUrl = 'file:///%s' % winshell.desktop() 40 documentsUrl = 'file:///%s' % winshell.my_documents() 41 42 sidebarUrls.append(QUrl(desktopUrl)) 43 sidebarUrls.append(QUrl(documentsUrl)) 44 except: 45 pass 46 47 else: 48 desktopUrl = 'file://%s' % os.path.join(os.getenv('HOME'), 'Desktop') 49 sidebarUrls.append(QUrl(desktopUrl)) 50 51 return sidebarUrls
52
53 - def desktopFolder(self):
54 ''' 55 Returns the desktop folder of the current user. 56 ''' 57 desktopUrl = '' 58 59 # We add folders like "My Documents", "Desktop" 60 if sys.platform.startswith('win'): 61 62 try: 63 import winshell 64 desktopUrl = winshell.desktop() 65 except: 66 pass 67 68 else: 69 desktopUrl = os.path.join(os.getenv('HOME'), 'Desktop') 70 71 return desktopUrl
72
73 - def fileSelected(self, selectedFiles=None):
74 ''' 75 Fires the deferred with the selected files. If no 76 file is selected, fires the deferred with an empty 77 string. 78 ''' 79 if selectedFiles is not None and len(selectedFiles) == 1: 80 selectedFile = unicode(selectedFiles[0]) 81 self.deferer.callback(selectedFile) 82 83 else: 84 self.deferer.callback('')
85 86 @staticmethod
87 - def getSaveFileName(parent, caption, directory, dirFilter, onlyDirs=False):
88 ''' 89 Opens the file save dialog. 90 ''' 91 fileDialog = MCFileDialog(parent, caption, directory, dirFilter) 92 fileDialog.setModal(True) 93 fileDialog.setAcceptMode(QFileDialog.AcceptSave) 94 fileDialog.setSidebarUrls(fileDialog.userFolders()) 95 96 if onlyDirs: 97 fileDialog.setFileMode(QFileDialog.Directory) 98 99 if not directory: 100 fileDialog.setDirectory(fileDialog.desktopFolder()) 101 102 fileDialog.show() 103 104 fileDialog.connect(fileDialog, SIGNAL('filesSelected(const QStringList &)'), fileDialog.fileSelected) 105 fileDialog.connect(fileDialog, SIGNAL('rejected()'), fileDialog.fileSelected) 106 107 return fileDialog.deferer
108 109 @staticmethod
110 - def getOpenFileName(parent, caption, directory, dirFilter):
111 ''' 112 Opens the file open dialog. 113 ''' 114 fileDialog = MCFileDialog(parent, caption, directory, dirFilter) 115 fileDialog.setModal(True) 116 fileDialog.setFileMode(QFileDialog.ExistingFile) 117 fileDialog.setAcceptMode(QFileDialog.AcceptOpen) 118 fileDialog.setSidebarUrls(fileDialog.userFolders()) 119 120 if not directory: 121 fileDialog.setDirectory(fileDialog.desktopFolder()) 122 123 fileDialog.show() 124 125 fileDialog.connect(fileDialog, SIGNAL('filesSelected(const QStringList &)'), fileDialog.fileSelected) 126 fileDialog.connect(fileDialog, SIGNAL('rejected()'), fileDialog.fileSelected) 127 128 return fileDialog.deferer
129