コード例 #1
0
    def _init_ui(self):
        table_small = MListView(size=dayu_theme.small)
        table_default = MListView()
        table_large = MListView(size=dayu_theme.large)

        model_1 = MTableModel()
        model_1.set_header_list(mock.header_list)
        model_sort = MSortFilterModel()
        model_sort.setSourceModel(model_1)
        table_small.setModel(model_sort)
        table_default.setModel(model_sort)
        table_large.setModel(model_sort)
        model_sort.set_header_list(mock.header_list)
        table_small.set_header_list(mock.header_list)
        table_default.set_header_list(mock.header_list)
        table_large.set_header_list(mock.header_list)
        model_1.set_data_list(mock.data_list)

        line_edit = MLineEdit().search().small()
        line_edit.textChanged.connect(model_sort.set_search_pattern)

        main_lay = QVBoxLayout()
        main_lay.addWidget(line_edit)
        main_lay.addWidget(MDivider('Small Size'))
        main_lay.addWidget(table_small)
        main_lay.addWidget(MDivider('Default Size'))
        main_lay.addWidget(table_default)
        main_lay.addWidget(MDivider('Large Size'))
        main_lay.addWidget(table_large)
        main_lay.addStretch()
        self.setLayout(main_lay)
コード例 #2
0
    def __init__(self, view_type=None, parent=None):
        super(MItemViewSet, self).__init__(parent)
        self.main_lay = QtWidgets.QVBoxLayout()
        self.main_lay.setSpacing(5)
        self.main_lay.setContentsMargins(0, 0, 0, 0)

        self.sort_filter_model = MSortFilterModel()
        self.source_model = MTableModel()
        self.sort_filter_model.setSourceModel(self.source_model)
        view_class = view_type or MItemViewSet.TableViewType
        self.item_view = view_class()
        self.item_view.doubleClicked.connect(self.sig_double_clicked)
        self.item_view.pressed.connect(self.slot_left_clicked)
        self.item_view.setModel(self.sort_filter_model)

        self._search_line_edit = MLineEdit().search().small()
        self._search_attr_button = (
            MToolButton().icon_only().svg("down_fill.svg").small())
        self._search_line_edit.set_prefix_widget(self._search_attr_button)
        self._search_line_edit.textChanged.connect(
            self.sort_filter_model.set_search_pattern)
        self._search_line_edit.setVisible(False)
        self._search_lay = QtWidgets.QHBoxLayout()
        self._search_lay.setContentsMargins(0, 0, 0, 0)
        self._search_lay.addStretch()
        self._search_lay.addWidget(self._search_line_edit)

        self.main_lay.addLayout(self._search_lay)
        self.main_lay.addWidget(self.item_view)
        self.setLayout(self.main_lay)
コード例 #3
0
    def _init_ui(self):
        model_1 = MTableModel()
        model_1.set_header_list(mock.header_list)
        model_sort = MSortFilterModel()
        model_sort.setSourceModel(model_1)

        tree_view = MTreeView()
        tree_view.setModel(model_sort)

        model_sort.set_header_list(mock.header_list)
        tree_view.set_header_list(mock.header_list)
        model_1.set_data_list(mock.tree_data_list)

        line_edit = MLineEdit().search().small()
        line_edit.textChanged.connect(model_sort.set_search_pattern)

        expand_all_button = MPushButton('Expand All').small()
        expand_all_button.clicked.connect(tree_view.expandAll)
        collapse_all_button = MPushButton('Collapse All').small()
        collapse_all_button.clicked.connect(tree_view.collapseAll)
        button_lay = QHBoxLayout()
        button_lay.addWidget(expand_all_button)
        button_lay.addWidget(collapse_all_button)
        button_lay.addWidget(line_edit)
        button_lay.addStretch()

        main_lay = QVBoxLayout()
        main_lay.addLayout(button_lay)
        main_lay.addWidget(tree_view)
        main_lay.addStretch()
        self.setLayout(main_lay)
