source: coopr.gui.pyomo/trunk/coopr/gui/pyomo/GUI.py @ 2144

Last change on this file since 2144 was 2144, checked in by wehart, 10 years ago

Changing some of the API to make file selection controlled by
a FileChooser? object.

  • Property svn:executable set to *
File size: 8.9 KB
Line 
1from pawt import swing
2from java.awt import GridBagLayout, GridBagConstraints, FlowLayout
3from pawt import GridBag
4#RIGHT = swing.JLabel.RIGHT
5APPROVE_OPTION = swing.JFileChooser.APPROVE_OPTION
6import java.io
7import pickle
8import os
9
10class Container(dict):
11    """
12    A generalization of Bunch.  This class allows all other attributes to have a
13    default value of None.  This borrows the output formatting ideas from the
14    ActiveState Code Container (recipe 496697).
15    """
16
17    def __init__(self, *args, **kw):
18        for arg in args:
19            for item in quote_split('[ \t]+',arg):
20                r = item.find('=')
21                if r != -1:
22                    try:
23                        val = eval(item[r+1:])
24                    except:
25                        val = item[r+1:]
26                    kw[item[:r]] = val
27        dict.__init__(self,kw)
28        self.__dict__.update(kw)
29        if not '_name_' in kw:
30            self._name_ = self.__class__.__name__
31
32    def set_name(self, name):
33        self._name_ = name
34
35    def __setitem__(self, name, val):
36        self.__setattr__(name,val)
37
38    def __getitem__(self, name):
39        return self.__getattr__(name)
40
41    def __setattr__(self, name, val):
42        if name[0] != '_':
43            dict.__setitem__(self, name, val)
44        self.__dict__[name] = val
45
46    def __getattr__(self, name):
47        try:
48            return dict.__getitem__(self, name)
49        except:
50            if name[0] == '_':
51                raise AttributeError, "Unknown attribute %s" % name
52        return None
53
54    def __repr__(self):
55        attrs = sorted("%s = %r" % (k, v) for k, v in self.__dict__.iteritems() if not k.startswith("_"))
56        return "%s(%s)" % (self.__class__.__name__, ", ".join(attrs))
57
58    def __str__(self):
59        return self.as_string()
60
61    def __str__(self, nesting = 1, indent='', print_name=True):
62        attrs = []
63        if not print_name:
64            nesting -= 1
65        indentation = indent+"    " * nesting
66        for k, v in self.__dict__.iteritems():
67            if not k.startswith("_"):
68                text = [indentation, k, " = "]
69                if isinstance(v, Container):
70                    text.append(v.__str__(nesting + 1))
71                else:
72                    text.append(repr(v))
73                attrs.append("".join(text))
74        attrs.sort()
75        if print_name:
76            attrs.insert(0, indent+self._name_ + ":")
77        return "\n".join(attrs)
78
79
80
81class GUI:
82
83    def __init__(self):
84        self.tab_id=0
85        self.tab_info = {}
86        self.frame = swing.JFrame("Pyomo Command Driver", windowClosing=self._fileQuit)
87        self.frame.JMenuBar = self.create_menubar()
88
89        self.bag = GridBag(self.frame.contentPane, \
90                        fill='BOTH', weightx=1.0)
91
92        # do the rest of the layout in a GridBag
93        #self.do_layout(self.bag)
94        self.tabbed = swing.JTabbedPane()
95        self.create_tab()
96        self.bag.addRow(self.tabbed, weighty=1.0)
97        self.bag.addRow(swing.JLabel("Pyomo version VERSION (DATE)"))
98
99        # Create a file chooser
100        self.chooser = swing.JFileChooser()
101        self.chooser.currentDirectory = java.io.File(os.getcwd())
102        # Finish up and set the size
103        self.frame.pack()
104        self.frame.visible = 1
105        self.frame.size = self.frame.getPreferredSize()
106
107    def create_tab(self):
108        self.tab_id += 1
109        tab = Container()
110        self.tab_info[self.tab_id] = tab
111        #
112        # Setting up the panel for the tab
113        #
114        panel = swing.JPanel()
115        bag = GridBag(panel, fill='BOTH', weightx=1.0)
116        self.tabbed.add(panel, 'Tab %d' % self.tab_id)
117        #
118        # Creating button for model
119        #
120        input1 = swing.JPanel(FlowLayout(alignment=FlowLayout.LEFT))
121        tab.buttonInput1 = swing.JButton("Pyomo Model File", actionPerformed=self._buttonInput1)
122        input1.add(tab.buttonInput1)
123        bag.addRow(input1)
124        tab.text1 = swing.JTextField("",60)
125        bag.addRow(tab.text1)
126        #
127        # Create button for data
128        #
129        input2 = swing.JPanel(FlowLayout(alignment=FlowLayout.LEFT))
130        tab.buttonInput2 = swing.JButton("Pyomo Data File", actionPerformed=self._buttonInput2)
131        input2.add(tab.buttonInput2)
132        bag.addRow(input2)
133        tab.text2 = swing.JTextField("",60)
134        bag.addRow(tab.text2)
135        #
136        # Creating a text area for the command that will be executed
137        #
138        ##tab.input = swing.JTextArea("", 6, 80)
139        ##bag.addRow(tab.input)
140        ##tab.input.append("COMMAND %d" % self.tab_id)
141        #
142        # create panel for buttons that manage command execution/output
143        #
144        buttons = swing.JPanel(FlowLayout(alignment=FlowLayout.LEFT))
145        tab.buttonExecute = swing.JButton("Execute", actionPerformed=self._buttonExecute)
146        buttons.add(tab.buttonExecute)
147        tab.buttonClearOutput = swing.JButton("Clear Output", actionPerformed=self._buttonClearOutput)
148        buttons.add(tab.buttonClearOutput)
149        bag.addRow(buttons)
150        #
151        tab.output = swing.JTextArea("",6,80)
152        pane = swing.JScrollPane(tab.output,\
153                    verticalScrollBarPolicy=swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
154                    size=(1000,10000))
155        bag.addRow(pane, weighty=1.0)
156        tab.output.append("DRAFT GUI for PYOMO COMMAND DRIVER\n\n")
157
158    def create_menubar(self):
159        """build menu bar"""
160        menubar = swing.JMenuBar()
161        #
162        file = swing.JMenu("File")
163        file.add(swing.JMenuItem("New Command", actionPerformed = self._fileNewCommand))
164        file.add(swing.JMenuItem("Load...", actionPerformed = self._fileLoad))
165        file.add(swing.JMenuItem("Save...", actionPerformed = self._fileSave))
166        file.add(swing.JMenuItem("Save to file...", actionPerformed = self._fileSaveToFile))
167        file.add(swing.JMenuItem("Quit", actionPerformed = self._fileQuit))
168        menubar.add(file)
169        #
170        file = swing.JMenu("Edit")
171        file.add(swing.JMenuItem("Copy", actionPerformed = self._editCopy))
172        file.add(swing.JMenuItem("Paste", actionPerformed = self._editPaste))
173        file.add(swing.JMenuItem("Quit", actionPerformed = self._editSelectAll))
174        menubar.add(file)
175        #
176        ##file = swing.JMenu("Packages")
177        ##file.add(swing.JMenuItem("Versions", actionPerformed = self._packagesVersions))
178        ##file.add(swing.JMenuItem("Install...", actionPerformed = self._packagesInstall))
179        ##file.add(swing.JMenuItem("Update...", actionPerformed = self._packagesUpdate))
180        ##menubar.add(file)
181        #
182        file = swing.JMenu("Help")
183        file.add(swing.JMenuItem("Console", actionPerformed = self._helpConsole))
184        file.add(swing.JMenuItem("COIN-OR wiki", actionPerformed = self._helpCoinWiki))
185        file.add(swing.JMenuItem("Coopr wiki", actionPerformed = self._helpCooprWiki))
186        file.add(swing.JMenuItem("About", actionPerformed = self._helpAbout))
187        menubar.add(file)
188        return menubar
189
190    def _fileNewCommand(self, event=None):
191        self.create_tab()
192
193    def _fileLoad(self, event=None):
194        file,absfile = self._select_file()
195        if not absfile is None:
196            INPUT = open(absfile)
197            (a,b) = pickle.load(INPUT)
198            INPUT.close()
199
200    def _fileSave(self, event=None):
201        file,absfile = self._select_file()
202        if not absfile is None:
203            object = ("AA",  "BB")
204            OUTPUT = open(absfile, 'w')
205            pickle.dump(object, OUTPUT)
206            OUTPUT.close()
207
208    def _fileSaveToFile(self, event=None):
209        pass
210
211    def _fileQuit(self, event=None):
212        import sys
213        sys.exit(0)
214
215    def _editCopy(self, event=None):
216        pass
217
218    def _editPaste(self, event=None):
219        pass
220
221    def _editSelectAll(self, event=None):
222        pass
223
224    def _helpConsole(self, event=None):
225        pass
226
227    def _helpCoinWiki(self, event=None):
228        pass
229
230    def _helpCooprWiki(self, event=None):
231        pass
232
233    def _helpAbout(self, event=None):
234        pass
235
236    def _packagesVersions(self, event=None):
237        pass
238
239    def _packagesInstall(self, event=None):
240        pass
241
242    def _packagesUpdate(self, event=None):
243        pass
244
245    def _buttonExecute(self, event=None):
246        pass
247
248    def _buttonClearOutput(self, event=None):
249        pass
250
251    def _select_file(self):
252        self.chooser.rescanCurrentDirectory()
253        returnVal = self.chooser.showOpenDialog(self.frame)
254        if returnVal == APPROVE_OPTION:
255            return (self.chooser.selectedFile.name, os.path.join(self.chooser.currentDirectory.path, self.chooser.selectedFile.name))
256        return (None,None)
257       
258    def _buttonInput1(self, event=None):
259        file, absfile = self._select_file()
260        self.tab_info[1].text1.text = absfile
261
262    def _buttonInput2(self, event=None):
263        file, absfile = self._select_file()
264        self.tab_info[1].text2.text = absfile
265
266
267
268def run():
269    GUI()
270
271if __name__ == '__main__':
272    run()
Note: See TracBrowser for help on using the repository browser.