Browse Source

开始搞格式转换

master
hejl 2 months ago
parent
commit
effdc96a56
  1. BIN
      documents/PB UFT模块迁移方案.docx
  2. 2
      win_text_editor/lib/main.dart
  3. 5
      win_text_editor/lib/modules/content_search/widgets/results_view.dart
  4. 13
      win_text_editor/lib/modules/data_format/widgets/data_format_view.dart
  5. 2
      win_text_editor/lib/modules/data_format/widgets/format_text_panel.dart
  6. 92
      win_text_editor/lib/modules/data_format/widgets/grid_view.dart
  7. 10
      win_text_editor/lib/modules/template_parser/widgets/grid_view.dart
  8. 44
      win_text_editor/lib/shared/components/editor_toolbar.dart

BIN
documents/PB UFT模块迁移方案.docx

Binary file not shown.

2
win_text_editor/lib/main.dart

@ -10,7 +10,7 @@ void main() async { @@ -10,7 +10,7 @@ void main() async {
//
await windowManager.ensureInitialized();
WindowOptions windowOptions = const WindowOptions(
size: Size(1200, 1000),
size: Size(1600, 1000),
center: true,
title: '文件操作工具箱',
);

5
win_text_editor/lib/modules/content_search/widgets/results_view.dart

@ -128,13 +128,14 @@ class ResultsView extends StatelessWidget { @@ -128,13 +128,14 @@ class ResultsView extends StatelessWidget {
],
selectionMode: SelectionMode.multiple,
navigationMode: GridNavigationMode.cell,
allowColumnsResizing: true,
gridLinesVisibility: GridLinesVisibility.both,
headerGridLinesVisibility: GridLinesVisibility.both,
allowSorting: false,
allowFiltering: false,
columnWidthMode: ColumnWidthMode.fill,
columnWidthMode: ColumnWidthMode.none,
isScrollbarAlwaysShown: true,
allowColumnsResizing: true, //
columnResizeMode: ColumnResizeMode.onResizeEnd,
);
}

13
win_text_editor/lib/modules/data_format/widgets/data_format_view.dart

@ -50,18 +50,9 @@ class _DataFormatViewState extends State<DataFormatView> { @@ -50,18 +50,9 @@ class _DataFormatViewState extends State<DataFormatView> {
return const Row(
children: [
// GridView (50%)
Expanded(
flex: 1,
child: Padding(
padding: EdgeInsets.only(right: 4.0),
child: Card(child: DataGridView()),
),
),
Expanded(flex: 1, child: Card(child: DataGridView())),
// FormatText (50%)
Expanded(
flex: 1,
child: Padding(padding: EdgeInsets.only(left: 4.0), child: FormatTextPanel()),
),
Expanded(flex: 1, child: FormatTextPanel()),
],
);
},

2
win_text_editor/lib/modules/data_format/widgets/format_text_panel.dart

@ -15,7 +15,7 @@ class FormatTextPanel extends StatelessWidget { @@ -15,7 +15,7 @@ class FormatTextPanel extends StatelessWidget {
height: 200,
child: TextEditor(tabId: 'format_template', title: 'Mustache模板'),
),
const Divider(height: 1),
const SizedBox(height: 6),
// ()
Expanded(
child: TextEditor(

92
win_text_editor/lib/modules/data_format/widgets/grid_view.dart

@ -103,25 +103,29 @@ class _DataGridViewState extends State<DataGridView> { @@ -103,25 +103,29 @@ class _DataGridViewState extends State<DataGridView> {
eol: '\n',
).convert(content, fieldDelimiter: _delimiter);
//
final cleanedData = csvTable
.where((row) => row.isNotEmpty && row.any((cell) => cell.toString().trim().isNotEmpty))
.toList(); // List
//
final dataWithIndex = cleanedData.asMap().entries.map((entry) {
final index = entry.key;
final row = entry.value;
// ()"序号"
if (index == 0) {
return ['序号', ...row.map((cell) => cell.toString().trim()).toList()];
}
// (1)
return [index, ...row.map((cell) => cell.toString().trim()).toList()];
}).toList();
//
final cleanedData =
csvTable
.where(
(row) => row.isNotEmpty && row.any((cell) => cell.toString().trim().isNotEmpty),
)
.toList(); // List
//
final dataWithIndex =
cleanedData.asMap().entries.map((entry) {
final index = entry.key;
final row = entry.value;
// ()"序号"
if (index == 0) {
return ['序号', ...row.map((cell) => cell.toString().trim()).toList()];
}
// (1)
return [index, ...row.map((cell) => cell.toString().trim()).toList()];
}).toList();
setState(() {
_csvData = dataWithIndex;
_csvData = dataWithIndex;
});
}
} catch (e) {
@ -137,32 +141,32 @@ class _DataGridViewState extends State<DataGridView> { @@ -137,32 +141,32 @@ class _DataGridViewState extends State<DataGridView> {
final headers = _csvData.first;
final dataRows = _csvData.sublist(1);
final columns = [
//
GridColumn(
columnName: '序号',
width: 60, //
label: Container(
padding: const EdgeInsets.all(8.0),
color: Colors.grey[200],
alignment: Alignment.center,
child: const Text('序号', overflow: TextOverflow.ellipsis, maxLines: 1),
final columns = [
//
GridColumn(
columnName: '序号',
width: 60, //
label: Container(
padding: const EdgeInsets.all(8.0),
color: Colors.grey[200],
alignment: Alignment.center,
child: const Text('序号', overflow: TextOverflow.ellipsis, maxLines: 1),
),
),
),
//
...headers.sublist(1).map<GridColumn>((header) {
return GridColumn(
columnName: header.toString(),
width: 150, //
label: Container(
padding: const EdgeInsets.all(8.0),
color: Colors.grey[200],
alignment: Alignment.center,
child: Text(header.toString(), overflow: TextOverflow.ellipsis, maxLines: 1),
),
);
}).toList(),
];
//
...headers.sublist(1).map<GridColumn>((header) {
return GridColumn(
columnName: header.toString(),
minimumWidth: 150, //
label: Container(
padding: const EdgeInsets.all(8.0),
color: Colors.grey[200],
alignment: Alignment.center,
child: Text(header.toString(), overflow: TextOverflow.ellipsis, maxLines: 1),
),
);
}).toList(),
];
final dataSource = _CsvDataSource(headers: headers, rows: dataRows);
@ -171,7 +175,9 @@ class _DataGridViewState extends State<DataGridView> { @@ -171,7 +175,9 @@ class _DataGridViewState extends State<DataGridView> {
columns: columns,
gridLinesVisibility: GridLinesVisibility.both,
headerGridLinesVisibility: GridLinesVisibility.both,
columnWidthMode: ColumnWidthMode.fitByCellValue,
allowColumnsResizing: true,
columnResizeMode: ColumnResizeMode.onResizeEnd,
columnWidthMode: ColumnWidthMode.none,
);
}
}

10
win_text_editor/lib/modules/template_parser/widgets/grid_view.dart

@ -65,15 +65,15 @@ class TemplateGridView extends StatelessWidget { @@ -65,15 +65,15 @@ class TemplateGridView extends StatelessWidget {
selectedNodes: selectedNodes,
);
//
String csvData = selectedNodes
//
String csvData = selectedNodes
.map((node) => node.isAttribute ? node.name.substring(1) : node.name)
.join('\t');
csvData += '\n';
//
//
for (final row in dataSource.rows) {
// 10
// 10
for (int i = 1; i < row.getCells().length; i++) {
csvData += row.getCells()[i].value.toString();
if (i < row.getCells().length - 1) csvData += '\t';
@ -127,6 +127,7 @@ class TemplateGridView extends StatelessWidget { @@ -127,6 +127,7 @@ class TemplateGridView extends StatelessWidget {
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.center,
color: Colors.grey[200],
child: Text(node.isAttribute ? node.name.substring(1) : node.name),
),
@ -140,6 +141,7 @@ class TemplateGridView extends StatelessWidget { @@ -140,6 +141,7 @@ class TemplateGridView extends StatelessWidget {
gridLinesVisibility: GridLinesVisibility.both,
headerGridLinesVisibility: GridLinesVisibility.both,
columnWidthMode: ColumnWidthMode.fill,
allowColumnsResizing: true,
);
}

44
win_text_editor/lib/shared/components/editor_toolbar.dart

@ -46,7 +46,7 @@ class EditorToolbar extends StatelessWidget { @@ -46,7 +46,7 @@ class EditorToolbar extends StatelessWidget {
return Container(
height: 40,
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(color: Colors.grey[100]),
decoration: BoxDecoration(color: Colors.grey[300]),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@ -61,29 +61,31 @@ class EditorToolbar extends StatelessWidget { @@ -61,29 +61,31 @@ class EditorToolbar extends StatelessWidget {
return Row(
children: [
if (showOpenFileButton)
IconButton(
icon: const Icon(Icons.folder_open, size: 20),
tooltip: '打开文件',
onPressed: isLoading ? null : onOpenFile,
),
IconButton(
icon: const Icon(Icons.folder_open, size: 20),
tooltip: '打开文件',
onPressed: isLoading ? null : onOpenFile,
),
if (showCopyButton)
IconButton(
icon: const Icon(Icons.content_copy, size: 20),
tooltip: '复制内容',
onPressed: text.isEmpty ? null : onCopyToClipboard,
),
IconButton(
icon: const Icon(Icons.content_copy, size: 20),
tooltip: '复制内容',
onPressed: text.isEmpty ? null : onCopyToClipboard,
),
if (showSaveButton)
IconButton(
icon: const Icon(Icons.save, size: 20),
tooltip: '保存到文件',
onPressed: text.isEmpty ? null : onSaveFile,
),
IconButton(
icon: const Icon(Icons.save, size: 20),
tooltip: '保存到文件',
onPressed: text.isEmpty ? null : onSaveFile,
),
//
...customButtons.map((button) => IconButton(
icon: Icon(button.icon, size: 20),
tooltip: button.tooltip,
onPressed: button.isEnabled ? button.onPressed : null,
)),
...customButtons.map(
(button) => IconButton(
icon: Icon(button.icon, size: 20),
tooltip: button.tooltip,
onPressed: button.isEnabled ? button.onPressed : null,
),
),
if (isLoading)
const Padding(
padding: EdgeInsets.only(left: 8),

Loading…
Cancel
Save