Browse Source

标准字段翻译OK

master
hejl 2 months ago
parent
commit
98a9c2c4ec
  1. 2
      win_text_editor/lib/framework/controllers/tab_items_controller.dart
  2. 13
      win_text_editor/lib/main.dart
  3. 4
      win_text_editor/lib/modules/memory_table/controllers/base_data_source.dart
  4. 8
      win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart
  5. 79
      win_text_editor/lib/modules/memory_table/services/memory_table_service.dart
  6. 5
      win_text_editor/lib/modules/memory_table/widgets/memory_table_left_side.dart
  7. 44
      win_text_editor/lib/shared/data/std_fields_cache.dart
  8. 15
      win_text_editor/lib/shared/models/std_filed.dart
  9. 24
      win_text_editor/pubspec.lock
  10. 2
      win_text_editor/pubspec.yaml

2
win_text_editor/lib/framework/controllers/tab_items_controller.dart

@ -119,8 +119,6 @@ class TabItemsController with ChangeNotifier {
default: default:
Logger().error("没有活动的内容控制器", source: 'TabItemsController'); Logger().error("没有活动的内容控制器", source: 'TabItemsController');
} }
return;
} }
activeContentController?.onOpenFile(filePath); activeContentController?.onOpenFile(filePath);
} }

13
win_text_editor/lib/main.dart

@ -1,6 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:win_text_editor/framework/widgets/app_scaffold.dart'; import 'package:win_text_editor/framework/widgets/app_scaffold.dart';
import 'package:win_text_editor/shared/data/std_fields_cache.dart';
import 'package:window_manager/window_manager.dart'; import 'package:window_manager/window_manager.dart';
import 'framework/controllers/logger.dart'; // import 'framework/controllers/logger.dart'; //
@ -19,6 +22,16 @@ void main() async {
await windowManager.focus(); await windowManager.focus();
}); });
//
WidgetsFlutterBinding.ensureInitialized();
//
await Hive.initFlutter();
await Hive.deleteBoxFromDisk('uft_stdFieldsCache');
//
await StdFieldsCache.init();
runApp( runApp(
MultiProvider( MultiProvider(
providers: [ providers: [

4
win_text_editor/lib/modules/memory_table/controllers/base_data_source.dart

@ -46,13 +46,12 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo
} }
class Field implements SelectableItem { class Field implements SelectableItem {
Field(this.id, this.name, this.chineseName, this.type, this.remark, [this.isSelected = false]); Field(this.id, this.name, this.chineseName, this.type, [this.isSelected = false]);
final String id; final String id;
final String name; final String name;
final String chineseName; final String chineseName;
final String type; final String type;
final String remark;
@override @override
bool isSelected; bool isSelected;
} }
@ -83,7 +82,6 @@ class FieldsDataSource extends SelectableDataSource<Field> {
DataGridCell<String>(columnName: 'name', value: field.name), DataGridCell<String>(columnName: 'name', value: field.name),
DataGridCell<String>(columnName: 'chineseName', value: field.chineseName), DataGridCell<String>(columnName: 'chineseName', value: field.chineseName),
DataGridCell<String>(columnName: 'type', value: field.type), DataGridCell<String>(columnName: 'type', value: field.type),
DataGridCell<String>(columnName: 'remark', value: field.remark),
], ],
), ),
) )

8
win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart

