def send_to_messagebar(self, message, title='', level=Qgis.Info, duration=5, exc_info=None, core_QGIS=False, addToLog=False, showLogPanel=False): """ Add a message to the forms message bar. Args: message (str): Message to display title (str): Title of message. Will appear in bold. Defaults to '' level (QgsMessageBarLevel): The level of message to log. Defaults to Qgis.Info duration (int): Number of seconds to display message for. 0 is no timeout. Defaults to 5 core_QGIS (bool): Add to QGIS interface rather than the dialog addToLog (bool): Also add message to Log. Defaults to False showLogPanel (bool): Display the log panel exc_info () : Information to be used as a traceback if required """ if core_QGIS: newMessageBar = self.iface.messageBar() else: newMessageBar = QgsMessageBar(self) widget = newMessageBar.createMessage(title, message) if showLogPanel: """check out C:\data\GIS_Tools\Reference_Code\QGIS_Reference_Plugins\QGIS-master\python\plugins\db_manager\db_tree.py to try and hyperlink""" button = QPushButton(widget) button.setText('View') button.setContentsMargins(0, 0, 0, 0) button.setFixedWidth(35) button.pressed.connect(openLogPanel) widget.layout().addWidget(button) newMessageBar.pushWidget(widget, level, duration=duration) if not core_QGIS: rowCount = self.validationLayout.count() self.validationLayout.insertRow(rowCount + 1, newMessageBar) if addToLog: if level == 1: # 'WARNING': LOGGER.warning(message) elif level == 2: # 'CRITICAL': # Add a traceback to log only for bailouts only if exc_info is not None: exc_type, exc_value, exc_traceback = sys.exc_info() mess = str(traceback.format_exc()) message = message + '\n' + mess LOGGER.critical(message) else: # INFO = 0 LOGGER.info(message)
class StandaloneAppDialog(QDialog): """ Dialog to be inherited by OpenQuake standalone applications :param app_name: short name of the app as it appears in the url :param app_descr: longer name to be used as the window title :param gem_header_name: header that identifies that the application is being driven from QGIS :param gem_header_value: version of the interface between the plugin and the embedded application :param parent: the parent object (optional) """ def __init__(self, app_name, app_descr, gem_header_name, gem_header_value, parent=None): super(StandaloneAppDialog, self).__init__(parent) self.message_bar = QgsMessageBar(self) self.app_name = app_name self.app_descr = app_descr self.gem_header_name = gem_header_name self.gem_header_value = gem_header_value self.web_view = None self.set_host() def set_host(self): engine_profiles = json.loads(QSettings().value( 'irmt/engine_profiles', DEFAULT_ENGINE_PROFILES)) cur_eng_profile = QSettings().value('irmt/current_engine_profile') if cur_eng_profile is None: cur_eng_profile = list(engine_profiles.keys())[0] engine_profile = engine_profiles[cur_eng_profile] engine_hostname = engine_profile['hostname'] self.host = QSettings().value('irmt/engine_hostname', engine_hostname) def load_homepage(self): if self.web_view is not None: qurl = QUrl('%s/%s' % (self.host, self.app_name)) # # Uncomment to use the dummy example instead # if self.app_name == 'taxtweb': # qurl = QUrl('http://localhost:8000') self.web_view.load(qurl) def build_gui(self): self.setWindowTitle(self.app_descr) self.setWindowIcon(QIcon(":/plugins/irmt/weights.svg")) self.vlayout = QVBoxLayout() self.setLayout(self.vlayout) self.vlayout.addWidget(self.message_bar) self.web_view = GemQWebView(self.gem_header_name, self.gem_header_value, self.gem_api, parent=self) self.vlayout.addWidget(self.web_view) initial_width = 1050 self.resize(initial_width, self.width()) self.setWindowFlags(Qt.Window) self.reload_homepage_btn = QPushButton("Reload homepage") # FIXME: Instead of a fixed width, we should use the natural btn size self.reload_homepage_btn.setFixedWidth(150) self.reload_homepage_btn.clicked.connect( self.on_reload_homepage_btn_clicked) self.lower_message_bar = QgsMessageBar(self) self.btn_hlayout = QHBoxLayout() self.btn_hlayout.setAlignment(Qt.AlignLeft) self.btn_hlayout.addWidget(self.reload_homepage_btn) self.btn_hlayout.addWidget(self.lower_message_bar) self.vlayout.addLayout(self.btn_hlayout) self.load_homepage() def on_reload_homepage_btn_clicked(self): msg = ("Reloading the homepage, all current changes will be discarded." " Are you sure?") reply = QMessageBox.question( self, 'Warning', msg, QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: self.set_host() self.load_homepage() def on_set_example_btn_clicked(self): qurl = QUrl(self.example_url.text()) self.web_view.load(qurl)