Exemple #1
0
class ViewDataAdd(ViewAdd):
    """
    View of table
    """
    sig_data_flag = OrcSignal()

    def __init__(self):
        """
        :return:
        """
        ViewAdd.__init__(self, def_view_data)

        self.__service = DataService()
        self.__id = None

        self.sig_submit.connect(self.__save)

    def set_type(self, p_type):

        self.set_data("src_type", p_type)
        self.set_enable("src_type", False)

    def set_path(self, p_path):
        self.set_data("src_id", p_path)
        self.set_enable("src_id", False)

    def set_id(self, p_id):
        self.__id = p_id

    def __save(self, p_data):
        p_data["src_id"] = self.__id
        self.__service.usr_add(p_data)
class ViewWidgetSelect(QWidget):

    sig_selected = OrcSignal(dict)

    def __init__(self):

        QWidget.__init__(self)

        # Model
        self.__model = WidgetSelectModel()
        self.__model.usr_set_definition(def_view_widget_def)
        self.__model.usr_chk_able()

        # Control
        _control = WidgetSelectControl(def_view_widget_def)

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_widget_def)
        self.__wid_search_cond.set_col_num(2)
        self.__wid_search_cond.create()

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons widget
        _wid_buttons = ViewButtons([dict(id="search", name=u"查询")])

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)
        _wid_display.doubleClicked.connect(self.select)

    def search(self):
        _cond = self.__wid_search_cond.get_cond()
        self.__model.usr_search(_cond)

    def select(self, p_index):
        _node = self.__model.usr_get_node(p_index).content
        _id = _node["id"]
        _path = _node["widget_path"]
        _type = _node["widget_type"]
        self.sig_selected.emit(dict(id=str(_id), flag=_path, type=_type))
        self.close()

    def __operate(self, p_flag):

        if "search" == p_flag:
            self.search()
        else:
            pass
Exemple #3
0
class ViewTable(QTableView):
    """
    View of table
    """
    sig_context = OrcSignal(str)

    def __init__(self):

        QTableView.__init__(self)

        self.__configer = get_config()

        # 拉申最后一列
        self.horizontalHeader().setStretchLastSection(True)

        # ...
        self.resizeColumnToContents(True)

        # 不显示格间距
        self.setShowGrid(False)

        self.alternatingRowColors()

        self.setStyleSheet(get_theme("TableView"))

    def create_context_menu(self, p_def):
        """
        右键菜单
        :param p_def:
        :return:
        """
        _context_menu = ViewContextMenu(p_def)
        self.setContextMenuPolicy(Qt.CustomContextMenu)

        # connection
        self.customContextMenuRequested.connect(_context_menu.show_menu)
        _context_menu.sig_clicked.connect(self.sig_context.emit)

    def set_model(self, p_model):
        """
        设置模型
        :param p_model:
        :return:
        """
        self.setModel(p_model)

    def set_control(self, p_control):
        """
        :param p_control:
        :return:
        """
        self.setItemDelegate(p_control)
Exemple #4
0
class PageContainer(QWidget):

    sig_selected = OrcSignal(str)

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"页面"

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_page_def)
        self.__wid_search_cond.set_col_num(2)
        self.__wid_search_cond.create()

        # Column widget
        self.__wid_page_def = ViewPageDefMag()
        self.__wid_page_det = ViewPageDetMag()

        # Bottom layout
        _layout_bottom = QHBoxLayout()
        _layout_bottom.addWidget(self.__wid_page_def)
        _layout_bottom.addWidget(self.__wid_page_det)

        # Main layout
        _layout_main = QVBoxLayout()
        _layout_main.addWidget(self.__wid_search_cond)
        _layout_main.addLayout(_layout_bottom)

        _layout_main.setContentsMargins(0, 0, 0, 0)
        _layout_main.setSpacing(0)

        self.setLayout(_layout_main)

        self.__wid_page_def.sig_selected.connect(
            self.__wid_page_det.set_page_id)
        self.__wid_page_def.sig_search.connect(self.search_definition)
        self.__wid_page_def.sig_delete.connect(self.__wid_page_det.clean)
        self.__wid_page_det.sig_selected[str].connect(self.sig_selected.emit)

    def search_definition(self):
        _cond = self.__wid_search_cond.get_cond()
        self.__wid_page_def.search(_cond)
        self.__wid_page_det.clean()
Exemple #5
0
class OrcLineEdit(QLineEdit):
    """
    单行输入框
    """
    clicked = OrcSignal()

    def __init__(self):
        QLineEdit.__init__(self)

        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)

    def get_data(self):
        return self.text()

    def set_data(self, p_data):
        return self.setText(p_data)

    def mousePressEvent(self, *args, **kwargs):
        self.clicked.emit()
Exemple #6
0
class ViewTree(QTreeView):
    """
    Base tree view
    """
    sig_context = OrcSignal(str)

    def __init__(self):

        QTreeView.__init__(self)

        # MVC
        self.dragEnabled()
        self.acceptDrops()
        self.showDropIndicator()
        self.setDragDropMode(QAbstractItemView.InternalMove)

        self.header().setStretchLastSection(True)

        self.setFocusPolicy(Qt.NoFocus)

        self.setStyleSheet(get_theme("TreeView"))

    def create_context_menu(self, p_def):
        """
        右键菜单
        :param p_def:
        :return:
        """
        _context_menu = ViewContextMenu(p_def)

        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(_context_menu.show_menu)

        _context_menu.sig_clicked.connect(self.sig_context.emit)

    def set_model(self, p_model):
        self.setModel(p_model)

    def set_control(self, p_control):
        self.setItemDelegate(p_control)
