92 lines
2.5 KiB
Python
92 lines
2.5 KiB
Python
from threading import Thread
|
|
from .utils import Register
|
|
from rscder.plugins.basic import BasicPlugin
|
|
from PyQt5.QtWidgets import QGroupBox, QWidget, QComboBox, QVBoxLayout
|
|
|
|
|
|
class MISCPlugin(BasicPlugin):
|
|
|
|
@staticmethod
|
|
def info():
|
|
return {
|
|
'name': 'MISC Plugin',
|
|
'description': '基本开发工具',
|
|
'author': 'Wangtong',
|
|
'version': '1.0.0',
|
|
}
|
|
|
|
def set_action(self):
|
|
pass
|
|
|
|
|
|
class AlgFrontend(object):
|
|
|
|
@staticmethod
|
|
def get_name():
|
|
return None
|
|
|
|
@staticmethod
|
|
def get_icon():
|
|
return None
|
|
|
|
@staticmethod
|
|
def get_widget(parent=None):
|
|
return QWidget(parent)
|
|
|
|
@staticmethod
|
|
def get_params(widget=None):
|
|
return dict()
|
|
|
|
@staticmethod
|
|
def run_alg(*args, **kargs):
|
|
pass
|
|
|
|
|
|
class AlgSelectWidget(QGroupBox):
|
|
|
|
def __init__(self, parent= None, registery:Register = None) -> None:
|
|
super().__init__(parent)
|
|
self.reg = registery
|
|
if registery is None:
|
|
return
|
|
self.setTitle(registery.name)
|
|
self.selectbox = QComboBox(self)
|
|
self.selectbox.addItem('--', None)
|
|
for key in self.reg.keys():
|
|
alg:AlgFrontend = self.reg[key]
|
|
if alg.get_name() is None:
|
|
name = key
|
|
else:
|
|
name = alg.get_name()
|
|
self.selectbox.addItem(name, key)
|
|
|
|
self.vbox = QVBoxLayout(self)
|
|
self.vbox.addWidget(self.selectbox)
|
|
|
|
self.params_widget = QWidget()
|
|
self.vbox.addWidget(self.params_widget)
|
|
|
|
self.selectbox.currentIndexChanged.connect(self.on_changed)
|
|
|
|
def on_changed(self, index):
|
|
if index == 0:
|
|
self.alg = None
|
|
self.params_widget.setParent(None)
|
|
self.vbox.removeWidget(self.params_widget)
|
|
self.params_widget = QWidget(self)
|
|
self.vbox.addWidget(self.params_widget)
|
|
return
|
|
|
|
self.alg:AlgFrontend = self.reg[self.selectbox.itemData(index)]
|
|
self.params_widget.setParent(None)
|
|
self.vbox.removeWidget(self.params_widget)
|
|
self.params_widget = self.alg.get_widget(self)
|
|
self.vbox.addWidget(self.params_widget)
|
|
|
|
|
|
|
|
def get_alg_and_params(self):
|
|
if self.selectbox.currentIndex() == 0:
|
|
return None, None
|
|
|
|
return self.alg, self.alg.get_params(self.params_widget) |