Exemplo n.º 1
0
class MessageFrame(QFrame):

    accept_signal = Signal(int, MessageData)
    ''' @ivar: A signal on accept button clicked (id, data)'''

    cancel_signal = Signal(int, MessageData)
    ''' @ivar: A signal on cancel button clicked (id, data)'''

    TYPE_INVALID = 0
    TYPE_EMPTY = 1
    TYPE_QUESTION = 2
    TYPE_LAUNCH_FILE = 3
    TYPE_DEFAULT_CFG = 4
    TYPE_NODELET = 5
    TYPE_TRANSFER = 6
    TYPE_BINARY = 7
    TYPE_NOSCREEN = 8

    ICON_SIZE = 32

    def __init__(self, parent=None, info=False):
        QFrame.__init__(self, parent=parent)
        self.setObjectName('MessageFrame')
        self.questionid = self.TYPE_INVALID
        self.text = ""
        self.data = MessageData(None)
        self.IMAGES = {
            1:
            QPixmap(),
            2:
            QPixmap(':/icons/crystal_clear_question.png').scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            3:
            QPixmap(':/icons/crystal_clear_launch_file.png').scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            4:
            QPixmap(":/icons/default_cfg.png").scaled(self.ICON_SIZE,
                                                      self.ICON_SIZE,
                                                      Qt.IgnoreAspectRatio,
                                                      Qt.SmoothTransformation),
            5:
            QPixmap(":/icons/crystal_clear_nodelet_q.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            6:
            QPixmap(":/icons/crystal_clear_question.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            7:
            QPixmap(":/icons/crystal_clear_launch_file_transfer.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            8:
            QPixmap(":/icons/crystal_clear_no_io.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation)
        }
        self._new_request = False
        self.frameui = QFrame()
        ui_file = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                               'MessageFrame.ui')
        loadUi(ui_file, self.frameui)
        color = QColor(255, 207, 121)
        self.frameui.setVisible(False)
        self.frameui.scrollArea.setVisible(False)
        self.frameui.questionOkButton.clicked.connect(self._on_question_ok)
        self.frameui.questionCancelButton.clicked.connect(
            self._on_question_cancel)
        self.frameui.checkBox_dnaa.stateChanged.connect(
            self._on_checkbox_state_changed)
        self._ask = 'ask'
        if info:
            color = QColor(232, 104, 80)
            self.frameui.questionCancelButton.setVisible(False)
            self._ask = 'show'
        bg_style = "QFrame#questionFame { background-color: %s;}" % color.name(
        )
        self.frameui.setStyleSheet("%s" % (bg_style))
        self._queue = MessageQueue()
        self._do_not_ask = {}

    def show_question(self,
                      questionid,
                      text,
                      data=MessageData(None),
                      color=None):
        if questionid == 0:
            return
        if color is not None:
            bg_style = "QFrame#questionFame { background-color: %s;}" % color.name(
            )
            self.frameui.setStyleSheet("%s" % (bg_style))
        try:
            # is it in the list for not ask again?
            if self._do_not_ask[questionid]:
                self.accept_signal.emit(questionid, data)
            else:
                self.cancel_signal.emit(questionid, data)
            return
        except Exception:
            pass
        self._queue.add(questionid, text, data)
        if self.questionid == self.TYPE_INVALID:
            self._new_request = self._read_next_item()
            self._frameui_4_request(self._new_request)
            if self.questionid == self.TYPE_NODELET:
                self.frameui.checkBox_dnaa.setText("don't %s again, never!" %
                                                   self._ask)
            else:
                self.frameui.checkBox_dnaa.setText(
                    "don't %s again, for session" % self._ask)

    def add_info_no_screen(self, nodename):
        if self.questionid == self.TYPE_NOSCREEN:
            self.data.data.append(nodename)
            self.frameui.scrollAreaLayout.addWidget(QLabel(nodename))
        else:
            self._queue.add(self.TYPE_NOSCREEN, '', MessageData([nodename]))
            if self.questionid == self.TYPE_INVALID:
                self._new_request = self._read_next_item()
                self._frameui_4_request(self._new_request)

    def hide_question(self, questionids):
        if self.questionid in questionids:
            self._new_request = False
            self.frameui.setVisible(False)
            self.cancel_signal.emit(self.questionid, self.data)
            self.questionid = 0
            self._clear_scroll_area()
            self._new_request = self._read_next_item()
            self._frameui_4_request(self._new_request)

    def _frameui_4_request(self, request):
        if request:
            self.frameui.checkBox_dnaa.setChecked(False)
            self.frameui.setVisible(True)
            self.frameui.scrollArea.setVisible(
                self.frameui.scrollAreaLayout.count() > 0)
        else:
            self.questionid = 0
            self.frameui.setVisible(False)
            self.frameui.scrollArea.setVisible(False)

    def _on_question_ok(self):
        if self.frameui.checkBox_dnaa.isChecked():
            # save the decision
            self._do_not_ask[self.questionid] = True
        self._new_request = False
        self.frameui.setVisible(False)
        self.accept_signal.emit(self.questionid, self.data)
        self.questionid = 0
        self._clear_scroll_area()
        self._new_request = self._read_next_item()
        self._frameui_4_request(self._new_request)

    def _on_question_cancel(self):
        if self.frameui.checkBox_dnaa.isChecked():
            if self.questionid == self.QuestionNodelet:
                nm.settings().check_for_nodelets_at_start = False
            else:
                # save the decision
                self._do_not_ask[self.questionid] = False
        self._new_request = False
        self.frameui.setVisible(False)
        self.cancel_signal.emit(self.questionid, self.data)
        self.questionid = 0
        self._clear_scroll_area()
        self._new_request = self._read_next_item()
        self._frameui_4_request(self._new_request)

    def _is_launch_data_in_queue(self, newdata):
        for _, data, _ in self._queue_launchfile:
            if data == newdata:
                return True
        return False

    def _is_transfer_data_in_queue(self, newdata):
        for _, data, _ in self._queue_transfer_files:
            if data == newdata:
                return True
        return False

    def _is_other_data_in_queue(self, questionid, text, data):
        for cqid, ctxt, cd, _ in self._queue_other:
            if cqid == questionid and cd == data and ctxt == text:
                return True
        return False

    def _read_next_item(self):
        (qid, text, data) = self._queue.get()
        if qid == self.TYPE_NOSCREEN:
            self.questionid = self.TYPE_NOSCREEN
            self.text = 'No screens found! See log for details!<br>The following nodes are affected:'
            self.data = data
            self.frameui.questionIcon.setPixmap(self.IMAGES[qid])
            self.frameui.questionLabel.setText(self.text)
            for nodename in data.data:
                self.frameui.scrollAreaLayout.addWidget(QLabel(nodename))
            self.frameui.scrollArea.setVisible(True)
        elif qid != self.TYPE_INVALID:
            self.questionid = qid
            self.text = text
            self.data = data
            self.frameui.questionIcon.setPixmap(self.IMAGES[qid])
            self.frameui.questionLabel.setText(text)
        return qid != self.TYPE_INVALID

    def _on_checkbox_state_changed(self, state):
        if state:
            if self.questionid == self.TYPE_NODELET:
                self.frameui.questionOkButton.setVisible(False)
        else:
            self.frameui.questionOkButton.setVisible(True)

    def _clear_scroll_area(self):
        child = self.frameui.scrollAreaLayout.takeAt(0)
        while child:
            child.widget().setParent(None)
            del child
            child = self.frameui.scrollAreaLayout.takeAt(0)
Exemplo n.º 2
0
class MessageFrame(QFrame):

    accept_signal = Signal(int, MessageData)
    ''' @ivar: A signal on accept button clicked (id, data)'''

    cancel_signal = Signal(int, MessageData)
    ''' @ivar: A signal on cancel button clicked (id, data)'''

    TYPE_INVALID = 0
    TYPE_EMPTY = 1
    TYPE_QUESTION = 2
    TYPE_LAUNCH_FILE = 3
    TYPE_DEFAULT_CFG = 4
    TYPE_NODELET = 5
    TYPE_TRANSFER = 6
    TYPE_BINARY = 7
    TYPE_NOSCREEN = 8
    TYPE_NMD = 9
    TYPE_NODE_CFG = 10

    ICON_SIZE = 32

    def __init__(self, parent=None, info=False):
        QFrame.__init__(self, parent=parent)
        self.setObjectName('MessageFrame')
        self.questionid = self.TYPE_INVALID
        self.text = ""
        self.data = MessageData(None)
        self.IMAGES = {
            1:
            QPixmap(),
            2:
            QPixmap(':/icons/question.png').scaled(self.ICON_SIZE,
                                                   self.ICON_SIZE,
                                                   Qt.IgnoreAspectRatio,
                                                   Qt.SmoothTransformation),
            3:
            QPixmap(':/icons/crystal_clear_launch_file.png').scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            4:
            QPixmap(":/icons/default_cfg.png").scaled(self.ICON_SIZE,
                                                      self.ICON_SIZE,
                                                      Qt.IgnoreAspectRatio,
                                                      Qt.SmoothTransformation),
            5:
            QPixmap(":/icons/crystal_clear_nodelet_q.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            6:
            QPixmap(":/icons/crystal_clear_launch_file_transfer.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            7:
            QPixmap(":/icons/crystal_clear_binary.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            8:
            QPixmap(":/icons/crystal_clear_no_io.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            9:
            QPixmap(":/icons/crystal_clear_run_zeroconf.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation),
            10:
            QPixmap(":/icons/sekkyumu_restart.png").scaled(
                self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio,
                Qt.SmoothTransformation)
        }
        self._new_request = False
        self.frameui = QFrame()
        ui_file = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                               'MessageFrame.ui')
        loadUi(ui_file, self.frameui)
        color = QColor(255, 207, 121)
        self.frameui.listLabel.setTextInteractionFlags(
            Qt.TextSelectableByMouse)
        self.frameui.questionLabel.setTextInteractionFlags(
            Qt.TextSelectableByMouse)
        self.frameui.setVisible(False)
        self.frameui.listLabel.setVisible(False)
        self.frameui.questionOkButton.clicked.connect(self._on_question_ok)
        self.frameui.questionCancelButton.clicked.connect(
            self._on_question_cancel)
        self.frameui.checkBox_dnaa.stateChanged.connect(
            self._on_checkbox_state_changed)
        self._ask = 'ask'
        if info:
            color = QColor(232, 104, 80)
            self.frameui.questionCancelButton.setVisible(False)
            self._ask = 'show'
        bg_style = "QFrame#questionFame { background-color: %s;}" % color.name(
        )
        self.frameui.setStyleSheet("%s" % (bg_style))
        self._queue = MessageQueue()
        self._do_not_ask = {}

    def show_question(self,
                      questionid,
                      text,
                      data=MessageData(None),
                      color=None):
        if questionid == 0:
            return
        try:
            if questionid == self.TYPE_LAUNCH_FILE and nm.settings(
            ).autoreload_launch:
                self.accept_signal.emit(questionid, data)
                return
            # is it in the list for not ask again?
            if self._do_not_ask[questionid] == 1:
                self.accept_signal.emit(questionid, data)
            elif self._do_not_ask[questionid] == 0:
                self.cancel_signal.emit(questionid, data)
            return
        except Exception:
            pass
        if self.questionid != questionid or self.text != text or data != self.data:
            self._queue.add(questionid, text, data)
        elif data.data_list:  # same question again
            # update the list of files or nodes which causes this question in current question
            for dt in data.data_list:
                if dt not in self.data.data_list:
                    self.data.data_list.append(dt)
            self._update_list_label(self.data.data_list)
        # if no question is active pop first element from the queue
        if self.questionid == self.TYPE_INVALID:
            self._new_request = self._read_next_item()
            self._frameui_4_request(self._new_request)
            if self.questionid in [self.TYPE_NODELET, self.TYPE_NOSCREEN]:
                self.frameui.checkBox_dnaa.setText("don't %s again, never!" %
                                                   self._ask)
            else:
                self.frameui.checkBox_dnaa.setText(
                    "don't %s again, for session" % self._ask)

    def show_info(self, infoid, text, data=MessageData(None), color=None):
        self.show_question(infoid, text=text, data=data, color=color)

    def is_do_not_ask(self, questionid):
        try:
            # is it in the list for not ask again?
            return self._do_not_ask[questionid] in [0, 1]
        except Exception:
            return False

    def hide_question(self, questionids):
        for qid in questionids:
            self._queue.remove(qid)
        if self.questionid in questionids:
            self._new_request = False
            self.frameui.setVisible(False)
            self.cancel_signal.emit(self.questionid, self.data)
            self.questionid = 0
            self._update_list_label([])
            self._new_request = self._read_next_item()
            self._frameui_4_request(self._new_request)

    def _update_list_label(self, items=[]):
        '''
        Put list elements into the list label in the question frame
        '''
        if items:
            self.frameui.listLabel.setText('')
            for item in items:
                ltext = self.frameui.listLabel.text()
                if ltext:
                    self.frameui.listLabel.setText(
                        "%s, %s" % (ltext, HTMLDelegate.toHTML(item)))
                else:
                    self.frameui.listLabel.setText("%s" %
                                                   (HTMLDelegate.toHTML(item)))
            self.frameui.listLabel.setVisible(True)
        else:
            self.frameui.listLabel.setText('')
            self.frameui.listLabel.setVisible(False)

    def _frameui_4_request(self, request):
        if request:
            self.frameui.checkBox_dnaa.setChecked(False)
            self.frameui.setVisible(True)
            self.frameui.listLabel.setVisible(True)
        else:
            self.questionid = 0
            self.frameui.setVisible(False)
            self.frameui.listLabel.setVisible(False)

    def _on_question_ok(self):
        self._new_request = False
        self.frameui.setVisible(False)
        try:
            # set action for do not ask again
            if self.frameui.checkBox_dnaa.isChecked():
                self._do_not_ask[self.questionid] = 1
        except Exception:
            pass
        self.accept_signal.emit(self.questionid, self.data)
        self.questionid = 0
        self._update_list_label([])
        self._new_request = self._read_next_item()
        self._frameui_4_request(self._new_request)

    def _on_question_cancel(self):
        self._new_request = False
        self.frameui.setVisible(False)
        try:
            # set action for do not ask again
            if self.frameui.checkBox_dnaa.isChecked():
                self._do_not_ask[self.questionid] = 0
        except Exception:
            pass
        self.cancel_signal.emit(self.questionid, self.data)
        self.questionid = 0
        self._update_list_label([])
        self._new_request = self._read_next_item()
        self._frameui_4_request(self._new_request)

    def _is_launch_data_in_queue(self, newdata):
        for _, data, _ in self._queue_launchfile:
            if data == newdata:
                return True
        return False

    def _is_transfer_data_in_queue(self, newdata):
        for _, data, _ in self._queue_transfer_files:
            if data == newdata:
                return True
        return False

    def _is_other_data_in_queue(self, questionid, text, data):
        for cqid, ctxt, cd, _ in self._queue_other:
            if cqid == questionid and cd == data and ctxt == text:
                return True
        return False

    def _read_next_item(self):
        (qid, text, data) = self._queue.get()
        if qid != self.TYPE_INVALID:
            self.questionid = qid
            self.text = text
            self.data = data
            self.frameui.questionIcon.setPixmap(self.IMAGES[qid])
            self.frameui.questionLabel.setText(text)
            self._update_list_label(self.data.data_list)
        return qid != self.TYPE_INVALID

    def _on_checkbox_state_changed(self, state):
        if self.questionid == self.TYPE_NODELET:
            self.frameui.questionOkButton.setVisible(not state)
            nm.settings().check_for_nodelets_at_start = not state
        elif self.questionid == self.TYPE_NOSCREEN:
            self.frameui.questionCancelButton.setVisible(not state)
            nm.settings().show_noscreen_error = not state

    def _clear_scroll_area(self):
        child = self.frameui.scrollAreaLayout.takeAt(0)
        while child:
            child.widget().setParent(None)
            del child
            child = self.frameui.scrollAreaLayout.takeAt(0)
class MessageFrame(QFrame):

    accept_signal = Signal(int, MessageData)
    ''' @ivar: A signal on accept button clicked (id, data)'''

    cancel_signal = Signal(int, MessageData)
    ''' @ivar: A signal on cancel button clicked (id, data)'''

    TYPE_INVALID = 0
    TYPE_EMPTY = 1
    TYPE_QUESTION = 2
    TYPE_LAUNCH_FILE = 3
    TYPE_DEFAULT_CFG = 4
    TYPE_NODELET = 5
    TYPE_TRANSFER = 6
    TYPE_BINARY = 7
    TYPE_NOSCREEN = 8

    ICON_SIZE = 32

    def __init__(self, parent=None, info=False):
        QFrame.__init__(self, parent=parent)
        self.setObjectName('MessageFrame')
        self.questionid = self.TYPE_INVALID
        self.text = ""
        self.data = MessageData(None)
        self.IMAGES = {1: QPixmap(),
                       2: QPixmap(':/icons/crystal_clear_question.png').scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation),
                       3: QPixmap(':/icons/crystal_clear_launch_file.png').scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation),
                       4: QPixmap(":/icons/default_cfg.png").scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation),
                       5: QPixmap(":/icons/crystal_clear_nodelet_q.png").scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation),
                       6: QPixmap(":/icons/crystal_clear_question.png").scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation),
                       7: QPixmap(":/icons/crystal_clear_launch_file_transfer.png").scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation),
                       8: QPixmap(":/icons/crystal_clear_no_io.png").scaled(self.ICON_SIZE, self.ICON_SIZE, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
                       }
        self._new_request = False
        self.frameui = QFrame()
        ui_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'MessageFrame.ui')
        loadUi(ui_file, self.frameui)
        color = QColor(255, 207, 121)
        self.frameui.setVisible(False)
        self.frameui.scrollArea.setVisible(False)
        self.frameui.questionOkButton.clicked.connect(self._on_question_ok)
        self.frameui.questionCancelButton.clicked.connect(self._on_question_cancel)
        self.frameui.checkBox_dnaa.stateChanged.connect(self._on_checkbox_state_changed)
        self._ask = 'ask'
        if info:
            color = QColor(232, 104, 80)
            self.frameui.questionCancelButton.setVisible(False)
            self._ask = 'show'
        bg_style = "QFrame#questionFame { background-color: %s;}" % color.name()
        self.frameui.setStyleSheet("%s" % (bg_style))
        self._queue = MessageQueue()
        self._do_not_ask = {}

    def show_question(self, questionid, text, data=MessageData(None), color=None):
        if questionid == 0:
            return
        if color is not None:
            bg_style = "QFrame#questionFame { background-color: %s;}" % color.name()
            self.frameui.setStyleSheet("%s" % (bg_style))
        try:
            # is it in the list for not ask again?
            if self._do_not_ask[questionid]:
                self.accept_signal.emit(questionid, data)
            else:
                self.cancel_signal.emit(questionid, data)
            return
        except Exception:
            pass
        self._queue.add(questionid, text, data)
        if self.questionid == self.TYPE_INVALID:
            self._new_request = self._read_next_item()
            self._frameui_4_request(self._new_request)
            if self.questionid == self.TYPE_NODELET:
                self.frameui.checkBox_dnaa.setText("don't %s again, never!" % self._ask)
            else:
                self.frameui.checkBox_dnaa.setText("don't %s again, for session" % self._ask)

    def add_info_no_screen(self, nodename):
        if self.questionid == self.TYPE_NOSCREEN:
            self.data.data.append(nodename)
            self.frameui.scrollAreaLayout.addWidget(QLabel(nodename))
        else:
            self._queue.add(self.TYPE_NOSCREEN, '', MessageData([nodename]))
            if self.questionid == self.TYPE_INVALID:
                self._new_request = self._read_next_item()
                self._frameui_4_request(self._new_request)

    def hide_question(self, questionids):
        if self.questionid in questionids:
            self._new_request = False
            self.frameui.setVisible(False)
            self.cancel_signal.emit(self.questionid, self.data)
            self.questionid = 0
            self._clear_scroll_area()
            self._new_request = self._read_next_item()
            self._frameui_4_request(self._new_request)

    def _frameui_4_request(self, request):
        if request:
            self.frameui.checkBox_dnaa.setChecked(False)
            self.frameui.setVisible(True)
            self.frameui.scrollArea.setVisible(self.frameui.scrollAreaLayout.count() > 0)
        else:
            self.questionid = 0
            self.frameui.setVisible(False)
            self.frameui.scrollArea.setVisible(False)

    def _on_question_ok(self):
        if self.frameui.checkBox_dnaa.isChecked():
            # save the decision
            self._do_not_ask[self.questionid] = True
        self._new_request = False
        self.frameui.setVisible(False)
        self.accept_signal.emit(self.questionid, self.data)
        self.questionid = 0
        self._clear_scroll_area()
        self._new_request = self._read_next_item()
        self._frameui_4_request(self._new_request)

    def _on_question_cancel(self):
        if self.frameui.checkBox_dnaa.isChecked():
            if self.questionid == self.QuestionNodelet:
                nm.settings().check_for_nodelets_at_start = False
            else:
                # save the decision
                self._do_not_ask[self.questionid] = False
        self._new_request = False
        self.frameui.setVisible(False)
        self.cancel_signal.emit(self.questionid, self.data)
        self.questionid = 0
        self._clear_scroll_area()
        self._new_request = self._read_next_item()
        self._frameui_4_request(self._new_request)

    def _is_launch_data_in_queue(self, newdata):
        for _, data, _ in self._queue_launchfile:
            if data == newdata:
                return True
        return False

    def _is_transfer_data_in_queue(self, newdata):
        for _, data, _ in self._queue_transfer_files:
            if data == newdata:
                return True
        return False

    def _is_other_data_in_queue(self, questionid, text, data):
        for cqid, ctxt, cd, _ in self._queue_other:
            if cqid == questionid and cd == data and ctxt == text:
                return True
        return False

    def _read_next_item(self):
        (qid, text, data) = self._queue.get()
        if qid == self.TYPE_NOSCREEN:
            self.questionid = self.TYPE_NOSCREEN
            self.text = 'No screens found! See log for details!<br>The following nodes are affected:'
            self.data = data
            self.frameui.questionIcon.setPixmap(self.IMAGES[qid])
            self.frameui.questionLabel.setText(self.text)
            for nodename in data.data:
                self.frameui.scrollAreaLayout.addWidget(QLabel(nodename))
            self.frameui.scrollArea.setVisible(True)
        elif qid != self.TYPE_INVALID:
            self.questionid = qid
            self.text = text
            self.data = data
            self.frameui.questionIcon.setPixmap(self.IMAGES[qid])
            self.frameui.questionLabel.setText(text)
        return qid != self.TYPE_INVALID

    def _on_checkbox_state_changed(self, state):
        if state:
            if self.questionid == self.TYPE_NODELET:
                self.frameui.questionOkButton.setVisible(False)
        else:
            self.frameui.questionOkButton.setVisible(True)

    def _clear_scroll_area(self):
        child = self.frameui.scrollAreaLayout.takeAt(0)
        while child:
            child.widget().setParent(None)
            del child
            child = self.frameui.scrollAreaLayout.takeAt(0)