JJ_MKVMaker/lib/core/file_clipboard.dart

30 lines
1.2 KiB
Dart

/// 약속 (E5b): 복사 · 이동할 항목을 붙여넣기 전까지 담아 둔다 (창 · 화면 사이).
/// 입력 = 담기 [put] (항목 · 이동인지) · 붙여넣은 뒤 [pasted], 출력 = [items] · [move] · [isEmpty].
/// - 빈 목록은 담지 않는다 ([put] 이 false).
/// - 옮긴 것은 다시 붙여넣을 수 없으므로 붙여넣기가 끝나면 비우고, 복사는 여러 곳에 붙여넣을 수 있게 남긴다.
/// - 다시 쓰는 곳: 탐색기 두 창 · 한 창 · 보관함 꺼내기.
class FileClipboard {
List<String> _items = const [];
bool _move = false;
List<String> get items => _items;
bool get move => _move;
bool get isEmpty => _items.isEmpty;
bool get isNotEmpty => _items.isNotEmpty;
/// 담는다 (앞에 담은 것은 바뀜). 빈 목록이면 담지 않고 false
bool put(List<String> items, {required bool move}) {
if (items.isEmpty) return false;
_items = List.unmodifiable(items);
_move = move;
return true;
}
/// 붙여넣기가 끝남: [done] 이고 이동이었으면 비운다
void pasted({required bool done}) {
if (done && _move) clear();
}
void clear() => _items = const [];
}