Browse Source

只需要微调了

master
hejl 3 weeks ago
parent
commit
10f1bdc88f
  1. 17
      win_text_editor/lib/framework/services/macro_template_service.dart
  2. 37
      win_text_editor/lib/modules/call_function/controllers/call_function_controller.dart
  3. 33
      win_text_editor/lib/modules/call_function/models/call_function.dart
  4. 13
      win_text_editor/lib/modules/call_function/services/call_function_service.dart
  5. 11
      win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart
  6. 10
      win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart
  7. 50
      win_text_editor/lib/modules/code_creater/widgets/node_table.dart
  8. 5
      win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart
  9. 24
      win_text_editor/lib/modules/memory_table/models/memory_table.dart
  10. 10
      win_text_editor/lib/modules/memory_table/services/memory_table_service.dart
  11. 5
      win_text_editor/lib/modules/outline/models/outline_node.dart
  12. 8
      win_text_editor/lib/modules/outline/services/component_service.dart
  13. 22
      win_text_editor/lib/modules/outline/services/functions_service.dart
  14. 11
      win_text_editor/lib/modules/outline/services/uft_object_service.dart
  15. 9
      win_text_editor/lib/modules/outline/widgets/outline_explorer.dart

17
win_text_editor/lib/framework/services/macro_template_service.dart

