2312d,d亚当小图界的思考

2023-12-13 16:12
文章标签 思考 亚当 2312d 小图界

本文主要是介绍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亚当小图界的思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489090

相关文章

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理

Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

go 和 java 技术选型思考

背景:       go和java我这边自身都在使用,感受比较深,java使用了有7年多,go也就是今年开始的,公司需要所以就学了使用,发现这两个语言都很好,需要根据场景选择,我写下我这边的看法。 关于go和java语言层面和特性就不说了,网上都有,我这边从我这边实际使用的场景情况来说,供大家参考。 给我最大的感受,php转go的不少,也是符合未来技术大趋势的,目前来看,java转go也比较

思考自己写博客的意义

感想 从今年2月份开始,我就要求自己以每周4篇的速度写博客。然而问题是:每周的空闲时间是不稳定的,这导致我没法保证花费相同的时间去输出稳定质量的博客。当时间不够时,我将面临选择:是减少数量来保证稳定的质量,还是降低质量来保证稳定的数量? 我选择的是——牺牲质量。因为,相比于“质量”,“数量”是准确可见的。我担心:一旦有一次没能完成目标数量,便会出现“破窗效应”,让我潜意识里再也不认同“目标”了

是时候重新思考你的Google广告策略了吗?

以产品为中心、仅以关键词为焦点的广告活动是 谷歌广告中常见的一种活动类型。 如果你销售复古女式T恤,你可能会设置基于“复古女式T恤”关键词的独立关键词广告活动。 对于许多B2C零售商来说,这种方法效果不错。但是,对于其他一些商家来说,基于产品和关键词的广告活动并不一定是最好的策略。 比如说,我们接手了一个新的B2B客户的谷歌广告账户,其所有广告活动都是以产品为中心、仅关注关键词的广告活动。

【编程底层思考】如何检测和避免线程死锁

一、什么是线程死锁? 线程死锁发生在多个线程因为争夺资源而相互阻塞,导致程序无法正常结束的情况。例如,线程A持有资源2并等待资源1,线程B持有资源1并等待资源2,这样就形成了死锁。 二、如何检测死锁? 使用jmap、jstack等命令行工具查看JVM的线程栈和堆内存情况,jstack可以显示死锁信息。使用VisualVM、JConsole等图形化工具进行排查。例如,JConsole可以连接到

【个人思考】 Java为什么解释执行时不直接解释源码?

起因 最近学习JVM,产生一个问题:Java为什么解释执行时不直接解释源码? 众所周知,Java 字节码是跨平台的,因此 Java 才能一次编译处处运行。但是,Java 源码本身也是跨平台的啊,为什么不可以省略编译为字节码这一步,直接将源码运行在虚拟机上?如果是效率问题,可不可以在设计 Java 语言的时候解决? 对于此问题,大部分回答诸如:“采用字节码的好处主要包括跨平台性、安全性、性

使用卫星仿真软件STK的一些应用和思考(星地链路、星间链路)

目录 任务描述利用STK建模星地协同系统3个GEO高轨卫星240/20/1 Walker-Star Constellation 低轨卫星星座地面站或者地面设备 链路建模与数据提取处理星地链路星间链路数据读取的几种方法最麻烦的方法使用Matlab与STK互联接口使用大规模使用Chain 总结 任务描述 在一个星地协同的空天地网络中,科研中可能需要建模星地链路以及星间链路,主要受