3 # Copyright (c) 2007, Intel Corporation
4 # All rights reserved. This program and the accompanying materials
5 # are licensed and made available under the terms and conditions of the BSD License
6 # which accompanies this distribution. The full text of the license may be found at
7 # http://opensource.org/licenses/bsd-license.php
9 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 """An EDK II Build System Framework Database Utility maintains
13 FrameworkDatabase.db settings in an EDK II Workspace."""
15 import wx
, os
, sys
, copy
16 from EdkIIWorkspace
import *
18 class FrameworkDatabaseModel(EdkIIWorkspace
):
20 self
.WorkspaceStatus
= EdkIIWorkspace
.__init
__(self
)
22 self
.OriginalDatabase
= {}
24 def AddFile (self
, DirName
, FileName
, FileType
, Enabled
):
26 FileName
= os
.path
.join(DirName
,FileName
)
27 if FileType
== 'Package':
28 Header
= self
.XmlParseFileSection (FileName
, 'SpdHeader')
29 Name
= XmlElement (Header
, '/SpdHeader/PackageName')
30 Version
= XmlElement (Header
, '/SpdHeader/Version')
31 elif FileType
== 'Platform':
32 Header
= self
.XmlParseFileSection (FileName
, 'PlatformHeader')
33 Name
= XmlElement (Header
, '/PlatformHeader/PlatformName')
34 Version
= XmlElement (Header
, '/PlatformHeader/Version')
37 FileName
= FileName
.replace('\\','/')
38 if Name
== '' and Version
== '':
45 UiName
= Name
+ ' [' + Version
+ ']'
46 self
.Database
[FileType
][OtherType
]['PossibleSettings'].pop(FileName
, None)
47 self
.Database
[FileType
][OtherType
]['EnabledSettings'].pop(FileName
, None)
48 self
.Database
[FileType
][ValidType
]['PossibleSettings'][FileName
] = UiName
50 self
.Database
[FileType
][ValidType
]['EnabledSettings'][FileName
] = UiName
54 self
.Database
['Platform'] = {'Valid': {'PossibleSettings':{}, 'EnabledSettings':{}},'Invalid': {'PossibleSettings':{}, 'EnabledSettings':{}}}
55 self
.Database
['Package'] = {'Valid': {'PossibleSettings':{}, 'EnabledSettings':{}},'Invalid': {'PossibleSettings':{}, 'EnabledSettings':{}}}
57 def RevertModel(self
):
58 self
.Database
= copy
.deepcopy(self
.OriginalDatabase
)
60 def RescanModel(self
):
62 self
.Fd
= self
.XmlParseFile ('Tools/Conf/FrameworkDatabase.db')
63 PackageList
= XmlList (self
.Fd
, '/FrameworkDatabase/PackageList/Filename')
64 for File
in PackageList
:
65 SpdFileName
= XmlElementData(File
)
66 self
.AddFile ('', SpdFileName
, 'Package', True)
67 PlatformList
= XmlList (self
.Fd
, '/FrameworkDatabase/PlatformList/Filename')
68 for File
in PlatformList
:
69 FpdFileName
= XmlElementData(File
)
70 self
.AddFile ('', FpdFileName
, 'Platform', True)
71 self
.OriginalDatabase
= copy
.deepcopy(self
.Database
)
73 def RefreshModel(self
):
74 Temp
= copy
.deepcopy(self
.Database
)
75 for FileType
in ['Package','Platform']:
76 for Valid
in ['Valid','Invalid']:
77 for Item
in Temp
[FileType
][Valid
]['PossibleSettings']:
78 self
.AddFile('',Item
, FileType
, Item
in Temp
[FileType
][Valid
]['EnabledSettings'])
81 def ModelModified(self
):
82 if self
.Database
['Package']['Valid']['EnabledSettings'] != self
.OriginalDatabase
['Package']['Valid']['EnabledSettings']:
84 if self
.Database
['Package']['Invalid']['EnabledSettings'] != self
.OriginalDatabase
['Package']['Invalid']['EnabledSettings']:
86 if self
.Database
['Platform']['Valid']['EnabledSettings'] != self
.OriginalDatabase
['Platform']['Valid']['EnabledSettings']:
88 if self
.Database
['Platform']['Invalid']['EnabledSettings'] != self
.OriginalDatabase
['Platform']['Invalid']['EnabledSettings']:
92 def SaveModel(self
, Filename
='Tools/Conf/FrameworkDatabase.db'):
93 EnabledList
= self
.Database
['Package']['Valid']['EnabledSettings'].keys()
94 EnabledList
+= self
.Database
['Package']['Invalid']['EnabledSettings'].keys()
95 PackageList
= XmlList (self
.Fd
, '/FrameworkDatabase/PackageList/Filename')
96 for File
in PackageList
:
97 SpdFileName
= XmlElementData(File
)
98 if SpdFileName
in EnabledList
:
99 EnabledList
.remove(SpdFileName
)
101 XmlRemoveElement(File
)
103 ParentNode
= XmlList (self
.Fd
, '/FrameworkDatabase/PackageList')[0]
104 for SpdFileName
in EnabledList
:
105 XmlAppendChildElement(ParentNode
, u
'Filename', SpdFileName
)
107 EnabledList
= self
.Database
['Platform']['Valid']['EnabledSettings'].keys()
108 EnabledList
+= self
.Database
['Platform']['Invalid']['EnabledSettings'].keys()
109 PlatformList
= XmlList (self
.Fd
, '/FrameworkDatabase/PlatformList/Filename')
110 for File
in PlatformList
:
111 FpdFileName
= XmlElementData(File
)
112 if FpdFileName
in EnabledList
:
113 EnabledList
.remove(FpdFileName
)
115 XmlRemoveElement(File
)
117 ParentNode
= XmlList (self
.Fd
, '/FrameworkDatabase/PlatformList')[0]
118 for FpdFileName
in EnabledList
:
119 XmlAppendChildElement(ParentNode
, u
'Filename', FpdFileName
)
121 self
.XmlSaveFile (self
.Fd
, Filename
)
122 self
.OriginalDatabase
= copy
.deepcopy(self
.Database
)
124 def CloseModel(self
):
127 class Frame(wx
.Frame
):
129 wx
.Frame
.__init
__(self
,None,-1,'EDK II Build System Framework Database Utility')
130 panel
= wx
.Panel(self
, style
=wx
.SUNKEN_BORDER | wx
.TAB_TRAVERSAL
)
131 wx
.HelpProvider_Set(wx
.SimpleHelpProvider())
133 self
.Model
= FrameworkDatabaseModel()
139 "The set of packages that are active in the current WORKSPACE."
142 PlatformsHelpText
= (
143 "The set of platforms that are active in the current WORKSPACE."
146 InvalidPackagesHelpText
= (
147 "The set of packages that are in Framework Database, but not in the current WORKSPACE."
150 InvalidPlatformsHelpText
= (
151 "The set of platforms that are in Framework Database, but not in the current WORKSPACE."
157 self
.StatusBar
= self
.CreateStatusBar()
162 MenuBar
= wx
.MenuBar()
165 NewMenuItem
= FileMenu
.Append(-1, "&New\tCtrl+N", "New FrameworkDatabase.db")
166 SaveMenuItem
= FileMenu
.Append(-1, "&Save\tCtrl+S", "Save FramdworkDatabase.db")
167 SaveAsMenuItem
= FileMenu
.Append(-1, "Save &As...", "Save FrameworkDatabase.db as...")
168 RevertMenuItem
= FileMenu
.Append(-1, "&Revert", "Revert to the original FrameworkDatabase.db")
169 ScanMenuItem
= FileMenu
.Append(-1, "Scan &WORKSPACE\tCtrl+W", "Scan WORKSPACE for additional packages and platforms")
170 ScanAndSyncMenuItem
= FileMenu
.Append(-1, "Scan &WORKSPACE and Sync\tCtrl+W", "Scan WORKSPACE for additional packages and platforms and sync FramdworkDatabase.db")
171 ExitMenuItem
= FileMenu
.Append(-1, "E&xit\tAlt+F4", "Exit Framework Database Tool")
172 MenuBar
.Append(FileMenu
, "&File")
173 self
.Bind(wx
.EVT_MENU
, self
.OnSaveClick
, SaveMenuItem
)
174 self
.Bind(wx
.EVT_MENU
, self
.OnSaveAsClick
, SaveAsMenuItem
)
175 self
.Bind(wx
.EVT_MENU
, self
.OnRevertClick
, RevertMenuItem
)
176 self
.Bind(wx
.EVT_MENU
, self
.OnScanClick
, ScanMenuItem
)
177 self
.Bind(wx
.EVT_MENU
, self
.OnScanAndSyncClick
, ScanAndSyncMenuItem
)
178 self
.Bind(wx
.EVT_MENU
, self
.OnExitClick
, ExitMenuItem
)
181 SelectAllPlatformsMenuItem
= EditMenu
.Append (-1, "Select All Platforms", "Select all platforms")
182 ClearAllPlatformsMenuItem
= EditMenu
.Append (-1, "Clear All Platforms", "Clear all platforms")
183 SelectAllPackagesMenuItem
= EditMenu
.Append (-1, "Select All Packages", "Select all packages")
184 ClearAllPackagesMenuItem
= EditMenu
.Append (-1, "Clear All Packages", "Clear all packages")
185 SelectAllInvalidPlatformsMenuItem
= EditMenu
.Append (-1, "Select All Invalid Platforms", "Select all invalid platforms")
186 ClearAllInvalidPlatformsMenuItem
= EditMenu
.Append (-1, "Clear All Invalid Platforms", "Clear all invalid platforms")
187 SelectAllInvalidPackagesMenuItem
= EditMenu
.Append (-1, "Select All Invalid Packages", "Select all invalid packages")
188 ClearAllInvalidPackagesMenuItem
= EditMenu
.Append (-1, "Clear All Invalid Packages", "Clear all invalid packages")
189 MenuBar
.Append(EditMenu
, "&Edit")
190 self
.Bind(wx
.EVT_MENU
, self
.OnSelectAllPlatformsClick
, SelectAllPlatformsMenuItem
)
191 self
.Bind(wx
.EVT_MENU
, self
.OnClearAllPlatformsClick
, ClearAllPlatformsMenuItem
)
192 self
.Bind(wx
.EVT_MENU
, self
.OnSelectAllPackagesClick
, SelectAllPackagesMenuItem
)
193 self
.Bind(wx
.EVT_MENU
, self
.OnClearAllPackagesClick
, ClearAllPackagesMenuItem
)
194 self
.Bind(wx
.EVT_MENU
, self
.OnSelectAllInvalidPlatformsClick
, SelectAllInvalidPlatformsMenuItem
)
195 self
.Bind(wx
.EVT_MENU
, self
.OnClearAllInvalidPlatformsClick
, ClearAllInvalidPlatformsMenuItem
)
196 self
.Bind(wx
.EVT_MENU
, self
.OnSelectAllInvalidPackagesClick
, SelectAllInvalidPackagesMenuItem
)
197 self
.Bind(wx
.EVT_MENU
, self
.OnClearAllInvalidPackagesClick
, ClearAllInvalidPackagesMenuItem
)
200 RefreshMenuItem
= ViewMenu
.Append (-1, "&Refresh\tF5", "Rescan FrameworkDatabase.db")
201 ShowToolBarMenuItem
= ViewMenu
.AppendCheckItem (-1, "Show &Toolbar", "Shows or hides the toolbar")
202 ShowToolBarMenuItem
.Check(True)
203 MenuBar
.Append(ViewMenu
, "&View")
204 self
.Bind(wx
.EVT_MENU
, self
.OnViewRefreshClick
, RefreshMenuItem
)
205 self
.Bind(wx
.EVT_MENU
, self
.OnShowToolBarClick
, ShowToolBarMenuItem
)
208 AboutMenuItem
= HelpMenu
.Append (-1, "&About...", "About")
209 MenuBar
.Append(HelpMenu
, "&Help")
210 self
.Bind(wx
.EVT_MENU
, self
.OnAboutClick
, AboutMenuItem
)
212 self
.SetMenuBar (MenuBar
)
217 self
.ShowToolBar
= False
218 self
.OnShowToolBarClick(self
)
221 # Target, ToolChain, and Arch Check List Boxes
223 PackagesLabel
= wx
.StaticText(panel
, -1, 'Packages')
224 PackagesLabel
.SetFont(wx
.Font(12, wx
.FONTFAMILY_DEFAULT
, wx
.NORMAL
, wx
.FONTWEIGHT_BOLD
))
225 PackagesLabel
.SetHelpText(PackagesHelpText
)
227 PlatformsLabel
= wx
.StaticText(panel
, -1, 'Platforms')
228 PlatformsLabel
.SetFont(wx
.Font(12, wx
.FONTFAMILY_DEFAULT
, wx
.NORMAL
, wx
.FONTWEIGHT_BOLD
))
229 PlatformsLabel
.SetHelpText(PlatformsHelpText
)
234 self
.SelectAllPackagesButton
= wx
.Button(panel
, -1, 'Select All')
235 self
.ClearAllPackagesButton
= wx
.Button(panel
, -1, 'Clear All')
236 self
.SelectAllPackagesButton
.Bind (wx
.EVT_BUTTON
, self
.OnSelectAllPackagesClick
)
237 self
.ClearAllPackagesButton
.Bind (wx
.EVT_BUTTON
, self
.OnClearAllPackagesClick
)
239 self
.PackagesCheckListBox
= wx
.CheckListBox(panel
, -1)
240 self
.PackagesCheckListBox
.Bind(wx
.EVT_CHECKLISTBOX
, self
.OnPackagesCheckListClick
)
241 self
.PackagesCheckListBox
.Bind(wx
.EVT_SET_FOCUS
, self
.OnPackagesSetFocus
)
242 self
.PackagesCheckListBox
.Bind(wx
.EVT_KILL_FOCUS
, self
.OnPackagesKillFocus
)
243 self
.PackagesCheckListBox
.SetHelpText(PackagesHelpText
)
246 self
.SelectAllPlatformsButton
= wx
.Button(panel
, -1, 'Select All')
247 self
.ClearAllPlatformsButton
= wx
.Button(panel
, -1, 'Clear All')
248 self
.SelectAllPlatformsButton
.Bind(wx
.EVT_BUTTON
, self
.OnSelectAllPlatformsClick
)
249 self
.ClearAllPlatformsButton
.Bind (wx
.EVT_BUTTON
, self
.OnClearAllPlatformsClick
)
251 self
.PlatformsCheckListBox
= wx
.CheckListBox(panel
, -1)
252 self
.PlatformsCheckListBox
.Bind(wx
.EVT_CHECKLISTBOX
, self
.OnPlatformsCheckListClick
)
253 self
.PlatformsCheckListBox
.Bind(wx
.EVT_SET_FOCUS
, self
.OnPlatformsSetFocus
)
254 self
.PlatformsCheckListBox
.Bind(wx
.EVT_KILL_FOCUS
, self
.OnPlatformsKillFocus
)
255 self
.PlatformsCheckListBox
.SetHelpText(PlatformsHelpText
)
257 InvalidPackagesLabel
= wx
.StaticText(panel
, -1, 'Invalid Packages')
258 InvalidPackagesLabel
.SetFont(wx
.Font(12, wx
.FONTFAMILY_DEFAULT
, wx
.NORMAL
, wx
.FONTWEIGHT_BOLD
))
259 InvalidPackagesLabel
.SetHelpText(InvalidPackagesHelpText
)
261 InvalidPlatformsLabel
= wx
.StaticText(panel
, -1, 'Invalid Platforms')
262 InvalidPlatformsLabel
.SetFont(wx
.Font(12, wx
.FONTFAMILY_DEFAULT
, wx
.NORMAL
, wx
.FONTWEIGHT_BOLD
))
263 InvalidPlatformsLabel
.SetHelpText(InvalidPlatformsHelpText
)
265 self
.SelectAllInvalidPackagesButton
= wx
.Button(panel
, -1, 'Select All')
266 self
.ClearAllInvalidPackagesButton
= wx
.Button(panel
, -1, 'Clear All')
267 self
.SelectAllInvalidPackagesButton
.Bind (wx
.EVT_BUTTON
, self
.OnSelectAllInvalidPackagesClick
)
268 self
.ClearAllInvalidPackagesButton
.Bind (wx
.EVT_BUTTON
, self
.OnClearAllInvalidPackagesClick
)
270 self
.InvalidPackagesCheckListBox
= wx
.CheckListBox(panel
, -1)
271 self
.InvalidPackagesCheckListBox
.Bind(wx
.EVT_CHECKLISTBOX
, self
.OnInvalidPackagesCheckListClick
)
272 self
.InvalidPackagesCheckListBox
.Bind(wx
.EVT_SET_FOCUS
, self
.OnInvalidPackagesSetFocus
)
273 self
.InvalidPackagesCheckListBox
.Bind(wx
.EVT_KILL_FOCUS
, self
.OnInvalidPackagesKillFocus
)
274 self
.InvalidPackagesCheckListBox
.SetHelpText(PackagesHelpText
)
276 self
.SelectAllInvalidPlatformsButton
= wx
.Button(panel
, -1, 'Select All')
277 self
.ClearAllInvalidPlatformsButton
= wx
.Button(panel
, -1, 'Clear All')
278 self
.SelectAllInvalidPlatformsButton
.Bind(wx
.EVT_BUTTON
, self
.OnSelectAllInvalidPlatformsClick
)
279 self
.ClearAllInvalidPlatformsButton
.Bind (wx
.EVT_BUTTON
, self
.OnClearAllInvalidPlatformsClick
)
281 self
.InvalidPlatformsCheckListBox
= wx
.CheckListBox(panel
, -1)
282 self
.InvalidPlatformsCheckListBox
.Bind(wx
.EVT_CHECKLISTBOX
, self
.OnInvalidPlatformsCheckListClick
)
283 self
.InvalidPlatformsCheckListBox
.Bind(wx
.EVT_SET_FOCUS
, self
.OnInvalidPlatformsSetFocus
)
284 self
.InvalidPlatformsCheckListBox
.Bind(wx
.EVT_KILL_FOCUS
, self
.OnInvalidPlatformsKillFocus
)
285 self
.InvalidPlatformsCheckListBox
.SetHelpText(PlatformsHelpText
)
288 # Define layout using sizers
290 self
.mainSizer
= wx
.BoxSizer(wx
.VERTICAL
)
292 listSizer
= wx
.GridBagSizer(hgap
=5, vgap
=5)
293 listSizer
.Add(PackagesLabel
, pos
=(0,0), span
=(1,2), flag
=wx
.ALIGN_CENTER
)
294 listSizer
.Add(PlatformsLabel
, pos
=(0,2), span
=(1,2), flag
=wx
.ALIGN_CENTER
)
295 listSizer
.Add(self
.SelectAllPackagesButton
, pos
=(1,0), flag
=wx
.ALIGN_CENTER
)
296 listSizer
.Add(self
.ClearAllPackagesButton
, pos
=(1,1), flag
=wx
.ALIGN_CENTER
)
297 listSizer
.Add(self
.SelectAllPlatformsButton
, pos
=(1,2), flag
=wx
.ALIGN_CENTER
)
298 listSizer
.Add(self
.ClearAllPlatformsButton
, pos
=(1,3), flag
=wx
.ALIGN_CENTER
)
299 listSizer
.Add(self
.PackagesCheckListBox
, pos
=(2,0), span
=(1,2), flag
=wx
.ALL | wx
.EXPAND
)
300 listSizer
.Add(self
.PlatformsCheckListBox
, pos
=(2,2), span
=(1,2), flag
=wx
.ALL | wx
.EXPAND
)
302 listSizer
.Add(InvalidPackagesLabel
, pos
=(3,0), span
=(1,2), flag
=wx
.ALIGN_CENTER
)
303 listSizer
.Add(InvalidPlatformsLabel
, pos
=(3,2), span
=(1,2), flag
=wx
.ALIGN_CENTER
)
304 listSizer
.Add(self
.SelectAllInvalidPackagesButton
, pos
=(4,0), flag
=wx
.ALIGN_CENTER
)
305 listSizer
.Add(self
.ClearAllInvalidPackagesButton
, pos
=(4,1), flag
=wx
.ALIGN_CENTER
)
306 listSizer
.Add(self
.SelectAllInvalidPlatformsButton
, pos
=(4,2), flag
=wx
.ALIGN_CENTER
)
307 listSizer
.Add(self
.ClearAllInvalidPlatformsButton
, pos
=(4,3), flag
=wx
.ALIGN_CENTER
)
308 listSizer
.Add(self
.InvalidPackagesCheckListBox
, pos
=(5,0), span
=(1,2), flag
=wx
.ALL | wx
.EXPAND
)
309 listSizer
.Add(self
.InvalidPlatformsCheckListBox
, pos
=(5,2), span
=(1,2), flag
=wx
.ALL | wx
.EXPAND
)
311 listSizer
.AddGrowableRow(2)
312 listSizer
.AddGrowableRow(5)
313 listSizer
.AddGrowableCol(0)
314 listSizer
.AddGrowableCol(1)
315 listSizer
.AddGrowableCol(2)
316 listSizer
.AddGrowableCol(3)
318 self
.mainSizer
.Add (listSizer
, wx
.EXPAND | wx
.ALL
, wx
.EXPAND | wx
.ALL
, 10)
320 panel
.SetSizer (self
.mainSizer
)
322 self
.OnViewRefreshClick(self
)
324 def CheckListFocus(self
, CheckListBox
, Set
):
326 while Index
< CheckListBox
.GetCount():
327 CheckListBox
.SetSelection(Index
, False)
329 if Set
and CheckListBox
.GetCount() > 0:
330 CheckListBox
.SetSelection(0, True)
332 def CheckListClick(self
, CheckListBox
, Database
):
334 Database
['EnabledSettings'] = {}
335 while Index
< CheckListBox
.GetCount():
336 if CheckListBox
.IsChecked(Index
):
337 for Item
in Database
['PossibleSettings']:
338 if Database
['PossibleSettings'][Item
] == CheckListBox
.GetString(Index
):
339 Database
['EnabledSettings'][Item
] = Database
['PossibleSettings'][Item
]
342 def OnPackagesCheckListClick(self
, event
):
343 self
.CheckListClick(self
.PackagesCheckListBox
, self
.Model
.Database
['Package']['Valid'])
345 def OnPackagesSetFocus(self
, event
):
346 self
.CheckListFocus(self
.PackagesCheckListBox
, True)
348 def OnPackagesKillFocus(self
, event
):
349 self
.CheckListFocus(self
.PackagesCheckListBox
, False)
351 def OnPlatformsCheckListClick(self
, event
):
352 self
.CheckListClick(self
.PlatformsCheckListBox
, self
.Model
.Database
['Platform']['Valid'])
354 def OnPlatformsSetFocus(self
, event
):
355 self
.CheckListFocus(self
.PlatformsCheckListBox
, True)
357 def OnPlatformsKillFocus(self
, event
):
358 self
.CheckListFocus(self
.PlatformsCheckListBox
, False)
360 def OnInvalidPackagesCheckListClick(self
, event
):
361 self
.CheckListClick(self
.InvalidPackagesCheckListBox
, self
.Model
.Database
['Package']['Invalid'])
363 def OnInvalidPackagesSetFocus(self
, event
):
364 self
.CheckListFocus(self
.InvalidPackagesCheckListBox
, True)
366 def OnInvalidPackagesKillFocus(self
, event
):
367 self
.CheckListFocus(self
.InvalidPackagesCheckListBox
, False)
369 def OnInvalidPlatformsCheckListClick(self
, event
):
370 self
.CheckListClick(self
.InvalidPlatformsCheckListBox
, self
.Model
.Database
['Platform']['Invalid'])
372 def OnInvalidPlatformsSetFocus(self
, event
):
373 self
.CheckListFocus(self
.InvalidPlatformsCheckListBox
, True)
375 def OnInvalidPlatformsKillFocus(self
, event
):
376 self
.CheckListFocus(self
.InvalidPlatformsCheckListBox
, False)
378 def OnRevertClick(self
, event
):
379 self
.Model
.RevertModel()
380 self
.StatusBar
.SetFocus()
381 self
.OnRefreshClick(self
)
383 def RefreshCheckListBox(self
, CheckListBox
, SelectAllButton
, ClearAllButton
, Database
):
385 for Item
in Database
['PossibleSettings']:
386 NameList
.append(Database
['PossibleSettings'][Item
])
388 CheckListBox
.Set(NameList
)
391 while Index
< CheckListBox
.GetCount():
392 String
= CheckListBox
.GetString(Index
)
393 if len(String
) > len(MaximumString
):
394 MaximumString
= String
396 for Item
in Database
['EnabledSettings']:
397 if String
== Database
['EnabledSettings'][Item
]:
400 CheckListBox
.Check(Index
, True)
402 CheckListBox
.Check(Index
, False)
404 Extents
= CheckListBox
.GetFullTextExtent (MaximumString
)
405 CheckListBox
.SetMinSize((Extents
[0] + 30,(CheckListBox
.GetCount()+2) * (Extents
[1]+Extents
[2])))
407 CheckListBox
.Disable()
408 SelectAllButton
.Disable()
409 ClearAllButton
.Disable()
411 CheckListBox
.Enable()
412 SelectAllButton
.Enable()
413 ClearAllButton
.Enable()
415 def OnRefreshClick(self
, event
):
416 self
.Model
.RefreshModel()
417 self
.RefreshCheckListBox (self
.PackagesCheckListBox
, self
.SelectAllPackagesButton
, self
.ClearAllPackagesButton
, self
.Model
.Database
['Package']['Valid'])
418 self
.RefreshCheckListBox (self
.PlatformsCheckListBox
, self
.SelectAllPlatformsButton
, self
.ClearAllPlatformsButton
, self
.Model
.Database
['Platform']['Valid'])
419 self
.RefreshCheckListBox (self
.InvalidPackagesCheckListBox
, self
.SelectAllInvalidPackagesButton
, self
.ClearAllInvalidPackagesButton
, self
.Model
.Database
['Package']['Invalid'])
420 self
.RefreshCheckListBox (self
.InvalidPlatformsCheckListBox
, self
.SelectAllInvalidPlatformsButton
, self
.ClearAllInvalidPlatformsButton
, self
.Model
.Database
['Platform']['Invalid'])
421 self
.mainSizer
.SetSizeHints(self
)
422 self
.mainSizer
.Fit(self
)
425 def OnViewRefreshClick(self
, event
):
426 self
.Model
.RescanModel()
427 self
.StatusBar
.SetFocus()
428 self
.OnRefreshClick(self
)
430 def AddTool (self
, Handler
, ArtId
, Label
, HelpText
):
431 Tool
= self
.ToolBar
.AddSimpleTool(
433 wx
.ArtProvider
.GetBitmap(ArtId
, wx
.ART_TOOLBAR
, self
.ToolSize
),
437 self
.Bind(wx
.EVT_MENU
, Handler
, Tool
)
439 def OnShowToolBarClick(self
, event
):
441 self
.ShowToolBar
= False
442 self
.ToolBar
.Destroy()
444 self
.ShowToolBar
= True
445 self
.ToolBar
= self
.CreateToolBar()
446 self
.ToolSize
= (24,24)
447 self
.ToolBar
.SetToolBitmapSize(self
.ToolSize
)
448 self
.AddTool (self
.OnNewClick
, wx
.ART_NEW
, "New", "New FrameworkDatabase.db")
449 self
.AddTool (self
.OnScanAndSyncClick
, wx
.ART_HARDDISK
, "Scan WORKSPACE and Sync", "Scan WORKSPACE for new Packages and Platforms and sync FrameworkDatabase.db")
450 self
.AddTool (self
.OnSaveClick
, wx
.ART_FILE_SAVE
, "Save", "Save FrameworkDatabase.db")
451 self
.AddTool (self
.OnSaveAsClick
, wx
.ART_FILE_SAVE_AS
, "Save As...", "Save FrameworkDatabase.db as...")
452 self
.AddTool (self
.OnRevertClick
, wx
.ART_UNDO
, "Revert", "Revert to original FrameworkDatabase.db")
453 self
.AddTool (self
.OnHelpClick
, wx
.ART_HELP
, "Help", "Context Sensitive Help")
454 self
.AddTool (self
.OnExitClick
, wx
.ART_QUIT
, "Exit", "Exit EDK II Build System Framework Database Utility")
455 self
.ToolBar
.Realize()
457 def OnNewClick(self
, event
):
458 self
.Model
.NewModel()
459 self
.OnRefreshClick(self
)
461 def ScanDirectory(self
, Data
, DirName
, FilesInDir
):
462 WorkspaceDirName
= self
.Model
.WorkspaceRelativePath(DirName
)
463 self
.StatusBar
.SetStatusText('Scanning: ' + WorkspaceDirName
)
465 for File
in FilesInDir
:
467 RemoveList
.insert(0, File
)
468 for File
in RemoveList
:
469 FilesInDir
.remove(File
)
470 for File
in FilesInDir
:
471 if os
.path
.splitext(File
)[1].lower() == '.spd':
472 self
.Model
.AddFile (WorkspaceDirName
, File
, 'Package', False)
473 self
.OnRefreshClick(self
)
474 if os
.path
.splitext(File
)[1].lower() == '.fpd':
475 self
.Model
.AddFile (WorkspaceDirName
, File
, 'Platform', False)
476 self
.OnRefreshClick(self
)
478 def OnScanClick(self
, event
):
479 os
.path
.walk(self
.Model
.WorkspaceFile(''), self
.ScanDirectory
, None)
480 self
.StatusBar
.SetStatusText('Scanning: Complete')
481 self
.StatusBar
.SetFocus()
482 self
.OnRefreshClick(self
)
484 def OnScanAndSyncClick(self
, event
):
485 self
.OnSelectAllPackagesClick(self
)
486 self
.OnSelectAllPlatformsClick(self
)
487 self
.OnClearAllInvalidPackagesClick(self
)
488 self
.OnClearAllInvalidPlatformsClick(self
)
489 self
.OnScanClick(self
)
490 self
.OnSelectAllPackagesClick(self
)
491 self
.OnSelectAllPlatformsClick(self
)
492 self
.OnClearAllInvalidPackagesClick(self
)
493 self
.OnClearAllInvalidPlatformsClick(self
)
495 def OnSelectAllPackagesClick(self
, event
):
496 self
.Model
.Database
['Package']['Valid']['EnabledSettings'] = self
.Model
.Database
['Package']['Valid']['PossibleSettings']
497 self
.OnRefreshClick(self
)
499 def OnClearAllPackagesClick(self
, event
):
500 self
.Model
.Database
['Package']['Valid']['EnabledSettings'] = {}
501 self
.OnRefreshClick(self
)
503 def OnSelectAllPlatformsClick(self
, event
):
504 self
.Model
.Database
['Platform']['Valid']['EnabledSettings'] = self
.Model
.Database
['Platform']['Valid']['PossibleSettings']
505 self
.OnRefreshClick(self
)
507 def OnClearAllPlatformsClick(self
, event
):
508 self
.Model
.Database
['Platform']['Valid']['EnabledSettings'] = {}
509 self
.OnRefreshClick(self
)
511 def OnSelectAllInvalidPackagesClick(self
, event
):
512 self
.Model
.Database
['Package']['Invalid']['EnabledSettings'] = self
.Model
.Database
['Package']['Invalid']['PossibleSettings']
513 self
.OnRefreshClick(self
)
515 def OnClearAllInvalidPackagesClick(self
, event
):
516 self
.Model
.Database
['Package']['Invalid']['EnabledSettings'] = {}
517 self
.OnRefreshClick(self
)
519 def OnSelectAllInvalidPlatformsClick(self
, event
):
520 self
.Model
.Database
['Platform']['Invalid']['EnabledSettings'] = self
.Model
.Database
['Platform']['Invalid']['PossibleSettings']
521 self
.OnRefreshClick(self
)
523 def OnClearAllInvalidPlatformsClick(self
, event
):
524 self
.Model
.Database
['Platform']['Invalid']['EnabledSettings'] = {}
525 self
.OnRefreshClick(self
)
527 def OnSaveClick(self
, event
):
528 self
.Model
.SaveModel()
530 def OnSaveAsClick(self
, event
):
531 wildcard
= "Text Documents (*.db)|*.db|" \
532 "All files (*.*)|*.*"
533 dialog
= wx
.FileDialog (None, 'Save As', self
.Model
.WorkspaceFile('Tools/Conf'), '', wildcard
, wx
.SAVE | wx
.OVERWRITE_PROMPT
)
534 if dialog
.ShowModal() == wx
.ID_OK
:
535 FrameworkDatabaseDbFile
= self
.Model
.WorkspaceRelativePath(dialog
.GetPath())
536 if FrameworkDatabaseDbFile
!= '':
537 self
.Model
.SaveModel(FrameworkDatabaseDbFile
)
540 def OnExitClick(self
, event
):
541 if self
.Model
.ModelModified():
542 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
)
543 Status
= dialog
.ShowModal()
545 if Status
== wx
.ID_YES
:
546 self
.OnSaveClick (self
)
547 elif Status
== wx
.ID_CANCEL
:
549 self
.Model
.CloseModel()
552 def OnHelpClick(self
, event
):
553 wx
.ContextHelp().BeginContextHelp()
555 def OnAboutClick(self
, event
):
556 AboutInfo
= wx
.AboutDialogInfo()
557 AboutInfo
.Name
= 'EDK II Build System Framework Database Utility'
558 AboutInfo
.Version
= '0.3'
559 AboutInfo
.Copyright
= 'Copyright (c) 2006, Intel Corporation'
560 AboutInfo
.Description
= """
561 The EDK II Build System Framework Database Utility maintains FrameworkDatabase.db
562 settings in an EDK II Workspace."""
563 AboutInfo
.WebSite
= ("http://tianocore.org", "Tiano Core home page")
564 AboutInfo
.License
= """
565 All rights reserved. This program and the accompanying materials are
566 licensed and made available under the terms and conditions of the BSD
567 License which accompanies this distribution. The full text of the
568 license may be found at http://opensource.org/licenses/bsd-license.php
570 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
571 BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND,
572 EITHER EXPRESS OR IMPLIED."""
573 if self
.Model
.Icon
!= None:
574 AboutInfo
.Icon
= self
.Model
.Icon
575 wx
.AboutBox(AboutInfo
)
577 if __name__
== '__main__':
578 app
= wx
.PySimpleApp()