@ -1,4 +1,5 @@
import 'package:flutter/services.dart' show rootBundle; import 'package:flutter/services.dart' show rootBundle;
import 'package:win_text_editor/framework/controllers/logger.dart';
import 'package:yaml/yaml.dart'; import 'package:yaml/yaml.dart';
import 'package:mustache_template/mustache_template.dart' as mustache; import 'package:mustache_template/mustache_template.dart' as mustache;
@ -41,11 +42,21 @@ class MacroTemplateService {
: null; : null;
} }
String renderTemplate(List<String> templateList, Map<String, dynamic> context) { String renderTemplate(
List<String> templateList,
Map<String, dynamic> context, {
bool selectAll = false,
}) {
StringBuffer buffer = StringBuffer(); StringBuffer buffer = StringBuffer();
for (var templateName in templateList) { for (var templateName in templateList) {
final template = getTemplate(templateName); Map<String, dynamic>? template = getTemplate('$templateName${selectAll ? '_ALL' : ''}');
if (template == null) throw Exception('Template $templateName not found'); if (template == null) {
Logger().warning("没有找到模板$templateName${selectAll ? '_ALL' : ''}");
template = getTemplate(templateName);
if (template == null) {
throw Exception('Template $templateName not found');
}
}
buffer.writeln(_render(template['body'], context)); buffer.writeln(_render(template['body'], context));

37
win_text_editor/lib/modules/call_function/controllers/call_function_controller.dart

@ -20,10 +20,9 @@ class CallFunctionController extends BaseContentController {
late DataGridSource inputSource; late DataGridSource inputSource;
late DataGridSource outputSource; late DataGridSource outputSource;
final CallFunctionService _service;
final MacroTemplateService templateService = MacroTemplateService(); final MacroTemplateService templateService = MacroTemplateService();
CallFunctionController() : _service = CallFunctionService(Logger()) { CallFunctionController() {
inputSource = FieldsDataSource( inputSource = FieldsDataSource(
[], [],
onSelectionChanged: (index, isSelected) { onSelectionChanged: (index, isSelected) {
@ -56,24 +55,24 @@ class CallFunctionController extends BaseContentController {
} }
// //
for (final input in modle.inputParameters) { // for (final input in modle.inputParameters) {
if (input.isSelected && input.type == CallFunction.componentType) { // if (input.isSelected && input.type == CallFunction.componentType) {
final component = modle.componentList?.firstWhereOrNull((c) => c.name == input.name); // final component = modle.componentList?.firstWhereOrNull((c) => c.name == input.name);
if (component != null) { // if (component != null) {
sb.write(templateService.renderTemplate(['插入组件'], component.toMap())); // sb.write(templateService.renderTemplate(['插入组件'], component.toMap()));
} // }
} // }
} // }
sb.write(templateService.renderTemplate(macroList, modle.toMap())); sb.write(templateService.renderTemplate(macroList, modle.toMap()));
// //
for (final output in modle.outputParameters) { // for (final output in modle.outputParameters) {
if (output.isSelected && output.type == CallFunction.componentType) { // if (output.isSelected && output.type == CallFunction.componentType) {
final component = modle.componentList?.firstWhereOrNull((c) => c.name == output.name); // final component = modle.componentList?.firstWhereOrNull((c) => c.name == output.name);
if (component != null) { // if (component != null) {
sb.write(templateService.renderTemplate(['遍历组件所有'], component.toMap())); // sb.write(templateService.renderTemplate(['遍历组件所有'], component.toMap()));
} // }
} // }
} // }
return sb.toString(); return sb.toString();
} }
@ -81,7 +80,7 @@ class CallFunctionController extends BaseContentController {
Future<void> onOpenFile(String filePath, {dynamic appendArg}) async { Future<void> onOpenFile(String filePath, {dynamic appendArg}) async {
Logger().info("Opening file: $filePath"); Logger().info("Opening file: $filePath");
try { try {
modle = await _service.parseXmlFile(filePath); modle = await CallFunctionService.parseXmlFile(filePath);
// datagrid显示的数据源 // datagrid显示的数据源
(inputSource as FieldsDataSource).updateData(modle.inputParameters); (inputSource as FieldsDataSource).updateData(modle.inputParameters);

33
win_text_editor/lib/modules/call_function/models/call_function.dart

@ -29,6 +29,25 @@ class CallFunction {
'chineseName': chineseName, 'chineseName': chineseName,
'factorParam': factorParam ?? '', 'factorParam': factorParam ?? '',
'input': 'input':
inputParameters
.map(
(field) => {
'id': field.id,
'name': field.name,
'chineseName': field.chineseName,
'type': field.type,
'isLast': inputParameters.indexOf(field) == inputParameters.length - 1,
'partnerName':
codePartners
.firstWhere(
(partner) => partner.fields.any((f) => f == field.name),
orElse: () => CodePartner(name: null, fields: []),
)
.name,
},
)
.toList(),
'selectedInput':
inputParameters inputParameters
.where((field) => field.isSelected) .where((field) => field.isSelected)
.map( .map(
@ -48,7 +67,7 @@ class CallFunction {
}, },
) )
.toList(), .toList(),
'output': 'selectedOutput':
outputParameters outputParameters
.where((field) => field.isSelected) .where((field) => field.isSelected)
.map( .map(
@ -61,6 +80,18 @@ class CallFunction {
}, },
) )
.toList(), .toList(),
'output':
outputParameters
.map(
(field) => {
'id': field.id,
'name': field.name,
'chineseName': field.chineseName,
'type': field.type,
'isLast': outputParameters.indexOf(field) == outputParameters.length - 1,
},
)
.toList(),
'inputComps': 'inputComps':
componentList componentList
?.map( ?.map(

13
win_text_editor/lib/modules/call_function/services/call_function_service.dart

@ -11,10 +11,6 @@ import 'package:xml/xml.dart' as xml;
import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/framework/controllers/logger.dart';
class CallFunctionService { class CallFunctionService {
final Logger _logger;
CallFunctionService(this._logger);
static const Map<String, String> _functionRootTypeMap = { static const Map<String, String> _functionRootTypeMap = {
'uftfunction': 'business:Function', 'uftfunction': 'business:Function',
'uftservice': 'business:Service', 'uftservice': 'business:Service',
@ -24,12 +20,13 @@ class CallFunctionService {
'uftfactorservice': 'business:FactorService', 'uftfactorservice': 'business:FactorService',
}; };
Future<CallFunction> parseXmlFile(String filePath) async { static Future<CallFunction> parseXmlFile(String filePath) async {
try { try {
// 1. Check file extension // 1. Check file extension
final extendFileName = filePath.toLowerCase().split('.').last; final extendFileName = filePath.toLowerCase().split('.').last;
final String? rootNodeType = _functionRootTypeMap[extendFileName]; final String? rootNodeType = _functionRootTypeMap[extendFileName];
if (rootNodeType == null) { if (rootNodeType == null) {
Logger().error('文件扩展名不正确:$filePath');
throw const FormatException("文件扩展名不正确!"); throw const FormatException("文件扩展名不正确!");
} }
@ -80,15 +77,15 @@ class CallFunctionService {
factorParam: factorParam, factorParam: factorParam,
); );
} on xml.XmlParserException catch (e) { } on xml.XmlParserException catch (e) {
_logger.error("XML解析错误: ${e.message}"); Logger().error("XML解析错误: ${e.message}");
rethrow; rethrow;
} catch (e) { } catch (e) {
_logger.error("处理文件时发生错误: $e"); Logger().error("处理文件时发生错误: $e");
rethrow; rethrow;
} }
} }
Future<List<Field>> parserFields( static Future<List<Field>> parserFields(
String filePath, String filePath,
Iterable<xml.XmlElement> parameters, Iterable<xml.XmlElement> parameters,
List<UftComponent> componentList, List<UftComponent> componentList,

11
win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart

@ -1,5 +1,6 @@
import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/common/constants.dart';
import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/framework/controllers/logger.dart';
import 'package:win_text_editor/modules/code_creater/services/code_create_service.dart';
import 'package:win_text_editor/modules/outline/models/outline_node.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart';
import 'package:win_text_editor/shared/base/base_content_controller.dart'; import 'package:win_text_editor/shared/base/base_content_controller.dart';
@ -22,7 +23,6 @@ class CodeCreaterController extends BaseContentController {
_members.where((node) => !(unMatchMap[node.value]?.contains(value) ?? false)).toList(); _members.where((node) => !(unMatchMap[node.value]?.contains(value) ?? false)).toList();
_members = filtered; // _members = filtered; //
_selectedOperation = value; _selectedOperation = value;
notifyListeners(); //
} }
void updateMembers(List<OutlineNode> newMembers) { void updateMembers(List<OutlineNode> newMembers) {
@ -47,5 +47,12 @@ class CodeCreaterController extends BaseContentController {
notifyListeners(); notifyListeners();
} }
genCodeString(List<String> list) {} Future<String> genCodeString() {
return CodeCreateService.genCodeString(members, selectedOperation);
}
void handleActionTypeChange(int index, String newAction) {
members[index].selectedAction = newAction;
notifyListeners();
}
} }

10
win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart

@ -39,6 +39,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
} }
_controller.addListener(_handleControllerUpdate); _controller.addListener(_handleControllerUpdate);
_controller.addListener(_updateDisplay);
} }
void _handleControllerUpdate() { void _handleControllerUpdate() {
@ -48,6 +49,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
@override @override
void dispose() { void dispose() {
_controller.removeListener(_handleControllerUpdate); _controller.removeListener(_handleControllerUpdate);
_controller.removeListener(_updateDisplay);
if (!_isControllerFromTabManager) { if (!_isControllerFromTabManager) {
_controller.dispose(); _controller.dispose();
} }
@ -71,6 +73,8 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
onDeleteMember: _deleteMember, onDeleteMember: _deleteMember,
onMoveToTop: _moveToTop, onMoveToTop: _moveToTop,
onMoveToBottom: _moveToBottom, onMoveToBottom: _moveToBottom,
onActionTypeChanged:
(index, newAction) => _controller.handleActionTypeChange(index, newAction),
), ),
), ),
), ),
@ -117,6 +121,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
setState(() { setState(() {
_controller.members.insert(to, member); // _controller.members.insert(to, member); //
_updateDisplay();
}); });
} }
@ -131,6 +136,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
void _deleteMember(int index) { void _deleteMember(int index) {
setState(() { setState(() {
_controller.members.removeAt(index); _controller.members.removeAt(index);
_updateDisplay();
}); });
} }
@ -144,7 +150,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
}); });
} }
void _updateDisplay() { Future<void> _updateDisplay() async {
_codeController.text = _controller.genCodeString([_controller.selectedOperation!]) ?? ''; _codeController.text = await _controller.genCodeString();
} }
} }

