Skip to content

Commit

Permalink
Merge branch 'refactor-propertysections'
Browse files Browse the repository at this point in the history
  • Loading branch information
Phillipus committed Mar 30, 2018
2 parents 5764c71 + 9f72403 commit 348a8c3
Show file tree
Hide file tree
Showing 48 changed files with 1,989 additions and 2,551 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
*/
package com.archimatetool.canvas.propertysections;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
Expand All @@ -17,12 +17,13 @@
import com.archimatetool.canvas.model.ICanvasPackage;
import com.archimatetool.canvas.model.IHintProvider;
import com.archimatetool.editor.model.commands.EObjectFeatureCommand;
import com.archimatetool.editor.propertysections.AbstractArchimatePropertySection;
import com.archimatetool.editor.propertysections.AbstractECorePropertySection;
import com.archimatetool.editor.propertysections.IObjectFilter;
import com.archimatetool.editor.propertysections.ITabbedLayoutConstants;
import com.archimatetool.editor.propertysections.ObjectFilter;
import com.archimatetool.editor.propertysections.PropertySectionTextControl;
import com.archimatetool.editor.ui.components.StyledTextControl;
import com.archimatetool.model.IArchimatePackage;
import com.archimatetool.model.ILockable;



Expand All @@ -31,7 +32,7 @@
*
* @author Phillip Beauvoir
*/
public class HintContentSection extends AbstractArchimatePropertySection {
public class HintContentSection extends AbstractECorePropertySection {

private static final String HELP_ID = "com.archimatetool.help.elementPropertySection"; //$NON-NLS-1$

Expand All @@ -40,34 +41,16 @@ public class HintContentSection extends AbstractArchimatePropertySection {
*/
public static class Filter extends ObjectFilter {
@Override
protected boolean isRequiredType(Object object) {
public boolean isRequiredType(Object object) {
return object instanceof IHintProvider;
}

@Override
protected Class<?> getAdaptableType() {
public Class<?> getAdaptableType() {
return IHintProvider.class;
}
}

/*
* Adapter to listen to changes made elsewhere (including Undo/Redo commands)
*/
private Adapter eAdapter = new AdapterImpl() {
@Override
public void notifyChanged(Notification msg) {
Object feature = msg.getFeature();
// Model Name event (Undo/Redo and here!)
if(feature == ICanvasPackage.Literals.HINT_PROVIDER__HINT_TITLE ||
feature == ICanvasPackage.Literals.HINT_PROVIDER__HINT_CONTENT ||
feature == IArchimatePackage.Literals.LOCKABLE__LOCKED) {
refreshControls();
}
}
};

private IHintProvider fHintProvider;

private PropertySectionTextControl fTextTitleControl;
private PropertySectionTextControl fTextContentControl;

Expand All @@ -78,12 +61,19 @@ protected void createControls(Composite parent) {
fTextTitleControl = new PropertySectionTextControl(text, ICanvasPackage.Literals.HINT_PROVIDER__HINT_TITLE) {
@Override
protected void textChanged(String oldText, String newText) {
if(isAlive()) {
fIsExecutingCommand = true;
getCommandStack().execute(new EObjectFeatureCommand(Messages.HintContentSection_1, fHintProvider,
ICanvasPackage.Literals.HINT_PROVIDER__HINT_TITLE, newText));
fIsExecutingCommand = false;
CompoundCommand result = new CompoundCommand();

for(EObject provider : getEObjects()) {
if(isAlive(provider)) {
Command cmd = new EObjectFeatureCommand(Messages.HintContentSection_1, provider,
ICanvasPackage.Literals.HINT_PROVIDER__HINT_TITLE, newText);
if(cmd.canExecute()) {
result.add(cmd);
}
}
}

executeCommand(result.unwrap());
}
};
fTextTitleControl.setHint(Messages.HintContentSection_2);
Expand All @@ -93,12 +83,19 @@ protected void textChanged(String oldText, String newText) {
fTextContentControl = new PropertySectionTextControl(styledTextControl.getControl(), ICanvasPackage.Literals.HINT_PROVIDER__HINT_CONTENT) {
@Override
protected void textChanged(String oldText, String newText) {
if(isAlive()) {
fIsExecutingCommand = true;
getCommandStack().execute(new EObjectFeatureCommand(Messages.HintContentSection_4, fHintProvider,
ICanvasPackage.Literals.HINT_PROVIDER__HINT_CONTENT, newText));
fIsExecutingCommand = false;
CompoundCommand result = new CompoundCommand();

for(EObject provider : getEObjects()) {
if(isAlive(provider)) {
Command cmd = new EObjectFeatureCommand(Messages.HintContentSection_4, provider,
ICanvasPackage.Literals.HINT_PROVIDER__HINT_CONTENT, newText);
if(cmd.canExecute()) {
result.add(cmd);
}
}
}

executeCommand(result.unwrap());
}
};
fTextContentControl.setHint(Messages.HintContentSection_5);
Expand All @@ -108,41 +105,40 @@ protected void textChanged(String oldText, String newText) {
}

@Override
protected void setElement(Object element) {
fHintProvider = (IHintProvider)new Filter().adaptObject(element);
if(fHintProvider == null) {
System.err.println(getClass() + " failed to get element for " + element); //$NON-NLS-1$
protected void notifyChanged(Notification msg) {
if(msg.getNotifier() == getFirstSelectedObject()) {
Object feature = msg.getFeature();

if(feature == ICanvasPackage.Literals.HINT_PROVIDER__HINT_TITLE ||
feature == ICanvasPackage.Literals.HINT_PROVIDER__HINT_CONTENT ||
feature == IArchimatePackage.Literals.LOCKABLE__LOCKED) {
update();
}
}

refreshControls();
}

protected void refreshControls() {

@Override
protected void update() {
if(fIsExecutingCommand) {
return;
}

fTextTitleControl.refresh(fHintProvider);
fTextContentControl.refresh(fHintProvider);
IHintProvider provider = (IHintProvider)getFirstSelectedObject();

boolean enabled = fHintProvider instanceof ILockable ? !((ILockable)fHintProvider).isLocked() : true;
fTextTitleControl.setEditable(enabled);
fTextContentControl.setEditable(enabled);
fTextTitleControl.refresh(provider);
fTextContentControl.refresh(provider);

fTextTitleControl.setEditable(!isLocked(provider));
fTextContentControl.setEditable(!isLocked(provider));
}

@Override
protected Adapter getECoreAdapter() {
return eAdapter;
}

@Override
protected EObject getEObject() {
return fHintProvider;
protected IObjectFilter getFilter() {
return new Filter();
}

@Override
public boolean shouldUseExtraSpace() {
return true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@

import java.io.File;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
Expand Down Expand Up @@ -39,10 +40,11 @@
import com.archimatetool.editor.model.IArchiveManager;
import com.archimatetool.editor.model.commands.EObjectFeatureCommand;
import com.archimatetool.editor.propertysections.DiagramModelImageSection;
import com.archimatetool.editor.propertysections.IObjectFilter;
import com.archimatetool.editor.propertysections.ITabbedLayoutConstants;
import com.archimatetool.editor.propertysections.ObjectFilter;
import com.archimatetool.editor.ui.ImageFactory;
import com.archimatetool.model.IArchimatePackage;
import com.archimatetool.model.ILockable;



Expand All @@ -58,36 +60,16 @@ public class IconSection extends DiagramModelImageSection {
*/
public static class Filter extends ObjectFilter {
@Override
protected boolean isRequiredType(Object object) {
public boolean isRequiredType(Object object) {
return object instanceof IIconic;
}

@Override
protected Class<?> getAdaptableType() {
public Class<?> getAdaptableType() {
return IIconic.class;
}
}

/*
* Adapter to listen to changes made elsewhere (including Undo/Redo commands)
*/
private Adapter eAdapter = new AdapterImpl() {
@Override
public void notifyChanged(Notification msg) {
Object feature = msg.getFeature();
// Model event
if(feature == IArchimatePackage.Literals.DIAGRAM_MODEL_IMAGE_PROVIDER__IMAGE_PATH) {
refreshPreviewImage();
}
else if(feature == IArchimatePackage.Literals.LOCKABLE__LOCKED
|| feature == ICanvasPackage.Literals.ICONIC__IMAGE_POSITION) {
refreshButtons();
}
}
};

private IIconic fIconic;

private Image fImage;
private Canvas fCanvas;
private Combo fComboPosition;
Expand Down Expand Up @@ -132,10 +114,9 @@ public void widgetDisposed(DisposeEvent e) {
fCanvas.addListener(SWT.MouseDoubleClick, new Listener() {
@Override
public void handleEvent(Event event) {
if(fIconic instanceof ILockable && ((ILockable)fIconic).isLocked()) {
return;
if(!isLocked(getFirstSelectedObject())) {
chooseImage();
}
chooseImage();
}
});

Expand All @@ -161,11 +142,10 @@ public void paintControl(PaintEvent e) {
@Override
public void drop(DropTargetEvent event) {
if(event.data instanceof String[]) {
if(fIconic instanceof ILockable && ((ILockable)fIconic).isLocked()) {
return;
if(!isLocked(getFirstSelectedObject())) {
File file = new File(((String[])event.data)[0]);
setImage(file);
}
File file = new File(((String[])event.data)[0]);
setImage(file);
}
}
});
Expand All @@ -183,14 +163,22 @@ public void drop(DropTargetEvent event) {
fComboPosition.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if(isAlive()) {
fIsExecutingCommand = true;
getCommandStack().execute(new EObjectFeatureCommand(Messages.IconSection_12,
fIconic,
ICanvasPackage.Literals.ICONIC__IMAGE_POSITION,
fComboPosition.getSelectionIndex()));
fIsExecutingCommand = false;
CompoundCommand result = new CompoundCommand();

for(EObject iconic : getEObjects()) {
if(isAlive(iconic)) {
Command cmd = new EObjectFeatureCommand(Messages.IconSection_12,
iconic,
ICanvasPackage.Literals.ICONIC__IMAGE_POSITION,
fComboPosition.getSelectionIndex());

if(cmd.canExecute()) {
result.add(cmd);
}
}
}

executeCommand(result.unwrap());
}
});

Expand All @@ -199,30 +187,42 @@ public void widgetSelected(SelectionEvent e) {
}

@Override
protected void setElement(Object element) {
fIconic = (IIconic)new Filter().adaptObject(element);
if(fIconic == null) {
System.err.println(getClass() + " failed to get element for " + element); //$NON-NLS-1$
protected IObjectFilter getFilter() {
return new Filter();
}

@Override
protected void notifyChanged(Notification msg) {
if(msg.getNotifier() == getFirstSelectedObject()) {
Object feature = msg.getFeature();

if(feature == IArchimatePackage.Literals.DIAGRAM_MODEL_IMAGE_PROVIDER__IMAGE_PATH) {
refreshPreviewImage();
}
else if(feature == IArchimatePackage.Literals.LOCKABLE__LOCKED
|| feature == ICanvasPackage.Literals.ICONIC__IMAGE_POSITION) {
refreshButtons();
}
}

refreshControls();
}

@Override
protected void refreshControls() {
protected void update() {
refreshPreviewImage();
refreshButtons();
}

protected void refreshPreviewImage() {
disposeImage();

if(fIconic.getImagePath() != null) {
IArchiveManager archiveManager = (IArchiveManager)fIconic.getAdapter(IArchiveManager.class);
IIconic iconic = (IIconic)getFirstSelectedObject();

if(iconic.getImagePath() != null) {
IArchiveManager archiveManager = (IArchiveManager)iconic.getAdapter(IArchiveManager.class);

Image image = null;
try {
image = archiveManager.createImage(fIconic.getImagePath());
image = archiveManager.createImage(iconic.getImagePath());
}
catch(Exception ex) {
ex.printStackTrace();
Expand All @@ -246,31 +246,21 @@ protected void refreshPreviewImage() {

@Override
protected void refreshButtons() {
boolean enabled = fIconic instanceof ILockable ? !((ILockable)fIconic).isLocked() : true;
super.refreshButtons();

fImageButton.setEnabled(enabled);
IIconic iconic = (IIconic)getFirstSelectedObject();

int position = fIconic.getImagePosition();
int position = iconic.getImagePosition();
if(position < IIconic.ICON_POSITION_TOP_LEFT || position > IIconic.ICON_POSITION_BOTTOM_RIGHT) {
position = IIconic.ICON_POSITION_TOP_RIGHT;
}

if(!fIsExecutingCommand) {
fComboPosition.select(position);
fComboPosition.setEnabled(enabled);
fComboPosition.setEnabled(!isLocked(iconic));
}
}

@Override
protected Adapter getECoreAdapter() {
return eAdapter;
}

@Override
protected IIconic getEObject() {
return fIconic;
}

protected void disposeImage() {
if(fImage != null && !fImage.isDisposed()) {
fImage.dispose();
Expand Down
Loading

0 comments on commit 348a8c3

Please sign in to comment.