예제 #1
0
파일: View.java 프로젝트: shader/gdr
  /**
   * Initialize the toolbar with icons and selection listeners in the appropriate part of the window
   */
  public void initToolbar() {

    Device dev = shell.getDisplay();
    try {
      exitImg = new Image(dev, "img/exit.png");
      //            openImg = new Image(dev, "img/open.png");
      playImg = new Image(dev, "img/play.png");
      //            pauseImg = new Image(dev, "img/pause.png");

    } catch (Exception e) {
      System.out.println("Cannot load images");
      System.out.println(e.getMessage());
      System.exit(1);
    }

    ToolBar toolBar = new ToolBar(shell, SWT.BORDER);

    GridData gridData = new GridData();
    gridData.horizontalAlignment = GridData.FILL;
    gridData.grabExcessHorizontalSpace = true;
    toolBar.setLayoutData(gridData);

    ToolItem exit = new ToolItem(toolBar, SWT.PUSH);
    exit.setImage(exitImg);

    // ToolItem open = new ToolItem(toolBar, SWT.PUSH);
    // exit.setImage(openImg);

    ToolItem play = new ToolItem(toolBar, SWT.PUSH);
    play.setImage(playImg);

    //        ToolItem pause = new ToolItem(toolBar, SWT.PUSH);
    //        pause.setImage(pauseImg);

    toolBar.pack();

    exit.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            System.exit(0);
          }
        });

    // open.addSelectionListener(new SelectionAdapter() {
    //     @Override
    //     public void widgetSelected(SelectionEvent e) {
    //         FileDialog dialog = new FileDialog(shell, SWT.NULL);
    //         String path = dialog.open();
    //     }
    // });

    play.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            controller.RunAnimation();
          }
        });
  }
예제 #2
0
  void click(boolean dropDown) {
    long /*int*/ hwnd = parent.handle;
    if (OS.GetKeyState(OS.VK_LBUTTON) < 0) return;
    int index = (int) /*64*/ OS.SendMessage(hwnd, OS.TB_COMMANDTOINDEX, id, 0);
    RECT rect = new RECT();
    OS.SendMessage(hwnd, OS.TB_GETITEMRECT, index, rect);
    int hotIndex = (int) /*64*/ OS.SendMessage(hwnd, OS.TB_GETHOTITEM, 0, 0);

    /*
     * In order to emulate all the processing that
     * happens when a mnemonic key is pressed, fake
     * a mouse press and release.  This will ensure
     * that radio and pull down items are handled
     * properly.
     */
    int y = rect.top + (rect.bottom - rect.top) / 2;
    long /*int*/ lParam = OS.MAKELPARAM(dropDown ? rect.right - 1 : rect.left, y);
    parent.ignoreMouse = true;
    OS.SendMessage(hwnd, OS.WM_LBUTTONDOWN, 0, lParam);
    OS.SendMessage(hwnd, OS.WM_LBUTTONUP, 0, lParam);
    parent.ignoreMouse = false;

    if (hotIndex != -1) {
      OS.SendMessage(hwnd, OS.TB_SETHOTITEM, hotIndex, 0);
    }
  }
예제 #3
0
 public void setImage(Image image) {
   checkWidget();
   if ((style & SWT.SEPARATOR) != 0) return;
   super.setImage(image);
   if (image != null) {
     ImageList imageList = parent.imageList;
     if (imageList == null) imageList = parent.imageList = new ImageList();
     int imageIndex = imageList.indexOf(image);
     if (imageIndex == -1) {
       imageIndex = imageList.add(image);
     } else {
       imageList.put(imageIndex, image);
     }
     long /*int*/ pixbuf = imageList.getPixbuf(imageIndex);
     OS.gtk_image_set_from_pixbuf(imageHandle, pixbuf);
   } else {
     OS.gtk_image_set_from_pixbuf(imageHandle, 0);
   }
   /*
    * If Text/Image of a tool-item changes, then it is
    * required to reset the proxy menu. Otherwise, the
    * old menuItem appears in the overflow menu.
    */
   if ((style & SWT.DROP_DOWN) != 0) {
     proxyMenuItem = 0;
     proxyMenuItem = OS.gtk_tool_item_retrieve_proxy_menu_item(handle);
     OS.g_signal_connect(
         proxyMenuItem, OS.activate, ToolBar.menuItemSelectedFunc.getAddress(), handle);
   }
   parent.relayout();
 }
