Esempio n. 1
0
    def __init__(self, parent=None):
        super(ComparingTable, self).__init__(parent=parent)

        data = {
            "model": models.ComparerModel(),
            "proxy": QtCore.QSortFilterProxyModel(),
            "view": QtWidgets.QTreeView(),
            "diff": delegates.DiffDelegate(),
            "path": delegates.PathTextDelegate(),
        }

        data["view"].setIndentation(20)
        data["view"].setStyleSheet("""
            QTreeView::item{
                padding: 6px 1px;
                border: 0px;
            }
        """)
        data["view"].setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        data["view"].setAllColumnsShowFocus(True)
        data["view"].setAlternatingRowColors(True)
        data["view"].setSortingEnabled(True)
        data["view"].setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectItems)
        data["view"].setSelectionMode(
            QtWidgets.QAbstractItemView.ExtendedSelection)

        header = data["view"].header()
        header.setMinimumSectionSize(delegates.DiffDelegate.ICON_SPACE)

        # Delegate
        diff_delegate = data["diff"]
        column = data["model"].Columns.index("diff")
        data["view"].setItemDelegateForColumn(column, diff_delegate)

        path_delegate = data["path"]
        column = data["model"].Columns.index(SIDE_A)
        data["view"].setItemDelegateForColumn(column, path_delegate)
        column = data["model"].Columns.index(SIDE_B)
        data["view"].setItemDelegateForColumn(column, path_delegate)

        # Set Model
        data["proxy"].setSourceModel(data["model"])
        data["view"].setModel(data["proxy"])

        layout = QtWidgets.QHBoxLayout(self)
        layout.addWidget(data["view"])

        # Connect
        data["view"].customContextMenuRequested.connect(self.on_context_menu)

        # Init

        data["view"].setColumnWidth(0, 90)  # "diff" column
        data["view"].setColumnWidth(1, 310)   # "side A" column

        self.data = data
Esempio n. 2
0
    def __init__(self, parent=None):
        super(SequenceWidget, self).__init__(parent=parent)

        data = {
            "model": SequenceModel(),
            "proxy": QtCore.QSortFilterProxyModel(),
            "view": QtWidgets.QTreeView(),
            "fpatternDel": None,
            "nameDel": None,
        }

        data["proxy"].setSourceModel(data["model"])
        data["view"].setModel(data["proxy"])
        data["fpatternDel"] = delegates.LineHTMLDelegate(data["view"])
        data["nameDel"] = delegates.NameEditDelegate()

        fpattern_delegate = data["fpatternDel"]
        column = data["model"].Columns.index("fpattern")
        data["view"].setItemDelegateForColumn(column, fpattern_delegate)

        name_delegate = data["nameDel"]
        column = data["model"].Columns.index("name")
        data["view"].setItemDelegateForColumn(column, name_delegate)

        data["proxy"].setSortCaseSensitivity(QtCore.Qt.CaseInsensitive)
        data["view"].setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        data["view"].setSelectionMode(ExtendedSelection)
        data["view"].setSortingEnabled(True)
        data["view"].sortByColumn(0, QtCore.Qt.AscendingOrder)
        data["view"].setAlternatingRowColors(True)
        data["view"].setAllColumnsShowFocus(True)
        data["view"].setIndentation(6)
        data["view"].setStyleSheet("""
            QTreeView::item{
                padding: 8px 1px;
                border: 0px;
            }
        """)

        data["view"].setColumnWidth(0, 360)  # fpattern
        data["view"].setColumnWidth(1, 100)  # name
        data["view"].setColumnWidth(2, 80)  # frames

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(data["view"])
        layout.setContentsMargins(0, 0, 0, 0)

        data["view"].customContextMenuRequested.connect(self.on_context_menu)

        self.data = data
Esempio n. 3
0
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent=parent)

        layout = QtWidgets.QVBoxLayout()

        # controls
        top_layout = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Tasks")

        add_button = QtWidgets.QPushButton("+")
        add_button.setFixedWidth(28)
        remove_button = QtWidgets.QPushButton("-")
        remove_button.setFixedWidth(28)

        top_layout.addWidget(label)
        top_layout.addStretch()
        top_layout.addWidget(add_button)
        top_layout.addWidget(remove_button)

        tree_view = QtWidgets.QTreeView()
        tree_model = TreeModel()
        tree_view.setModel(tree_model)

        layout.addLayout(top_layout)
        layout.addWidget(tree_view)

        self.setLayout(layout)

        self.add_button = add_button
        self.remove_button = remove_button

        self.tree_model = tree_model

        self._add_dialog = AddTaskIconDialog()

        self.connect_signals()
