summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/wicket/ExternalImage.java
blob: 34adb1ec7b9969462a0fec40acb75bfd028af347 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 * Copyright 2012 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.wicket;

import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.model.Model;

public class ExternalImage extends WebComponent {

	private static final long serialVersionUID = 1L;

	public ExternalImage(String id, String url) {
		super(id, new Model<String>(url));
	}

	@Override
	protected void onComponentTag(ComponentTag tag) {
		super.onComponentTag(tag);
		checkComponentTag(tag, "img");
		tag.put("src", getDefaultModelObjectAsString());
	}
}
S" 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.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Stroke; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.AbstractButton; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.plaf.basic.BasicButtonUI; /** * Closable tab control. */ public class ClosableTabComponent extends JPanel { private static final long serialVersionUID = 1L; private static final MouseListener BUTTON_MOUSE_LISTENER = new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { Component component = e.getComponent(); if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(true); } } @Override public void mouseExited(MouseEvent e) { Component component = e.getComponent(); if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(false); } } }; private final JTabbedPane pane; private final JLabel label; private final JButton button = new TabButton(); private final CloseTabListener closeListener; public interface CloseTabListener { void closeTab(Component c); } public ClosableTabComponent(String title, ImageIcon icon, JTabbedPane pane, CloseTabListener closeListener) { super(new FlowLayout(FlowLayout.LEFT, 0, 0)); this.closeListener = closeListener; if (pane == null) { throw new NullPointerException("TabbedPane is null"); } this.pane = pane; setOpaque(false); label = new JLabel(title); if (icon != null) { label.setIcon(icon); } add(label); label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); add(button); setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0)); } private class TabButton extends JButton implements ActionListener { private static final long serialVersionUID = 1L; public TabButton() { int size = 17; setPreferredSize(new Dimension(size, size)); setToolTipText("Close"); setUI(new BasicButtonUI()); setContentAreaFilled(false); setFocusable(false); setBorder(BorderFactory.createEtchedBorder()); setBorderPainted(false); addMouseListener(BUTTON_MOUSE_LISTENER); setRolloverEnabled(true); addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { int i = pane.indexOfTabComponent(ClosableTabComponent.this); Component c = pane.getComponentAt(i); if (i != -1) { pane.remove(i); } if (closeListener != null) { closeListener.closeTab(c); } } @Override public void updateUI() { } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; Stroke stroke = g2.getStroke(); g2.setStroke(new BasicStroke(2)); g.setColor(Color.BLACK); if (getModel().isRollover()) { Color highlight = new Color(0, 51, 153); g.setColor(highlight); } int delta = 5; g.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1); g.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1); g2.setStroke(stroke); int i = pane.indexOfTabComponent(ClosableTabComponent.this); pane.setTitleAt(i, label.getText()); } } }