123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- import 'package:fis_i18n/i18n.dart';
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:fis_measure/interfaces/process/items/terms.dart';
- import 'package:fis_measure/interfaces/process/player/play_controller.dart';
- import 'package:fis_measure/interfaces/process/workspace/application.dart';
- import 'package:fis_measure/process/language/measure_language.dart';
- import 'package:fis_measure/process/workspace/measure_data_controller.dart';
- import 'package:fis_measure/process/workspace/measure_handler.dart';
- import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style.dart';
- import 'package:fis_measure/view/measure/measure_config/widgets/measurement_tool_selection.dart';
- import 'package:fis_measure/view/measure/measure_view_controller.dart';
- import 'package:fis_measure/view/player/controller.dart';
- import 'package:fis_theme/theme.dart';
- import 'package:fis_ui/index.dart';
- import 'package:fis_ui/interface/interactive_container.dart';
- import 'package:fis_ui/widgets/layout/offstage.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import '../../gesture/positioned_cursor.dart';
- ///条目元数据组
- class ItemMetaGroup {
- ItemMetaGroup(
- this.itemMetaGroupTitle,
- this.itemMeta,
- this.isExpend,
- );
- /// 当前测量组的名称
- final String itemMetaGroupTitle;
- /// 当前测量组的测量数组
- final List<ItemMetaDTO> itemMeta;
- /// 是否展开
- bool? isExpend;
- }
- /// 测量工具配置
- class MeasureConfigurationPage extends StatefulWidget
- implements FWidget, FInteractiveContainer {
- @override
- final String pageName = 'MeasureConfigurationDialog';
- const MeasureConfigurationPage({
- Key? key,
- required this.ifHideConfig,
- }) : super(key: key);
- final bool ifHideConfig;
- @override
- State<MeasureConfigurationPage> createState() =>
- MeasureConfigurationPageState();
- }
- class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
- int measureToolsTab = 0;
- /// 切换标签栏
- void changeTab(int index) {
- measureToolsTab = index;
- setState(() {});
- }
- late final application = Get.find<IApplication>();
- late final measureHandler = Get.find<MeasureHandler>();
- final playerController = Get.find<IPlayerController>() as VidPlayerController;
- /// 数据
- final measureData = Get.find<MeasureDataController>();
- final mouseState = Get.find<IMouseState>();
- /// 测量项控制器
- final measureMetaController = Get.find<MeasureMetaController>();
- /// 选中的测量项
- List<String> chooseMeasureList = [];
- List<ItemMetaGroup> itemMetaListGroup = [];
- String activeName = '';
- /// 打开已选测量工具设置
- ///
- /// [name] 测量的名字 后期改版后应该是一个测量对象
- void openHasSelectedSettingDialog(String name) {
- // state.childItemMeta = state.allItemMeta.firstWhere(
- // (element) => element.name == name,
- // );
- // router.dialog(() => HasSelectedSettingDialog(name: name));
- }
- Future<void> getName() async {
- List<String> getModes = [];
- for (var element in playerController.currentFrame?.visuals[0].modes ?? []) {
- getModes.add(element.type.toString().split('.')[1]);
- }
- var measureModeSelection = MeasureModeSelection(
- application.applicationName,
- application.categoryName,
- application.isThirdPart ? ['TPPTissue'] : getModes,
- );
- measureHandler.measureModeChanged = measureModeSelection;
- measureData.getMeasureApplicationList = [];
- var measureApplicationDTO =
- await measureData.getMeasureApplication.call(measureModeSelection);
- if (measureApplicationDTO != null) {
- /// 模式版本
- measureData.measureApplicationVersion =
- measureApplicationDTO.version ?? '';
- measureData.availableModes = measureApplicationDTO.availableModes ?? [];
- measureMetaController.setAvailableModes(measureData.currentMode);
- activeName = measureData.curItemMetaList[0].name;
- }
- }
- void submit() async {
- var measureModeSubmitChanged = MeasureModeSubmit(
- measureData.measureApplicationVersion,
- application.applicationName,
- application.categoryName,
- UserDefinedMeasureModeDTO(
- modeName: measureData.currentMode,
- workingGroups: [
- UserDefinedMeasureGroupDTO(
- name: 'General',
- folders: [
- UserDefinedMeasureFolderDTO(
- name: 'General',
- workingItemNames: chooseMeasureList,
- ),
- ],
- ),
- ],
- ),
- );
- measureHandler.measureModeSubmitChanged = measureModeSubmitChanged;
- await measureData.saveUserDefinedMeasureApplicationAsync
- .call(measureModeSubmitChanged);
- getName();
- measureMetaController.setAvailableModes(measureData.currentMode);
- saveMeasureSystemSettingAsync();
- }
- // 保存修改结果
- Future<void> saveMeasureSystemSettingAsync() async {
- measureData.measureSystemSettingChanged
- .emit(this, measureData.measureSystemSetting);
- await measureData
- .saveMeasureSystemSettingAsync(measureData.measureSystemSetting);
- mouseState.cursorType = getMeasureSystemSettingCursorType(
- measureData.measureSystemSetting.cursorType);
- mouseState.cursorSize =
- measureData.measureSystemSetting.cursorSize as double;
- }
- @override
- void initState() {
- super.initState();
- List<String> chooseMeasure = [];
- measureMetaController.measureConfig();
- itemMetaListGroup = measureData.itemMetaListGroup;
- chooseMeasure = measureData.getMeasureApplicationList
- .where((element) => !MeasureUnsupportedTerms.items.contains(element))
- .toList();
- chooseMeasureList = chooseMeasure.toSet().toList();
- }
- @override
- void dispose() {
- super.dispose();
- }
- @override
- FWidget build(BuildContext context) {
- return FSimpleDialog(
- title: FText(
- i18nBook.user.setting.t,
- style: const TextStyle(
- color: Colors.white,
- fontSize: 18,
- ),
- ),
- cancelString: i18nBook.common.cancel.t,
- okString: i18nBook.common.confirm.t,
- isDefault: true,
- onOk: () {
- submit();
- },
- onCancel: () {
- chooseMeasureList = measureData.getMeasureApplicationList;
- Get.back();
- setState(() {});
- },
- children: [
- FContainer(
- width: 830,
- height: 500,
- child: _buildMeasureconfiguration(),
- ),
- ],
- );
- }
- FWidget _buildMeasureconfiguration() {
- return FContainer(
- padding: const EdgeInsets.symmetric(horizontal: 15),
- child: FRow(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- FContainer(
- width: 170,
- decoration: const BoxDecoration(
- border: Border(
- right: BorderSide(
- color: Color.fromRGBO(235, 235, 235, 1),
- width: 1,
- ),
- ),
- ),
- child: FColumn(
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- const FSizedBox(
- height: 10,
- ),
- if (!widget.ifHideConfig)
- FContainer(
- width: 160,
- child: FInkWell(
- onTap: () {
- changeTab(0);
- },
- child: FContainer(
- padding: const EdgeInsets.symmetric(
- vertical: 10,
- horizontal: 5,
- ),
- child: FText(
- i18nBook.measure.measureToolSelect.t,
- style: measureToolsTab == 0
- ? TextStyle(
- color: FTheme.ins.colorScheme.primary,
- )
- : const TextStyle(),
- textAlign: TextAlign.end,
- ),
- ),
- ),
- ),
- if (!widget.ifHideConfig)
- FContainer(
- width: 160,
- child: FInkWell(
- onTap: () {
- changeTab(1);
- },
- child: FContainer(
- padding: const EdgeInsets.symmetric(
- vertical: 10,
- horizontal: 5,
- ),
- child: FText(
- i18nBook.measure.selectedMeasureTool.t,
- style: measureToolsTab == 1
- ? TextStyle(
- color: FTheme.ins.colorScheme.primary,
- )
- : const TextStyle(),
- textAlign: TextAlign.end,
- ),
- ),
- ),
- ),
- FContainer(
- width: 160,
- child: FInkWell(
- onTap: () {
- changeTab(2);
- },
- child: FContainer(
- padding: const EdgeInsets.symmetric(
- vertical: 10,
- horizontal: 5,
- ),
- child: FText(
- i18nBook.measure.measureStyleConfig.t,
- style: measureToolsTab == 2
- ? TextStyle(
- color: FTheme.ins.colorScheme.primary,
- )
- : const TextStyle(),
- textAlign: TextAlign.end,
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- FExpanded(
- child: FStack(
- fit: StackFit.passthrough,
- children: [
- FOffstage(
- offstage: measureToolsTab != 0,
- child: FSingleChildScrollView(
- child: SelectModulePage(
- itemMetaListGroup: itemMetaListGroup,
- chooseMeasureList: chooseMeasureList,
- ),
- ),
- ),
- FOffstage(
- offstage: measureToolsTab != 1,
- child: _HasSelectedModulePage(
- chooseMeasureList: chooseMeasureList,
- ),
- ),
- FOffstage(
- offstage: measureToolsTab != 2,
- child: StyleConfigPage(
- businessParent: widget,
- ),
- ),
- ],
- )),
- ],
- ),
- );
- }
- }
- class _HasSelectedModulePage extends StatelessWidget implements FWidget {
- final List<String> chooseMeasureList;
- /// 数据
- final measureData = Get.find<MeasureDataController>();
- /// 测量语言包
- final measureLanguage = MeasureLanguage();
- _HasSelectedModulePage({
- required this.chooseMeasureList,
- });
- @override
- FWidget build(BuildContext context) {
- return FListView(
- shrinkWrap: true,
- children: [
- FColumn(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- FContainer(
- padding: const EdgeInsets.only(left: 15, top: 15, bottom: 15),
- child: FWrap(
- spacing: 16.0, // 主轴(水平)方向间距
- runSpacing: 8.0, // 纵轴(垂直)方向间距
- direction: Axis.horizontal,
- crossAlignment: WrapCrossAlignment.center,
- alignment: WrapAlignment.start,
- children: List<FWidget>.generate(
- chooseMeasureList.length,
- (index) {
- return FContainer(
- width: 180,
- height: 60,
- decoration: BoxDecoration(
- border: Border.all(
- width: 0.5,
- color: FTheme.ins.colorScheme.primary,
- ),
- ),
- child: FColumn(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- FText(
- chooseMeasureList[index].toString(),
- style: const TextStyle(
- color: Colors.black,
- ),
- ),
- FText(
- measureLanguage.t(
- 'measure',
- chooseMeasureList[index].toString(),
- ),
- style: const TextStyle(
- color: Colors.black,
- ),
- ),
- ],
- ),
- // ),
- );
- },
- ),
- ),
- ),
- ],
- ),
- ],
- );
- }
- }
|