Esempio n. 4
0
    def __init__(self, parent=None, context=None):
        super(Window, self).__init__(parent)
        self.context = context
        project_name = io.active_project()
        self.setWindowTitle("Asset creator ({0})".format(project_name))
        self.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        # Validators
        self.valid_parent = False

        self.session = None

        # assets widget
        assets_widget = QtWidgets.QWidget()
        assets_widget.setContentsMargins(0, 0, 0, 0)
        assets_layout = QtWidgets.QVBoxLayout(assets_widget)
        assets = widget.AssetWidget()
        assets.view.setSelectionMode(assets.view.ExtendedSelection)
        assets_layout.addWidget(assets)

        # Outlink
        label_outlink = QtWidgets.QLabel("Outlink:")
        input_outlink = QtWidgets.QLineEdit()
        input_outlink.setReadOnly(True)
        input_outlink.setStyleSheet("background-color: #333333;")
        checkbox_outlink = QtWidgets.QCheckBox("Use outlink")
        # Parent
        label_parent = QtWidgets.QLabel("*Parent:")
        input_parent = QtWidgets.QLineEdit()
        input_parent.setReadOnly(True)
        input_parent.setStyleSheet("background-color: #333333;")

        # Name
        label_name = QtWidgets.QLabel("*Name:")
        input_name = QtWidgets.QLineEdit()
        input_name.setPlaceholderText("<asset name>")

        # Asset Build
        label_assetbuild = QtWidgets.QLabel("Asset Build:")
        combo_assetbuilt = QtWidgets.QComboBox()

        # Task template
        label_task_template = QtWidgets.QLabel("Task template:")
        combo_task_template = QtWidgets.QComboBox()

        # Info widget
        info_widget = QtWidgets.QWidget()
        info_widget.setContentsMargins(10, 10, 10, 10)
        info_layout = QtWidgets.QVBoxLayout(info_widget)

        # Inputs widget
        inputs_widget = QtWidgets.QWidget()
        inputs_widget.setContentsMargins(0, 0, 0, 0)

        inputs_layout = QtWidgets.QFormLayout(inputs_widget)
        inputs_layout.addRow(label_outlink, input_outlink)
        inputs_layout.addRow(None, checkbox_outlink)
        inputs_layout.addRow(label_parent, input_parent)
        inputs_layout.addRow(label_name, input_name)
        inputs_layout.addRow(label_assetbuild, combo_assetbuilt)
        inputs_layout.addRow(label_task_template, combo_task_template)

        # Add button
        btns_widget = QtWidgets.QWidget()
        btns_widget.setContentsMargins(0, 0, 0, 0)
        btn_layout = QtWidgets.QHBoxLayout(btns_widget)
        btn_create_asset = QtWidgets.QPushButton("Create asset")
        btn_create_asset.setToolTip(
            "Creates all neccessary components for asset"
        )
        checkbox_app = None
        if self.context is not None:
            checkbox_app = QtWidgets.QCheckBox("Open {}".format(
                self.context.capitalize())
            )
            btn_layout.addWidget(checkbox_app)
        btn_layout.addWidget(btn_create_asset)

        task_view = QtWidgets.QTreeView()
        task_view.setIndentation(0)
        task_model = model.TasksModel()
        task_view.setModel(task_model)

        info_layout.addWidget(inputs_widget)
        info_layout.addWidget(task_view)
        info_layout.addWidget(btns_widget)

        # Body
        body = QtWidgets.QSplitter()
        body.setContentsMargins(0, 0, 0, 0)
        body.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                           QtWidgets.QSizePolicy.Expanding)
        body.setOrientation(QtCore.Qt.Horizontal)
        body.addWidget(assets_widget)
        body.addWidget(info_widget)
        body.setStretchFactor(0, 100)
        body.setStretchFactor(1, 150)

        # statusbar
        message = QtWidgets.QLabel()
        message.setFixedHeight(20)

        statusbar = QtWidgets.QWidget()
        layout = QtWidgets.QHBoxLayout(statusbar)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(message)

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(body)
        layout.addWidget(statusbar)

        self.data = {
            "label": {
                "message": message,
            },
            "view": {
                "tasks": task_view
            },
            "model": {
                "assets": assets,
                "tasks": task_model
            },
            "inputs": {
                "outlink": input_outlink,
                "outlink_cb": checkbox_outlink,
                "parent": input_parent,
                "name": input_name,
                "assetbuild": combo_assetbuilt,
                "tasktemplate": combo_task_template,
                "open_app": checkbox_app
            },
            "buttons": {
                "create_asset": btn_create_asset
            }
        }

        # signals
        btn_create_asset.clicked.connect(self.create_asset)
        assets.selection_changed.connect(self.on_asset_changed)
        input_name.textChanged.connect(self.on_asset_name_change)
        checkbox_outlink.toggled.connect(self.on_outlink_checkbox_change)
        combo_task_template.currentTextChanged.connect(
            self.on_task_template_changed
        )
        if self.context is not None:
            checkbox_app.toggled.connect(self.on_app_checkbox_change)
        # on start
        self.on_start()

        self.resize(600, 500)

        self.echo("Connected to project: {0}".format(project_name))
