2007-01-04 02:07:52 +01:00
#!/usr/bin/env python
2007-01-05 22:08:32 +01:00
# 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 . """
2007-01-04 02:07:52 +01:00
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 \t Ctrl+N " , " New FrameworkDatabase.db " )
SaveMenuItem = FileMenu . Append ( - 1 , " &Save \t Ctrl+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 \t Ctrl+W " , " Scan WORKSPACE for additional packages and platforms " )
ScanAndSyncMenuItem = FileMenu . Append ( - 1 , " Scan &WORKSPACE and Sync \t Ctrl+W " , " Scan WORKSPACE for additional packages and platforms and sync FramdworkDatabase.db " )
ExitMenuItem = FileMenu . Append ( - 1 , " E&xit \t Alt+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 \t F5 " , " 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. \n Do 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 ( )
2007-01-05 22:08:32 +01:00