Exemple #7
0
class StatusReceiver(QThread):

    sig_status = OrcSignal(str)

    def __init__(self):

        QThread.__init__(self)

        self.__config = get_config("network")
        self.__logger = OrcLog("view")

    def run(self, *args, **kwargs):

        _ip = self.__config.get_option("VIEW", "ip")
        _port = int(self.__config.get_option("VIEW", "port"))

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind((_ip, _port))
        sock.listen(1)

        while True:

            connection, address = sock.accept()

            try:
                connection.settimeout(5)

                _cmd = connection.recv(1024)
                self.sig_status.emit(_cmd)

                connection.send(_cmd)

            except socket.timeout:
                self.__logger.error("time out")
            except Exception, err:
                self.__logger.error(err)

            connection.close()
Exemple #8
0
class OrcOperate(QLineEdit):

    sig_operate = OrcSignal()

    def __init__(self, parent):
        QLineEdit.__init__(self, parent)

        self.__data = None

        self.setReadOnly(True)

        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)

    def get_data(self):
        return self.__data

    def set_data(self, p_data):
        self.__data = p_data
        _text = operate_to_str(p_data)
        return self.setText(_text)

    def mousePressEvent(self, *args, **kwargs):
        self.sig_operate.emit()
class ViewContextMenu(QMenu):

    sig_clicked = OrcSignal(str)

    def __init__(self, p_def):
        """
        :param p_def: [{NAME:..., STR:...}, ...]
        :return:
        """
        QMenu.__init__(self)

        for _def in p_def:

            _act = QAction(_def["NAME"], self)
            _act.triggered.connect(partial(self.menu_emit, _def["STR"]))

            self.addAction(_act)

    def show_menu(self):
        self.popup(QCursor.pos())
        self.show()

    def menu_emit(self, p_str):
        self.sig_clicked.emit(p_str)
Exemple #10
0
class ViewPageDetMag(QWidget):
    """

    """
    sig_selected = OrcSignal(str)

    def __init__(self):

        QWidget.__init__(self)

        # Current page id
        self.__page_id = None

        # Model
        self.__model = PageDetModel()
        self.__model.usr_set_definition(def_view_page_det)

        # Control
        _control = PageDetControl(def_view_page_det)

        # Data result display widget
        _wid_display = ViewTable()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons widget
        _wid_buttons = ViewButtons([
            dict(id="add", name=u"增加"),
            dict(id="delete", name=u"删除"),
            dict(id="update", name=u"修改", type="CHECK")
        ])

        # win_add
        self.__win_add = ViewAdd(def_view_page_det)

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        _layout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)
        _wid_display.clicked[QModelIndex].connect(self.__page_select)

        self.__win_add.sig_submit[dict].connect(self.add)

    def __operate(self, p_flag):

        if "add" == p_flag:
            self.__win_add.show()
        elif "delete" == p_flag:
            self.__model.usr_delete()
        elif "update" == p_flag:
            self.__model.usr_editable()
        else:
            pass

    def __page_select(self, p_index):
        page_det_id = self.__model.usr_get_data(p_index.row())["id"]
        self.sig_selected.emit(page_det_id)

    def add_show(self):
        if self.__page_id is not None:
            self.__win_add.show()

    def add(self, p_data):
        _data = p_data
        _data["page_id"] = self.__page_id
        self.__model.usr_add(_data)

    def set_page_id(self, p_page_id):
        self.__page_id = p_page_id
        self.__model.usr_search({"page_id": self.__page_id})

    def clean(self):
        self.__model.usr_clean()
Exemple #11
0
class ViewRunDef(QWidget):

    sig_search = OrcSignal()
    sig_selected = OrcSignal(str)
    sig_run = OrcSignal()

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"执行列表"
        self.__service = RunDefService()
        self.__threads = []

        # Model
        self.__model = RunDefModel()
        self.__model.usr_set_definition(def_view_run_def)

        # Control
        _control = RunDefControl(def_view_run_def)

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons window
        _wid_buttons = ViewButtons([
            dict(id="add", name=u'增加'),
            dict(id="delete", name=u"删除"),
            dict(id="search", name=u'查询'),
            dict(id="run", name=u"执行")
        ])

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        _layout.setContentsMargins(0, 0, 0, 0)

        _wid_display.clicked.connect(self.__model.usr_set_current_data)
        _wid_buttons.sig_clicked.connect(self.__operate)
        _wid_display.clicked.connect(self.select)

    def select(self, p_index):

        _node = self.__model.usr_get_node(p_index)
        _node_content = _node.content
        _node_flag = _node_content["run_flag"]
        _node_pid = _node_content["pid"]

        if _node_pid is None:
            return None

        _parent_content = _node.parent.content
        _parent_type = _parent_content["run_def_type"]
        _parent_id = _parent_content["id"]

        _file = "%s_%s/%s" % (_parent_type, _parent_id, _node_flag)

        self.sig_selected.emit(_file)

    def search(self, p_cond):
        self.__model.usr_search(p_cond)

    def __operate(self, p_flg):

        if "add" == p_flg:
            # {id, run_def_type, result}
            data = self.__model.usr_get_current_data()

            if data is None:
                return

            self.__model.usr_add(
                dict(run_def_type=data.content["run_def_type"]))

        elif "delete" == p_flg:
            self.__model.usr_delete()

        elif "search" == p_flg:
            self.sig_search.emit()

        elif "run" == p_flg:

            self.sig_run.emit()

            item_data = self.__model.usr_get_current_data()

            if item_data is not None:
                _id = item_data.content["id"]
                _pid = item_data.content["pid"]

                if _pid is None:
                    return

                _thread_run = RunThread()
                _thread_run.setup(_pid, _id)
                _thread_run.start()

                self.__threads.append(_thread_run)

        else:
            pass
