mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 00:45:28 +02:00
Bug 373138: Add new text-selection visualizer example.
- visualizer/org.eclipse.cdt.visualizer.ui - src/org/eclipse/cdt/visualizer/ui/util/ScrollPanel.java - add ScrollPanel UI class - visualizer/org.eclipse.cdt.visualizer.examples - src/org/eclipse/cdt/visualizer/examples/ - VisualizerExamplesPlugin.java - add UIResourceManager instance to plugin - src/org/eclipse/cdt/visualizer/examples/sourcegraph/ - SourceGraphVisualizer.java - visualizer implementation - SourceGraphControl.java - graphic visualization control (displayed in ScrollPanel by SourceGraphVisualizer) - plugin.xml - add extension point declaration for new visualizer example - resources/messages.properties - add string resource file - .classpath - add "resources/" directory as a source path - META-INF/MANIFEST.MF - add a couple plugin dependencies
This commit is contained in:
parent
2fb4b4feef
commit
38289ccdd0
8 changed files with 574 additions and 2 deletions
|
@ -3,5 +3,6 @@
|
|||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="resources"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
|
@ -7,8 +7,10 @@ Bundle-Activator: org.eclipse.cdt.visualizer.examples.VisualizerExamplesPlugin
|
|||
Bundle-Vendor: %provider.name
|
||||
Require-Bundle: org.eclipse.ui,
|
||||
org.eclipse.core.runtime,
|
||||
org.eclipse.core.resources,
|
||||
org.eclipse.jface.text,
|
||||
org.eclipse.cdt.visualizer.ui,
|
||||
org.eclipse.core.resources
|
||||
org.eclipse.cdt.visualizer.core
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Export-Package: org.eclipse.cdt.visualizer.examples,
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
class="org.eclipse.cdt.visualizer.examples.problemvisualizer.ProblemVisualizer"
|
||||
id="org.eclipse.cdt.visualizer.examples.ProblemVisualizer">
|
||||
</visualizer>
|
||||
<visualizer
|
||||
class="org.eclipse.cdt.visualizer.examples.sourcegraph.SourceGraphVisualizer"
|
||||
id="org.eclipse.cdt.visualizer.examples.sourcegraph">
|
||||
</visualizer>
|
||||
</extension>
|
||||
|
||||
</plugin>
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# =============================================================================
|
||||
# Copyright (c) 2012 Tilera Corporation and others.
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are made available under the terms of the Eclipse Public License v1.0
|
||||
# which accompanies this distribution, and is available at
|
||||
# http://www.eclipse.org/legal/epl-v10.html
|
||||
#
|
||||
# Contributors:
|
||||
# William R. Swanson (Tilera Corporation)
|
||||
# =============================================================================
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Application string resources
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# SourceGraphVisualizer example
|
||||
SourceGraphVisualizer.name=source_graph
|
||||
SourceGraphVisualizer.displayName=Source Graph Visualizer
|
||||
SourceGraphVisualizer.description=Displays graphic representation of selected source text.
|
|
@ -6,10 +6,16 @@
|
|||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
* William R. Swanson (Tilera) - added resource manager
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.visualizer.examples;
|
||||
|
||||
import org.eclipse.cdt.visualizer.ui.plugin.CDTVisualizerUIPlugin;
|
||||
import org.eclipse.cdt.visualizer.ui.util.UIResourceManager;
|
||||
import org.eclipse.jface.resource.ImageDescriptor;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.ui.plugin.AbstractUIPlugin;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
||||
|
@ -24,6 +30,9 @@ public class VisualizerExamplesPlugin extends AbstractUIPlugin {
|
|||
// The shared instance
|
||||
private static VisualizerExamplesPlugin plugin;
|
||||
|
||||
/** Resource manager */
|
||||
protected static UIResourceManager s_resources = null;
|
||||
|
||||
/**
|
||||
* The constructor
|
||||
*/
|
||||
|
@ -38,6 +47,9 @@ public class VisualizerExamplesPlugin extends AbstractUIPlugin {
|
|||
public void start(BundleContext context) throws Exception {
|
||||
super.start(context);
|
||||
plugin = this;
|
||||
|
||||
// initialize resource management (strings, images, fonts, colors, etc.)
|
||||
getPluginResources();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -46,6 +58,9 @@ public class VisualizerExamplesPlugin extends AbstractUIPlugin {
|
|||
*/
|
||||
@Override
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
// clean up resource management
|
||||
cleanupPluginResources();
|
||||
|
||||
plugin = null;
|
||||
super.stop(context);
|
||||
}
|
||||
|
@ -59,4 +74,52 @@ public class VisualizerExamplesPlugin extends AbstractUIPlugin {
|
|||
return plugin;
|
||||
}
|
||||
|
||||
// --- resource management ---
|
||||
|
||||
/** Returns resource manager for this plugin */
|
||||
public UIResourceManager getPluginResources() {
|
||||
if (s_resources == null) {
|
||||
s_resources = new UIResourceManager(this);
|
||||
s_resources.setParentManager(CDTVisualizerUIPlugin.getResources());
|
||||
}
|
||||
|
||||
return s_resources;
|
||||
}
|
||||
|
||||
/** Releases resource manager for this plugin. */
|
||||
public void cleanupPluginResources() {
|
||||
s_resources.dispose();
|
||||
}
|
||||
|
||||
/** Convenience method for getting plugin resource manager */
|
||||
public static UIResourceManager getResources() {
|
||||
return getDefault().getPluginResources();
|
||||
}
|
||||
|
||||
/** Convenience method for looking up string resources */
|
||||
public static String getString(String key) {
|
||||
return getDefault().getPluginResources().getString(key);
|
||||
}
|
||||
/** Convenience method for looking up string resources */
|
||||
public static String getString(String key, Object... arguments) {
|
||||
return getDefault().getPluginResources().getString(key, arguments);
|
||||
}
|
||||
|
||||
/** Convenience method for looking up image resources */
|
||||
public static Image getImage(String key) {
|
||||
return getDefault().getPluginResources().getImage(key);
|
||||
}
|
||||
/** Convenience method for looking up image resources */
|
||||
public static ImageDescriptor getImageDescriptor(String key) {
|
||||
return getDefault().getPluginResources().getImageDescriptor(key);
|
||||
}
|
||||
|
||||
/** Convenience method for looking up font resources */
|
||||
public static Font getFont(String fontName, int height) {
|
||||
return getDefault().getPluginResources().getFont(fontName, height);
|
||||
}
|
||||
/** Convenience method for looking up font resources */
|
||||
public static Font getFont(String fontName, int height, int style) {
|
||||
return getDefault().getPluginResources().getFont(fontName, height, style);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2012 Tilera Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* William R. Swanson (Tilera Corporation)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.visualizer.examples.sourcegraph;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Hashtable;
|
||||
|
||||
import org.eclipse.cdt.visualizer.ui.canvas.BufferedCanvas;
|
||||
import org.eclipse.cdt.visualizer.ui.util.Colors;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// SourceGraphControl
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** Simple control that displays a graph based on a source text selection. */
|
||||
public class SourceGraphControl extends BufferedCanvas
|
||||
{
|
||||
// --- constants ---
|
||||
|
||||
/** Margin used in drawing graph and computing control height. */
|
||||
public static final int MARGIN = 10;
|
||||
|
||||
/** Line height used in drawing graph and computing control height. */
|
||||
public static final int LINE_HEIGHT = 20;
|
||||
|
||||
// --- members ---
|
||||
|
||||
/** Text we're currently displaying. */
|
||||
protected String m_sourceText = ""; //$NON-NLS-1$
|
||||
|
||||
/** Data structure used to hold character stats. */
|
||||
class CharStat
|
||||
implements Comparable<CharStat>
|
||||
{
|
||||
public String characters;
|
||||
public int count;
|
||||
public CharStat(String c) {
|
||||
characters = c;
|
||||
count = 0;
|
||||
}
|
||||
@Override
|
||||
public int compareTo(CharStat o) {
|
||||
int c1 = count;
|
||||
int c2 = o.count;
|
||||
int cmp = (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0;
|
||||
// we want to sort in descending order, so negate result
|
||||
return -cmp;
|
||||
};
|
||||
};
|
||||
|
||||
/** List of characters we discovered and their occurrences. */
|
||||
ArrayList<CharStat> m_characters;
|
||||
|
||||
|
||||
// --- constructors/destructors ---
|
||||
|
||||
/** Constructor. */
|
||||
public SourceGraphControl(Composite parent) {
|
||||
super(parent);
|
||||
m_characters = new ArrayList<CharStat>();
|
||||
}
|
||||
|
||||
/** Dispose method. */
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
||||
// --- accessors ---
|
||||
|
||||
/** Sets source text to graph. */
|
||||
public void setSourceText(String text)
|
||||
{
|
||||
processText(text);
|
||||
SourceGraphControl.this.update();
|
||||
}
|
||||
|
||||
|
||||
// --- text processing methods ---
|
||||
|
||||
/** Processes text into digested display form. */
|
||||
public void processText(String text)
|
||||
{
|
||||
if (text == null) text = ""; //$NON-NLS-1$
|
||||
m_sourceText = text;
|
||||
|
||||
// TODO: reuse the array/hashtable and stat objects
|
||||
|
||||
Hashtable<String, CharStat> characters =
|
||||
new Hashtable<String, CharStat>();
|
||||
|
||||
int len = m_sourceText.length();
|
||||
int fragment_length = 2;
|
||||
if (len >= fragment_length) {
|
||||
for (int i = 0; i<len-fragment_length+1; ++i) {
|
||||
String c = m_sourceText.substring(i,i+fragment_length);
|
||||
|
||||
// Don't bother with fragments containing spaces
|
||||
// and non-printing chars.
|
||||
boolean skip = false;
|
||||
for (int j=0; j<c.length(); ++j)
|
||||
{
|
||||
if (c.charAt(j) <= 32 || c.charAt(j) > 127) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (skip) continue;
|
||||
|
||||
CharStat cs = characters.get(c);
|
||||
if (cs == null) {
|
||||
cs = new CharStat(c);
|
||||
characters.put(c, cs);
|
||||
}
|
||||
++cs.count;
|
||||
}
|
||||
}
|
||||
|
||||
m_characters.clear();
|
||||
m_characters.addAll(characters.values());
|
||||
Collections.sort(m_characters);
|
||||
|
||||
characters.clear();
|
||||
|
||||
Rectangle bounds = getBounds();
|
||||
int height = MARGIN * 2 + m_characters.size() * LINE_HEIGHT;
|
||||
bounds.height = height;
|
||||
setBounds(bounds);
|
||||
|
||||
}
|
||||
|
||||
// --- painting methods ---
|
||||
|
||||
/** Invoked when canvas repaint event is raised.
|
||||
* Default implementation clears canvas to background color.
|
||||
*/
|
||||
@Override
|
||||
public void paintCanvas(GC gc) {
|
||||
gc.setBackground(Colors.BLACK);
|
||||
gc.setForeground(Colors.WHITE);
|
||||
|
||||
clearCanvas(gc);
|
||||
|
||||
int margin = MARGIN;
|
||||
int tw = 90;
|
||||
int tw2 = 45;
|
||||
int lh = LINE_HEIGHT;
|
||||
|
||||
int x = margin;
|
||||
int y = margin;
|
||||
|
||||
Rectangle area = getClientArea();
|
||||
int w = area.width - margin*2 - tw;
|
||||
|
||||
int maxcount = 0;
|
||||
for (CharStat cs : m_characters)
|
||||
{
|
||||
// We're sorted in descending order, so first element
|
||||
// that we draw will always have the largest count.
|
||||
if (maxcount == 0) maxcount = cs.count;
|
||||
|
||||
gc.drawText("[" + cs.characters + "]", x, y); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
gc.drawText("(" + cs.count + ")", x + tw2, y); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
double proportion = cs.count * 1.0 / maxcount;
|
||||
int bw = (int) Math.round(proportion * w);
|
||||
Color oldb = gc.getBackground();
|
||||
if (proportion > .70)
|
||||
gc.setBackground(Colors.GREEN);
|
||||
else if (proportion > .40)
|
||||
gc.setBackground(Colors.YELLOW);
|
||||
else
|
||||
gc.setBackground(Colors.RED);
|
||||
gc.fillRectangle(x + tw, y, bw, lh-5);
|
||||
gc.setBackground(oldb);
|
||||
|
||||
y += lh;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- update methods ---
|
||||
|
||||
/**
|
||||
* Refresh the control's content based on current data.
|
||||
*/
|
||||
public void refresh() {
|
||||
SourceGraphControl.this.update();
|
||||
}
|
||||
|
||||
// --- event handlers ---
|
||||
|
||||
/** Invoked when panel is resized. */
|
||||
@Override
|
||||
public void resized(Rectangle bounds) {
|
||||
refresh();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2012 Tilera Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* William R. Swanson (Tilera Corporation)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.visualizer.examples.sourcegraph;
|
||||
|
||||
import org.eclipse.cdt.visualizer.examples.VisualizerExamplesPlugin;
|
||||
import org.eclipse.cdt.visualizer.ui.Visualizer;
|
||||
import org.eclipse.cdt.visualizer.ui.util.Colors;
|
||||
import org.eclipse.cdt.visualizer.ui.util.ScrollPanel;
|
||||
import org.eclipse.cdt.visualizer.ui.util.SelectionManager;
|
||||
import org.eclipse.cdt.visualizer.ui.util.SelectionUtils;
|
||||
import org.eclipse.jface.action.IMenuManager;
|
||||
import org.eclipse.jface.action.IToolBarManager;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.text.TextSelection;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// SourceGraphVisualizer
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
public class SourceGraphVisualizer extends Visualizer
|
||||
{
|
||||
// --- constants ---
|
||||
|
||||
/** Eclipse ID for this view */
|
||||
public static final String ECLIPSE_ID = "org.eclipse.cdt.visualizer.examples.sourcegraph"; //$NON-NLS-1$
|
||||
|
||||
|
||||
// --- members ---
|
||||
|
||||
/** ScrollPanel container for visualizer control. */
|
||||
ScrollPanel m_scrollPanel = null;
|
||||
|
||||
/** visualizer control (downcast reference) */
|
||||
SourceGraphControl m_sourceGraphControl = null;
|
||||
|
||||
|
||||
// --- constructors/destructors ---
|
||||
|
||||
/** Constructor. */
|
||||
public SourceGraphVisualizer()
|
||||
{
|
||||
super(VisualizerExamplesPlugin.getString("SourceGraphVisualizer.name"), //$NON-NLS-1$
|
||||
VisualizerExamplesPlugin.getString("SourceGraphVisualizer.displayName"), //$NON-NLS-1$
|
||||
VisualizerExamplesPlugin.getString("SourceGraphVisualizer.description") //$NON-NLS-1$
|
||||
);
|
||||
}
|
||||
|
||||
/** Dispose method. */
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
||||
// --- control management ---
|
||||
|
||||
/** Creates and returns visualizer control on specified parent. */
|
||||
@Override
|
||||
public Control createControl(Composite parent)
|
||||
{
|
||||
if (m_sourceGraphControl == null) {
|
||||
|
||||
m_scrollPanel = new ScrollPanel(parent);
|
||||
m_scrollPanel.setBackground(Colors.BLACK);
|
||||
|
||||
m_sourceGraphControl = new SourceGraphControl(m_scrollPanel);
|
||||
m_scrollPanel.setContent(m_sourceGraphControl);
|
||||
|
||||
// source graph control sets its own height based on the graph size
|
||||
m_scrollPanel.setAutoResizeHeight(false);
|
||||
// auto-resize to fit scrollpanel width
|
||||
m_scrollPanel.setAutoResizeWidth(true);
|
||||
|
||||
setControl(m_scrollPanel);
|
||||
}
|
||||
return getControl();
|
||||
}
|
||||
|
||||
/** Invoked when visualizer control should be disposed. */
|
||||
@Override
|
||||
public void disposeControl()
|
||||
{
|
||||
if (m_sourceGraphControl != null) {
|
||||
setControl(null);
|
||||
m_sourceGraphControl.dispose();
|
||||
m_scrollPanel.dispose();
|
||||
m_sourceGraphControl = null;
|
||||
m_scrollPanel = null;
|
||||
}
|
||||
}
|
||||
|
||||
// --- visualizer events ---
|
||||
|
||||
@Override
|
||||
public void visualizerDeselected() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visualizerSelected() {
|
||||
}
|
||||
|
||||
|
||||
// --- update methods ---
|
||||
|
||||
/**
|
||||
* Refresh the visualizer display based on the existing data.
|
||||
*/
|
||||
public void refresh() {
|
||||
m_sourceGraphControl.refresh();
|
||||
}
|
||||
|
||||
// --- selection handling ---
|
||||
|
||||
/** Invoked when selection changes, to determine whether this
|
||||
* visualizer knows how to display the current selection.
|
||||
*/
|
||||
@Override
|
||||
public int handlesSelection(ISelection selection) {
|
||||
Object s = SelectionUtils.getSelectedObject(selection);
|
||||
if (s instanceof TextSelection) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Invoked when workbench selection changes and this visualizer
|
||||
* is selected to display it.
|
||||
*/
|
||||
@Override
|
||||
public void workbenchSelectionChanged(ISelection selection) {
|
||||
TextSelection s =
|
||||
(TextSelection) SelectionUtils.getSelectedObject(selection);
|
||||
String text = s.getText();
|
||||
m_sourceGraphControl.setSourceText(text);
|
||||
}
|
||||
|
||||
public SelectionManager getSelectionManager() {
|
||||
return m_selectionManager;
|
||||
}
|
||||
|
||||
|
||||
// --- menu/toolbar management ---
|
||||
|
||||
/** Invoked when visualizer is selected, to populate the toolbar. */
|
||||
@Override
|
||||
public void populateToolBar(IToolBarManager toolBarManager)
|
||||
{}
|
||||
|
||||
/** Invoked when visualizer is selected, to populate the toolbar's menu. */
|
||||
@Override
|
||||
public void populateMenu(IMenuManager menuManager)
|
||||
{}
|
||||
|
||||
|
||||
// --- context menu handling ---
|
||||
|
||||
/** Invoked when visualizer view's context menu is invoked, to populate it. */
|
||||
@Override
|
||||
public void populateContextMenu(IMenuManager menuManager)
|
||||
{}
|
||||
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 Tilera Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* William R. Swanson (Tilera Corporation)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.visualizer.ui.util;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.custom.ScrolledComposite;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ScrollPanel
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Container panel that adds scrollbar(s) to a content control.
|
||||
*/
|
||||
public class ScrollPanel extends ScrolledComposite
|
||||
{
|
||||
// --- constructors/destructors ---
|
||||
|
||||
/** Constructor. */
|
||||
public ScrollPanel(Composite parent)
|
||||
{
|
||||
this(parent, null, true, true);
|
||||
}
|
||||
|
||||
/** Constructor. */
|
||||
public ScrollPanel(Composite parent, boolean hscrollbar, boolean vscrollbar)
|
||||
{
|
||||
this(parent, null, hscrollbar, vscrollbar);
|
||||
}
|
||||
|
||||
/** Constructor. */
|
||||
public ScrollPanel(Composite parent, Control contentControl, boolean hscrollbar, boolean vscrollbar)
|
||||
{
|
||||
super(parent, ((hscrollbar) ? SWT.H_SCROLL : SWT.NONE) |
|
||||
((vscrollbar) ? SWT.V_SCROLL : SWT.NONE));
|
||||
initScrollPanel(contentControl, hscrollbar, vscrollbar);
|
||||
}
|
||||
|
||||
/** Dispose method. */
|
||||
public void dispose() {
|
||||
cleanupScrollPanel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/** Overridden to permit subclassing */
|
||||
protected void checkSubclass() {
|
||||
// do nothing -- superclass implementation throws a "Subclassing not allowed" exception
|
||||
}
|
||||
|
||||
|
||||
// --- init methods ---
|
||||
|
||||
/** Initializes control */
|
||||
protected void initScrollPanel(Control contentControl, boolean hscrollbar, boolean vscrollbar) {
|
||||
setMinSize(0,0);
|
||||
setShowFocusedControl(true);
|
||||
// If user doesn't want either scrollbar, we'll auto-size in that direction by default.
|
||||
setAutoResizeWidth(! hscrollbar);
|
||||
setAutoResizeHeight(! vscrollbar);
|
||||
if (contentControl != null) setContent(contentControl);
|
||||
}
|
||||
|
||||
/** Cleans up control */
|
||||
protected void cleanupScrollPanel() {
|
||||
}
|
||||
|
||||
|
||||
// --- methods ---
|
||||
|
||||
/** Sets whether ScrollPanel auto-resizes the width of its contained control
|
||||
* to match the size of the scrollpanel's content area, save when the control
|
||||
* is smaller than the minimum width. (This also implicitly disables/hides
|
||||
* the scrollbar when the control is auto-sized.)
|
||||
*/
|
||||
public void setAutoResizeWidth(boolean resizeWidth) {
|
||||
setExpandHorizontal(resizeWidth);
|
||||
}
|
||||
|
||||
/** Sets whether ScrollPanel auto-resizes the height of its contained control
|
||||
* to match the size of the scrollpanel's content area, save when the control
|
||||
* is smaller than the minimum width. (This also implicitly disables/hides
|
||||
* the scrollbar when the control is auto-sized.)
|
||||
*/
|
||||
public void setAutoResizeHeight(boolean resizeHeight) {
|
||||
setExpandVertical(resizeHeight);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue