Skip to content
Browse files

Dialog RTL as submitted by Dmitry Natenberg

  • Loading branch information...
1 parent bb13c87 commit 45eb906c04390fdae49cd971ff2fc92656d24a31 unknown committed
View
4 nbproject/genfiles.properties
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=0b4f7456
+build.xml.data.CRC32=29749b2f
build.xml.script.CRC32=cb918ffc
build.xml.stylesheet.CRC32=a56c6a5b@1.45.1
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=0b4f7456
+nbproject/build-impl.xml.data.CRC32=29749b2f
nbproject/build-impl.xml.script.CRC32=6a06ecb7
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.45.1
View
8 nbproject/project.xml
@@ -32,6 +32,14 @@
</run-dependency>
</dependency>
<dependency>
+ <code-name-base>org.openide.dialogs</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.18.1</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
<code-name-base>org.openide.modules</code-name-base>
<build-prerequisite/>
<compile-dependency/>
View
2 nbproject/suite.properties
@@ -1 +1 @@
-suite.dir=${basedir}/..
+suite.dir=${basedir}/../../APP
View
3 src/META-INF/services/org.openide.DialogDisplayer
@@ -0,0 +1,3 @@
+#-org.netbeans.core.windows.services.DialogDisplayerImpl
+org.nbrtl.dialog.RTLDialogDisplayerImpl
+#position=0
View
106 src/org/nbrtl/dialog/Bundle.properties
@@ -0,0 +1,106 @@
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+# Other names may be trademarks of their respective owners.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common
+# Development and Distribution License("CDDL") (collectively, the
+# "License"). You may not use this file except in compliance with the
+# License. You can obtain a copy of the License at
+# http://www.netbeans.org/cddl-gplv2.html
+# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+# specific language governing permissions and limitations under the
+# License. When distributing the software, include this License Header
+# Notice in each file and include the License file at
+# nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the GPL Version 2 section of the License file that
+# accompanied this code. If applicable, add the following below the
+# License Header, with the fields enclosed by brackets [] replaced by
+# your own identifying information:
+# "Portions Copyrighted [year] [name of copyright owner]"
+#
+# Contributor(s):
+#
+# The Original Software is NetBeans. The Initial Developer of the Original
+# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+# Microsystems, Inc. All Rights Reserved.
+#
+# If you wish your version of this file to be governed by only the CDDL
+# or only the GPL Version 2, indicate your decision by adding
+# "[Contributor] elects to include this software in this distribution
+# under the [CDDL or GPL Version 2] license." If you do not indicate a
+# single choice of license, a recipient has the option to distribute
+# your version of this file under either the CDDL, the GPL Version 2 or
+# to extend the choice of license to its licensees as provided above.
+# However, if you add GPL Version 2 code and therefore, elected the GPL
+# Version 2 license, then the option applies only if the new code is
+# made subject to such option by the copyright holder.
+
+OpenIDE-Module-Name=RTLDialog
+OpenIDE-Module-Short-Description=Implementation for RTL oriented dialogs support.
+OpenIDE-Module-Long-Description=Provides the DialogDisplayer of the window system part of the APIs.
+
+
+# ButtonBar/ButtonBarButton
+# Common Button labels
+OKButton=\u05d0\u05d9\u05e9\u05d5\u05e8
+CancelButton=\u05d1\u05d9\u05d8\u05d5\u05dc
+CloseButton=\u05e1\u05d2\u05d5\u05e8
+# HelpButton=Help
+YesButton=\u05db\u05df
+NoButton=\u05d0\u05dc
+# ApplyButton=Apply
+DetailsButton=\u05e4\u05e8\u05d8\u05d9\u05dd
+# ButtoBarButoo
+CTL_Button=\u05db\u05e4\u05ea\u05d5\u05e8
+
+# FileSelector
+CTL_FileSelectorOkButton=\u05d0\u05d9\u05e9\u05d5\u05e8
+CTL_FileSelectorCancelButton=\u05d1\u05d9\u05d8\u05d5\u05dc
+ACSD_FileSelectorOkButton=\u05d0\u05d9\u05e9\u05d5\u05e8
+ACSD_FileSelectorCancelButton=\u05d1\u05d9\u05d8\u05d5\u05dc
+ACSD_FileSelectorDialog=\u05d3\u05d9\u05d0\u05dc\u05d5\u05d2 \u05d1\u05d7\u05d9\u05e8\u05ea \u05e7\u05d1\u05e6\u05d9\u05dd
+ACSN_FileSelectorTreeView=\u05ea\u05e6\u05d5\u05d2\u05ea \u05e2\u05e5
+ACSD_FileSelectorTreeView=\u05ea\u05e6\u05d5\u05d2\u05ea \u05e2\u05e5 \u05d1\u05d1\u05d5\u05d7\u05e8 \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd
+
+# NbNodeOperationImpl
+CTL_Customizer_dialog_title=Customizer Dialog
+
+# NbPresenter/MbDialog
+CLOSED_OPTION_CAPTION=\u05e1\u05d2\u05d5\u05e8
+CANCEL_OPTION_CAPTION=\u05d1\u05d8\u05dc
+HELP_OPTION_CAPTION=\u05e2\u05d6\u05e8\u05d4
+NO_OPTION_CAPTION=\u05dc\u05d0
+OK_OPTION_CAPTION=\u05d0\u05d9\u05e9\u05d5\u05e8
+YES_OPTION_CAPTION=\u05db\u05df
+ACS_YES_OPTION_NAME=\u05db\u05df
+ACS_YES_OPTION_DESC=\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05df
+# - {0} message
+ACSD_ErrorMessage=\u05e9\u05d2\u05d9\u05d0\u05d4: {0}
+ACSD_WarningMessage=\u05d0\u05d6\u05d4\u05e8\u05d4: {0}
+ACSD_QuestionMessage=\u05e9\u05d0\u05dc\u05d4 {0}
+ACSD_InformationMessage=\u05de\u05d9\u05d3\u05e2 {0}
+ACSD_PlainMessage={0}
+
+ACS_CANCEL_OPTION_NAME=\u05d1\u05d9\u05d8\u05d5\u05dc
+ACS_CANCEL_OPTION_DESC=\u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05d9\u05d8\u05d5\u05dc
+
+ACS_OK_OPTION_NAME=\u05d0\u05d9\u05e9\u05d5\u05e8
+ACS_OK_OPTION_DESC=\u05db\u05e4\u05ea\u05d5\u05e8 \u05d0\u05d9\u05e9\u05d5\u05e8
+
+ACS_NO_OPTION_NAME=\u05dc\u05d0
+ACS_NO_OPTION_DESC=\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05dc\u05d0
+
+ACS_HELP_OPTION_NAME=\u05e2\u05d6\u05e8\u05d4
+ACS_HELP_OPTION_DESC=\u05db\u05e4\u05ea\u05d5\u05e8 \u05e2\u05d6\u05e8\u05d4
+
+ACS_CLOSED_OPTION_NAME=\u05e1\u05d2\u05d5\u05e8
+ACS_CLOSED_OPTION_DESC=\u05db\u05e4\u05ea\u05d5\u05e8 \u05e1\u05d2\u05d9\u05e8\u05d4
+
+InformationMessage=\u05d4\u05d5\u05d3\u05e2\u05d4
+WarningMessage=\u05d0\u05d6\u05d4\u05e8\u05d4
+ErrorMessage=\u05d4\u05d5\u05d3\u05e2\u05ea \u05e9\u05d2\u05d9\u05d0\u05d4
View
181 src/org/nbrtl/dialog/Constants.java
@@ -0,0 +1,181 @@
+package org.nbrtl.dialog;
+
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * The Original Software is NetBeans. The Initial Developer of the Original
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+ * Microsystems, Inc. All Rights Reserved.
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ */
+
+
+import java.awt.Dimension;
+import javax.swing.JSplitPane;
+//import org.netbeans.swing.tabcontrol.TabbedContainer;
+import org.openide.windows.TopComponent;
+
+/**
+ * Constants in window system.
+ *
+ * @author Peter Zavadsky
+ */
+public abstract class Constants {
+
+ /** Constant that identifies state of editor area */
+ public static final int EDITOR_AREA_JOINED = 0;
+ public static final int EDITOR_AREA_SEPARATED = 1;
+
+ /** Constant that identifies mode state. */
+ public static final int MODE_STATE_JOINED = 0;
+ public static final int MODE_STATE_SEPARATED = 1;
+
+// /** Constant that identifies mode kind */
+// public static final int MODE_KIND_EDITOR = TabbedContainer.TYPE_EDITOR;
+// public static final int MODE_KIND_VIEW = TabbedContainer.TYPE_VIEW;
+// public static final int MODE_KIND_SLIDING = TabbedContainer.TYPE_SLIDING;
+
+ /** Vertical orientation constant used in constraint. */
+ public static final int VERTICAL = JSplitPane.VERTICAL_SPLIT;
+ /** Horizontal orientation constant used in constraint. */
+ public static final int HORIZONTAL = JSplitPane.HORIZONTAL_SPLIT;
+
+ /** Sides of attaching, used both for regular modes and sliding modes */
+ public static final String TOP = JSplitPane.TOP;
+ public static final String BOTTOM = JSplitPane.BOTTOM;
+ public static final String LEFT = JSplitPane.LEFT;
+ public static final String RIGHT = JSplitPane.RIGHT;
+
+ /** Default value when value is not provided by UIManager */
+ public static final int DIVIDER_SIZE_VERTICAL = 4;
+ /** Default value when value is not provided by UIManager */
+ public static final int DIVIDER_SIZE_HORIZONTAL = 4;
+
+ /** Sets size of drop area (when splitting mode and around area). */
+ public static final int DROP_AREA_SIZE = 20;
+
+ /** How many pixels is necessary to drag to start the DnD. */
+ public static final int DRAG_GESTURE_START_DISTANCE = 10;
+ /** What time inmilliseconds is necessary to hold dragging mouse button for
+ & DnD to be started */
+ public static final int DRAG_GESTURE_START_TIME = 200;
+
+ // DnD drop ratios.
+ /** How big portion of the original mode has to be taken (range from 0.0 to 1.0). */
+ public static final double DROP_TO_SIDE_RATIO = 0.25D;
+ /** How big portion should take the new mode from each one (between which is dropped) (range from 0.0 to 1.0). */
+ public static final double DROP_BETWEEN_RATIO = 1.0D/3;
+ /** How big portion of entire area should take the dropped mode (range from 0.0 to 1.0). */
+ public static final double DROP_AROUND_RATIO = 0.25D;
+
+
+ /** Size of new separated mode when creting during DnD (separeted mode). */
+ public static final Dimension DROP_NEW_MODE_SIZE = new Dimension(300, 200);
+
+
+ /** Name of client property (of Boolean type) which says whether the TopComponent is allowed
+ * to be docked anywhere (even crossing view-editor border). */
+ public static final String TOPCOMPONENT_ALLOW_DOCK_ANYWHERE = "TopComponentAllowDockAnywhere"; // NOI18N
+
+ /** Name of client property (of Boolean type) which says whether position in model
+ * of the TopComponent which is nonpersistent when closed should be kept. */
+ public static final String KEEP_NON_PERSISTENT_TC_IN_MODEL_WHEN_CLOSED = "KeepNonPersistentTCInModelWhenClosed"; // NOI18N
+
+ /**
+ * Name of TopComponent's Boolean client property which forces the window system
+ * to respect TopComponent's preferred size when it is slided-in from left/right/bottom
+ * sliding bar when set to Boolean.TRUE. Otherwise the slided-in TopComponent
+ * will fill the entire width/length of the IDE window (the default behavior).
+ * This switch is intended for tools/palette windows like e.g. color chooser,
+ * tool picker etc.
+ *
+ * @since 6.22
+ */
+ public static final String KEEP_PREFERRED_SIZE_WHEN_SLIDED_IN = TopComponent.PROP_KEEP_PREFERRED_SIZE_WHEN_SLIDED_IN;
+
+ /**
+ * Name of TopComponent's Boolean client property which instructs the window system to activate
+ * the given TopComponent at startup time regardless which TopComponent was active at
+ * shutdown time. So it's usuable for welcome screen-like behavior.
+ * If more than one TopComponent has this property set to Boolean.TRUE then
+ * an arbitrary one will be selected and activated.
+ * @since 6.22
+ */
+ public static final String ACTIVATE_AT_STARTUP = "netbeans.winsys.tc.activate_at_startup"; //NOI18N
+
+ /** Client property to distinguish JWindows/JDialogs used as ui elements
+ * for separate modes - floating windows.
+ */
+ public static final String SEPARATE_WINDOW_PROPERTY = "SeparateWindow";
+
+ // System properties (switches):
+ /** Allows user to move <code>TopComponent</code>S between document and view modes,
+ * which is restricted otherwise. */
+ public static final boolean SWITCH_MODE_ADD_NO_RESTRICT = Boolean.getBoolean("netbeans.winsys.allow.dock.anywhere"); // NOI18N
+ /** Disables DnD of <code>TopComponent</code>S. */
+ public static final boolean SWITCH_DND_DISABLE = Boolean.getBoolean("netbeans.winsys.disable_dnd"); // NOI18N
+ /** During DnD it provides nicer feedback (fading of possible drop), however performance is worsen in that case. */
+ public static final boolean SWITCH_DROP_INDICATION_FADE = Boolean.getBoolean("netbeans.winsys.dndfade.on"); //NOI18N
+ /** Shows the status line at the end of menu bar instead of at the bottom of main window. */
+ public static final boolean SWITCH_STATUSLINE_IN_MENUBAR = Boolean.getBoolean("netbeans.winsys.statusLine.in.menuBar"); // NOI18N
+
+ /** Gets the image resource to be used in the empty editor area. */
+ public static final String SWITCH_IMAGE_SOURCE = System.getProperty("netbeans.winsys.imageSource"); // NOI18N
+
+ // XXX #37999
+ /** For view, do not show emty documents area, i.e. when no document is opened. */
+ public static final boolean SWITCH_HIDE_EMPTY_DOCUMENT_AREA = Boolean.getBoolean("netbeans.winsys.hideEmptyDocArea"); // NOI18N
+
+ /** Allowing complete removal of toolbars. */
+ public static final boolean NO_TOOLBARS = Boolean.getBoolean("netbeans.winsys.no_toolbars"); // NOI18N
+
+ /** File name whose InstanceCookie can contain custom menu bar component.*/
+ public static final String CUSTOM_MENU_BAR_PATH = System.getProperty("netbeans.winsys.menu_bar.path"); // NOI18N
+
+ /** File name whose InstanceCookie can contain custom status line component.*/
+ public static final String CUSTOM_STATUS_LINE_PATH = System.getProperty("netbeans.winsys.status_line.path"); // NOI18N
+
+ /** If set to true the help button will not be shown in the dialogs.*/
+ public static final boolean DO_NOT_SHOW_HELP_IN_DIALOGS = Boolean.getBoolean("netbeans.winsys.no_help_in_dialogs"); // NOI18N
+
+ /** True means automatic iconification/deiconification of all separate frames if main window is iconified/deiconified */
+ public static final boolean AUTO_ICONIFY = Boolean.getBoolean("netbeans.winsys.auto_iconify"); // NOI18N
+
+ private Constants() {}
+}
View
105 src/org/nbrtl/dialog/NbDialog.java
@@ -0,0 +1,105 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * The Original Software is NetBeans. The Initial Developer of the Original
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+ * Microsystems, Inc. All Rights Reserved.
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ */
+package org.nbrtl.dialog;
+
+
+import org.openide.DialogDescriptor;
+import org.openide.util.HelpCtx;
+
+import java.awt.*;
+import java.awt.event.ActionListener;
+
+// XXx Before as org.netbeans.core.NbDialog
+
+/** Default implementation of Dialog created from DialogDescriptor.
+*
+* @author Ian Formanek
+*/
+final class NbDialog extends NbPresenter {
+ static final long serialVersionUID =-4508637164126678997L;
+
+ /** Creates a new Dialog from specified DialogDescriptor
+ * @param d The DialogDescriptor to create the dialog from
+ * @param owner Owner of this dialog.
+ */
+ public NbDialog (DialogDescriptor d, Frame owner) {
+ super (d, owner, d.isModal ());
+ }
+
+ /** Creates a new Dialog from specified DialogDescriptor
+ * @param d The DialogDescriptor to create the dialog from
+ * @param owner Owner of this dialog.
+ */
+ public NbDialog (DialogDescriptor d, Dialog owner) {
+ super (d, owner, d.isModal ());
+ }
+
+ /** Geter for help.
+ */
+ @Override
+ protected HelpCtx getHelpCtx () {
+ return ((DialogDescriptor)descriptor).getHelpCtx ();
+ }
+
+ /** Options align.
+ */
+ @Override
+ protected int getOptionsAlign () {
+ return ((DialogDescriptor)descriptor).getOptionsAlign ();
+ }
+
+ /** Getter for button listener or null
+ */
+ @Override
+ protected ActionListener getButtonListener () {
+ return ((DialogDescriptor)descriptor).getButtonListener ();
+ }
+
+ /** Closing options.
+ */
+ @Override
+ protected Object[] getClosingOptions () {
+ return ((DialogDescriptor)descriptor).getClosingOptions ();
+ }
+}
View
1,532 src/org/nbrtl/dialog/NbPresenter.java
1,532 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
334 src/org/nbrtl/dialog/RTLDialogDisplayerImpl.java
@@ -0,0 +1,334 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * The Original Software is NetBeans. The Initial Developer of the Original
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+ * Microsystems, Inc. All Rights Reserved.
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ */
+package org.nbrtl.dialog;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dialog;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.KeyboardFocusManager;
+import java.awt.Window;
+import org.openide.DialogDescriptor;
+import org.openide.DialogDisplayer;
+import org.openide.NotifyDescriptor;
+import org.openide.util.Mutex;
+import org.openide.windows.WindowManager;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.swing.JRootPane;
+
+/**
+ * TODO: test all available cases of DialogDisplayer usage
+ * TODO: test Wizard
+ * TODO: check about FileSelector
+ * TODO: compile as NBM, install it into an application and test again
+ * TODO: add Russian and Hebrew languages via installer
+ * TODO: check the Input line presentation
+ * TODO: fix LEFT alignment in all the lables
+ */
+
+/**
+ * Implementation of <code>org.openide.DialogDisplayer</code>.
+ *
+ * @author Jesse Glick
+ * edited by Dmitry Natenberg
+ */
+//@ServiceProvider(service=DialogDisplayer.class)
+public class RTLDialogDisplayerImpl extends DialogDisplayer {
+
+ /** delayed runnables */
+ private static List<Runnable> run = Collections.synchronizedList(new ArrayList<Runnable>());
+ /** non-null if we are running in unit test and should no show any dialogs */
+ private Object testResult;
+
+ /** Creates a new instance of RTLDialogDisplayer */
+ public RTLDialogDisplayerImpl() {
+ this(null);
+ }
+
+ RTLDialogDisplayerImpl(Object testResult) {
+ this.testResult = testResult;
+ }
+
+ /* Runs list of tasks gathered from notifyLater calls */
+ public static void runDelayed() {
+ NbPresenter.LOG.fine("runDelayed");
+ List<Runnable> local = run;
+ run = null;
+ if (local == null) {
+ NbPresenter.LOG.fine("runDelayed, nothing");
+ return;
+ }
+
+ assert EventQueue.isDispatchThread();
+ for (Runnable r : local) {
+ NbPresenter.LOG.fine("runDelayed, run = " + r);
+ r.run();
+ }
+ NbPresenter.LOG.fine("runDelayed, done");
+ }
+
+ /** Creates new dialog. */
+ @Override
+ public Dialog createDialog(final DialogDescriptor d) {
+ return Mutex.EVENT.readAccess(new Mutex.Action<Dialog>() {
+
+ @Override
+ public Dialog run() {
+ // if a modal dialog active use it as parent
+ // otherwise use the main window
+ if (NbPresenter.currentModalDialog != null) {
+ if (NbPresenter.currentModalDialog.isLeaf()) {
+ return new NbDialog(d, WindowManager.getDefault().getMainWindow());
+ } else {
+ return new NbDialog(d, NbPresenter.currentModalDialog);
+ }
+ } else {
+ Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+ if (!(w instanceof NbPresenter) || !w.isVisible()) {
+
+ // undocked window is not instanceof NbPresenter although it's NetBeans's native window
+ // all docked windows implements ModeUIBase interface
+
+// if (! (w instanceof DefaultSeparateContainer.ModeUIBase)) {
+// Container cont = SwingUtilities.getAncestorOfClass(Window.class, w);
+// if (cont != null && (cont instanceof DefaultSeparateContainer.ModeUIBase)) {
+// w = (Window) cont;
+// } else {
+// // don't set non-ide window as parent
+ w = WindowManager.getDefault ().getMainWindow ();
+// }
+// }
+ } else if (w instanceof NbPresenter && ((NbPresenter) w).isLeaf()) {
+ w = WindowManager.getDefault().getMainWindow();
+ }
+ if (w instanceof Dialog) {
+ NbDialog dlg = new NbDialog(d, (Dialog) w);
+ dlg.requestFocusInWindow();
+ return dlg;
+ } else {
+ Frame f = w instanceof Frame ? (Frame) w : WindowManager.getDefault().getMainWindow();
+ NbDialog dlg = new NbDialog(d, f);
+ dlg.requestFocusInWindow();
+ return dlg;
+ }
+ }
+ }
+
+ });
+ }
+
+ /** Notifies user by a dialog.
+ * @param descriptor description that contains needed informations
+ * @return the option that has been choosen in the notification.
+ */
+ @Override
+ public Object notify(NotifyDescriptor descriptor) {
+ return notify(descriptor, false);
+ }
+
+ /** Notifies user by a dialog.
+ * @param descriptor description that contains needed informations
+ * @param noParent don't set any window as parent of dialog, if flag is true
+ * @return the option that has been choosen in the notification.
+ */
+ private Object notify(final NotifyDescriptor descriptor, final boolean noParent) {
+ class AWTQuery implements Runnable {
+
+ public Object result;
+ public boolean running;
+
+ @Override
+ public void run() {
+ synchronized (RTLDialogDisplayerImpl.this) {
+ notify();
+ running = true;
+ }
+
+ showDialog();
+
+ synchronized (this) {
+ this.result = descriptor.getValue();
+ notifyAll();
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ public void showDialog() {
+ if (testResult != null) {
+ // running in Unit test
+ descriptor.setValue(testResult);
+ return;
+ }
+
+ Component focusOwner = null;
+ Component comp = org.openide.windows.TopComponent.getRegistry().getActivated();
+ Component win = comp;
+ while ((win != null) && (!(win instanceof Window))) {
+ win = win.getParent();
+ }
+ if (win != null) {
+ focusOwner = ((Window) win).getFocusOwner();
+ }
+
+ // if a modal dialog is active use it as parent
+ // otherwise use the main window
+
+ NbPresenter presenter = null;
+ if (descriptor instanceof DialogDescriptor) {
+ if (NbPresenter.currentModalDialog != null) {
+ if (NbPresenter.currentModalDialog.isLeaf()) {
+ presenter = new NbDialog((DialogDescriptor) descriptor, WindowManager.getDefault().getMainWindow());
+ } else {
+ presenter = new NbDialog((DialogDescriptor) descriptor, NbPresenter.currentModalDialog);
+ }
+ } else {
+ Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+ if (w instanceof NbPresenter && ((NbPresenter) w).isLeaf()) {
+ w = WindowManager.getDefault().getMainWindow();
+ }
+ Frame f = w instanceof Frame ? (Frame) w : WindowManager.getDefault().getMainWindow();
+ if (noParent) {
+ f = null;
+ }
+ presenter = new NbDialog((DialogDescriptor) descriptor, f);
+ }
+ } else {
+ if (NbPresenter.currentModalDialog != null) {
+ presenter = new NbPresenter(descriptor, NbPresenter.currentModalDialog, true);
+ } else {
+ Frame f = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow() instanceof Frame
+ ? (Frame) KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow()
+ : WindowManager.getDefault().getMainWindow();
+
+ if (noParent) {
+ f = null;
+ }
+ presenter = new NbPresenter(descriptor, f, true);
+ }
+ }
+
+ //#47150 - horrible hack for vcs module
+ if ("true".equals(System.getProperty("javahelp.ignore.modality"))) { //NOI18N
+ presenter.getRootPane().putClientProperty("javahelp.ignore.modality", "true"); //NOI18N
+ System.setProperty("javahelp.ignore.modality", "false"); //NOI18N
+ }
+
+ //Bugfix #8551
+ presenter.getRootPane().requestDefaultFocus();
+ presenter.setVisible(true);
+
+ // dialog is gone, restore the focus
+
+ if (focusOwner != null) {
+ win.requestFocusInWindow();
+ comp.requestFocusInWindow();
+ if (!(focusOwner instanceof JRootPane)) //#85068
+ {
+ focusOwner.requestFocusInWindow();
+ }
+ }
+ }
+
+ }
+
+ AWTQuery query = new AWTQuery();
+
+ if (javax.swing.SwingUtilities.isEventDispatchThread()) {
+ query.showDialog();
+ return descriptor.getValue();
+ }
+
+ synchronized (query) {
+ javax.swing.SwingUtilities.invokeLater(query);
+ try {
+ query.wait(10000);
+ } catch (InterruptedException ex) {
+ // ok, should not happen and does not matter
+ }
+
+ if (query.running) {
+ while (query.result == null) {
+ try {
+ query.wait();
+ } catch (InterruptedException ex) {
+ // one more round
+ }
+ }
+ return query.result;
+ } else {
+ return NotifyDescriptor.CLOSED_OPTION;
+ }
+ }
+ }
+
+ /* Schedules notification for specific later time if called before
+ * <code>runDelayed</code>, otherwise works as superclass method.
+ */
+ @Override
+ public void notifyLater(final NotifyDescriptor descriptor) {
+ class R implements Runnable {
+
+ public boolean noParent;
+
+ @Override
+ public void run() {
+ RTLDialogDisplayerImpl.this.notify(descriptor, noParent);
+ }
+
+ }
+ R r = new R();
+
+ List<Runnable> local = run;
+ if (local != null) {
+ r.noParent = true;
+ local.add(r);
+ } else {
+ EventQueue.invokeLater(r);
+ }
+ }
+
+}
View
BIN src/org/nbrtl/dialog/resources/delete.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN src/org/nbrtl/dialog/resources/error.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN src/org/nbrtl/dialog/resources/info.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN src/org/nbrtl/dialog/resources/warning.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 45eb906

Please sign in to comment.
Something went wrong with that request. Please try again.