from jmwright 72b67da

This commit is contained in:
jdegenstein
2022-09-16 13:52:44 -05:00
committed by GitHub
parent 04978a6f78
commit fffb6db0f2
50 changed files with 14900 additions and 0 deletions

134
cq_editor/utils.py Normal file
View File

@@ -0,0 +1,134 @@
import requests
from pkg_resources import parse_version
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QFileDialog, QMessageBox
DOCK_POSITIONS = {'right' : QtCore.Qt.RightDockWidgetArea,
'left' : QtCore.Qt.LeftDockWidgetArea,
'top' : QtCore.Qt.TopDockWidgetArea,
'bottom' : QtCore.Qt.BottomDockWidgetArea}
def layout(parent,items,
top_widget = None,
layout_type = QtWidgets.QVBoxLayout,
margin = 2,
spacing = 0):
if not top_widget:
top_widget = QtWidgets.QWidget(parent)
top_widget_was_none = True
else:
top_widget_was_none = False
layout = layout_type(top_widget)
top_widget.setLayout(layout)
for item in items: layout.addWidget(item)
layout.setSpacing(spacing)
layout.setContentsMargins(margin,margin,margin,margin)
if top_widget_was_none:
return top_widget
else:
return layout
def splitter(items,
stretch_factors = None,
orientation=QtCore.Qt.Horizontal):
sp = QtWidgets.QSplitter(orientation)
for item in items: sp.addWidget(item)
if stretch_factors:
for i,s in enumerate(stretch_factors):
sp.setStretchFactor(i,s)
return sp
def dock(widget,
title,
parent,
allowedAreas = QtCore.Qt.AllDockWidgetAreas,
defaultArea = 'right',
name=None,
icon = None):
dock = QtWidgets.QDockWidget(title,parent,objectName=title)
if name: dock.setObjectName(name)
if icon: dock.toggleViewAction().setIcon(icon)
dock.setAllowedAreas(allowedAreas)
dock.setWidget(widget)
action = dock.toggleViewAction()
action.setText(title)
dock.setFeatures(QtWidgets.QDockWidget.DockWidgetFeatures(\
QtWidgets.QDockWidget.AllDockWidgetFeatures))
parent.addDockWidget(DOCK_POSITIONS[defaultArea],
dock)
return dock
def add_actions(menu,actions):
if len(actions) > 0:
menu.addActions(actions)
menu.addSeparator()
def open_url(url):
QDesktopServices.openUrl(QUrl(url))
def about_dialog(parent,title,text):
QtWidgets.QMessageBox.about(parent,title,text)
def get_save_filename(suffix):
rv,_ = QFileDialog.getSaveFileName(filter='*.{}'.format(suffix))
if rv != '' and not rv.endswith(suffix): rv += '.'+suffix
return rv
def get_open_filename(suffix, curr_dir):
rv,_ = QFileDialog.getOpenFileName(directory=curr_dir, filter='*.{}'.format(suffix))
if rv != '' and not rv.endswith(suffix): rv += '.'+suffix
return rv
def check_gtihub_for_updates(parent,
mod,
github_org='cadquery',
github_proj='cadquery'):
url = f'https://api.github.com/repos/{github_org}/{github_proj}/releases'
resp = requests.get(url).json()
newer = [el['tag_name'] for el in resp if not el['draft'] and \
parse_version(el['tag_name']) > parse_version(mod.__version__)]
if newer:
title='Updates available'
text=f'There are newer versions of {github_proj} ' \
f'available on github:\n' + '\n'.join(newer)
else:
title='No updates available'
text=f'You are already using the latest version of {github_proj}'
QtWidgets.QMessageBox.about(parent,title,text)
def confirm(parent,title,msg):
rv = QMessageBox.question(parent, title, msg, QMessageBox.Yes, QMessageBox.No)
return True if rv == QMessageBox.Yes else False