最近做了一个任务,要求把一个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)。 >如果您不喜欢生成的颜色,请用...
随机彩色调色板生成器v.3 它是一个随机调色板生成器v.3,可使用其十六进制代码生成随机颜色。 它还具有锁定您不希望刷新的喜欢的颜色的功能。 用户还可以按“全部”,“锁定”和“未锁定”颜色对颜色进行排序。
锁定您喜欢的颜色并刷新为新的颜色。 如果您喜欢一种颜色,只需单击它即可将十六进制代码复制到剪贴板,然后将其粘贴到您喜欢的任何位置。 :)功能:>选择一次要查看的颜色数(2-6)。 >如果您不喜欢生成的颜色...
单击“刷新”按钮以生成新的调色板。您还可以更改单个颜色条带。继续变化,直到找到完美的匹配。得到了你的正确匹配!是时候在项目中使用它,只需点击十六进制代码将其复制到剪贴板。这很容易。我们还有两个手绘颜色...
欢迎使用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 的自定义...
Windows位图(Bitmap)和调色板(Palette) 普通的显示器屏幕是由许许多多的点构成的,我们称之为像素。显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个像素着色,然后从上到下这样扫描若干行,就扫过了...
RecycleView 使用 ItemTouchHelper 实现拖拽移动到不同的列表,下拉刷新,上拉到底自动加载等; 使用 Palette 从图片中取色; 主题动态切换; Android 4.4 及以上版本的状态栏适配; FloatingActionButton 的自定义...
转载预览Acrou:特色 :crown: 页面级缓存,浏览器前进后退不刷新秒加载(mac用户使用触控板体验更佳) :card_index_dividers: 多盘切换 :locked_with_key: Http Basic Auth :artist_palette: 网格视图模式(文件预览...
:high_voltage: 页面刷新更快 :last_quarter_moon: 暗模式感知 :artist_palette: 主题感知UI :lady_beetle: 内置devtools支持 :electric_plug: 可扩展的动作 :desktop_computer: 在系统浏览器中重新打开 :...
Lite Browse Lite-VS Code中的嵌入式浏览器Browse Lite VS Code中的嵌入式浏览器从Kenneth Auchenberg的浏览器预览中派生更快的页面刷新:last_quarter_moon:暗模式识别:artist_palette:主题感知UI:lady_beetle:内置...
节点红色贡献数据视图Node-RED 节点使用 Node-RED 流编辑器内的...安装要么使用 Editor - Menu - Manage Palette - Install 选项,要么在 Node-RED 用户目录(通常是~/.node-red )中运行以下 npm 命令: npm i node-re
AutoRedraw是否自动刷新或重画窗体上所有图形[获得或设置从绘图(graphics)方法到一个持久性位图的输出],取值为:True False BackColor背景颜色,可从弹出的调色板选择。 BorderStyle设置边界类型,取值为: 0 None...
列表 纵向Table里嵌套横向Table 列表(Table)Cell Flip Segue 列表(Table)之DynamicHeights 列表(Table)之Expansion Table 列表(Table)之Horizontal table 列表(Table)之Pull Up To Refresh 列表(Table)...