97 lines
3.8 KiB
Python
97 lines
3.8 KiB
Python
import inspect
|
|
import os
|
|
from typing import List, Tuple, Union
|
|
from specklepy_qt_ui.logger import logToUser
|
|
|
|
from qgis.PyQt import QtWidgets, uic, QtCore
|
|
from qgis.PyQt.QtCore import pyqtSignal
|
|
from specklepy.api.client import SpeckleClient
|
|
from specklepy.api.credentials import Account, get_local_accounts #, StreamWrapper
|
|
|
|
# This loads your .ui file so that PyQt can populate your plugin with the elements from Qt Designer
|
|
FORM_CLASS, _ = uic.loadUiType(
|
|
os.path.join(os.path.join(os.path.dirname(__file__), "ui", "create_stream.ui") )
|
|
)
|
|
|
|
class CreateStreamModalDialog(QtWidgets.QWidget, FORM_CLASS):
|
|
|
|
name_field: QtWidgets.QLineEdit = None
|
|
description_field: QtWidgets.QLineEdit = None
|
|
dialog_button_box: QtWidgets.QDialogButtonBox = None
|
|
accounts_dropdown: QtWidgets.QComboBox
|
|
public_toggle: QtWidgets.QCheckBox
|
|
|
|
speckle_client: Union[SpeckleClient, None] = None
|
|
|
|
#Events
|
|
handleStreamCreate = pyqtSignal(Account, str, str, bool)
|
|
|
|
def __init__(self, parent=None, speckle_client: SpeckleClient = None):
|
|
super(CreateStreamModalDialog,self).__init__(parent,QtCore.Qt.WindowStaysOnTopHint)
|
|
self.speckle_client = speckle_client
|
|
self.setupUi(self)
|
|
self.setWindowTitle("Create New Stream")
|
|
|
|
self.name_field.textChanged.connect(self.nameCheck)
|
|
self.dialog_button_box.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(True)
|
|
self.dialog_button_box.button(QtWidgets.QDialogButtonBox.Ok).clicked.connect(self.onOkClicked)
|
|
self.dialog_button_box.button(QtWidgets.QDialogButtonBox.Cancel).clicked.connect(self.onCancelClicked)
|
|
self.accounts_dropdown.currentIndexChanged.connect(self.onAccountSelected)
|
|
self.populate_accounts_dropdown()
|
|
|
|
def nameCheck(self):
|
|
try:
|
|
if len(self.name_field.text()) == 0 or len(self.name_field.text()) >= 3:
|
|
self.dialog_button_box.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(True)
|
|
else:
|
|
self.dialog_button_box.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(False)
|
|
return
|
|
except Exception as e:
|
|
logToUser(e, level = 2, func = inspect.stack()[0][3])
|
|
return
|
|
|
|
def onOkClicked(self):
|
|
try:
|
|
acc = get_local_accounts()[self.accounts_dropdown.currentIndex()]
|
|
name = self.name_field.text()
|
|
description = self.description_field.text()
|
|
public = self.public_toggle.isChecked()
|
|
self.handleStreamCreate.emit(acc,name,description,public)
|
|
self.close()
|
|
except Exception as e:
|
|
logToUser(e, level = 2, func = inspect.stack()[0][3])
|
|
return
|
|
|
|
def onCancelClicked(self):
|
|
try:
|
|
#self.handleCancelStreamCreate.emit()
|
|
self.close()
|
|
except Exception as e:
|
|
logToUser(e, level = 2, func = inspect.stack()[0][3])
|
|
return
|
|
|
|
def onAccountSelected(self, index):
|
|
try:
|
|
account = self.speckle_accounts[index]
|
|
self.speckle_client = SpeckleClient(account.serverInfo.url, account.serverInfo.url.startswith("https"))
|
|
self.speckle_client.authenticate_with_token(token=account.token)
|
|
except Exception as e:
|
|
logToUser(e, level = 2, func = inspect.stack()[0][3])
|
|
return
|
|
|
|
def populate_accounts_dropdown(self):
|
|
try:
|
|
# Populate the accounts comboBox
|
|
self.speckle_accounts = get_local_accounts()
|
|
self.accounts_dropdown.clear()
|
|
self.accounts_dropdown.addItems(
|
|
[
|
|
f"{acc.userInfo.name}, {acc.userInfo.email} | {acc.serverInfo.url}"
|
|
for acc in self.speckle_accounts
|
|
]
|
|
)
|
|
except Exception as e:
|
|
logToUser(e, level = 2, func = inspect.stack()[0][3])
|
|
return
|
|
|