Ejemplo n.º 1
0
class Filter_list(QListWidget):
    def __init__(self, parent_):
        super().__init__()
        self.setDragDropMode(QAbstractItemView.InternalMove)
        self.setAlternatingRowColors(True)
        self.parent_ = parent_

    def init(self, array):
        self.history = History(array)
        self.clear()
        for i in range(1):
            self.add_item()

    def dropEvent(self, QDropEvent):
        super().dropEvent(QDropEvent)
        filters = self.history.swap(self.all_filters())
        # self.clear()
        # for f in filters:
        #     self.add_filter(f)
        for f in self.all_filters():
            f.update_layout()

    def add_item(self):
        try:
            f = Filter.Nega()
            self.history.add_filter(f)
            self.add_filter(f)
        except:
            import traceback
            traceback.print_exc()

    def add_item2(self):
        try:
            f = Filter.Brightness()
            self.history.add_filter(f)
            self.add_filter(f)
        except:
            import traceback
            traceback.print_exc()

    def add_filter(self, f):
        item = QListWidgetItem(self)
        item_widget = CustomQWidget(parent=self, filter_=f)
        f.set_parent(item_widget)
        item.setSizeHint(item_widget.sizeHint())
        self.addItem(item)
        self.setItemWidget(item, item_widget)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(False)

    def remove_item(self, item):
        for n, i in enumerate(self.all_items()):
            if i is item:
                t_item = self.takeItem(n)
                t_item = None
                break
        filters = self.history.remove_filter(item.filter_)
        # self.clear()
        # for f in filters:
            # self.add_filter(f)
        for f in self.all_filters():
            f.update_layout()
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(False)

    def update_filter(self, fil):
        filters = self.history.update_filter(fil)
        # self.clear()
        # for f in filters:
        #     self.add_filter(f)
        for f in self.all_filters():
            f.update_layout()

    def undo(self):
        array, filters, canUndo = self.history.undo()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.add_filter(f)
        for f in self.all_filters():
            f.update_layout()
        self.parent_.btnUndo.setEnabled(canUndo)
        self.parent_.btnRedo.setEnabled(True)

    def redo(self):
        try:
            array, filters, canRedo = self.history.redo()
            self.parent_.update_image(array)
            self.clear()
            for f in filters:
                self.add_filter(f)
            # for f in self.all_filters():
            #     f.update_layout()
        except:
            import traceback
            traceback.print_exc()
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(canRedo)

    def apply_filters(self):
        array, filters = self.history.apply()
        self.parent_.update_image(array)
        # self.clear()
        # for f in filters:
        #     self.add_filter(f)
        for f in self.all_filters():
            f.update_layout()
        self.parent_.btnUndo.setEnabled(True)

    def all_filters(self):
        filters = []
        for i in self.all_items():
            filters.append(i.filter_)
        return filters

    def all_items(self):
        items = []
        for i in range(self.count()):
            item = self.item(i)
            items.append(self.itemWidget(item))
        return items
Ejemplo n.º 2
0
class Filter_list(QListWidget):
    def __init__(self, parent_):
        super().__init__()
        self.setDragDropMode(QAbstractItemView.InternalMove)
        self.setAlternatingRowColors(True)
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.buildContextMenu)
        self.parent_ = parent_
        self.history = None

    def init(self, array):
        self.history = History(array)
        self.clear()
        for i in range(1):
            self.add_item()

    def dropEvent(self, QDropEvent):
        super().dropEvent(QDropEvent)
        filters = self.history.swap(self.all_filters())
        self.clear()
        for f in filters:
            self.add_filter(f)

    def buildContextMenu(self, qPoint):
        menu = QMenu(self)
        menulabels = ['Brightness', 'Nega', 'Median', 'Liner', 'FFT2D']
        actionlist = []
        for label in menulabels:
            actionlist.append(menu.addAction(label))

        action = menu.exec_(self.mapToGlobal(qPoint))
        for act in actionlist:
            if act == action:
                ac = act.text()
                if (ac == menulabels[0]):
                    self.add_item(Filter.Brightness())
                elif (ac == menulabels[1]):
                    self.add_item(Filter.Nega())
                elif (ac == menulabels[2]):
                    self.add_item(Filter.Median())
                elif (ac == menulabels[3]):
                    self.add_item(Filter.Liner())
                elif (ac == menulabels[4]):
                    self.add_item(Filter.FFT2D())

    def add_item(self, f):
        try:
            self.history.create_item(f)
            self.add_filter(f)
        except:
            import traceback
            traceback.print_exc()

    def add_filter(self, f):
        item = QListWidgetItem(self)
        item_widget = CustomQWidget(parent=self, filter_=f)
        f.set_parent(item_widget)
        item.setSizeHint(item_widget.sizeHint())
        self.addItem(item)
        self.setItemWidget(item, item_widget)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(False)

    def remove_item(self, item):
        for n, i in enumerate(self.all_items()):
            if i is item:
                t_item = self.takeItem(n)
                t_item = None
                break
        filters = self.history.remove_filter(item.filter_)
        self.clear()
        for f in filters:
            self.add_filter(f)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(False)

    def update_filter(self, fil):
        filters = self.history.update_filter(fil)
        self.clear()
        for f in filters:
            self.add_filter(f)

    def undo(self):
        array, filters, canUndo = self.history.undo()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.add_filter(f)
        self.parent_.btnUndo.setEnabled(canUndo)
        self.parent_.btnRedo.setEnabled(True)

    def redo(self):
        array, filters, canRedo = self.history.redo()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.add_filter(f)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(canRedo)

    def apply_filters(self):
        if self.history is None:
            return
        array, filters = self.history.apply()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.add_filter(f)
        self.parent_.btnUndo.setEnabled(True)

    def all_filters(self):
        filters = []
        for i in self.all_items():
            filters.append(i.filter_)
        return filters

    def all_items(self):
        items = []
        for i in range(self.count()):
            item = self.item(i)
            items.append(self.itemWidget(item))
        return items