Exemple #12
0
class ViewCaseDefMag(QWidget):

    sig_case_det = OrcSignal(dict)

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"用例管理"

        self.__service = CaseDefService()

        # Model
        self.__model = CaseDefModel()
        self.__model.usr_set_definition(def_view_case_def)

        # Control
        _control = CaseDefControl(def_view_case_def)

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_case_def)
        self.__wid_search_cond.set_col_num(2)
        self.__wid_search_cond.create()

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Context menu
        _wid_display.create_context_menu([
            dict(NAME=u"增加", STR="sig_add"),
            dict(NAME=u"删除", STR="sig_del"),
            dict(NAME=u"增加数据", STR="sig_data"),
            dict(NAME=u"添加至运行", STR="sig_run")
        ])

        # Buttons widget
        _wid_buttons = ViewButtons([
            dict(id="add", name=u"增加"),
            dict(id="delete", name=u"删除"),
            dict(id="update", name=u"修改", type="CHECK"),
            dict(id="search", name=u"查询")
        ])

        # win add case
        self.__win_add = ViewAdd(def_view_case_def)

        # 选择控件
        self.__win_widget_select = ViewWidgetSelect()

        # win add data
        self.__win_data = ViewDataAdd()

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)

        self.__win_add.sig_submit[dict].connect(self.add)  # 增加用例
        _wid_display.doubleClicked[QModelIndex].connect(
            self.__case_detail)  # 打开用例详情窗

        _wid_display.sig_context.connect(self.__context)  # 右键菜单
        _wid_display.clicked.connect(self.__model.usr_set_current_data)

        self.__win_data.widgets["data_flag"]["WIDGET"].clicked.connect(
            self.__win_widget_select.show)
        self.__win_widget_select.sig_selected.connect(self.set_widget)

    def set_widget(self, p_data):
        self.__win_data.set_data("data_flag", p_data["id"])

    def search(self):
        """
        查询
        :return:
        """
        self.__model.usr_search(self.__wid_search_cond.get_cond())

    def add(self, p_data):
        """
        增加用例
        :param p_data:
        :return:
        """
        self.__model.usr_add(p_data)

    def __operate(self, p_flag):

        if "add" == p_flag:
            self.__win_add.show()
        elif "delete" == p_flag:
            self.__model.usr_delete()
        elif "update" == p_flag:
            self.__model.usr_editable()
        elif "search" == p_flag:
            self.search()
        else:
            pass

    def __case_detail(self, p_index):

        if not self.__model.usr_get_editable():

            _id = self.__model.usr_get_node(p_index).content["id"]
            _no = self.__model.usr_get_node(p_index).content["case_no"]
            _data = {"id": _id, "no": _no}

            self.sig_case_det[dict].emit(_data)

    def __context(self, p_flag):

        if "sig_data" == p_flag:

            _path = self.__model.usr_get_current_data().content["case_path"]
            _id = self.__model.usr_get_current_data().content["id"]

            self.__win_data.show()
            self.__win_data.set_type("CASE")
            self.__win_data.set_path(_path)
            self.__win_data.set_id(_id)
            # self.__win_data.set_enable("data_flag", False)

        elif "sig_run" == p_flag:

            case_id = self.__model.usr_get_current_data().content["id"]
            self.__service.add_to_run(case_id)
Exemple #13
0
class ViewBatchDefMag(QWidget):

    sig_batch_det = OrcSignal(dict)

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"计划管理"

        self.__service = BatchDefService()

        # Model
        self.__model = BatchDefModel()
        self.__model.usr_set_definition(def_view_batch_def)

        # Control
        _control = BatchDefControl(def_view_batch_def)

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_batch_def)
        self.__wid_search_cond.create()

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Context menu
        _wid_display.create_context_menu([
            dict(NAME=u"增加", STR="sig_add"),
            dict(NAME=u"删除", STR="sig_del"),
            dict(NAME=u"增加数据", STR="sig_data"),
            dict(NAME=u"添加至运行", STR="sig_run")
        ])

        # Buttons widget
        _wid_buttons = ViewButtons([
            dict(id="add", name=u"增加"),
            dict(id="delete", name=u"删除"),
            dict(id="update", name=u"修改", type="CHECK"),
            dict(id="search", name=u"查询")
        ])

        # win_add
        self.__win_add = ViewAdd(def_view_batch_def)

        # win add data
        self.__win_data = ViewDataAdd()

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)

        self.__win_add.sig_submit[dict].connect(self.add)
        _wid_display.doubleClicked[QModelIndex].connect(self.__batch_detail)

        _wid_display.sig_context.connect(self.__context)  # 右键菜单
        _wid_display.clicked.connect(self.__model.usr_set_current_data)

    def search(self):
        self.__model.usr_search(self.__wid_search_cond.get_cond())

    def add(self, p_data):
        self.__model.usr_add(p_data)

    def __operate(self, p_flag):

        if "add" == p_flag:
            self.__win_add.show()
        elif "delete" == p_flag:
            self.__model.usr_delete()
        elif "update" == p_flag:
            self.__model.usr_editable()
        elif "search" == p_flag:
            self.search()
        else:
            pass

    def __batch_detail(self, p_index):

        if not self.__model.usr_get_editable():

            _id = self.__model.usr_get_node(p_index).content["id"]
            _no = self.__model.usr_get_node(p_index).content["batch_no"]
            _data = dict(id=_id, no=_no)

            self.sig_batch_det[dict].emit(_data)

    def __context(self, p_flag):

        if "sig_data" == p_flag:

            _data = self.__model.usr_get_current_data()
            _path = _data.content["batch_no"]
            _id = _data.content["id"]

            self.__win_data.show()
            self.__win_data.set_type("BATCH")
            self.__win_data.set_path(_path)
            self.__win_data.set_id(_id)

        elif "sig_run" == p_flag:

            batch_id = self.__model.usr_get_current_data().content["id"]
            self.__service.add_to_run(batch_id)
