<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. 閱讀(1860) 評論(0)  編輯  收藏 所屬分類: Java 、Eclipse 、源代碼分析
    主站蜘蛛池模板: 亚洲天天在线日亚洲洲精| 亚洲2022国产成人精品无码区| 亚洲人成在线免费观看| 97视频免费观看2区| 亚洲狠狠久久综合一区77777| 成人电影在线免费观看| 亚洲AV日韩AV永久无码免下载| 黄色免费在线网站| 亚洲黄色高清视频| 日本免费网站视频www区| 亚洲午夜成激人情在线影院| 美女网站免费福利视频| 亚洲国产区男人本色在线观看| 欧洲黑大粗无码免费| 亚洲精品无码久久久久牙蜜区| 国产精品深夜福利免费观看| 免费看一级毛片在线观看精品视频| 亚洲日本一区二区一本一道| a级毛片免费在线观看| 亚洲视频在线观看不卡| 成人爽A毛片免费看| 国产成人亚洲精品蜜芽影院| 亚洲午夜av影院| 日韩精品无码免费一区二区三区| 亚洲国产综合精品| 国产精品免费视频播放器| 波霸在线精品视频免费观看| 亚洲网站在线免费观看| 四虎免费在线观看| 你是我的城池营垒免费看 | 亚洲精品视频久久| 大地资源在线观看免费高清| 免费人成网站永久| 久久精品亚洲一区二区三区浴池| 女人18一级毛片免费观看| a级片免费在线观看| 亚洲国产精品成人久久久| 日本免费观看网站| 久久国产精品免费观看| 亚洲精华国产精华精华液网站| 色噜噜AV亚洲色一区二区|