55 lines
2.5 KiB
Dart
55 lines
2.5 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.explorer.hiddenItems;
|
|
Future<void> unhide(List<String> which) async {
|
|
await c.updateSettings((s) => s.explorer.hiddenItems = [
|
|
for (final x in s.explorer.hiddenItems)
|
|
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('닫기'))),
|
|
],
|
|
);
|
|
}),
|
|
);
|