git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2177 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			583 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			583 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/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()
 | 
						|
  
 |