예제 #4
0
 void releaseImages() {
   TBBUTTONINFO info = new TBBUTTONINFO();
   info.cbSize = TBBUTTONINFO.sizeof;
   info.dwMask = OS.TBIF_IMAGE | OS.TBIF_STYLE;
   long /*int*/ hwnd = parent.handle;
   OS.SendMessage(hwnd, OS.TB_GETBUTTONINFO, id, info);
   /*
    * Feature in Windows.  For some reason, a tool item that has
    * the style BTNS_SEP does not return I_IMAGENONE when queried
    * for an image index, despite the fact that no attempt has been
    * made to assign an image to the item.  As a result, operations
    * on an image list that use the wrong index cause random results.
    * The fix is to ensure that the tool item is not a separator
    * before using the image index.  Since separators cannot have
    * an image and one is never assigned, this is not a problem.
    */
   if ((info.fsStyle & OS.BTNS_SEP) == 0 && info.iImage != OS.I_IMAGENONE) {
     ImageList imageList = parent.getImageList();
     ImageList hotImageList = parent.getHotImageList();
     ImageList disabledImageList = parent.getDisabledImageList();
     if (imageList != null) imageList.put(info.iImage, null);
     if (hotImageList != null) hotImageList.put(info.iImage, null);
     if (disabledImageList != null) disabledImageList.put(info.iImage, null);
   }
 }
예제 #5
0
 long /*int*/ gtk_clicked(long /*int*/ widget) {
   Event event = new Event();
   if ((style & SWT.DROP_DOWN) != 0) {
     long /*int*/ eventPtr = OS.gtk_get_current_event();
     if (eventPtr != 0) {
       GdkEvent gdkEvent = new GdkEvent();
       OS.memmove(gdkEvent, eventPtr, GdkEvent.sizeof);
       long /*int*/ topHandle = topHandle();
       switch (gdkEvent.type) {
         case OS.GDK_KEY_RELEASE: // Fall Through..
         case OS.GDK_BUTTON_PRESS:
         case OS.GDK_2BUTTON_PRESS:
         case OS.GDK_BUTTON_RELEASE:
           {
             boolean isArrow = false;
             if (OS.GTK_VERSION < OS.VERSION(2, 6, 0)) {
               double[] x_win = new double[1];
               double[] y_win = new double[1];
               OS.gdk_event_get_coords(eventPtr, x_win, y_win);
               int x = OS.GTK_WIDGET_X(arrowHandle) - OS.GTK_WIDGET_X(handle);
               int width = OS.GTK_WIDGET_WIDTH(arrowHandle);
               if ((((parent.style & SWT.RIGHT_TO_LEFT) == 0) && x <= (int) x_win[0])
                   || (((parent.style & SWT.RIGHT_TO_LEFT) != 0) && (int) x_win[0] <= x + width)) {
                 isArrow = true;
               }
             } else if (widget == arrowHandle) {
               isArrow = true;
               topHandle = widget;
               /*
                * Feature in GTK. ArrowButton stays in toggled state if there is no popup menu.
                * It is required to set back the state of arrow to normal state after it is clicked.
                */
               OS.g_signal_handlers_block_matched(
                   widget, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CLICKED);
               OS.gtk_toggle_button_set_active(widget, false);
               OS.g_signal_handlers_unblock_matched(
                   widget, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CLICKED);
             }
             if (isArrow) {
               event.detail = SWT.ARROW;
               event.x = OS.GTK_WIDGET_X(topHandle);
               if ((parent.style & SWT.MIRRORED) != 0)
                 event.x = parent.getClientWidth() - OS.GTK_WIDGET_WIDTH(topHandle) - event.x;
               event.y = OS.GTK_WIDGET_Y(topHandle) + OS.GTK_WIDGET_HEIGHT(topHandle);
             }
             break;
           }
       }
       OS.gdk_event_free(eventPtr);
     }
   }
   if ((style & SWT.RADIO) != 0) {
     if ((parent.getStyle() & SWT.NO_RADIO_GROUP) == 0) {
       selectRadio();
     }
   }
   sendSelectionEvent(SWT.Selection, event, false);
   return 0;
 }
