diff --git a/gui/qt/history_list.py b/gui/qt/history_list.py index 32aec4982..06d68f2ef 100644 --- a/gui/qt/history_list.py +++ b/gui/qt/history_list.py @@ -47,11 +47,12 @@ TX_ICONS = [ ] -class HistoryList(MyTreeWidget): +class HistoryList(MyTreeWidget, AcceptFileDragDrop): filter_columns = [2, 3, 4] # Date, Description, Amount def __init__(self, parent=None): MyTreeWidget.__init__(self, parent, self.create_menu, [], 3) + AcceptFileDragDrop.__init__(self, ".txn") self.refresh_headers() self.setColumnHidden(1, True) @@ -205,3 +206,12 @@ class HistoryList(MyTreeWidget): if item.data(0, Qt.UserRole) in to_delete: root.removeChild(item) _offset += 1 + + def onFileAdded(self, fn): + with open(fn) as f: + tx = self.parent.tx_from_text(f.read()) + self.wallet.add_transaction(tx.txid(), tx) + self.wallet.save_transactions() + self.on_update() + + diff --git a/gui/qt/util.py b/gui/qt/util.py index 2d2626a18..cd552e405 100644 --- a/gui/qt/util.py +++ b/gui/qt/util.py @@ -635,6 +635,40 @@ class ColorScheme: if ColorScheme.has_dark_background(widget): ColorScheme.dark_scheme = True + +class AcceptFileDragDrop: + def __init__(self, file_type=""): + assert isinstance(self, QWidget) + self.setAcceptDrops(True) + self.file_type = file_type + + def validateEvent(self, event): + if not event.mimeData().hasUrls(): + event.ignore() + return False + for url in event.mimeData().urls(): + if not url.toLocalFile().endswith(self.file_type): + event.ignore() + return False + event.accept() + return True + + def dragEnterEvent(self, event): + self.validateEvent(event) + + def dragMoveEvent(self, event): + if self.validateEvent(event): + event.setDropAction(Qt.CopyAction) + + def dropEvent(self, event): + if self.validateEvent(event): + for url in event.mimeData().urls(): + self.onFileAdded(url.toLocalFile()) + + def onFileAdded(self, fn): + raise NotImplementedError() + + if __name__ == "__main__": app = QApplication([]) t = WaitingDialog(None, 'testing ...', lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done"))