Exemple #14
0
class ViewOperate(QWidget):
    """

    """
    sig_submit = OrcSignal(dict)

    def __init__(self):

        QWidget.__init__(self)

        self.__view_page_select = ViewPageSelectMag()
        self.__view_widget_select = ViewWidgetSelect()

        self.__widget_data = dict()

        # 主 layout
        _layout = QGridLayout()
        self.setLayout(_layout)

        # 控件类型
        _type_label = QLabel(u"对象类型")
        self.__type_select = OrcSelect("operate_object_type")

        # 控件信息输入
        _widget_label = QLabel(u"控件")
        self.__widget_input = OrcLineEdit()
        self.__widget_input.setReadOnly(True)

        # 操作信息输入 layout
        _operate_label = QLabel(u"操作")
        self.__operate_select = SelectWidgetOperation()

        # 按钮
        _button_submit = QPushButton(u"确定")
        _button_cancel = QPushButton(u"取消")

        # 按钮 layout
        _layout_button = QHBoxLayout()
        _layout_button.addStretch()
        _layout_button.addWidget(_button_submit)
        _layout_button.addWidget(_button_cancel)

        _layout.addWidget(_type_label, 0, 0)
        _layout.addWidget(self.__type_select, 0, 1)
        _layout.addWidget(_widget_label, 1, 0)
        _layout.addWidget(self.__widget_input, 1, 1)
        _layout.addWidget(_operate_label, 2, 0)
        _layout.addWidget(self.__operate_select, 2, 1)
        _layout.addLayout(_layout_button, 3, 1)

        self.__change_type("PAGE")

        # connection
        _button_cancel.clicked.connect(self.close)
        _button_submit.clicked.connect(self.__submit)
        self.__widget_input.clicked.connect(self.__show_select)
        self.__view_widget_select.sig_selected[dict].connect(self.__set_widget)
        self.__view_page_select.sig_selected[dict].connect(self.__set_widget)
        self.__type_select.currentIndexChanged.connect(self.__change_type)

    def __submit(self):

        _data = dict(TYPE=self.__type_select.get_data(),
                     OBJECT=self.__widget_data["id"])

        if self.__operate_select.get_data() is not None:
            _data["OPERATION"] = self.__operate_select.get_data()

            if "INPUT" == _data["OPERATION"]:
                _data["DATA"] = ""

        self.sig_submit[dict].emit(_data)
        self.close()

    def __set_widget(self, p_data):
        """
        :param p_data: {'flag': u'dddd', 'type': u'WINDOW', 'id': '3300000002'}
        :return:
        """
        self.__widget_data = p_data
        self.__widget_input.set_data(p_data["flag"])

        # 设置操作方式
        if "type" in p_data:
            self.__operate_select.set_type(p_data["type"])

    def __change_type(self, p_data):

        _type = self.__type_select.get_data()
        print "--->", _type
        self.__widget_input.clear()

        if "WIDGET" == _type:
            self.__operate_select.set_type(_type)
        elif "PAGE" == _type:
            self.__operate_select.set_type("PAGE")
        else:
            self.__operate_select.set_type("")

    def __show_select(self):
        """
        Show a select widget according to type
        :return:
        """
        _type = self.__type_select.get_data()

        if "WIDGET" == _type:
            self.__view_widget_select.show()
        else:
            self.__view_page_select.show()
