/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* 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 org.jkiss.dbeaver.ui.editors;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.ui.*;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.jkiss.dbeaver.ui.IActiveWorkbenchPart;
import org.jkiss.dbeaver.ui.UIUtils;
/**
* MultiPageAbstractEditor
*/
public abstract class MultiPageAbstractEditor extends MultiPageEditorPart
{
private Image editorImage;
private int activePageIndex = -1;
@Override
public void init(IEditorSite site, IEditorInput input)
throws PartInitException
{
if (getEditorInput() == null) {
super.init(site, input);
} else {
// Pages re-initialization. Do not call init bcause it recreates selection provider
setSite(site);
setInput(input);
}
setPartName(input.getName());
setTitleImage(input.getImageDescriptor());
}
protected void setTitleImage(ImageDescriptor titleImage)
{
if (getContainer() != null && getContainer().isDisposed()) {
return;
}
Image oldImage = editorImage;
editorImage = titleImage.createImage();
super.setTitleImage(editorImage);
UIUtils.dispose(oldImage);
}
@Override
public void dispose()
{
UIUtils.dispose(editorImage);
super.dispose();
}
@Override
public void doSave(IProgressMonitor monitor)
{
}
@Override
public void doSaveAs()
{
}
@Override
public boolean isSaveAsAllowed()
{
return false;
}
@Override
protected void createPages()
{
this.setContainerStyles();
}
protected void setContainerStyles()
{
Composite pageContainer = getContainer();
if (pageContainer instanceof CTabFolder) {
CTabFolder tabFolder = (CTabFolder)pageContainer;
tabFolder.setSimple(false);
tabFolder.setMRUVisible(true);
tabFolder.setTabPosition(SWT.TOP);
Control topRight = createTopRightControl(tabFolder);
if (topRight != null) {
Point trSize = topRight.computeSize(SWT.DEFAULT, SWT.DEFAULT);
tabFolder.setTabHeight(trSize.y);
tabFolder.setTopRight(topRight, SWT.RIGHT | SWT.WRAP);
}
// tabFolder.setSimple(false);
//tabFolder.setBorderVisible(true);
Layout parentLayout = tabFolder.getParent().getLayout();
if (parentLayout instanceof FillLayout) {
((FillLayout)parentLayout).marginHeight = 0;
// ((FillLayout)parentLayout).marginWidth = 5;
}
}
}
protected void setPageToolTip(int index, String toolTip)
{
Composite pageContainer = getContainer();
if (pageContainer instanceof CTabFolder) {
CTabFolder tabFolder = (CTabFolder)pageContainer;
if (index < tabFolder.getItemCount()) {
tabFolder.getItem(index).setToolTipText(toolTip);
}
}
}
@Override
protected void pageChange(int newPageIndex)
{
deactivateEditor();
this.activePageIndex = newPageIndex;
super.pageChange(newPageIndex);
activateEditor();
}
protected final void deactivateEditor()
{
// Deactivate the nested services from the last active service locator.
if (activePageIndex >= 0) {
final IWorkbenchPart part = getEditor(activePageIndex);
if (part instanceof IActiveWorkbenchPart) {
((IActiveWorkbenchPart) part).deactivatePart();
}
}
}
protected final void activateEditor()
{
final int pageIndex = getActivePage();
final IWorkbenchPart part = getEditor(pageIndex);
if (part instanceof IActiveWorkbenchPart) {
((IActiveWorkbenchPart) part).activatePart();
}
}
@Override
public IEditorPart getActiveEditor()
{
if (getContainer().isDisposed()) {
return null;
}
return super.getActiveEditor();
}
protected IEditorPart getEditor(int pageIndex) {
Item item = ((CTabFolder)getContainer()).getItem(pageIndex);
if (item != null && !item.isDisposed()) {
Object data = item.getData();
if (data instanceof IEditorPart) {
return (IEditorPart) data;
}
}
return null;
}
protected Control createTopRightControl(Composite composite) {
return null;
}
public void recreatePages() {
int pageCount = getPageCount();
for (int i = pageCount; i > 0; i--) {
removePage(i - 1);
}
createPages();
}
}