Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added open type in editor on instance viewer screen #846

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
5df7d18
Added open type in editor on instance viewer screen
alliuqemal Nov 20, 2024
410e2d3
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 7, 2025
d79512b
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 7, 2025
ad7de81
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 8, 2025
f55b51f
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 8, 2025
210b0e4
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 9, 2025
3f18755
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 13, 2025
fc9482d
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 14, 2025
1b28d98
Merge branch 'eclipse-4diac:develop' into develop
alliuqemal Jan 17, 2025
26450d6
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 17, 2025
52b702b
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 17, 2025
523ddd6
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 20, 2025
36df2d4
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 20, 2025
f34924a
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 20, 2025
077c419
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 21, 2025
03e6cc5
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 21, 2025
b575ce0
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 22, 2025
6c34808
Merge branch 'eclipse-4diac:develop' into develop
github-actions[bot] Jan 22, 2025
bd4b15b
Added open type in editor on instance viewer screen
alliuqemal Jan 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 19 additions & 13 deletions plugins/org.eclipse.fordiac.ide.application/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1480,7 +1480,7 @@
<count value="1" />
<iterate ifEmpty="false">
<or>
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement" />
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement" />
<reference definitionId="org.eclipse.fordiac.ide.application.FBNelementEditPartSelection" />
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement" />
<instanceof value="org.eclipse.fordiac.ide.gef.editparts.InterfaceEditPart"/>
Expand All @@ -1499,19 +1499,25 @@
</command>
<command commandId="org.eclipse.fordiac.ide.application.commands.openType">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is now twice in the pop-up menu

<visibleWhen checkEnabled="true">
<with variable="selection" >
<count value="1" />
<iterate ifEmpty="false">
<or>
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement" />
<reference definitionId="org.eclipse.fordiac.ide.application.FBNelementEditPartSelection" />
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement" />
<instanceof value="org.eclipse.fordiac.ide.gef.editparts.InterfaceEditPart"/>
</or>
</iterate>
</with>
<or>
<with variable="selection" >
<count value="1" />
<iterate ifEmpty="false">
<or>
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement" />
<reference definitionId="org.eclipse.fordiac.ide.application.FBNelementEditPartSelection" />
<instanceof value="org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement" />
<instanceof value="org.eclipse.fordiac.ide.gef.editparts.InterfaceEditPart"/>
</or>
</iterate>
</with>
<with variable="activeEditor">
<adapt type="org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement" />
</with>
</or>
</visibleWhen>
</command>
</command>

<command commandId="org.eclipse.fordiac.ide.application.commands.saveAsSubappType">
<visibleWhen checkEnabled="true">
<and>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,49 +12,54 @@
*******************************************************************************/
package org.eclipse.fordiac.ide.application.handlers;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.fordiac.ide.model.libraryElement.FBNetwork;
import org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement;
import org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement;
import org.eclipse.fordiac.ide.model.libraryElement.LibraryElement;
import org.eclipse.fordiac.ide.model.libraryElement.INamedElement;
import org.eclipse.fordiac.ide.model.libraryElement.SubApp;
import org.eclipse.fordiac.ide.model.libraryElement.SubAppType;
import org.eclipse.fordiac.ide.model.libraryElement.TypedSubApp;
import org.eclipse.fordiac.ide.model.libraryElement.UntypedSubApp;
import org.eclipse.fordiac.ide.model.ui.actions.OpenListenerManager;
import org.eclipse.fordiac.ide.ui.FordiacLogHelper;
import org.eclipse.gef.EditPart;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.ISources;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.part.FileEditorInput;

public class OpenTypeHandler extends AbstractHandler {

@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {

final IStructuredSelection sel = HandlerUtil.getCurrentStructuredSelection(event);
final IFile typeFile = getSelectedTypeFile(sel);
if (typeFile != null) {
openTypeEditor(typeFile);
final EObject object = getSelectedObject(sel);

if (object != null) {
openTypeEditor(object);
}
return Status.OK_STATUS;

return null;
}

private static void openTypeEditor(final IFile file) {
private static void openTypeEditor(final EObject object) {
final IWorkbench workbench = PlatformUI.getWorkbench();
if (null != workbench) {
if (workbench != null) {
final IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow();
if (null != activeWorkbenchWindow) {
final IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
final IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry()
.getDefaultEditor(file.getName());
if (activeWorkbenchWindow != null) {
try {
activePage.openEditor(new FileEditorInput(file), desc.getId());
OpenListenerManager.openEditor(object);
} catch (final Exception e) {
FordiacLogHelper.logError(e.getMessage(), e);
}
Expand All @@ -66,27 +71,76 @@ private static void openTypeEditor(final IFile file) {
public void setEnabled(final Object evaluationContext) {
final ISelection sel = (ISelection) HandlerUtil.getVariable(evaluationContext,
ISources.ACTIVE_CURRENT_SELECTION_NAME);
setBaseEnabled(getSelectedTypeFile(sel) != null);

setBaseEnabled(getSelectedObject(sel) != null);
}

private static IFile getSelectedTypeFile(final ISelection sel) {
private static EObject getSelectedObject(final ISelection sel) {
if ((sel instanceof final IStructuredSelection structSel) && !sel.isEmpty() && (structSel.size() == 1)) {
Object obj = structSel.getFirstElement();

if (obj instanceof final EditPart ep) {
obj = ep.getModel();
}

final LibraryElement type = switch (obj) {
final EObject type = switch (obj) {
case final FBNetwork fbn -> getTypeFromFbn(fbn);
case final FBNetworkElement fbnEl -> fbnEl.getType();
case final IInterfaceElement ie -> ie.getType();
default -> null;
};

if ((type != null) && (type.getTypeEntry() != null)) {
return type.getTypeEntry().getFile();
if ((type != null)) {
return type;
}
}

return null;
}

private static EObject getTypeFromFbn(final FBNetwork fbn) {

if (fbn.eContainer() instanceof final UntypedSubApp usa) {
EObject element = usa;

final List<String> subAppNames = new ArrayList<>();

while (element != null) {
if (element instanceof final INamedElement ine) {
subAppNames.add(ine.getName());
}

if (element.eContainer() instanceof final TypedSubApp tsa) {
subAppNames.add(tsa.getName());

return getUntypedSubApp(subAppNames.reversed(), tsa.getType());
}

element = element.eContainer();
}
}

if (fbn.eContainer() instanceof final TypedSubApp tsa) {
return tsa.getType();
}

return null;
}

private static SubApp getUntypedSubApp(final List<String> subAppNames, final SubAppType type) {
FBNetwork fb = type.getFBNetwork();
SubApp lastSubapp = null;

for (final String subAppName : subAppNames) {
final SubApp sa = fb.getSubAppNamed(subAppName);

if (sa != null) {
lastSubapp = sa;
fb = sa.getSubAppNetwork();
}
}

return lastSubapp;
}

}
Loading