From 0aa45d78dae8f8b0d51c0628b56a41b22a5e6d66 Mon Sep 17 00:00:00 2001 From: JackLee <809262979@qq.com> Date: Wed, 4 Mar 2026 16:22:00 +0800 Subject: [PATCH] =?UTF-8?q?1-=E5=A2=9E=E5=8A=A0=E9=83=A8=E5=88=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=9B=BE=E6=A0=87=202-=E5=A2=9E=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=BB=84=E4=BB=B6=E6=A0=B7=E5=BC=8F.?= =?UTF-8?q?=E9=87=87=E7=94=A8=E5=A4=8D=E7=94=A8=E5=A4=8D=E5=90=88=E5=BC=8F?= =?UTF-8?q?=203-=E8=A7=84=E8=8C=83=E5=8C=96=E5=91=BD=E5=90=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ets/pages/CustomStyle/StyleButton.ets | 47 +++++ .../main/ets/pages/CustomStyle/StyleMenu.ets | 36 ++++ entry/src/main/ets/pages/Index.ets | 2 +- .../ets/pages/LayoutData/TitleInterface.ets | 62 +++++++ .../ets/pages/LayoutData/TitleLayoutData.ets | 77 +++++++++ .../src/main/ets/pages/TitleTab/TitleTab.ets | 93 ++++++++++ .../ets/pages/TitleTab/TitleTabContent.ets | 65 +++++++ entry/src/main/ets/pages/rowBtnTab.ets | 162 ------------------ entry/src/main/ets/pages/titleTab.ets | 152 ---------------- .../resources/base/media/base_app_exit.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_close_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_export_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_help_file.bmp | Bin 0 -> 65590 bytes .../base/media/base_import_export_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_import_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_new_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_open_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_save_file.bmp | Bin 0 -> 65590 bytes .../base/media/base_saveall_file.bmp | Bin 0 -> 65590 bytes .../resources/base/media/base_saveas_file.bmp | Bin 0 -> 65590 bytes 20 files changed, 381 insertions(+), 315 deletions(-) create mode 100644 entry/src/main/ets/pages/CustomStyle/StyleButton.ets create mode 100644 entry/src/main/ets/pages/CustomStyle/StyleMenu.ets create mode 100644 entry/src/main/ets/pages/LayoutData/TitleInterface.ets create mode 100644 entry/src/main/ets/pages/LayoutData/TitleLayoutData.ets create mode 100644 entry/src/main/ets/pages/TitleTab/TitleTab.ets create mode 100644 entry/src/main/ets/pages/TitleTab/TitleTabContent.ets delete mode 100644 entry/src/main/ets/pages/rowBtnTab.ets delete mode 100644 entry/src/main/ets/pages/titleTab.ets create mode 100644 entry/src/main/resources/base/media/base_app_exit.bmp create mode 100644 entry/src/main/resources/base/media/base_close_file.bmp create mode 100644 entry/src/main/resources/base/media/base_export_file.bmp create mode 100644 entry/src/main/resources/base/media/base_help_file.bmp create mode 100644 entry/src/main/resources/base/media/base_import_export_file.bmp create mode 100644 entry/src/main/resources/base/media/base_import_file.bmp create mode 100644 entry/src/main/resources/base/media/base_new_file.bmp create mode 100644 entry/src/main/resources/base/media/base_open_file.bmp create mode 100644 entry/src/main/resources/base/media/base_save_file.bmp create mode 100644 entry/src/main/resources/base/media/base_saveall_file.bmp create mode 100644 entry/src/main/resources/base/media/base_saveas_file.bmp diff --git a/entry/src/main/ets/pages/CustomStyle/StyleButton.ets b/entry/src/main/ets/pages/CustomStyle/StyleButton.ets new file mode 100644 index 00000000..ea3e6e48 --- /dev/null +++ b/entry/src/main/ets/pages/CustomStyle/StyleButton.ets @@ -0,0 +1,47 @@ +import { BtnEvent } from "../LayoutData/TitleInterface"; + +//单一功能按钮 +@ComponentV2 +export struct EventButton { + @Param strIcon:string=''; + @Param strName:string=''; + build() { + Column({ space: 0 }) { + // 请将$r('app.media.loading')替换为实际资源文件 + Image($r('app.media.' + this.strIcon)) + .width(50) + .height(40) + .objectFit(ImageFit.Contain) + Text(this.strName) + .fontSize(12) + .width(50) + .height(10) + .textAlign(TextAlign.Center) + } + .height('50') + .width('50') + .padding('1') + } +} + +//菜单目录按钮 +//功能目录菜单,主要用于针对单一按钮多个功能形式 +@ComponentV2 +export struct EventBtnMenu { + @Param btnMenus: Array=[]; + @Builder + EventMenu(_btnMenus:Array){ + Menu() { + ForEach(_btnMenus, (item: BtnEvent, index: number) => { + MenuItem({ startIcon: $r('app.media.'+item.eIcon), content: item.eName }) + .width('150') + .margin({ top: 0, left: 0, bottom: 0, right: 0 + }) + }) + } + } + build() { + EventButton({strIcon:this.btnMenus[0].eIcon,strName:this.btnMenus[0].eName}).bindMenu(this.EventMenu(this.btnMenus)) + } +} + diff --git a/entry/src/main/ets/pages/CustomStyle/StyleMenu.ets b/entry/src/main/ets/pages/CustomStyle/StyleMenu.ets new file mode 100644 index 00000000..988a2a37 --- /dev/null +++ b/entry/src/main/ets/pages/CustomStyle/StyleMenu.ets @@ -0,0 +1,36 @@ +import { BaseMenu } from "../LayoutData/TitleInterface"; + +//菜单按钮 +//主要用于功能组操作菜单.文件下拉菜单等. +@ComponentV2 +export struct GroupTextEventMenu { + @Param grpName:string ='' + @Param grpMenus: Array=[]; + @Builder + GroupMenu(menus: Array) { + ForEach(menus, (item: BaseMenu, index: number) => { + MenuItem({ startIcon: $r('app.media.'+item.icon), content: item.str }) + .width('150') + .margin({ top: 0, left: 0, bottom: 0, right: 0 + }) + }) + } + build(){ + Row(){ + //功能组名文本 + Text(this.grpName) + .fontSize(8) + .fontColor(Color.Gray) + Button('X') + .fontColor(Color.Gray) + .fontSize(8) + .height(12) + .width(8) + .padding(1) + .type(ButtonType.Normal) + .bindMenu(this.GroupMenu(this.grpMenus)) + .backgroundColor(Color.Transparent) + }.align(Alignment.BottomEnd) + } +} + diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index a66113ba..bf1bedf2 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -1,6 +1,6 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; import { edgeColors } from '@kit.ArkUI'; -import {TitleTab} from './titleTab' +import {TitleTab} from './TitleTab/TitleTab' import {LeftSideTab} from './leftSideTab' import {ModelViewTab} from './modelViewTab' const DOMAIN = 0x0000; diff --git a/entry/src/main/ets/pages/LayoutData/TitleInterface.ets b/entry/src/main/ets/pages/LayoutData/TitleInterface.ets new file mode 100644 index 00000000..a6af9c86 --- /dev/null +++ b/entry/src/main/ets/pages/LayoutData/TitleInterface.ets @@ -0,0 +1,62 @@ +export enum Model{ + CAD, + CAM, + CAE, + BASE +}; +//Button和Event绑定 +export interface BtnEvent { + eModel:Array + eName:string + eNamed:string + eIcon:string + eTips:string + eEvent:string +} +//Menu +export interface Menu{ + mName:string + mIcon:string + mTips:string + mEvent:string +} +//功能组 +export interface GroupEvent{ + //功能组名字 + grpName:string; + //按钮列表 + grpBtn:Array> + //功能组菜单 + grpMenu:Array +} +export interface CAXModel{ + //模块名 + cmName:string + //模块路由页面 + cmPage:string + //模块提示 + cmTips:string + //菜单列表 + cmBtnEvents:Array + //模块布局数据 + //第一个Array为TabContent的行数 + //第二个Array为单行的按钮列表,该参数分为三种形态 + //BtnEvent单按钮 + //Array按钮组 + //Array菜单按钮 + cmEvents:Array|Array>> +} +//Title配置 +export interface TitleConfig{ + //Title配置ID名(唯一) + mId:string; + //功能模块 + mModel:Array +} +//菜单配置 +export interface BaseMenu{ + str:string + icon:string + tips:string + event:string +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/LayoutData/TitleLayoutData.ets b/entry/src/main/ets/pages/LayoutData/TitleLayoutData.ets new file mode 100644 index 00000000..7e0fe8c9 --- /dev/null +++ b/entry/src/main/ets/pages/LayoutData/TitleLayoutData.ets @@ -0,0 +1,77 @@ +import { + BaseMenu, + Model, + TitleConfig , + CAXModel, + GroupEvent, + Menu, + BtnEvent +}from './TitleInterface' + +export let GroupMenu:Array=[ + {str:'增功能',icon:'',tips:"",event:''}, + {str:'编辑组',icon:'',tips:"",event:''}, + {str:'改图标',icon:'',tips:"",event:''}, + {str:'重命名',icon:'',tips:"",event:''}, + {str:'移动到',icon:'',tips:"",event:''} +] +export let RowMenu:Array=[ + {str:'增加功能',icon:'',tips:"",event:''}, + {str:'编辑功能组',icon:'',tips:"",event:''}, + {str:'删除功能组',icon:'',tips:"",event:''}, + {str:'移动功能组',icon:'',tips:"",event:''} +] +export let TitleData:TitleConfig= { + mId:"0", + mModel:[ + //模块一 + {cmName:"文件",cmPage:"",cmTips:"",cmBtnEvents:[ + {eModel:[Model.BASE],eName:"新建",eNamed:"",eIcon:"base_new_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"打开",eNamed:"",eIcon:"base_open_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"保存",eNamed:"",eIcon:"base_save_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"关闭",eNamed:"",eIcon:"base_close_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"导入",eNamed:"",eIcon:"base_import_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"导出",eNamed:"",eIcon:"base_export_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"选项",eNamed:"",eIcon:"base_preferences",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"帮助",eNamed:"",eIcon:"base_help",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"退出",eNamed:"",eIcon:"base_exit",eTips:"",eEvent:""}, + ],cmEvents:[]}, + //模块二 + {cmName:"主页",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents: + //第一行 + [ + //数组表示非单个BtnEvent + [ + //数组成员区别是GroupEvent还是BtnEvent + [{grpName:'文件功能组',grpBtn:[ + {eModel:[Model.BASE],eName:"新建",eNamed:"",eIcon:"base_new_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"打开",eNamed:"",eIcon:"base_open_file",eTips:"",eEvent:""}, + [ + {eModel:[Model.BASE],eName:"保存",eNamed:"",eIcon:"base_save_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"另存为",eNamed:"",eIcon:"base_saveas_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"保存全部",eNamed:"",eIcon:"base_saveall_file",eTips:"",eEvent:""}, + ] as Array, + {eModel:[Model.BASE],eName:"关闭",eNamed:"",eIcon:"base_close_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"导入",eNamed:"",eIcon:"base_import_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"导出",eNamed:"",eIcon:"base_export_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"选项",eNamed:"",eIcon:"base_open_file",eTips:"",eEvent:""}, + {eModel:[Model.BASE],eName:"帮助",eNamed:"",eIcon:"base_help_file",eTips:"",eEvent:""}, + ],grpMenu:RowMenu}] as Array + ] + ]}, + {cmName:"建模",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"曲线",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"曲面",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"装配",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"多边建模",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"分析",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"选择",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"显示",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"工具",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"应用模块",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"关于",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]}, + {cmName:"调试",cmPage:"",cmTips:"",cmBtnEvents:[],cmEvents:[]} + ] +} + +export { TitleConfig, CAXModel } diff --git a/entry/src/main/ets/pages/TitleTab/TitleTab.ets b/entry/src/main/ets/pages/TitleTab/TitleTab.ets new file mode 100644 index 00000000..cc6f7883 --- /dev/null +++ b/entry/src/main/ets/pages/TitleTab/TitleTab.ets @@ -0,0 +1,93 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { ArrayList } from '@kit.ArkTS'; +import { AddFormMenuItem } from '@ohos.arkui.advanced.FormMenu'; +import { SceneResourceType } from '@kit.ArkGraphics3D'; + +//导入布局模块 +import {TitleData,TitleConfig,CAXModel} from '../LayoutData/TitleLayoutData' +import { BtnEvent } from '../LayoutData/TitleInterface' +import {TitleTabContent} from './TitleTabContent' + +@Component +export struct TitleTab { + //顶部导航组件 + private titleBarTabs: TabsController = new TabsController(); + //当前的顶部导航选择页 + @State titleBarFocusIndex: number = 1; + @State titleBarDefaultFocusIndex: number = 1; + @Builder + FileMenu(menus: Array) { + Menu() { + ForEach(menus, (item: BtnEvent, index: number) => { + MenuItem({ startIcon: $r('app.media.'+item.eIcon), content: item.eName }) + .width('150') + .margin({ + top: 0, + left: 0, + bottom: 0, + right: 0 + }) + }) + } + } + build() { + Flex({ direction: FlexDirection.Column }){ + Scroll() { + Row() { + ForEach(TitleData.mModel, (item: CAXModel, index: number) => { + Row({ space: 1 }) { + if(index>0){ + Button(item.cmName) + .fontWeight(index === this.titleBarFocusIndex ? FontWeight.Bold : FontWeight.Normal) + .height(25) + .width(60) + .padding(5) + .type(ButtonType.Normal) + .backgroundColor(Color.Brown) + }else{ + Button(item.cmName) + .fontWeight(index === this.titleBarFocusIndex ? FontWeight.Bold : FontWeight.Normal) + .height(25) + .width(60) + .padding(5) + .bindMenu(this.FileMenu(item.cmBtnEvents)) + .type(ButtonType.Normal) + .backgroundColor(Color.Brown) + } + + }.onClick(() => { + if(index!=0){ + this.titleBarTabs.changeIndex(index); + this.titleBarFocusIndex = index; + }else{ + this.titleBarTabs.changeIndex(this.titleBarDefaultFocusIndex); + this.titleBarFocusIndex = this.titleBarDefaultFocusIndex; + } + }) + }) + } + } + .align(Alignment.Start) + .scrollable(ScrollDirection.Horizontal) + .scrollBar(BarState.Off) + .margin({ top: 2,left:2,bottom:2,right:2}) + .width('100%') + Tabs({barPosition: BarPosition.Start, index: this.titleBarDefaultFocusIndex,controller: this.titleBarTabs}){ + ForEach(TitleData.mModel,(item:CAXModel, index: number)=>{ + TabContent() { + if(item.cmBtnEvents.length==0){ + TitleTabContent({tabLayout:item.cmEvents}) + } + }.align(Alignment.Start) + .padding(1) + .margin({ top: 0,left:0,bottom:2,right:0}) + }) + }.scrollable(false) + .barHeight(0) + .margin({ top: 0,left:0,bottom:0,right:0}) + .height('auto') + .barMode(BarMode.Fixed) + }.borderWidth('1') + .height('auto') + } +} diff --git a/entry/src/main/ets/pages/TitleTab/TitleTabContent.ets b/entry/src/main/ets/pages/TitleTab/TitleTabContent.ets new file mode 100644 index 00000000..3c06e229 --- /dev/null +++ b/entry/src/main/ets/pages/TitleTab/TitleTabContent.ets @@ -0,0 +1,65 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BaseMenu, BtnEvent, GroupEvent } from '../LayoutData/TitleInterface'; +import {GroupTextEventMenu} from '../CustomStyle/StyleMenu' +import {EventButton,EventBtnMenu} from '../CustomStyle/StyleButton' + + +@ComponentV2 +export struct TitleTabContent { + @Param tabLayout:Array|Array>>=[]; + build() { + //垂直布局展示多行 + Column({ space: 0 }) { + //迭代生成行容器 + ForEach(this.tabLayout, (row_items: Array|Array>, index: number) => { + //行的按钮组容器 + Row(){ + ForEach(row_items, (row_item: BtnEvent|Array|Array, index: number) => { + //首先判断是否为数组.如果不为数组者为BtnEvent + if(!Array.isArray(row_item)){ + //单按钮 + EventButton({strIcon:row_item.eIcon,strName:row_item.eName}) + }else if(row_item instanceof Array){ + //功能组,迭代多个功能组 + ForEach(row_item, (group_item: GroupEvent, index: number) =>{ + Column({ space: 2 }){ + Row({ space: 1 }){ + ForEach(group_item.grpBtn, (btn_item: BtnEvent|Array, index: number) =>{ + //如果是数组则为菜单按钮否则为单功能按钮 + if(Array.isArray(btn_item)){ + EventBtnMenu({btnMenus:btn_item}) + }else{ + EventButton({strIcon:btn_item.eIcon,strName:btn_item.eName}) + } + }) + }.margin({ top: 1,left:1,bottom:1,right:1}) + //功能组名 + GroupTextEventMenu({grpName:group_item.grpName,grpMenus:group_item.grpMenu}) + }.borderWidth(1) + .borderColor(Color.Grey) + }) + }else{ + //菜单按钮 + Column(){ + Button((row_item as Array)[0].eName) + .height('95%') + .width('50') + .padding('1') + .type(ButtonType.Normal) + Button() + .height('5%') + .width('50') + .padding('1') + .type(ButtonType.Normal) + //.bindMenu(this.BtnMenu((row_item as Array))) + } + } + }) + } + .width('100%') + .align(Alignment.BottomEnd) + .borderColor(Color.Gray) + }) + }.margin({ top: 1,left:1,bottom:1,right:1}) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/rowBtnTab.ets b/entry/src/main/ets/pages/rowBtnTab.ets deleted file mode 100644 index 5e4e0ff4..00000000 --- a/entry/src/main/ets/pages/rowBtnTab.ets +++ /dev/null @@ -1,162 +0,0 @@ -import { hilog } from '@kit.PerformanceAnalysisKit'; - -export class ToolButton{ - //功能 - str:string=''; - //图标 - icon:string=''; - //按钮提示 - tips:string=''; - //事件 - event:string=''; -} - -export class RowBtn{ - str:string='' - btnGroup:Array>=new Array> -} - -class XMenu{ - str:string='' - icon:string='' - event:string='' -} - -let groupMenu:Array=[ - {str:'增功能',icon:'',event:''}, - {str:'编辑组',icon:'',event:''}, - {str:'改图标',icon:'',event:''}, - {str:'重命名',icon:'',event:''}, - {str:'移动到->',icon:'',event:''} -] -let rowMenu:Array=[ - {str:'增加功能组',icon:'',event:''}, - {str:'编辑功能组',icon:'',event:''}, - {str:'修改功能组',icon:'',event:''}, - {str:'命名功能组',icon:'',event:''}, - {str:'移动功能组',icon:'',event:''} -] -@ComponentV2 -export struct RowBtnTab { - @Param rowsBtn: Array> = new Array>; - @Param rightBtn: Array> = new Array>; - @Builder - ToolsMenu(menus: Array) { - Menu() { - ForEach(menus, (item: ToolButton, index: number) => { - MenuItem({ startIcon: $r('app.media.startIcon'), content: item.str }) - .width('150') - .margin({ - top: 0, - left: 0, - bottom: 0, - right: 0 - }) - }) - } - } - @Builder - TButton(strIcon: string, strName: string) { - Column() { - // 请将$r('app.media.loading')替换为实际资源文件 - Image($r('app.media.startIcon')) - .width(50) - .height(40) - .objectFit(ImageFit.Contain) - Text(strName) - .fontSize(12) - .width(50) - .height(10) - .textAlign(TextAlign.Center) - } - .height('50') - .width('50') - .padding('1') - } - @Builder - XMenu(menus: Array) { - Menu() { - ForEach(menus, (item: ToolButton, index: number) => { - MenuItem({ startIcon: $r('app.media.startIcon'), content: item.str }) - .width('150') - .margin({ - top: 0, - left: 0, - bottom: 0, - right: 0 - }) - }) - } - } - build() { - //垂直布局展示多行 - Column({ space: 0 }) { - //迭代生成行容器 - ForEach(this.rowsBtn, (rowBtn: Array>, index: number) => { - //行的按钮组容器 - Row(){ - ForEach(rowBtn, (rowGroup: RowBtn, index: number) => { - Row(){ - Column({ space: 5 }) { - //Group的按钮组 - Column({ space: 1 }) { - //每个Group和非Group的横向布局 - Row() { - ForEach(rowGroup.btnGroup, (btn: ToolButton | Array, index: number) => { - if (Array.isArray(btn)) { - if ((btn as Array).length > 0) { - Button((btn as Array)[0].str) - .bindMenu(this.ToolsMenu((btn as Array))) - .height('50') - .width('50') - .padding('1') - .type(ButtonType.Normal) - } - } else { - this.TButton((btn as ToolButton).icon, (btn as ToolButton).str); - } - }) - }.margin({ top: 2, left: 2, bottom: 0, right: 2}) - Row() { - Text(rowGroup.str) - .fontSize(8) - .fontColor(Color.Gray) - Button('X') - .fontColor(Color.Gray) - .fontSize(8) - .height(12) - .width(8) - .padding(1) - .type(ButtonType.Normal) - .bindMenu(this.XMenu(groupMenu)) - .align(Alignment.BottomEnd) - .backgroundColor(Color.Transparent) - } - }.margin({ top: 1,left:1,bottom:1,right:1}) - } - }.margin({ top: 1,left:1,bottom:1,right:1}) - .borderWidth('1') - .borderRadius(5) - .borderColor(Color.Gray) - }) - //设置尾部的按钮 - Row(){ - Button('X') - .fontColor(Color.Gray) - .fontSize(8) - .width(8) - .height(70) - .padding(1) - .type(ButtonType.Normal) - .align(Alignment.BottomEnd) - .bindMenu(this.XMenu(rowMenu)) - .backgroundColor(Color.Transparent) - } - } - .width('100%') - .align(Alignment.BottomEnd) - .borderColor(Color.Gray) - }) - }.margin({ top: 1,left:1,bottom:5,right:1}) - } -} \ No newline at end of file diff --git a/entry/src/main/ets/pages/titleTab.ets b/entry/src/main/ets/pages/titleTab.ets deleted file mode 100644 index 939bd8ae..00000000 --- a/entry/src/main/ets/pages/titleTab.ets +++ /dev/null @@ -1,152 +0,0 @@ -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { ArrayList } from '@kit.ArkTS'; -import { AddFormMenuItem } from '@ohos.arkui.advanced.FormMenu'; -import {ToolButton,RowBtnTab,RowBtn}from './rowBtnTab' -import { SceneResourceType } from '@kit.ArkGraphics3D'; - -const DOMAIN = 0x0000; - - -class TitleTabName { - //标题 - str: string=''; - //图标名 - icon: string=''; - //页面名 - page:string=''; - //提示 - tips:string=''; - //Content的内容 - rowsBtn:Array>=new Array>; -} - -//测试数据 -let testPagInfo:Array=[ - //第一个tab - {str:'文件',icon:'',page:'',tips:'',rowsBtn:[]}, - //第二个tab - {str:'主页',icon:'',page:'',tips:'',rowsBtn:[ - [//第一行按钮 - { str:'1行功能组-A',btnGroup:[ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - [ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - ], - ], - }, - { str:'1行功能组-B',btnGroup:[ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - [ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - ], - ]} - ], - [//第二行按钮 - { str:'二行功能组-A',btnGroup:[ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - [ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - ], - ], - }, - { str:'测试',btnGroup:[ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - [ - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - {str:'测试',icon:'',tips:'',event:''} as ToolButton, - ], - ]} - ] - ] - }, - {str:'曲线',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'曲面',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'装配',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'多边形建模',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'分析',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'选择',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'显示',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'工具',icon:'',page:'',tips:'',rowsBtn:[]}, - {str:'应用模块',icon:'',page:'',tips:'',rowsBtn:[]}, -] - -@Component -export struct TitleTab { - titleBarTabsName:Array=new Array; - //顶部导航组件 - private titleBarTabs: TabsController = new TabsController(); - //当前的顶部导航选择页 - @State titleBarFocusIndex: number = 0; - @State titleBarDefaultFocusIndex: number = 1; - LoadData(): void { - this.titleBarTabsName=testPagInfo; - } - aboutToAppear() { - this.LoadData(); - } - - build() { - Flex({ direction: FlexDirection.Column }){ - Scroll() { - Row() { - ForEach(this.titleBarTabsName, (item: TitleTabName, index: number) => { - Row({ space: 1 }) { - Button(item.str) - .fontWeight(index === this.titleBarFocusIndex ? FontWeight.Bold : FontWeight.Normal) - .height(25) - .width(60) - .padding(5) - .type(ButtonType.Normal) - }.onClick(() => { - if(index!=0){ - this.titleBarTabs.changeIndex(index); - this.titleBarFocusIndex = index; - }else{ - this.titleBarTabs.changeIndex(this.titleBarDefaultFocusIndex); - this.titleBarFocusIndex = this.titleBarDefaultFocusIndex; - } - }) - }) - } - } - .align(Alignment.Start) - .scrollable(ScrollDirection.Horizontal) - .scrollBar(BarState.Off) - .margin({ top: 2,left:2,bottom:2,right:2}) - .width('100%') - Tabs({barPosition: BarPosition.Start, index: this.titleBarDefaultFocusIndex,controller: this.titleBarTabs}){ - ForEach(this.titleBarTabsName,(item:TitleTabName, index: number)=>{ - TabContent() { - RowBtnTab({rowsBtn:item.rowsBtn}) - }.align(Alignment.Start) - .padding(1) - .margin({ top: 0,left:0,bottom:2,right:0}) - }) - }.scrollable(false) - .barHeight(0) - .margin({ top: 0,left:0,bottom:0,right:0}) - .height('auto') - .barMode(BarMode.Fixed) - }.borderWidth('1') - .height('auto') - } -} diff --git a/entry/src/main/resources/base/media/base_app_exit.bmp b/entry/src/main/resources/base/media/base_app_exit.bmp new file mode 100644 index 0000000000000000000000000000000000000000..002c4365cc0463845655844ac56386de261f049a GIT binary patch literal 65590 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 E0eD-!@Bjb+ literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/base_export_file.bmp b/entry/src/main/resources/base/media/base_export_file.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d88b5cf8f03738d49e0cd508baf317adaa8e087f GIT binary patch literal 65590 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/base_import_file.bmp b/entry/src/main/resources/base/media/base_import_file.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2c857ace2d918e387248b50651a6fdd29325ecc2 GIT binary patch literal 65590 zcmeI5+i}}45Jlxq@|g-;KtBAJ8rVuYb_ohF5@Tph2}H23i(St!B18%}xMx9+Ez0@z z`~C8EsbBA9`&qU>_wDWSqwLkM+wt4}?ceM5dWpP!e0*Gyx5(}|=8o*XvU6k*xsUXp z*MH<1h`e?==1$#n^eNc~8n0v)9DSqZiN?#}NU{&KJkfY1-Es7dmM0o7ha<^8(DFp% zm2}6^H(H)(yc~`s`#{SRjaSkgN8f09dgrBl*6m)6P`=*zdHnV73u&I#?Vc~n*E>It zr~j;h=QTjrlXbi2it_c&&*RVC*KE-8wB{}2Z)N+uZyS1jS?4*LpCxY@ySi`hKlvQx z_jW#+Pr-YAy|6xR#e3ks)_0n?lpNMxYx{+!@U-76!%(ra=F*wjpSYlt{$IF%SO+v0 zFKzDiN$17gKX-q#yyf-v-VF%XN1WdBFZ2PmibnuWNtJW;RcnuXKBsx4eF% zeIT{D^QCj=?w`9q4&Ktovl`gAdA;|?k*DSyxp=b%;{N=%*K5{5yzl?J`~5L`4RBpg z_dKN^C3qv(fJB~>H6XNTL9=WGpF@UC0~7J1IpfEDkP8pzLoE8j0><-gYK zK@Ft;K>nK=$iM%h?0x^9VY&WyhLs-C@m-t+a&hn6QAZ~D*m z-_`)FUvKS}6>;Btp5FK<52Evyna;<$-LlnvYo6Ztlozeto1gY^nxFRgqvKItwD#zH zrO&7NNsqUB|7dxl@p`Wxv^>#x(?9RetLZ;>p6NgRw>9AX`s$sp&9d$%FYo%wJbCj( ztJn0O{yoIVV)~0!R|vUdvre9=hM8j$DbXK@;hs9v-6XFJ7W^b9_tb0rT72I3q$Kl?Je--yu`Ej|o;9tqTMSh&_ zwfR?bubm&adrkfo-D~D2;a-b>Rrgx?Nx9eHU)jAzev*tTH22*3X}jm-kLaE=KMVI<{88O=G{=9-NLawCr{N%xlYe(D!Vend8}W{wKe)eQTUI%Af8Z zKchdIpN7+sF-G{){iFMu^GJRpUbN0V%b)JQyN}{O-5lmdj|J>{$+-i5#>Kbj{AlEr~4D`7xka+Pr6^w|MKqt0@tyx^Z)<= literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/base_new_file.bmp b/entry/src/main/resources/base/media/base_new_file.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a542f9b3e49d8ea6dfbfb816db5ca84e518c3e5c GIT binary patch literal 65590 zcmeHQ%W>p54E1ENA^5n*J(KOcjSsi2@$p14W8z+kgM_{qEZx|NBnmPb&Yp^6l=PKJmZL^PitT|G!)=cUJOq z@c8)n*Yor9zfVt3Bb7H-E>wq#KhJ#!zScC!uZbk54-XH2uy#~VR6eMLbdEX3HrUp{ zwk5Hf?ftp-%Dzmi{aWSZj>jdHa{=8kFWBeLoUxd#?K$PfJI~js zOQ_BLUZ@Ow9hH0JnvXe~gX_E5HeZMKti4^!7_Qv>KCbBgLFc(o^7v#MRCr!to1xtD z$3|Np$Y}2KgV*Dv!TW*^JZ1;qKX=WxsVvBC$H(Ha)+@|2|Xtip9=^_C>N_8i{YHG4*~oiIoH-`KL+1YU-yg> z%7J0&y4>e5zS`}r@j3o5PqS*zSdfpc__p+$%YmHvyM_bftKDA1%jex%>OFup`#m3h zY{3`PhwSrQfO-60YRww(jaZ7dw{S<8N5n0))sSLrT8H~C-hZfuL^yp@+Eye;l=&556OFFDSq6XhU>w%0({<#C24;t_DPEY z_26SEHrK92e{20y&dlyHNH$EsnyuY3IaJBUs;FB(sc`uV{ zH#G0}I6sz-Q;YtD6ZiMU$3Ew54SvWc-UGz;1#83?doOTnqnmXK;T~e`?CD>FAC3+E zO099x&mNAXuL{-i`?^S#W&@6>2v5k&r<)~=W6nUz9rrZp^x1BrP>SZjTc$> zd)zhoA>TL80TS;xYR2a|UaAS-2pC_M`sY3ezR7&K{Sos00{*kFd%%9t__lCK_-@7k zwTCU&eWI;gesA$b_-^zsvFA6%Rg<5b+zuEU8PVT4rNPn)Z z|Gl(-Y5S@A#NxyLt+&_sLHuj|W6w+5kHv%iWAS1C*4r2_wh=#`Pi;%vFO3i5X}!J1 z58_|zAA4Tfek>mBABzwBx8BBhv5olgd}>?Ter|lW{>%G(ra*st{=0rZ{D{wgH~Le) z4ypH)nCokf4~`Z5A5nkX|Gkd?!|ngt`=9I21|9MJkG=oB>VL%dzdTpd9BAMFAP!>I zEnEA-`hqUY`+SkZ9$`EI&g}Ex98U0Cj34s*3cgQs7*mdek7Dt~U?z;X4i*^;AxyRS zA-{Of8$$R}kJXAV2Dg3x`{{Dz?|*ZyP@dxbF#EG`C?{)-5Ayj2eqTe_avTFcWU{^a zpD_i#3vuCN(s)brQ##Jl@ulcRSkHi0{2l=Q2)^w2Ab&Xa&yqe%$CnZdVa0VIe>Z4I zvAK3_Nq%PH6a86-lJTu^z2!XN#qnXk{~_U?q)q?O{75l~JR5U9mg0wFKwmwsZ?=r_ zwLZkth+IkRjhE6t@Q#D$wQ-Gy9Ose895$tGxcz{4#7^z(b0zx79UEgtAJne)``>cM zCuJ}6UWjf!fS# z_PHQe42;cTWWA?FY@crqJNTz=vilnn_9=!?4qT+xgefu1to1ktifhkt^q{|sBbWme zpZ)!Zg)!ZW{wq1a^TEJ<2>ihDBgO}9z9)}4_F3J&H2a&o&wKqx zsqb>^;TrfL6LscDDZfsarLpLB;hOusQ2EK%g>>R$&L%&@ao^3h`8ugM_u3`=)A-3u zU;6uaD9(Y(8RIR`W}kz{(OQl1w}vk_9yfMR7`IeAH~!rAFz(#;TeZjcaf+Sq37iWb z$it2{+xU`Kt;X+hVVwT>(Q1BXaC>tjal&)@8M&FX`8=1Aui~3=egBd8=uEEmNrvJMB zJ!^0JFYDjC_NM>5{zuT>^bhNQ6zxs_ulgTJd(;0`|D$Pd`d{@wqV}f$r~XIP-t=Gm zdjSLU(|e)ZzxnQhws=$UA9>t+om2SpHfq*;@tgL)=f1;@f7AXtuk9T_HOKtacPxI> z{;ECm7|Y+3`xZXO;5Y4WwLg;nru|p#kD|Y6AJ+Z|`kVIi+V`%%X}_#}&-$D8>)Q9K zziGcs`yTZ-?YC>+ss1M~FYrHtiR3ANlG`f75|M_wC?W+9xVaK0#{5K!puD;u+^6Rbt?ep93x3{-@ z9p_tv{eFLyImG^a*%x*h_T^mh7k_2od^14b|5-hqpL-rh_4D^?G(PI5^`iOIpUVf$ zi`En09N(yZG%s2&@~{3}K4@OFp7`eYM)jk4(Rz`8_2=?I^P=^{H^(=sAI*!_i~OrU zmk*j3ttY-YzES;XUbJ51U;Vj!(7b3p@y+p#>PPdU^&ynis7X z`B#4~A2csoPkeKHqx#XjXuZh4`g8f9dC_{}o8ueRkLE?|MgG;F%LmPi))U_x->7~x zFIq41ul`&c#$2Y1U&5PEH{Hs5g51JRPC%!qp zQT=FMv|i+2{keS5yl6e~&GC)uNAsffBLC{o<%8x$>xplUZ&W{;7p)ihSAQ-aG%s3D zd~W^~5*FH>w}ai`I+$t3Q_ynis7nzB#^8{b*jaUgTf> zxqQ&PXg%@G@r~+7^P=@4|LV`>gXTr+iEoZ?R6m**trz)Me=Z+1FIrE0b9|%v(Y$EA z$iMn?`Jj2xdg7bo8`Y2IMe9ZW)t}1;&5PC(-yGklel#yyFY>ScTs~-Cw4V6p_(t`k zdC_{2fA#0`LGz;Z#5cz`svpgZ){FeBKbH@h7p*70IlfW-XkN5ld)na=H>O&KCk}^I(t8f_j&R5yu|;!`FWnLZSfcXOa^@3GFmz}x3{aQ zAI*!_tGNb^IXx#dFIrD*PiI?GJDL}*S91*-b9zQ-UbLRrp3b(Wb~Gx-dc)wA*buO>hdcGg;_2{;rueI&{w4Og|{N3H%zus$2 zyVal9Y(3wP_j+{O&)3@aep=5TG5-4c`VaH@>b=&qTm5;>*7N;%uSd82e64Nor}g|1 za=v6;A*S_amy{@4}*I#eTxxL4lx1Zi$*$4KV*XH~19mCe2>z?zit?lc(wx7fK z&D+lTdpYdy@!96{>&?_-o~>xQ`kJl2?=Nfh&DVqXHsW4fn77+rqqY`3$N3ufoU2xQ z-t+nId%tSW&y2HrOs*!~*PM*s?78k*O>X`B-#k5eUnLVGyv^C$AI?8&?h)7L=QzC1 z^4a%~Zdq^{TFwwL-twz8jif< zfA-@>wHNBLikAic<$j&0Ivn|XwWpDLp80B-~J>IT!=dN`}&rzdi9zJDp_BGXDNey8G`Vr6xc9xDoB%87R+!c|Y*!S!{Fn&O)j4G@_0z zbCi9M`SSP0>slG@oq?9xT*}xZHCF~U@UD1N1}y_mcK9_=8Mv$r{94L@{p?Hb2S(jn z=Q7XyUHRDF=u3VtI2Sgfe9jqIS_jIrVYkM6Vw-nbSeJ^QX;fV^g`?HIyer<>vBZ8WKbv}FPMW_nH{X9X>%m%?PzDCPvzY%*yR7$HTNA{80RO`^ zao!_LmW2m9%Gyx&0&Cp=Vn3MuVGc%owp^8*EoDpW#r|qU1~td;{otrt=)NCc^HFT0 zdBk4q7oPc3lpFP*cW!jwpEtkE{U`QfuQmVjGNAkZ@|eFrC&XUtwdP-526W$F9&@ev mm&^Q}efiVw{a3B|mz#wJ{?lPT^!aONV}ACRHJ}_g`~LySlatv1 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/base_save_file.bmp b/entry/src/main/resources/base/media/base_save_file.bmp new file mode 100644 index 0000000000000000000000000000000000000000..511e798f07805dc4e4d19e480f321c834b8b57ba GIT binary patch literal 65590 zcmeI5&21b>429(kHUuB{xF?^51tjRQfHP1k8;UY;3d%qsCN?-Fz?4>Yumsx94wvpH8Qnyi$YQ zf!u-If!u-Ifw6bs{{H@y*Y#>(y}r}?>-D~RoBm(7zt-zF{ZIe5c0l)M3%hjY&0nfH z@;$GfG@s(t8*jeW8$I^wN%JXQ{qg2&z0qT@o;080)gN!Z)*C(c>Phn{Uj6arYrWB9 zubwoY;?*B-zSbK(_UcLVDPH~Y=4-vtW3QexpW@XYZ@$(WJ@)EJ^C@2a@#bs2(POWk zG@s(tA8)?a8$I^wN%JXQ{qg2&z0qT@o;080)gN!Z)*C(c>Phn{Uj6arYrWB9ubwoY z;?*B-zSbK(_UcLVDPH~Y=4-vtW3QexpW@XYZ@$(WJ@)EJ^C@2a@#bs2(POWkG@s(t zA8)?a8$I^wN%JXQ{qg2&z0qT@o;080)gN!Z)*C(c>Phn{Uj6arYrWB9ubwoY;?*B- zzSbK(_UcLVDPH~Y=4-vtW3QexpW@XYZ@$(WJ@)EJ^C@2a**jnBU3#o~S+UM*;q{#6 zQ@oeY%GZ7_J=S@xSm(9ydQS5x-pgm@Yd@DB>%3O1^ICX4r}-4`<+Jj&pG%K*UMtpl zExex7e2Vw-X@17-zdsS}M>Jph-TJM1MEeoVr}Jjq?nAU6(R}H5>$mC=?MF19&YN+& z57B-^^QGUd->OHnAJKd|Z^rFDMEeoVmwvZ?s~*vQMDyvq8Mpfo?MF0U`rZ1idPMsX z&8PEb-0nlPAJKg2ck8$65$#7bpEa-cbLp|pYsEURh1YYMPw`$pD_{G$^jPP$Vx8B* z>p9J*crTxoul-zltn*s2&THZIoaR%!m(R-Ael9)Md97IIweWgQ^C{lTr}-JT-v^`p zh~`VbTfbG0Xg{L)bl!~HeTeoWnlJrs{Z>7q{fOq%c{6VJA=-~sa~n^Ds^6NZ*Tut!sfmAdr-A1`swHB>u0nQA4-Y$eDix0KhK?>ml}^+ zr^HXW1KZkH{m$O&XK4LQew_3rkLrV!OYv*ObboPWlv-OPk1RqJQ` z?)|=M^l0h%(R0<;%AiA|6l(vXHD?W_o}bPrSAMar5vw+|Ey;e zZ`I55ZM~1yhx$qJNB5ugefvZGr1D_5Z@;LY6rcY1{5e`b>L&||5@L+U(`>EPk(&= z9IYSqlj4u=KkNJUi~33Nd;6pO*B0-smsL;o+Z%7yqvzW1wZ&8qFJASt>QTH^kDe?4 zwZ&8qFJASt>QTH^kDe?4wZ&8qFJASt>QTH^kDmADr~O*^-t$m?inr#c=e_x9zZSmt zJd~f}t@-JBZ+_aZh3`EN<)?USetO=UpZ06vd(T7pDc+i&p7-Xr`lbC*yv0w?DL=*2 zek^=%{=NI_JrCulcuOyO-kaa*m-a{T7C$|w{1i|7vGBe5_wKLvJd~f}ExqV@Z+@#^ z+8@PR{PdjiQ#|d*!uRIiyT6|E6z=*vcNg{hKeS)Vuf5M{e-yu0zlHam_q7+Rey@I~ zzIyXdeXKpw{wRKpm)tL$i{97!R-GRG&U@<3KksGfIqi?)mpIA2!uM(KD^GO4I$Ljk z?MGwUAH^#li3^v@`^pvB@6v3&`ImZ{-=qCe{G5wCFFbDVD_>N{r&NBSk0 zBlIHt7MAu$@gLwn%=^l{cfZy=dfuB~`_Y*8NAb!xk4vpXy{}w*_B-$WqtAQuTYb|0 zD1ME<)H&Sy%Dq>=Yjarld-Lzz-yZWsd7u9Ke%Eqocf9^bdY}G(E&rpvPyfG;|2@1< z|G$R+y}V!Yzw~m->q}_xSp7NrO0U0!*ZP_Z@xJa>`v2wp5A#0#AKUxte_p9U?m+H9 N?m+H9?!fi$z<--nMKu5b literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/base_saveall_file.bmp b/entry/src/main/resources/base/media/base_saveall_file.bmp new file mode 100644 index 0000000000000000000000000000000000000000..574a2af739cbf33902d160d9ce54272ea7d9a64f GIT binary patch literal 65590 zcmeI5L2~3a6hl2X$#PCG>r@slZ*nHj(R?$fS+-JL7)g&5_$mEvrpjrvLEz&9vS${F z{m;L@UVglke}3IQe%?NQe}DXV`Rn#s`R5D&`uywPudlD4^CM3NpP!#EJwImmdAcuM z_3XZA&HiWq^BKtV3`BqZx9aP&)5?GJ`))oipYnC}T|W8Cj=TA|e9F(&clqQmJMQM= z@+m)8-{q6P?6{kc%cuNYeV0%Evg2+(E}!yq^<6&s%Z|JGxO~db)pz;iFFWq$M2fVmrwfHaW^03yJyW)^%SSG%P0NpxSNmi-LvMY zdWzH8<&%DP+|5V%?pgCxJ;mwVo3DCTJ5wHttAEAm9Lei|?W4H*SDen#{Am5w{nXFZ&a{u>>R)j>NAsigX}?Fu&(4?T6HfiOeA3U3 zyZJ=(qxG}*=lVZ8Uz$%i?eFqQKRfQ`6U~p-&)%Qw|LlBeKH;>#%P0NpxSLNjKUzO~ zf3E+t^QHNO)BY}>^t0n`KGFPW{p|g@{?E>r<`Yi)yL{5mj=T9p^P}~%_viXQJ71bl zIPLH9Nk2R8<`d12)~Eh-{?*U4kK($I;&hJYN9(ulr+%(>rhODw|BBN&njfv-x}W;F z+L`uIT>UFf=V*Ske(Qef=W1u#M{)J9IGv;U(fYLCqvL1iOY;e*eq283XUE-qqWRJK z+52<-pPetwC!F?o`J|s6ck_wnN9$+r&-H(HzBHe3+TZ1qesCvpS?fV|JnJ{ ze8OpemrwfHaW|i6ezbn}{#^fO=S%Ymr~O?%>1W5?e4_c$`q}$){hysL%_p4pSN_}E z+uy`_7QAGk`LymH&F`T9AsQd8J3i|DTP}7slI<<3w%`9pe8OqojsLD1^LxPO%i7m| z$%^t+T(ec2&cr92^b4*U<^0Ugz()7CsM@}E*RpNZ&~B7ZxZYno-!%UC9`LRE@l4Ob zcklW=fBF5o?`zr7du~6(C!G8(_)TYP?`8jIem(qmBDWvn6Tb9Y^E#h_)!!p}xcid1 z+Yj*xuj&2%&P{LY&w^+C`hUOA=E&!6Kg1{ei08ujeh!}T&xEq``_bH#=k`NwV3q zH{aEF{pkE`=hppO?`s~t`L4d}N9Sidx9;D1U-RhAclCSwY1JEjKU-epm+;>Cj-Hp@ zznd5F3D2HicK>ca#3wv^e%bxI{ScqpZ$YdLH>vocs~4dPmM%-Iw=U^~f*bt@G&q z=y~Kvaq>sF>b0JGc3)B@<;f+R_*6e-Iw{~m+;yhYVVDnSLPpd5!3Pvh!E{W72Y629p4dL2El)i?Pgd~e?9 z?u!@lOZeVCN3hZJT0N3K!nfv~(S7kkehJ^&=ji*R=e7DIe}u2i+v>h(t=;eW9{DA_ zr{{EzT^yjVO^St^qTgF!D$Enr6#;BfBrYqW96=N6*vwbS8g-I+H)bN&iaS7q9L_?7nzCy3f|0^#161l~E$@$>*W#__Zms_e-Isl9_o>OI=FaGOHJ)1T)cDWRec4<0ndkoh4N1wg hJQFR?*{Hj-@0h;tbG>T!^Xvb)yPy5X_CMn5{y*t{APoQj literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/base_saveas_file.bmp b/entry/src/main/resources/base/media/base_saveas_file.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1265ef5d617b0f50b307781910565f962876f017 GIT binary patch literal 65590 zcmeHQ!I9iH5R@`-2zvVIm)=*dl1d*}DFdY944lGcpcItBg>WHU2ZnVaNZ~3pe1s_RIF1$A0I|*L&g0 z`a=BwE=SJuy?d({uA~ z{qy@_^Dy>5xd&YGrmz=Q4-B}6hjlXZ08TOy4KnKW9zT+JB5)tl6ydFzc$Z`KR>2wjjyr#&5n&D2c*#e<2Yii|yL6l#U%JkcIMKrI z0scFBD9MAwustxle{B7T)|Xr8uhl$-6D|B6VE%_xe9LRK zJutg}Z2c`g&|FeaY7Yplc~bdmdVtk$c6>@l=30#h44=oM{ImPV*6;OeF-JXU!5Qa3 z_*wmC$H%(0JV!ie$!obv`Dgc!t>5%IVl4IG2yV?;!q4hAJN_u`EpLej7JI~aiGOzg z*!qvq+~>UHfsb!J&+)VR&5m!a^3b<$t;Vs%^%DfNEb8pW(mB=im1)J1_Ah<3aZxD5*b=@p{GgO3p{a`+CrM$(l7r z@`jz~**NWe-0j+5?ysrnHBkPyk)AxYa2U)+yj)wR3p!16LPu&AvpNjRreD1J3 zXX8=6BjRQ4)AoS*W+SSP;cPq`kMbQAFYBMO2h2AcQGE<&XXDv;l<&-V(Pa1@FyCxM^)Z}{XX8=6v*SgVp?ko5vk}$Da5kQeNBMfhi#Egd zfca)4s*mApJR6Vl^@KgVvP*Q&!<28=&m7KT6`+R55OV+G0QrDp#5*)ZYSKih983saU`E+v|biuOU9;N0A4J1{tnb48k`swlUe-Sre`)PA-bX#it+6H-f?@q*@wv6nd=K$pZ=FnzQY`Bqi{D%OHC!+C zAhlKoYx(waeEat8E{b{cy}_=Rj?4f2KR?*>K(FsUGrE8cyF6F_dU9h#4#8@mkO74e^@8x}Odq8|m&nxm$`v=N5bG+yq zyx!YfukYS#v1ZA?{FnD#3oV%(8K2)gN7fe%mtj+!N4@{$z4FO;*O>0NlpmYlaSwzR z`t5K%T5iv4*Gosizj?37yz2kKS;}`UaXY@4|DnY?_c(0tR}P6W&X*D875u%+@dM3q ztMQ`SPp6%E5m-$mZz##_V^Chfzx!`)+unlax}|v4$ZPNBp;iycQ{=tocbsx5y=UdF zOO8jE=i%<|?vEVimhY)HqL<${?b(mVfa)Z9i@n#}&NsPK<$sFve)Yh6EjRD|o~fSy z@Lp{5Q0j@qr+m=dyE!~(DVL9vJgL3xVeJLKdtiI#r=I(ts%MRV=0h#EmH%5`Klyyy zTzmWbEq*uDHS5~t*n7U8;`gM))jY#6Ch8k~KfE4xy=L6{d#?vxIbyyWKYvQSACVqF zVpE=a{Zlc>we3BS+6$Kd(Q_uc|BRn|uW^a5B{4p)pSSkk@^7_0`uuDD@?9yIPPuW@ zF!kI#$UQw$_lj~Gug_uETaA)m_r7~MZuy;{Ua1D~Z=-?mQ3}YF}8scUb>e{PK|ZkkOF!kHs^!FD&0X ztbZ(idB}UnXvq4<;+fhPmhTufyA=i`0- zv(Nqdj-GqHP(Buq^7(krKl|LT@94SL3*}?+D4&n_{Ik#f`i`D^y-+?DkMjBW-u%8E zbl$sumY>C=dinU?{JtJ^-n)L5pT(nk`S{-az8-YmyMC6R#iM%p_}=`!9(3NjewLrb zqk8%H-u!Gmz3XTBS-jT|o%iPV^`iBl@t%*Jv-~W+cl|8C$D?|n@t%*Jv-~W+cl|8C z$D?|n@t%*Jv-~W+cl|8C$D?|n@t%*Jv-~W+cl|8C$D?|n@t%*F3wL1oSv*s}Vte!Z z`q6sOc+Xcm7v6W?Yb|KLUiDj@z4@&U8_{~uc;jJ4;Y@n3*U`K^>W^#e%^%mI=V(1> zyyrvb!q?3En)RafUWz|kzt;7fS$}Kqm;dko>=x=L8h@$(_U<3y{qlbf|Bv#1`9Hq@ zM|!{fAKU+;DTlsqZ+>