X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableView.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableView.java new file mode 100644 index 0000000..dc41455 --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableView.java @@ -0,0 +1,283 @@ +package com.quantum.view.tableview; + +import java.util.Vector; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.WorkbenchException; +import org.eclipse.ui.part.ViewPart; + +import com.quantum.Messages; +import com.quantum.QuantumPlugin; +import com.quantum.extensions.ProcessServiceMembers; +import com.quantum.model.Bookmark; +import com.quantum.model.Entity; +import com.quantum.model.NotConnectedException; +import com.quantum.sql.SQLResults; +import com.quantum.ui.dialog.ExceptionDisplayDialog; +import com.quantum.view.LogProxy; + +/** + * The Table View. Displays tables and Queries. + */ +public class TableView extends ViewPart implements ISelectionListener { + + private class DefaultEncodingAction extends Action { + private final TableAdapter ta; + private DefaultEncodingAction(TableAdapter ta) { + super(); + this.ta = ta; + } + public void run() { + ta.setEncoding(TableAdapter.DEFAULT); + } + } + private static TableView instance = null; + private TabFolder tabs = null; + private Composite parent; + private Vector extensionVector; + + /** + * Generic contructor + */ + public TableView() { + } + + + public void setFocus() { + setQualifiedTitle(); + } + + /** + * Gets the instance of the TableView. This view can appear on multiple + * perspectives, but tabs within the view are shared no matter which perspective + * is open. + * + * @return the TableView instance. + */ + public static TableView getInstance() { + return (TableView) QuantumPlugin.getDefault().getView("com.quantum.view.tableview.TableView"); + } + + /** + * Close the current tab, disposing of it + */ + public void closeCurrent() { + if (tabs == null) return; + + if (tabs.getSelectionIndex() >= 0) { + try { + TabItem item = tabs.getItem(tabs.getSelectionIndex()); + item.dispose(); + } catch (Throwable e) { + LogProxy.getInstance().addText(LogProxy.ERROR, "Error Closing Current: " + e.toString()); //$NON-NLS-1$ + e.printStackTrace(); + } + } + if (tabs.getItemCount() == 0) { + setTitle(Messages.getString("tableview.QuantumTableViewName")); //$NON-NLS-1$ + } + } + + /** + * Reload table or query data into the selected tab + */ + public void refreshCurrent() { + TabItem item = tabs.getItem(tabs.getSelectionIndex()); + TableAdapter adapter = (TableAdapter) item.getData(); + Bookmark bookmark = adapter.getBookmark(); + String table = adapter.getTable(); + if (table == null) { + loadTable(bookmark, item, null, null, true, true); + } else { + loadTable(bookmark, item, null, null, true, true); + } + String title = Messages.getString("tableview.QuantumTableViewName"); //$NON-NLS-1$ + if (bookmark != null) + title = bookmark.getName() + Messages.getString("tableview.ViewNameInitialDecoration") + title + Messages.getString("tableview.ViewNameFinalDecoration"); //$NON-NLS-1$ //$NON-NLS-2$ + setTitle(title); + } + + public void loadQuery(Bookmark bookmark, SQLResults results) { + loadTable(bookmark, null, null, results, true, false); + } + public void loadTable(Entity entity) { + loadTable(entity.getBookmark(), null, entity, null, false, true); + } + public void loadTable(Bookmark bookmark, TabItem tabItem, Entity entity, SQLResults results, boolean query, boolean reload) { + try { + TableAdapter adapter; + // If no TabItem is given we have to create a new one, with the info of the table or view. + if (tabItem == null) { + tabItem = new TabItem(tabs, SWT.NONE); + // Data is stored in a TableAdapter object + if (query) { + adapter = TableAdapter.createFromQuery(bookmark, results); + } else { + adapter = TableAdapter.createFromTable(entity); + } + // That is stored in the tabItem, so it won't get lost + tabItem.setData(adapter); + // This does not really belong here, but it'll fail if done before the creation of the + // first TabItem, so it remains here till a better place found. + // We set a function to change the Title of the window depending on the selected tab. + tabs.addSelectionListener(new SelectionListener() { + public void widgetDefaultSelected(SelectionEvent e) { + } + public void widgetSelected(SelectionEvent e) { + setQualifiedTitle(); + } + }); + } else { + // If there is already a TabItem, we take its TableAdapter object + adapter = (TableAdapter) tabItem.getData(); + } + + // We create a Composite widget (main) to display our data, with a GridLayout + Composite main = new Composite(tabs, SWT.NONE); + GridLayout layout = new GridLayout(1, false); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 0; + main.setLayout(layout); + + + // load widgets, the order of loading them determines the appearance in screen + ToolBar widgetToolBar = new ToolBar(main, SWT.HORIZONTAL); + // We fill up our Composite widget, the main table display, etc. + final Table table = new Table(main, SWT.FULL_SELECTION | SWT.MULTI); + final Label label = new Label(main, SWT.NULL); + TableViewToolBar toolBar = new TableViewToolBar(this, widgetToolBar, table, adapter, label); + + + // load table + if (reload) { + adapter.resetOffset(); + adapter.loadData(); + } + // Load the table data from the adapter into the widget + adapter.loadTable(table); + // Experimental, won't make it into 2.2 + // final TableViewer viewer = adapter.addTableViewer(table); + + String tableName = adapter.getTable(); + if (tableName != null) { + tabItem.setText(bookmark.getName() + ":" + tableName); + } else { + tabItem.setText(bookmark.getName() + ":" + adapter.getQuery()); + } + + toolBar.getPrevious().setEnabled(adapter.hasPreviousPage()); + toolBar.getNext().setEnabled(adapter.hasNextPage()); + label.setText(adapter.getStatusString()); + + GridData gridData = new GridData(); + gridData.horizontalAlignment = GridData.FILL; + gridData.verticalAlignment = GridData.FILL; + gridData.grabExcessHorizontalSpace = true; + gridData.grabExcessVerticalSpace = true; + table.setLayoutData(gridData); + + gridData = new GridData(); + gridData.horizontalAlignment = GridData.FILL; + label.setLayoutData(gridData); + + + toolBar.setColumns(this, adapter, table); + final TableAdapter ta = adapter; + final Action defaultEncodingAction = new DefaultEncodingAction(ta); + defaultEncodingAction.setText(Messages.getString("tableview.defaultEncoding")); //$NON-NLS-1$ + final Action UTF8EncodingAction = new Action() { + public void run() { + ta.setEncoding(TableAdapter.UTF_8); + } + }; + UTF8EncodingAction.setText(Messages.getString("tableview.UTF8Encoding")); //$NON-NLS-1$ + final Action UTF16EncodingAction = new Action() { + public void run() { + ta.setEncoding(TableAdapter.UTF_16); + } + }; + UTF16EncodingAction.setText(Messages.getString("tableview.UTF16Encoding")); //$NON-NLS-1$ + + IMenuListener menuListener = new TableViewMenuListener(this, table, UTF16EncodingAction, ta, defaultEncodingAction, UTF8EncodingAction, extensionVector); + + // final setup + MenuManager manager = new MenuManager(); + manager.setRemoveAllWhenShown(true); + Menu fTextContextMenu = manager.createContextMenu(table); + table.setMenu(fTextContextMenu); + table.setLinesVisible(true); + manager.addMenuListener(menuListener); + + tabItem.setControl(main); + tabs.setSelection(tabs.indexOf(tabItem)); + + setQualifiedTitle(); + } catch (NotConnectedException e) { + e.printStackTrace(); + handleException(e); + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected void handleException(Exception e) { + ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e); + } + + /** + * @return + */ + /** + * Sets the title of the window to the text of the selected tab + */ + private void setQualifiedTitle() { + if (tabs.getSelectionIndex() < 0) return; + TabItem item = tabs.getItem(tabs.getSelectionIndex()); + String defTitle = Messages.getString("tableview.QuantumTableViewName"); //$NON-NLS-1$ + String title = item.getText(); + int ind = title.indexOf(Messages.getString("tableview.BookmarkSeparator")); //$NON-NLS-1$ + if (ind > 0) defTitle = title.substring(0,ind) + + Messages.getString("tableview.ViewNameInitialDecoration") //$NON-NLS-1$ + + defTitle + + Messages.getString("tableview.ViewNameFinalDecoration"); //$NON-NLS-1$ + setTitle(defTitle); + } + + public void createPartControl(Composite parent) { + instance = this; + this.parent = parent; + initActions(); + tabs = new TabFolder(parent, SWT.NONE); + } + + public void initActions() { + extensionVector = new Vector(); + try { + ProcessServiceMembers.process(this, extensionVector); + } catch (WorkbenchException e) { + e.printStackTrace(); + } + + } + + public void selectionChanged(IWorkbenchPart part, ISelection selection) { + + } +} \ No newline at end of file