package com.vaadin.tests.tooltip; import java.util.Iterator; import com.vaadin.event.Transferable; import com.vaadin.event.TransferableImpl; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.DropTarget; import com.vaadin.event.dd.TargetDetails; import com.vaadin.event.dd.acceptcriteria.AcceptAll; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.util.TestUtils; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; import com.vaadin.ui.DragAndDropWrapper; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; public class DragAndDropWrapperTooltips extends AbstractTestUI { private final String BASE = ".v-widget.greenblock {vertical-align: middle; float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;color: white;}"; private final String B2 = ".v-widget.b2 {background-color: red !important;}"; private final String B3 = ".v-widget.b3 {background-color: yellow !important;color: black;}"; private final String B4 = ".v-widget.b4 {background-color: blue !important;}"; private final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}"; private DragAndDropWrapper dragAndDropWrapper; @Override protected void setup(VaadinRequest request) { TestUtils.injectCSS(this, BASE + B4 + B2 + B3 + HIDEDRAGSOURCE); VerticalLayout l = new VerticalLayout(); l.setWidth("400px"); l.setHeight("100px"); dragAndDropWrapper = new DragAndDropWrapper(cssLayout); dragAndDropWrapper.setDescription( "Tooltip for the wrapper wrapping all the draggable layouts"); dragAndDropWrapper.setSizeFull(); l.addComponent(dragAndDropWrapper); addComponent(l); for (int i = 1; i <= 4; i++) { WrappedLabel wl = new WrappedLabel("Block"); wl.setId("wrapper" + i); wl.addStyleName("b" + i); cssLayout.addComponent(wl); } getTooltipConfiguration().setOpenDelay(300); } int count; private CssLayout cssLayout = new CssLayout() { }; class WrappedLabel extends DragAndDropWrapper { private static final long serialVersionUID = 1L; public WrappedLabel(String content) { super(new Label(content + " " + ++count)); getCompositionRoot().setSizeUndefined(); setHeight("60px"); // FIXME custom component seems to be broken: // can't set height with css only setWidth("60px"); setDragStartMode(DragStartMode.WRAPPER); addStyleName("greenblock"); } @Override public DropHandler getDropHandler() { return dh; } } private DropHandler dh = new DropHandler() { @Override public AcceptCriterion getAcceptCriterion() { return AcceptAll.get(); } @Override public void drop(DragAndDropEvent dropEvent) { Transferable transferable = dropEvent.getTransferable(); if (transferable instanceof TransferableImpl) { TransferableImpl ct = (TransferableImpl) transferable; Component sourceComponent = ct.getSourceComponent(); if (sourceComponent instanceof WrappedLabel) { int index = 1; Iterator componentIterator = cssLayout .getComponentIterator(); Component next = componentIterator.next(); TargetDetails dropTargetData = dropEvent.getTargetDetails(); DropTarget target = dropTargetData.getTarget(); while (next != target) { if (next != sourceComponent) { index++; } next = componentIterator.next(); } if (dropTargetData.getData("horizontalLocation") .equals("LEFT")) { index--; if (index < 0) { index = 0; } } cssLayout.removeComponent(sourceComponent); cssLayout.addComponent(sourceComponent, index); dragAndDropWrapper.setDescription( "Drag was performed and tooltip was changed"); } } } }; @Override protected String getTestDescription() { return "A tooltip should be shown when hovering the DragAndDropWrapper containing all the draggable layouts"; } @Override protected Integer getTicketNumber() { return 7708; } } a> 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
/*
 * Copyright 2011 gitblit.com.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.gitblit.client;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import com.gitblit.models.ServerSettings;
import com.gitblit.models.SettingModel;

/**
 * Table model of Map<String, SettingModel>.
 *
 * @author James Moger
 *
 */
public class SettingsTableModel extends AbstractTableModel {

	private static final long serialVersionUID = 1L;

	ServerSettings settings;

	List<String> keys;

	enum Columns {
		Name, Value, Since;

		@Override
		public String toString() {
			return name().replace('_', ' ');
		}
	}

	public SettingsTableModel() {
		this(null);
	}

	public SettingsTableModel(ServerSettings settings) {
		setSettings(settings);
	}

	public void setSettings(ServerSettings settings) {
		this.settings = settings;
		if (settings == null) {
			keys = new ArrayList<String>();
		} else {
			keys = new ArrayList<String>(settings.getKeys());
			Collections.sort(keys);
		}
	}

	@Override
	public int getRowCount() {
		return keys.size();
	}

	@Override
	public int getColumnCount() {
		return Columns.values().length;
	}

	@Override
	public String getColumnName(int column) {
		Columns col = Columns.values()[column];
		switch (col) {
		case Name:
			return Translation.get("gb.name");
		case Since:
			return Translation.get("gb.since");
		}
		return "";
	}

	/**
	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
	 *
	 * @param columnIndex
	 *            the column being queried
	 * @return the Object.class
	 */
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		if (Columns.Value.ordinal() == columnIndex) {
			return SettingModel.class;
		}
		return String.class;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		String key = keys.get(rowIndex);
		SettingModel setting = settings.get(key);
		Columns col = Columns.values()[columnIndex];
		switch (col) {
		case Name:
			return key;
		case Value:
			return setting;
		case Since:
			return setting.since;
		}
		return null;
	}

	public SettingModel get(int modelRow) {
		String key = keys.get(modelRow);
		return settings.get(key);
	}
}