50
win_text_editor/lib/modules/code_creater/widgets/node_table.dart

@ -3,6 +3,7 @@ import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pluto_grid/pluto_grid.dart'; import 'package:pluto_grid/pluto_grid.dart';
import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/common/constants.dart';
import 'package:win_text_editor/modules/code_creater/services/code_create_service.dart';
import 'package:win_text_editor/modules/outline/models/outline_node.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart';
import 'package:win_text_editor/shared/components/my_pluto_column.dart'; import 'package:win_text_editor/shared/components/my_pluto_column.dart';
import 'package:win_text_editor/shared/components/my_pluto_configuration.dart'; import 'package:win_text_editor/shared/components/my_pluto_configuration.dart';
@ -14,6 +15,7 @@ class NodeTable extends StatefulWidget {
final Function(int) onDeleteMember; final Function(int) onDeleteMember;
final Function(int) onMoveToTop; final Function(int) onMoveToTop;
final Function(int) onMoveToBottom; final Function(int) onMoveToBottom;
final Function(int, String)? onActionTypeChanged; //
const NodeTable({ const NodeTable({
super.key, super.key,
@ -22,6 +24,7 @@ class NodeTable extends StatefulWidget {
required this.onDeleteMember, required this.onDeleteMember,
required this.onMoveToTop, required this.onMoveToTop,
required this.onMoveToBottom, required this.onMoveToBottom,
this.onActionTypeChanged, //
}); });
@override @override
@ -79,6 +82,9 @@ class NodeTableState extends State<NodeTable> {
_stateManager?.setSelectingMode(PlutoGridSelectingMode.row); _stateManager?.setSelectingMode(PlutoGridSelectingMode.row);
_stateManager?.addListener(_handleRowSelection); _stateManager?.addListener(_handleRowSelection);
}, },
onChanged: (PlutoGridOnChangedEvent event) {
_handleCellChanged(event);
},
onRowDoubleTap: (event) { onRowDoubleTap: (event) {
_selectedRowIndex = event.rowIdx; _selectedRowIndex = event.rowIdx;
}, },
@ -166,6 +172,23 @@ class NodeTableState extends State<NodeTable> {
}); });
} }
void _handleCellChanged(PlutoGridOnChangedEvent event) {
if (event.column?.field == 'type' && event.rowIdx != null) {
final rowIndex = event.rowIdx!;
if (rowIndex >= 0 && rowIndex < widget.members.length) {
final newValue = event.value?.toString() ?? '';
setState(() {
widget.members[rowIndex].selectedAction = newValue;
});
// controller
if (widget.onActionTypeChanged != null) {
widget.onActionTypeChanged!(rowIndex, newValue);
}
}
}
}
final Map<Key, _NodeTypeData> _nodeTypeData = {}; final Map<Key, _NodeTypeData> _nodeTypeData = {};
List<PlutoColumn> _buildColumns() { List<PlutoColumn> _buildColumns() {
@ -201,7 +224,13 @@ class NodeTableState extends State<NodeTable> {
.map((index, member) { .map((index, member) {
final rowKey = ValueKey('${member.hashCode}_$index'); final rowKey = ValueKey('${member.hashCode}_$index');
final options = _getOptions(member.value); final options = _getOptions(member.value);
final initialValue = options.isNotEmpty ? options.first : ''; // Use selectedAction if it exists, otherwise use the first option
final initialValue =
member.selectedAction?.isNotEmpty == true
? member.selectedAction!
: options.isNotEmpty
? options.first
: '';
_nodeTypeData[rowKey] = _NodeTypeData(member.value, initialValue); _nodeTypeData[rowKey] = _NodeTypeData(member.value, initialValue);
@ -221,21 +250,6 @@ class NodeTableState extends State<NodeTable> {
.toList(); .toList();
} }
List<String> _getOptions(String type) {
switch (type) {
case Constants.atomFunction:
case Constants.atomService:
case Constants.business:
return ['普通调用', '事务调用'];
case Constants.uftTable:
return ['获取记录', '遍历记录', '插入记录', '修改记录', '删除记录'];
case Constants.component:
return ['获取组件', '遍历组件', '插入组件', '修改组件', '尾部插入组件'];
default:
return ['']; //
}
}
void refreshTable() { void refreshTable() {
if (_stateManager != null) { if (_stateManager != null) {
_stateManager!.refRows.clear(); _stateManager!.refRows.clear();
@ -250,4 +264,8 @@ class NodeTableState extends State<NodeTable> {
_scrollController.dispose(); _scrollController.dispose();
super.dispose(); super.dispose();
} }
List<String> _getOptions(String s) {
return CodeCreateService.getNodeActions(s);
}
} }

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

@ -18,13 +18,12 @@ class MemoryTableController extends BaseContentController {
late DataGridSource fieldsSource; late DataGridSource fieldsSource;
late DataGridSource indexesSource; late DataGridSource indexesSource;
final MemoryTableService _service;
final MacroTemplateService templateService = MacroTemplateService(); final MacroTemplateService templateService = MacroTemplateService();
// MemoryTable对象 // MemoryTable对象
late MemoryTable _memoryTable; late MemoryTable _memoryTable;
MemoryTableController() : _service = MemoryTableService(Logger()) { MemoryTableController() {
// //
final initialFields = [Field('1', '', '', '', false), Field('2', '', '', '', false)]; final initialFields = [Field('1', '', '', '', false), Field('2', '', '', '', false)];
@ -68,7 +67,7 @@ class MemoryTableController extends BaseContentController {
Future<void> onOpenFile(String filePath, {dynamic appendArg}) async { Future<void> onOpenFile(String filePath, {dynamic appendArg}) async {
Logger().info("Opening file: $filePath"); Logger().info("Opening file: $filePath");
try { try {
final tableData = await _service.parseStructureFile(filePath); final tableData = await MemoryTableService.parseStructureFile(filePath);
// Update controller state // Update controller state
tableName = tableData.tableName; tableName = tableData.tableName;

24
win_text_editor/lib/modules/memory_table/models/memory_table.dart

@ -114,14 +114,34 @@ class MemoryTable {
'isPrimary': index.isPrimary, 'isPrimary': index.isPrimary,
'fields': 'fields':
index.fields.asMap().entries.map((entry) { index.fields.asMap().entries.map((entry) {
return {'name': entry.value, 'isLast': entry.key == keyFields.length - 1}; return {
'name': entry.value,
'partnerName':
codePartners
.firstWhere(
(partner) => partner.fields.any((f) => f == entry.value),
orElse: () => CodePartner(name: null, fields: []),
)
.name,
'isLast': entry.key == keyFields.length - 1,
};
}).toList(), }).toList(),
'rule': index.rule, 'rule': index.rule,
}, },
'keyName': keyName, 'keyName': keyName,
'keyFields': 'keyFields':
keyFields.asMap().entries.map((entry) { keyFields.asMap().entries.map((entry) {
return {'name': entry.value, 'isLast': entry.key == keyFields.length - 1}; return {
'name': entry.value,
'partnerName':
codePartners
.firstWhere(
(partner) => partner.fields.any((f) => f == entry.value),
orElse: () => CodePartner(name: null, fields: []),
)
.name,
'isLast': entry.key == keyFields.length - 1,
};
}).toList(), }).toList(),
}; };
} }

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

@ -9,11 +9,7 @@ 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';
class MemoryTableService { class MemoryTableService {
final Logger _logger; static Future<TableData> parseStructureFile(String filePath) async {
MemoryTableService(this._logger);
Future<TableData> parseStructureFile(String filePath) async {
try { try {
// 1. Check file extension // 1. Check file extension
if (!filePath.toLowerCase().endsWith('.uftstructure')) { if (!filePath.toLowerCase().endsWith('.uftstructure')) {
@ -95,10 +91,10 @@ class MemoryTableService {
indexes: indexList.isNotEmpty ? indexList : [], indexes: indexList.isNotEmpty ? indexList : [],
); );
} on xml.XmlParserException catch (e) { } on xml.XmlParserException catch (e) {
_logger.error("XML解析错误: ${e.message}"); Logger().error("XML解析错误: ${e.message}");
rethrow; rethrow;
} catch (e) { } catch (e) {
_logger.error("处理文件时发生错误: $e"); Logger().error("处理文件时发生错误: $e");
rethrow; rethrow;
} }
} }

5
win_text_editor/lib/modules/outline/models/outline_node.dart

@ -27,6 +27,9 @@ class OutlineNode implements TreeNode {
final String value; final String value;
String? wordClass; String? wordClass;
String? selectedAction;
String? path;
OutlineNode({ OutlineNode({
required this.name, required this.name,
required this.value, required this.value,
@ -39,6 +42,8 @@ class OutlineNode implements TreeNode {
this.wordClass, this.wordClass,
List<OutlineNode>? children, List<OutlineNode>? children,
this.title = "", this.title = "",
this.selectedAction = "",
this.path = "",
}) : _children = children ?? [] { }) : _children = children ?? [] {
id = DateTime.now().microsecondsSinceEpoch.toRadixString(36) + title.hashCode.toRadixString(36); id = DateTime.now().microsecondsSinceEpoch.toRadixString(36) + title.hashCode.toRadixString(36);
} }

8
win_text_editor/lib/modules/outline/services/component_service.dart

@ -1,6 +1,5 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/widgets.dart';
import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/common/constants.dart';
import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/framework/controllers/logger.dart';
import 'package:win_text_editor/modules/outline/models/outline_node.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart';
@ -9,10 +8,13 @@ import 'package:xml/xml.dart';
class ComponentService { class ComponentService {
// //
static Map<String, List<String>> componentFieldMap = {}; static Map<String, List<String>> componentFieldMap = {};
static String filePath = "";
// //
static Future<void> initComponentFieldMap(String rootPath) async { static Future<void> initComponentFieldMap(String rootPath) async {
final componentFile = File('$rootPath/metadata/component.xml'); filePath = '$rootPath\\metadata\\component.xml';
final componentFile = File(filePath);
if (!await componentFile.exists()) { if (!await componentFile.exists()) {
Logger().error('component.xml文件不存在'); Logger().error('component.xml文件不存在');
return; return;
@ -68,6 +70,7 @@ class ComponentService {
value: Constants.component, value: Constants.component,
isDirectory: false, isDirectory: false,
depth: 4, depth: 4,
path: filePath,
), ),
), ),
); );
@ -84,6 +87,7 @@ class ComponentService {
value: Constants.component, value: Constants.component,
isDirectory: false, isDirectory: false,
depth: 4, depth: 4,
path: filePath,
), ),
); );
} }

22
win_text_editor/lib/modules/outline/services/functions_service.dart

@ -1,5 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/common/constants.dart';
import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/framework/controllers/logger.dart';
import 'package:win_text_editor/modules/outline/models/outline_node.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart';
@ -89,11 +90,12 @@ class FunctionsService {
if (value.contains(fieldName)) { if (value.contains(fieldName)) {
parentNode.children.add( parentNode.children.add(
OutlineNode( OutlineNode(
name: value[0], // name: path.basenameWithoutExtension(value[0]), //
title: key, title: key,
value: Constants.atomService, value: Constants.atomService,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0],
), ),
); );
} }
@ -107,11 +109,12 @@ class FunctionsService {
if (value.contains(fieldName)) { if (value.contains(fieldName)) {
parentNode.children.add( parentNode.children.add(
OutlineNode( OutlineNode(
name: value[0], // name: path.basenameWithoutExtension(value[0]), //
title: key, title: key,
value: Constants.atomFunction, value: Constants.atomFunction,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0],
), ),
); );
} }
@ -123,14 +126,16 @@ class FunctionsService {
if (fieldName == null || fieldName.isEmpty) return; if (fieldName == null || fieldName.isEmpty) return;
uftbusinessMap.forEach((key, value) { uftbusinessMap.forEach((key, value) {
final functionName = path.basenameWithoutExtension(value[0]);
if (value.contains(fieldName)) { if (value.contains(fieldName)) {
parentNode.children.add( parentNode.children.add(
OutlineNode( OutlineNode(
name: value[0], // name: functionName,
title: key, title: key,
value: Constants.business, value: Constants.business,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0], //
), ),
); );
} }
@ -140,14 +145,16 @@ class FunctionsService {
static List<OutlineNode> searchBusiness(String searchQuery) { static List<OutlineNode> searchBusiness(String searchQuery) {
final List<OutlineNode> nodes = []; final List<OutlineNode> nodes = [];
uftbusinessMap.forEach((key, value) { uftbusinessMap.forEach((key, value) {
final functionName = path.basenameWithoutExtension(value[0]);
if (key.contains(searchQuery)) { if (key.contains(searchQuery)) {
nodes.add( nodes.add(
OutlineNode( OutlineNode(
name: value[0], // name: functionName,
title: key, title: key,
value: Constants.business, value: Constants.business,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0], //
), ),
); );
} }
@ -159,14 +166,16 @@ class FunctionsService {
static List<OutlineNode> searchAtomServices(String searchQuery) { static List<OutlineNode> searchAtomServices(String searchQuery) {
final List<OutlineNode> nodes = []; final List<OutlineNode> nodes = [];
uftatomserviceMap.forEach((key, value) { uftatomserviceMap.forEach((key, value) {
final functionName = path.basenameWithoutExtension(value[0]);
if (key.contains(searchQuery)) { if (key.contains(searchQuery)) {
nodes.add( nodes.add(
OutlineNode( OutlineNode(
name: value[0], // name: functionName,
title: key, title: key,
value: Constants.atomService, value: Constants.atomService,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0], //
), ),
); );
} }
@ -181,11 +190,12 @@ class FunctionsService {
if (key.contains(searchQuery)) { if (key.contains(searchQuery)) {
nodes.add( nodes.add(
OutlineNode( OutlineNode(
name: value[0], // name: path.basenameWithoutExtension(value[0]),
title: key, title: key,
value: Constants.atomFunction, value: Constants.atomFunction,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0], //
), ),
); );
} }

11
win_text_editor/lib/modules/outline/services/uft_object_service.dart

@ -66,13 +66,15 @@ class UftObjectService {
uftObjectMap.forEach((key, value) { uftObjectMap.forEach((key, value) {
if (value.contains(fieldName)) { if (value.contains(fieldName)) {
final tableName = path.basenameWithoutExtension(value[0]);
parentNode.children.add( parentNode.children.add(
OutlineNode( OutlineNode(
name: value[0], name: tableName,
title: key, title: key,
value: Constants.uftTable, value: Constants.uftTable,
isDirectory: false, // isDirectory: false, //
depth: 4, depth: 4,
path: value[0],
), ),
); );
} }
@ -83,15 +85,16 @@ class UftObjectService {
final List<OutlineNode> searchNodes = []; final List<OutlineNode> searchNodes = [];
uftObjectMap.forEach((key, value) { uftObjectMap.forEach((key, value) {
if (key.contains(searchQuery) || final tableName = path.basenameWithoutExtension(value[0]);
path.basenameWithoutExtension(value[0]).contains(searchQuery)) { if (key.contains(searchQuery) || tableName.contains(searchQuery)) {
searchNodes.add( searchNodes.add(
OutlineNode( OutlineNode(
name: value[0], name: tableName,
title: key, title: key,
value: Constants.uftTable, value: Constants.uftTable,
isDirectory: false, isDirectory: false,
depth: 4, depth: 4,
path: value[0],
), ),
); );
} }

9
win_text_editor/lib/modules/outline/widgets/outline_explorer.dart

@ -178,15 +178,12 @@ class _OutlineExplorerState extends State<OutlineExplorer> {
case Constants.atomFunction: case Constants.atomFunction:
case Constants.atomService: case Constants.atomService:
if (widget.onFileDoubleTap != null) { if (widget.onFileDoubleTap != null) {
widget.onFileDoubleTap!(outlineNode.name, null); widget.onFileDoubleTap!(outlineNode.path!, null);
} }
break; break;
case Constants.component: case Constants.component:
if (widget.onFileDoubleTap != null && fileProvider.rootPath != null) { if (widget.onFileDoubleTap != null) {
widget.onFileDoubleTap!( widget.onFileDoubleTap!(outlineNode.path!, outlineNode.name);
'${fileProvider.rootPath}\\metadata\\component.xml',
outlineNode.name,
);
} }
break; break;
} }

Loading…
Cancel
Save