예제 #6
0
 /**
  * Returns a rectangle describing the receiver's size and location relative to its parent.
  *
  * @return the receiver's bounding rectangle
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public Rectangle getBounds() {
   checkWidget();
   parent.forceResize();
   long /*int*/ topHandle = topHandle();
   int x, y, width, height;
   x = OS.GTK_WIDGET_X(topHandle);
   y = OS.GTK_WIDGET_Y(topHandle);
   width = OS.GTK_WIDGET_WIDTH(topHandle);
   height = OS.GTK_WIDGET_HEIGHT(topHandle);
   if ((parent.style & SWT.MIRRORED) != 0) x = parent.getClientWidth() - width - x;
   if ((style & SWT.SEPARATOR) != 0 && control != null) height = Math.max(height, 23);
   return new Rectangle(x, y, width, height);
 }
예제 #7
0
 boolean isTabGroup() {
   ToolItem[] tabList = parent._getTabItemList();
   if (tabList != null) {
     for (int i = 0; i < tabList.length; i++) {
       if (tabList[i] == this) return true;
     }
   }
   if ((style & SWT.SEPARATOR) != 0) return true;
   int index = parent.indexOf(this);
   if (index == 0) return true;
   ToolItem previous = parent.getItem(index - 1);
   return (previous.getStyle() & SWT.SEPARATOR) != 0;
 }
예제 #8
0
 void createHandle(int index) {
   int parentHandle = parent.handle;
   if ((style & SWT.SEPARATOR) != 0) {
     int orientation = (parent.style & SWT.HORIZONTAL) != 0 ? OS.XmVERTICAL : OS.XmHORIZONTAL;
     int[] argList = {
       OS.XmNheight,
       orientation == OS.XmVERTICAL ? DEFAULT_HEIGHT : DEFAULT_SEPARATOR_WIDTH,
       OS.XmNwidth,
       orientation == OS.XmHORIZONTAL ? DEFAULT_WIDTH : DEFAULT_SEPARATOR_WIDTH,
       OS.XmNancestorSensitive,
       1,
       OS.XmNpositionIndex,
       index,
       OS.XmNorientation,
       orientation,
       OS.XmNseparatorType,
       (parent.style & SWT.FLAT) != 0 ? OS.XmSHADOW_ETCHED_IN : OS.XmSHADOW_ETCHED_OUT,
     };
     handle = OS.XmCreateSeparator(parentHandle, null, argList, argList.length / 2);
     if (handle == 0) error(SWT.ERROR_NO_HANDLES);
     return;
   }
   int[] argList = {
     OS.XmNwidth,
     DEFAULT_WIDTH,
     OS.XmNheight,
     DEFAULT_HEIGHT,
     OS.XmNrecomputeSize,
     0,
     OS.XmNhighlightThickness,
     (parent.style & SWT.NO_FOCUS) != 0 ? 0 : 1,
     OS.XmNmarginWidth,
     2,
     OS.XmNmarginHeight,
     1,
     OS.XmNtraversalOn,
     (parent.style & SWT.NO_FOCUS) != 0 ? 0 : 1,
     OS.XmNpositionIndex,
     index,
     OS.XmNshadowType,
     OS.XmSHADOW_OUT,
     OS.XmNancestorSensitive,
     1,
   };
   handle = OS.XmCreateDrawnButton(parentHandle, null, argList, argList.length / 2);
   if (handle == 0) error(SWT.ERROR_NO_HANDLES);
   Control control = parent.findBackgroundControl();
   if (control == null) control = parent;
   setBackgroundPixel(parent.getBackgroundPixel());
 }
