1) Update XmlRoutines.py to strip all whitespace
2) Add function to read section of an XML file 3) Add class to handle workspace relative paths 4) Add utility to manage target.txt 5) Add utility to manage FrameworkDatabase.db git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2164 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
573
Tools/Python/Fd.py
Normal file
573
Tools/Python/Fd.py
Normal file
@ -0,0 +1,573 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# 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()
|
||||
|
Reference in New Issue
Block a user