JJ_MKVMaker/lib/ui/hidden_items_dialog.dart

55 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import '../app/app_controller.dart';
import '../core/file_ops.dart' show samePath;
import '../core/vfs.dart' show vBasename, vDirname;
import '../l10n/tr.dart';
import 'path_label.dart';
import 'theme.dart';
/// X-plore 숨기기 (관리자 결정 10/18): 환경 설정 > 파일 탐색기 [목록에서 숨긴 항목] - 숨긴 것을 보고 하나씩 · 모두 풀기.
/// 파일은 건드리지 않는다 (목록에서만 다시 보이게)
Future<void> showHiddenItems(BuildContext context, AppController c) => showDialog<void>(
context: context,
builder: (ctx) => StatefulBuilder(builder: (ctx, set) {
final list = c.settings.explorerHiddenItems;
Future<void> unhide(List<String> which) async {
await c.updateSettings((s) => s.explorerHiddenItems = [
for (final x in s.explorerHiddenItems)
if (!which.any((w) => samePath(w, x))) x,
]);
set(() {});
}
return AlertDialog(
scrollable: true,
title: Text(trf('목록에서 숨긴 항목 ({0}개)', [list.length])),
content: SizedBox(
width: 520,
child: Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [
Text(tr('풀면 파일 탐색기 목록에 다시 보입니다. 파일 자체는 바꾸지 않습니다.'),
style: TextStyle(fontSize: 12, color: JjColors.textDim)),
const SizedBox(height: 8),
if (list.isEmpty) Text(tr('숨긴 항목이 없습니다')),
for (final x in list)
ListTile(
contentPadding: EdgeInsets.zero,
dense: true,
title: Text(vBasename(x), maxLines: 1, overflow: TextOverflow.ellipsis),
subtitle: Text(friendlyPath(vDirname(x)), maxLines: 2, overflow: TextOverflow.ellipsis),
trailing: IconButton(
tooltip: tr('숨기기 풀기'),
icon: const Icon(Icons.visibility_outlined),
onPressed: () => unhide([x]),
),
),
]),
),
actions: [
if (list.length > 1) TextButton(onPressed: () => unhide([...list]), child: Text(tr('모두 풀기'))),
FilledButton(onPressed: () => Navigator.pop(ctx), child: Text(tr('닫기'))),
],
);
}),
);