예제 #9
0
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
  * @param width the new width
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setWidth(int width) {
   checkWidget();
   if ((style & SWT.SEPARATOR) == 0) return;
   if (width < 0 || this.width == width) return;
   this.width = width;
   parent.relayout();
 }
예제 #10
0
 int XButtonRelease(int w, int client_data, int call_data, int continue_to_dispatch) {
   display.hideToolTip();
   XButtonEvent xEvent = new XButtonEvent();
   OS.memmove(xEvent, call_data, XButtonEvent.sizeof);
   /*
    * Forward the mouse event to the parent.
    * This is necessary so that mouse listeners
    * in the parent will be called, despite the
    * fact that the event did not really occur
    * in X in the parent.  This is done to be
    * compatible with Windows.
    */
   int[] argList = {OS.XmNx, 0, OS.XmNy, 0};
   OS.XtGetValues(handle, argList, argList.length / 2);
   xEvent.window = OS.XtWindow(parent.handle);
   xEvent.x += argList[1];
   xEvent.y += argList[3];
   OS.memmove(call_data, xEvent, XButtonEvent.sizeof);
   int result = parent.XButtonRelease(w, client_data, call_data, continue_to_dispatch);
   xEvent.x -= argList[1];
   xEvent.y -= argList[3];
   if (result == 0 && xEvent.button == 1) {
     int[] argList2 = {OS.XmNwidth, 0, OS.XmNheight, 0};
     OS.XtGetValues(handle, argList2, argList2.length / 2);
     int width = argList2[1], height = argList2[3];
     if (0 <= xEvent.x && xEvent.x < width && 0 <= xEvent.y && xEvent.y < height) {
       click(xEvent.x > width - 12, xEvent.state);
     }
     setDrawPressed(set);
   }
   return result;
 }
예제 #11
0
  /**
   * Sets the selection state of the receiver.
   *
   * <p>When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it is selected when
   * it is checked (which some platforms draw as a pushed in button).
   *
   * @param selected the new selection state
   * @exception SWTException
   *     <ul>
   *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
   *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
   *     </ul>
   */
  public void setSelection(boolean selected) {
    checkWidget();
    if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
    long /*int*/ hwnd = parent.handle;
    int fsState = (int) /*64*/ OS.SendMessage(hwnd, OS.TB_GETSTATE, id, 0);
    /*
     * Feature in Windows.  When TB_SETSTATE is used to set the
     * state of a tool item, the item redraws even when the state
     * has not changed.  The fix is to detect this case and avoid
     * setting the state.
     */
    if (((fsState & OS.TBSTATE_CHECKED) != 0) == selected) return;
    if (selected) {
      fsState |= OS.TBSTATE_CHECKED;
    } else {
      fsState &= ~OS.TBSTATE_CHECKED;
    }
    OS.SendMessage(hwnd, OS.TB_SETSTATE, id, fsState);

    /*
     * Bug in Windows.  When a tool item with the style
     * BTNS_CHECK or BTNS_CHECKGROUP is selected and then
     * disabled, the item does not draw using the disabled
     * image.  The fix is to use the disabled image in all
     * image lists for the item.
     *
     * NOTE: This means that the image list must be updated
     * when the selection changes in a disabled tool item.
     */
    if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
      if (!getEnabled() || !parent.getEnabled()) {
        updateImages(false);
      }
    }
  }
예제 #12
0
 public void setImage(Image image) {
   checkWidget();
   if ((style & SWT.SEPARATOR) != 0) return;
   if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
   super.setImage(image);
   updateImages(getEnabled() && parent.getEnabled());
 }