Exemple #15
0
class ViewWidgetDef(QWidget):

    sig_selected = OrcSignal(str)
    sig_search = OrcSignal()
    sig_delete = OrcSignal()

    def __init__(self, p_type=None):
        """
        支持选择类型,选择时按钮/查询条件/查询方式都有不同
        :param p_type:
        :return:
        """
        QWidget.__init__(self)

        self.__type = p_type

        # Model
        self.__model = WidgetDefModel()
        self.__model.usr_set_definition(def_view_widget_def)

        # Control
        _control = WidgetDefControl(def_view_widget_def)

        # Search
        if self.__type is not None:
            self.__wid_search_cond = ViewSearch(def_view_widget_def)
            self.__wid_search_cond.set_col_num(2)
            self.__wid_search_cond.create()
        else:
            self.__wid_search_cond = None

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons window
        btn_definition = []
        if self.__type is None:
            btn_definition.append(dict(id="add", name=u'增加')),
            btn_definition.append(dict(id="delete", name=u"删除"))
            btn_definition.append(dict(id="update", name=u"修改", type="CHECK"))
        btn_definition.append(dict(id="search", name=u"查询"))

        _wid_buttons = ViewButtons(btn_definition)
        _wid_buttons.align_back()

        # win_add
        self.__win_add = ViewAdd(def_view_widget_def)

        # Layout
        _layout = QVBoxLayout()
        if self.__type is not None:
            _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        _layout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(_layout)

        # connection
        self.__win_add.sig_submit[dict].connect(self.add)
        _wid_buttons.sig_clicked.connect(self.__operate)

        if self.__type is None:
            _wid_display.clicked[QModelIndex].connect(self.__widget_detail)
        else:
            _wid_display.doubleClicked[QModelIndex].connect(
                self.__widget_detail)

    def __operate(self, p_flg):

        if "add" == p_flg:
            self.__win_add.show()

        elif "delete" == p_flg:
            self.__model.usr_delete()
            self.sig_delete.emit()

        elif "update" == p_flg:
            self.__model.usr_editable()

        elif "search" == p_flg:
            if self.__type is None:
                self.sig_search.emit()
            else:
                _cond = self.__wid_search_cond.get_cond()
                self.search(_cond)

        else:
            pass

    def search(self, p_cond):
        self.__model.usr_search(p_cond)

    def add(self, p_data):
        self.__model.usr_add(p_data)

    def __widget_detail(self, p_index):
        _widget_id = self.__model.usr_get_node(p_index).content["id"]
        self.sig_selected[str].emit(str(_widget_id))
Exemple #16
0
class ViewAdd(QWidget):
    """
    新增弹出框
    """
    sig_submit = OrcSignal([dict])
    sig_operate = OrcSignal()

    def __init__(self, p_def):

        QWidget.__init__(self)

        self.__fields = p_def  # 控件定义
        self.widgets = dict()  # 控件

        _lay_inputs = QGridLayout()

        for _index in range(len(self.__fields)):

            if not self.__fields[_index]["ADD"]:
                continue

            _id = self.__fields[_index]["ID"]
            _type = self.__fields[_index]["TYPE"]
            _name = self.__fields[_index]["NAME"]
            _ess = self.__fields[_index]["ESSENTIAL"]

            _widget = create_editor(self,
                                    dict(TYPE=_type, SOURCE="ADD", FLAG=_id))

            self.widgets[_id] = dict(TYPE=_type,
                                     NAME=_name,
                                     WIDGET=_widget,
                                     ESSENTIAL=_ess)

            if "OPERATE" == _type:
                _widget.sig_operate.connect(self.sig_operate.emit)

            _label = QLabel(("*" if _ess else " ") + _name + ":")

            _lay_inputs.addWidget(_label, _index, 0)
            _lay_inputs.addWidget(self.widgets[_id]["WIDGET"], _index, 1)

        buttuns = ViewButtons(
            [dict(id="submit", name=u"提交"),
             dict(id="cancel", name=u"取消")])

        lay_main = QVBoxLayout()
        lay_main.addLayout(_lay_inputs)
        lay_main.addWidget(buttuns)

        self.setLayout(lay_main)

        buttuns.sig_clicked.connect(self.__operate)

        self.setStyleSheet(get_theme("Input"))

    def set_data(self, p_id, p_data):
        """
        设置数据
        :param p_id:
        :param p_data:
        :return:
        """
        self.widgets[p_id]["WIDGET"].set_data(p_data)

    def get_data(self, p_id):
        """
        获取数据
        :param p_id:
        :return:
        """
        return self.widgets[p_id]["WIDGET"].get_data()

    def set_enable(self, p_id, p_status):
        """
        设置控件可用/不可用
        :param p_id:
        :param p_status:
        :return:
        """
        self.widgets[p_id]["WIDGET"].setEnabled(p_status)

    def __operate(self, p_flag):

        if "submit" == p_flag:
            self.__submit()
        elif "cancel" == p_flag:
            self.close()
        else:
            pass

    def __submit(self):

        _res = dict()

        for t_id in self.widgets:

            _res[t_id] = self.get_data(t_id)

            # Guarantee input is not null
            if self.widgets[t_id]["ESSENTIAL"] and is_null(_res[t_id]):

                _message = u"%s不可以为空" % self.widgets[t_id]["NAME"]
                _msg_box = QMessageBox(QMessageBox.Warning, "Alert", _message)
                _msg_box.setStyleSheet(get_theme("Buttons"))
                _msg_box.exec_()

                return

        self.sig_submit[dict].emit(_res)
        self.close()