コード例 #4
0
    def __init__(self, parent=None):
        super(SocketTool, self).__init__(parent=parent)
        ui_file = os.path.join(__file__, "..", "skeletal_socket_tool.ui")
        load_ui(ui_file, self)

        self.model = MTableModel()
        header_list = [u"骨骼", u"插槽"]
        self.header_list = [
            {
                "label": data,
                "key": data,
                "editable": True,
                "selectable": True,
                "width": 400,
            }
            for data in header_list
        ]
        self.model.set_header_list(self.header_list)

        self.model_sort = MSortFilterModel()
        self.model_sort.setSourceModel(self.model)

        self.Table_View.setShowGrid(True)
        self.Table_View.setModel(self.model_sort)
        header = self.Table_View.horizontalHeader()
        header.setStretchLastSection(True)

        self.popMenu = QtWidgets.QMenu(self)
        action = QtWidgets.QAction(u"删除选择", self)
        action.triggered.connect(self.remove_line)
        self.popMenu.addAction(action)
        action = QtWidgets.QAction(u"添加一行", self)
        action.triggered.connect(self.add_line)
        self.popMenu.addAction(action)

        self.Table_View.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.Table_View.customContextMenuRequested.connect(self.on_context_menu)

        self.Close_Action.triggered.connect(self.close)
        self.Export_CSV_Action.triggered.connect(self.export_csv)
        self.Import_CSV_Action.triggered.connect(self.import_csv)
        self.Help_Action.triggered.connect(
            lambda: webbrowser.open_new_tab(
                "http://wiki.l0v0.com/unreal/PyToolkit/#/anim/2_skeletal_socket_tool"
            )
        )
        self.Socket_BTN.clicked.connect(self.add_socket)
        self.Clear_BTN.clicked.connect(self.clear_socket)

        # NOTE 读取 csv
        self.settings = QtCore.QSettings(
            "%s.ini" % self.__class__.__name__, QtCore.QSettings.IniFormat
        )
        csv_file = self.settings.value("csv_file")
        # csv_file = os.path.join(__file__,"..","test.csv")
        if csv_file and os.path.exists(csv_file):
            self.handle_csv(csv_file)
コード例 #5
0
    def _init_ui(self):
        model_1 = MTableModel()
        model_1.set_header_list(mock.header_list)
        model_sort = MSortFilterModel()
        model_sort.setSourceModel(model_1)

        table_small = MTableView(size=dayu_theme.small, show_row_count=True)
        table_grid = MTableView(size=dayu_theme.small, show_row_count=True)
        table_grid.setShowGrid(True)
        table_default = MTableView(size=dayu_theme.medium, show_row_count=True)
        thread = MFetchDataThread(self)

        self.loading_wrapper = MLoadingWrapper(widget=table_default,
                                               loading=False)
        thread.started.connect(
            functools.partial(self.loading_wrapper.set_dayu_loading, True))
        thread.finished.connect(
            functools.partial(self.loading_wrapper.set_dayu_loading, False))
        thread.finished.connect(
            functools.partial(table_default.setModel, model_sort))
        button = MPushButton(text="Get Data: 4s")
        button.clicked.connect(thread.start)
        switch_lay = QtWidgets.QHBoxLayout()
        switch_lay.addWidget(button)
        switch_lay.addStretch()
        table_large = MTableView(size=dayu_theme.large, show_row_count=False)

        table_small.setModel(model_sort)
        table_grid.setModel(model_sort)
        table_large.setModel(model_sort)
        model_sort.set_header_list(mock.header_list)
        table_small.set_header_list(mock.header_list)
        table_grid.set_header_list(mock.header_list)
        table_default.set_header_list(mock.header_list)
        table_large.set_header_list(mock.header_list)
        model_1.set_data_list(mock.data_list)

        line_edit = MLineEdit().search().small()
        line_edit.textChanged.connect(model_sort.set_search_pattern)

        main_lay = QtWidgets.QVBoxLayout()
        main_lay.addWidget(line_edit)
        main_lay.addWidget(MDivider("Small Size"))
        main_lay.addWidget(table_small)
        main_lay.addWidget(MDivider("Default Size"))
        main_lay.addLayout(switch_lay)
        main_lay.addWidget(self.loading_wrapper)
        main_lay.addWidget(MDivider("Large Size (Hide Row Count)"))
        main_lay.addWidget(table_large)
        main_lay.addWidget(MDivider("With Grid"))
        main_lay.addWidget(table_grid)
        main_lay.addStretch()
        main_lay.addWidget(
            MAlert('Simply use "MItemViewSet" or "MItemViewFullSet"'))
        self.setLayout(main_lay)