Ejemplo n.º 3
0
class FilterList(QListWidget):
    def __init__(self, parent_):
        super().__init__()
        self.setDragDropMode(QAbstractItemView.InternalMove)
        self.setAlternatingRowColors(True)
        self.parent_ = parent_
        self.history = None
        self.id_count = 0

    """
    *** Function Name       : set_array()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : arrayの値をセットする
    *** Return              : なし
    """

    def set_array(self, array):
        self.history = History(array)
        self.clear()

    """
    *** Function Name       : dropEvent()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : フィルタ入れ替えの処理
    *** Return              : なし
    """

    def dropEvent(self, drop_event):
        super().dropEvent(drop_event)
        filters = self.history.swap(self.all_filters())
        self.clear()
        for f in filters:
            self.create_item(f)

    """
    *** Function Name       : add_event()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : フィルタを追加する
    *** Return              : なし
    """

    def add_event(self, f):
        if self.history is not None:
            self.add_item(getattr(Filter, f)())

    """
    *** Function Name       : add_item()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterItemを追加する
    *** Return              : なし
    """

    def add_item(self, f):
        f.set_id(self.id_count)
        self.id_count += 1
        self.history.add_filter(f)
        self.create_item(f)

    """
    *** Function Name       : create_item()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterItemを生成する
    *** Return              : なし
    """

    def create_item(self, f):
        item = QListWidgetItem(self)
        item_widget = FilterItem(parent=self, filter_=f)
        f.set_parent(item_widget)
        item_widget.setLayout(f.get_layout())
        item.setSizeHint(item_widget.sizeHint())
        self.addItem(item)
        self.setItemWidget(item, item_widget)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(False)

    """
    *** Function Name       : remove_item()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterItemを削除する
    *** Return              : なし
    """

    def remove_item(self, item):
        for n, i in enumerate(self.all_items()):
            if i is item:
                t_item = self.takeItem(n)
                t_item = None
                break
        filters = self.history.remove_filter(item.filter_)
        self.clear()
        for f in filters:
            self.create_item(f)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(False)

    """
    *** Function Name       : update_item()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterItemを更新する
    *** Return              : なし
    """

    def update_filter(self, fil):
        filters = self.history.update_filter(fil)
        self.clear()
        for f in filters:
            self.create_item(f)

    """
    *** Function Name       : undo()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterListを前の状態に戻す
    *** Return              : なし
    """

    def undo(self):
        array, filters, can_undo = self.history.undo()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.create_item(f)
        self.parent_.btnUndo.setEnabled(can_undo)
        self.parent_.btnRedo.setEnabled(True)

    """
    *** Function Name       : redo()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterListを次の状態に進める
    *** Return              : なし
    """

    def redo(self):
        array, filters, can_redo = self.history.redo()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.create_item(f)
        self.parent_.btnUndo.setEnabled(True)
        self.parent_.btnRedo.setEnabled(can_redo)

    """
    *** Function Name       : apply_filters()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : FilterListのFilterを適用する
    *** Return              : なし
    """

    def apply_filters(self):
        if self.history is None:
            return
        array, filters = self.history.apply()
        self.parent_.update_image(array)
        self.clear()
        for f in filters:
            self.create_item(f)
        self.parent_.btnUndo.setEnabled(True)

    """
    *** Function Name       : all_filters()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : すべてのフィルタを返す
    *** Return              : フィルタリスト
    """

    def all_filters(self):
        filters = []
        for i in self.all_items():
            filters.append(i.filter_)
        return filters

    """
    *** Function Name       : create_item()
    *** Designer            : 稲垣 大輔
    *** Date                : 2018.06.19
    *** Function            : すべてのFilterItemを返す
    *** Return              : FilterItemリスト
    """

    def all_items(self):
        items = []
        for i in range(self.count()):
            item = self.item(i)
            items.append(self.itemWidget(item))
        return items