#!/usr/bin/env python # Copyright (c) 2007, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php # # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. """An EDK II Build System Framework Database Utility maintains FrameworkDatabase.db settings in an EDK II Workspace.""" import wx, os, sys, copy from EdkIIWorkspace import * class FrameworkDatabaseModel(EdkIIWorkspace): def __init__(self): self.WorkspaceStatus = EdkIIWorkspace.__init__(self) self.Database = {} self.OriginalDatabase = {} def AddFile (self, DirName, FileName, FileType, Enabled): if DirName != '': FileName = os.path.join(DirName,FileName) if FileType == 'Package': Header = self.XmlParseFileSection (FileName, 'SpdHeader') Name = XmlElement (Header, '/SpdHeader/PackageName') Version = XmlElement (Header, '/SpdHeader/Version') elif FileType == 'Platform': Header = self.XmlParseFileSection (FileName, 'PlatformHeader') Name = XmlElement (Header, '/PlatformHeader/PlatformName') Version = XmlElement (Header, '/PlatformHeader/Version') else: return FileName = FileName.replace('\\','/') if Name == '' and Version == '': ValidType = 'Invalid' OtherType = 'Valid' UiName = FileName else: ValidType = 'Valid' OtherType = 'Invalid' UiName = Name + ' [' + Version + ']' self.Database[FileType][OtherType]['PossibleSettings'].pop(FileName, None) self.Database[FileType][OtherType]['EnabledSettings'].pop(FileName, None) self.Database[FileType][ValidType]['PossibleSettings'][FileName] = UiName if Enabled: self.Database[FileType][ValidType]['EnabledSettings'][FileName] = UiName return def NewModel(self): self.Database['Platform'] = {'Valid': {'PossibleSettings':{}, 'EnabledSettings':{}},'Invalid': {'PossibleSettings':{}, 'EnabledSettings':{}}} self.Database['Package'] = {'Valid': {'PossibleSettings':{}, 'EnabledSettings':{}},'Invalid': {'PossibleSettings':{}, 'EnabledSettings':{}}} def RevertModel(self): self.Database = copy.deepcopy(self.OriginalDatabase) def RescanModel(self): self.NewModel() self.Fd = self.XmlParseFile ('Tools/Conf/FrameworkDatabase.db') PackageList = XmlList (self.Fd, '/FrameworkDatabase/PackageList/Filename') for File in PackageList: SpdFileName = XmlElementData(File) self.AddFile ('', SpdFileName, 'Package', True) PlatformList = XmlList (self.Fd, '/FrameworkDatabase/PlatformList/Filename') for File in PlatformList: FpdFileName = XmlElementData(File) self.AddFile ('', FpdFileName, 'Platform', True) self.OriginalDatabase = copy.deepcopy(self.Database) def RefreshModel(self): Temp = copy.deepcopy(self.Database) for FileType in ['Package','Platform']: for Valid in ['Valid','Invalid']: for Item in Temp[FileType][Valid]['PossibleSettings']: self.AddFile('',Item, FileType, Item in Temp[FileType][Valid]['EnabledSettings']) return True def ModelModified(self): if self.Database['Package']['Valid']['EnabledSettings'] != self.OriginalDatabase['Package']['Valid']['EnabledSettings']: return True if self.Database['Package']['Invalid']['EnabledSettings'] != self.OriginalDatabase['Package']['Invalid']['EnabledSettings']: return True if self.Database['Platform']['Valid']['EnabledSettings'] != self.OriginalDatabase['Platform']['Valid']['EnabledSettings']: return True if self.Database['Platform']['Invalid']['EnabledSettings'] != self.OriginalDatabase['Platform']['Invalid']['EnabledSettings']: return True return False def SaveModel(self, Filename='Tools/Conf/FrameworkDatabase.db'): EnabledList = self.Database['Package']['Valid']['EnabledSettings'].keys() EnabledList += self.Database['Package']['Invalid']['EnabledSettings'].keys() PackageList = XmlList (self.Fd, '/FrameworkDatabase/PackageList/Filename') for File in PackageList: SpdFileName = XmlElementData(File) if SpdFileName in EnabledList: EnabledList.remove(SpdFileName) continue XmlRemoveElement(File) ParentNode = XmlList (self.Fd, '/FrameworkDatabase/PackageList')[0] for SpdFileName in EnabledList: XmlAppendChildElement(ParentNode, u'Filename', SpdFileName) EnabledList = self.Database['Platform']['Valid']['EnabledSettings'].keys() EnabledList += self.Database['Platform']['Invalid']['EnabledSettings'].keys() PlatformList = XmlList (self.Fd, '/FrameworkDatabase/PlatformList/Filename') for File in PlatformList: FpdFileName = XmlElementData(File) if FpdFileName in EnabledList: EnabledList.remove(FpdFileName) continue XmlRemoveElement(File) ParentNode = XmlList (self.Fd, '/FrameworkDatabase/PlatformList')[0] for FpdFileName in EnabledList: XmlAppendChildElement(ParentNode, u'Filename', FpdFileName) self.XmlSaveFile (self.Fd, Filename) self.OriginalDatabase = copy.deepcopy(self.Database) def CloseModel(self): pass class Frame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,'EDK II Build System Framework Database Utility') panel = wx.Panel(self, style=wx.SUNKEN_BORDER | wx.TAB_TRAVERSAL) wx.HelpProvider_Set(wx.SimpleHelpProvider()) self.Model = FrameworkDatabaseModel() # # Help text # PackagesHelpText = ( "The set of packages that are active in the current WORKSPACE." ) PlatformsHelpText = ( "The set of platforms that are active in the current WORKSPACE." ) InvalidPackagesHelpText = ( "The set of packages that are in Framework Database, but not in the current WORKSPACE." ) InvalidPlatformsHelpText = ( "The set of platforms that are in Framework Database, but not in the current WORKSPACE." ) # # Status Bar # self.StatusBar = self.CreateStatusBar() # # Build Menus # MenuBar = wx.MenuBar() FileMenu = wx.Menu() NewMenuItem = FileMenu.Append(-1, "&New\tCtrl+N", "New FrameworkDatabase.db") SaveMenuItem = FileMenu.Append(-1, "&Save\tCtrl+S", "Save FramdworkDatabase.db") SaveAsMenuItem = FileMenu.Append(-1, "Save &As...", "Save FrameworkDatabase.db as...") RevertMenuItem = FileMenu.Append(-1, "&Revert", "Revert to the original FrameworkDatabase.db") ScanMenuItem = FileMenu.Append(-1, "Scan &WORKSPACE\tCtrl+W", "Scan WORKSPACE for additional packages and platforms") ScanAndSyncMenuItem = FileMenu.Append(-1, "Scan &WORKSPACE and Sync\tCtrl+W", "Scan WORKSPACE for additional packages and platforms and sync FramdworkDatabase.db") ExitMenuItem = FileMenu.Append(-1, "E&xit\tAlt+F4", "Exit Framework Database Tool") MenuBar.Append(FileMenu, "&File") self.Bind(wx.EVT_MENU, self.OnSaveClick, SaveMenuItem) self.Bind(wx.EVT_MENU, self.OnSaveAsClick, SaveAsMenuItem) self.Bind(wx.EVT_MENU, self.OnRevertClick, RevertMenuItem) self.Bind(wx.EVT_MENU, self.OnScanClick, ScanMenuItem) self.Bind(wx.EVT_MENU, self.OnScanAndSyncClick, ScanAndSyncMenuItem) self.Bind(wx.EVT_MENU, self.OnExitClick, ExitMenuItem) EditMenu = wx.Menu() SelectAllPlatformsMenuItem = EditMenu.Append (-1, "Select All Platforms", "Select all platforms") ClearAllPlatformsMenuItem = EditMenu.Append (-1, "Clear All Platforms", "Clear all platforms") SelectAllPackagesMenuItem = EditMenu.Append (-1, "Select All Packages", "Select all packages") ClearAllPackagesMenuItem = EditMenu.Append (-1, "Clear All Packages", "Clear all packages") SelectAllInvalidPlatformsMenuItem = EditMenu.Append (-1, "Select All Invalid Platforms", "Select all invalid platforms") ClearAllInvalidPlatformsMenuItem = EditMenu.Append (-1, "Clear All Invalid Platforms", "Clear all invalid platforms") SelectAllInvalidPackagesMenuItem = EditMenu.Append (-1, "Select All Invalid Packages", "Select all invalid packages") ClearAllInvalidPackagesMenuItem = EditMenu.Append (-1, "Clear All Invalid Packages", "Clear all invalid packages") MenuBar.Append(EditMenu, "&Edit") self.Bind(wx.EVT_MENU, self.OnSelectAllPlatformsClick, SelectAllPlatformsMenuItem) self.Bind(wx.EVT_MENU, self.OnClearAllPlatformsClick, ClearAllPlatformsMenuItem) self.Bind(wx.EVT_MENU, self.OnSelectAllPackagesClick, SelectAllPackagesMenuItem) self.Bind(wx.EVT_MENU, self.OnClearAllPackagesClick, ClearAllPackagesMenuItem) self.Bind(wx.EVT_MENU, self.OnSelectAllInvalidPlatformsClick, SelectAllInvalidPlatformsMenuItem) self.Bind(wx.EVT_MENU, self.OnClearAllInvalidPlatformsClick, ClearAllInvalidPlatformsMenuItem) self.Bind(wx.EVT_MENU, self.OnSelectAllInvalidPackagesClick, SelectAllInvalidPackagesMenuItem) self.Bind(wx.EVT_MENU, self.OnClearAllInvalidPackagesClick, ClearAllInvalidPackagesMenuItem) ViewMenu = wx.Menu() RefreshMenuItem = ViewMenu.Append (-1, "&Refresh\tF5", "Rescan FrameworkDatabase.db") ShowToolBarMenuItem = ViewMenu.AppendCheckItem (-1, "Show &Toolbar", "Shows or hides the toolbar") ShowToolBarMenuItem.Check(True) MenuBar.Append(ViewMenu, "&View") self.Bind(wx.EVT_MENU, self.OnViewRefreshClick, RefreshMenuItem) self.Bind(wx.EVT_MENU, self.OnShowToolBarClick, ShowToolBarMenuItem) HelpMenu = wx.Menu() AboutMenuItem = HelpMenu.Append (-1, "&About...", "About") MenuBar.Append(HelpMenu, "&Help") self.Bind(wx.EVT_MENU, self.OnAboutClick, AboutMenuItem) self.SetMenuBar (MenuBar) # # Build Toolbar # self.ShowToolBar = False self.OnShowToolBarClick(self) # # Target, ToolChain, and Arch Check List Boxes # PackagesLabel = wx.StaticText(panel, -1, 'Packages') PackagesLabel.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD)) PackagesLabel.SetHelpText(PackagesHelpText) PlatformsLabel = wx.StaticText(panel, -1, 'Platforms') PlatformsLabel.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD)) PlatformsLabel.SetHelpText(PlatformsHelpText) # # Buttons # self.SelectAllPackagesButton = wx.Button(panel, -1, 'Select All') self.ClearAllPackagesButton = wx.Button(panel, -1, 'Clear All') self.SelectAllPackagesButton.Bind (wx.EVT_BUTTON, self.OnSelectAllPackagesClick) self.ClearAllPackagesButton.Bind (wx.EVT_BUTTON, self.OnClearAllPackagesClick) self.PackagesCheckListBox = wx.CheckListBox(panel, -1) self.PackagesCheckListBox.Bind(wx.EVT_CHECKLISTBOX, self.OnPackagesCheckListClick) self.PackagesCheckListBox.Bind(wx.EVT_SET_FOCUS, self.OnPackagesSetFocus) self.PackagesCheckListBox.Bind(wx.EVT_KILL_FOCUS, self.OnPackagesKillFocus) self.PackagesCheckListBox.SetHelpText(PackagesHelpText) self.SelectAllPlatformsButton = wx.Button(panel, -1, 'Select All') self.ClearAllPlatformsButton = wx.Button(panel, -1, 'Clear All') self.SelectAllPlatformsButton.Bind(wx.EVT_BUTTON, self.OnSelectAllPlatformsClick) self.ClearAllPlatformsButton.Bind (wx.EVT_BUTTON, self.OnClearAllPlatformsClick) self.PlatformsCheckListBox = wx.CheckListBox(panel, -1) self.PlatformsCheckListBox.Bind(wx.EVT_CHECKLISTBOX, self.OnPlatformsCheckListClick) self.PlatformsCheckListBox.Bind(wx.EVT_SET_FOCUS, self.OnPlatformsSetFocus) self.PlatformsCheckListBox.Bind(wx.EVT_KILL_FOCUS, self.OnPlatformsKillFocus) self.PlatformsCheckListBox.SetHelpText(PlatformsHelpText) InvalidPackagesLabel = wx.StaticText(panel, -1, 'Invalid Packages') InvalidPackagesLabel.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD)) InvalidPackagesLabel.SetHelpText(InvalidPackagesHelpText) InvalidPlatformsLabel = wx.StaticText(panel, -1, 'Invalid Platforms') InvalidPlatformsLabel.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD)) InvalidPlatformsLabel.SetHelpText(InvalidPlatformsHelpText) self.SelectAllInvalidPackagesButton = wx.Button(panel, -1, 'Select All') self.ClearAllInvalidPackagesButton = wx.Button(panel, -1, 'Clear All') self.SelectAllInvalidPackagesButton.Bind (wx.EVT_BUTTON, self.OnSelectAllInvalidPackagesClick) self.ClearAllInvalidPackagesButton.Bind (wx.EVT_BUTTON, self.OnClearAllInvalidPackagesClick) self.InvalidPackagesCheckListBox = wx.CheckListBox(panel, -1) self.InvalidPackagesCheckListBox.Bind(wx.EVT_CHECKLISTBOX, self.OnInvalidPackagesCheckListClick) self.InvalidPackagesCheckListBox.Bind(wx.EVT_SET_FOCUS, self.OnInvalidPackagesSetFocus) self.InvalidPackagesCheckListBox.Bind(wx.EVT_KILL_FOCUS, self.OnInvalidPackagesKillFocus) self.InvalidPackagesCheckListBox.SetHelpText(PackagesHelpText) self.SelectAllInvalidPlatformsButton = wx.Button(panel, -1, 'Select All') self.ClearAllInvalidPlatformsButton = wx.Button(panel, -1, 'Clear All') self.SelectAllInvalidPlatformsButton.Bind(wx.EVT_BUTTON, self.OnSelectAllInvalidPlatformsClick) self.ClearAllInvalidPlatformsButton.Bind (wx.EVT_BUTTON, self.OnClearAllInvalidPlatformsClick) self.InvalidPlatformsCheckListBox = wx.CheckListBox(panel, -1) self.InvalidPlatformsCheckListBox.Bind(wx.EVT_CHECKLISTBOX, self.OnInvalidPlatformsCheckListClick) self.InvalidPlatformsCheckListBox.Bind(wx.EVT_SET_FOCUS, self.OnInvalidPlatformsSetFocus) self.InvalidPlatformsCheckListBox.Bind(wx.EVT_KILL_FOCUS, self.OnInvalidPlatformsKillFocus) self.InvalidPlatformsCheckListBox.SetHelpText(PlatformsHelpText) # # Define layout using sizers # self.mainSizer = wx.BoxSizer(wx.VERTICAL) listSizer = wx.GridBagSizer(hgap=5, vgap=5) listSizer.Add(PackagesLabel, pos=(0,0), span=(1,2), flag=wx.ALIGN_CENTER) listSizer.Add(PlatformsLabel, pos=(0,2), span=(1,2), flag=wx.ALIGN_CENTER) listSizer.Add(self.SelectAllPackagesButton, pos=(1,0), flag=wx.ALIGN_CENTER) listSizer.Add(self.ClearAllPackagesButton, pos=(1,1), flag=wx.ALIGN_CENTER) listSizer.Add(self.SelectAllPlatformsButton, pos=(1,2), flag=wx.ALIGN_CENTER) listSizer.Add(self.ClearAllPlatformsButton, pos=(1,3), flag=wx.ALIGN_CENTER) listSizer.Add(self.PackagesCheckListBox, pos=(2,0), span=(1,2), flag=wx.ALL | wx.EXPAND) listSizer.Add(self.PlatformsCheckListBox, pos=(2,2), span=(1,2), flag=wx.ALL | wx.EXPAND) listSizer.Add(InvalidPackagesLabel, pos=(3,0), span=(1,2), flag=wx.ALIGN_CENTER) listSizer.Add(InvalidPlatformsLabel, pos=(3,2), span=(1,2), flag=wx.ALIGN_CENTER) listSizer.Add(self.SelectAllInvalidPackagesButton, pos=(4,0), flag=wx.ALIGN_CENTER) listSizer.Add(self.ClearAllInvalidPackagesButton, pos=(4,1), flag=wx.ALIGN_CENTER) listSizer.Add(self.SelectAllInvalidPlatformsButton, pos=(4,2), flag=wx.ALIGN_CENTER) listSizer.Add(self.ClearAllInvalidPlatformsButton, pos=(4,3), flag=wx.ALIGN_CENTER) listSizer.Add(self.InvalidPackagesCheckListBox, pos=(5,0), span=(1,2), flag=wx.ALL | wx.EXPAND) listSizer.Add(self.InvalidPlatformsCheckListBox, pos=(5,2), span=(1,2), flag=wx.ALL | wx.EXPAND) listSizer.AddGrowableRow(2) listSizer.AddGrowableRow(5) listSizer.AddGrowableCol(0) listSizer.AddGrowableCol(1) listSizer.AddGrowableCol(2) listSizer.AddGrowableCol(3) self.mainSizer.Add (listSizer, wx.EXPAND | wx.ALL, wx.EXPAND | wx.ALL, 10) panel.SetSizer (self.mainSizer) self.OnViewRefreshClick(self) def CheckListFocus(self, CheckListBox, Set): Index = 0 while Index < CheckListBox.GetCount(): CheckListBox.SetSelection(Index, False) Index += 1 if Set and CheckListBox.GetCount() > 0: CheckListBox.SetSelection(0, True) def CheckListClick(self, CheckListBox, Database): Index = 0 Database['EnabledSettings'] = {} while Index < CheckListBox.GetCount(): if CheckListBox.IsChecked(Index): for Item in Database['PossibleSettings']: if Database['PossibleSettings'][Item] == CheckListBox.GetString(Index): Database['EnabledSettings'][Item] = Database['PossibleSettings'][Item] Index += 1 def OnPackagesCheckListClick(self, event): self.CheckListClick(self.PackagesCheckListBox, self.Model.Database['Package']['Valid']) def OnPackagesSetFocus(self, event): self.CheckListFocus(self.PackagesCheckListBox, True) def OnPackagesKillFocus(self, event): self.CheckListFocus(self.PackagesCheckListBox, False) def OnPlatformsCheckListClick(self, event): self.CheckListClick(self.PlatformsCheckListBox, self.Model.Database['Platform']['Valid']) def OnPlatformsSetFocus(self, event): self.CheckListFocus(self.PlatformsCheckListBox, True) def OnPlatformsKillFocus(self, event): self.CheckListFocus(self.PlatformsCheckListBox, False) def OnInvalidPackagesCheckListClick(self, event): self.CheckListClick(self.InvalidPackagesCheckListBox, self.Model.Database['Package']['Invalid']) def OnInvalidPackagesSetFocus(self, event): self.CheckListFocus(self.InvalidPackagesCheckListBox, True) def OnInvalidPackagesKillFocus(self, event): self.CheckListFocus(self.InvalidPackagesCheckListBox, False) def OnInvalidPlatformsCheckListClick(self, event): self.CheckListClick(self.InvalidPlatformsCheckListBox, self.Model.Database['Platform']['Invalid']) def OnInvalidPlatformsSetFocus(self, event): self.CheckListFocus(self.InvalidPlatformsCheckListBox, True) def OnInvalidPlatformsKillFocus(self, event): self.CheckListFocus(self.InvalidPlatformsCheckListBox, False) def OnRevertClick(self, event): self.Model.RevertModel() self.StatusBar.SetFocus() self.OnRefreshClick(self) def RefreshCheckListBox(self, CheckListBox, SelectAllButton, ClearAllButton, Database): NameList = [] for Item in Database['PossibleSettings']: NameList.append(Database['PossibleSettings'][Item]) NameList.sort() CheckListBox.Set(NameList) Index = 0 MaximumString = '.' while Index < CheckListBox.GetCount(): String = CheckListBox.GetString(Index) if len(String) > len(MaximumString): MaximumString = String Enabled = False for Item in Database['EnabledSettings']: if String == Database['EnabledSettings'][Item]: Enabled = True if Enabled: CheckListBox.Check(Index, True) else: CheckListBox.Check(Index, False) Index += 1 Extents = CheckListBox.GetFullTextExtent (MaximumString) CheckListBox.SetMinSize((Extents[0] + 30,(CheckListBox.GetCount()+2) * (Extents[1]+Extents[2]))) if NameList == []: CheckListBox.Disable() SelectAllButton.Disable() ClearAllButton.Disable() else: CheckListBox.Enable() SelectAllButton.Enable() ClearAllButton.Enable() def OnRefreshClick(self, event): self.Model.RefreshModel() self.RefreshCheckListBox (self.PackagesCheckListBox, self.SelectAllPackagesButton, self.ClearAllPackagesButton, self.Model.Database['Package']['Valid']) self.RefreshCheckListBox (self.PlatformsCheckListBox, self.SelectAllPlatformsButton, self.ClearAllPlatformsButton, self.Model.Database['Platform']['Valid']) self.RefreshCheckListBox (self.InvalidPackagesCheckListBox, self.SelectAllInvalidPackagesButton, self.ClearAllInvalidPackagesButton, self.Model.Database['Package']['Invalid']) self.RefreshCheckListBox (self.InvalidPlatformsCheckListBox, self.SelectAllInvalidPlatformsButton, self.ClearAllInvalidPlatformsButton, self.Model.Database['Platform']['Invalid']) self.mainSizer.SetSizeHints(self) self.mainSizer.Fit(self) self.Update() def OnViewRefreshClick(self, event): self.Model.RescanModel() self.StatusBar.SetFocus() self.OnRefreshClick(self) def AddTool (self, Handler, ArtId, Label, HelpText): Tool = self.ToolBar.AddSimpleTool( -1, wx.ArtProvider.GetBitmap(ArtId, wx.ART_TOOLBAR, self.ToolSize), Label, HelpText ) self.Bind(wx.EVT_MENU, Handler, Tool) def OnShowToolBarClick(self, event): if self.ShowToolBar: self.ShowToolBar = False self.ToolBar.Destroy() else: self.ShowToolBar = True self.ToolBar = self.CreateToolBar() self.ToolSize = (24,24) self.ToolBar.SetToolBitmapSize(self.ToolSize) self.AddTool (self.OnNewClick, wx.ART_NEW, "New", "New FrameworkDatabase.db") self.AddTool (self.OnScanAndSyncClick, wx.ART_HARDDISK, "Scan WORKSPACE and Sync", "Scan WORKSPACE for new Packages and Platforms and sync FrameworkDatabase.db") self.AddTool (self.OnSaveClick, wx.ART_FILE_SAVE, "Save", "Save FrameworkDatabase.db") self.AddTool (self.OnSaveAsClick, wx.ART_FILE_SAVE_AS, "Save As...", "Save FrameworkDatabase.db as...") self.AddTool (self.OnRevertClick, wx.ART_UNDO, "Revert", "Revert to original FrameworkDatabase.db") self.AddTool (self.OnHelpClick, wx.ART_HELP, "Help", "Context Sensitive Help") self.AddTool (self.OnExitClick, wx.ART_QUIT, "Exit", "Exit EDK II Build System Framework Database Utility") self.ToolBar.Realize() def OnNewClick(self, event): self.Model.NewModel() self.OnRefreshClick(self) def ScanDirectory(self, Data, DirName, FilesInDir): WorkspaceDirName = self.Model.WorkspaceRelativePath(DirName) self.StatusBar.SetStatusText('Scanning: ' + WorkspaceDirName) RemoveList = [] for File in FilesInDir: if File[0] == '.': RemoveList.insert(0, File) for File in RemoveList: FilesInDir.remove(File) for File in FilesInDir: if os.path.splitext(File)[1].lower() == '.spd': self.Model.AddFile (WorkspaceDirName, File, 'Package', False) self.OnRefreshClick(self) if os.path.splitext(File)[1].lower() == '.fpd': self.Model.AddFile (WorkspaceDirName, File, 'Platform', False) self.OnRefreshClick(self) def OnScanClick(self, event): os.path.walk(self.Model.WorkspaceFile(''), self.ScanDirectory, None) self.StatusBar.SetStatusText('Scanning: Complete') self.StatusBar.SetFocus() self.OnRefreshClick(self) def OnScanAndSyncClick(self, event): self.OnSelectAllPackagesClick(self) self.OnSelectAllPlatformsClick(self) self.OnClearAllInvalidPackagesClick(self) self.OnClearAllInvalidPlatformsClick(self) self.OnScanClick(self) self.OnSelectAllPackagesClick(self) self.OnSelectAllPlatformsClick(self) self.OnClearAllInvalidPackagesClick(self) self.OnClearAllInvalidPlatformsClick(self) def OnSelectAllPackagesClick(self, event): self.Model.Database['Package']['Valid']['EnabledSettings'] = self.Model.Database['Package']['Valid']['PossibleSettings'] self.OnRefreshClick(self) def OnClearAllPackagesClick(self, event): self.Model.Database['Package']['Valid']['EnabledSettings'] = {} self.OnRefreshClick(self) def OnSelectAllPlatformsClick(self, event): self.Model.Database['Platform']['Valid']['EnabledSettings'] = self.Model.Database['Platform']['Valid']['PossibleSettings'] self.OnRefreshClick(self) def OnClearAllPlatformsClick(self, event): self.Model.Database['Platform']['Valid']['EnabledSettings'] = {} self.OnRefreshClick(self) def OnSelectAllInvalidPackagesClick(self, event): self.Model.Database['Package']['Invalid']['EnabledSettings'] = self.Model.Database['Package']['Invalid']['PossibleSettings'] self.OnRefreshClick(self) def OnClearAllInvalidPackagesClick(self, event): self.Model.Database['Package']['Invalid']['EnabledSettings'] = {} self.OnRefreshClick(self) def OnSelectAllInvalidPlatformsClick(self, event): self.Model.Database['Platform']['Invalid']['EnabledSettings'] = self.Model.Database['Platform']['Invalid']['PossibleSettings'] self.OnRefreshClick(self) def OnClearAllInvalidPlatformsClick(self, event): self.Model.Database['Platform']['Invalid']['EnabledSettings'] = {} self.OnRefreshClick(self) def OnSaveClick(self, event): self.Model.SaveModel() def OnSaveAsClick(self, event): wildcard = "Text Documents (*.db)|*.db|" \ "All files (*.*)|*.*" dialog = wx.FileDialog (None, 'Save As', self.Model.WorkspaceFile('Tools/Conf'), '', wildcard, wx.SAVE | wx.OVERWRITE_PROMPT) if dialog.ShowModal() == wx.ID_OK: FrameworkDatabaseDbFile = self.Model.WorkspaceRelativePath(dialog.GetPath()) if FrameworkDatabaseDbFile != '': self.Model.SaveModel(FrameworkDatabaseDbFile) dialog.Destroy() def OnExitClick(self, event): if self.Model.ModelModified(): dialog = wx.MessageDialog(None, 'The contents have changed.\nDo you want to save changes?', 'EDK II Build System Framework Databsase Utility', style = wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION) Status = dialog.ShowModal() dialog.Destroy() if Status == wx.ID_YES: self.OnSaveClick (self) elif Status == wx.ID_CANCEL: return self.Model.CloseModel() self.Close() def OnHelpClick(self, event): wx.ContextHelp().BeginContextHelp() def OnAboutClick(self, event): AboutInfo = wx.AboutDialogInfo() AboutInfo.Name = 'EDK II Build System Framework Database Utility' AboutInfo.Version = '0.3' AboutInfo.Copyright = 'Copyright (c) 2006, Intel Corporation' AboutInfo.Description = """ The EDK II Build System Framework Database Utility maintains FrameworkDatabase.db settings in an EDK II Workspace.""" AboutInfo.WebSite = ("http://tianocore.org", "Tiano Core home page") AboutInfo.License = """ All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.""" if self.Model.Icon != None: AboutInfo.Icon = self.Model.Icon wx.AboutBox(AboutInfo) if __name__ == '__main__': app = wx.PySimpleApp() frame = Frame() frame.Show() app.MainLoop()