本文主要是介绍2312d,d亚当小图界的思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文
关于minigui
的随机想法
许多arsd
库更多的是关于机制
,而不是策略.我给你一堆积木和工具
,但由你自己选择如何组合
在一起.这很灵活,可让你决定要使用哪些库和哪些其他库
,但也更难使用和记录
;
没有直接的"只需要用它和它".
arsd.minigui
现在主要是类的集合
.你有一堆可用的部件
,它们即将达到良好
工作的地步.但是没有太多
关于把它们放在一起的教程
.
当你制作
自己的组件时,可覆盖
随机的一组方法
,可定义自己
的事件,但是,它仍是个随机集合
,不能保证会与其他人
很好合作.
为此,我想开始增加更多更高级的设施
,并鼓励人们总是一致
使用它们.我想可用它们来更好
地与其他程序互操作
.
选择操作
想法是扩展DataControllerWidget/dialog
函数,及从UDA
构建菜单的工具
,来取一些标准类型
或注解
参数来处理选择
.
在标准文本组件
中,可期望用户使用鼠标和/或键盘
选择文本.然后可剪切,复制,删除
此选择等,且一般可通过菜单选项
和工具栏按钮
如粗体或斜体
,来格式化它们.
甚至在全局选择
放置它,如X
的中键点击粘贴
系统.如果用户
想要实现与这些相同标准菜单选项
兼容的自定义组件
,该怎么办?
当然,自定义组件
用自定义菜单命令
来分发到适当的位置
,可实现相同功能
.但是,可让库为你完成它.考虑使用,任意组件都可设置
并触发行为的全局Variant currentSelection
.
然后如下定义你的菜单
:
@menu("Edit") void Copy(@currentSelection Variant what).
UDA
参数引用了@currentSelection
,因此自动菜单包装器和调用者
知道这是默认参数
(或,也许你可只使用默认参数
并反射它,但UDA
更容易,因为可比较
别名而不是值来识别
它).
这给它提供了足够信息
来理解某些语义
,因此可在选择为空
时禁止"复制"
菜单项(这样就会告诉用户
,需要选择
某些内容才能重新启用
它).
但是,如果需要,也可按API
的一部分,包括其他参数
,一起显式
调用它.
对像Copy
此类函数,指定需要选择
,可能有点多余,因为这是标准操作
,但各种其他用户定义控件
也可用相同模式
.
可以是Widget
,而不是Variant
的引用,或其他一些widget
可实现的接口,然后按需
提供选择数据
.与X剪切板
自身一样,你断定
选择,操作
想要处理它时,它会要求组件
通过内容协商,按指定格式
提供数据.
某些菜单项
也可只需要提交选择消息
到持有者组件
,命令
它,在自己的内部选择对象
上执行给定任务
.类似MacOS
菜单工作方式,或是窗口的WM_COMMAND
消息,只是Mac
的菜单更易反射
.
我喜欢内容协商
,D的重载
让它更容易.
还不确定我完成如何,但绝对想要一些可反射
工作的东西.
绑定数据和命名参数
我编写了该小示例
,用D来定义布局
,并使用较新的命名参数功能
:
import arsd.minigui;
alias WidgetBuilder = Widget
auto 窗口(T...)(T t) {auto 窗口 = new 窗口;foreach(child; t) {child(窗口);}return 窗口;
}
auto horizontalLayout(T...)(T t) {return (Widget parent) {auto layout = new HorizontalLayout(parent);foreach(child; t) {child(layout);}return layout;};
}
auto button(string label, void delegate() onClick = null) {return (Widget parent) {auto btn = new Button(label, parent);if(onClick)btn.addEventListener((ClickEvent ce) {onClick();});return btn;};
}
void main() {auto w = 窗口(horizontalLayout(button(label: "Click Me", onClick: delegate () { messageBox("hello!"); }),button(label: "Or Me", onClick: delegate () { messageBox("bye."); }),),button(label: "And me"));w.loop();
}
minigui
已有个可在组件和应用
间双向绑定
,并可按有一定程度的用户定义布局
来分解结构
的数据控件组件
.但是,它禁止根据数据状态
更改组件自身
.
这不好:更改组件自身
与仅更改组件
上的某些属性
是完全不同的.ReactJS
简直太糟糕了,这不好,导致越来越复杂.
我不想克隆它,但是如果只是一些想法
呢?
D有__FILE__
和__LINE__
,可按默认参数
把它们传递给模板
,以帮助定位指定的函数调用
.也许,可缓存
控件自身,再添加已更改属性
.
可由更改
跟踪器触发这些段
,与我在数据控件
组件中的一些opDispatch
,来运行时
转发数据.
或可按函数参数
让值函数
静态声明数据依赖
.同样,通过一些反射
,来连接
变更事件.
不确定是否要根据动态条件
更新,但对测试,更明确了状态
要求.
这篇关于2312d,d亚当小图界的思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!