Esempio n. 5
0
    def __init__(self, parent=None):
        super(SelectionOutline, self).__init__(parent=parent)

        self.model = model.SelectionModel()
        proxy = QtCore.QSortFilterProxyModel()
        proxy.setSourceModel(self.model)

        view = QtWidgets.QTreeView()
        view.setIndentation(20)
        view.setStyleSheet("""
            QTreeView::item{
                padding: 4px 1px;
                border: 0px;
            }
        """)
        view.setAllColumnsShowFocus(True)
        view.setAlternatingRowColors(True)
        view.setSortingEnabled(True)
        view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        view.sortByColumn(1, QtCore.Qt.AscendingOrder)
        view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)

        # Delegate
        time_delegate = delegates.PrettyTimeDelegate()
        column = self.model.Columns.index("time")
        view.setItemDelegateForColumn(column, time_delegate)

        view.setModel(proxy)
        view.setColumnWidth(0, 100)
        view.setColumnWidth(1, 140)
        view.setColumnWidth(2, 200)
        view.setColumnWidth(3, 200)
        view.setColumnWidth(4, 70)
        self.view = view
        self.proxy = proxy

        # (TODO)
        # Get all nodes
        # Get selected nodes
        # Dynamic selecting (If this enabled, dim out above two. Default off)
        # "Freeze List" will not be needed

        freezer = QtWidgets.QCheckBox("Freeze List")

        # (TODO)
        # These three not implemented
        include_hierarchy = QtWidgets.QCheckBox("Include Hierarchy")
        hide_referenced = QtWidgets.QCheckBox("Hide Referenced")
        refresh = QtWidgets.QPushButton("Refresh")

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(freezer)
        layout.addWidget(include_hierarchy)
        layout.addWidget(hide_referenced)
        layout.addWidget(self.view)
        layout.addWidget(refresh)

        self.setLayout(layout)

        self.data = {
            "delegates": {
                "time": time_delegate,
            }
        }

        self.view.customContextMenuRequested.connect(self.on_menu)
        freezer.stateChanged.connect(self.on_freezed)