@ -17,9 +17,9 @@ class MemoryTableController extends BaseContentController {
MemoryTableController() : _service = MemoryTableService(Logger()) { MemoryTableController() : _service = MemoryTableService(Logger()) {
// //
fieldsSource = FieldsDataSource([ fieldsSource = FieldsDataSource([
Field('1', '', '', '', ''), // 1 Field('1', '', '', ''), // 1
Field('2', '', '', '', ''), // 2 Field('2', '', '', ''), // 2
Field('3', '', '', '', ''), // 3 Field('3', '', '', ''), // 3
]); ]);
indexesSource = IndexesDataSource([ indexesSource = IndexesDataSource([
@ -32,6 +32,7 @@ class MemoryTableController extends BaseContentController {
@override @override
Future<void> onOpenFile(String filePath) async { Future<void> onOpenFile(String filePath) async {
Logger().info("Opening file: $filePath");
try { try {
final tableData = await _service.parseStructureFile(filePath); final tableData = await _service.parseStructureFile(filePath);
@ -52,6 +53,7 @@ class MemoryTableController extends BaseContentController {
} catch (e) { } catch (e) {
_errorMessage = e.toString(); _errorMessage = e.toString();
notifyListeners(); notifyListeners();
Logger().error("Error opening file: $e");
} }
} }

79
win_text_editor/lib/modules/memory_table/services/memory_table_service.dart

@ -2,6 +2,8 @@
import 'dart:io'; import 'dart:io';
import 'package:win_text_editor/modules/memory_table/controllers/base_data_source.dart'; import 'package:win_text_editor/modules/memory_table/controllers/base_data_source.dart';
import 'package:win_text_editor/shared/data/std_fields_cache.dart';
import 'package:win_text_editor/shared/models/std_filed.dart';
import 'package:xml/xml.dart' as xml; import 'package:xml/xml.dart' as xml;
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/framework/controllers/logger.dart';
@ -18,7 +20,16 @@ class MemoryTableService {
throw const FormatException("文件扩展名必须是.uftstructure"); throw const FormatException("文件扩展名必须是.uftstructure");
} }
// 2. Read and parse file content // 2. metadata stdfield.stfield
if (await StdFieldsCache.getLength() == 0) {
_logger.info("加载标准字段缓存");
final metadataFile = await _findMetadataFile(filePath);
if (metadataFile != null) {
await _processStdFieldFile(metadataFile);
}
}
// 3. Read and parse structure file content
final file = File(filePath); final file = File(filePath);
final content = await file.readAsString(); final content = await file.readAsString();
@ -29,30 +40,31 @@ class MemoryTableService {
throw const FormatException("文件格式错误:缺少structure:Structure节点"); throw const FormatException("文件格式错误:缺少structure:Structure节点");
} }
// 3. Get basic info // 4. Get basic info
final fileNameWithoutExt = path.basenameWithoutExtension(filePath); final fileNameWithoutExt = path.basenameWithoutExtension(filePath);
final chineseName = structureNode.getAttribute('chineseName') ?? ''; final chineseName = structureNode.getAttribute('chineseName') ?? '';
final objectId = structureNode.getAttribute('objectId') ?? ''; final objectId = structureNode.getAttribute('objectId') ?? '';
// 4. Process properties (fields) // 5. Process properties (fields)
final properties = document.findAllElements('properties'); final properties = document.findAllElements('properties');
final fields = <Field>[]; final fields = <Field>[];
int index = 1; int index = 1;
for (final property in properties) { for (final property in properties) {
final id = property.getAttribute('id') ?? ''; final id = property.getAttribute('id') ?? '';
//
final stdField = StdFieldsCache.getData(id);
fields.add( fields.add(
Field( Field(
(index++).toString(), // (index++).toString(), //
id, // id, //
'', // stdField?.chineseName ?? '', //
'', // stdField?.dateType ?? '', //
'', //
), ),
); );
} }
// 5. Process indexes // 6. Process indexes
final indexes = document.findAllElements('indexs'); final indexes = document.findAllElements('indexs');
final indexList = <Index>[]; final indexList = <Index>[];
@ -97,8 +109,59 @@ class MemoryTableService {
} }
} }
// metadata stdfield.stfield
Future<File?> _findMetadataFile(String filePath) async {
Directory currentDir = File(filePath).parent;
const targetDirName = 'metadata';
const targetFileName = 'stdfield.stdfield';
// metadata
while (true) {
final metadataDir = Directory('${currentDir.path}/$targetDirName');
if (await metadataDir.exists()) {
final stdFieldFile = File('${metadataDir.path}/$targetFileName');
if (await stdFieldFile.exists()) {
return stdFieldFile;
} else {
_logger.error("没找到标准字段文件 $targetFileName");
return null;
}
}
//
if (currentDir.path == currentDir.parent.path) {
_logger.error("没有找到元数据目录 $targetDirName");
return null;
}
currentDir = currentDir.parent;
}
}
//
Future<void> _processStdFieldFile(File stdFieldFile) async {
try {
final content = await stdFieldFile.readAsString();
final document = xml.XmlDocument.parse(content);
final items = document.findAllElements('items');
for (final item in items) {
final name = item.getAttribute('name') ?? '';
final chineseName = item.getAttribute('chineseName') ?? '';
final dataType = item.getAttribute('dataType') ?? '';
if (name.isNotEmpty) {
final stdField = StdField(name: name, chineseName: chineseName, dateType: dataType);
await StdFieldsCache.setData(name, stdField);
}
}
} catch (e) {
_logger.error("处理标准字段文件时出错: $e");
}
}
List<Field> _getDefaultFields() { List<Field> _getDefaultFields() {
return [Field('1', '', '', '', ''), Field('2', '', '', '', ''), Field('3', '', '', '', '')]; return [Field('1', '', '', ''), Field('2', '', '', ''), Field('3', '', '', '')];
} }
List<Index> _getDefaultIndexes() { List<Index> _getDefaultIndexes() {

5
win_text_editor/lib/modules/memory_table/widgets/memory_table_left_side.dart

@ -75,11 +75,6 @@ class MemoryTableLeftSide extends StatelessWidget {
label: _buildGridHeader('类型'), label: _buildGridHeader('类型'),
minimumWidth: 120, minimumWidth: 120,
), ),
GridColumn(
columnName: 'remark',
label: _buildGridHeader('备注'),
minimumWidth: 200,
),
], ],
onCellTap: (details) { onCellTap: (details) {
if (details.column.columnName == 'select') { if (details.column.columnName == 'select') {

44
win_text_editor/lib/shared/data/std_fields_cache.dart

@ -0,0 +1,44 @@
import 'package:hive_flutter/hive_flutter.dart';
import 'package:win_text_editor/shared/models/std_filed.dart';
class StdFieldsCache {
static late final Box<StdField> _box; //
//
static Future<void> init() async {
await Hive.initFlutter();
Hive.registerAdapter(StdFieldAdapter()); // Box前注册适配器
_box = await Hive.openBox<StdField>('uft_stdFieldsCache'); //
}
static Future<int> getLength() async {
return _box.length;
}
//
static StdField? getData(String key) => _box.get(key);
static Future<void> setData(String key, StdField value) => _box.put(key, value);
//
static Future<void> clear() async {
await _box.clear();
}
}
// typeId在整个应用中唯一
class StdFieldAdapter extends TypeAdapter<StdField> {
@override
final int typeId = 7; // ID
@override
StdField read(BinaryReader reader) {
return StdField(name: reader.read(), chineseName: reader.read(), dateType: reader.read());
}
@override
void write(BinaryWriter writer, StdField obj) {
writer.write(obj.name);
writer.write(obj.chineseName);
writer.write(obj.dateType);
}
}

15
win_text_editor/lib/shared/models/std_filed.dart

@ -0,0 +1,15 @@
import 'package:hive/hive.dart';
@HiveType(typeId: 7) // typeId一致
class StdField {
@HiveField(0)
final String name;
@HiveField(1)
final String chineseName;
@HiveField(2)
final String dateType;
StdField({required this.name, required this.chineseName, required this.dateType});
}

24
win_text_editor/pubspec.lock

@ -89,6 +89,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.4+2" version: "0.3.4+2"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
csv: csv:
dependency: "direct main" dependency: "direct main"
description: description:
@ -184,6 +192,22 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
hive:
dependency: "direct main"
description:
name: hive
sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
url: "https://pub.dev"
source: hosted
version: "2.2.3"
hive_flutter:
dependency: "direct main"
description:
name: hive_flutter
sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc
url: "https://pub.dev"
source: hosted
version: "1.1.0"
http: http:
dependency: transitive dependency: transitive
description: description:

2
win_text_editor/pubspec.yaml

@ -24,6 +24,8 @@ dependencies:
csv: ^6.0.0 csv: ^6.0.0
mustache_template: ^2.0.0 mustache_template: ^2.0.0
shared_preferences: ^2.2.1 shared_preferences: ^2.2.1
hive: ^2.2.3
hive_flutter: ^1.1.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save