public void Init(IQFrameworkContainer container) { mRootLayout = EasyIMGUI.Vertical(); var verticalLayout = EasyIMGUI.Vertical() .AddTo(mRootLayout); EasyIMGUI.Label().Text("技术支持").FontBold().FontSize(12).AddTo(verticalLayout); new AdvertisementItemView("官方文档:《QFramework 使用指南 2020》", "https://qframework.cn/doc") .AddTo(verticalLayout); new AdvertisementItemView("官方 qq 群:623597263", "https://shang.qq.com/wpa/qunwpa?idkey=706b8eef0fff3fe4be9ce27c8702ad7d8cc1bceabe3b7c0430ec9559b3a9ce6") .AddTo(verticalLayout); new AdvertisementItemView("提问/提需求/提 Bug/社区", "https://qframework.cn/community") .AddTo(verticalLayout); new AdvertisementItemView("github", "https://github.com/liangxiegame/QFramework") .AddTo(verticalLayout); new AdvertisementItemView("gitee", "https://gitee.com/liangxiegame/QFramework") .AddTo(verticalLayout); new AdvertisementItemView("Unity 开发者进阶班级:小班", "https://liangxiegame.com/zhuanlan/list/89064995-924f-43cd-b236-3eb3eaa01aa0") .AddTo(verticalLayout); }
public T Convert <T>(XmlNode node) where T : class { var scroll = EasyIMGUI.Vertical(); foreach (XmlAttribute childNodeAttribute in node.Attributes) { if (childNodeAttribute.Name == "Id") { scroll.Id = childNodeAttribute.Value; } } return(scroll as T); }
public void Init(IQFrameworkContainer container) { EasyIMGUI.Label().Text("Roadmap 路线图").FontSize(12).Parent(this); EasyIMGUI.Vertical().Box() .AddChild(EasyIMGUI.Label().Text("将来也许").FontBold()) .AddChild(EasyIMGUI.Label().Text("* sLua、toLua、xLua、ILRuntime 支持")) .AddChild(EasyIMGUI.Label().Text("* UnityPackageManager 支持")) .AddChild(EasyIMGUI.Label().Text("* ResKit 支持自定义目录方案")) .AddChild(EasyIMGUI.Label().Text("* UIKit 支持多个 Canvas Root 和 摄像机方案")) .AddChild(EasyIMGUI.Label().Text("v0.12.x").FontBold()) .AddChild(EasyIMGUI.Label().Text("* 插件平台的插件整理")) .AddChild(EasyIMGUI.Label().Text("* Example 示例整理")) .AddChild(EasyIMGUI.Label().Text("* Asset Store 兼容 & 减少第三方依赖")) .AddChild(EasyIMGUI.Label().Text("* 文档整理 & 在编辑器内部内置")) .AddChild(EasyIMGUI.Label().Text("v0.11.x(开发中)").FontBold()) .AddChild(EasyIMGUI.Label().Text("* 打 dll 优化旧设备的编译速度")) .AddChild(EasyIMGUI.Label().Text("v0.10.x(已完成)").FontBold()) .AddChild(EasyIMGUI.Label().Text("* ILRuntime 支持(只完成一部分,后续再支持)")) .AddChild(EasyIMGUI.Label().Text("v0.9.x(已完成)").FontBold()) .AddChild(EasyIMGUI.Label().Text("* 单元测试覆盖")) .AddChild(EasyIMGUI.Label().Text("* PackageKit、Framework、Extensions 的示例全部覆盖")) .AddChild(EasyIMGUI.Label().Text("* 3 ~ 5 个 Demo 发布")) .AddChild(EasyIMGUI.Label().Text("v0.2.x ~ v0.8.x(已完成)").FontBold()) .AddChild(EasyIMGUI.Label().Text("* PackageManager 独立成 PackageKit")) .AddChild(EasyIMGUI.Label().Text("* 剥离掉第三方插件,最为扩展插件支持")) .AddChild(EasyIMGUI.Label().Text("* 插件平台发布:https://liangxiegame.com/qf/package")) .AddChild(EasyIMGUI.Label().Text("* 命名空间从 QF 改回 QFramework")) .AddChild(EasyIMGUI.Label().Text("* 大量 Bug 修复、大量示例编写")) .AddChild(EasyIMGUI.Label().Text("* 五子棋 Demo 发布:Demo:五子棋")) .AddChild(EasyIMGUI.Label().Text("* QFramework 使用指南 2020 完结:QFramework 使用指南 2020")) .AddChild(EasyIMGUI.Label().Text("v0.1.x(已完成)").FontBold()) .AddChild(EasyIMGUI.Label().Text("* UniRx、Zenject、uFrame、JsonDotnet、CatLib 集成和增强")) .AddChild(EasyIMGUI.Label().Text("* IOC 增加 IOC 部分")) .AddChild(EasyIMGUI.Label().Text("* 框架自动更新机制 => PackageManager")) .AddChild(EasyIMGUI.Label().Text("* 命名空间从 QFramework 改成 QF")) .AddChild(EasyIMGUI.Label().Text("v0.0.x(已完成)").FontBold()) .AddChild(EasyIMGUI.Label().Text("* 框架搭建 2017 的工具集收录")) .AddChild(EasyIMGUI.Label().Text("* 框架搭建 2018 的 ResKit 和 UI Kit 模块实现")) .AddChild(EasyIMGUI.Label().Text("* ActionKit 模块实现")) .AddChild(EasyIMGUI.Label().Text("* Manager Of Managers 支持")) .AddChild(EasyIMGUI.Label().Text("* 框架自动更新机制")) .Parent(this); }
protected override void Init() { PackageMakerState.InitState(); var hashSet = new HashSet <string>(); if (mPackageVersion.IncludeFileOrFolders.Count == 0 && mPackageVersion.InstallPath.EndsWith("/")) { hashSet.Add(mPackageVersion.InstallPath.Remove(mPackageVersion.InstallPath.Length - 1)); } foreach (var packageIncludeFileOrFolder in mPackageVersion.IncludeFileOrFolders) { hashSet.Add(packageIncludeFileOrFolder); } _assetTree = new AssetTree(); _assetTreeGUI = new AssetTreeIMGUI(_assetTree.Root); var guids = AssetDatabase.FindAssets(string.Empty); int i = 0, l = guids.Length; for (; i < l; ++i) { _assetTree.AddAsset(guids[i], hashSet); } RootLayout = new VerticalLayout("box"); var editorView = EasyIMGUI.Vertical().Parent(RootLayout); var uploadingView = new VerticalLayout().Parent(RootLayout); // 当前版本号 var versionLine = EasyIMGUI.Horizontal().Parent(editorView); EasyIMGUI.Label().Text("当前版本号").Width(100).Parent(versionLine); EasyIMGUI.Label().Text(mPackageVersion.Version).Width(100).Parent(versionLine); // 发布版本号 var publishedVersionLine = new HorizontalLayout().Parent(editorView); EasyIMGUI.Label().Text("发布版本号") .Width(100) .Parent(publishedVersionLine); EasyIMGUI.TextField() .Text(mPublishVersion) .Width(100) .Parent(publishedVersionLine) .Content.Bind(v => mPublishVersion = v); // 类型 var typeLine = EasyIMGUI.Horizontal().Parent(editorView); EasyIMGUI.Label().Text("类型").Width(100).Parent(typeLine); var packageType = new EnumPopupView(mPackageVersion.Type).Parent(typeLine); var accessRightLine = EasyIMGUI.Horizontal().Parent(editorView); EasyIMGUI.Label().Text("权限").Width(100).Parent(accessRightLine); var accessRight = new EnumPopupView(mPackageVersion.AccessRight).Parent(accessRightLine); EasyIMGUI.Label().Text("发布说明:").Width(150).Parent(editorView); var releaseNote = EasyIMGUI.TextArea().Width(245) .Parent(editorView); // 文件选择部分 EasyIMGUI.Label().Text("插件目录: " + mPackageVersion.InstallPath) .Parent(editorView); EasyIMGUI.Custom().OnGUI(() => { _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); _assetTreeGUI.DrawTreeLayout(); EditorGUILayout.EndScrollView(); }).Parent(editorView); PackageMakerState.InEditorView.BindWithInitialValue(value => { editorView.Visible = value; }) .AddTo(mDisposableList); if (User.Logined) { EasyIMGUI.Button() .Text("发布") .OnClick(() => { var includedPaths = new List <string>(); _assetTree.Root.Traverse(data => { if (data != null && data.isSelected) { includedPaths.Add(data.fullPath); return(false); } return(true); }); mPackageVersion.IncludeFileOrFolders = includedPaths; mPackageVersion.Readme.content = releaseNote.Content.Value; mPackageVersion.AccessRight = (PackageAccessRight)accessRight.ValueProperty.Value; mPackageVersion.Type = (PackageType)packageType.ValueProperty.Value; mPackageVersion.Version = mPublishVersion; mControllerNode.SendCommand(new PublishPackageCommand(mPackageVersion)); }).Parent(editorView); } var notice = new LabelViewWithRect("", 100, 200, 200, 200).Parent(uploadingView); PackageMakerState.NoticeMessage .BindWithInitialValue(value => { notice.Content.Value = value; }).AddTo(mDisposableList); PackageMakerState.InUploadingView.BindWithInitialValue(value => { uploadingView.Visible = value; }) .AddTo(mDisposableList); }
public void Init(IQFrameworkContainer container) { mViewModel = new UIKitSettingViewModel(); EasyIMGUI.Label().Text(LocaleText.UIKitSettings).FontSize(12).Parent(this); mRootLayout = EasyIMGUI.Vertical().Box().Parent(this); mRootLayout.AddChild(EasyIMGUI.Space().Pixel(6)); // 命名空间 var nameSpaceLayout = new HorizontalLayout() .Parent(mRootLayout); EasyIMGUI.Label().Text(LocaleText.Namespace) .FontSize(12) .FontBold() .Width(200) .Parent(nameSpaceLayout); EasyIMGUI.TextField().Text(mUiKitSettingData.Namespace) .Parent(nameSpaceLayout) .Content.Bind(content => mUiKitSettingData.Namespace = content); // UI 生成的目录 EasyIMGUI.Space().Pixel(6) .Parent(mRootLayout); var uiScriptGenerateDirLayout = new HorizontalLayout() .Parent(mRootLayout); EasyIMGUI.Label().Text(LocaleText.UIScriptGenerateDir) .FontSize(12) .FontBold() .Width(200) .Parent(uiScriptGenerateDirLayout); EasyIMGUI.TextField().Text(mUiKitSettingData.UIScriptDir) .Parent(uiScriptGenerateDirLayout) .Content.Bind(content => mUiKitSettingData.UIScriptDir = content); mRootLayout.AddChild(EasyIMGUI.Space().Pixel(6)); var uiPanelPrefabDir = new HorizontalLayout() .Parent(mRootLayout); EasyIMGUI.Label().Text(LocaleText.UIPanelPrefabDir) .FontSize(12) .FontBold() .Width(200) .Parent(uiPanelPrefabDir); EasyIMGUI.TextField().Text(mUiKitSettingData.UIPrefabDir) .Parent(uiPanelPrefabDir) .Content.Bind(content => mUiKitSettingData.UIPrefabDir = content); mRootLayout.AddChild(EasyIMGUI.Space().Pixel(6)); // UI 生成的目录 EasyIMGUI.Space().Pixel(6) .Parent(mRootLayout); var viewControllerScriptGenerateDirLayout = new HorizontalLayout() .Parent(mRootLayout); EasyIMGUI.Label().Text(LocaleText.ViewControllerScriptGenerateDir) .FontSize(12) .FontBold() .Width(200) .Parent(viewControllerScriptGenerateDirLayout); EasyIMGUI.TextField().Text(mUiKitSettingData.DefaultViewControllerScriptDir) .Parent(viewControllerScriptGenerateDirLayout) .Content.Bind(content => mUiKitSettingData.DefaultViewControllerScriptDir = content); mRootLayout.AddChild(EasyIMGUI.Space().Pixel(6)); var viewControllerPrefabDir = new HorizontalLayout() .Parent(mRootLayout); EasyIMGUI.Label().Text(LocaleText.ViewControllerPrefabGenerateDir) .FontSize(12) .FontBold() .Width(220) .Parent(viewControllerPrefabDir); EasyIMGUI.TextField().Text(mUiKitSettingData.DefaultViewControllerPrefabDir) .Parent(viewControllerPrefabDir) .Content.Bind(content => mUiKitSettingData.DefaultViewControllerPrefabDir = content); mRootLayout.AddChild(EasyIMGUI.Space().Pixel(6)); // 保存数据 EasyIMGUI.Button() .Text(LocaleText.Apply) .OnClick(() => { mUiKitSettingData.Save(); }) .Parent(mRootLayout); EasyIMGUI.TextField().Text(mViewModel.PanelNameToCreate) .Parent(mRootLayout) .Self(text => { text.Content.Bind(txt => mViewModel.PanelNameToCreate = txt); }); // 创建 UI 界面 按钮的绑定 EasyIMGUI.Button() .Text(LocaleText.CreateUIPanel) .Parent(mRootLayout) .Self(btn => btn.OnClick(() => { mViewModel.OnCreateUIPanelClick(); })); }
public void Init(IQFrameworkContainer container) { Container = container; var localPackageVersionModel = this.GetModel <ILocalPackageVersionModel>(); // 左侧 mLeftLayout = EasyIMGUI.Vertical() .AddChild(EasyIMGUI.Area().WithRectGetter(() => mLeftRect) // 间距 20 .AddChild(EasyIMGUI.Vertical() .AddChild(EasyIMGUI.Space().Pixel(20))) // 搜索 .AddChild(EasyIMGUI.Horizontal() .AddChild(EasyIMGUI.Label().Text("搜索:") .FontBold() .FontSize(12) .Width(40) ).AddChild(EasyIMGUI.TextField() .Height(20) .Self(search => { search.Content .Bind(key => { this.SendCommand(new SearchCommand(key)); }) .AddToDisposeList(mDisposableList); }) ) ) // 权限 .AddChild(EasyIMGUI.Toolbar() .Menus(new List <string>() { "All", PackageAccessRight.Public.ToString(), PackageAccessRight.Private.ToString() }) .Self(self => { self.IndexProperty.Bind(value => { PackageManagerState.AccessRightIndex.Value = value; this.SendCommand(new SearchCommand(PackageManagerState.SearchKey.Value)); }).AddToDisposeList(mDisposableList); })) // 分类 .AddChild( EasyIMGUI.Horizontal() .AddChild(PopupView.Create() .ToolbarStyle() .Self(self => { self.IndexProperty.Bind(value => { PackageManagerState.CategoryIndex.Value = value; this.SendCommand(new SearchCommand(PackageManagerState.SearchKey.Value)); }).AddToDisposeList(mDisposableList); mCategoriesSelectorView = self; })) ) // 是否是官方 .AddChild( EasyIMGUI.Horizontal() .AddChild(EasyIMGUI.Toggle().IsOn(mIsOfficial) .Self(t => t.ValueProperty.Bind(v => mIsOfficial = v))) .AddChild(EasyIMGUI.Label().Text("官方")) .AddChild(EasyIMGUI.FlexibleSpace()) ) .AddChild(EasyIMGUI.Scroll() .AddChild(EasyIMGUI.Custom().OnGUI(() => { PackageManagerState.PackageRepositories.Value .Where(p => p.isOfficial == mIsOfficial) .OrderByDescending(p => { var installedVersion = localPackageVersionModel.GetByName(p.name); if (installedVersion == null) { return(-1); } else if (installedVersion.VersionNumber < p.VersionNumber) { return(2); } else if (installedVersion.VersionNumber == p.VersionNumber) { return(1); } else { return(0); } }) .ThenBy(p => p.name) .ForEach(p => { GUILayout.BeginVertical("box"); GUILayout.BeginHorizontal(); { GUILayout.Label(p.name); GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { EasyIMGUI.Box().Text(p.latestVersion) .Self(self => self.BackgroundColor = Color.green) .DrawGUI(); GUILayout.FlexibleSpace(); var installedVersion = localPackageVersionModel.GetByName(p.name); if (installedVersion == null) { if (GUILayout.Button(LocaleText.Import)) { RenderEndCommandExecutor.PushCommand(() => { this.SendCommand(new ImportPackageCommand(p)); }); } } else if (installedVersion.VersionNumber < p.VersionNumber) { if (GUILayout.Button(LocaleText.Update)) { RenderEndCommandExecutor.PushCommand(() => { this.SendCommand(new UpdatePackageCommand(p)); }); } } else if (installedVersion.VersionNumber == p.VersionNumber) { if (GUILayout.Button(LocaleText.Reimport)) { RenderEndCommandExecutor.PushCommand(() => { this.SendCommand(new ReimportPackageCommand(p)); }); } } } GUILayout.EndHorizontal(); GUILayout.EndVertical(); var rect = GUILayoutUtility.GetLastRect(); if (mSelectedPackageRepository == p) { GUI.Box(rect, "", mSelectionRect); } if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseUp) { mSelectedPackageRepository = p; Event.current.Use(); } }); })) ) ); // var skin = AssetDatabase.LoadAssetAtPath<GUISkin>( var skin = AssetDatabase.LoadAssetAtPath <GUISkin>( "Assets/QFramework/Framework/Toolkits/Core/Editor/Markdown/Skin/MarkdownSkinQS.guiskin"); mMarkdownViewer = new MarkdownViewer(skin, string.Empty, ""); // 右侧 mRightLayout = EasyIMGUI.Vertical() .AddChild(EasyIMGUI.Area().WithRectGetter(() => mRightRect) // 间距 20 .AddChild(EasyIMGUI.Vertical() .AddChild(EasyIMGUI.Space().Pixel(20)) ) // 详细信息 .AddChild(EasyIMGUI.Vertical() .WithVisibleCondition(() => mSelectedPackageRepository != null) // 名字 .AddChild(EasyIMGUI.Label() .TextGetter(() => mSelectedPackageRepository.name) .FontSize(30) .FontBold()) .AddChild(EasyIMGUI.Space()) // 服务器版本 .AddChild(EasyIMGUI.Label() .TextGetter(() => "服务器版本: " + mSelectedPackageRepository.latestVersion) .FontSize(15)) // 本地版本 .AddChild(EasyIMGUI.Label() .WithVisibleCondition(() => localPackageVersionModel.GetByName(mSelectedPackageRepository.name).IsNotNull()) .TextGetter(() => "本地版本:" + localPackageVersionModel.GetByName(mSelectedPackageRepository.name).Version) .FontSize(15)) // 作者 .AddChild(EasyIMGUI.Label() .TextGetter(() => "作者:" + mSelectedPackageRepository.author) .FontSize(15)) // 权限 .AddChild(EasyIMGUI.Label() .TextGetter(() => "权限:" + mSelectedPackageRepository.accessRight) .FontSize(15)) // 主页 .AddChild( EasyIMGUI.Horizontal() .AddChild(EasyIMGUI.Label() .FontSize(15) .Text("插件主页:")) .AddChild(EasyIMGUI.Button() .TextGetter(() => UrlHelper.PackageUrl(mSelectedPackageRepository)) .FontSize(15) .OnClick(() => { this.SendCommand(new OpenDetailCommand(mSelectedPackageRepository)); }) ) .AddChild(EasyIMGUI.FlexibleSpace()) ) // 描述 .AddChild(EasyIMGUI.Label() .TextGetter(() => "描述:") .FontSize(15) ) .AddChild(EasyIMGUI.Space()) // 描述内容 .AddChild(EasyIMGUI.Custom().OnGUI(() => { mMarkdownViewer.UpdateText(mSelectedPackageRepository.description); var lastRect = GUILayoutUtility.GetLastRect(); mMarkdownViewer.DrawWithRect(new Rect(lastRect.x, lastRect.y + lastRect.height, mRightRect.width - 210, mRightRect.height - lastRect.y - lastRect.height)); // mMarkdownViewer.Draw(); })) ) ); mPackageKitWindow = EditorWindow.GetWindow <PackageKitWindow>(); this.SendCommand <PackageManagerInitCommand>(); PackageManagerState.Categories.Bind(value => { mCategoriesSelectorView.Menus(value); mPackageKitWindow.Repaint(); }).AddToDisposeList(mDisposableList); // 创建双屏 mSplitView = mSplitView = new VerticalSplitView { Split = 240, fistPan = rect => { mLeftRect = rect; mLeftLayout.DrawGUI(); }, secondPan = rect => { mRightRect = rect; mRightLayout.DrawGUI(); } }; }
public void Init(IQFrameworkContainer container) { Container = container; mControllerNode.SendCommand <PackageManagerInitCommand>(); mRootLayout = EasyIMGUI.Vertical(); EasyIMGUI.Label().Text(LocaleText.FrameworkPackages).FontSize(12).Parent(mRootLayout); var verticalLayout = new VerticalLayout("box").Parent(mRootLayout); var searchView = EasyIMGUI .Horizontal() .Box() .Parent(verticalLayout); searchView.AddChild(EasyIMGUI.Label().Text("搜索:") .FontBold() .FontSize(12) .Width(40)); searchView.AddChild( EasyIMGUI.TextField() .Height(20) .Self(search => { search.Content .Bind(key => { mControllerNode.SendCommand(new SearchCommand(key)); }) .AddTo(mDisposableList); }) ); EasyIMGUI.Toolbar() .Menus(new List <string>() { "all", PackageAccessRight.Public.ToString(), PackageAccessRight.Private.ToString() }) .Parent(verticalLayout) .Self(self => { self.IndexProperty.Bind(value => { PackageManagerState.AccessRightIndex.Value = value; mControllerNode.SendCommand(new SearchCommand(PackageManagerState.SearchKey.Value)); }).AddTo(mDisposableList); }); mCategoriesSelectorView = EasyIMGUI.Toolbar() .Parent(verticalLayout) .Self(self => { self.IndexProperty.Bind(value => { PackageManagerState.CategoryIndex.Value = value; mControllerNode.SendCommand(new SearchCommand(PackageManagerState.SearchKey.Value)); }).AddTo(mDisposableList); }); new PackageListHeaderView() .Parent(verticalLayout); var packageList = new VerticalLayout("box") .Parent(verticalLayout); mRepositoryList = EasyIMGUI.Scroll() .Height(600) .Parent(packageList); PackageManagerState.Categories.Bind(value => { Categories = value; }).AddTo(mDisposableList); PackageManagerState.PackageRepositories .Bind(list => { this.PackageRepositories = list; }).AddTo(mDisposableList); }