0321 from macmini
This commit is contained in:
58
3rdparty/plugins/org_openscopeproject_InteractiveHtmlBom/__init__.py
vendored
Normal file
58
3rdparty/plugins/org_openscopeproject_InteractiveHtmlBom/__init__.py
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
|
||||
import wx
|
||||
import wx.aui
|
||||
|
||||
|
||||
def check_for_bom_button():
|
||||
# From Miles McCoo's blog
|
||||
# https://kicad.mmccoo.com/2017/03/05/adding-your-own-command-buttons-to-the-pcbnew-gui/
|
||||
def find_pcbnew_window():
|
||||
windows = wx.GetTopLevelWindows()
|
||||
pcbneww = [w for w in windows if "pcbnew" in w.GetTitle().lower()]
|
||||
if len(pcbneww) != 1:
|
||||
return None
|
||||
return pcbneww[0]
|
||||
|
||||
def callback(_):
|
||||
plugin.Run()
|
||||
|
||||
path = os.path.dirname(__file__)
|
||||
while not wx.GetApp():
|
||||
time.sleep(1)
|
||||
bm = wx.Bitmap(path + '/icon.png', wx.BITMAP_TYPE_PNG)
|
||||
button_wx_item_id = 0
|
||||
|
||||
from pcbnew import ID_H_TOOLBAR
|
||||
while True:
|
||||
time.sleep(1)
|
||||
pcbnew_window = find_pcbnew_window()
|
||||
if not pcbnew_window:
|
||||
continue
|
||||
|
||||
top_tb = pcbnew_window.FindWindowById(ID_H_TOOLBAR)
|
||||
if button_wx_item_id == 0 or not top_tb.FindTool(button_wx_item_id):
|
||||
top_tb.AddSeparator()
|
||||
button_wx_item_id = wx.NewId()
|
||||
top_tb.AddTool(button_wx_item_id, "iBOM", bm,
|
||||
"Generate interactive BOM", wx.ITEM_NORMAL)
|
||||
top_tb.Bind(wx.EVT_TOOL, callback, id=button_wx_item_id)
|
||||
top_tb.Realize()
|
||||
|
||||
|
||||
if (not os.environ.get('INTERACTIVE_HTML_BOM_CLI_MODE', False) and
|
||||
not os.path.basename(sys.argv[0]).startswith('generate_interactive_bom')):
|
||||
from .ecad.kicad import InteractiveHtmlBomPlugin
|
||||
|
||||
plugin = InteractiveHtmlBomPlugin()
|
||||
plugin.register()
|
||||
|
||||
# Add a button the hacky way if plugin button is not supported
|
||||
# in pcbnew, unless this is linux.
|
||||
if not plugin.pcbnew_icon_support and not sys.platform.startswith('linux'):
|
||||
t = threading.Thread(target=check_for_bom_button)
|
||||
t.daemon = True
|
||||
t.start()
|
Reference in New Issue
Block a user