class NotificationsWidget(QWidget, VCPWidget): notificationsCleared = Signal(object) def __init__(self, parent=None): super(NotificationsWidget, self).__init__(parent) self.notification_channel = getPlugin("notifications") self.main_layout = QVBoxLayout() self.button_layout = QHBoxLayout() self.all_button = QPushButton() self.info_button = QPushButton() self.warn_button = QPushButton() self.error_button = QPushButton() self.debug_button = QPushButton() self.clear_button = QPushButton() self.all_button.setText("all") self.info_button.setText("info") self.warn_button.setText("warn") self.error_button.setText("error") self.debug_button.setText("debug") self.clear_button.setText("clear") self.all_button.setCheckable(True) self.info_button.setCheckable(True) self.warn_button.setCheckable(True) self.error_button.setCheckable(True) self.debug_button.setCheckable(True) self.all_button.setChecked(True) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.clear_button.clicked.connect(self.clear_all_notifications) self.button_layout.addWidget(self.all_button) self.button_layout.addWidget(self.info_button) self.button_layout.addWidget(self.warn_button) self.button_layout.addWidget(self.error_button) self.button_layout.addWidget(self.debug_button) self.button_layout.addWidget(self.clear_button) self.notification_name = QLabel() self.notification_name.setAlignment(Qt.AlignCenter) self.notification_name.setText("All Notifications") self.all_notification_view = QListView() self.all_notification_model = QStandardItemModel( self.all_notification_view) self.all_notification_model_proxy = QSortFilterProxyModel( self.all_notification_view) self.all_notification_model_proxy.setSourceModel( self.all_notification_model) # self.all_notification_view.setModel(self.all_notification_model) self.all_notification_view.setModel(self.all_notification_model_proxy) self.all_notifications = list() self.main_layout.addWidget(self.notification_name) self.main_layout.addWidget(self.all_notification_view) self.main_layout.addLayout(self.button_layout) self.setLayout(self.main_layout) self.notification_channel.info_message.notify(self.on_info_message) self.notification_channel.warn_message.notify(self.on_warn_message) self.notification_channel.error_message.notify(self.on_error_message) self.notification_channel.debug_message.notify(self.on_debug_message) self.all_button.clicked.connect(self.show_all_notifications) self.info_button.clicked.connect(self.show_info_notifications) self.warn_button.clicked.connect(self.show_warn_notifications) self.error_button.clicked.connect(self.show_error_notifications) self.debug_button.clicked.connect(self.show_debug_notifications) @staticmethod def _get_time(): timestamp = time() dt_object = datetime.fromtimestamp(timestamp) return dt_object.strftime("%d / %b / %Y - %H:%M:%S") @staticmethod def _strip_new_line(message): return message.replace('\n', ' ').replace('\r', '').replace( ' ', ' ').replace(' ', ' ').replace(' ', ' ') def on_info_message(self, message): msg = 'INFO - occurred at: [ {} ]\n{}'.format( NotificationsWidget._get_time(), NotificationsWidget._strip_new_line(message)) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-information')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def on_warn_message(self, message): msg = 'WARNING - occurred at: [ {} ]\n{}'.format( NotificationsWidget._get_time(), NotificationsWidget._strip_new_line(message)) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-warning')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def on_error_message(self, message): msg = 'ERROR - occurred at: [ {} ]\n{}'.format( NotificationsWidget._get_time(), NotificationsWidget._strip_new_line(message)) LOG.debug('-----on_error_message called: {}'.format(message)) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-error')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def on_debug_message(self, message): msg = 'DEBUG - occurred at: [ {} ]\n{}'.format( NotificationsWidget._get_time(), NotificationsWidget._strip_new_line(message)) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-question')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def show_all_notifications(self): self.all_button.setChecked(True) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.notification_name.setText("All Notifications") self.all_notification_model_proxy.setFilterRegExp(None) def show_info_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(True) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.notification_name.setText("Information Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("INFO", Qt.CaseSensitive, QRegExp.FixedString)) def show_warn_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(False) self.warn_button.setChecked(True) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.notification_name.setText("Warning Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("WANRNING", Qt.CaseSensitive, QRegExp.FixedString)) def show_error_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(True) self.debug_button.setChecked(False) self.notification_name.setText("Error Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("ERROR", Qt.CaseInsensitive, QRegExp.FixedString)) def show_debug_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(True) self.notification_name.setText("Debug Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("DEBUG", Qt.CaseSensitive, QRegExp.FixedString)) def clear_all_notifications(self): self.all_notification_model.clear() self.notificationsCleared.emit(self)
class NotificationWidget(QWidget, VCPWidget): def __init__(self, parent=None): super(NotificationWidget, self).__init__(parent) self.notification_channel = getPlugin("notifications") self.main_layout = QVBoxLayout() self.button_layout = QHBoxLayout() self.all_button = QPushButton() self.info_button = QPushButton() self.warn_button = QPushButton() self.error_button = QPushButton() self.debug_button = QPushButton() self.clear_button = QPushButton() self.all_button.setText("all") self.info_button.setText("info") self.warn_button.setText("warn") self.error_button.setText("error") self.debug_button.setText("debug") self.clear_button.setText("clear") self.all_button.setCheckable(True) self.info_button.setCheckable(True) self.warn_button.setCheckable(True) self.error_button.setCheckable(True) self.debug_button.setCheckable(True) self.all_button.setChecked(True) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.clear_button.clicked.connect(self.clear_all_notifications) self.button_layout.addWidget(self.all_button) self.button_layout.addWidget(self.info_button) self.button_layout.addWidget(self.warn_button) self.button_layout.addWidget(self.error_button) self.button_layout.addWidget(self.debug_button) self.button_layout.addWidget(self.clear_button) self.notification_name = QLabel() self.notification_name.setAlignment(Qt.AlignCenter) self.notification_name.setText("All Notifications") self.all_notification_view = QListView() self.all_notification_model = QStandardItemModel( self.all_notification_view) self.all_notification_model_proxy = QSortFilterProxyModel( self.all_notification_view) self.all_notification_model_proxy.setSourceModel( self.all_notification_model) # self.all_notification_view.setModel(self.all_notification_model) self.all_notification_view.setModel(self.all_notification_model_proxy) self.all_notifications = list() self.main_layout.addWidget(self.notification_name) self.main_layout.addWidget(self.all_notification_view) self.main_layout.addLayout(self.button_layout) self.setLayout(self.main_layout) self.notification_channel.info_message.notify(self.on_info_message) self.notification_channel.warn_message.notify(self.on_warn_message) self.notification_channel.error_message.notify(self.on_error_message) self.notification_channel.debug_message.notify(self.on_debug_message) self.all_button.clicked.connect(self.show_all_notifications) self.info_button.clicked.connect(self.show_info_notifications) self.warn_button.clicked.connect(self.show_warn_notifications) self.error_button.clicked.connect(self.show_error_notifications) self.debug_button.clicked.connect(self.show_debug_notifications) def on_info_message(self, message): timestamp = time() dt_object = datetime.fromtimestamp(timestamp) current_time = str(dt_object) msg = 'INFO:\nTIME {}\n {}'.format(current_time, message) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-information')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def on_warn_message(self, message): timestamp = time() dt_object = datetime.fromtimestamp(timestamp) current_time = str(dt_object) msg = 'WARNING:\nTIME {}\n {}'.format(current_time, message) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-warning')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def on_error_message(self, message): timestamp = time() dt_object = datetime.fromtimestamp(timestamp) current_time = str(dt_object) msg = 'ERROR:\nTIME {}\n {}'.format(current_time, message) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-error')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def on_debug_message(self, message): timestamp = time() dt_object = datetime.fromtimestamp(timestamp) current_time = str(dt_object) msg = 'DEBUG\nTIME {}\n {}'.format(current_time, message) notification_item = QStandardItem() notification_item.setText(msg) notification_item.setIcon(QIcon.fromTheme('dialog-question')) notification_item.setEditable(False) self.all_notification_model.appendRow(notification_item) def show_all_notifications(self): self.all_button.setChecked(True) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.notification_name.setText("All Notifications") self.all_notification_model_proxy.setFilterRegExp(None) def show_info_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(True) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.notification_name.setText("Information Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("INFO", Qt.CaseSensitive, QRegExp.FixedString)) def show_warn_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(False) self.warn_button.setChecked(True) self.error_button.setChecked(False) self.debug_button.setChecked(False) self.notification_name.setText("Warning Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("WANRNING", Qt.CaseSensitive, QRegExp.FixedString)) def show_error_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(True) self.debug_button.setChecked(False) self.notification_name.setText("Error Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("ERROR", Qt.CaseInsensitive, QRegExp.FixedString)) def show_debug_notifications(self): self.all_button.setChecked(False) self.info_button.setChecked(False) self.warn_button.setChecked(False) self.error_button.setChecked(False) self.debug_button.setChecked(True) self.notification_name.setText("Debug Notifications") self.all_notification_model_proxy.setFilterRegExp( QRegExp("DEBUG", Qt.CaseSensitive, QRegExp.FixedString)) def clear_all_notifications(self): self.all_notification_model.clear()