예제 #13
0
 /**
  * Sets the receiver's text. The string may include the mnemonic character.
  *
  * <p>Mnemonics are indicated by an '&amp;' that causes the next character to be the mnemonic.
  * When the user presses a key sequence that matches the mnemonic, a selection event occurs. On
  * most platforms, the mnemonic appears underlined but may be emphasised in a platform specific
  * manner. The mnemonic indicator character '&amp;' can be escaped by doubling it in the string,
  * causing a single '&amp;' to be displayed.
  *
  * @param string the new text
  * @exception IllegalArgumentException
  *     <ul>
  *       <li>ERROR_NULL_ARGUMENT - if the text is null
  *     </ul>
  *
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setText(String string) {
   checkWidget();
   if (string == null) error(SWT.ERROR_NULL_ARGUMENT);
   if ((style & SWT.SEPARATOR) != 0) return;
   if (string.equals(this.text)) return;
   super.setText(string);
   if (labelHandle == 0) return;
   char[] chars = fixMnemonic(string);
   byte[] buffer = Converter.wcsToMbcs(null, chars, true);
   OS.gtk_label_set_text_with_mnemonic(labelHandle, buffer);
   if ((style & SWT.DROP_DOWN) != 0 && OS.GTK_VERSION < OS.VERSION(2, 6, 0)) {
     if (string.length() != 0) {
       OS.gtk_widget_show(labelHandle);
     } else {
       OS.gtk_widget_hide(labelHandle);
     }
   }
   /*
    * If Text/Image of a tool-item changes, then it is
    * required to reset the proxy menu. Otherwise, the
    * old menuItem appears in the overflow menu.
    */
   if ((style & SWT.DROP_DOWN) != 0) {
     proxyMenuItem = 0;
     proxyMenuItem = OS.gtk_tool_item_retrieve_proxy_menu_item(handle);
     OS.g_signal_connect(
         proxyMenuItem, OS.activate, ToolBar.menuItemSelectedFunc.getAddress(), handle);
   }
   parent.relayout();
 }
예제 #14
0
 /**
  * Enables the receiver if the argument is <code>true</code>, and disables it otherwise.
  *
  * <p>A disabled control is typically not selectable from the user interface and draws with an
  * inactive or "grayed" look.
  *
  * @param enabled the new enabled state
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setEnabled(boolean enabled) {
   checkWidget();
   long /*int*/ topHandle = topHandle();
   if (OS.GTK_WIDGET_SENSITIVE(topHandle) == enabled) return;
   OS.gtk_widget_set_sensitive(topHandle, enabled);
   if (enabled) {
     /*
      * Bug in GTK.  GtkButton requires an enter notify before it
      * allows the button to be pressed, but events are dropped when
      * widgets are insensitive.  The fix is to hide and show the
      * button if the pointer is within its bounds.
      */
     int[] x = new int[1], y = new int[1];
     OS.gdk_window_get_pointer(parent.paintWindow(), x, y, null);
     if (getBounds().contains(x[0], y[0])) {
       OS.gtk_widget_hide(handle);
       OS.gtk_widget_show(handle);
     }
   } else {
     /*
      * Bug in GTK. Starting with 2.14, if a button is disabled
      * through on a button press, the field which keeps track
      * whether the pointer is currently in the button is never updated.
      * As a result, when it is re-enabled it automatically enters
      * a PRELIGHT state. The fix is to set a NORMAL state.
      */
     if (OS.GTK_VERSION >= OS.VERSION(2, 14, 0)) {
       OS.gtk_widget_set_state(topHandle, OS.GTK_STATE_NORMAL);
     }
   }
 }
예제 #15
0
 int XKeyPress(int w, int client_data, int call_data, int continue_to_dispatch) {
   int result = 0;
   XKeyEvent xEvent = new XKeyEvent();
   OS.memmove(xEvent, call_data, XKeyEvent.sizeof);
   int[] keysym = new int[1];
   OS.XLookupString(xEvent, null, 0, keysym, null);
   keysym[0] &= 0xFFFF;
   switch (keysym[0]) {
     case OS.XK_space:
       click(false, xEvent.state);
       result = 1;
       break;
     case OS.XK_Down:
       if ((style & SWT.DROP_DOWN) != 0) {
         click(true, xEvent.state);
         result = 1;
       }
       break;
   }
   /*
    * Forward the key event to the parent.
    * This is necessary so that key listeners
    * in the parent will be called, despite the
    * fact that the event did not really occur
    * in X in the parent.  This is done to be
    * compatible with Windows.
    */
   xEvent.window = OS.XtWindow(parent.handle);
   //	OS.memmove (callData, xEvent, XKeyEvent.sizeof);
   parent.XKeyPress(w, client_data, call_data, continue_to_dispatch);
   if (result == 1) {
     OS.memmove(continue_to_dispatch, new int[1], 4);
   }
   return result;
 }
