最近做了一个任务,要求把一个grahpical editor里的palette里的内容重新刷新一下,要求是在不关闭editor里前提之下。
一开始还在怀疑这个能否实现不,不过后来看了看代码,发现这是完全可行的,且看我细细道来:
先看GraphicalEditorWithFlyoutPalette里的splitter这个成员,它把整个editor分成了两个部分一个就是大的用于GEF画图的那部份;另外一部分很明显就是palette啦!说这么多,看看它的createControl方法就全明白啦:
其中的setExternalviewer就是放的palette的viewer,说到viewer我的第一个联想就是SWT里的viewer其实不是这样的,这里的viewer其实与一个基于GEF的Graphcial Viewer;也就是说,我们在一个graphical editor里看到的palette是通过drawer2D画上去了,和我们平时GEF里的图形没什么两样。
再看这个getPaletteRoot方法它为palette viewer提供一个root,那这个root到底是什么呢?我们再继续往下看。沿着palette root的继承树往上找,最后发现了这个: 一看palette entry的文档就明白了,其实它就是 palette的模型。
当然如果它是GEF的模型,那么必然他就会有listeners一查代码,果真是这样的。
那么这个add listener方法被谁用呢?想都不用想了,肯定是被它的edit part 喽,MVC嘛~~~不信看PaletteEditPart.java的activate方法:
模型的修改必定会被通知到 edit part 里,它再根据具体的情况对viewer进行更新,见下:
明白了!?说了那么多其实只要一名句话啦:修改一下palette root里palette entry的内容GEF 就会自动的将palette里的表现更新了。在Dengues的项目里,我在GEFComponentEditor.java里加入以下方法,便可以了: /**
* Reset the content of the palette root will cause palette viewer be refreshed.
*
* yzhang Comment method "refreshPalette".
*/
public void refreshPalette() {
List<PaletteContainer> containers = new ArrayList<PaletteContainer>(root.getChildren());
for (PaletteContainer element : containers) {
if (element instanceof PaletteGroup) {
continue;
}
root.remove(element);
}
CompEditorPaletteFactory.create(factory, root);
}
关于这个方法是如何调用的,这就涉及到另外一个话题了,见《如何解决插件之间循环依赖的问题》。 K字好累。Han hanhan .....
分享到:
相关推荐
锁定您喜欢的颜色并刷新为新的颜色。 如果您喜欢一种颜色,只需单击它即可将十六进制代码复制到剪贴板,然后将其粘贴到您喜欢的任何位置。 :)功能:>选择一次要查看的颜色数(2-6)。 >如果您不喜欢生成的颜色,请用...
6. **清除所有绘制**:清除所有绘制的实现相对简单,只需清空当前的`Path`对象,并调用`invalidate()`刷新整个视图即可。 7. **优化性能**:为了提高性能,避免频繁的`onDraw()`调用,可以使用`Canvas.saveLayer()`...
随机彩色调色板生成器v.3 它是一个随机调色板生成器v.3,可使用其十六进制代码生成随机颜色。 它还具有锁定您不希望刷新的喜欢的颜色的功能。 用户还可以按“全部”,“锁定”和“未锁定”颜色对颜色进行排序。
锁定您喜欢的颜色并刷新为新的颜色。 如果您喜欢一种颜色,只需单击它即可将十六进制代码复制到剪贴板,然后将其粘贴到您喜欢的任何位置。 :)功能:>选择一次要查看的颜色数(2-6)。 >如果您不喜欢生成的颜色...
JavaScript允许开发者在用户与网页交互时实时更新内容,为在线白板应用提供了动态和交互性的基础。在White_Board中,JavaScript可能被用来处理用户的输入事件,如鼠标点击和移动,以及绘制和擦除线条等操作。 二、...
JavaScript是一种广泛应用于网页开发的脚本语言,它允许我们在不刷新页面的情况下动态更新内容,为用户提供更加交互式的体验。 首先,我们需要理解JavaScript的基本语法和事件处理。在本示例中,当用户点击调色板上...
单击“刷新”按钮以生成新的调色板。您还可以更改单个颜色条带。继续变化,直到找到完美的匹配。得到了你的正确匹配!是时候在项目中使用它,只需点击十六进制代码将其复制到剪贴板。这很容易。我们还有两个手绘颜色...
欢迎使用Infinite Palette,它是chrome浏览器和您的需要的扩展。 您可以在每次单击时生成唯一的调色板。 只需打开扩展名,哇! 有您独特的调色板。 对目前的组合不满意。 没问题,我们吸引了您! 单击刷新按钮以...
RecycleView 使用 ItemTouchHelper 实现拖拽移动到不同的列表,下拉刷新,上拉到底自动加载等; 使用 Palette 从图片中取色; 主题动态切换; Android 4.4 及以上版本的状态栏适配; FloatingActionButton 的自定义...
Chrome-cmd-调色板适用于常见Chrome任务的命令面板(la Sublime Text)扩展,用Elm编写开发$ npm install$ npm start 导航至chrome://extensions/ 点击LOAD UNPACKAGED,然后选择chrome-cmd-palette的克隆存储库位置...
RecycleView 使用 ItemTouchHelper 实现拖拽移动到不同的列表,下拉刷新,上拉到底自动加载等; 使用 Palette 从图片中取色; 主题动态切换; Android 4.4 及以上版本的状态栏适配; FloatingActionButton 的自定义...
Legend Palette 方法提供了图例面板的操作,如获取基本分组、获取图层、刷新等。 1. GetBaseGroups 方法:获取基本分组。 2. GetLayer 方法:获取图层。 3. GetLayers 方法:获取所有图层。 4. ...
总之,"pm-theme: :artist_palette: ProtonMail的简单主题(v3.16.x)"是一个为ProtonMail设计的用户界面美化方案,通过自定义CSS实现,旨在为用户提供个性化的视觉体验。用户可以通过理解和编辑主题的CSS代码,...
总结一下,Indy 10.6是Delphi 2007开发网络应用的重要工具,其安装过程包括解压、复制到Delphi组件目录、刷新IDE组件面板,以及验证组件是否显示在面板上。在实际开发中,开发者可以通过Indy的各种组件轻松实现各种...
4. 更新屏幕:调用 `Invalidate` 或 `Repaint` 方法来刷新屏幕,让新调色板生效。 在你提供的"8.20 调色板"源码中,可能包含了创建和应用自定义调色板的具体实现。源码可能会包括以下部分: - 创建 `TPalette` ...
在这个项目中,JavaScript被用来实现动态显示引言的功能。通过编程逻辑,它能随机选取存储的引言库中的一个条目,并将其展示在页面上。这种实时更新的特性为用户带来了新鲜感,每次刷新或点击都能带来新的启示。 ...
Windows位图(Bitmap)和调色板(Palette) 普通的显示器屏幕是由许许多多的点构成的,我们称之为像素。显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个像素着色,然后从上到下这样扫描若干行,就扫过了...
例如,在640×480分辨率、70Hz刷新率的设置下,意味着每秒需要扫描并显示70帧图像,每帧图像包含640×480个像素点。 #### 三、颜色表示与量化 **1.3 颜色的RGB表示与量化** - **RGB颜色模型**:自然界的几乎所有...
4. **内存DC(Device Context)**:为了提高性能,画图板可能使用内存DC来暂存用户绘制的内容,然后再一次性将内容刷新到屏幕。这种方式可以避免频繁的屏幕重绘操作,提高用户体验。 5. **颜色选择和调色板...
RecycleView 使用 ItemTouchHelper 实现拖拽移动到不同的列表,下拉刷新,上拉到底自动加载等; 使用 Palette 从图片中取色; 主题动态切换; Android 4.4 及以上版本的状态栏适配; FloatingActionButton 的自定义...