コード例 #6
0
    def _init_ui(self):
        model_1 = MTableModel()
        model_1.set_header_list(header_list)
        model_sort = MSortFilterModel()
        model_sort.setSourceModel(model_1)

        table_grid = MTableView(size=dayu_theme.small, show_row_count=True)
        table_grid.setShowGrid(True)
        table_grid.setModel(model_sort)
        model_sort.set_header_list(header_list)
        table_grid.set_header_list(header_list)
        button_delegate = MPushButtonDelegate(parent=self)
        table_grid.setItemDelegateForColumn(4, button_delegate)
        button_delegate.sig_clicked.connect(self.slot_cell_clicked)
        model_1.set_data_list([
            {
                "name": "John Brown",
                "sex": "Male",
                "sex_list": ["Male", "Female"],
                "age": 18,
                "score": 89,
                "city": "New York",
                "city_list": ["New York", "Ottawa", "London", "Sydney"],
                "date": "2016-10-03",
            },
            {
                "name": "Jim Green",
                "sex": "Male",
                "sex_list": ["Male", "Female"],
                "age": 24,
                "score": 55,
                "city": "London",
                "city_list": ["New York", "Ottawa", "London", "Sydney"],
                "date": "2016-10-01",
            },
        ])

        main_lay = QtWidgets.QVBoxLayout()
        main_lay.addWidget(table_grid)
        self.setLayout(main_lay)
コード例 #7
0
    def __init__(self, parent=None):
        super(RenamerWinBase, self).__init__(parent)
        DIR, file_name = os.path.split(__file__)
        file_name = os.path.splitext(file_name)[0]
        load_ui(os.path.join(DIR, "%s.ui" % file_name), self)

        # NOTE 获取 convention 数据
        self.conventions = get_convention()

        name = "%s.ini" % self.__class__.__name__
        self.settings = QtCore.QSettings(name, QtCore.QSettings.IniFormat)
        # NOTE 配置 MComboBox
        self.Search_LE.setPlaceholderText(u"输入关键字")
        self.Replace_LE.setPlaceholderText(u"输入替换文字")
        self.Export_Setting_Action.triggered.connect(self.export_setting)
        self.Import_Setting_Action.triggered.connect(self.import_setting)
        self.Help_Action.triggered.connect(lambda: webbrowser.open_new_tab(
            'http://wiki.l0v0.com/unreal/PyToolkit/#/msic/2_renamer'))
        self.Convention_Action.triggered.connect(
            lambda: webbrowser.open_new_tab(
                'https://github.com/Allar/ue4-style-guide'))

        # NOTE 隐藏左侧配置项
        self.Splitter.splitterMoved.connect(lambda: self.settings.setValue(
            "splitter_size", self.Splitter.sizes()))
        splitter_size = self.settings.value("splitter_size")
        self.Splitter.setSizes(
            [int(i) for i in splitter_size] if splitter_size else [0, 1])

        # NOTE 配置 Header
        self.model = MTableModel()
        self.header_list = [{
            'label':
            data,
            'key':
            data,
            'bg_color':
            lambda x, y: y.get('bg_color', QtGui.QColor('transparent')),
            'tooltip':
            lambda x, y: y.get('asset').get_path_name(),
            'edit':
            lambda x, y: x or y.get('asset').get_name(),
            'display':
            lambda x, y: x or y.get('asset').get_name(),
            'editable':
            i == 1,
            'draggable':
            True,
            'width':
            100,
        } for i, data in enumerate([u"原名称", u"新名称", u"文件类型"])]
        self.model.set_header_list(self.header_list)
        self.model_sort = MSortFilterModel()
        self.model_sort.setSourceModel(self.model)

        self.Table_View.setModel(self.model_sort)
        self.Table_View.setShowGrid(True)
        header = self.Table_View.horizontalHeader()
        header.setStretchLastSection(True)

        self.setAcceptDrops(True)
        self.load_settings()