예제 #16
0
  int XPointerMotion(int w, int client_data, int call_data, int continue_to_dispatch) {
    display.addMouseHoverTimeOut(handle);

    /*
     * Forward the mouse event to the parent.
     * This is necessary so that mouse listeners
     * in the parent will be called, despite the
     * fact that the event did not really occur
     * in X in the parent.  This is done to be
     * compatible with Windows.
     */
    XMotionEvent xEvent = new XMotionEvent();
    OS.memmove(xEvent, call_data, XMotionEvent.sizeof);
    int[] argList = {OS.XmNx, 0, OS.XmNy, 0};
    OS.XtGetValues(handle, argList, argList.length / 2);
    xEvent.window = OS.XtWindow(parent.handle);
    xEvent.x += argList[1];
    xEvent.y += argList[3];
    /*
     * This code is intentionally commented.
     * Currently, the implementation of the
     * mouse move code in the parent interferes
     * with tool tips for tool items.
     */
    //	OS.memmove (callData, xEvent, XButtonEvent.sizeof);
    //	parent.XPointerMotion (w, client_data, call_data, continue_to_dispatch);
    if (!parent.sendMouseEvent(SWT.MouseMove, xEvent)) {
      OS.memmove(continue_to_dispatch, new int[1], 4);
      return 1;
    }
    return 0;
  }
예제 #17
0
 /**
  * Sets the control that is used to fill the bounds of the item when the item is a <code>SEPARATOR
  * </code>.
  *
  * @param control the new control
  * @exception IllegalArgumentException
  *     <ul>
  *       <li>ERROR_INVALID_ARGUMENT - if the control has been disposed
  *       <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree
  *     </ul>
  *
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setControl(Control control) {
   checkWidget();
   if (control != null) {
     if (control.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
     if (control.parent != parent) error(SWT.ERROR_INVALID_PARENT);
   }
   if ((style & SWT.SEPARATOR) == 0) return;
   if (this.control == control) return;
   this.control = control;
   int[] argList = {
     OS.XmNseparatorType,
     control == null
         ? ((parent.style & SWT.FLAT) != 0 ? OS.XmSHADOW_ETCHED_IN : OS.XmSHADOW_ETCHED_OUT)
         : OS.XmNO_LINE,
   };
   OS.XtSetValues(handle, argList, argList.length / 2);
   if (control != null && !control.isDisposed()) {
     /*
      * It is possible that the control was created with a
      * z-order below that of the current tool item. In this
      * case, the control is not visible because it is
      * obscured by the tool item. The fix is to move the
      * control above this tool item in the z-order.
      * The code below is similar to the code found in
      * setZOrder.
      */
     int xDisplay = OS.XtDisplay(handle);
     if (xDisplay == 0) return;
     if (!OS.XtIsRealized(handle)) {
       Shell shell = parent.getShell();
       shell.realizeWidget();
     }
     int topHandle1 = control.topHandle();
     int window1 = OS.XtWindow(topHandle1);
     if (window1 == 0) return;
     int topHandle2 = this.topHandle();
     int window2 = OS.XtWindow(topHandle2);
     if (window2 == 0) return;
     XWindowChanges struct = new XWindowChanges();
     struct.sibling = window2;
     struct.stack_mode = OS.Above;
     int screen = OS.XDefaultScreen(xDisplay);
     int flags = OS.CWStackMode | OS.CWSibling;
     OS.XReconfigureWMWindow(xDisplay, window1, screen, flags, struct);
   }
   parent.relayout();
 }
