feat: i18n (en/tr), zoom orijinal cozunurluk + max 20x + gaplessPlayback, app id com.softmediadesign.imajviewer, CI analyze+test
This commit is contained in:
1 parent
b9e433d032
commit
504d84f6f6
19 files changed
+408
-48
No files matched your search
@@ -13,6 +13,7 @@ import '../widgets/image_canvas.dart';
|
||||
import '../widgets/window_resize_zones.dart';
|
||||
import '../shortcuts/app_shortcuts.dart';
|
||||
import '../services/window_persistence.dart';
|
||||
import '../l10n/app_localizations.dart';
|
||||
|
||||
class ViewerScreen extends StatefulWidget {
|
||||
final List<String> initialFiles;
|
||||
@@ -95,22 +96,22 @@ class _ViewerScreenState extends State<ViewerScreen> with WindowListener {
|
||||
builder: (context) => StatefulBuilder(
|
||||
builder: (context, setDialogState) => AlertDialog(
|
||||
backgroundColor: const Color(0xFF2a2a2a),
|
||||
title: const Text('Ayarlar',
|
||||
style: TextStyle(color: Colors.white, fontSize: 18)),
|
||||
title: Text(AppLocalizations.of(context)!.settingsTitle,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 18)),
|
||||
content: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text('Sıralama',
|
||||
style: TextStyle(color: Colors.white70, fontSize: 13)),
|
||||
Text(AppLocalizations.of(context)!.sortBy,
|
||||
style: const TextStyle(color: Colors.white70, fontSize: 13)),
|
||||
RadioListTile<bool>(
|
||||
value: false,
|
||||
groupValue: ImageManager.instance.sortByName,
|
||||
dense: true,
|
||||
activeColor: Colors.blueAccent,
|
||||
title: const Text('Zamana göre',
|
||||
style: TextStyle(color: Colors.white, fontSize: 14)),
|
||||
title: Text(AppLocalizations.of(context)!.sortByTime,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 14)),
|
||||
onChanged: (v) {
|
||||
ImageManager.instance.setSortByName(v!);
|
||||
setDialogState(() {});
|
||||
@@ -121,8 +122,8 @@ class _ViewerScreenState extends State<ViewerScreen> with WindowListener {
|
||||
groupValue: ImageManager.instance.sortByName,
|
||||
dense: true,
|
||||
activeColor: Colors.blueAccent,
|
||||
title: const Text('İsme göre',
|
||||
style: TextStyle(color: Colors.white, fontSize: 14)),
|
||||
title: Text(AppLocalizations.of(context)!.sortByName,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 14)),
|
||||
onChanged: (v) {
|
||||
ImageManager.instance.setSortByName(v!);
|
||||
setDialogState(() {});
|
||||
@@ -131,25 +132,17 @@ class _ViewerScreenState extends State<ViewerScreen> with WindowListener {
|
||||
const Divider(color: Colors.white24, height: 24),
|
||||
const Text('imajViewer', style: TextStyle(color: Colors.white, fontSize: 15)),
|
||||
const SizedBox(height: 4),
|
||||
const Text(
|
||||
'Ultra hafif ve hızlı resim görüntüleyici. '
|
||||
'Görselleri açın, gezinti için okları veya klavye tuşlarını kullanın.',
|
||||
style: TextStyle(color: Colors.white70, fontSize: 13, height: 1.5),
|
||||
Text(
|
||||
AppLocalizations.of(context)!.appDescription,
|
||||
style: const TextStyle(color: Colors.white70, fontSize: 13, height: 1.5),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
const Text('Kısayollar',
|
||||
style: TextStyle(color: Colors.white70, fontSize: 13)),
|
||||
Text(AppLocalizations.of(context)!.shortcuts,
|
||||
style: const TextStyle(color: Colors.white70, fontSize: 13)),
|
||||
const SizedBox(height: 4),
|
||||
const Text(
|
||||
'• Sol/Sağ ok — önceki/sonraki resim\n'
|
||||
'• Ctrl+Q — pencereyi kapat\n'
|
||||
'• Ctrl+Shift+Q — tüm pencereleri kapat\n'
|
||||
'• Çift tık — doldur/sığdır geçişi\n'
|
||||
'• Sağ tık sürükle — kontrast\n'
|
||||
'• Shift+sağ tık — döndür\n'
|
||||
'• Ctrl+sağ tık — doygunluk\n'
|
||||
'• Ctrl+Shift+sağ tık — parlaklık',
|
||||
style: TextStyle(color: Colors.white70, fontSize: 13, height: 1.6),
|
||||
Text(
|
||||
AppLocalizations.of(context)!.shortcutsList,
|
||||
style: const TextStyle(color: Colors.white70, fontSize: 13, height: 1.6),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -161,12 +154,12 @@ class _ViewerScreenState extends State<ViewerScreen> with WindowListener {
|
||||
_printImage();
|
||||
},
|
||||
icon: const Icon(Icons.print, color: Colors.white70, size: 18),
|
||||
label: const Text('Yazdır',
|
||||
style: TextStyle(color: Colors.white70)),
|
||||
label: Text(AppLocalizations.of(context)!.print,
|
||||
style: const TextStyle(color: Colors.white70)),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
child: const Text('Kapat', style: TextStyle(color: Colors.white70)),
|
||||
child: Text(AppLocalizations.of(context)!.close, style: const TextStyle(color: Colors.white70)),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -232,15 +225,16 @@ class _ViewerScreenState extends State<ViewerScreen> with WindowListener {
|
||||
? ImageCanvas(
|
||||
filePath: ImageManager.instance.currentImagePath,
|
||||
)
|
||||
: const Center(
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(Icons.image, size: 64, color: Colors.white24),
|
||||
SizedBox(height: 16),
|
||||
Text('Resimleri buraya sürükleyin\nveya Ctrl+O ile açın',
|
||||
const Icon(Icons.image, size: 64, color: Colors.white24),
|
||||
const SizedBox(height: 16),
|
||||
Text(AppLocalizations.of(context)!.dragDropHint,
|
||||
key: const Key('dragDropHint'),
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(color: Colors.white38, fontSize: 16)),
|
||||
style: const TextStyle(color: Colors.white38, fontSize: 16)),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -280,8 +274,8 @@ class _ViewerScreenState extends State<ViewerScreen> with WindowListener {
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
border: Border.all(color: Colors.blueAccent, width: 2),
|
||||
),
|
||||
child: const Text('Bırakın',
|
||||
style: TextStyle(color: Colors.white, fontSize: 24)),
|
||||
child: Text(AppLocalizations.of(context)!.dropHere,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 24)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Reference in new issue
Block a user