Exemple #17
0
class ViewCaseSelMag(QWidget):

    sig_selected = OrcSignal([dict])

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"选择用例"

        # Model
        self.__model = CaseSelModel()
        self.__model.usr_set_definition(def_view_case_def)

        # Control
        _control = CaseSelControl(def_view_case_def)

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_case_def)
        self.__wid_search_cond.set_col_num(2)
        self.__wid_search_cond.create()

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons widget
        _wid_buttons = ViewButtons([
            dict(id="select", name=u"选择"),
            dict(id="search", name=u"查询"),
            dict(id="cancel", name=u"取消")
        ])

        # win_add
        self.__win_add = ViewAdd(def_view_case_def)

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)

    def __operate(self, p_flag):

        if "select" == p_flag:
            self.__select()
        elif "search" == p_flag:
            self.__search()
        elif "cancel" == p_flag:
            self.close()
        else:
            pass

    def __search(self):
        self.__model.usr_search(self.__wid_search_cond.get_cond())

    def __select(self):
        _res = self.__model.usr_get_checked()
        self.sig_selected[dict].emit(_res)
        self.close()
Exemple #18
0
class ViewPageSelectMag(QWidget):

    sig_selected = OrcSignal(dict)

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"用例管理"

        # Model
        self.__model = PageSelectModel()
        self.__model.usr_set_definition(def_view_page_def)

        # Control
        _control = PageSelectControl(def_view_page_def)

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_page_def)
        self.__wid_search_cond.set_col_num(2)
        self.__wid_search_cond.create()

        # Data result display widget
        _wid_display = ViewTable()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons widget
        _wid_buttons = ViewButtons([dict(id="search", name=u"查询")])

        # win_add
        self.__win_add = ViewAdd(def_view_page_def)

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)
        _wid_display.doubleClicked.connect(self.select)

    def __operate(self, p_flag):

        if "search" == p_flag:
            self.search()
        else:
            pass

    def search(self):
        _cond = self.__wid_search_cond.get_cond()
        self.__model.usr_search(_cond)

    def select(self, p_index):

        _node = self.__model.usr_get_data(p_index.row())
        _id = _node["id"]
        _flag = _node["page_flag"]

        self.sig_selected.emit(dict(id=str(_id), flag=_flag))

        self.close()
Exemple #19
0
class WidgetTest(QWidget):

    sig_exec = OrcSignal()

    def __init__(self):

        QWidget.__init__(self)

        self.__dict = LibDict()
        self.__service = WebMainService()

        self.id = None
        self.type = None
        self.operation = None
        self.data = None
        self.env = None

        # 输入框
        _layout_top = QGridLayout()

        self.__edit_type = OrcSelect()  # 类型,页面或者控件
        self.__edit_flag = OrcLineEdit()  # 标识符
        self.__widget_type = SelectWidgetType(True)  # 控件类型
        self.__widget_ope = SelectWidgetOperation(True)  # 控件操作类型
        self.__widget_data = OrcLineEdit()

        self.__edit_type.set_empty()
        self.__edit_type.set_flag("operate_object_type")
        self.__edit_type.setEnabled(False)
        self.__edit_flag.setEnabled(False)
        self.__widget_type.setEnabled(False)
        self.__widget_data.setEnabled(False)

        _layout_top.addWidget(QLabel(u"类型:"), 0, 0)
        _layout_top.addWidget(self.__edit_type, 0, 1)
        _layout_top.addWidget(QLabel(u"标识:"), 1, 0)
        _layout_top.addWidget(self.__edit_flag, 1, 1)
        _layout_top.addWidget(QLabel(u"控件:"), 2, 0)
        _layout_top.addWidget(self.__widget_type, 2, 1)
        _layout_top.addWidget(QLabel(u"操作:"), 3, 0)
        _layout_top.addWidget(self.__widget_ope, 3, 1)
        _layout_top.addWidget(QLabel(u"数据:"), 4, 0)
        _layout_top.addWidget(self.__widget_data, 4, 1)

        self.__edit_status = OrcTextArea(self)
        self.__edit_status.setReadOnly(True)

        # 按钮
        _layout_button = QHBoxLayout()

        self.__btn_exec = QPushButton(u"执行")
        self.__btn_exec.setStyleSheet(get_theme("Buttons"))

        _layout_button.addStretch()
        _layout_button.addWidget(self.__btn_exec)

        # 主界面
        _layout = QVBoxLayout()
        _layout.addLayout(_layout_top)
        _layout.addWidget(self.__edit_status)
        _layout.addLayout(_layout_button)

        self.setLayout(_layout)

        self.__widget_ope.currentIndexChanged.connect(self.__set_operation)
        self.__widget_data.textChanged.connect(self.__set_data)
        self.__btn_exec.clicked.connect(self.sig_exec.emit)

    def __set_operation(self):

        _ope = self.__widget_ope.get_data()

        if not _ope:
            self.operation = None
        else:
            self.operation = _ope

    def __set_data(self):
        self.data = self.__widget_data.get_data()

    def set_type(self, p_type, p_id):

        # 设置对象类型
        _type_text = self.__dict.get_dict("operate_object_type",
                                          p_type)[0].dict_text
        self.__edit_type.set_data(_type_text)

        self.id = p_id
        self.type = p_type

        if "PAGE" == p_type:

            _page_id, _page_flg, _page_env = self.__service.get_page_key(p_id)
            _page_key = "%s[%s]" % (_page_flg, _page_env)

            self.id = _page_id
            self.env = _page_env

            # 设置页面标识
            self.__edit_flag.set_data(_page_key)

            # 禁用控件类型
            self.__widget_type.set_data("")

            # 页面操作项
            self.__widget_ope.set_type("PAGE")
            # self.__widget_ope.setEnabled(False)

            # 禁止输入数据
            self.__widget_data.clear()
            self.__widget_data.setEnabled(False)

        elif "WIDGET" == p_type:

            _widget_key = self.__service.get_widget_key(p_id)
            _widget_type = self.__service.get_widget_type(p_id)

            # 设置控件标识
            self.__edit_flag.set_data(_widget_key)

            # 设置控件类型
            self.__widget_type.set_data(_widget_type)

            # 重置控件操作项
            self.__widget_ope.set_type(_widget_type)
            # self.__widget_ope.setEnabled(True)

            # 数据输入框可用
            self.__widget_data.setEnabled(True)

        else:
            pass

    def set_env(self, p_env):
        self.env = p_env

    def set_status(self, p_status):

        if p_status:
            self.__edit_status.setText("Success")
        else:
            self.__edit_status.setText("Fail")
