Eclipse Plugin Dev
Dengues Studio 開源 用代碼說話
My Links
BlogJava
首頁
新隨筆
聯系
聚合
管理
Blog Stats
Posts - 3
Stories - 0
Comments - 7
Trackbacks - 0
News
Dengues Studio 是以項目為支撐的學習與實踐Eclipse插件開發的很好的開源項目,你有什么想法都可以通過這個項目表現出來。
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(1)
給我留言
查看公開留言
查看私人留言
我參與的團隊
Dengues工作室(0/0)
隨筆檔案
2007年11月 (1)
2007年10月 (2)
搜索
最新評論
1.?re: [DENGUES]怎樣生成一個Eclipse的update website。
學習了,很好,歡迎交流
http://surenpi.com
--suren
2.?re: [DENGUES]怎樣生成一個Eclipse的update website。
把這個工程下的所有文件直接拷到要發布的網頁服務器上,難道不是先把插件工程打包成jar包再放到網頁上嗎
--landi
3.?re: [DENGUES]如何解決插件之間的循環依賴問題
好貼,值得收藏
--zDevil(Dengues Studio)
4.?re: [DENGUES]如何解決插件之間的循環依賴問題
確實是經驗之精華,頂.
--jackgogogo
5.?re: [DENGUES]怎樣生成一個Eclipse的update website。
不錯哦
--歡樂豬
閱讀排行榜
1.?[DENGUES]怎樣生成一個Eclipse的update website。(1646)
2.?[DENGUES]如何解決插件之間的循環依賴問題(1639)
3.?[DENGUES]動態的刷新Palette里的內容(1333)
評論排行榜
1.?[DENGUES]怎樣生成一個Eclipse的update website。(5)
2.?[DENGUES]如何解決插件之間的循環依賴問題(2)
3.?[DENGUES]動態的刷新Palette里的內容(0)
[DENGUES]動態的刷新Palette里的內容
最近做了一個任務,要求把一個grahpical editor里的palette里的內容重新刷新一下,要求是在不關閉editor里前提之下。
一開始還在懷疑這個能否實現不,不過后來看了看代碼,發現這是完全可行的,且看我細細道來:
先看GraphicalEditorWithFlyoutPalette里的splitter這個成員,它把整個editor分成了兩個部分一個就是大的用于GEF畫圖的那部份;另外一部分很明顯就是palette啦!說這么多,看看它的createControl方法就全明白啦:
public
void
createPartControl(Composite parent)
{
splitter
=
new
FlyoutPaletteComposite(parent, SWT.NONE, getSite().getPage(),
getPaletteViewerProvider(), getPalettePreferences());
super
.createPartControl(splitter);
splitter.setGraphicalControl(getGraphicalControl());
if
(page
!=
null
)
{
splitter.setExternalViewer(page.getPaletteViewer());
page
=
null
;
}
}
其中的setExternalviewer就是放的palette的viewer,說到viewer我的第一個聯想就是SWT里的viewer其實不是這樣的,這里的viewer其實與一個基于GEF的Graphcial Viewer;也就是說,我們在一個graphical editor里看到的palette是通過drawer2D畫上去了,和我們平時GEF里的圖形沒什么兩樣。
/** */
/**
* Returns the PaletteRoot for the palette viewer.
*
@return
the palette root
*/
protected
abstract
PaletteRoot getPaletteRoot();
再看這個getPaletteRoot方法它為palette viewer提供一個root,那這個root到底是什么呢?我們再繼續往下看。沿著palette root的繼承樹往上找,最后發現了這個:
一看palette entry的文檔就明白了,其實它就是 palette的模型。
/** */
/**
* Root class (statically) for the palette model.
*
*
@author
Pratik Shah
*/
public
class
PaletteEntry
{
當然如果它是GEF的模型,那么必然他就會有listeners一查代碼,果真是這樣的。
/** */
/**
* A listener can only be added once. Adding it more than once will do nothing.
*
@param
listener the PropertyChangeListener that is to be notified of changes
*
@see
java.beans.PropertyChangeSupport#addPropertyChangeListener(
* java.beans.PropertyChangeListener)
*/
public
void
addPropertyChangeListener(PropertyChangeListener listener)
{
listeners.removePropertyChangeListener(listener);
listeners.addPropertyChangeListener(listener);
}
那么這個add listener方法被誰用呢?想都不用想了,肯定是被它的edit part 嘍,MVC嘛~~~不信看PaletteEditPart.java的activate方法:
/** */
/**
*
@see
org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate()
*/
public
void
activate()
{
super
.activate();
PaletteEntry model
=
(PaletteEntry)getModel();
model.addPropertyChangeListener(
this
);
traverseChildren(model,
true
);
}
模型的修改必定會被通知到 edit part 里,它再根據具體的情況對viewer進行更新,見下:
/** */
/**
*
@see
java.beans.PropertyChangeListener#propertyChange(PropertyChangeEvent)
*/
public
void
propertyChange(PropertyChangeEvent evt)
{
String property
=
evt.getPropertyName();
if
(property.equals(PaletteContainer.PROPERTY_CHILDREN))
{
traverseChildren((List)evt.getOldValue(),
false
);
refreshChildren();
traverseChildren((List)evt.getNewValue(),
true
);
}
else
if
(property.equals(PaletteEntry.PROPERTY_LABEL)
||
property.equals(PaletteEntry.PROPERTY_SMALL_ICON)
||
property.equals(PaletteEntry.PROPERTY_LARGE_ICON)
||
property.equals(PaletteEntry.PROPERTY_DESCRIPTION))
refreshVisuals();
}
明白了!?說了那么多其實只要一名句話啦:修改一下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 .....
posted on 2007-10-26 13:32
小張飛刀(Dengues Studio)
閱讀(1333)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © 小張飛刀(Dengues Studio)
主站蜘蛛池模板:
免费观看日本污污ww网站一区
|
亚洲永久网址在线观看
|
国内精品免费视频精选在线观看
|
亚洲黄片毛片在线观看
|
美女18毛片免费视频
|
国产在线a不卡免费视频
|
亚洲av色香蕉一区二区三区
|
四虎在线视频免费观看
|
亚洲精品乱码久久久久久蜜桃图片
|
国产精品午夜免费观看网站
|
精品国产亚洲男女在线线电影
|
男人j进入女人j内部免费网站
|
亚洲伊人久久大香线蕉苏妲己
|
最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影
|
免费萌白酱国产一区二区
|
羞羞网站免费观看
|
亚洲国产天堂久久久久久
|
72pao国产成视频永久免费
|
久久91亚洲人成电影网站
|
四虎影视在线影院在线观看免费视频
|
国产亚洲精品免费
|
久久久久久久亚洲精品
|
小日子的在线观看免费
|
激情综合亚洲色婷婷五月APP
|
麻豆国产VA免费精品高清在线
|
狼色精品人妻在线视频免费
|
永久亚洲成a人片777777
|
毛片免费全部播放无码
|
国产亚洲一卡2卡3卡4卡新区
|
国产精品V亚洲精品V日韩精品
|
性xxxxx大片免费视频
|
精品亚洲456在线播放
|
亚洲七七久久精品中文国产
|
日本在线免费观看
|
国产精品亚洲综合久久
|
AV在线播放日韩亚洲欧
|
114级毛片免费观看
|
国产精品亚洲а∨无码播放麻豆
|
一级特黄aaa大片免费看
|
久久精品国产亚洲AV电影
|
日本不卡免费新一二三区
|