    001package org.vishia.gral.base;
    002
    003import org.vishia.gral.ifc.GralRectangle;
    004
    005/**This interface is used as reference to the implementation layer for all widgets.
    006 * It defines all possible calls from the application to the implementation widget.
    007 * <br><br>
    008 * Note that most of user requirements are done by the {@link GralWidget} capability and the
    009 * capabilities of its derived classes, for example {@link GralWidget#setText(CharSequence)}
    010 * or {@link GralWidget#setBackColor(org.vishia.gral.ifc.GralColor, int)}. That methods
    011 * stores the text, color etc. in graphic-independent attributes. The method
    012 * {@link #repaintGthread()} is the central method to realize that user stimuli for the
    013 * implementation graphic layer. That method can use especially the {@link GralWidget.DynamicData}
    014 * and there quest method {@link GralWidget.DynamicData#whatIsChanged}.
    015 * There is no needing of methods such as <code>setText(String)</code> etc. because the user
    016 * should able to set the text in any thread. See concept of data set described on {@link GralWidget#setText(CharSequence)}
    017 * See {@link GralWidget#_wdgImpl}.
    018 * @since 2013-06
    019 * @author Hartmut Schorrig
    020 *
    021 */
    022public interface GralWidgImpl_ifc
    023{
    024
    025
    026
    027
    028  /**Sets the focus to the widget.
    029   * See {@link GralMng_ifc#setFocus(GralWidget)}.
    030   * @return true if it has the focus after this operation.
    031   *   false on any error.
    032   */
    033  boolean setFocusGThread();
    034
    035
    036  /**Sets the implementation widget(s) visible state. The widgets are really invisible, or they are visible in principle, but they can be covered by other windows or clipping.
    037   * This method should set the {@link GralWidget#bVisibleState} too. Therewith it is able to quest {@link GralWidget#isVisible()} in any thread.
    038   * @param bVisible true then the widget should be visible, false it is set to invisible.
    039   */
    040  void setVisibleGThread(boolean bVisible);
    041
    042  /**
    043   * @param visible
    044   * @return
    045   * @deprecated
    046   */
    047  //@Deprecated
    048  //boolean setVisible(boolean visible);
    049
    050  /**Removes the graphical widget in the graphic. */
    051  void removeWidgetImplementation();
    052
    053
    054  /**This method should be implemented in all Widget implementations of the adapter for the
    055   * underlying graphic system.
    056   * <br>Implementation hints: In SWT it should call redraw().
    057   * <br>It is possible that the widget
    058   * consists of more as one graphical widget, then all of it should be redrawn.
    059   * It is possible that some data are set in another thread, they should be applied to the widgets firstly.
    060   * It is possible that the widget is removed though a repaintGthread-order is pending from the time before deleting,
    061   * for example if the graphic layout is changed.
    062   * <br><br>
    063   * See {@link #repaintRequ}
    064   *
    065   */
    066  void repaintGthread();
    067
    068
    069  /**Returns the implementation class of the widget. If the widget has more as one implementation widgets,
    070   * this method returns one of the widgets, usual the first important one respectively that widget which represents
    071   * the implementation layer. A widget of the implementation layer is a SWT.control or a {@link java.awt.Component}.
    072   * <br><br>
    073   * If more as one widget are part of the GralWidget, use the special {@link GralWidget#_wdgImpl} class
    074   * which should contain the references to that implementation widgets.
    075   * */
    076  Object getWidgetImplementation();
    077
    078  void setBoundsPixel(int x, int y, int dx, int dy);
    079
    080  GralRectangle getPixelPositionSize();
    081
    082
    083
    084
    085
    086}