예제 #18
0
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
  * @param width the new width. If the new value is <code>SWT.DEFAULT</code>, the width is a
  *     fixed-width area whose amount is determined by the platform. If the new value is 0 a
  *     vertical or horizontal line will be drawn, depending on the setting of the corresponding
  *     style bit (<code>SWT.VERTICAL</code> or <code>SWT.HORIZONTAL</code>). If the new value is
  *     <code>SWT.SEPARATOR_FILL</code> a variable-width space is inserted that acts as a spring
  *     between the two adjoining items which will push them out to the extent of the containing
  *     ToolBar.
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setWidth(int width) {
   checkWidget();
   if ((style & SWT.SEPARATOR) == 0) return;
   if (width < 0) return;
   boolean isVertical = (parent.style & SWT.VERTICAL) != 0;
   OS.gtk_widget_set_size_request(handle, width, isVertical ? 6 : 15);
   parent.relayout();
 }
예제 #19
0
 void releaseWidget() {
   super.releaseWidget();
   if (parent.currentFocusItem == this) parent.currentFocusItem = null;
   parent = null;
   control = null;
   hotImage = disabledImage = null;
   toolTipText = null;
 }
예제 #20
0
 /**
  * Sets the receiver's text. The string may include the mnemonic character.
  *
  * <p>Mnemonics are indicated by an '&amp;' that causes the next character to be the mnemonic.
  * When the user presses a key sequence that matches the mnemonic, a selection event occurs. On
  * most platforms, the mnemonic appears underlined but may be emphasised in a platform specific
  * manner. The mnemonic indicator character '&amp;' can be escaped by doubling it in the string,
  * causing a single '&amp;' to be displayed.
  *
  * @param string the new text
  * @exception IllegalArgumentException
  *     <ul>
  *       <li>ERROR_NULL_ARGUMENT - if the text is null
  *     </ul>
  *
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setText(String string) {
   checkWidget();
   if (string == null) error(SWT.ERROR_NULL_ARGUMENT);
   if ((style & SWT.SEPARATOR) != 0) return;
   super.setText(string);
   parent.relayout();
   redraw();
 }
예제 #21
0
 /**
  * Enables the receiver if the argument is <code>true</code>, and disables it otherwise.
  *
  * <p>A disabled control is typically not selectable from the user interface and draws with an
  * inactive or "grayed" look.
  *
  * @param enabled the new enabled state
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setEnabled(boolean enabled) {
   checkWidget();
   OS.UIElement_IsEnabled(handle, enabled);
   updateImages(enabled && parent.getEnabled());
   if (arrowHandle != 0) {
     OS.UIElement_Opacity(arrowHandle, enabled ? 1 : 0.4);
   }
 }
예제 #22
0
 void releaseWidget() {
   super.releaseWidget();
   display.releaseToolTipHandle(handle);
   if (parent.lastFocus == this) parent.lastFocus = null;
   control = null;
   toolTipText = null;
   image = disabledImage = hotImage = null;
 }
예제 #23
0
 public void setImage(Image image) {
   checkWidget();
   if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
   if ((style & SWT.SEPARATOR) != 0) return;
   super.setImage(image);
   parent.relayout();
   redraw();
 }
예제 #24
0
 int hoverProc(int id) {
   boolean showTip = toolTipText != null;
   parent.hoverProc(id, !showTip);
   if (showTip) {
     display.showToolTip(handle, toolTipText);
   }
   return 0;
 }
예제 #25
0
 boolean setTabItemFocus() {
   if (parent.setTabItemFocus()) {
     long /*int*/ hwnd = parent.handle;
     int index = (int) /*64*/ OS.SendMessage(hwnd, OS.TB_COMMANDTOINDEX, id, 0);
     OS.SendMessage(hwnd, OS.TB_SETHOTITEM, index, 0);
     return true;
   }
   return false;
 }
