📄 dialog.java
字号:
* * @param parentShell * object that returns the current parent shell * * @since 3.1 */ protected Dialog(IShellProvider parentShell) { super(parentShell); setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | getDefaultOrientation()); setBlockOnOpen(true); } /** * Notifies that this dialog's button with the given id has been pressed. * <p> * The <code>Dialog</code> implementation of this framework method calls * <code>okPressed</code> if the ok button is the pressed, and * <code>cancelPressed</code> if the cancel button is the pressed. All * other button presses are ignored. Subclasses may override to handle other * buttons, but should call <code>super.buttonPressed</code> if the * default handling of the ok and cancel buttons is desired. * </p> * * @param buttonId * the id of the button that was pressed (see * <code>IDialogConstants.*_ID</code> constants) */ protected void buttonPressed(int buttonId) { if (IDialogConstants.OK_ID == buttonId) { okPressed(); } else if (IDialogConstants.CANCEL_ID == buttonId) { cancelPressed(); } } /** * Notifies that the cancel button of this dialog has been pressed. * <p> * The <code>Dialog</code> implementation of this framework method sets * this dialog's return code to <code>Window.CANCEL</code> and closes the * dialog. Subclasses may override if desired. * </p> */ protected void cancelPressed() { setReturnCode(CANCEL); close(); } /** * Returns the number of pixels corresponding to the height of the given * number of characters. * <p> * This method may only be called after <code>initializeDialogUnits</code> * has been called. * </p> * <p> * Clients may call this framework method, but should not override it. * </p> * * @param chars * the number of characters * @return the number of pixels */ protected int convertHeightInCharsToPixels(int chars) { // test for failure to initialize for backward compatibility if (fontMetrics == null) { return 0; } return convertHeightInCharsToPixels(fontMetrics, chars); } /** * Returns the number of pixels corresponding to the given number of * horizontal dialog units. * <p> * This method may only be called after <code>initializeDialogUnits</code> * has been called. * </p> * <p> * Clients may call this framework method, but should not override it. * </p> * * @param dlus * the number of horizontal dialog units * @return the number of pixels */ protected int convertHorizontalDLUsToPixels(int dlus) { // test for failure to initialize for backward compatibility if (fontMetrics == null) { return 0; } return convertHorizontalDLUsToPixels(fontMetrics, dlus); } /** * Returns the number of pixels corresponding to the given number of * vertical dialog units. * <p> * This method may only be called after <code>initializeDialogUnits</code> * has been called. * </p> * <p> * Clients may call this framework method, but should not override it. * </p> * * @param dlus * the number of vertical dialog units * @return the number of pixels */ protected int convertVerticalDLUsToPixels(int dlus) { // test for failure to initialize for backward compatibility if (fontMetrics == null) { return 0; } return convertVerticalDLUsToPixels(fontMetrics, dlus); } /** * Returns the number of pixels corresponding to the width of the given * number of characters. * <p> * This method may only be called after <code>initializeDialogUnits</code> * has been called. * </p> * <p> * Clients may call this framework method, but should not override it. * </p> * * @param chars * the number of characters * @return the number of pixels */ protected int convertWidthInCharsToPixels(int chars) { // test for failure to initialize for backward compatibility if (fontMetrics == null) { return 0; } return convertWidthInCharsToPixels(fontMetrics, chars); } /** * Creates a new button with the given id. * <p> * The <code>Dialog</code> implementation of this framework method creates * a standard push button, registers it for selection events including * button presses, and registers default buttons with its shell. The button * id is stored as the button's client data. If the button id is * <code>IDialogConstants.CANCEL_ID</code>, the new button will be * accessible from <code>getCancelButton()</code>. If the button id is * <code>IDialogConstants.OK_ID</code>, the new button will be accesible * from <code>getOKButton()</code>. Note that the parent's layout is * assumed to be a <code>GridLayout</code> and the number of columns in * this layout is incremented. Subclasses may override. * </p> * * @param parent * the parent composite * @param id * the id of the button (see <code>IDialogConstants.*_ID</code> * constants for standard dialog button ids) * @param label * the label from the button * @param defaultButton * <code>true</code> if the button is to be the default button, * and <code>false</code> otherwise * * @return the new button * * @see #getCancelButton * @see #getOKButton() */ protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { // increment the number of columns in the button bar ((GridLayout) parent.getLayout()).numColumns++; Button button = new Button(parent, SWT.PUSH); button.setText(label); button.setFont(JFaceResources.getDialogFont()); button.setData(new Integer(id)); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { buttonPressed(((Integer) event.widget.getData()).intValue()); } }); if (defaultButton) { Shell shell = parent.getShell(); if (shell != null) { shell.setDefaultButton(button); } } buttons.put(new Integer(id), button); setButtonLayoutData(button); return button; } /** * Creates and returns the contents of this dialog's button bar. * <p> * The <code>Dialog</code> implementation of this framework method lays * out a button bar and calls the <code>createButtonsForButtonBar</code> * framework method to populate it. Subclasses may override. * </p> * <p> * The returned control's layout data must be an instance of * <code>GridData</code>. * </p> * * @param parent * the parent composite to contain the button bar * @return the button bar control */ protected Control createButtonBar(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); // create a layout with spacing and margins appropriate for the font // size. GridLayout layout = new GridLayout(); layout.numColumns = 0; // this is incremented by createButton layout.makeColumnsEqualWidth = true; layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); composite.setLayout(layout); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER); composite.setLayoutData(data); composite.setFont(parent.getFont()); // Add the buttons to the button bar. createButtonsForButtonBar(composite); return composite; } /** * Adds buttons to this dialog's button bar. * <p> * The <code>Dialog</code> implementation of this framework method adds * standard ok and cancel buttons using the <code>createButton</code> * framework method. These standard buttons will be accessible from * <code>getCancelButton</code>, and <code>getOKButton</code>. * Subclasses may override. * </p> * * @param parent * the button bar composite */ protected void createButtonsForButtonBar(Composite parent) { // create OK and Cancel buttons by default createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } /* * @see Window.initializeBounds() */ protected void initializeBounds() { String platform = SWT.getPlatform(); if ("carbon".equals(platform)) { //$NON-NLS-1$ // On Mac OS X the default button must be the right-most button Shell shell = getShell(); if (shell != null) { Button defaultButton = shell.getDefaultButton(); if (defaultButton != null && isContained(buttonBar, defaultButton)) { defaultButton.moveBelow(null); } } } // Store the computed size for the dialog. Must be done here before // any dialog settings are applied. We don't do this in the create methods // because the dialog font is applied after creation and before the bounds // are initialized. computedSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT, true); super.initializeBounds(); } /** * Returns true if the given Control is a direct or indirect child of * container. * * @param container * the potential parent * @param control * @return boolean <code>true</code> if control is a child of container */ private boolean isContained(Control container, Control control) { Composite parent; while ((parent = control.getParent()) != null) { if (parent == container) { return true; } control = parent; } return false; } /** * The <code>Dialog</code> implementation of this <code>Window</code> * method creates and lays out the top level composite for the dialog, and * determines the appropriate horizontal and vertical dialog units based on * the font size. It then calls the <code>createDialogArea</code> and * <code>createButtonBar</code> methods to create the dialog area and * button bar, respectively. Overriding <code>createDialogArea</code> and * <code>createButtonBar</code> are recommended rather than overriding * this method. */ protected Control createContents(Composite parent) { // create the top level composite for the dialog Composite composite = new Composite(parent, 0); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.verticalSpacing = 0; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); applyDialogFont(composite); // initialize the dialog units initializeDialogUnits(composite); // create the dialog area and button bar dialogArea = createDialogArea(composite); buttonBar = createButtonBar(composite); return composite; } /** * Creates and returns the contents of the upper part of this dialog (above * the button bar). * <p> * The <code>Dialog</code> implementation of this framework method creates * and returns a new <code>Composite</code> with standard margins and * spacing. * </p> * <p> * The returned control's layout data must be an instance of * <code>GridData</code>. This method must not modify the parent's * layout. * </p> * <p> * Subclasses must override this method but may call <code>super</code> as * in the following example: * </p> * * <pre> * Composite composite = (Composite) super.createDialogArea(parent); * //add controls to composite as necessary * return composite; * </pre> * * @param parent * the parent composite to contain the dialog area * @return the dialog area control */ protected Control createDialogArea(Composite parent) { // create a composite with standard margins and spacing Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); applyDialogFont(composite); return composite; } /** * Returns the button created by the method <code>createButton</code> for * the specified ID as defined on <code>IDialogConstants</code>. If * <code>createButton</code> was never called with this ID, or if * <code>createButton</code> is overridden, this method will return * <code>null</code>. * * @param id * the id of the button to look for * * @return the button for the ID or <code>null</code> * * @see #createButton(Composite, int, String, boolean) * @since 2.0 */ protected Button getButton(int id) { return (Button) buttons.get(new Integer(id)); } /** * Returns the button bar control. * <p> * Clients may call this framework method, but should not override it. * </p> * * @return the button bar, or <code>null</code> if the button bar has not * been created yet */ protected Control getButtonBar() { return buttonBar; } /** * Returns the button created when <code>createButton</code> is called * with an ID of <code>IDialogConstants.CANCEL_ID</code>. If * <code>createButton</code> was never called with this parameter, or if * <code>createButton</code> is overridden, <code>getCancelButton</code> * will return <code>null</code>. * * @return the cancel button or <code>null</code> * * @see #createButton(Composite, int, String, boolean) * @since 2.0 * @deprecated Use <code>getButton(IDialogConstants.CANCEL_ID)</code> * instead. This method will be removed soon. */ protected Button getCancelButton() { return getButton(IDialogConstants.CANCEL_ID); } /** * Returns the dialog area control. * <p> * Clients may call this framework method, but should not override it. * </p> * * @return the dialog area, or <code>null</code> if the dialog area has * not been created yet */ protected Control getDialogArea() { return dialogArea; } /** * Returns the standard dialog image with the given key. Note that these * images are managed by the dialog framework, and must not be disposed by * another party. * * @param key * one of the <code>Dialog.DLG_IMG_* </code> constants * @return the standard dialog image */ public static Image getImage(String key) { return JFaceResources.getImageRegistry().get(key); } /** * Returns the button created when <code>createButton</code> is called * with an ID of <code>IDialogConstants.OK_ID</code>. If * <code>createButton</code> was never called with this parameter, or if * <code>createButton</code> is overridden, <code>getOKButton</code> * will return <code>null</code>. * * @return the OK button or <code>null</code> * * @see #createButton(Composite, int, String, boolean) * @since 2.0 * @deprecated Use <code>getButton(IDialogConstants.OK_ID)</code> instead. * This method will be removed soon. */ protected Button getOKButton() { return getButton(IDialogConstants.OK_ID); } /** * Initializes the computation of horizontal and vertical dialog units based * on the size of current font. * <p> * This method must be called before any of the dialog unit based conversion * methods are called. * </p> * * @param control * a control from which to obtain the current font */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -