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
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
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