Exemple #20
0
class ViewWebMain(QWidget):
    """

    """
    sig_page_selected = OrcSignal(str)

    def __init__(self):
        QWidget.__init__(self)

        self.title = u"Web对象管理"

        # Page
        _page = PageContainer()

        # Window
        _window = ViewWindow()

        # Widget
        _widget = WidgetContainer()

        # 页面 tab
        _tab = QTabWidget()
        _tab.addTab(_page, _page.title)
        _tab.addTab(_window, _window.title)
        _tab.addTab(_widget, _widget.title)

        _tab.setTabPosition(QTabWidget.West)
        _tab.setStyleSheet(get_theme("TabViewWeb"))

        # 测试区
        self.__test = WidgetTest()
        self.__test.setStyleSheet(get_theme("TestWidget"))

        # 主layout
        _layout = QHBoxLayout()
        _layout.addWidget(_tab)
        _layout.addWidget(self.__test)

        _layout.setStretch(0, 5)
        _layout.setStretch(1, 1)

        _layout.setContentsMargins(0, 0, 0, 0)
        _layout.setSpacing(0)

        self.setLayout(_layout)

        # 信号
        _page.sig_selected.connect(self.set_page)
        _widget.sig_selected.connect(self.set_widget)
        self.__test.sig_exec.connect(self.send)

    def set_page(self, p_id):
        self.__test.set_type("PAGE", p_id)

    def set_widget(self, p_id):
        self.__test.set_type("WIDGET", p_id)

    def send(self):
        # Todo 接口调用方式
        _data = dict(OBJECT=self.__test.id,
                     TYPE=self.__test.type,
                     ENV=self.__test.env,
                     OPERATION=self.__test.operation,
                     DATA=self.__test.data)

        from OrcLib.LibNet import OrcSocketResource

        _resource = OrcSocketResource("DriverWeb")

        _result = _resource.get(_data)
        self.__test.set_status(_result)
Exemple #21
0
class ViewPageDefMag(QWidget):

    sig_selected = OrcSignal(str)
    sig_search = OrcSignal()
    sig_delete = OrcSignal()

    def __init__(self):

        QWidget.__init__(self)

        self.title = u"用例管理"

        # Model
        self.__model = PageDefModel()
        self.__model.usr_set_definition(def_view_page_def)

        # Control
        _control = PageDefControl(def_view_page_def)

        # Data result display widget
        _wid_display = ViewTable()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons widget
        _wid_buttons = ViewButtons([
            dict(id="add", name=u"增加"),
            dict(id="delete", name=u"删除"),
            dict(id="update", name=u"修改", type="CHECK"),
            dict(id="search", name=u"查询")
        ])

        # win_add
        self.__win_add = ViewAdd(def_view_page_def)

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        _layout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)

        self.__win_add.sig_submit[dict].connect(self.add)
        _wid_display.clicked[QModelIndex].connect(self.__page_detail)

    def search(self, p_cond):
        self.__model.usr_search(p_cond)

    def add(self, p_data):
        self.__model.usr_add(p_data)

    def __operate(self, p_flag):

        if "add" == p_flag:
            self.__win_add.show()
        elif "delete" == p_flag:
            self.__model.usr_delete()
            self.sig_delete.emit()
        elif "update" == p_flag:
            self.__model.usr_editable()
        elif "search" == p_flag:
            self.sig_search.emit()
        else:
            pass

    def __page_detail(self, p_index):
        _page_id = self.__model.usr_get_data(p_index.row())["id"]
        self.sig_selected[str].emit(str(_page_id))
