blob: b9b80ee735ecb653a0d477f0a8c4a26d5b2a86f2 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2004, 2007 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.ote.client.ui.prompt;
import java.util.logging.Level;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.ote.core.framework.prompt.IPassFailPromptResponse;
import org.eclipse.osee.ote.core.framework.prompt.IResumeResponse;
import org.eclipse.osee.ote.core.framework.prompt.IUserInputPromptResponse;
import org.eclipse.osee.ote.core.framework.prompt.IYesNoPromptResponse;
import org.eclipse.ote.client.ui.PromptViewPreferencePage;
import org.eclipse.ote.client.ui.ViewUtil;
import org.eclipse.ote.client.ui.internal.OteClientUiPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.part.ViewPart;
/**
* @author Andrew M. Finkbeiner
*/
public class PromptView extends ViewPart implements PromptComplete {
public static String VIEW_ID = "org.eclipse.ote.client.ui.prompt";
private StackLayout stackLayout;
private Blank blankPrompt;
private PassFail passFailPrompt;
private Pause pausePrompt;
private UserInput userInputPrompt;
private YesNo yesNoPrompt;
private Composite composite;
private ScrolledComposite passFailPromptScrolled;
private ScrolledComposite pausePromptScrolled;
private ScrolledComposite userInputPromptScrolled;
private ScrolledComposite yesNoPromptScrolled;
@Override
public void createPartControl(Composite parent) {
composite = new Composite(parent, SWT.NONE);
blankPrompt = new Blank(composite, SWT.NONE);
passFailPromptScrolled = new ScrolledComposite(composite, SWT.H_SCROLL
| SWT.V_SCROLL);
passFailPromptScrolled.setLayout(new FormLayout());
passFailPrompt = new PassFail(passFailPromptScrolled, SWT.NONE);
FormData fd_passFailPrompt = new FormData();
fd_passFailPrompt.top = new FormAttachment(0);
fd_passFailPrompt.left = new FormAttachment(0);
fd_passFailPrompt.bottom = new FormAttachment(100);
fd_passFailPrompt.right = new FormAttachment(100);
passFailPrompt.setLayoutData(fd_passFailPrompt);
passFailPromptScrolled.setContent(passFailPrompt);
passFailPrompt.setPromptComplete(this);
passFailPromptScrolled.setMinSize(passFailPrompt.computeSize(
SWT.DEFAULT, SWT.DEFAULT));
passFailPromptScrolled.setExpandHorizontal(true);
passFailPromptScrolled.setExpandVertical(true);
pausePromptScrolled = new ScrolledComposite(composite, SWT.H_SCROLL
| SWT.V_SCROLL);
pausePrompt = new Pause(pausePromptScrolled, SWT.NONE);
FormData fd_pausePrompt = new FormData();
fd_pausePrompt.top = new FormAttachment(0);
fd_pausePrompt.left = new FormAttachment(0);
fd_pausePrompt.bottom = new FormAttachment(100);
fd_pausePrompt.right = new FormAttachment(100);
pausePrompt.setLayoutData(fd_pausePrompt);
pausePromptScrolled.setContent(pausePrompt);
pausePrompt.setPromptComplete(this);
pausePromptScrolled.setMinSize(pausePrompt.computeSize(SWT.DEFAULT,
SWT.DEFAULT));
pausePromptScrolled.setExpandHorizontal(true);
pausePromptScrolled.setExpandVertical(true);
userInputPromptScrolled = new ScrolledComposite(composite, SWT.H_SCROLL
| SWT.V_SCROLL);
userInputPromptScrolled.setLayout(new FormLayout());
userInputPrompt = new UserInput(userInputPromptScrolled, SWT.NONE);
FormData fd_userInputPrompt = new FormData();
fd_userInputPrompt.top = new FormAttachment(0);
fd_userInputPrompt.left = new FormAttachment(0);
fd_userInputPrompt.bottom = new FormAttachment(100);
fd_userInputPrompt.right = new FormAttachment(100);
userInputPrompt.setLayoutData(fd_userInputPrompt);
userInputPrompt.setPromptComplete(this);
userInputPromptScrolled.setContent(userInputPrompt);
userInputPromptScrolled.setMinSize(userInputPrompt.computeSize(
SWT.DEFAULT, SWT.DEFAULT, true));
userInputPromptScrolled.setExpandHorizontal(true);
userInputPromptScrolled.setExpandVertical(true);
yesNoPromptScrolled = new ScrolledComposite(composite, SWT.H_SCROLL
| SWT.V_SCROLL);
yesNoPromptScrolled.setLayout(new FormLayout());
yesNoPrompt = new YesNo(yesNoPromptScrolled, SWT.NONE);
FormData fd_yesNoPrompt = new FormData();
fd_yesNoPrompt.top = new FormAttachment(0);
fd_yesNoPrompt.left = new FormAttachment(0);
fd_yesNoPrompt.bottom = new FormAttachment(100);
fd_yesNoPrompt.right = new FormAttachment(100);
yesNoPrompt.setLayoutData(fd_yesNoPrompt);
yesNoPrompt.setPromptComplete(this);
yesNoPromptScrolled.setContent(yesNoPrompt);
yesNoPromptScrolled.setMinSize(userInputPrompt.computeSize(SWT.DEFAULT,
SWT.DEFAULT, true));
yesNoPromptScrolled.setExpandHorizontal(true);
yesNoPromptScrolled.setExpandVertical(true);
stackLayout = new StackLayout();
composite.setLayout(stackLayout);
stackLayout.topControl = blankPrompt;
composite.layout();
}
public void showUserInput(IUserInputPromptResponse prompt) {
setPartName("OTE Prompt Input");
userInputPrompt.setPromptData(prompt);
stackLayout.topControl = userInputPrompt.getParent();
setSize(userInputPromptScrolled, userInputPrompt);
userInputPromptScrolled.setContent(userInputPrompt);
composite.layout(true);
userInputPrompt.setFocus();
forceFocus();
userInputPrompt.redraw();
userInputPrompt.pack();
userInputPrompt.layout(true);
forceFocus();
}
public void showPause(IResumeResponse prompt) {
setPartName("OTE Prompt Pause");
pausePrompt.setPromptData(prompt);
stackLayout.topControl = pausePrompt.getParent();
setSize(pausePromptScrolled, pausePrompt);
pausePromptScrolled.setContent(pausePrompt);
composite.layout(true);
pausePrompt.setFocus();
forceFocus();
pausePrompt.redraw();
pausePrompt.pack();
pausePrompt.layout(true);
forceFocus();
}
private void forceFocus(){
int count = 0;
while (Display.getCurrent().readAndDispatch() && count < 10000) {
count++;
}
setFocus();
}
public void showPassFail(IPassFailPromptResponse prompt) {
setPartName("OTE Prompt Pass/Fail");
passFailPrompt.setPromptData(prompt);
stackLayout.topControl = passFailPromptScrolled;
setSize(passFailPromptScrolled, passFailPrompt);
passFailPromptScrolled.setContent(passFailPrompt);
composite.layout(true);
passFailPrompt.setFocus();
forceFocus();
passFailPrompt.redraw();
passFailPrompt.pack();
passFailPrompt.layout(true);
forceFocus();
}
public void showYesNo(IYesNoPromptResponse prompt) {
setPartName("OTE Prompt Yes/No");
yesNoPrompt.setPromptData(prompt);
stackLayout.topControl = yesNoPromptScrolled;
setSize(yesNoPromptScrolled, yesNoPrompt);
yesNoPromptScrolled.setContent(yesNoPrompt);
composite.layout(true);
yesNoPrompt.setFocus();
forceFocus();
yesNoPrompt.redraw();
yesNoPrompt.pack();
yesNoPrompt.layout(true);
forceFocus();
}
void setSize(ScrolledComposite scrolledComposite, Composite content){
scrolledComposite.setMinSize(content.computeSize(scrolledComposite.getSize().x, SWT.DEFAULT, true));
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
}
@Override
public void promptComplete() {
stackLayout.topControl = blankPrompt;
setPartName("OTE Prompt");
composite.layout();
boolean promptDisplayed = false;
try{
promptDisplayed = OteClientUiPlugin.getDefault().getPreferenceStore().getBoolean(PromptViewPreferencePage.PROMPT_DISPLAYED);
} catch (Throwable th){
OseeLog.log(getClass(), Level.SEVERE, th);
}
// Do not close the prompt view if it is the only item in the tab container
// prompt will be closed automatically if it comes in too soon after this one.
boolean onlyTab = false;
try {
Composite comp = composite;
while(comp != null){
comp = comp.getParent();
if(comp instanceof CTabFolder){
break;
}
}
if(comp != null){
onlyTab = ((CTabFolder)comp).getItemCount() == 1;
}
} catch (Throwable e) {
OseeLog.log(getClass(), Level.SEVERE, e);
}
if(!promptDisplayed && !onlyTab){
ViewUtil.closeViewAcrossPerspectives(VIEW_ID);
}
}
@Override
public void dispose() {
if (stackLayout.topControl == passFailPromptScrolled) {
passFailPrompt.close();
} else if (stackLayout.topControl == pausePromptScrolled) {
pausePrompt.close();
} else if (stackLayout.topControl == userInputPromptScrolled) {
userInputPrompt.close();
} else if (stackLayout.topControl == yesNoPromptScrolled) {
yesNoPrompt.close();
}
super.dispose();
}
@Override
public void setFocus() {
if (composite != null) {
composite.setFocus();
}
}
}