예제 #26
0
 LRESULT wmCommandChild(long /*int*/ wParam, long /*int*/ lParam) {
   if ((style & SWT.RADIO) != 0) {
     if ((parent.getStyle() & SWT.NO_RADIO_GROUP) == 0) {
       selectRadio();
     }
   }
   sendSelectionEvent(SWT.Selection);
   return null;
 }
예제 #27
0
 /**
  * Constructs a new instance of this class given its parent (which must be a <code>ToolBar</code>
  * ), a style value describing its behavior and appearance, and the index at which to place it in
  * the items maintained by its parent.
  *
  * <p>The style value is either one of the style constants defined in class <code>SWT</code> which
  * is applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing together
  * (that is, using the <code>int</code> "|" operator) two or more of those <code>SWT</code> style
  * constants. The class description lists the style constants that are applicable to the class.
  * Style bits are also inherited from superclasses.
  *
  * @param parent a composite control which will be the parent of the new instance (cannot be null)
  * @param style the style of control to construct
  * @param index the zero-relative index to store the receiver in its parent
  * @exception IllegalArgumentException
  *     <ul>
  *       <li>ERROR_NULL_ARGUMENT - if the parent is null
  *       <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the
  *           parent (inclusive)
  *     </ul>
  *
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent
  *       <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass
  *     </ul>
  *
  * @see SWT#PUSH
  * @see SWT#CHECK
  * @see SWT#RADIO
  * @see SWT#SEPARATOR
  * @see SWT#DROP_DOWN
  * @see Widget#checkSubclass
  * @see Widget#getStyle
  */
 public ToolItem(ToolBar parent, int style, int index) {
   super(parent, checkStyle(style));
   this.parent = parent;
   int count = parent.getItemCount();
   if (!(0 <= index && index <= count)) {
     error(SWT.ERROR_INVALID_RANGE);
   }
   createWidget(index);
 }
예제 #28
0
 void selectRadio() {
   int index = 0;
   ToolItem[] items = parent.getItems();
   while (index < items.length && items[index] != this) index++;
   int i = index - 1;
   while (i >= 0 && items[i].setRadioSelection(false)) --i;
   int j = index + 1;
   while (j < items.length && items[j].setRadioSelection(false)) j++;
   setSelection(true);
 }
예제 #29
0
 /**
  * Sets the control that is used to fill the bounds of the item when the item is a <code>SEPARATOR
  * </code>.
  *
  * @param control the new control
  * @exception IllegalArgumentException
  *     <ul>
  *       <li>ERROR_INVALID_ARGUMENT - if the control has been disposed
  *       <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree
  *     </ul>
  *
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setControl(Control control) {
   checkWidget();
   if (control != null) {
     if (control.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
     if (control.parent != parent) error(SWT.ERROR_INVALID_PARENT);
   }
   if ((style & SWT.SEPARATOR) == 0) return;
   if (this.control == control) return;
   this.control = control;
   parent.relayout();
 }
예제 #30
0
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
  * @param width the new width. If the new value is <code>SWT.DEFAULT</code>, the width is a
  *     fixed-width area whose amount is determined by the platform. If the new value is 0 a
  *     vertical or horizontal line will be drawn, depending on the setting of the corresponding
  *     style bit (<code>SWT.VERTICAL</code> or <code>SWT.HORIZONTAL</code>). If the new value is
  *     <code>SWT.SEPARATOR_FILL</code> a variable-width space is inserted that acts as a spring
  *     between the two adjoining items which will push them out to the extent of the containing
  *     ToolBar.
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setWidth(int width) {
   checkWidget();
   if ((style & SWT.SEPARATOR) == 0) return;
   if (width < 0) return;
   long /*int*/ hwnd = parent.handle;
   TBBUTTONINFO info = new TBBUTTONINFO();
   info.cbSize = TBBUTTONINFO.sizeof;
   info.dwMask = OS.TBIF_SIZE;
   info.cx = cx = (short) width;
   OS.SendMessage(hwnd, OS.TB_SETBUTTONINFO, id, info);
   parent.layoutItems();
 }