Esempio n. 6
0
    def __init__(self, parent=None):
        super(SelectionOutline, self).__init__(parent=parent)

        data = pindict({
            "model": model.SelectionModel(),
            "proxy": QtCore.QSortFilterProxyModel(),
        })

        panels = {
            "header": QtWidgets.QWidget(),
            "body": QtWidgets.QWidget(),
            "footer": QtWidgets.QWidget(),
        }

        widgets = pindict({
            "view": QtWidgets.QTreeView(),
            "lock": QtWidgets.QPushButton("Lock"),
            "unlock": QtWidgets.QPushButton("Unlock"),
            "save": QtWidgets.QPushButton("Save"),
            "refresh": QtWidgets.QPushButton(),
        })

        data["proxy"].setSourceModel(data["model"])
        widgets["view"].setModel(data["proxy"])

        with widgets.pin("view") as _:
            _.setAllColumnsShowFocus(True)
            _.setAlternatingRowColors(True)
            _.setSortingEnabled(True)
            _.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
            _.sortByColumn(1, QtCore.Qt.AscendingOrder)
            _.setSelectionMode(_.ExtendedSelection)

            _.setIndentation(20)
            _.setStyleSheet("""
                QTreeView::item{
                    padding: 4px 1px;
                    border: 0px;
                }
            """)

            _.setColumnWidth(0, 240)

        layout = QtWidgets.QHBoxLayout(panels["header"])
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setMargin(0)
        layout.addStretch()
        layout.addWidget(widgets["refresh"])

        layout = QtWidgets.QHBoxLayout(panels["body"])
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setMargin(0)
        layout.addWidget(widgets["view"])

        layout = QtWidgets.QHBoxLayout(panels["footer"])
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setMargin(0)
        layout.addWidget(widgets["lock"])
        layout.addWidget(widgets["unlock"])
        layout.addWidget(widgets["save"])

        layout = QtWidgets.QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setMargin(0)
        layout.addWidget(panels["header"])
        layout.addWidget(panels["body"])
        layout.addWidget(panels["footer"])

        widgets["view"].customContextMenuRequested.connect(self.on_menu)
        widgets["lock"].clicked.connect(lambda: self.on_locked(True))
        widgets["unlock"].clicked.connect(lambda: self.on_locked(False))
        widgets["save"].clicked.connect(self.on_saved)
        widgets["refresh"].clicked.connect(self.on_refreshed)

        icon = qtawesome.icon("fa.lock", color="gray")
        widgets["lock"].setIcon(icon)
        icon = qtawesome.icon("fa.unlock", color="gray")
        widgets["unlock"].setIcon(icon)
        icon = qtawesome.icon("fa.save", color="gray")
        widgets["save"].setIcon(icon)
        icon = qtawesome.icon("fa.refresh", color="white")
        widgets["refresh"].setIcon(icon)

        self.data = data
        self.widgets = widgets

        self._selection_sync = True
Esempio n. 7
0
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)

        self.resize(640, 360)
        project = api.Session["AVALON_PROJECT"]
        self.setWindowTitle("Context Manager 1.0 - {}".format(project))
        self.setObjectName("contextManager")

        splitter = QtWidgets.QSplitter(self)
        main_layout = QtWidgets.QVBoxLayout()
        column_layout = QtWidgets.QHBoxLayout()

        accept_btn = QtWidgets.QPushButton("Accept")

        # Asset picker
        assets = AssetWidget()

        # Task picker
        tasks_widgets = QtWidgets.QWidget()
        tasks_widgets.setContentsMargins(0, 0, 0, 0)
        tasks_layout = QtWidgets.QVBoxLayout(tasks_widgets)
        task_view = QtWidgets.QTreeView()
        task_view.setIndentation(0)
        task_model = TasksModel()
        task_view.setModel(task_model)
        tasks_layout.addWidget(task_view)
        tasks_layout.addWidget(accept_btn)
        task_view.setColumnHidden(1, True)

        # region results
        result_widget = QtWidgets.QGroupBox("Current Context")
        result_layout = QtWidgets.QVBoxLayout()
        result_widget.setLayout(result_layout)

        project_label = QtWidgets.QLabel("Project: {}".format(project))
        asset_label = QtWidgets.QLabel()
        task_label = QtWidgets.QLabel()

        result_layout.addWidget(project_label)
        result_layout.addWidget(asset_label)
        result_layout.addWidget(task_label)
        result_layout.addStretch()
        # endregion results

        context_widget = QtWidgets.QWidget()
        column_layout.addWidget(assets)
        column_layout.addWidget(tasks_widgets)
        context_widget.setLayout(column_layout)

        splitter.addWidget(context_widget)
        splitter.addWidget(result_widget)
        splitter.setSizes([1, 0])

        main_layout.addWidget(splitter)

        # Enable for other functions
        self._last_selected_task = None
        self._task_view = task_view
        self._task_model = task_model
        self._assets = assets

        self._context_asset = asset_label
        self._context_task = task_label

        assets.selection_changed.connect(self.on_asset_changed)
        accept_btn.clicked.connect(self.on_accept_clicked)
        assets.refresh()

        self.select_asset(api.Session["AVALON_ASSET"])
        self.select_task(api.Session["AVALON_TASK"])

        self.setLayout(main_layout)

        # Enforce current context to be up-to-date
        self.refresh_context_view()
