[Bio] / ModelEditor / RXpanel.py Repository:
ViewVC logotype

Annotation of /ModelEditor/RXpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (view) (download) (as text)

1 : efrank 1.1 #########################################################################
2 :     #
3 :     # BUGS:
4 :     # o In addSelectedRx and addSearchedRx, we don't pay attention to the
5 :     # o foundry and aux info. to fix this, i plan to extend the rx to
6 :     # o carry that info.
7 :     #
8 :     #########################################################################
9 :    
10 :     from wxPython.wx import *
11 :     from wxPython.grid import *
12 :     from KahOM.RecoElem import RecoElem
13 :     from FaST.FactoryUtils import union
14 : efrank 1.2 from ModelEditor.RecoElempanel import RecoElempanel
15 :     from ModelEditor.MainLayout import MainLayout
16 : efrank 1.1 #from RXAddDialog import RXAddDialog
17 : efrank 1.2 from ModelEditor.DoubleTextEntryDialog import DoubleTextEntryDialog
18 :     from ModelEditor.MetabolitePanel import MetabolitePanel
19 :     from ModelEditor.RXFromMetPageDialog import RXFromMetPageDialog
20 :     from ModelEditor.RXOnAddPageDialog import RXOnAddPageDialog
21 : efrank 1.7 from FoundryInfo.FoundryItemKey import FoundryItemKey
22 : efrank 1.1
23 :     class RXPanel:
24 :     #
25 :     # def getSelectedRx(self):
26 :     # def addSearchedRx(self, rx):
27 :     # def addSelectedRx(self, rx):
28 :     # def __init__(self, parent):
29 :     # def initEvents(self ):
30 :     # def addRxToGrid(self, rx, theGrid):
31 :     # def onSearchRx(self, evt):
32 :     # def onOptionsRxComboValue(self, evt):
33 :     # def onAddRx(self, evt):
34 :     # def onSelectRxBtn(self, evt):
35 :     # def onClearSearchedRxBtn(self, evt):
36 :     # def onClearSelectedRxBtn(self, evt):
37 :     #
38 :     #------------------------------------------------------------------------
39 :     def __init__(self, parent):
40 :     #------------------------------------------------------------------------
41 :     #wxPanel.__init__(self, parent, -1)
42 :     self.parent = parent
43 :     self.cutRx = None
44 :     self.selectedRxDict = {}
45 :     self.searchedRxDict = {}
46 :     self.initEvents()
47 :     # keeps us from clearing box unless last op was "From Metab Page"
48 :     self.__needTextCtlClear = 0
49 :    
50 :     return
51 :    
52 :    
53 :     #------------------------------------------------------------------------
54 :     def initEvents(self ):
55 :     #------------------------------------------------------------------------
56 :    
57 :    
58 :     optionsRxComboValue = self.parent.optionsRxComboBox
59 : efrank 1.8 #
60 :     # evt_combobox and evt_text: the former is for a selection, the
61 :     # latter for text changes. so we really want the former. this
62 :     # works in 2.4.0.7. but in 2.4.2.4 (on gentoo), it does not work.
63 :     # so i hacked in evt_text and that was ok. but, back in 2.4.0.7,
64 :     # that gives an infinite recursion in onOptionsRxComboValue.
65 :     # ...ignore until migration to 2.5.
66 :    
67 :     EVT_COMBOBOX(self.parent, optionsRxComboValue.GetId(),
68 :     self.onOptionsRxComboValue)
69 :     #EVT_TEXT(self.parent, optionsRxComboValue.GetId(),
70 : efrank 1.4 # self.onOptionsRxComboValue)
71 : efrank 1.1
72 :     addRxBtn = self.parent.addRxBtn
73 :     EVT_BUTTON(self.parent, addRxBtn.GetId(), self.onAddRx)
74 :    
75 :     searchRxBtn = self.parent.searchRxBtn
76 :     EVT_BUTTON(self.parent, searchRxBtn.GetId(), self.onSearchRx)
77 :    
78 :     selectRxBtn = self.parent.selectRxBtn
79 :     EVT_BUTTON(self.parent, selectRxBtn.GetId(), self.onSelectRxBtn)
80 :    
81 :     clearSearchedRxBtn = self.parent.clearSearchedRxBtn
82 :     EVT_BUTTON(self.parent, clearSearchedRxBtn.GetId(),
83 :     self.onClearSearchedRxBtn)
84 :    
85 :     clearSelectedRxBtn = self.parent.clearSelectedRxBtn
86 :     EVT_BUTTON(self.parent, clearSelectedRxBtn.GetId(),
87 :     self.onClearSelectedRxBtn)
88 :    
89 :     return
90 :    
91 :    
92 :     #------------------------------------------------------------------------
93 :     def getSelectedRx(self):
94 :     # returns [Reaction] from the Selected Rx grid
95 :     #------------------------------------------------------------------------
96 :     return ( self.selectedRxDict.values() )
97 :    
98 :     #------------------------------------------------------------------------
99 :     def getEnzymeText(self):
100 :     # returns [Reaction] from the Selected Rx grid
101 :     #------------------------------------------------------------------------
102 :     return self.parent.hasEnzymesText.GetValue()
103 :    
104 :    
105 :     #------------------------------------------------------------------------
106 : efrank 1.8 def addSearchedRx(self, rx, foundryName):
107 : efrank 1.1 #------------------------------------------------------------------------
108 :    
109 :     theGrid = self.parent.rxSearchResultsGrid
110 :     self.searchedRxDict[ theGrid.GetNumberRows() ] = rx
111 : efrank 1.8 self.addRxToGrid(rx, foundryName, theGrid)
112 : efrank 1.1 theGrid.FitInside()
113 :     return
114 :    
115 :     #------------------------------------------------------------------------
116 : efrank 1.8 def addSelectedRx(self, rx, foundryName):
117 : efrank 1.1 #------------------------------------------------------------------------
118 :     theGrid = self.parent.rxSelectedResultsGrid
119 :     self.selectedRxDict[ theGrid.GetNumberRows() ] = rx
120 : efrank 1.8 self.addRxToGrid(rx, foundryName, theGrid)
121 : efrank 1.1 return
122 :    
123 :     #------------------------------------------------------------------------
124 : efrank 1.8 def addRxToGrid(self, rx, foundryName, theGrid):
125 : efrank 1.1 #------------------------------------------------------------------------
126 :    
127 :     nRow = theGrid.GetNumberRows()
128 :     theGrid.AppendRows(numRows=1)
129 :    
130 : efrank 1.8 theGrid.SetCellValue(nRow, 0, foundryName )
131 :     #theGrid.SetCellValue(nRow, 1, rx.getFoundryItemKey().getIntValList(0) )
132 : efrank 1.1 theGrid.SetCellValue(nRow, 1, "")
133 :     theGrid.SetCellValue(nRow, 2, rx.asString())
134 :     theGrid.SetReadOnly(nRow, 0)
135 :     theGrid.SetReadOnly(nRow, 1)
136 :     theGrid.AutoSizeColumn(1)
137 :     theGrid.SetReadOnly(nRow, 2)
138 :     theGrid.AutoSizeColumn(2)
139 :    
140 :     return
141 :    
142 :    
143 :     #------------------------------------------------------------------------
144 :     def onSearchRx(self, evt):
145 :     #------------------------------------------------------------------------
146 :     factory = self.parent.getCurrentDataFactory()
147 : efrank 1.9 if ( not factory.getFoundryType() == "KahChemDb"):
148 :     self.parent.error( "Searching reactions only supported by KahChemDb" )
149 :     return
150 :    
151 : efrank 1.1 foundryName = factory.getFoundryName()
152 :    
153 :     rxns = []
154 :     # Get rxns accordinng to specified metabolites
155 :     #
156 : efrank 1.3
157 :    
158 :    
159 : efrank 1.4 if (self.parent.optionsRxComboBox.GetValue() == "From Metabolite Page"):
160 : efrank 1.1 # get the search parameters via a dialog
161 :     rxOnFromMetDialogWin = RXFromMetPageDialog(
162 :     self.parent, -1, "From Metabolite Page",
163 :     pos=(300,300),size=(700,400),
164 :     style=wxDEFAULT_FRAME_STYLE)
165 :    
166 :     result = rxOnFromMetDialogWin.ShowModal()
167 :    
168 :     if ( result != wxID_CANCEL):
169 : efrank 1.5 #self.parent.error( "remember -long- in onSearchRx" )
170 : efrank 1.8 rxns = apply( factory.searchRxByMetabolites, rxOnFromMetDialogWin.GetValue("compName") )
171 : efrank 1.1 rxOnFromMetDialogWin.Destroy()
172 :    
173 :     elif (self.parent.optionsRxComboBox.GetValue() == "Input"):
174 :     rxns = factory.findRxWithInput( self.parent.hasMetabsText.GetValue() )
175 :     elif (self.parent.optionsRxComboBox.GetValue() == "Output"):
176 :     rxns = factory.findRxWithOutput( self.parent.hasMetabsText.GetValue() )
177 :     else:
178 :     self.parent.error( "Program logic error RXPanel::onSearchRx")
179 :     return
180 :    
181 :     # Get rxns according to EC number and union with rxns from above
182 :     #
183 :     enzText = self.getEnzymeText()
184 :     if ( "" != enzText):
185 :     enzRxns = factory.findRxViaEC( enzText )
186 :     rxns = union(rxns, enzRxns)
187 : efrank 1.8 enzRxns = factory.findRxViaCatalystName( enzText )
188 : efrank 1.6 rxns = union(rxns, enzRxns)
189 : efrank 1.1
190 :     for r in rxns:
191 : efrank 1.8 self.addSearchedRx( r, foundryName )
192 : efrank 1.1
193 :     return
194 :    
195 :    
196 :     #------------------------------------------------------------------------
197 :     def onOptionsRxComboValue(self, evt):
198 :     #------------------------------------------------------------------------
199 :    
200 : efrank 1.4 # the needTextCtlClear business is so that if you switch input to
201 :     # output you don't have to retype the query. but if you
202 :     # get 'Frm Metab Page', then you have to clear it
203 :    
204 : efrank 1.1
205 : efrank 1.5 choice = evt.GetString()
206 :     self.parent.optionsRxComboBox.SetValue( choice )
207 : efrank 1.1
208 : efrank 1.4 if (self.parent.optionsRxComboBox.GetValue() == "From Metabolite Page"):
209 : efrank 1.1 self.parent.hasMetabsText.SetValue( " Now Hit Search ")
210 :     self.__needTextCtlClear = 1
211 :     else:
212 :     if (self.__needTextCtlClear == 1):
213 :     self.parent.hasMetabsText.SetValue( "")
214 :     self.__needTextCtlClear = 0
215 :    
216 :     return
217 :    
218 :     #------------------------------------------------------------------------
219 :     def onAddRx(self, evt):
220 :     #------------------------------------------------------------------------
221 :    
222 :     factory = self.parent.getCurrentDataFactory()
223 : efrank 1.9 if (not factory.getFoundryType() == "KahChemDb" ):
224 :     self.parent.error( "Adding Reactions only supported for KahChemDb, not for " + factory.getFoundryType() )
225 : efrank 1.1 return
226 :    
227 :     rxOnAddRXPageDialog = RXOnAddPageDialog (self.parent, -1, "Add Reaction",
228 :     pos=(300,300), size=(700,400),
229 :     style=wxDEFAULT_FRAME_STYLE)
230 :    
231 :     result = rxOnAddRXPageDialog.ShowModal()
232 :    
233 :     if ( result == wxID_CANCEL):
234 :     return
235 :     elif ( result == wxID_OK ):
236 :     rx = rxOnAddRXPageDialog.GetValue()
237 :     else:
238 :     self.parent.error( "Program error in RXpanel:onAddRx" )
239 :    
240 :     rx = rxOnAddRXPageDialog.GetValue()
241 :    
242 :     factory.writeReaction( rx, commit=1)
243 :    
244 :     return
245 :    
246 :    
247 :     #------------------------------------------------------------------------
248 :     def onSelectRxBtn(self, evt):
249 :     #------------------------------------------------------------------------
250 :    
251 :     onSelectRows = self.parent.rxSearchResultsGrid.GetSelectedRows()
252 :    
253 :     rxBottomGrid = self.parent.rxSelectedResultsGrid
254 :     rxBottomGridNumber = self.parent.rxSelectedResultsGrid.GetNumberRows()
255 :    
256 :     for s in onSelectRows:
257 : efrank 1.8 foundryName = self.parent.rxSearchResultsGrid.GetCellValue(s,0)
258 :     self.addSelectedRx( self.searchedRxDict[s], foundryName )
259 : efrank 1.1
260 :     rxBottomGrid.FitInside()
261 :    
262 :     return
263 :    
264 :     #------------------------------------------------------------------------
265 :     def onClearSearchedRxBtn(self, evt):
266 :     #------------------------------------------------------------------------
267 :     self.parent.rxSearchResultsGrid.DeleteRows(0, self.parent.rxSearchResultsGrid.GetNumberRows())
268 :     self.parent.rxSearchResultsGrid.ClearGrid()
269 :     self.searchedRxDict.clear()
270 :     return
271 :    
272 :     #------------------------------------------------------------------------
273 :     def onClearSelectedRxBtn(self, evt):
274 :     #------------------------------------------------------------------------
275 :     theGrid = self.parent.rxSelectedResultsGrid
276 :     theGrid.DeleteRows(0, theGrid.GetNumberRows())
277 :     theGrid.ClearGrid()
278 :     self.selectedRxDict.clear()
279 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3