コード例 #8
0
    def __init__(self, parent=None):
        super(PropertyTransferTool, self).__init__(parent)
        DIR, file_name = os.path.split(__file__)
        file_name = os.path.splitext(file_name)[0]
        load_ui(os.path.join(DIR, "%s.ui" % file_name), self)

        self.source = None

        help_link = "http://redarttoolkit.pages.oa.com/docs/posts/85c3f876.html"
        self.Help_Action.triggered.connect(
            lambda: webbrowser.open_new_tab(help_link))

        # NOTE 设置按钮图标
        QtCore.QTimer.singleShot(0, self.update_icon)

        menu_callback = lambda: self.Asset_Menu.popup(QtGui.QCursor.pos())
        self.Asset_List.customContextMenuRequested.connect(menu_callback)
        menu_callback = lambda: self.Property_Menu.popup(QtGui.QCursor.pos())
        self.Property_Tree.customContextMenuRequested.connect(menu_callback)

        self.Asset_Label.setVisible(lambda: self.state.lable_visible)
        self.Asset_Label.setText(lambda: self.state.lable_text)

        self.Src_BTN.clicked.connect(self.get_source)
        self.Dst_BTN.clicked.connect(self.get_destination)
        self.Transfer_BTN.clicked.connect(self.transfer_property)

        # NOTE 配置 splitter
        name = "%s.ini" % self.__class__.__name__
        self.settings = QtCore.QSettings(name, QtCore.QSettings.IniFormat)
        self.Splitter.splitterMoved.connect(lambda: self.settings.setValue(
            "splitter_size", self.Splitter.sizes()))
        splitter_size = self.settings.value("splitter_size")
        size = [int(i) for i in splitter_size] if splitter_size else [700, 200]
        self.Splitter.setSizes(size)

        # NOTE 配置搜索栏
        self.Dst_Filter_LE.search()
        self.Dst_Filter_LE.setPlaceholderText("")
        self.Prop_Filter_LE.search()
        self.Prop_Filter_LE.setPlaceholderText("")

        # NOTE 配置 Property_Tree
        self.property_model = MTableModel()
        columns = {u"property": "属性名", u"value": "数值"}
        self.property_header_list = [{
            "label":
            label,
            "key":
            key,
            "bg_color":
            lambda x, y: y.get("bg_color", QtGui.QColor("transparent")),
            "checkable":
            i == 0,
            "searchable":
            True,
            "width":
            300,
            "font":
            lambda x, y: {
                "bold": True
            },
        } for i, (key, label) in enumerate(columns.items())]
        self.property_model.set_header_list(self.property_header_list)
        self.property_model_sort = MSortFilterModel()
        self.property_model_sort.set_header_list(self.property_header_list)
        self.property_model_sort.setSourceModel(self.property_model)
        self.Prop_Filter_LE.textChanged.connect(
            self.property_model_sort.set_search_pattern)

        self.Property_Tree.setModel(self.property_model_sort)
        header = self.Property_Tree.header()
        header.setStretchLastSection(True)

        # NOTE 配置 Asset_List
        self.asset_model = MTableModel()
        self.asset_header_list = [{
            "label":
            "destination",
            "key":
            "destination",
            "bg_color":
            lambda x, y: y.get("bg_color", QtGui.QColor("transparent")),
            "tooltip":
            lambda x, y: y.get("asset").get_path_name(),
            "checkable":
            True,
            "searchable":
            True,
            "width":
            300,
            "font":
            lambda x, y: {
                "bold": True
            },
        }]
        self.asset_model.set_header_list(self.asset_header_list)
        self.asset_model_sort = MSortFilterModel()
        self.asset_model_sort.search_reg.setPatternSyntax(
            QtCore.QRegExp.RegExp)
        self.asset_model_sort.set_header_list(self.asset_header_list)
        self.asset_model_sort.setSourceModel(self.asset_model)
        self.Dst_Filter_LE.textChanged.connect(
            self.asset_model_sort.set_search_pattern)

        self.Asset_List.setModel(self.asset_model_sort)
        self.Asset_List.selectionModel().selectionChanged.connect(
            self.asset_selection_change)
        self.property_model.dataChanged.connect(self.asset_selection_change)
