source: orange/Orange/OrangeWidgets/Prototypes/OWSaveAssocRules.py @ 9671:a7b056375472

Revision 9671:a7b056375472, 3.7 KB checked in by anze <anze.staric@…>, 2 years ago (diff)

Moved orange to Orange (part 2)

Line 
1"""<name>Save Association Rules</name>
2"""
3
4from OWWidget import *
5import OWGUI
6
7import Orange
8from Orange import associate
9
10class OWSaveAssocRules(OWWidget):
11    settingsList = ["last_save_file", "filename_history"]
12    def __init__(self, parent=None, signalManager=None, name="Save Association Rules"):
13        OWWidget.__init__(self, parent, signalManager, name, wantMainArea=False)
14       
15        self.inputs = [("Association Rules", associate.AssociationRules, self.set_rules)]
16       
17        self.last_save_file = os.path.expanduser("~/orange_assoc_rules.pck")
18        self.filename_history = []
19        self.selected_file_index = 0
20       
21        self.loadSettings()
22       
23        #####
24        # GUI
25        #####
26        box = OWGUI.widgetBox(self.controlArea, "File",
27                              orientation="horizontal",
28                              addSpace=True)
29       
30        self.files_combo = OWGUI.comboBox(box, self, "selected_file_index",
31                                         items=[os.path.basename(f) for f in self.filename_history],
32                                         tooltip="Select a recently saved file",
33                                         callback=self.on_recent_selection)
34       
35        self.browse_button = OWGUI.button(box, self, "...",
36                                          tooltip="Browse local file system",
37                                          callback=self.browse)
38       
39        self.browse_button.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon))
40        self.browse_button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
41         
42        box = OWGUI.widgetBox(self.controlArea, "Save")
43        self.save_button = OWGUI.button(box, self, "Save current rules",
44                                       callback=self.save_rules,
45                                       autoDefault=True)
46       
47        self.save_button.setEnabled(False)
48       
49        OWGUI.rubber(self.controlArea)
50       
51        self.resize(200, 100)
52       
53        self.rules = None
54       
55    def on_recent_selection(self):
56        filename = self.filename_history[self.selected_file_index]
57        self.filename_history.pop(self.selected_file_index)
58        self.filename_history.insert(0, filename)
59        self.files_combo.removeItem(self.selected_file_index)
60        self.files_combo.insertItem(0, os.path.basename(filename))
61        self.selected_file_index = 0
62   
63    def browse(self):
64        filename = QFileDialog.getSaveFileName(self, "Save Rules As ...",
65                    self.last_save_file, "Pickle files (*.pickle *.pck);; All files (*.*)")
66        filename = str(filename)
67        if filename:
68            if filename in self.filename_history:
69                self.selected_file_index = self.filename_history.index(filename)
70                self.on_recent_selection()
71                return
72           
73            self.last_save_file = filename
74            self.filename_history.insert(0, filename)
75            self.files_combo.insertItem(0, os.path.basename(filename))
76            self.files_combo.setCurrentIndex(0)
77            self.save_button.setEnabled(self.rules is not None and bool(self.filename_history))
78   
79    def save_rules(self):
80        if self.rules is not None:
81            filename = self.filename_history[self.selected_file_index]
82            import cPickle
83            self.error(0)
84            try:
85                cPickle.dump(self.rules, open(filename, "wb"))
86            except Exception, ex:
87                self.error(0, "Could not save rules! %s" % str(ex))
88           
89           
90    def set_rules(self, rules=None):
91        self.rules = rules
92        self.save_button.setEnabled(rules is not None and bool(self.filename_history))
Note: See TracBrowser for help on using the repository browser.