<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BaNg@taobao

    Just Do It!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      20 Posts :: -1 Stories :: 202 Comments :: 0 Trackbacks
    最近發現一個很怪的問題,GEF的PaletteGroup在3.3及以下都有border,而在3.4卻消失了,我覺得好像是GEF 3.4 PaletteViewer的開發者Hudson和Shah認為不可見的邊框更“友好”,可是好多人都不習慣了,覺得是bug了,在給gef newsgroup上一個人回答問題的時候順便把這個hack了一下,效果還不錯,哈哈!下面是步驟:

    1 定義一個HackedGroupEditPart:

    import org.eclipse.draw2d.ColorConstants;
    import org.eclipse.draw2d.Graphics;
    import org.eclipse.draw2d.IFigure;
    import org.eclipse.draw2d.MarginBorder;
    import org.eclipse.draw2d.geometry.Insets;
    import org.eclipse.draw2d.geometry.Rectangle;
    import org.eclipse.gef.internal.ui.palette.editparts.GroupEditPart;
    import org.eclipse.gef.palette.PaletteContainer;
    import org.eclipse.jface.action.Separator;

    public class HackedGroupEditPart extends GroupEditPart {

        
    public HackedGroupEditPart(PaletteContainer group) {
            
    super(group);
        }
        @Override
        
    protected void refreshVisuals() {
            
    super.refreshVisuals();
            Insets insets 
    = getContentPane().getBorder().getInsets(getContentPane());
            getContentPane().setBorder(
    new MarginBorder(insets){
                @Override
                
    public void paint(IFigure figure, Graphics graphics, Insets insets) {
                    Rectangle r 
    = getPaintRectangle(figure, insets);
                    r.height
    --;
                    graphics.setForegroundColor(ColorConstants.buttonDarker);
                    graphics.drawLine(r.x, r.bottom(), r.right(), r.bottom());
                }
            });
        }
        
    }

    2 使用這個加了邊框的GroupEditPart,在編輯器定義里面重寫 createPaletteViewerProvider 方法,如下:

    public class LivingEditor extends GraphicalEditorWithFlyoutPalette {
    .
    .
    @Override
    protected PaletteViewerProvider createPaletteViewerProvider() {
            
    return new PaletteViewerProvider(getEditDomain())
            {
                @Override
                
    public PaletteViewer createPaletteViewer(Composite parent) {
                    
                    
    //add border for GroupEditPart
                    final PaletteEditPartFactory pepf = new PaletteEditPartFactory()
                    {
                        @Override
                        
    protected EditPart createGroupEditPart(
                                EditPart parentEditPart, Object model) {
                            
    return new HackedGroupEditPart((PaletteContainer)model);
                        }
                    };
                    PaletteViewer pViewer 
    = new PaletteViewer(){
                        {
                            setEditPartFactory(pepf);
                        }
                    };
                    pViewer.createControl(parent);
                    configurePaletteViewer(pViewer);
                    hookPaletteViewer(pViewer);
                    
    return pViewer;
                }
            };
        }


    }

    我的Palette定義,使用了三個PaletteGroup,但不改一下根本看不出來group之間的分隔

    public class PaletteProvider {

        
    public static PaletteRoot provide(LivingEditor livingEditor) {
            PaletteRoot root 
    = new PaletteRoot();
            createStandardTool(root);
            createConnectionTool(root);
            createModelTool(root);
            
    return root;
        }

        
    private static void createModelTool(PaletteRoot root) {
            PaletteGroup model_group 
    = new PaletteGroup("model");
            CombinedTemplateCreationEntry person_entry 
    = new CombinedTemplateCreationEntry("Person",
                    
    "Create a person",
                    
    new SimpleFactory(Person.class),
                    Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
    "icon/person16.png"),
                    Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
    "icon/person24.png")
                    );
            model_group.add(person_entry);
            CombinedTemplateCreationEntry dog_entry 
    = new CombinedTemplateCreationEntry("Dog",
                    
    "Create a dog",
                    
    new SimpleFactory(Dog.class),
                    Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
    "icon/dog16.gif"),
                    Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
    "icon/dog24.gif"));
            model_group.add(dog_entry);
            root.add(model_group);
        }

        
    private static void createConnectionTool(PaletteRoot root) {
            ConnectionCreationToolEntry relation 
    = new ConnectionCreationToolEntry("relation",
                    
    "relation between person and dog",
                    
    new SimpleFactory(Relation.class),
                    Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
    "icon/connection16.gif"),
                    Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
    "icon/connection24.gif")
                    );
            PaletteGroup conn_group 
    = new PaletteGroup("relations");
            conn_group.add(relation);
            root.add(conn_group);
            
        }

        
    private static void createStandardTool(PaletteRoot root) {
            PaletteGroup std 
    = new PaletteGroup("Standard");
            SelectionToolEntry selection 
    = new SelectionToolEntry();
            std.add(selection);
            
            root.add(std);
        }

    可以看一下修改后的對比:



    不過這種方法使用了internal API,不適應版本更新,只適合救急。我已經報告了這個誤會,3.5應該不會有了。

    如果你也有這個困擾,就試試吧。



    posted on 2008-08-17 22:40 Always BaNg. 閱讀(1872) 評論(0)  編輯  收藏 所屬分類: JavaEclipse源代碼分析
    主站蜘蛛池模板: 韩国免费a级作爱片无码| 久99久无码精品视频免费播放| 国产精品免费无遮挡无码永久视频| 亚洲精品无码永久在线观看 | 日韩免费福利视频| 日本亚洲免费无线码| 久久久久国色AV免费观看性色| 亚洲欧洲另类春色校园小说| 真实国产乱子伦精品免费| 亚洲宅男永久在线| 国产四虎免费精品视频| 亚洲视频网站在线观看| 在线天堂免费观看.WWW| 亚洲综合激情五月丁香六月| 成人免费无遮挡无码黄漫视频| 亚洲国产aⅴ成人精品无吗| 国产免费变态视频网址网站| 日本一区二区在线免费观看| 久久精品国产亚洲Aⅴ香蕉 | 亚洲精品国产成人中文| 国国内清清草原免费视频99| 亚洲欧美成aⅴ人在线观看| 啊v在线免费观看| a级成人免费毛片完整版| 国产精品亚洲四区在线观看| 一二三四免费观看在线视频中文版| 亚洲另类自拍丝袜第五页| 男人的天堂亚洲一区二区三区| 久久久久亚洲国产AV麻豆| 91麻豆精品国产自产在线观看亚洲 | 222www免费视频| 亚洲精品无码久久久久久| 亚洲免费一区二区| 久久永久免费人妻精品下载| 香蕉大伊亚洲人在线观看| 亚洲国产精品综合久久一线| 亚洲电影免费在线观看| 亚洲精品色播一区二区| 亚洲综合伊人久久大杳蕉| 午夜性色一区二区三区免费不卡视频| 国产精品亚洲专区无码不卡|