Esempio n. 8
0
    def __init__(self, parent=None):
        super(FocusComparing, self).__init__(parent=parent)

        widget = pindict.to_pindict({
            "overallDiff": {
                "main": QtWidgets.QGroupBox("Compare Features"),
                "name": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("Hierarchy"),
                    "status": QtWidgets.QLabel("--"),
                },
                "id": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("Avalon Id"),
                    "status": QtWidgets.QLabel("--"),
                },
                "mesh": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("Mesh"),
                    "status": QtWidgets.QLabel("--"),
                },
                "uv": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("UV"),
                    "status": QtWidgets.QLabel("--"),
                },
            },
            "featureMenu": {
                "main": QtWidgets.QWidget(),
                "label": QtWidgets.QLabel("Focus On"),
                "list": QtWidgets.QComboBox(),
            },
            "focus": {
                "view": QtWidgets.QTreeView(),
                "model": models.FocusModel(),
                "pathDelegate": delegates.PathTextDelegate(),
            }
        })

        with widget.pin("overallDiff") as diff:
            layout = QtWidgets.QVBoxLayout(diff["main"])

            for key in ["name", "id", "mesh", "uv"]:
                with widget.pin("overallDiff." + key) as feature:
                    lay = QtWidgets.QHBoxLayout(feature["main"])
                    lay.addWidget(feature["label"])
                    lay.addSpacing(8)
                    lay.addWidget(feature["icon"])
                    lay.addSpacing(12)
                    lay.addWidget(feature["status"], stretch=True)

                    feature["label"].setFixedWidth(60)
                    feature["label"].setAlignment(QtCore.Qt.AlignRight)

                    icon = delegates.FEATURE_ICONS[key]
                    pixmap = lib.icon(icon, models.COLOR_DARK).pixmap(16, 16)
                    feature["icon"].setPixmap(pixmap)

                layout.addWidget(feature["main"])
                layout.addSpacing(-16)
            layout.addSpacing(16)
            layout.setContentsMargins(0, 0, 0, 0)

        with widget.pin("featureMenu") as menu:
            layout = QtWidgets.QHBoxLayout(menu["main"])
            layout.addWidget(menu["label"])
            layout.addWidget(menu["list"])
            layout.addStretch()

        layout = QtWidgets.QVBoxLayout(self)
        layout.addSpacing(-16)
        layout.addWidget(widget["overallDiff"]["main"])
        layout.addSpacing(-8)
        layout.addWidget(widget["featureMenu"]["main"])
        layout.addSpacing(-8)
        layout.addWidget(widget["focus"]["view"])

        # Init
        with widget.pin("featureMenu") as menu:
            menu["list"].addItem(" Hierarchy", "longName")
            menu["list"].addItem(" Avalon Id", "avalonId")
            menu["list"].addItem(" Full Path", "fullPath")
            menu["list"].addItem(" Mesh", "points")
            menu["list"].addItem(" UV", "uvmap")

        with widget.pin("focus") as focus:
            focus["view"].setModel(focus["model"])
            focus["view"].setItemDelegateForColumn(1, focus["pathDelegate"])
            focus["view"].setHeaderHidden(True)
            focus["view"].setUniformRowHeights(True)
            focus["view"].setAlternatingRowColors(False)
            focus["view"].setIndentation(6)
            focus["view"].setStyleSheet("""
                QTreeView::item{
                    padding: 2px 1px;
                    border: 0px;
                }
            """)
            focus["view"].setSelectionMode(focus["view"].NoSelection)
            height = focus["view"].sizeHintForRow(0) * 2 + 4  # MagicNum
            focus["view"].setFixedHeight(height)
            focus["view"].setColumnWidth(0, 28)

        self.widget = widget
        self._focusing = False

        # Connect
        with widget.pin("featureMenu") as menu:
            menu["list"].currentIndexChanged.connect(self.on_feature_changed)
        self.focus_enabled.connect(self.on_focus_enabled)