diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index dfb95b04..76e2869a 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -3,7 +3,7 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; import { window, display, AppStorageV2, ColorMetrics } from '@kit.ArkUI'; import { IBestInit } from "@ibestservices/ibest-ui-v2" import { DisplayWindowInfo,mdwInfo}from '../pages/dispwininfo/DispWinInfo' -import { InitHub } from '../init/InitHub'; +import { InitInfoWindow } from './InitWindow'; const DOMAIN = 0x0000; @@ -18,48 +18,7 @@ export default class EntryAbility extends UIAbility { } onWindowStageCreate(windowStage: window.WindowStage): void { - if(!InitHub(windowStage.getMainWindowSync(),windowStage,this.context)){ - console.log("InitHub Failed!") - ///this.context.getApplicationContext().killAllProcesses(); - }else{ - //Get Main Window - windowStage.getMainWindow((err, data) => { - if (err.code) { - console.error(`Failed to obtain the main window. Code: ${err.code}, message: ${err.message}`); - return; - } - mdwInfo.win = data; - mdwInfo.winId =data.getWindowProperties().id; - //moveWindowTo - data?.moveWindowTo(50, 50) - //resize mainWindow Size - data?.resize(mdwInfo.winWidth, mdwInfo.winHeight, (err) => { - if (err.code) { - console.error(`Failed to resize the window. Code: ${err.code}, message: ${err.message}`); - return; - } - console.info(`Succeeded in resizing the window to ${mdwInfo.winWidth}x${mdwInfo.winHeight}.`); - }); - - // windowSizeChangeListener to Change mainWindowWidth&&mainWindowHeight in AppStorage - data?.on('windowSizeChange', (ChangeData) => { - // if Size Change save to AppStorage - mdwInfo.winWidth = ChangeData.width; - mdwInfo.winHeight = ChangeData.height; - console.info('Succeeded in enabling the listener for window size changes. Data:' + ChangeData.width, - ChangeData.height); - }); - }); - //Load page - windowStage.loadContent('pages/Index', (err) => { - if (err.code) { - hilog.error(DOMAIN, 'Tag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); - return; - } - IBestInit(windowStage, this.context); - hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); - }); - } + InitInfoWindow(windowStage,this.context); } onWindowStageDestroy(): void { AppStorageV2.remove(DisplayWindowInfo); diff --git a/entry/src/main/ets/entryability/InitWindow.ets b/entry/src/main/ets/entryability/InitWindow.ets new file mode 100644 index 00000000..4359aaaf --- /dev/null +++ b/entry/src/main/ets/entryability/InitWindow.ets @@ -0,0 +1,122 @@ +import { window } from "@kit.ArkUI"; +import { hilog } from "@kit.PerformanceAnalysisKit"; +import { InfoWinMargin,MainWinMargin, InitGlobalDWI, mdwInfo } from "../pages/dispwininfo/DispWinInfo"; +import common from "@ohos.app.ability.common"; + +const DOMAIN = 0x0000; + +export enum LoadPageType{ + STAGE, + WIN +} +//设置窗口在屏幕上显示位置 +function SetDisplayPosition (x:number,y:number){ + //设置窗口显示位置 + if(mdwInfo.win){ + mdwInfo.win.moveWindowTo(x, y) + console.info(`MainWindow SetDisplayPosition:x:${x}-y:${y} `); + }else{ + console.error(`MainWindow SetDisplayPosition Error: win is nullptr!`); + } +} +//设置窗口的大小尺寸 +function SetWinSize (width:number,height:number){ + //设置窗口大小 + if(mdwInfo.win){ + mdwInfo.win.resize(mdwInfo.winWidth, mdwInfo.winHeight, (err) => { + if (err.code) { + console.error(`Failed to resize the window. Code: ${err.code}, message: ${err.message}`); + return; + } + console.info(`Succeeded in resizing the window to ${mdwInfo.winWidth}x${mdwInfo.winHeight}.`); + }); + }else{ + console.error(`MainWindow SetWinSize Error: win is nullptr!`); + } +} +//窗口的事件监听 +function InitWinEventHub(ctx:common.UIAbilityContext){ + if(mdwInfo.win==undefined||mdwInfo.winStage==undefined){ + return; + } + //当窗口大小改变事件触发 + mdwInfo.win.on('windowSizeChange', (ChangeData) => { + // if Size Change save to AppStorage + //mdwInfo.winWidth = ChangeData.width; + //mdwInfo.winHeight = ChangeData.height; + console.info('Succeeded in enabling the listener for window size changes. Data:' + ChangeData.width, + ChangeData.height); + }); + if(ctx){ + ctx.eventHub.on('EMIT_LOADMAINPAGE', (data: Object) => { + let runType=data as LoadPageType; + InitLoadMainPage(runType); + }); + } +} +//初始化加载信息页面 +export function InitLoadInfoPage(){ + //加载页面 + if(mdwInfo.winStage){ + mdwInfo.winStage.loadContent('pages/Info', (err) => { + if (err.code) { + hilog.error(DOMAIN, 'Tag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); + return; + } + hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); + }); + }else{ + console.error(`InitLoadInfoPage winStage Error: win is nullptr!`); + } + SetWinSize(mdwInfo.winWidth,mdwInfo.winHeight) + SetDisplayPosition((mdwInfo.displayWidth-InfoWinMargin[0])/4.16,(mdwInfo.displayHeight-InfoWinMargin[1])/4.16); +} +//WinStage加载软件Info页面 +export function InitLoadMainPage(rType:LoadPageType){ + //加载页面 + if(rType==LoadPageType.STAGE){ + if(mdwInfo.winStage){ + mdwInfo.winStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(DOMAIN, 'Tag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); + return; + } + hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); + }); + }else{ + console.error(`InitLoadInfoPage winStage Error: win is nullptr!`); + } + }else if(rType==LoadPageType.WIN){ + if(mdwInfo.win){ + mdwInfo.win.setUIContent('pages/Index', (err) => { + if (err.code) { + hilog.error(DOMAIN, 'Tag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); + return; + } + hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); + }); + mdwInfo.win.showWindow(); + }else{ + console.error(`InitLoadInfoPage winStage Error: win is nullptr!`); + } + } + mdwInfo.winWidth=mdwInfo.displayWidth-MainWinMargin[0]; + mdwInfo.winHeight=mdwInfo.displayHeight-MainWinMargin[1]*2; + SetWinSize(mdwInfo.winWidth,mdwInfo.winHeight) + SetDisplayPosition(MainWinMargin[0]/2,MainWinMargin[1]/2); +} + +//初始化显示信息页面 +export function InitInfoWindow(winStage: window.WindowStage,ctx:common.UIAbilityContext){ + //通过WindowStage获取MainWindow + winStage.getMainWindow((err, data) => { + if (err.code) { + console.error(`Failed to obtain the main window. Code: ${err.code}, message: ${err.message}`); + return; + } + InitGlobalDWI(winStage); + InitLoadInfoPage(); + //InitLoadMainPage(LoadPageType.STAGE) + InitWinEventHub(ctx); + }); +} \ No newline at end of file diff --git a/entry/src/main/ets/init/InitEnv.ets b/entry/src/main/ets/init/InitEnv.ets deleted file mode 100644 index e3693ae5..00000000 --- a/entry/src/main/ets/init/InitEnv.ets +++ /dev/null @@ -1,17 +0,0 @@ -import { display, window } from '@kit.ArkUI'; -import {MsgTips} from '../pages/subpages/MsgTips' -export function InitEnv(win: window.Window):boolean { - let resolve:boolean=true; - //获取屏幕状态,仅仅支持横屏模式.LANDSCAPE(横屏) or LANDSCAPE_INVERTED(反向横屏) - let orientation: number = display.getDefaultDisplaySync().orientation; - if (orientation != 1 && orientation != 3) { - MsgTips(win,'请切换到<横屏模式>后重试') - return false; - } - let freeWinState = win.isInFreeWindowMode(); - if (!freeWinState) { - MsgTips(win,'请开启<自由窗口模式>后重试') - return false; - } - return resolve; -} \ No newline at end of file diff --git a/entry/src/main/ets/init/InitFonts.ets b/entry/src/main/ets/init/InitFonts.ets deleted file mode 100644 index ca5ba7dd..00000000 --- a/entry/src/main/ets/init/InitFonts.ets +++ /dev/null @@ -1,32 +0,0 @@ -import { common } from "@kit.AbilityKit"; -import { - CheckExistDir, - ExtractDir, - HilogSadboxFontDirFile -} from "./ExtractDir"; - -export function InitFonts(uac:common.UIAbilityContext):boolean{ - try { - let sbFontsDir=uac.filesDir + '/fonts/'; - let sbExampleDir=uac.filesDir + '/example/'; - if(!CheckExistDir(uac,sbFontsDir)||!CheckExistDir(uac,sbExampleDir)) { - console.info(`first run app check dir exist`); - console.info(`extract dir file to sandbox dir`); - const fontsCopied = ExtractDir(uac, 'fonts'); - const exampleCopied = ExtractDir(uac, 'example'); - console.info(`ExtractResDir Done!`); - } - HilogSadboxFontDirFile(uac,'fonts'); - HilogSadboxFontDirFile(uac,'example'); - return true; - } catch (err) { - let msg = 'Unknown error'; - if (err instanceof Error) { - msg = err.message; - } else if (typeof err === 'string') { - msg = err; - } - console.error(`Init Fonts Failed: ${msg}, error code: ${err.code}`); - return false; - } -} \ No newline at end of file diff --git a/entry/src/main/ets/init/InitGlobalDWI.ets b/entry/src/main/ets/init/InitGlobalDWI.ets deleted file mode 100644 index 544ebea7..00000000 --- a/entry/src/main/ets/init/InitGlobalDWI.ets +++ /dev/null @@ -1,20 +0,0 @@ -import {display,window} from '@kit.ArkUI'; -import {mdwInfo} from '../pages/dispwininfo/DispWinInfo' -export function InitGlobalDWI(windowStage: window.WindowStage):boolean{ - try{ - mdwInfo.displayId = display.getDefaultDisplaySync().id; - mdwInfo.displayWidth = display.getDefaultDisplaySync().width; - mdwInfo.displayHeight = display.getDefaultDisplaySync().height; - - mdwInfo.winWidth = mdwInfo.displayWidth-100; - mdwInfo.winHeight = mdwInfo.displayHeight-200; - mdwInfo.winStage= windowStage; - - console.error(`Display Size:`,mdwInfo.displayWidth,mdwInfo.displayHeight); - console.error(`MainWindow Size:`,mdwInfo.winWidth,mdwInfo.winHeight); - return true; - }catch (err){ - console.error(`Failed to InitGlobalDWI. Code: ${err.code}, message: ${err.message}`); - return false; - } -} \ No newline at end of file diff --git a/entry/src/main/ets/init/InitHub.ets b/entry/src/main/ets/init/InitHub.ets deleted file mode 100644 index 34c2b6af..00000000 --- a/entry/src/main/ets/init/InitHub.ets +++ /dev/null @@ -1,22 +0,0 @@ -import { window } from "@kit.ArkUI"; -import { InitFonts } from "./InitFonts"; -import { InitEnv } from "./InitEnv"; -import { InitGlobalDWI } from "./InitGlobalDWI"; -import { common } from "@kit.AbilityKit"; - -export function InitHub(win:window.Window,ws:window.WindowStage,uac:common.UIAbilityContext):boolean{ - if(!InitEnv(win)){ - console.log("InitEnv Failed!") - return false; - } - if(!InitFonts(uac)){ - console.log("InitFonts Failed!") - return false; - } - if(!InitGlobalDWI(ws)){ - console.log("InitGlobalDWI Failed!") - return false; - } - return true; -} - diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 36844494..be68882a 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -19,8 +19,8 @@ enum DividerType{ struct Index { @Local startX:number=0; @Local isDragging:boolean=false; - @Provider('LeftSideWidth') leftSideWidth:number=mdwInfo.winWidth * 0.1; - @Provider('RightSideWidth') rightSideWidth:number=mdwInfo.winHeight * 0.1; + @Provider('LeftSideWidth') leftSideWidth:number=mdwInfo.winWidth * 0.087; + @Provider('RightSideWidth') rightSideWidth:number=mdwInfo.winWidth * 0.087; //利用分割线拖动改变区域容器大小.鼠标和触控整合 dividerChangeSize(event:MouseEvent|TouchEvent,dividerType:DividerType){ @@ -37,7 +37,7 @@ struct Index { // 计算新的宽度 let newWidth = this.leftSideWidth + (mouseEvent.windowX - this.startX); // 添加最小宽度限制 - newWidth = Math.max(newWidth, 0); + newWidth = Math.max(newWidth, mdwInfo.winWidth*0.013); this.leftSideWidth = newWidth; // 更新起始坐标,实现连续拖动 this.startX = mouseEvent.windowX; @@ -54,7 +54,7 @@ struct Index { // 计算新的宽度 let newWidth = this.rightSideWidth - (mouseEvent.windowX - this.startX); // 添加最小宽度限制 - newWidth = Math.max(newWidth, 0); + newWidth = Math.max(newWidth, mdwInfo.winWidth*0.013); this.rightSideWidth = newWidth; // 更新起始坐标,实现连续拖动 this.startX = mouseEvent.windowX; @@ -70,18 +70,17 @@ struct Index { //OpenCAX主界面整体布局,采用多行布局 Column() { //头部导航功能区 - Blank().height(uiMode.state?'15%':'0%') - //TitleTab().height('15%') + //Blank().height(uiMode.state?'15%':'0%') + TitleTab().height(uiMode.state?mdwInfo.displayHeight*0.07:0) //分割线 Divider().vertical(false).strokeWidth(1).lineCap(LineCapStyle.Round).width('100%').backgroundColor(Color.Grey) //工具栏 Row() { TitleColumnSub() - }.height('4%') - .align(Alignment.Start) - + }.height(mdwInfo.displayHeight*0.02) + .align(Alignment.Start) //分割线 - Divider().vertical(false).strokeWidth(1).lineCap(LineCapStyle.Round).width('100%').backgroundColor(Color.Grey) + Divider().vertical(false).strokeWidth(2).lineCap(LineCapStyle.Round).width('100%').backgroundColor(Color.Grey) Row() { //左侧边导航区 LeftSideTab().width(uiMode.state?this.leftSideWidth:'0%') @@ -97,7 +96,7 @@ struct Index { Row() { View() }.layoutWeight(1) - .align(Alignment.Center) + .align(Alignment.Center) //右拖拽手柄 Divider().vertical(true).strokeWidth(3).lineCap(LineCapStyle.Round).height('100%').backgroundColor(Color.Grey) .onMouse((event) => { @@ -108,26 +107,22 @@ struct Index { }) //右侧边导航区 RightSideTab().width(uiMode.state?this.rightSideWidth:'0%') - }.height(uiMode.state?'77%':'92%') + }.layoutWeight(1) //分割线 Divider().vertical(false).strokeWidth(1).lineCap(LineCapStyle.Round).width('100%').backgroundColor(Color.Grey) ///状态栏 - Column() { + Row() { Text('状态栏').fontSize(16) }.width('100%') - .align(Alignment.End) - .alignItems(HorizontalAlign.Start) - .justifyContent(FlexAlign.Center) - .height('4%') + .justifyContent(FlexAlign.Start) + .height(mdwInfo.displayHeight*0.02) } - TitleTab() - .height(uiMode.state?'15%':'0%') - .backgroundColor(Color.Transparent) - .backgroundBlurStyle(BlurStyle.Thin, { colorMode: ThemeColorMode.LIGHT, adaptiveColor: AdaptiveColor.DEFAULT, scale: 1.0 }) + // TitleTab() + // .height(uiMode.state?'15%':'0%') + // .backgroundColor(Color.Transparent) + // .backgroundBlurStyle(BlurStyle.Thin, { colorMode: ThemeColorMode.LIGHT, adaptiveColor: AdaptiveColor.DEFAULT, scale: 1.0 }) }.width('100%') .height('100%') - .backgroundColor(Color.Transparent) - .backgroundBlurStyle(BlurStyle.Thin, { colorMode: ThemeColorMode.LIGHT, adaptiveColor: AdaptiveColor.DEFAULT, scale: 1.0 }) } } diff --git a/entry/src/main/ets/pages/Info.ets b/entry/src/main/ets/pages/Info.ets new file mode 100644 index 00000000..9ec0d7b2 --- /dev/null +++ b/entry/src/main/ets/pages/Info.ets @@ -0,0 +1,103 @@ +import { mdwInfo } from './dispwininfo/DispWinInfo'; +import { LoadPageType } from '../entryability/InitWindow'; +import { common } from '@kit.AbilityKit'; +import { SWInfo } from './subpages/info/SWInfo'; +import { SWSrc } from './subpages/info/SWSrc'; +import { SWEnv } from './subpages/info/SWEnv'; + + +const TabsBarStr:Array=['运行检测','软件介绍','更新日志','开源信息','关于'] +@Entry +@ComponentV2 +struct Info { + //顶部导航组件 + private titleBarTabs: TabsController = new TabsController(); + //当前的顶部导航选择页 + @Local selectedIndex: number = 0; // 当前选中的索引 + build() { + Flex({ direction: FlexDirection.Column }){ + Scroll() { + Row({space:0}) { + Blank().layoutWeight(1) + ForEach(TabsBarStr, (item: string, index: number) => { + Button(){ + Column(){ + Text(item) + .height('95%') + .fontSize(index === this.selectedIndex ? 20 : 16) + .fontWeight(index === this.selectedIndex ? FontWeight.Bold : FontWeight.Normal) + .backgroundColor(Color.Transparent) + Divider() + .height('5%') + .vertical(false) + .strokeWidth(2) + .lineCap(LineCapStyle.Round) + .color(Color.Grey) + .align(Alignment.Top) + .visibility(index === this.selectedIndex?Visibility.Visible:Visibility.Hidden) + }.width('100%') + .height('100%') + } + .width('7%') + .backgroundColor(index === this.selectedIndex ? $r('sys.color.container_modal_button_normal_baseboard') : Color.Transparent) + .type(ButtonType.Normal) + .onClick(() => { + this.titleBarTabs.changeIndex(index); + this.selectedIndex = index; + }) + }) + Blank().layoutWeight(1) + } + } + .height('5%') + .align(Alignment.Center) + .scrollable(ScrollDirection.Horizontal) + .scrollBar(BarState.Off) + .margin({ top: 0,left:0,bottom:0,right:0}) + //分割线 + Divider() + .vertical(false) + .strokeWidth(1) + .lineCap(LineCapStyle.Round) + .width('100%') + .backgroundColor(Color.Grey) + + Tabs({barPosition: BarPosition.Start, index: this.selectedIndex,controller: this.titleBarTabs}){ + TabContent() { + SWEnv(); + } + TabContent() { + SWInfo(); + } + TabContent() { + + } + TabContent() { + SWSrc() + } + TabContent() { + + } + } + .height('90%') + .scrollable(true) + .barHeight(0) + .barMode(BarMode.Fixed) + Row(){ + Blank().layoutWeight(1) + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .onChange((value: boolean) => { + console.info('Checkbox1 change is'+ value); + }) + Text('下次启动不再显示').fontSize(18) + Button('确定') + .onClick(()=>{ + let ctx=this.getUIContext().getHostContext() as common.UIAbilityContext; + ctx.eventHub.emit('EMIT_LOADMAINPAGE',LoadPageType.STAGE) + }) + Blank().layoutWeight(1) + }.height('5%') + .justifyContent(FlexAlign.Center) + }.margin({ top:'1%', left: 0, bottom: '1%', right:0 }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/customcontroller/Button.ets b/entry/src/main/ets/pages/customcontroller/Button.ets index 92d17aa9..1ed1f0bc 100644 --- a/entry/src/main/ets/pages/customcontroller/Button.ets +++ b/entry/src/main/ets/pages/customcontroller/Button.ets @@ -8,8 +8,8 @@ import { } from "../interface/Interface"; //按钮统一尺寸,该按钮为正方形,所以以主窗口宽为基准,长=高->正方形 -let ebWidth=mdwInfo.winWidth*0.02; -let ebHeigth=mdwInfo.winWidth*0.02; +let ebWidth=mdwInfo.winWidth*0.015; +let ebHeigth=mdwInfo.winWidth*0.015; //占位符的高度 let edHeigth=mdwInfo.winWidth*0.005 @@ -124,7 +124,7 @@ export struct MenuBtn { .align(Alignment.Center) } .constraintSize({ minWidth: ebWidth }) - .height(mdwInfo.winWidth*0.01) + .height(mdwInfo.winWidth*0.011) .backgroundColor(Color.Transparent) .bindMenu(this.BaseMenu) .type(ButtonType.Normal) diff --git a/entry/src/main/ets/pages/customcontroller/Menu.ets b/entry/src/main/ets/pages/customcontroller/Menu.ets index c766c0c4..7fe2ce73 100644 --- a/entry/src/main/ets/pages/customcontroller/Menu.ets +++ b/entry/src/main/ets/pages/customcontroller/Menu.ets @@ -7,7 +7,7 @@ import { } from "../interface/Interface"; //按钮统一尺寸,该按钮为正方形,所以以主窗口宽为基准,长=高->正方形 -let ebWidth=mdwInfo.winWidth*0.02; +let ebWidth=mdwInfo.winWidth*0.015; @Builder export function BaseMenu(indexMenu:BaseMenuData) { @@ -65,8 +65,8 @@ export struct GroupTextEventMenu { .fontSize(16) Blank().width('auto') Button() - .height(mdwInfo.winWidth*0.005) - .width(mdwInfo.winWidth*0.005) + .height(mdwInfo.winWidth*0.007) + .width(mdwInfo.winWidth*0.007) .padding(1) .backgroundColor(Color.Transparent) .backgroundImage($r('app.media.base_seetings')) diff --git a/entry/src/main/ets/pages/dispwininfo/DispWinInfo.ets b/entry/src/main/ets/pages/dispwininfo/DispWinInfo.ets index 13bdb32c..b2abba70 100644 --- a/entry/src/main/ets/pages/dispwininfo/DispWinInfo.ets +++ b/entry/src/main/ets/pages/dispwininfo/DispWinInfo.ets @@ -1,4 +1,8 @@ import { AppStorageV2, display,window} from '@kit.ArkUI'; + +export const InfoWinMargin:Array=[1200,800] +export const MainWinMargin:Array=[100,100] + //该文档主要储存屏幕信息,主窗口信息,窗口管理信息 @ObservedV2 export class DisplayWindowInfo { @@ -11,7 +15,6 @@ export class DisplayWindowInfo { @Trace public winHeight: number; @Trace public winStage?: window.WindowStage; - constructor( _displayId?:number, _displayWidth?: number, @@ -30,6 +33,26 @@ export class DisplayWindowInfo { } } +export function InitGlobalDWI(windowStage: window.WindowStage):boolean{ + try{ + mdwInfo.displayId = display.getDefaultDisplaySync().id; + mdwInfo.displayWidth = display.getDefaultDisplaySync().width; + mdwInfo.displayHeight = display.getDefaultDisplaySync().height; + + mdwInfo.winWidth = mdwInfo.displayWidth-InfoWinMargin[0]; + mdwInfo.winHeight = mdwInfo.displayHeight-InfoWinMargin[1]; + mdwInfo.winStage= windowStage; + mdwInfo.win=windowStage.getMainWindowSync(); + mdwInfo.winId =mdwInfo.win.getWindowProperties().id; + + console.error(`Display Size:`,mdwInfo.displayWidth,mdwInfo.displayHeight); + console.error(`MainWindow Size:`,mdwInfo.winWidth,mdwInfo.winHeight); + return true; + }catch (err){ + console.error(`Failed to InitGlobalDWI. Code: ${err.code}, message: ${err.message}`); + return false; + } +} //全局保存主窗口信息,屏幕信息.窗口管理器信息 export let mdwInfo: DisplayWindowInfo = AppStorageV2.connect(DisplayWindowInfo, () => new DisplayWindowInfo())!; diff --git a/entry/src/main/ets/init/ExtractDir.ets b/entry/src/main/ets/pages/initEvent/ExtractDir.ets similarity index 100% rename from entry/src/main/ets/init/ExtractDir.ets rename to entry/src/main/ets/pages/initEvent/ExtractDir.ets diff --git a/entry/src/main/ets/pages/initEvent/InitEnv.ets b/entry/src/main/ets/pages/initEvent/InitEnv.ets new file mode 100644 index 00000000..5ed65ca1 --- /dev/null +++ b/entry/src/main/ets/pages/initEvent/InitEnv.ets @@ -0,0 +1,43 @@ +import { display } from '@kit.ArkUI'; +import { mdwInfo } from '../dispwininfo/DispWinInfo'; +import { common } from "@kit.AbilityKit"; +import { + CheckExistDir, + ExtractDir, + HilogSadboxFontDirFile +} from "./ExtractDir"; + +export function FreeWinMode():boolean { + let freeWinState = mdwInfo.win?.isInFreeWindowMode(); + if (!freeWinState) { + return false; + } + return true; +} + +export function ExtractFonts():boolean{ + try { + let ctx=mdwInfo.win?.getUIContext().getHostContext() as common.UIAbilityContext; + let sbFontsDir=ctx.filesDir + '/fonts/'; + let sbExampleDir=ctx.filesDir + '/example/'; + if(!CheckExistDir(ctx,sbFontsDir)||!CheckExistDir(ctx,sbExampleDir)) { + console.info(`first run app check dir exist`); + console.info(`extract dir file to sandbox dir`); + const fontsCopied = ExtractDir(ctx, 'fonts'); + const exampleCopied = ExtractDir(ctx, 'example'); + console.info(`ExtractResDir Done!`); + } + HilogSadboxFontDirFile(ctx,'fonts'); + HilogSadboxFontDirFile(ctx,'example'); + return true; + } catch (err) { + let msg = 'Unknown error'; + if (err instanceof Error) { + msg = err.message; + } else if (typeof err === 'string') { + msg = err; + } + console.error(`Init Fonts Failed: ${msg}, error code: ${err.code}`); + return false; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/init/InitEventHub.ets b/entry/src/main/ets/pages/initEvent/InitEventHub.ets similarity index 100% rename from entry/src/main/ets/init/InitEventHub.ets rename to entry/src/main/ets/pages/initEvent/InitEventHub.ets diff --git a/entry/src/main/ets/init/InitOptions.ets b/entry/src/main/ets/pages/initEvent/InitOptions.ets similarity index 100% rename from entry/src/main/ets/init/InitOptions.ets rename to entry/src/main/ets/pages/initEvent/InitOptions.ets diff --git a/entry/src/main/ets/init/README.md b/entry/src/main/ets/pages/initEvent/README.md similarity index 100% rename from entry/src/main/ets/init/README.md rename to entry/src/main/ets/pages/initEvent/README.md diff --git a/entry/src/main/ets/pages/leftside/LeftSideTab.ets b/entry/src/main/ets/pages/leftside/LeftSideTab.ets index c0657c3b..270f20dc 100644 --- a/entry/src/main/ets/pages/leftside/LeftSideTab.ets +++ b/entry/src/main/ets/pages/leftside/LeftSideTab.ets @@ -7,7 +7,7 @@ export struct LeftSideTab { private leftSideBarTabs: TabsController = new TabsController(); @Local leftSideBarFocusIndex: number = 0; @Local isExpanded:boolean=true; - @Consumer('LeftSideWidth') leftSideWidth:number=mdwInfo.winWidth * 0.1; + @Consumer('LeftSideWidth') leftSideWidth:number=mdwInfo.winWidth * 0.087; build() { Row() { @@ -25,7 +25,7 @@ export struct LeftSideTab { .height(mdwInfo.winWidth*0.013) .onClick(()=>{ this.isExpanded = !this.isExpanded; - this.leftSideWidth=this.isExpanded?mdwInfo.winWidth * 0.1:mdwInfo.winWidth*0.013 + this.leftSideWidth=this.isExpanded?mdwInfo.winWidth * 0.087:mdwInfo.winWidth*0.013 }).margin({ top: 2,left:1,bottom:0,right:2}) Scroll() { Flex({ direction: FlexDirection.Column}) { @@ -67,7 +67,7 @@ export struct LeftSideTab { } }) }.barHeight(0) - }.width(this.isExpanded?this.leftSideWidth:0) + }.width(this.isExpanded?mdwInfo.winWidth * 0.087:0) }.width('auto') } } diff --git a/entry/src/main/ets/pages/rightside/RightSideTab.ets b/entry/src/main/ets/pages/rightside/RightSideTab.ets index 4a2c7053..05ecff6d 100644 --- a/entry/src/main/ets/pages/rightside/RightSideTab.ets +++ b/entry/src/main/ets/pages/rightside/RightSideTab.ets @@ -7,7 +7,7 @@ export struct RightSideTab { private leftSideBarTabs: TabsController = new TabsController(); @Local leftSideBarFocusIndex: number = 0; @Local isExpanded:boolean=true; - @Consumer('RightSideWidth') rightSideWidth:number=mdwInfo.winWidth * 0.1; + @Consumer('RightSideWidth') rightSideWidth:number=mdwInfo.winWidth * 0.087; build() { Row() { @@ -33,10 +33,11 @@ export struct RightSideTab { .height(mdwInfo.winWidth*0.013) .onClick(()=>{ this.isExpanded = !this.isExpanded; - this.rightSideWidth=this.isExpanded?mdwInfo.winWidth * 0.1:mdwInfo.winWidth*0.013; + this.rightSideWidth=this.isExpanded?mdwInfo.winWidth * 0.087:mdwInfo.winWidth*0.013; }).margin({ top: 2,left:1,bottom:0,right:2}) Blank().layoutWeight(1) }.borderWidth(1) + .borderColor(Color.Grey) .width(mdwInfo.winWidth*0.013) }.width('auto') } diff --git a/entry/src/main/ets/pages/subpages/info/SWEnv.ets b/entry/src/main/ets/pages/subpages/info/SWEnv.ets new file mode 100644 index 00000000..dbf4b4da --- /dev/null +++ b/entry/src/main/ets/pages/subpages/info/SWEnv.ets @@ -0,0 +1,113 @@ +import {mdwInfo}from '../../dispwininfo/DispWinInfo' +import { TextComboBox } from '../../customcontroller/ComboBox'; +import { deviceInfo } from '@kit.BasicServicesKit'; +import { display } from '@kit.ArkUI'; +import { + TitleButton, + ModelType, + EventType +} from "../../interface/Interface"; +import { + FreeWinMode, + ExtractFonts +} from '../../initEvent/InitEnv'; + +export let DisplayMode:Array=[ + {btnModel:[ModelType.BASE],btnName:"横屏",btnNamed:"",btnIcon:"",btnTips:"横屏",btnEvent:{uid:'',command:'',page:'',type:EventType.EVENT,args:[]}}, + {btnModel:[ModelType.BASE],btnName:"反向横屏",btnNamed:"",btnIcon:"",btnTips:"反向横屏",btnEvent:{uid:'',command:'',page:'',type:EventType.EVENT,args:[]}} +] +export let DrivceMode:Array=[ + {btnModel:[ModelType.BASE],btnName:"2in1",btnNamed:"",btnIcon:"",btnTips:"2in1",btnEvent:{uid:'',command:'',page:'',type:EventType.EVENT,args:[]}}, + {btnModel:[ModelType.BASE],btnName:"tablet",btnNamed:"",btnIcon:"",btnTips:"tablet",btnEvent:{uid:'',command:'',page:'',type:EventType.EVENT,args:[]}} +] + +//软件介绍 +@ComponentV2 +export struct SWEnv { + //所有检测状态 + @Local envState:boolean=false; + //设备支持状态 + @Local drivceState:boolean=false; + //字体释放状态 + @Local fontState:boolean=false; + //设置初始化读取状态 + @Local optsState:boolean=false; + //事件初始化状态 + @Local eventState:boolean=false; + //自由窗口状态 + @Local freeWinState:boolean=false; + //屏幕方向状态 + @Local winOriState:boolean=false; + + //当前屏幕方向文本 + @Local currentDispOriStr?:string; + //当前设备型号 + @Local currentDrivceStr?:string; + aboutToAppear(): void { + this.fontState=ExtractFonts(); + this.freeWinState=FreeWinMode(); + if(display.getDefaultDisplaySync().orientation===1){ + this.currentDispOriStr=DisplayMode[0].btnName + this.winOriState=true; + }else if(display.getDefaultDisplaySync().orientation===3){ + this.currentDispOriStr=DisplayMode[1].btnName + this.winOriState=true; + }else{ + this.currentDispOriStr='当前模式不支持' + } + this.currentDrivceStr=deviceInfo.deviceType; + for(let i=0;i<=DrivceMode.length;i++){ + if(this.currentDrivceStr==DrivceMode[i].btnName){ + this.drivceState=true; + break; + } + } + } + @Builder + build(){ + Column(){ + Row(){ + Image($r('app.media.base_background')) + .width(mdwInfo.winWidth*0.1) + .height(mdwInfo.winWidth*0.08) + .backgroundImageSize({ + width: '100%', // 图片宽度占满按钮 + height: '100%' // 图片高度占满按钮 + }) + }.justifyContent(FlexAlign.Center) + .height('30%') + Column(){ + Row(){ + TextComboBox({name:'支持设备型号:',menu:DrivceMode}) + Blank().layoutWeight(1) + Text(`当前设备型号:${this.currentDrivceStr}`) + Blank().width('10%') + Text('状态:') + Checkbox().select(this.drivceState); + }.height('10%') + Row(){ + TextComboBox({name:'屏幕支持方向:',menu:DisplayMode}) + Blank().layoutWeight(1) + Text(`屏幕当前方向:${this.currentDispOriStr}`) + Blank().width('10%') + Text('状态:') + Checkbox().select(this.winOriState); + }.height('10%') + Row(){ + Text('沙箱字体状态:') + Blank().layoutWeight(1) + Text('状态:') + Checkbox().select(this.fontState); + }.height('10%') + Row(){ + Text('自由窗口状态:') + Blank().layoutWeight(1) + Text('状态:') + Checkbox().select(this.freeWinState); + }.height('10%') + Blank().layoutWeight(1) + }.height('70%') + .margin({ top: 0,left:'25%',bottom:0,right:'25%'}) + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/subpages/info/SWInfo.ets b/entry/src/main/ets/pages/subpages/info/SWInfo.ets new file mode 100644 index 00000000..18706e86 --- /dev/null +++ b/entry/src/main/ets/pages/subpages/info/SWInfo.ets @@ -0,0 +1,39 @@ +import {mdwInfo}from '../../dispwininfo/DispWinInfo' +import { LengthMetrics } from '@kit.ArkUI' + +//软件介绍 +@ComponentV2 +export struct SWInfo { + + @Builder + build(){ + Column(){ + Row(){ + Image($r('app.media.base_background')) + .width(mdwInfo.winWidth*0.1) + .height(mdwInfo.winWidth*0.08) + .backgroundImageSize({ + width: '100%', // 图片宽度占满按钮 + height: '100%' // 图片高度占满按钮 + }) + }.justifyContent(FlexAlign.Center) + .height('30%') + Column(){ + TextArea({ + text: '本软件由JackLee基于OCCT独立开发.旨在基于鸿蒙平台和OCCT构建一套强参数建模软件', + }) + .margin({ left:36, right:36 }) + .fontWeight(FontWeight.Regular) + .fontSize($r('sys.float.Body_L')) + .enterKeyType(EnterKeyType.Done) + .borderRadius($r('sys.float.corner_radius_level8')) + .backgroundColor($r('sys.color.comp_background_tertiary')) + .maxLines(50) + .lineSpacing(LengthMetrics.px(5)) + .textOverflow(TextOverflow.Clip) + .textAlign(TextAlign.Center) + }.height('70%') + .margin({ top: 0,left:'25%',bottom:0,right:'25%'}) + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/subpages/info/SWSrc.ets b/entry/src/main/ets/pages/subpages/info/SWSrc.ets new file mode 100644 index 00000000..9c29e6eb --- /dev/null +++ b/entry/src/main/ets/pages/subpages/info/SWSrc.ets @@ -0,0 +1,42 @@ +import {mdwInfo}from '../../dispwininfo/DispWinInfo' +import { LengthMetrics } from '@kit.ArkUI' + +//软件介绍 +@ComponentV2 +export struct SWSrc { + + @Builder + build(){ + Column(){ + Row(){ + Image($r('app.media.base_background')) + .width(mdwInfo.winWidth*0.1) + .height(mdwInfo.winWidth*0.08) + .backgroundImageSize({ + width: '100%', // 图片宽度占满按钮 + height: '100%' // 图片高度占满按钮 + }) + }.justifyContent(FlexAlign.Center) + .height('30%') + Column(){ + TextArea({ + text: '源码开源地址:http://git.axibug.com/JackLee/OpenCAX.git \n ' + + '开源麻本质就是一种抄所以大家一起抄.正所谓你不抄我不抄项目怎么交 \n' + + '一杯茶,一包烟,一行代码写一天,上午写,中午改,晚上调又调 \n'+ + '东借借,西看看,月薪指定能过万 \n', + }) + .margin({ left:36, right:36 }) + .fontWeight(FontWeight.Regular) + .fontSize($r('sys.float.Body_L')) + .enterKeyType(EnterKeyType.Done) + .borderRadius($r('sys.float.corner_radius_level8')) + .backgroundColor($r('sys.color.comp_background_tertiary')) + .maxLines(50) + .lineSpacing(LengthMetrics.px(5)) + .textOverflow(TextOverflow.Clip) + .textAlign(TextAlign.Center) + }.height('70%') + .margin({ top: 0,left:'25%',bottom:0,right:'25%'}) + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/titletabs/TitleTab.ets b/entry/src/main/ets/pages/titletabs/TitleTab.ets index 64a97f3a..05d592f0 100644 --- a/entry/src/main/ets/pages/titletabs/TitleTab.ets +++ b/entry/src/main/ets/pages/titletabs/TitleTab.ets @@ -33,7 +33,7 @@ export struct TitleTab { Column(){ Text(item.cmName) .height('95%') - .fontSize(index === this.selectedIndex ? 20 : 16) + .fontSize(index === this.selectedIndex ? 18 : 16) .fontWeight(index === this.selectedIndex ? FontWeight.Bold : FontWeight.Normal) .backgroundColor(Color.Transparent) @@ -84,7 +84,6 @@ export struct TitleTab { .barHeight(0) .barMode(BarMode.Fixed) }.margin({ top:0, left: 0, bottom: 0, right: 0 }) - //.backgroundColor($r('sys.color.background_secondary')) .backgroundBlurStyle(BlurStyle.Thin, { colorMode: ThemeColorMode.LIGHT, adaptiveColor: AdaptiveColor.DEFAULT, scale: 1.0 }) } diff --git a/entry/src/main/ets/pages/titletabs/TitleTabContent.ets b/entry/src/main/ets/pages/titletabs/TitleTabContent.ets index c3455c4d..6672b18c 100644 --- a/entry/src/main/ets/pages/titletabs/TitleTabContent.ets +++ b/entry/src/main/ets/pages/titletabs/TitleTabContent.ets @@ -25,8 +25,8 @@ export struct TitleTabContent { }else if(row_item instanceof Array){ //Array //功能组,迭代多个功能组 ForEach(row_item, (group_item: TitleGroup, index: number) =>{ - Column({ space:5 }){ - Row({ space: 5 }){ + Column({ space:2 }){ + Row({ space: 2 }){ ForEach(group_item.grpBtn, (btn_item: TitleButton|Array, index: number) =>{ if(this.curtLayout?.cmName=='应用模块'){ if(Array.isArray(btn_item)){ diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 index 805075fa..f7553a6d 100644 --- a/entry/src/main/module.json5 +++ b/entry/src/main/module.json5 @@ -33,6 +33,7 @@ "minWindowHeight": 800, // 设置最小高度 "exported": true, "launchType":"multiton", + "startWindow": "$profile:start_sub_window", "skills": [ { "entities": [ diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index 4907e3e0..d4382357 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -1,6 +1,7 @@ { "src": [ "pages/Index", + "pages/Info", "pages/subpages/SWLine", "pages/subpages/SWExtrude", "pages/subpages/Options",