コード例 #9
0
    def __init__(self, table_view=True, big_view=False, parent=None):
        super(MItemViewFullSet, self).__init__(parent)
        self.sort_filter_model = MSortFilterModel()
        self.source_model = MTableModel()
        self.sort_filter_model.setSourceModel(self.source_model)

        self.stack_widget = QtWidgets.QStackedWidget()

        self.view_button_grp = MToolButtonGroup(exclusive=True)
        data_group = []
        if table_view:
            self.table_view = MTableView(show_row_count=True)
            self.table_view.doubleClicked.connect(self.sig_double_clicked)
            self.table_view.pressed.connect(self.slot_left_clicked)
            self.table_view.setModel(self.sort_filter_model)
            self.stack_widget.addWidget(self.table_view)
            data_group.append({
                "svg": "table_view.svg",
                "checkable": True,
                "tooltip": "Table View"
            })
        if big_view:
            self.big_view = MBigView()
            self.big_view.doubleClicked.connect(self.sig_double_clicked)
            self.big_view.pressed.connect(self.slot_left_clicked)
            self.big_view.setModel(self.sort_filter_model)
            self.stack_widget.addWidget(self.big_view)
            data_group.append({
                "svg": "big_view.svg",
                "checkable": True,
                "tooltip": "Big View"
            })

        # 设置多个view 共享 MItemSelectionModel
        leader_view = self.stack_widget.widget(0)
        self.selection_model = leader_view.selectionModel()
        for index in range(self.stack_widget.count()):
            if index == 0:
                continue
            other_view = self.stack_widget.widget(index)
            other_view.setSelectionModel(self.selection_model)

        self.selection_model.currentChanged.connect(self.sig_current_changed)
        self.selection_model.currentRowChanged.connect(
            self.sig_current_row_changed)
        self.selection_model.currentColumnChanged.connect(
            self.sig_current_column_changed)
        self.selection_model.selectionChanged.connect(
            self.sig_selection_changed)

        self.tool_bar = QtWidgets.QWidget()
        self.top_lay = QtWidgets.QHBoxLayout()
        self.top_lay.setContentsMargins(0, 0, 0, 0)
        if data_group and len(data_group) > 1:
            self.view_button_grp.sig_checked_changed.connect(
                self.stack_widget.setCurrentIndex)
            self.view_button_grp.set_button_list(data_group)
            self.view_button_grp.set_dayu_checked(0)
            self.top_lay.addWidget(self.view_button_grp)
        self.search_line_edit = MLineEdit().search().small()
        self.search_attr_button = MToolButton().icon_only().svg(
            "down_fill.svg").small()
        self.search_line_edit.set_prefix_widget(self.search_attr_button)
        self.search_line_edit.textChanged.connect(
            self.sort_filter_model.set_search_pattern)
        self.search_line_edit.setVisible(False)

        self.top_lay.addStretch()
        self.top_lay.addWidget(self.search_line_edit)
        self.tool_bar.setLayout(self.top_lay)

        self.page_set = MPage()
        self.main_lay = QtWidgets.QVBoxLayout()
        self.main_lay.setSpacing(5)
        self.main_lay.setContentsMargins(0, 0, 0, 0)
        self.main_lay.addWidget(self.tool_bar)
        self.main_lay.addWidget(self.stack_widget)
        self.main_lay.addWidget(self.page_set)
        self.setLayout(self.main_lay)