Exemple #22
0
class ViewCaseDetMag(QWidget):

    sig_select = OrcSignal(str)
    sig_search = OrcSignal()
    sig_delete = OrcSignal()

    def __init__(self, p_id):

        QWidget.__init__(self)

        self.__case_id = p_id

        # Model
        self.__model = CaseDetModel()
        self.__model.usr_set_definition(def_view_case_det)
        self.__model.usr_search({"case_id": self.__case_id})

        # Control
        _control = CaseDetControl(def_view_case_det)

        # Data result display widget
        _wid_display = ViewTable()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # 界面列宽自适应
        # _wid_display.resizeColumnsToContents()

        # Context menu
        _menu_def = [
            dict(NAME=u"增加", STR="sig_add"),
            dict(NAME=u"删除", STR="sig_del"),
            dict(NAME=u"增加数据", STR="sig_data")
        ]

        _wid_display.create_context_menu(_menu_def)

        # Buttons widget
        _wid_buttons = ViewButtons([
            dict(id="add", name=u"增加"),
            dict(id="delete", name=u"删除"),
            dict(id="update", name=u"修改", type="CHECK")
        ], "VER")

        # win_add
        self.__win_add = ViewAdd(def_view_case_det)

        # win add data
        self.__win_data = ViewDataAdd()

        # Layout
        _layout = QHBoxLayout()
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        _layout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)

        _wid_display.clicked.connect(self.__selected)
        self.__win_add.sig_submit.connect(self.add)

        _wid_display.sig_context.connect(self.__context)  # 右键菜单
        _wid_display.clicked.connect(self.__model.usr_set_current_data)

    def add(self, p_data):

        _data = dict(case_det={"case_id": self.__case_id}, step=p_data)
        self.__model.usr_add(_data)

    def __operate(self, p_flag):

        if "add" == p_flag:
            self.__win_add.show()
        elif "delete" == p_flag:
            self.__model.usr_delete()
            self.sig_delete.emit()
        elif "update" == p_flag:
            self.__model.usr_editable()
        else:
            pass

    def __selected(self, p_index):

        _index = p_index.row()
        _step_id = self.__model.usr_get_data(_index)["step_id"]

        self.sig_select.emit(str(_step_id))

    def __context(self, p_flag):

        if "sig_data" == p_flag:

            _path = self.__model.usr_get_current_data()["step_no"]
            self.__win_data.show()
            self.__win_data.set_type("STEP")
            self.__win_data.set_id(_path)
Exemple #23
0
class ViewButtons(QWidget):

    sig_clicked = OrcSignal(str)

    def __init__(self, p_def, p_direction="HOR"):
        """
        生成一个按钮组
        :param p_def: [{id, name, type=None}]
        :return: None
        """
        QWidget.__init__(self)

        # 定义
        self.__definition = p_def

        # 按钮字典
        self.__buttons = dict()

        # 设置方向
        if "HOR" == p_direction:
            self.__layout = QHBoxLayout()
        else:
            self.__layout = QVBoxLayout()

        # 设置 layout
        self.setLayout(self.__layout)

        # 添加按钮
        for t_def in self.__definition:

            _id = t_def["id"]
            _name = t_def["name"]
            _type = None if "type" not in t_def else t_def["type"]

            _button = QPushButton(_name)

            # Toggle button
            if _type is not None and "CHECK" == _type:
                _button.setCheckable(True)

            _button.clicked.connect(partial(self.sig_clicked.emit, _id))

            self.__buttons["id"] = _button
            self.__layout.addWidget(_button)

        # 默认向右对齐
        self.align_back()

        # 设置样式
        self.setStyleSheet(get_theme("Buttons"))

    def align_back(self):
        """
        向下/向右对齐
        :return:
        """
        self.__layout.insertStretch(0)

    def align_front(self):
        """
        向下/向左对齐
        :return:
        """
        self.__layout.addStretch()

    def set_disable(self, p_id):
        """
        设置按钮不可用
        :param p_id:
        :return:
        """
        if p_id in self.__buttons:
            self.__buttons[p_id].setEnabled(False)

    def set_enable(self, p_id):
        """
        设置按钮可用
        :param p_id:
        :return:
        """
        if p_id in self.__buttons:
            self.__buttons[p_id].setEnabled(True)
Exemple #24
0
class ViewCaseSelMag(QWidget):

    sig_selected = OrcSignal([dict])

    def __init__(self, p_type=None):

        QWidget.__init__(self)

        self.title = u"选择用例"

        self.__type = "MULTI" if p_type is None else p_type

        # Model
        self.__model = CaseSelModel()
        self.__model.usr_set_definition(def_view_case_def)

        if "SINGLE" == self.__type:
            self.__model.usr_chk_able()

        # Control
        _control = CaseSelControl(def_view_case_def)

        # Search condition widget
        self.__wid_search_cond = ViewSearch(def_view_case_def)
        self.__wid_search_cond.set_col_num(2)
        self.__wid_search_cond.create()

        # Data result display widget
        _wid_display = ViewTree()
        _wid_display.set_model(self.__model)
        _wid_display.set_control(_control)

        # Buttons widget
        if "SINGLE" == self.__type:
            button_def = []
        else:
            button_def = [dict(id="select", name=u"选择")]

        button_def.extend([
            dict(id="search", name=u"查询"),
            dict(id="cancel", name=u"取消")])
        _wid_buttons = ViewButtons(button_def)

        # win_add
        self.__win_add = ViewAdd(def_view_case_def)

        # Layout
        _layout = QVBoxLayout()
        _layout.addWidget(self.__wid_search_cond)
        _layout.addWidget(_wid_display)
        _layout.addWidget(_wid_buttons)

        self.setLayout(_layout)

        # Connection
        _wid_buttons.sig_clicked.connect(self.__operate)
        _wid_display.clicked.connect(self.__model.usr_set_current_data)
        _wid_display.doubleClicked.connect(self.__select_one)

    def __operate(self, p_flag):

        if "select" == p_flag:
            self.__select()
        elif "search" == p_flag:
            self.__search()
        elif "cancel" == p_flag:
            self.close()
        else:
            pass

    def __search(self):
        self.__model.usr_search(self.__wid_search_cond.get_cond())

    def __select(self):
        _res = self.__model.usr_get_checked()
        self.sig_selected[dict].emit(_res)
        self.close()

    def __select_one(self):
        _res = self.__model.usr_get_current_data().content["id"]
        self.sig_selected[dict].emit([_res])
        self.close()