/******************************************************************************* * Copyright (c) 2006-2011 Gluster, Inc. <http://www.gluster.com> * This file is part of Gluster Management Console. * * Gluster Management Console is free software; you can redistribute * it and/or modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * Gluster Management Console is distributed in the hope that it * will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see * <http://www.gnu.org/licenses/>. *******************************************************************************/ package org.gluster.storage.management.console.views.pages; import java.util.List; import org.eclipse.jface.layout.TreeColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.gluster.storage.management.console.GlusterDataModelManager; import org.gluster.storage.management.console.utils.GUIHelper; import org.gluster.storage.management.core.model.ClusterListener; import org.gluster.storage.management.core.model.Disk; public abstract class AbstractTableTreeViewerPage<T> extends Composite implements ISelectionListener { protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); protected TreeViewer treeViewer; protected GUIHelper guiHelper = GUIHelper.getInstance(); protected Composite parent; protected IWorkbenchSite site; private ClusterListener clusterListener; private Text filterText; private void setupPageLayout() { final GridLayout layout = new GridLayout(1, false); layout.verticalSpacing = 10; layout.marginTop = 10; setLayout(layout); } private Composite createTreeViewerComposite() { Composite tableViewerComposite = new Composite(this, SWT.NO); tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridData layoutData = new GridData(); layoutData.horizontalSpan=5; layoutData.grabExcessHorizontalSpace = true; layoutData.horizontalAlignment = SWT.FILL; layoutData.verticalAlignment = SWT.FILL; layoutData.grabExcessVerticalSpace = true; tableViewerComposite.setLayoutData(layoutData); return tableViewerComposite; } public AbstractTableTreeViewerPage(IWorkbenchSite site, final Composite parent, int style, boolean useChechboxes, boolean multiSelection, List<Disk> allDisks) { super(parent, style); setupPageLayout(); //new FormToolkit(Display.getCurrent()).createButton(this, "test1", SWT.PUSH); this.parent = parent; this.site = site; toolkit.adapt(this); toolkit.paintBordersFor(this); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); parent.setLayoutData(data); filterText = guiHelper.createFilterText(toolkit, this); Composite tableViewerComposite = createTreeViewerComposite(); createTreeViewer(allDisks, tableViewerComposite); parent.layout(); // Important - this actually paints the table createListeners(parent); } private void createListeners(final Composite parent) { /** * Ideally not required. However the table viewer is not getting laid out properly on performing * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window */ addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent e) { parent.layout(); } }); clusterListener = createClusterListener(); GlusterDataModelManager.getInstance().addClusterListener(clusterListener); addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); } }); } protected abstract ClusterListener createClusterListener(); protected abstract IBaseLabelProvider getLabelProvider(); protected abstract IContentProvider getContentProvider(); private void createTreeViewer(List<Disk> allDisks, Composite tableViewerComposite) { treeViewer = new TreeViewer(tableViewerComposite); treeViewer.getTree().setHeaderVisible(true); treeViewer.getTree().setLinesVisible(true); TreeColumnLayout ad = new TreeColumnLayout(); tableViewerComposite.setLayout(ad); TreeColumn column = new TreeColumn(treeViewer.getTree(),SWT.NONE); column.setWidth(100); column.setText("Disk"); ad.setColumnData(column, new ColumnWeightData(50, 100)); column = new TreeColumn(treeViewer.getTree(),SWT.NONE); column.setWidth(100); column.setText("Partition"); ad.setColumnData(column,new ColumnWeightData(50, 100)); column = new TreeColumn(treeViewer.getTree(),SWT.NONE); column.setWidth(100); column.setText("Free Space (GB)"); ad.setColumnData(column, new ColumnWeightData(50, 100)); column = new TreeColumn(treeViewer.getTree(),SWT.NONE); column.setWidth(100); column.setText("Total Space (GB)"); ad.setColumnData(column,new ColumnWeightData(50, 100)); column = new TreeColumn(treeViewer.getTree(),SWT.NONE); column.setWidth(100); column.setText("Status"); ad.setColumnData(column,new ColumnWeightData(50, 100)); treeViewer.setLabelProvider(getLabelProvider()); treeViewer.setContentProvider(getContentProvider()); treeViewer.setInput(allDisks); // Create a case insensitive filter for the table viewer using the filter text field guiHelper.createFilter(treeViewer, filterText, false); treeViewer.expandAll(); } /* (non-Javadoc) * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) */ @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { } }