001package org.vishia.gral.swt;
002
003import org.eclipse.swt.events.FocusEvent;
004import org.eclipse.swt.events.FocusListener;
005import org.eclipse.swt.events.MouseEvent;
006import org.eclipse.swt.events.MouseListener;
007import org.eclipse.swt.widgets.Text;
008import org.eclipse.swt.widgets.Widget;
009import org.vishia.gral.base.GralWidget;
010import org.vishia.gral.ifc.GralUserAction;
011
012public class SwtFocusAction
013implements FocusListener
014{
015
016        /**Reference to the users method. */
017  private GralUserAction userAction;
018  
019        protected final SwtMng guiMng;
020
021        String sCmdEnter, sCmdRelease;
022        
023        private final SwtProperties propertiesGui;
024  
025  /**Constructor.
026   * @param guiMng The Gui-manager
027   * @param userCmdGui The users method for the action. 
028   * @param sCmdPress command string provided as first parameter on mouse button press.
029   * @param sCmdRelease
030   * @param sCmdDoubleClick
031   */
032  public SwtFocusAction(
033        SwtMng guiMng
034  , GralUserAction userCmdGui
035  , String sCmdEnter
036  , String sCmdRelease
037  )
038  { this.guiMng = guiMng;
039        this.propertiesGui = guiMng.propertiesGuiSwt;
040        this.sCmdEnter = sCmdEnter;
041    this.sCmdRelease = sCmdRelease;
042    this.userAction = userCmdGui;
043  }
044  
045  
046  void setUserAction(GralUserAction userAction)
047  {
048        this.userAction = userAction;
049  }
050  
051
052
053        
054        
055        @Override public void focusGained(FocusEvent ev)
056        { if(sCmdEnter !=null) { exec(ev, sCmdEnter); }
057        }
058
059        @Override public void focusLost(FocusEvent ev)
060        { if(sCmdRelease !=null) { exec(ev, sCmdRelease); }
061        }
062
063        
064        private void exec(FocusEvent ev, String sCmd)
065        {
066                final Widget widget = ev.widget;
067                final Object oInfo = widget.getData();
068                final GralWidget widgetInfo;
069                final String sContent;
070                if(widget instanceof Text){ sContent = ((Text)widget).getText(); }
071                else { sContent = null; }
072                if(oInfo instanceof GralWidget){
073                        widgetInfo = (GralWidget)oInfo;
074                } else { widgetInfo = null; }
075        userAction.userActionGui(sCmd, widgetInfo, sContent);
076        }
077
078
079}