/******************************************************************************* * Copyright (c) 2006-2011, G. Weirich and Elexis * 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: * G. Weirich - initial implementation * M. Descher - extracted Eigenartikel to ch.elexis.eigenartikel * *******************************************************************************/ package ch.elexis.core.ui.views.codesystems; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.ISaveablePart2; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.constants.Preferences; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.model.ICodeElement; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.actions.CodeSelectorHandler; import ch.elexis.core.ui.actions.GlobalActions; import ch.elexis.core.ui.actions.GlobalEventDispatcher; import ch.elexis.core.ui.actions.IActivationListener; import ch.elexis.core.ui.constants.ExtensionPointConstantsUi; import ch.elexis.core.ui.util.DelegatingSelectionProvider; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.views.FavoritenCTabItem; import ch.elexis.core.ui.views.codesystems.CodeSelectorFactory.cPage; public class LeistungenView extends ViewPart implements IActivationListener, ISaveablePart2 { private static final String CAPTION_ERROR = Messages.LeistungenView_error; //$NON-NLS-1$ public final static String ID = "ch.elexis.LeistungenView"; //$NON-NLS-1$ public CTabFolder ctab; CTabItem selected; private String defaultRGB; private DelegatingSelectionProvider delegatingSelectionProvider; public LeistungenView(){ defaultRGB = UiDesk.createColor(new RGB(255, 255, 255)); } @Override public void createPartControl(final Composite parent){ parent.setLayout(new GridLayout()); ctab = new CTabFolder(parent, SWT.BOTTOM); ctab.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); ctab.setSimple(false); ctab.setMRUVisible(true); ctab.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ selected = ctab.getSelection(); if (selected instanceof FavoritenCTabItem) return; if (selected != null) { CodeSelectorFactory codeSelectorFactory = (CodeSelectorFactory) selected.getData("csf"); cPage page = (cPage) selected.getControl(); if (page == null) { //SWTHelper.alert(CAPTION_ERROR, "cPage=null"); //$NON-NLS-1$ page = new cPage(ctab, (ICodeElement) selected.getData(), codeSelectorFactory); selected.setControl(page); // parent.redraw(); } page.cv.getConfigurer().getControlFieldProvider().clearValues(); if (codeSelectorFactory != null && codeSelectorFactory.hasContextMenu()) { codeSelectorFactory.activateContextMenu(getSite(), delegatingSelectionProvider, ID); } } ((cPage) selected.getControl()).refresh(); setFocus(); } }); // menu to select & define color Menu tabFolderMenu = new Menu(ctab); MenuItem miColor = new MenuItem(tabFolderMenu, SWT.POP_UP); miColor.setText(Messages.LeistungenView_defineColor); miColor.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ CTabItem item = ctab.getSelection(); ColorDialog cd = new ColorDialog(UiDesk.getTopShell()); RGB selected = cd.open(); if (selected != null) { CoreHub.globalCfg.set(Preferences.LEISTUNGSCODES_COLOR + item.getText(), UiDesk.createColor(selected)); setCTabItemColor(ctab.getSelection().getText()); } } }); ctab.setMenu(tabFolderMenu); CodeSelectorFactory.makeTabs(ctab, getViewSite(), ExtensionPointConstantsUi.VERRECHNUNGSCODE); //$NON-NLS-1$ GlobalEventDispatcher.addActivationListener(this, this); delegatingSelectionProvider = new DelegatingSelectionProvider(); getSite().setSelectionProvider(delegatingSelectionProvider); } public void dispose(){ GlobalEventDispatcher.removeActivationListener(this, this); super.dispose(); } @Override public void setFocus(){ if (selected == null) { if (ctab.getItems().length > 0) { selected = ctab.getSelection(); } } if(selected instanceof FavoritenCTabItem) { ((FavoritenCTabItem)selected).update(); return; } if (selected != null) { cPage page = (cPage) selected.getControl(); if (page == null) { //SWTHelper.alert(CAPTION_ERROR, "cPage=null"); //$NON-NLS-1$ page = new cPage(ctab, (ICodeElement) selected.getData(), (CodeSelectorFactory) selected.getData("csf")); selected.setControl(page); // parent.redraw(); } page.cv.getConfigurer().getControlFieldProvider().setFocus(); } setCTabItemColor(selected.getText()); } private void setCTabItemColor(String id){ String rgbColor = CoreHub.globalCfg.get(Preferences.LEISTUNGSCODES_COLOR + id, defaultRGB); Color color = UiDesk.getColorFromRGB(rgbColor); ctab.setSelectionBackground(new Color[] { UiDesk.getDisplay().getSystemColor(SWT.COLOR_WHITE), color }, new int[] { 100 }, true); } void swapTabs(int iLeft, int iRight){ CTabItem ctLeft = ctab.getItem(iLeft); CTabItem ctRight = ctab.getItem(iRight); String t = ctLeft.getText(); Control c = ctLeft.getControl(); ctLeft.setText(ctRight.getText()); ctLeft.setControl(ctRight.getControl()); ctRight.setText(t); ctRight.setControl(c); } public void activation(boolean mode){ if(selected instanceof FavoritenCTabItem) return; if (mode == false) { if (selected != null) { cPage page = (cPage) selected.getControl(); page.cv.getConfigurer().getControlFieldProvider().clearValues(); } // remove any ICodeSelectiorTarget, since it's no more needed CodeSelectorHandler.getInstance().removeCodeSelectorTarget(); } else { if (selected != null) { cPage page = (cPage) selected.getControl(); page.refresh(); } } } public void visible(boolean mode){} /* * Die folgenden 6 Methoden implementieren das Interface ISaveablePart2 Wir benötigen das * Interface nur, um das Schliessen einer View zu verhindern, wenn die Perspektive fixiert ist. * Gibt es da keine einfachere Methode? */ public int promptToSaveOnClose(){ return GlobalActions.fixLayoutAction.isChecked() ? ISaveablePart2.CANCEL : ISaveablePart2.NO; } public void doSave(IProgressMonitor monitor){ /* leer */ } public void doSaveAs(){ /* leer */ } public boolean isDirty(){ return true; } public boolean isSaveAsAllowed(){ return false; } public boolean isSaveOnCloseNeeded(){ return true; } public void setSelected(CTabItem ctab){ selected = ctab; } }