1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/******************************************************************************* 2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc. 3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials 4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0 5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at 6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html 7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors: 9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Google, Inc. - initial API and implementation 10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/ 11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.model.property.editor; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.DesignerPlugin; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.Property; 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.table.PropertyTable; 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.ui.DrawUtils; 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.GC; 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.Image; 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.Point; 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * The {@link PropertyEditor} for <code>Boolean</code>. 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property.editor 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic final class BooleanObjectPropertyEditor extends PropertyEditor { 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static final Image m_nullImage = DesignerPlugin.getImage("properties/BooleanNull.png"); 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static final Image m_trueImage = DesignerPlugin.getImage("properties/true.png"); 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static final Image m_falseImage = DesignerPlugin.getImage("properties/false.png"); 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Instance 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static final PropertyEditor INSTANCE = new BooleanObjectPropertyEditor(); 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private BooleanObjectPropertyEditor() { 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Presentation 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception { 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object value = property.getValue(); 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value instanceof Boolean) { 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye boolean booleanValue = ((Boolean) value).booleanValue(); 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Image image = booleanValue ? m_trueImage : m_falseImage; 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye String text = Boolean.toString(booleanValue); 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye paint(gc, x, y, width, height, text, image); 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value == null) { 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Image image = m_nullImage; 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye String text = "null"; 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye paint(gc, x, y, width, height, text, image); 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private void paint(GC gc, int x, int y, int width, int height, String text, Image image) { 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // draw image 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye DrawUtils.drawImageCV(gc, image, x, y, height); 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // prepare new position/width 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int imageWidth = image.getBounds().width + 2; 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye x += imageWidth; 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye width -= imageWidth; 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // draw text 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye DrawUtils.drawStringCV(gc, text, x, y, width, height); 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Editing 81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public boolean activate(PropertyTable propertyTable, Property property, Point location) 85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye throws Exception { 86765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // check that user clicked on image 87765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (location == null || location.x < m_trueImage.getBounds().width + 2) { 88765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye invertValue(property); 89765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 90765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // don't activate 91765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return false; 92765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 93765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 94765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 95765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void doubleClick(Property property, Point location) throws Exception { 96765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye invertValue(property); 97765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 98765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 99765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 100765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Inverts the value of given boolean {@link Property}. 101765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 102765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private void invertValue(Property property) throws Exception { 103765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object value = property.getValue(); 104765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // null 105765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value == null) { 106765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye property.setValue(true); 107765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 108765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 109765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // boolean 110765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value instanceof Boolean) { 111765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye boolean booleanValue = ((Boolean) value).booleanValue(); 112765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye property.setValue(!booleanValue); 113765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 114765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 115765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // unknown 116765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye property.setValue(true); 117765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 118765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye}