diff -r 2cb34a4ac65a -r 6b5a4c21e061 doc/doxygen/html/objdictedit_8py-source.html --- a/doc/doxygen/html/objdictedit_8py-source.html Tue Jun 05 17:34:33 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1052 +0,0 @@ - -
-00001 #!/usr/bin/env python -00002 # -*- coding: utf-8 -*- -00003 -00004 #This file is part of CanFestival, a library implementing CanOpen Stack. -00005 # -00006 #Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD -00007 # -00008 #See COPYING file for copyrights details. -00009 # -00010 #This library is free software; you can redistribute it and/or -00011 #modify it under the terms of the GNU Lesser General Public -00012 #License as published by the Free Software Foundation; either -00013 #version 2.1 of the License, or (at your option) any later version. -00014 # -00015 #This library is distributed in the hope that it will be useful, -00016 #but WITHOUT ANY WARRANTY; without even the implied warranty of -00017 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -00018 #Lesser General Public License for more details. -00019 # -00020 #You should have received a copy of the GNU Lesser General Public -00021 #License along with this library; if not, write to the Free Software -00022 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -00023 -00024 from wxPython.wx import * -00025 from wxPython.grid import * -00026 import wx -00027 import wx.grid -00028 -00029 from types import * -00030 import os, re, platform, sys, time, traceback, getopt -00031 -00032 __version__ = "$Revision$" -00033 -00034 from node import OD_Subindex, OD_MultipleSubindexes, OD_IdenticalSubindexes, OD_IdenticalIndexes -00035 -00036 from nodemanager import * -00037 from subindextable import * -00038 from commondialogs import * -00039 from doc_index.DS301_index import * -00040 -00041 try: -00042 from wxPython.html import * -00043 -00044 wxEVT_HTML_URL_CLICK = wxNewId() -00045 -00046 def EVT_HTML_URL_CLICK(win, func): -00047 win.Connect(-1, -1, wxEVT_HTML_URL_CLICK, func) -00048 -00049 class wxHtmlWindowUrlClick(wxPyEvent): -00050 def __init__(self, linkinfo): -00051 wxPyEvent.__init__(self) -00052 self.SetEventType(wxEVT_HTML_URL_CLICK) -00053 self.linkinfolinkinfo = (linkinfo.GetHref(), linkinfo.GetTarget()) -00054 -00055 class wxUrlClickHtmlWindow(wxHtmlWindow): -00056 """ HTML window that generates and OnLinkClicked event. -00057 -00058 Use this to avoid having to override HTMLWindow -00059 """ -00060 def OnLinkClicked(self, linkinfo): -00061 wxPostEvent(self, wxHtmlWindowUrlClick(linkinfo)) -00062 -00063 #------------------------------------------------------------------------------- -00064 # Html Frame -00065 #------------------------------------------------------------------------------- -00066 -00067 [wxID_HTMLFRAME, wxID_HTMLFRAMEHTMLCONTENT] = [wx.NewId() for _init_ctrls in range(2)] -00068 -00069 class HtmlFrame(wx.Frame): -00070 def _init_ctrls(self, prnt): -00071 # generated method, don't edit -00072 wx.Frame.__init__(self, id=wxID_HTMLFRAME, name='HtmlFrame', -00073 parent=prnt, pos=wx.Point(320, 231), size=wx.Size(853, 616), -00074 style=wx.DEFAULT_FRAME_STYLE, title='') -00075 self.Bind(wx.EVT_CLOSE, self.OnCloseFrameOnCloseFrame, id=wxID_HTMLFRAME) -00076 -00077 self.HtmlContent = wxUrlClickHtmlWindow(id=wxID_HTMLFRAMEHTMLCONTENT, -00078 name='HtmlContent', parent=self, pos=wx.Point(0, 0), -00079 size=wx.Size(-1, -1), style=wxHW_SCROLLBAR_AUTO|wxHW_NO_SELECTION) -00080 EVT_HTML_URL_CLICK(self.HtmlContent, self.OnLinkClickOnLinkClick) -00081 -00082 def __init__(self, parent, opened): -00083 self._init_ctrls_init_ctrls(parent) -00084 self.HtmlFrameOpenedHtmlFrameOpened = opened -00085 -00086 def SetHtmlCode(self, htmlcode): -00087 self.HtmlContent.SetPage(htmlcode) -00088 -00089 def SetHtmlPage(self, htmlpage): -00090 self.HtmlContent.LoadPage(htmlpage) -00091 -00092 def OnCloseFrame(self, event): -00093 self.HtmlFrameOpenedHtmlFrameOpened.remove(self.GetTitle()) -00094 event.Skip() -00095 -00096 def OnLinkClick(self, event): -00097 url = event.linkinfo[0] -00098 try: -00099 import webbrowser -00100 except ImportError: -00101 wxMessageBox('Please point your browser at: %s' % url) -00102 else: -00103 webbrowser.open(url) -00104 -00105 Html_Window = True -00106 except: -00107 Html_Window = False -00108 -00109 def create(parent): -00110 return objdictedit(parent) -00111 -00112 def usage(): -00113 print "\nUsage of objdictedit.py :" -00114 print "\n %s [Filepath, ...]\n"%sys.argv[0] -00115 -00116 try: -00117 opts, args = getopt.getopt(sys.argv[1:], "h", ["help"]) -00118 except getopt.GetoptError: -00119 # print help information and exit: -00120 usage() -00121 sys.exit(2) -00122 -00123 for o, a in opts: -00124 if o in ("-h", "--help"): -00125 usage() -00126 sys.exit() -00127 -00128 filesOpen = args -00129 ScriptDirectory = sys.path[0] -00130 -00131 -00132 [wxID_OBJDICTEDIT, wxID_OBJDICTEDITFILEOPENED, -00133 wxID_OBJDICTEDITHELPBAR, -00134 ] = [wx.NewId() for _init_ctrls in range(3)] -00135 -00136 [wxID_OBJDICTEDITADDMENUITEMS0, wxID_OBJDICTEDITADDMENUITEMS1, -00137 wxID_OBJDICTEDITADDMENUITEMS2, wxID_OBJDICTEDITADDMENUITEMS3, -00138 wxID_OBJDICTEDITADDMENUITEMS4, wxID_OBJDICTEDITADDMENUITEMS5, -00139 ] = [wx.NewId() for _init_coll_AddMenu_Items in range(6)] -00140 -00141 [wxID_OBJDICTEDITFILEMENUITEMS0, wxID_OBJDICTEDITFILEMENUITEMS1, -00142 wxID_OBJDICTEDITFILEMENUITEMS2, wxID_OBJDICTEDITFILEMENUITEMS4, -00143 wxID_OBJDICTEDITFILEMENUITEMS5, wxID_OBJDICTEDITFILEMENUITEMS6, -00144 wxID_OBJDICTEDITFILEMENUITEMS7, wxID_OBJDICTEDITFILEMENUITEMS8, -00145 wxID_OBJDICTEDITFILEMENUITEMS9, -00146 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(9)] -00147 -00148 [wxID_OBJDICTEDITEDITMENUITEMS0, wxID_OBJDICTEDITEDITMENUITEMS1, -00149 wxID_OBJDICTEDITEDITMENUITEMS2, wxID_OBJDICTEDITEDITMENUITEMS4, -00150 wxID_OBJDICTEDITEDITMENUITEMS6, wxID_OBJDICTEDITEDITMENUITEMS7, -00151 wxID_OBJDICTEDITEDITMENUITEMS8, -00152 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)] -00153 -00154 [wxID_OBJDICTEDITHELPMENUITEMS0, wxID_OBJDICTEDITHELPMENUITEMS1, -00155 wxID_OBJDICTEDITHELPMENUITEMS2, -00156 ] = [wx.NewId() for _init_coll_HelpMenu_Items in range(3)] -00157 -00158 class objdictedit(wx.Frame): -00159 def _init_coll_menuBar1_Menus(self, parent): -00160 # generated method, don't edit -00161 -00162 parent.Append(menu=self.FileMenu, title='File') -00163 parent.Append(menu=self.EditMenu, title='Edit') -00164 parent.Append(menu=self.AddMenu, title='Add') -00165 parent.Append(menu=self.HelpMenu, title='Help') -00166 -00167 def _init_coll_EditMenu_Items(self, parent): -00168 # generated method, don't edit -00169 -00170 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS4, -00171 kind=wx.ITEM_NORMAL, text='Refresh\tCTRL+R') -00172 parent.AppendSeparator() -00173 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS1, -00174 kind=wx.ITEM_NORMAL, text='Undo\tCTRL+Z') -00175 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS0, -00176 kind=wx.ITEM_NORMAL, text='Redo\tCTRL+Y') -00177 parent.AppendSeparator() -00178 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS6, -00179 kind=wx.ITEM_NORMAL, text='Node infos') -00180 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS2, -00181 kind=wx.ITEM_NORMAL, text='DS-301 Profile') -00182 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS8, -00183 kind=wx.ITEM_NORMAL, text='DS-302 Profile') -00184 parent.Append(help='', id=wxID_OBJDICTEDITEDITMENUITEMS7, -00185 kind=wx.ITEM_NORMAL, text='Other Profile') -00186 self.Bind(wx.EVT_MENU, self.OnUndoMenuOnUndoMenu, -00187 id=wxID_OBJDICTEDITEDITMENUITEMS1) -00188 self.Bind(wx.EVT_MENU, self.OnRedoMenuOnRedoMenu, -00189 id=wxID_OBJDICTEDITEDITMENUITEMS0) -00190 self.Bind(wx.EVT_MENU, self.OnCommunicationMenuOnCommunicationMenu, -00191 id=wxID_OBJDICTEDITEDITMENUITEMS2) -00192 self.Bind(wx.EVT_MENU, self.OnRefreshMenuOnRefreshMenu, -00193 id=wxID_OBJDICTEDITEDITMENUITEMS4) -00194 self.Bind(wx.EVT_MENU, self.OnNodeInfosMenuOnNodeInfosMenu, -00195 id=wxID_OBJDICTEDITEDITMENUITEMS6) -00196 self.Bind(wx.EVT_MENU, self.OnEditProfileMenuOnEditProfileMenu, -00197 id=wxID_OBJDICTEDITEDITMENUITEMS7) -00198 self.Bind(wx.EVT_MENU, self.OnOtherCommunicationMenuOnOtherCommunicationMenu, -00199 id=wxID_OBJDICTEDITEDITMENUITEMS8) -00200 -00201 def _init_coll_HelpMenu_Items(self, parent): -00202 # generated method, don't edit -00203 -00204 parent.Append(help='', id=wxID_OBJDICTEDITHELPMENUITEMS0, -00205 kind=wx.ITEM_NORMAL, text='DS-301 Standard\tF1') -00206 self.Bind(wx.EVT_MENU, self.OnHelpDS301MenuOnHelpDS301Menu, -00207 id=wxID_OBJDICTEDITHELPMENUITEMS0) -00208 parent.Append(help='', id=wxID_OBJDICTEDITHELPMENUITEMS1, -00209 kind=wx.ITEM_NORMAL, text='CAN Festival Docs\tF2') -00210 self.Bind(wx.EVT_MENU, self.OnHelpCANFestivalMenuOnHelpCANFestivalMenu, -00211 id=wxID_OBJDICTEDITHELPMENUITEMS1) -00212 if Html_Window: -00213 parent.Append(help='', id=wxID_OBJDICTEDITHELPMENUITEMS2, -00214 kind=wx.ITEM_NORMAL, text='About') -00215 self.Bind(wx.EVT_MENU, self.OnAboutMenuOnAboutMenu, -00216 id=wxID_OBJDICTEDITHELPMENUITEMS2) -00217 -00218 def _init_coll_FileMenu_Items(self, parent): -00219 # generated method, don't edit -00220 -00221 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS5, -00222 kind=wx.ITEM_NORMAL, text='New\tCTRL+N') -00223 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS0, -00224 kind=wx.ITEM_NORMAL, text='Open\tCTRL+O') -00225 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS1, -00226 kind=wx.ITEM_NORMAL, text='Save\tCTRL+S') -00227 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS6, -00228 kind=wx.ITEM_NORMAL, text='Save As...\tALT+S') -00229 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS2, -00230 kind=wx.ITEM_NORMAL, text='Close\tCTRL+W') -00231 parent.AppendSeparator() -00232 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS7, -00233 kind=wx.ITEM_NORMAL, text='Import EDS file') -00234 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS9, -00235 kind=wx.ITEM_NORMAL, text='Export to EDS file') -00236 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS8, -00237 kind=wx.ITEM_NORMAL, text='Build Dictionary\tCTRL+B') -00238 parent.AppendSeparator() -00239 parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS4, -00240 kind=wx.ITEM_NORMAL, text='Exit') -00241 self.Bind(wx.EVT_MENU, self.OnOpenMenuOnOpenMenu, -00242 id=wxID_OBJDICTEDITFILEMENUITEMS0) -00243 self.Bind(wx.EVT_MENU, self.OnSaveMenuOnSaveMenu, -00244 id=wxID_OBJDICTEDITFILEMENUITEMS1) -00245 self.Bind(wx.EVT_MENU, self.OnCloseMenuOnCloseMenu, -00246 id=wxID_OBJDICTEDITFILEMENUITEMS2) -00247 self.Bind(wx.EVT_MENU, self.OnQuitMenuOnQuitMenu, -00248 id=wxID_OBJDICTEDITFILEMENUITEMS4) -00249 self.Bind(wx.EVT_MENU, self.OnNewMenuOnNewMenu, -00250 id=wxID_OBJDICTEDITFILEMENUITEMS5) -00251 self.Bind(wx.EVT_MENU, self.OnSaveAsMenuOnSaveAsMenu, -00252 id=wxID_OBJDICTEDITFILEMENUITEMS6) -00253 self.Bind(wx.EVT_MENU, self.OnImportEDSMenuOnImportEDSMenu, -00254 id=wxID_OBJDICTEDITFILEMENUITEMS7) -00255 self.Bind(wx.EVT_MENU, self.OnExportCMenuOnExportCMenu, -00256 id=wxID_OBJDICTEDITFILEMENUITEMS8) -00257 self.Bind(wx.EVT_MENU, self.OnExportEDSMenuOnExportEDSMenu, -00258 id=wxID_OBJDICTEDITFILEMENUITEMS9) -00259 -00260 def _init_coll_AddMenu_Items(self, parent): -00261 # generated method, don't edit -00262 -00263 parent.Append(help='', id=wxID_OBJDICTEDITADDMENUITEMS0, -00264 kind=wx.ITEM_NORMAL, text='SDO Server') -00265 parent.Append(help='', id=wxID_OBJDICTEDITADDMENUITEMS1, -00266 kind=wx.ITEM_NORMAL, text='SDO Client') -00267 parent.Append(help='', id=wxID_OBJDICTEDITADDMENUITEMS2, -00268 kind=wx.ITEM_NORMAL, text='PDO Transmit') -00269 parent.Append(help='', id=wxID_OBJDICTEDITADDMENUITEMS3, -00270 kind=wx.ITEM_NORMAL, text='PDO Receive') -00271 parent.Append(help='', id=wxID_OBJDICTEDITADDMENUITEMS4, -00272 kind=wx.ITEM_NORMAL, text='Map Variable') -00273 parent.Append(help='', id=wxID_OBJDICTEDITADDMENUITEMS5, -00274 kind=wx.ITEM_NORMAL, text='User Type') -00275 self.Bind(wx.EVT_MENU, self.OnAddSDOServerMenuOnAddSDOServerMenu, -00276 id=wxID_OBJDICTEDITADDMENUITEMS0) -00277 self.Bind(wx.EVT_MENU, self.OnAddSDOClientMenuOnAddSDOClientMenu, -00278 id=wxID_OBJDICTEDITADDMENUITEMS1) -00279 self.Bind(wx.EVT_MENU, self.OnAddPDOTransmitMenuOnAddPDOTransmitMenu, -00280 id=wxID_OBJDICTEDITADDMENUITEMS2) -00281 self.Bind(wx.EVT_MENU, self.OnAddPDOReceiveMenuOnAddPDOReceiveMenu, -00282 id=wxID_OBJDICTEDITADDMENUITEMS3) -00283 self.Bind(wx.EVT_MENU, self.OnAddMapVariableMenuOnAddMapVariableMenu, -00284 id=wxID_OBJDICTEDITADDMENUITEMS4) -00285 self.Bind(wx.EVT_MENU, self.OnAddUserTypeMenuOnAddUserTypeMenu, -00286 id=wxID_OBJDICTEDITADDMENUITEMS5) -00287 -00288 def _init_coll_HelpBar_Fields(self, parent): -00289 # generated method, don't edit -00290 parent.SetFieldsCount(3) -00291 -00292 parent.SetStatusText(number=0, text='') -00293 parent.SetStatusText(number=1, text='') -00294 parent.SetStatusText(number=2, text='') -00295 -00296 parent.SetStatusWidths([100, 110, -1]) -00297 -00298 def _init_utils(self): -00299 # generated method, don't edit -00300 self.menuBar1 = wx.MenuBar() -00301 self.menuBar1.SetEvtHandlerEnabled(True) -00302 -00303 self.FileMenu = wx.Menu(title='') -00304 -00305 self.EditMenu = wx.Menu(title='') -00306 -00307 self.AddMenu = wx.Menu(title='') -00308 -00309 self.HelpMenu = wx.Menu(title='') -00310 -00311 self._init_coll_menuBar1_Menus_init_coll_menuBar1_Menus(self.menuBar1) -00312 self._init_coll_FileMenu_Items_init_coll_FileMenu_Items(self.FileMenu) -00313 self._init_coll_EditMenu_Items_init_coll_EditMenu_Items(self.EditMenu) -00314 self._init_coll_AddMenu_Items_init_coll_AddMenu_Items(self.AddMenu) -00315 self._init_coll_HelpMenu_Items_init_coll_HelpMenu_Items(self.HelpMenu) -00316 -00317 def _init_ctrls(self, prnt): -00318 # generated method, don't edit -00319 wx.Frame.__init__(self, id=wxID_OBJDICTEDIT, name='objdictedit', -00320 parent=prnt, pos=wx.Point(149, 178), size=wx.Size(1000, 700), -00321 style=wx.DEFAULT_FRAME_STYLE, title='Objdictedit') -00322 self._init_utils_init_utils() -00323 self.SetClientSize(wx.Size(1000, 700)) -00324 self.SetMenuBar(self.menuBar1) -00325 self.Bind(wx.EVT_CLOSE, self.OnCloseFrameOnCloseFrame, id=wxID_OBJDICTEDIT) -00326 -00327 self.FileOpened = wx.Notebook(id=wxID_OBJDICTEDITFILEOPENED, -00328 name='FileOpened', parent=self, pos=wx.Point(0, 0), -00329 size=wx.Size(0, 0), style=0) -00330 self.FileOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, -00331 self.OnFileSelectedChangedOnFileSelectedChanged, id=wxID_OBJDICTEDITFILEOPENED) -00332 -00333 self.HelpBar = wx.StatusBar(id=wxID_OBJDICTEDITHELPBAR, name='HelpBar', -00334 parent=self, style=wxST_SIZEGRIP) -00335 self._init_coll_HelpBar_Fields_init_coll_HelpBar_Fields(self.HelpBar) -00336 self.SetStatusBar(self.HelpBar) -00337 -00338 def __init__(self, parent): -00339 self._init_ctrls_init_ctrls(parent) -00340 self.HtmlFrameOpenedHtmlFrameOpened = [] -00341 -00342 self.ManagerManager = NodeManager(ScriptDirectory) -00343 for filepath in filesOpen: -00344 self.ManagerManager.OpenFileInCurrent(filepath) -00345 new_editingpanel = EditingPanel(self, self.ManagerManager) -00346 self.FileOpened.AddPage(new_editingpanel, "") -00347 self.FileOpened.SetSelection(self.ManagerManager.GetCurrentNodeIndex()) -00348 if self.ManagerManager.CurrentDS302Defined(): -00349 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS8, True) -00350 else: -00351 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS8, False) -00352 self.RefreshEditMenuRefreshEditMenu() -00353 self.RefreshBufferStateRefreshBufferState() -00354 self.RefreshProfileMenuRefreshProfileMenu() -00355 self.RefreshTitleRefreshTitle() -00356 self.RefreshMainMenuRefreshMainMenu() -00357 -00358 def GetNoteBook(self): -00359 return self.FileOpened -00360 -00361 def OnAddSDOServerMenu(self, event): -00362 self.ManagerManager.AddSDOServerToCurrent() -00363 self.RefreshBufferStateRefreshBufferState() -00364 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00365 event.Skip() -00366 -00367 def OnAddSDOClientMenu(self, event): -00368 self.ManagerManager.AddSDOClientToCurrent() -00369 self.RefreshBufferStateRefreshBufferState() -00370 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00371 event.Skip() -00372 -00373 def OnAddPDOTransmitMenu(self, event): -00374 self.ManagerManager.AddPDOTransmitToCurrent() -00375 self.RefreshBufferStateRefreshBufferState() -00376 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00377 event.Skip() -00378 -00379 def OnAddPDOReceiveMenu(self, event): -00380 self.ManagerManager.AddPDOReceiveToCurrent() -00381 self.RefreshBufferStateRefreshBufferState() -00382 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00383 event.Skip() -00384 -00385 def OnAddMapVariableMenu(self, event): -00386 self.AddMapVariableAddMapVariable() -00387 event.Skip() -00388 -00389 def OnAddUserTypeMenu(self, event): -00390 self.AddUserTypeAddUserType() -00391 event.Skip() -00392 -00393 def OnFileSelectedChanged(self, event): -00394 selected = event.GetSelection() -00395 # At init selected = -1 -00396 if selected >= 0: -00397 window = self.FileOpened.GetPage(selected) -00398 self.ManagerManager.ChangeCurrentNode(window.GetIndex()) -00399 self.RefreshBufferStateRefreshBufferState() -00400 self.RefreshStatusBarRefreshStatusBar() -00401 self.RefreshProfileMenuRefreshProfileMenu() -00402 event.Skip() -00403 -00404 def OnHelpDS301Menu(self, event): -00405 find_index = False -00406 selected = self.FileOpened.GetSelection() -00407 if selected >= 0: -00408 window = self.FileOpened.GetPage(selected) -00409 result = window.GetSelection() -00410 if result: -00411 find_index = True -00412 index, subIndex = result -00413 result = OpenPDFDocIndex(index, ScriptDirectory) -00414 if type(result) == StringType: -00415 message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR) -00416 message.ShowModal() -00417 message.Destroy() -00418 if not find_index: -00419 result = OpenPDFDocIndex(None, ScriptDirectory) -00420 if type(result) == StringType: -00421 message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR) -00422 message.ShowModal() -00423 message.Destroy() -00424 event.Skip() -00425 -00426 def OnHelpCANFestivalMenu(self, event): -00427 #self.OpenHtmlFrame("CAN Festival Reference", os.path.join(ScriptDirectory, "doc/canfestival.html"), wx.Size(1000, 600)) -00428 os.system("xpdf -remote CANFESTIVAL %s %d &"%(os.path.join(ScriptDirectory, "doc/manual_en.pdf"),16)) -00429 event.Skip() -00430 -00431 def OnAboutMenu(self, event): -00432 self.OpenHtmlFrameOpenHtmlFrame("About CAN Festival", os.path.join(ScriptDirectory, "doc/about.html"), wx.Size(500, 450)) -00433 event.Skip() -00434 -00435 def OpenHtmlFrame(self, title, file, size): -00436 if title not in self.HtmlFrameOpenedHtmlFrameOpened: -00437 self.HtmlFrameOpenedHtmlFrameOpened.append(title) -00438 window = HtmlFrame(self, self.HtmlFrameOpenedHtmlFrameOpened) -00439 window.SetTitle(title) -00440 window.SetHtmlPage(file) -00441 window.SetClientSize(size) -00442 window.Show() -00443 -00444 def OnQuitMenu(self, event): -00445 self.Close() -00446 event.Skip() -00447 -00448 def OnCloseFrame(self, event): -00449 if self.ManagerManager.OneFileHasChanged(): -00450 dialog = wxMessageDialog(self, "There are changes, do you want to save?", "Close Application", wxYES_NO|wxCANCEL|wxICON_QUESTION) -00451 answer = dialog.ShowModal() -00452 dialog.Destroy() -00453 if answer == wxID_YES: -00454 self.ManagerManager.ChangeCurrentNode(0) -00455 for i in xrange(self.FileOpened.GetPageCount()): -00456 if self.ManagerManager.CurrentIsSaved(): -00457 self.ManagerManager.CloseCurrent() -00458 else: -00459 self.SaveSave() -00460 self.ManagerManager.CloseCurrent(True) -00461 event.Skip() -00462 elif answer == wxID_NO: -00463 for i in xrange(self.FileOpened.GetPageCount()): -00464 self.ManagerManager.CloseCurrent(True) -00465 wxCallAfter(self.Close) -00466 event.Skip() -00467 else: -00468 event.Skip() -00469 -00470 #------------------------------------------------------------------------------- -00471 # Refresh Functions -00472 #------------------------------------------------------------------------------- -00473 -00474 def RefreshTitle(self): -00475 if self.FileOpened.GetPageCount() > 0: -00476 self.SetTitle("Objdictedit - %s"%self.ManagerManager.GetCurrentFilename()) -00477 else: -00478 self.SetTitle("Objdictedit") -00479 -00480 def OnRefreshMenu(self, event): -00481 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00482 event.Skip() -00483 -00484 def RefreshCurrentIndexList(self): -00485 selected = self.FileOpened.GetSelection() -00486 window = self.FileOpened.GetPage(selected) -00487 window.RefreshIndexList() -00488 -00489 def RefreshStatusBar(self): -00490 if self.HelpBar: -00491 window = self.FileOpened.GetPage(self.FileOpened.GetSelection()) -00492 selection = window.GetSelection() -00493 if selection: -00494 index, subIndex = selection -00495 if self.ManagerManager.IsCurrentEntry(index): -00496 self.HelpBar.SetStatusText("Index: 0x%04X"%index, 0) -00497 self.HelpBar.SetStatusText("Subindex: 0x%02X"%subIndex, 1) -00498 entryinfos = self.ManagerManager.GetEntryInfos(index) -00499 name = entryinfos["name"] -00500 category = "Optional" -00501 if entryinfos["need"]: -00502 category = "Mandatory" -00503 struct = "VAR" -00504 number = "" -00505 if entryinfos["struct"] & OD_IdenticalIndexes: -00506 number = " possibly defined %d times"%entryinfos["nbmax"] -00507 if entryinfos["struct"] & OD_IdenticalSubindexes: -00508 struct = "REC" -00509 elif entryinfos["struct"] & OD_MultipleSubindexes: -00510 struct = "ARRAY" -00511 text = "%s: %s entry of struct %s%s."%(name,category,struct,number) -00512 self.HelpBar.SetStatusText(text, 2) -00513 else: -00514 for i in xrange(3): -00515 self.HelpBar.SetStatusText("", i) -00516 else: -00517 for i in xrange(3): -00518 self.HelpBar.SetStatusText("", i) -00519 -00520 def RefreshMainMenu(self): -00521 if self.FileMenu: -00522 if self.FileOpened.GetPageCount() > 0: -00523 self.menuBar1.EnableTop(1, True) -00524 self.menuBar1.EnableTop(2, True) -00525 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS1, True) -00526 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS2, True) -00527 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS6, True) -00528 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS8, True) -00529 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS9, True) -00530 else: -00531 self.menuBar1.EnableTop(1, False) -00532 self.menuBar1.EnableTop(2, False) -00533 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS1, False) -00534 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS2, False) -00535 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS6, False) -00536 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS8, False) -00537 self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS9, False) -00538 -00539 def RefreshEditMenu(self): -00540 if self.FileMenu: -00541 if self.FileOpened.GetPageCount() > 0: -00542 undo, redo = self.ManagerManager.GetCurrentBufferState() -00543 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS1, undo) -00544 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS0, redo) -00545 else: -00546 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS1, False) -00547 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS0, False) -00548 -00549 def RefreshProfileMenu(self): -00550 if self.EditMenu: -00551 profile = self.ManagerManager.GetCurrentProfileName() -00552 edititem = self.EditMenu.FindItemById(wxID_OBJDICTEDITEDITMENUITEMS7) -00553 if edititem: -00554 length = self.AddMenu.GetMenuItemCount() -00555 for i in xrange(length-6): -00556 additem = self.AddMenu.FindItemByPosition(6) -00557 self.AddMenu.Delete(additem.GetId()) -00558 if profile not in ("None", "DS-301"): -00559 edititem.SetText("%s Profile"%profile) -00560 edititem.Enable(True) -00561 self.AddMenu.AppendSeparator() -00562 for text, indexes in self.ManagerManager.GetCurrentSpecificMenu(): -00563 new_id = wx.NewId() -00564 self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text) -00565 self.Bind(wx.EVT_MENU, self.GetProfileCallBackGetProfileCallBack(text), id=new_id) -00566 else: -00567 edititem.SetText("Other Profile") -00568 edititem.Enable(False) -00569 -00570 -00571 #------------------------------------------------------------------------------- -00572 # Buffer Functions -00573 #------------------------------------------------------------------------------- -00574 -00575 def RefreshBufferState(self): -00576 fileopened = self.ManagerManager.GetAllFilenames() -00577 for idx, filename in enumerate(fileopened): -00578 self.FileOpened.SetPageText(idx, filename) -00579 self.RefreshEditMenuRefreshEditMenu() -00580 self.RefreshTitleRefreshTitle() -00581 -00582 def OnUndoMenu(self, event): -00583 self.ManagerManager.LoadCurrentPrevious() -00584 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00585 self.RefreshBufferStateRefreshBufferState() -00586 event.Skip() -00587 -00588 def OnRedoMenu(self, event): -00589 self.ManagerManager.LoadCurrentNext() -00590 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00591 self.RefreshBufferStateRefreshBufferState() -00592 event.Skip() -00593 -00594 -00595 #------------------------------------------------------------------------------- -00596 # Load and Save Funtions -00597 #------------------------------------------------------------------------------- -00598 -00599 def OnNewMenu(self, event): -00600 self.FilePathFilePath = "" -00601 dialog = CreateNodeDialog(self, ScriptDirectory) -00602 if dialog.ShowModal() == wxID_OK: -00603 name, id, nodetype, description = dialog.GetValues() -00604 profile, filepath = dialog.GetProfile() -00605 NMT = dialog.GetNMTManagement() -00606 options = dialog.GetOptions() -00607 result = self.ManagerManager.CreateNewNode(name, id, nodetype, description, profile, filepath, NMT, options) -00608 if type(result) == IntType: -00609 new_editingpanel = EditingPanel(self, self.ManagerManager) -00610 new_editingpanel.SetIndex(result) -00611 self.FileOpened.AddPage(new_editingpanel, "") -00612 self.FileOpened.SetSelection(self.FileOpened.GetPageCount() - 1) -00613 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS8, False) -00614 if "DS302" in options: -00615 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS8, True) -00616 self.RefreshBufferStateRefreshBufferState() -00617 self.RefreshProfileMenuRefreshProfileMenu() -00618 self.RefreshMainMenuRefreshMainMenu() -00619 else: -00620 message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR) -00621 message.ShowModal() -00622 message.Destroy() -00623 event.Skip() -00624 -00625 def OnOpenMenu(self, event): -00626 filepath = self.ManagerManager.GetCurrentFilePath() -00627 if filepath != "": -00628 directory = os.path.dirname(filepath) -00629 else: -00630 directory = os.getcwd() -00631 dialog = wxFileDialog(self, "Choose a file", directory, "", "OD files (*.od)|*.od|All files|*.*", wxOPEN|wxCHANGE_DIR) -00632 if dialog.ShowModal() == wxID_OK: -00633 filepath = dialog.GetPath() -00634 if os.path.isfile(filepath): -00635 result = self.ManagerManager.OpenFileInCurrent(filepath) -00636 if type(result) == IntType: -00637 new_editingpanel = EditingPanel(self, self.ManagerManager) -00638 new_editingpanel.SetIndex(result) -00639 self.FileOpened.AddPage(new_editingpanel, "") -00640 self.FileOpened.SetSelection(self.FileOpened.GetPageCount() - 1) -00641 if self.ManagerManager.CurrentDS302Defined(): -00642 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS8, True) -00643 else: -00644 self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS8, False) -00645 self.RefreshEditMenuRefreshEditMenu() -00646 self.RefreshBufferStateRefreshBufferState() -00647 self.RefreshProfileMenuRefreshProfileMenu() -00648 self.RefreshMainMenuRefreshMainMenu() -00649 else: -00650 message = wxMessageDialog(self, e.args[0], "Error", wxOK|wxICON_ERROR) -00651 message.ShowModal() -00652 message.Destroy() -00653 dialog.Destroy() -00654 event.Skip() -00655 -00656 def OnSaveMenu(self, event): -00657 self.SaveSave() -00658 event.Skip() -00659 -00660 def OnSaveAsMenu(self, event): -00661 self.SaveAsSaveAs() -00662 event.Skip() -00663 -00664 def Save(self): -00665 result = self.ManagerManager.SaveCurrentInFile() -00666 if not result: -00667 self.SaveAsSaveAs() -00668 elif type(result) != StringType: -00669 self.RefreshBufferStateRefreshBufferState() -00670 else: -00671 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00672 message.ShowModal() -00673 message.Destroy() -00674 -00675 def SaveAs(self): -00676 filepath = self.ManagerManager.GetCurrentFilePath() -00677 if filepath != "": -00678 directory, filename = os.path.split(filepath) -00679 else: -00680 directory, filename = os.getcwd(), "%s.od"%self.ManagerManager.GetCurrentNodeInfos()[0] -00681 dialog = wxFileDialog(self, "Choose a file", directory, filename, "OD files (*.od)|*.od|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT|wxCHANGE_DIR) -00682 if dialog.ShowModal() == wxID_OK: -00683 filepath = dialog.GetPath() -00684 if os.path.isdir(os.path.dirname(filepath)): -00685 result = self.ManagerManager.SaveCurrentInFile(filepath) -00686 if type(result) != StringType: -00687 self.RefreshBufferStateRefreshBufferState() -00688 else: -00689 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00690 message.ShowModal() -00691 message.Destroy() -00692 else: -00693 message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR) -00694 message.ShowModal() -00695 message.Destroy() -00696 dialog.Destroy() -00697 -00698 def OnCloseMenu(self, event): -00699 answer = wxID_YES -00700 result = self.ManagerManager.CloseCurrent() -00701 if not result: -00702 dialog = wxMessageDialog(self, "There are changes, do you want to save?", "Close File", wxYES_NO|wxCANCEL|wxICON_QUESTION) -00703 answer = dialog.ShowModal() -00704 dialog.Destroy() -00705 if answer == wxID_YES: -00706 self.OnSaveMenuOnSaveMenu(event) -00707 if self.ManagerManager.CurrentIsSaved(): -00708 self.ManagerManager.CloseCurrent() -00709 elif answer == wxID_NO: -00710 self.ManagerManager.CloseCurrent(True) -00711 if self.FileOpened.GetPageCount() > self.ManagerManager.GetBufferNumber(): -00712 current = self.FileOpened.GetSelection() -00713 self.FileOpened.DeletePage(current) -00714 if self.FileOpened.GetPageCount() > 0: -00715 self.FileOpened.SetSelection(min(current, self.FileOpened.GetPageCount() - 1)) -00716 self.RefreshBufferStateRefreshBufferState() -00717 self.RefreshMainMenuRefreshMainMenu() -00718 event.Skip() -00719 -00720 -00721 #------------------------------------------------------------------------------- -00722 # Import and Export Functions -00723 #------------------------------------------------------------------------------- -00724 -00725 def OnImportEDSMenu(self, event): -00726 dialog = wxFileDialog(self, "Choose a file", os.getcwd(), "", "EDS files (*.eds)|*.eds|All files|*.*", wxOPEN|wxCHANGE_DIR) -00727 if dialog.ShowModal() == wxID_OK: -00728 filepath = dialog.GetPath() -00729 if os.path.isfile(filepath): -00730 result = self.ManagerManager.ImportCurrentFromEDSFile(filepath) -00731 if type(result) == IntType: -00732 new_editingpanel = EditingPanel(self, self.ManagerManager) -00733 new_editingpanel.SetIndex(result) -00734 self.FileOpened.AddPage(new_editingpanel, "") -00735 self.FileOpened.SetSelection(self.FileOpened.GetPageCount() - 1) -00736 self.RefreshBufferStateRefreshBufferState() -00737 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00738 self.RefreshProfileMenuRefreshProfileMenu() -00739 self.RefreshMainMenuRefreshMainMenu() -00740 message = wxMessageDialog(self, "Import successful", "Information", wxOK|wxICON_INFORMATION) -00741 message.ShowModal() -00742 message.Destroy() -00743 else: -00744 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00745 message.ShowModal() -00746 message.Destroy() -00747 else: -00748 message = wxMessageDialog(self, "\"%s\" is not a valid file!"%filepath, "Error", wxOK|wxICON_ERROR) -00749 message.ShowModal() -00750 message.Destroy() -00751 dialog.Destroy() -00752 event.Skip() -00753 -00754 -00755 def OnExportEDSMenu(self, event): -00756 dialog = wxFileDialog(self, "Choose a file", os.getcwd(), self.ManagerManager.GetCurrentNodeInfos()[0], "EDS files (*.eds)|*.eds|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT|wxCHANGE_DIR) -00757 if dialog.ShowModal() == wxID_OK: -00758 filepath = dialog.GetPath() -00759 if os.path.isdir(os.path.dirname(filepath)): -00760 path, extend = os.path.splitext(filepath) -00761 if extend in ("", "."): -00762 filepath = path + ".eds" -00763 result = self.ManagerManager.ExportCurrentToEDSFile(filepath) -00764 if not result: -00765 message = wxMessageDialog(self, "Export successful", "Information", wxOK|wxICON_INFORMATION) -00766 message.ShowModal() -00767 message.Destroy() -00768 else: -00769 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00770 message.ShowModal() -00771 message.Destroy() -00772 else: -00773 message = wxMessageDialog(self, "\"%s\" is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR) -00774 message.ShowModal() -00775 message.Destroy() -00776 dialog.Destroy() -00777 event.Skip() -00778 -00779 def OnExportCMenu(self, event): -00780 dialog = wxFileDialog(self, "Choose a file", os.getcwd(), self.ManagerManager.GetCurrentNodeInfos()[0], "CANFestival OD files (*.c)|*.c|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT|wxCHANGE_DIR) -00781 if dialog.ShowModal() == wxID_OK: -00782 filepath = dialog.GetPath() -00783 if os.path.isdir(os.path.dirname(filepath)): -00784 path, extend = os.path.splitext(filepath) -00785 if extend in ("", "."): -00786 filepath = path + ".c" -00787 result = self.ManagerManager.ExportCurrentToCFile(filepath) -00788 if not result: -00789 message = wxMessageDialog(self, "Export successful", "Information", wxOK|wxICON_INFORMATION) -00790 message.ShowModal() -00791 message.Destroy() -00792 else: -00793 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00794 message.ShowModal() -00795 message.Destroy() -00796 else: -00797 message = wxMessageDialog(self, "\"%s\" is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR) -00798 message.ShowModal() -00799 message.Destroy() -00800 dialog.Destroy() -00801 event.Skip() -00802 -00803 #------------------------------------------------------------------------------- -00804 # Editing Profiles functions -00805 #------------------------------------------------------------------------------- -00806 -00807 def OnCommunicationMenu(self, event): -00808 dictionary,current = self.ManagerManager.GetCurrentCommunicationLists() -00809 self.EditProfileEditProfile("Edit DS-301 Profile", dictionary, current) -00810 event.Skip() -00811 -00812 def OnOtherCommunicationMenu(self, event): -00813 dictionary,current = self.ManagerManager.GetCurrentDS302Lists() -00814 self.EditProfileEditProfile("Edit DS-301 Profile", dictionary, current) -00815 event.Skip() -00816 -00817 def OnEditProfileMenu(self, event): -00818 title = "Edit %s Profile"%self.ManagerManager.GetCurrentProfileName() -00819 dictionary,current = self.ManagerManager.GetCurrentProfileLists() -00820 self.EditProfileEditProfile(title, dictionary, current) -00821 event.Skip() -00822 -00823 def EditProfile(self, title, dictionary, current): -00824 dialog = CommunicationDialog(self) -00825 dialog.SetTitle(title) -00826 dialog.SetIndexDictionary(dictionary) -00827 dialog.SetCurrentList(current) -00828 dialog.RefreshLists() -00829 if dialog.ShowModal() == wxID_OK: -00830 new_profile = dialog.GetCurrentList() -00831 addinglist = [] -00832 removinglist = [] -00833 for index in new_profile: -00834 if index not in current: -00835 addinglist.append(index) -00836 for index in current: -00837 if index not in new_profile: -00838 removinglist.append(index) -00839 self.ManagerManager.ManageEntriesOfCurrent(addinglist, removinglist) -00840 self.ManagerManager.GenerateMapList() -00841 self.ManagerManager.BufferCurrentNode() -00842 self.RefreshBufferStateRefreshBufferState() -00843 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00844 dialog.Destroy() -00845 -00846 def GetProfileCallBack(self, text): -00847 def ProfileCallBack(event): -00848 self.ManagerManager.AddSpecificEntryToCurrent(text) -00849 self.RefreshBufferStateRefreshBufferState() -00850 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00851 event.Skip() -00852 return ProfileCallBack -00853 -00854 #------------------------------------------------------------------------------- -00855 # Edit Node informations function -00856 #------------------------------------------------------------------------------- -00857 -00858 def OnNodeInfosMenu(self, event): -00859 dialog = NodeInfosDialog(self) -00860 name, id, type, description = self.ManagerManager.GetCurrentNodeInfos() -00861 dialog.SetValues(name, id, type, description) -00862 if dialog.ShowModal() == wxID_OK: -00863 name, id, type, description = dialog.GetValues() -00864 self.ManagerManager.SetCurrentNodeInfos(name, id, type, description) -00865 self.RefreshBufferStateRefreshBufferState() -00866 self.RefreshProfileMenuRefreshProfileMenu() -00867 selected = self.FileOpened.GetSelection() -00868 if selected >= 0: -00869 window = self.FileOpened.GetPage(selected) -00870 window.RefreshTable() -00871 event.Skip() -00872 -00873 -00874 #------------------------------------------------------------------------------- -00875 # Add User Types and Variables -00876 #------------------------------------------------------------------------------- -00877 -00878 def AddMapVariable(self): -00879 index = self.ManagerManager.GetCurrentNextMapIndex() -00880 if index: -00881 dialog = MapVariableDialog(self) -00882 dialog.SetIndex(index) -00883 if dialog.ShowModal() == wxID_OK: -00884 index, name, struct, number = dialog.GetValues() -00885 result = self.ManagerManager.AddMapVariableToCurrent(index, name, struct, number) -00886 if type(result) != StringType: -00887 self.RefreshBufferStateRefreshBufferState() -00888 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00889 else: -00890 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00891 message.ShowModal() -00892 message.Destroy() -00893 dialog.Destroy() -00894 else: -00895 message = wxMessageDialog(self, result, "No map variable index left!", wxOK|wxICON_ERROR) -00896 message.ShowModal() -00897 message.Destroy() -00898 -00899 def AddUserType(self): -00900 dialog = UserTypeDialog(self) -00901 dialog.SetTypeList(self.ManagerManager.GetCustomisableTypes()) -00902 if dialog.ShowModal() == wxID_OK: -00903 type, min, max, length = dialog.GetValues() -00904 result = self.ManagerManager.AddUserTypeToCurrent(type, min, max, length) -00905 if not result: -00906 self.RefreshBufferStateRefreshBufferState() -00907 self.RefreshCurrentIndexListRefreshCurrentIndexList() -00908 else: -00909 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) -00910 message.ShowModal() -00911 message.Destroy() -00912 dialog.Destroy() -00913 -00914 -00915 #------------------------------------------------------------------------------- -00916 # Exception Handler -00917 #------------------------------------------------------------------------------- -00918 -00919 Max_Traceback_List_Size = 20 -00920 -00921 def Display_Exception_Dialog(e_type,e_value,e_tb): -00922 trcbck_lst = [] -00923 for i,line in enumerate(traceback.extract_tb(e_tb)): -00924 trcbck = " " + str(i+1) + ". " -00925 if line[0].find(os.getcwd()) == -1: -00926 trcbck += "file : " + str(line[0]) + ", " -00927 else: -00928 trcbck += "file : " + str(line[0][len(os.getcwd()):]) + ", " -00929 trcbck += "line : " + str(line[1]) + ", " + "function : " + str(line[2]) -00930 trcbck_lst.append(trcbck) -00931 -00932 # Allow clicking.... -00933 cap = wx.Window_GetCapture() -00934 if cap: -00935 cap.ReleaseMouse() -00936 -00937 dlg = wx.SingleChoiceDialog(None, -00938 """ -00939 An error happens. -00940 -00941 Click on OK for saving an error report. -00942 -00943 Please contact LOLITech at: -00944 +33 (0)3 29 52 95 67 -00945 bugs_objdictedit@lolitech.fr -00946 -00947 -00948 Error: -00949 """ + -00950 str(e_type) + " : " + str(e_value), -00951 "Error", -00952 trcbck_lst) -00953 try: -00954 res = (dlg.ShowModal() == wx.ID_OK) -00955 finally: -00956 dlg.Destroy() -00957 -00958 return res -00959 -00960 def Display_Error_Dialog(e_value): -00961 message = wxMessageDialog(None, str(e_value), "Error", wxOK|wxICON_ERROR) -00962 message.ShowModal() -00963 message.Destroy() -00964 -00965 def get_last_traceback(tb): -00966 while tb.tb_next: -00967 tb = tb.tb_next -00968 return tb -00969 -00970 -00971 def format_namespace(d, indent=' '): -00972 return '\n'.join(['%s%s: %s' % (indent, k, repr(v)[:10000]) for k, v in d.iteritems()]) -00973 -00974 -00975 ignored_exceptions = [] # a problem with a line in a module is only reported once per session -00976 -00977 def wxAddExceptHook(path, app_version='[No version]'):#, ignored_exceptions=[]): -00978 -00979 def handle_exception(e_type, e_value, e_traceback): -00980 traceback.print_exception(e_type, e_value, e_traceback) # this is very helpful when there's an exception in the rest of this func -00981 last_tb = get_last_traceback(e_traceback) -00982 ex = (last_tb.tb_frame.f_code.co_filename, last_tb.tb_frame.f_lineno) -00983 if str(e_value).startswith("!!!"): -00984 Display_Error_Dialog(e_value) -00985 elif ex not in ignored_exceptions: -00986 ignored_exceptions.append(ex) -00987 result = Display_Exception_Dialog(e_type,e_value,e_traceback) -00988 if result: -00989 info = { -00990 'app-title' : wx.GetApp().GetAppName(), # app_title -00991 'app-version' : app_version, -00992 'wx-version' : wx.VERSION_STRING, -00993 'wx-platform' : wx.Platform, -00994 'python-version' : platform.python_version(), #sys.version.split()[0], -00995 'platform' : platform.platform(), -00996 'e-type' : e_type, -00997 'e-value' : e_value, -00998 'date' : time.ctime(), -00999 'cwd' : os.getcwd(), -01000 } -01001 if e_traceback: -01002 info['traceback'] = ''.join(traceback.format_tb(e_traceback)) + '%s: %s' % (e_type, e_value) -01003 last_tb = get_last_traceback(e_traceback) -01004 exception_locals = last_tb.tb_frame.f_locals # the locals at the level of the stack trace where the exception actually occurred -01005 info['locals'] = format_namespace(exception_locals) -01006 if 'self' in exception_locals: -01007 info['self'] = format_namespace(exception_locals['self'].__dict__) -01008 -01009 output = open(path+os.sep+"bug_report_"+info['date'].replace(':','-').replace(' ','_')+".txt",'w') -01010 lst = info.keys() -01011 lst.sort() -01012 for a in lst: -01013 output.write(a+":\n"+str(info[a])+"\n\n") -01014 -01015 #sys.excepthook = lambda *args: wx.CallAfter(handle_exception, *args) -01016 sys.excepthook = handle_exception -01017 -01018 if __name__ == '__main__': -01019 app = wxPySimpleApp() -01020 wxInitAllImageHandlers() -01021 -01022 # Install a exception handle for bug reports -01023 wxAddExceptHook(os.getcwd(),__version__) -01024 -01025 frame = objdictedit(None) -01026 -01027 frame.Show() -01028 app.MainLoop() -