source: orange-bioinformatics/widgets/prototypes/OWDataFilesSave.py @ 1039:7ca5be458a9a

Revision 1039:7ca5be458a9a, 4.7 KB checked in by blaz <blaz.zupan@…>, 4 years ago (diff)

remove category in header

Line 
1"""
2<name>Save Data Files</name>
3<description>Saves data to selected directory.</description>
4<icon>icons/DataFilesSave.png</icon>
5<priority>1055</priority>
6<contact>Peter Juvan (peter.juvan@fri.uni-lj.si)</contact>
7"""
8
9from OWWidget import *
10import OWGUI
11import os, orange
12from OWDataFiles import DataFiles
13
14
15class OWDataFilesSave(OWWidget):
16    settingsList  = ["recentDirs", "selectedDirName"]
17
18    def __init__(self, parent=None, signalManager = None):
19        OWWidget.__init__(self, parent, signalManager, "Save Data Files", wantMainArea = 0, resizingEnabled = 1)
20
21        self.inputs = [("Structured Data", DataFiles, self.structuredData, Default)]
22        self.outputs = []
23        self.dataStructure = None
24
25        # Settings
26        self.recentDirs=[]
27        self.selectedDirName = "(none)"
28        self.loadSettings()
29
30        # GUI
31        rfbox = OWGUI.widgetBox(self.controlArea, "Directory", orientation="horizontal", addSpace = True)
32        self.dircombo = QComboBox(rfbox)
33        rfbox.layout().addWidget(self.dircombo)
34        browse = OWGUI.button(rfbox, self, '&...', callback = self.browseDirectory, disabled=0)
35        browse.setMaximumWidth(25)
36        # info
37        box = OWGUI.widgetBox(self.controlArea, "Info", addSpace = True)
38        self.infoa = OWGUI.widgetLabel(box, 'No data on input.')
39        # Output
40        box = OWGUI.widgetBox(self.controlArea, "Output", addSpace = True)
41        self.save = OWGUI.button(box, self, '&Save', callback = self.saveData, disabled=1)
42        self.adjustSize()
43           
44        # initial settings           
45        self.recentDirs=filter(os.path.exists, self.recentDirs)
46        self.setDirlist()
47        self.dircombo.setCurrentIndex(0)
48        self.resize(300,self.height())
49
50    def structuredData(self, data):
51        self.dataStructure = data
52        self.save.setDisabled(self.dataStructure == None)
53        if self.dataStructure == None:
54            self.infoa.setText("No data on input.")
55        else:
56            self.infoa.setText("New data on input.")
57           
58    def saveData(self):
59        # Saves data into root directory
60        rootDir = self.recentDirs[self.dircombo.currentIndex()]
61        if rootDir == "(none)" or self.dataStructure == None:
62            self.infoa.setText("Select a directory first.")
63            return
64        # count number of files to save
65        n = sum([sum([1 for d in ds]) for (sdn, ds) in self.dataStructure]) 
66        if n == 0:
67            self.infoa.setText("No files to save.")
68            return
69        pbStep = 100./n
70        self.progressBarInit()
71
72        for (subDirName, datasets) in self.dataStructure:
73            targetDir = os.path.join(rootDir, subDirName)
74            if not os.path.exists(targetDir):
75                try:
76                    os.mkdir(targetDir)
77                except:
78                    self.infoa.setText("Could not create target directory: " + targetDir)
79                    self.error("Could not create target directory: " + targetDir)
80
81            for data in datasets:
82                fname = os.path.join(targetDir, data.name + '.tab')
83                orange.saveTabDelimited(fname, data)
84                self.progressBarAdvance(pbStep)
85        self.infoa.setText("Data saved to %s" % rootDir)
86        self.progressBarFinished()
87
88    def browseDirectory(self):
89        # displays a file dialog and selects a directory
90        if len(self.recentDirs):
91            startdir=self.recentDirs[0]
92        else:
93            startdir ="."
94        dirname=str(QFileDialog.getExistingDirectory(self, 'Select Directory to Save into', startdir, QFileDialog.ShowDirsOnly))
95        if len(dirname):
96            self.addDirToList(dirname)
97
98    def setDirlist(self):
99        self.dircombo.clear()
100        if len(self.recentDirs):
101            for dir in self.recentDirs:
102                ### leave out the path
103                ##(upperdir,dirname)=os.path.split(dir)
104                self.dircombo.insertItem(self.dircombo.count(), dir)
105        else:
106            self.dircombo.insertItem(0, "(none)")
107
108    def addDirToList(self, dir):
109        # Add a directory to the start of the file list.
110        # If it exists, move it to the start of the list
111        dir = os.path.normpath(dir)
112        if dir in self.recentDirs:
113            self.recentDirs.remove(dir)
114        self.recentDirs.insert(0, str(dir))
115        self.setDirlist()
116        self.selectedDirName = dir
117
118    def selectDir(self, n):
119        # called when user makes a selection from the drop-down menu
120        if self.recentDirs:
121            self.loadData(self.recentDirs[n])
122            self.addDirToList(self.recentDirs[n])
123        else:
124            self.loadData("(none)")
125
126
127if __name__=="__main__":
128    a=QApplication(sys.argv)
129    ow=OWDataFilesSave()
130    ow.show()
131    a.exec_()
132    ow.saveSettings()
Note: See TracBrowser for help on using the repository browser.