-Version:3.0.116
+Version:1.0.1
Source:product
-Maintainer:hyeongseok heo <harry.heo@samsung.com>, yoonki park <yoonki.park@samsung.com>
+Maintainer:hyeongseok heo <harry.heo@samsung.com>, gyeong-min Ju <gyeongmin.ju@samsung.com>, jaemin Kim <jm.jemin.kim@samsung.com>
-Package:base-ide-product
+Package:rt-ide-product
OS:ubuntu-32
Build-host-os:ubuntu-64
Build-dependency:eclipse-pde [ubuntu-64]
Install-dependency:version-manager [ubuntu-32]
-Description:Make base IDE. This also includes patched eclipse plugins.
+Description:Make RT IDE. This also includes patched eclipse plugins.
-Package:base-ide-product
+Package:rt-ide-product
OS:windows-32
Build-host-os:ubuntu-64
Build-dependency:eclipse-pde [ubuntu-64]
Install-dependency:version-manager [windows-32]
-Description:Make base IDE. This also includes patched eclipse plugins.
+Description:Make RT IDE. This also includes patched eclipse plugins.
-Package:base-ide-product
+Package:rt-ide-product
OS:ubuntu-64
Build-host-os:ubuntu-64
Build-dependency:eclipse-pde [ubuntu-64]
Install-dependency:version-manager [ubuntu-64]
-Description:Make base IDE. This also includes patched eclipse plugins.
+Description:Make RT IDE. This also includes patched eclipse plugins.
-Package:base-ide-product
+Package:rt-ide-product
OS:windows-64
Build-host-os:ubuntu-64
Build-dependency:eclipse-pde [ubuntu-64]
Install-dependency:version-manager [windows-64]
-Description:Make base IDE. This also includes patched eclipse plugins.
+Description:Make RT IDE. This also includes patched eclipse plugins.
-Package:base-ide-product
+Package:rt-ide-product
OS:macos-64
Build-host-os:ubuntu-64
Build-dependency:eclipse-pde [ubuntu-64]
Install-dependency:version-manager [macos-64]
-Description:Make base IDE. This also includes patched eclipse plugins
+Description:Make RT IDE. This also includes patched eclipse plugins
+++ /dev/null
-Native Build Info:
-------------------
-
-platform: x86_64-unknown-linux-gnu
-built by: martin.oberhuber@windriver.com
-build date: 18-Apr-2007
-OS Name: openSUSE 10.2 (X86-64)
-OS Version: Linux osgiliath 2.6.18.8-0.1-default #1 SMP x86_64 GNU/Linux
-Compiler version: gcc-4.1.2 20061115 (prerelease) (SUSE Linux)
-Compiler config: configure --enable-threads=posix --enable-ssp --disable-libssp \
- --enable-shared --enable-__cxa_atexit --without-system-libunwind \
- --with-cpu=generic
-
-build script:
--------------
-#!/bin/sh
-mkdir build-osgiliath
-cd build-osgiliath
-../configure --disable-lockfiles
-make
-cp x86_64-unknown-linux-gnu/.libs/*.so $OUTDIR
+++ /dev/null
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: 1.5.0_12-b04 (Sun Microsystems Inc.)
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-ManifestVersion: 2
-Fragment-Host: gnu.io.rxtx;bundle-version="[2.1.7,2.2.0)"
-Bundle-SymbolicName: gnu.io.rxtx.linux.x86_64
-Bundle-Localization: fragment
-Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86_64))
-Bundle-Version: 2.1.7.3_v20071015
-
+++ /dev/null
-#Processed using Jarprocessor
-pack200.conditioned = true
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-This is an unmodified binary release of RXTX-2.1-7r2 as downloaded
-from <a href="http://www.rxtx.org">http://www.rxtx.org</a>, with
-the following exception:
-<ul>
- <li>Linux native library was built without lockfiles (contrary to
- the original distribution) in order to allow easier use. See
- the file <a href="BUILD_INFO.txt">BUILD_INFO.txt</a> for details.</li>
-</ul>
-
-<h3>License</h3>
-<pre>
-RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
-RXTX is a native interface to serial ports in java.
-
-Copyright 1997-2007 by Trent Jarvi <a href="mailto:tjarvi@qbang.org">tjarvi@qbang.org</a> and others who
-actually wrote it. See individual source files for more information.
-
-A copy of the LGPL v 2.1 may be found at
-<a href="http://www.gnu.org/licenses/lgpl.txt">http://www.gnu.org/licenses/lgpl.txt</a> on March 4th 2007. A copy is
-<a href="about_files/lgpl.txt">here</a> for your convenience.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-An executable that contains no derivative of any portion of RXTX, but
-is designed to work with RXTX by being dynamically linked with it,
-is considered a "work that uses the Library" subject to the terms and
-conditions of the GNU Lesser General Public License.
-
-The following has been added to the RXTX License to remove
-any confusion about linking to RXTX. We want to allow in part what
-section 5, paragraph 2 of the LGPL does not permit in the special
-case of linking over a controlled interface. The intent is to add a
-Java Specification Request or standards body defined interface in the
-future as another exception but one is not currently available.
-
-<a href="http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface">http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface</a>
-
-As a special exception, the copyright holders of RXTX give you
-permission to link RXTX with independent modules that communicate with
-RXTX solely through the Sun Microsytems CommAPI interface version 2,
-regardless of the license terms of these independent modules, and to copy
-and distribute the resulting combined work under terms of your choice,
-provided that every copy of the combined work is accompanied by a complete
-copy of the source code of RXTX (the version of RXTX used to produce the
-combined work), being distributed under the terms of the GNU Lesser General
-Public License plus this exception. An independent module is a
-module which is not derived from or based on RXTX.
-
-Note that people who make modified versions of RXTX are not obligated
-to grant this special exception for their modified versions; it is
-their choice whether to do so. The GNU Lesser General Public License
-gives permission to release a modified version without this exception; this
-exception also makes it possible to release a modified version which
-carries forward this exception.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-All trademarks belong to their respective owners.
-</pre>
-</body>
-</html>
+++ /dev/null
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-\f
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+++ /dev/null
-################################################################################
-# Copyright (c) 2007 Wind River Systems, Inc.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Martin Oberhuber - initial API and implementation
-################################################################################
-fragmentName=RXTX for Linux x86_64
-providerName=RXTX.org
+++ /dev/null
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: 1.5.0_12-b04 (Sun Microsystems Inc.)
-Bundle-Name: %pluginName
-Bundle-ManifestVersion: 2
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: gnu.io.rxtx.source
-Bundle-Localization: plugin
-Bundle-Version: 2.1.7.4_v20071016
-
+++ /dev/null
-#Processed using Jarprocessor
-pack200.conditioned = true
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>June 5, 2007</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Source Code</h3>
-
-<p>This plug-in contains source code zip files ("Source Zips") that correspond to binary content
-in other plug-ins. These Source Zips may be distributed under different license agreements and/or notices.
-Details about these license agreements and notices are contained in "about.html" files ("Abouts") located
-in sub-directories in the src/ directory of this plug-in. Such Abouts govern your use of the Source Zips
-in that directory, not the EPL.</p>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-################################################################################
-# Copyright (c) 2007 Wind River Systems, Inc.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Martin Oberhuber - initial API and implementation
-################################################################################
-pluginName=RXTX\r Source Bundle
-providerName=RXTX.org
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
- <extension point="org.eclipse.pde.core.source">
- <location path="src"/>
- </extension>
-</plugin>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-This is an unmodified release of RXTX-2.1-7r2 as downloaded
-from <a href="http://www.rxtx.org">http://www.rxtx.org</a>, with
-the following exceptions:
-<ul>
- <li>RXTXCommDriver.java v1.16.2.57 was compiled from RXTX CVS and included
- in order to support disabling version print on startup (set System Property
- <tt>-Dgnu.io.rxtx.NoVersionOutput=true</tt>). This is RXTX
- <a href="http://bugzilla.qbang.org/show_bug.cgi?id=71">bug 71</a>.</li>
- <li>CommPortIdentifier.java: Include the Fix for RXTX
- <a href="http://bugzilla.qbang.org/show_bug.cgi?id=83">bug 83</a>
- due to which CommPortOwnership events are lost. The original
- fix from bugzilla is included in this version of the library.</li>
-</ul>
-
-<h3>License</h3>
-<pre>
-RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
-RXTX is a native interface to serial ports in java.
-
-Copyright 1997-2007 by Trent Jarvi <a href="mailto:tjarvi@qbang.org">tjarvi@qbang.org</a> and others who
-actually wrote it. See individual source files for more information.
-
-A copy of the LGPL v 2.1 may be found at
-<a href="http://www.gnu.org/licenses/lgpl.txt">http://www.gnu.org/licenses/lgpl.txt</a> on March 4th 2007. A copy is
-<a href="about_files/lgpl.txt">here</a> for your convenience.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-An executable that contains no derivative of any portion of RXTX, but
-is designed to work with RXTX by being dynamically linked with it,
-is considered a "work that uses the Library" subject to the terms and
-conditions of the GNU Lesser General Public License.
-
-The following has been added to the RXTX License to remove
-any confusion about linking to RXTX. We want to allow in part what
-section 5, paragraph 2 of the LGPL does not permit in the special
-case of linking over a controlled interface. The intent is to add a
-Java Specification Request or standards body defined interface in the
-future as another exception but one is not currently available.
-
-<a href="http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface">http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface</a>
-
-As a special exception, the copyright holders of RXTX give you
-permission to link RXTX with independent modules that communicate with
-RXTX solely through the Sun Microsytems CommAPI interface version 2,
-regardless of the license terms of these independent modules, and to copy
-and distribute the resulting combined work under terms of your choice,
-provided that every copy of the combined work is accompanied by a complete
-copy of the source code of RXTX (the version of RXTX used to produce the
-combined work), being distributed under the terms of the GNU Lesser General
-Public License plus this exception. An independent module is a
-module which is not derived from or based on RXTX.
-
-Note that people who make modified versions of RXTX are not obligated
-to grant this special exception for their modified versions; it is
-their choice whether to do so. The GNU Lesser General Public License
-gives permission to release a modified version without this exception; this
-exception also makes it possible to release a modified version which
-carries forward this exception.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-All trademarks belong to their respective owners.
-</pre>
-</body>
-</html>
+++ /dev/null
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-\f
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-This is an unmodified release of RXTX-2.1-7r2 as downloaded
-from <a href="http://www.rxtx.org">http://www.rxtx.org</a>, with
-the following exceptions:
-<ul>
- <li>RXTXCommDriver.java v1.16.2.57 was compiled from RXTX CVS and included
- in order to support disabling version print on startup (set System Property
- <tt>-Dgnu.io.rxtx.NoVersionOutput=true</tt>). This is RXTX
- <a href="http://bugzilla.qbang.org/show_bug.cgi?id=71">bug 71</a>.</li>
- <li>CommPortIdentifier.java: Include the Fix for RXTX
- <a href="http://bugzilla.qbang.org/show_bug.cgi?id=83">bug 83</a>
- due to which CommPortOwnership events are lost. The original
- fix from bugzilla is included in this version of the library.</li>
-</ul>
-
-<h3>License</h3>
-<pre>
-RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
-RXTX is a native interface to serial ports in java.
-
-Copyright 1997-2007 by Trent Jarvi <a href="mailto:tjarvi@qbang.org">tjarvi@qbang.org</a> and others who
-actually wrote it. See individual source files for more information.
-
-A copy of the LGPL v 2.1 may be found at
-<a href="http://www.gnu.org/licenses/lgpl.txt">http://www.gnu.org/licenses/lgpl.txt</a> on March 4th 2007. A copy is
-<a href="about_files/lgpl.txt">here</a> for your convenience.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-An executable that contains no derivative of any portion of RXTX, but
-is designed to work with RXTX by being dynamically linked with it,
-is considered a "work that uses the Library" subject to the terms and
-conditions of the GNU Lesser General Public License.
-
-The following has been added to the RXTX License to remove
-any confusion about linking to RXTX. We want to allow in part what
-section 5, paragraph 2 of the LGPL does not permit in the special
-case of linking over a controlled interface. The intent is to add a
-Java Specification Request or standards body defined interface in the
-future as another exception but one is not currently available.
-
-<a href="http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface">http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface</a>
-
-As a special exception, the copyright holders of RXTX give you
-permission to link RXTX with independent modules that communicate with
-RXTX solely through the Sun Microsytems CommAPI interface version 2,
-regardless of the license terms of these independent modules, and to copy
-and distribute the resulting combined work under terms of your choice,
-provided that every copy of the combined work is accompanied by a complete
-copy of the source code of RXTX (the version of RXTX used to produce the
-combined work), being distributed under the terms of the GNU Lesser General
-Public License plus this exception. An independent module is a
-module which is not derived from or based on RXTX.
-
-Note that people who make modified versions of RXTX are not obligated
-to grant this special exception for their modified versions; it is
-their choice whether to do so. The GNU Lesser General Public License
-gives permission to release a modified version without this exception; this
-exception also makes it possible to release a modified version which
-carries forward this exception.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-All trademarks belong to their respective owners.
-</pre>
-</body>
-</html>
+++ /dev/null
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-\f
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-org.eclipse.tm.terminal.connector.serial/debugmode = 0
-org.eclipse.tm.terminal.connector.serial/trace/serialLinePanel = false
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.tm.terminal.connector.serial</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-#Wed Oct 19 12:10:57 CEST 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=4
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+++ /dev/null
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_Target Explorer Java STD
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=false
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=true
-sp_cleanup.remove_unused_imports=true
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-sp_cleanup.use_type_arguments=false
+++ /dev/null
-compilers.f.unresolved-features=1
-compilers.f.unresolved-plugins=1
-compilers.incompatible-environment=1
-compilers.p.build=1
-compilers.p.build.bin.includes=1
-compilers.p.build.encodings=2
-compilers.p.build.java.compiler=2
-compilers.p.build.java.compliance=1
-compilers.p.build.missing.output=2
-compilers.p.build.output.library=1
-compilers.p.build.source.library=1
-compilers.p.build.src.includes=1
-compilers.p.deprecated=1
-compilers.p.discouraged-class=1
-compilers.p.internal=1
-compilers.p.missing-packages=1
-compilers.p.missing-version-export-package=2
-compilers.p.missing-version-import-package=1
-compilers.p.missing-version-require-bundle=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=1
-compilers.p.unknown-class=1
-compilers.p.unknown-element=1
-compilers.p.unknown-identifier=1
-compilers.p.unknown-resource=1
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.s.create-docs=false
-compilers.s.doc-folder=doc
-compilers.s.open-tags=1
-eclipse.preferences.version=1
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.tm.terminal.connector.serial;singleton:=true
-Bundle-Version: 4.2.0.qualifier
-Bundle-Activator: org.eclipse.tm.terminal.connector.serial.activator.UIPlugin
-Bundle-Vendor: %providerName
-Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
- org.eclipse.core.runtime;bundle-version="3.8.0",
- org.eclipse.equinox.security;bundle-version="1.1.100",
- org.eclipse.tm.terminal.view.core;bundle-version="4.0.0";resolution:=optional,
- org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
- org.eclipse.tm.terminal.control;bundle-version="4.0.0",
- org.eclipse.ui;bundle-version="3.8.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ActivationPolicy: lazy
-Bundle-Localization: plugin
-Export-Package: org.eclipse.tm.terminal.connector.serial.activator;x-internal:=true,
- org.eclipse.tm.terminal.connector.serial.connector,
- org.eclipse.tm.terminal.connector.serial.controls,
- org.eclipse.tm.terminal.connector.serial.interfaces,
- org.eclipse.tm.terminal.connector.serial.launcher,
- org.eclipse.tm.terminal.connector.serial.nls;x-internal:=true
-Import-Package: gnu.io;resolution:=optional
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>May 24, 2012</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-###############################################################################
-# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- plugin.properties,\
- plugin.xml,\
- about.html
+++ /dev/null
-##################################################################################
-# Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-##################################################################################
-
-pluginName = Terminal Serial Connector
-providerName = Eclipse.org - Target Management
-
-# ----- Terminal Launcher Delegates -----
-
-SerialLauncherDelegate.label=Serial Terminal
-
-# ----- Terminal Connectors -----
-
-SerialConnector.label = Serial
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-
-<!-- Terminal connector contributions -->
- <extension point="org.eclipse.tm.terminal.control.connectors">
- <connector
- name="%SerialConnector.label"
- id="org.eclipse.tm.terminal.connector.serial.SerialConnector"
- class="org.eclipse.tm.terminal.connector.serial.connector.SerialConnector"/>
- </extension>
-
-<!-- Terminal launcher delegate contributions -->
- <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
- <delegate
- class="org.eclipse.tm.terminal.connector.serial.launcher.SerialLauncherDelegate"
- id="org.eclipse.tm.terminal.connector.serial.launcher.serial"
- label="%SerialLauncherDelegate.label">
- <enablement>
- <with variable="selection">
- <count value="1"/>
- <iterate operator="and" ifEmpty="false">
- <test
- forcePluginActivation="true"
- property="org.eclipse.tm.terminal.view.core.hasContextPropertiesProvider"
- value="true"/>
- </iterate>
- </with>
- </enablement>
- </delegate>
- </extension>
-</plugin>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.eclipse.tm.terminal</groupId>
- <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
- <version>4.2.0-SNAPSHOT</version>
- <relativePath>../../admin/pom-build.xml</relativePath>
- </parent>
-
- <version>4.2.0-SNAPSHOT</version>
- <artifactId>org.eclipse.tm.terminal.connector.serial</artifactId>
- <packaging>eclipse-plugin</packaging>
-</project>
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.activator;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class UIPlugin extends AbstractUIPlugin {
- // The shared instance
- private static UIPlugin plugin;
- // The trace handler instance
- private static volatile TraceHandler traceHandler;
-
- /**
- * The constructor
- */
- public UIPlugin() {
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static UIPlugin getDefault() {
- return plugin;
- }
-
- /**
- * Convenience method which returns the unique identifier of this plugin.
- */
- public static String getUniqueIdentifier() {
- if (getDefault() != null && getDefault().getBundle() != null) {
- return getDefault().getBundle().getSymbolicName();
- }
- return "org.eclipse.tm.terminal.connector.serial"; //$NON-NLS-1$
- }
-
- /**
- * Returns the bundles trace handler.
- *
- * @return The bundles trace handler.
- */
- public static TraceHandler getTraceHandler() {
- if (traceHandler == null) {
- traceHandler = new TraceHandler(getUniqueIdentifier());
- }
- return traceHandler;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
- */
- @Override
- protected void initializeImageRegistry(ImageRegistry registry) {
- }
-
- /**
- * Loads the image registered under the specified key from the image
- * registry and returns the <code>Image</code> object instance.
- *
- * @param key The key the image is registered with.
- * @return The <code>Image</code> object instance or <code>null</code>.
- */
- public static Image getImage(String key) {
- return getDefault().getImageRegistry().get(key);
- }
-
- /**
- * Loads the image registered under the specified key from the image
- * registry and returns the <code>ImageDescriptor</code> object instance.
- *
- * @param key The key the image is registered with.
- * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
- */
- public static ImageDescriptor getImageDescriptor(String key) {
- return getDefault().getImageRegistry().getDescriptor(key);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.connector;
-
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-
-public interface ISerialSettings {
-
- String getSerialPort();
- int getBaudRate();
- int getDataBits();
- int getStopBits();
- int getParity();
- int getFlowControl();
- int getTimeout();
- String getSummary();
- void load(ISettingsStore store);
- void save(ISettingsStore store);
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - extracted from TerminalControl
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [207158] improve error message when port not available
- * Martin Oberhuber (Wind River) - [208029] COM port not released after quick disconnect/reconnect
- * Martin Oberhuber (Wind River) - [206884] Update Terminal Ownership ID to "org.eclipse.tm.terminal.serial"
- * Martin Oberhuber (Wind River) - [221184] Redesign Serial Terminal Ownership Handling
- * Michael Scharf (Wind River) - [262996] get rid of TerminalState.OPENED
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.connector;
-
-import gnu.io.CommPortIdentifier;
-import gnu.io.NoSuchPortException;
-import gnu.io.PortInUseException;
-import gnu.io.SerialPort;
-
-import java.util.Arrays;
-import java.util.Enumeration;
-
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.connector.serial.nls.Messages;
-
-public class SerialConnectWorker extends Thread {
- /* default */ final ITerminalControl fControl;
- private final SerialConnector fConn;
-
- /**
- * UNDER CONSTRUCTION
- * @param conn TODO
- * @param control TODO
- */
- public SerialConnectWorker(SerialConnector conn, ITerminalControl control) {
- super();
- fControl = control;
- fConn = conn;
- }
-
- /**
- * Adds the named port to the name of known ports to rxtx
- * @param name
- */
- void addPort(String name) {
- // Rxtx either takes the connection from the properties OR using
- // the port scan.
- // Unfortunately, setting gnu.io.rxtx.SerialPorts only temporarily does not
- // work, because rxtx closes connections that are unknown.
- // The only solution I could come up with: add the known connections
- // to the gnu.io.rxtx.SerialPorts property....
- final String GNU_IO_RXTX_SERIAL_PORTS = "gnu.io.rxtx.SerialPorts"; //$NON-NLS-1$
- String sep = System.getProperty("path.separator", ":"); //$NON-NLS-1$//$NON-NLS-2$
- // get the existing names
- String names = System.getProperty(GNU_IO_RXTX_SERIAL_PORTS);
- if (names == null) {
- StringBuffer buffer=new StringBuffer();
- boolean sepNeeded=false;
- // When we add a port to this property, rxtx forgets the
- // ports it finds by scanning the system.
-
- // iterate over the known ports and add them to the property
- Enumeration<?> portIdEnum= CommPortIdentifier.getPortIdentifiers();
- while (portIdEnum.hasMoreElements()) {
- CommPortIdentifier identifier = (CommPortIdentifier) portIdEnum.nextElement();
- if (identifier.getPortType() == CommPortIdentifier.PORT_SERIAL) {
- if(sepNeeded)
- buffer.append(sep);
- else
- sepNeeded=true;
- buffer.append(identifier.getName());
- }
- }
- // append our new port
- if(sepNeeded)
- buffer.append(sep);
- buffer.append(name);
-
- System.setProperty(GNU_IO_RXTX_SERIAL_PORTS,buffer.toString());
- } else if (!Arrays.asList(names.split(sep)).contains(name)) {
- // the list does not contain the name, therefore we add it
- // since there is at least one name in the list, we append it
- System.setProperty(GNU_IO_RXTX_SERIAL_PORTS, names + sep + name);
- } else {
- // nothing to do -- should never happen...
- return;
- }
- // Reinitialize the ports because we have changed the list of known ports
- CommPortIdentifier.getPortIdentifiers();
- }
-
- /**
- * Return the ID that this connector uses for RXTX Comm Ownership Handling.
- *
- * Note that this was changed in Terminal 2.0 as per
- * https://bugs.eclipse.org/bugs/show_bug.cgi?id=206884 - previous versions
- * of the serial terminal connector used a different string,
- * "org.eclipse.tm.internal.terminal.serial".
- *
- * @since org.eclipse.tm.terminal.serial 2.0
- * @return ownership ID, "org.eclipse.tm.terminal.serial"
- */
- public static final String getOwnershipId() {
- return "org.eclipse.tm.terminal.serial"; //$NON-NLS-1$
- }
-
- @Override
- public void run() {
- String portName=null;
- final String strID = getOwnershipId();
- SerialPort serialPort = null;
- try {
- ISerialSettings s=fConn.getSerialSettings();
- portName=s.getSerialPort();
- try {
- fConn.setSerialPortIdentifier(CommPortIdentifier.getPortIdentifier(portName));
- } catch (NoSuchPortException e) {
- // let's try
- addPort(portName);
- fConn.setSerialPortIdentifier(CommPortIdentifier.getPortIdentifier(portName));
- }
- fConn.setSerialPortHandler(new SerialPortHandler(fConn,fControl));
- fConn.setSerialPortIdentifier(CommPortIdentifier.getPortIdentifier(portName));
-
- //Bug 221184: Warn about serial port already in use
- String currentOwner = fConn.getSerialPortIdentifier().getCurrentOwner();
- if (strID.equals(currentOwner)) {
- currentOwner = Messages.SerialConnectWorker_ANOTHER_TERMINAL;
- }
- final int[] answer = { SWT.YES };
- final String fPortName = portName;
- final String fCurrentOwner = currentOwner;
- if (currentOwner != null) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- MessageBox mb = new MessageBox(fControl.getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO);
- mb.setText(Messages.SerialConnectWorker_PROP_TITLE);
- mb.setMessage(NLS.bind(Messages.SerialConnectWorker_PORT_IN_USE, fPortName, fCurrentOwner));
- answer[0] = mb.open();
- }
- });
- }
-
- if (answer[0] != SWT.YES) {
- // don't try to steal the port
- fControl.setState(TerminalState.CLOSED);
- fConn.setSerialPortHandler(null);
- return;
- }
-
- // Try to steal the port -- may throw PortInUseException
- int timeoutInMs = s.getTimeout() * 1000;
- serialPort = (SerialPort) fConn.getSerialPortIdentifier().open(strID, timeoutInMs);
- serialPort.setSerialPortParams(s.getBaudRate(), s.getDataBits(), s.getStopBits(), s.getParity());
- serialPort.setFlowControlMode(s.getFlowControl());
- serialPort.addEventListener(fConn.getSerialPortHandler());
- serialPort.notifyOnDataAvailable(true);
- fConn.getSerialPortIdentifier().addPortOwnershipListener(fConn.getSerialPortHandler());
- fConn.setSerialPort(serialPort);
- if (fCurrentOwner != null) {
- fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_PORT_STOLEN, fPortName, fCurrentOwner));
-
- }
- fControl.setState(TerminalState.CONNECTED);
-
- } catch (PortInUseException portInUseException) {
- fControl.setState(TerminalState.CLOSED);
- String theOwner = portInUseException.currentOwner;
- if (strID.equals(theOwner)) {
- theOwner = Messages.SerialConnectWorker_ANOTHER_TERMINAL;
- }
- fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_PORT_NOT_STOLEN, portName, theOwner));
- } catch (NoSuchPortException e) {
- fControl.setState(TerminalState.CLOSED);
- String msg=e.getMessage();
- if(msg==null)
- msg=portName;
- fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_NO_SUCH_PORT, msg));
-
- } catch (Exception exception) {
- Logger.logException(exception);
- if (serialPort!=null) {
- //Event listener is removed as part of close(),
- //but exceptions need to be caught to ensure that close() really succeeds
- try {
- serialPort.removeEventListener();
- Thread.sleep(50); //allow a little time for RXTX Native to catch up - makes stuff more stable
- } catch(Exception e) {
- Logger.logException(e);
- }
- serialPort.close();
- fConn.getSerialPortIdentifier().removePortOwnershipListener(fConn.getSerialPortHandler());
- }
- fControl.setState(TerminalState.CLOSED);
- } finally {
- fConn.doneConnect();
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - extracted from TerminalControl
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [206892] Don't connect if already connecting
- * Martin Oberhuber (Wind River) - [208029] COM port not released after quick disconnect/reconnect
- * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.connector;
-
-import gnu.io.CommPortIdentifier;
-import gnu.io.SerialPort;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
-import org.eclipse.tm.terminal.connector.serial.activator.UIPlugin;
-import org.eclipse.tm.terminal.connector.serial.nls.Messages;
-
-public class SerialConnector extends TerminalConnectorImpl {
- private OutputStream fOutputStream;
- private InputStream fInputStream;
- private SerialPort fSerialPort;
- private CommPortIdentifier fSerialPortIdentifier;
- private SerialPortHandler fTerminalSerialPortHandler;
- private SerialSettings fSettings;
- private SerialConnectWorker fConnectWorker = null;
- /* default */ volatile boolean fDisconnectGoingOn = false;
-
- public SerialConnector() {
- }
- @Override
- public void initialize() throws Exception {
- try {
- fSettings=new SerialSettings();
- } catch (NoClassDefFoundError e) {
- // tell the user how to install the library
- throw new CoreException(new Status(IStatus.WARNING,UIPlugin.getUniqueIdentifier(),0, Messages.SerialConnector_Error_LiberayNotInstalled,e));
- }
- }
- @Override
- public void connect(ITerminalControl control) {
- super.connect(control);
- synchronized(this) {
- if (fConnectWorker!=null || fDisconnectGoingOn) {
- //avoid multiple background connect/disconnect threads at the same time
- return;
- }
- fConnectWorker = new SerialConnectWorker(this, control);
- }
- fControl.setState(TerminalState.CONNECTING);
- fConnectWorker.start();
- }
- /**
- * Indicate that the connectWorker is finished.
- */
- void doneConnect() {
- synchronized(this) {
- fConnectWorker = null;
- }
- }
- @Override
- public void doDisconnect() {
- synchronized(this) {
- //avoid multiple background connect/disconnect threads at the same time
- if (fConnectWorker!=null) {
- fConnectWorker.interrupt();
- return;
- } else if (fDisconnectGoingOn) {
- return;
- }
- fDisconnectGoingOn = true;
- }
-
- // Fix for SPR 112422. When output is being received from the serial port, the
- // below call to removePortOwnershipListener() attempts to lock the serial port
- // object, but that object is already locked by another Terminal view thread
- // waiting for the SWT display thread to process a syncExec() call. Since this
- // method is called on the display thread, the display thread is waiting to
- // lock the serial port object and the thread holding the serial port object
- // lock is waiting for the display thread to process a syncExec() call, so the
- // two threads end up deadlocked, which hangs the Workbench GUI.
- //
- // The solution is to spawn a short-lived worker thread that calls
- // removePortOwnershipListener(), thus preventing the display thread from
- // deadlocking with the other Terminal view thread.
-
- new Thread("Terminal View Serial Port Disconnect Worker") //$NON-NLS-1$
- {
- @Override
- public void run() {
- try {
- if (getSerialPortIdentifier() != null) {
- try {
- getSerialPortIdentifier()
- .removePortOwnershipListener(getSerialPortHandler());
- } catch(Exception e) {
- Logger.logException(e);
- }
- }
-
- if (getSerialPort() != null) {
- //Event listener is removed as part of close(),
- //but exceptions need to be caught to ensure that close() really succeeds
- try {
- getSerialPort().removeEventListener();
- Thread.sleep(50); //allow a little time for RXTX Native to catch up - makes stuff more stable
- } catch(Exception e) {
- Logger.logException(e);
- }
- Logger.log("Calling close() on serial port ..."); //$NON-NLS-1$
- getSerialPort().close();
- }
-
- if (getInputStream() != null) {
- try {
- getInputStream().close();
- } catch (Exception exception) {
- Logger.logException(exception);
- }
- }
-
- if (getTerminalToRemoteStream() != null) {
- try {
- getTerminalToRemoteStream().close();
- } catch (Exception exception) {
- Logger.logException(exception);
- }
- }
-
- setSerialPortIdentifier(null);
- cleanSerialPort();
- setSerialPortHandler(null);
- } catch(Exception e) {
- Logger.logException(e);
- } finally {
- fDisconnectGoingOn = false;
- }
- }
-
- }.start();
- }
- public InputStream getInputStream() {
- return fInputStream;
- }
- @Override
- public OutputStream getTerminalToRemoteStream() {
- return fOutputStream;
- }
- private void setInputStream(InputStream inputStream) {
- fInputStream = inputStream;
- }
- private void setOutputStream(OutputStream outputStream) {
- fOutputStream = outputStream;
- }
- @Override
- public void setTerminalSize(int newWidth, int newHeight) {
- // TODO
- }
- protected SerialPort getSerialPort() {
- return fSerialPort;
- }
-
- /**
- * sets the socket to null
- */
- void cleanSerialPort() {
- fSerialPort=null;
- setInputStream(null);
- setOutputStream(null);
- }
-
- protected void setSerialPort(SerialPort serialPort) throws IOException {
- cleanSerialPort();
- if(serialPort!=null) {
- fSerialPort = serialPort;
- setOutputStream(serialPort.getOutputStream());
- setInputStream(serialPort.getInputStream());
- }
- }
- protected CommPortIdentifier getSerialPortIdentifier() {
- return fSerialPortIdentifier;
- }
- protected void setSerialPortIdentifier(CommPortIdentifier serialPortIdentifier) {
- //System.out.println("setSerialPortId: "+Thread.currentThread().getName()+ " - "+serialPortIdentifier + " - "+System.currentTimeMillis());
- fSerialPortIdentifier = serialPortIdentifier;
- }
- void setSerialPortHandler(SerialPortHandler serialPortHandler) {
- fTerminalSerialPortHandler=serialPortHandler;
- }
- SerialPortHandler getSerialPortHandler() {
- return fTerminalSerialPortHandler;
- }
- /**
- * Return the Serial Settings.
- *
- * @return the settings for a concrete connection.
- */
- public ISerialSettings getSerialSettings() {
- return fSettings;
- }
- @Override
- public void setDefaultSettings() {
- fSettings.load(new NullSettingsStore());
- }
- @Override
- public String getSettingsSummary() {
- return fSettings.getSummary();
- }
- @Override
- public void load(ISettingsStore store) {
- fSettings.load(store);
- }
- @Override
- public void save(ISettingsStore store) {
- fSettings.save(store);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - extracted from TerminalControl
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [168197] Replace JFace MessagDialog by SWT MessageBox
- * Martin Oberhuber (Wind River) - [221184] Redesign Serial Terminal Ownership Handling
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.connector;
-
-import gnu.io.CommPortOwnershipListener;
-import gnu.io.SerialPortEvent;
-import gnu.io.SerialPortEventListener;
-
-import java.io.IOException;
-
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.terminal.connector.serial.nls.Messages;
-
-/**
- * UNDER CONSTRUCTION
- */
-public class SerialPortHandler implements SerialPortEventListener, CommPortOwnershipListener {
-
- /* default */ final ITerminalControl fControl;
- /* default */ final SerialConnector fConn;
- protected byte[] bytes = new byte[2048];
-
- /**
- * UNDER CONSTRUCTION
- * @param control TODO
- */
- public SerialPortHandler(SerialConnector conn,ITerminalControl control) {
- super();
- fControl = control;
- fConn=conn;
- }
-
- // Message handlers
-
- /**
- * UNDER CONSTRUCTION
- */
- public void onSerialDataAvailable(Object data) {
- try {
- while (fConn.getInputStream() != null && fConn.getInputStream().available() > 0) {
- int nBytes = fConn.getInputStream().read(bytes);
- fControl.getRemoteToTerminalOutputStream().write(bytes, 0, nBytes);
- }
- } catch (IOException ex) {
- fControl.displayTextInTerminal(ex.getMessage());
- } catch (Exception exception) {
- Logger.logException(exception);
- }
- }
-
- public void onSerialOwnershipRequested(Object data) {
- //Bug 221184: We immediately release the port on any ownership request
- try {
- throw new Exception();
- } catch (Exception e) {
- StackTraceElement[] elems = e.getStackTrace();
- final String requester = elems[elems.length - 4].getClassName();
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- fConn.disconnect();
- String req = requester;
- String myPackage = this.getClass().getPackage().getName();
- if (req.startsWith(myPackage)) {
- req = Messages.SerialConnectWorker_ANOTHER_TERMINAL;
- }
- fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_OWNERSHIP_GRANTED, req));
- }
- });
- fConn.disconnect();
- }
- }
-
- // SerialPortEventListener interface
- @Override
- public void serialEvent(SerialPortEvent event) {
- switch (event.getEventType()) {
- case SerialPortEvent.DATA_AVAILABLE:
- onSerialDataAvailable(null);
- break;
- }
- }
-
- // CommPortOwnershipListener interface
-
- /**
- * UNDER CONSTRUCTION
- */
- @Override
- public void ownershipChange(int nType) {
- switch (nType) {
- case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED:
- onSerialOwnershipRequested(null);
- break;
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - extracted from TerminalProperties
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.connector;
-
-import gnu.io.CommPortIdentifier;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-public class SerialProperties {
- protected List<String> fSerialPortTable;
- protected List<String> fBaudRateTable;
- protected List<String> fDataBitsTable;
- protected List<String> fStopBitsTable;
- protected List<String> fParityTable;
- protected List<String> fFlowControlTable;
- protected String fDefaultConnType;
- protected String fDefaultSerialPort;
- protected String fDefaultBaudRate;
- protected String fDefaultDataBits;
- protected String fDefaultStopBits;
- protected String fDefaultParity;
- protected String fDefaultFlowControl;
-
- public SerialProperties() {
- setupProperties();
- }
- public List<String> getSerialPortTable() {
- return fSerialPortTable;
- }
-
- public List<String> getBaudRateTable() {
- return fBaudRateTable;
- }
-
- public List<String> getDataBitsTable() {
- return fDataBitsTable;
- }
-
- public List<String> getStopBitsTable() {
- return fStopBitsTable;
- }
-
- public List<String> getParityTable() {
- return fParityTable;
- }
-
- public List<String> getFlowControlTable() {
- return fFlowControlTable;
- }
- public String getDefaultConnType() {
- return fDefaultConnType;
- }
-
- public String getDefaultSerialPort() {
- return fDefaultSerialPort;
- }
-
- public String getDefaultBaudRate() {
- return fDefaultBaudRate;
- }
-
- public String getDefaultDataBits() {
- return fDefaultDataBits;
- }
-
- public String getDefaultStopBits() {
- return fDefaultStopBits;
- }
-
- public String getDefaultParity() {
- return fDefaultParity;
- }
-
- public String getDefaultFlowControl() {
- return fDefaultFlowControl;
- }
- public String getDefaultTimeout() {
- return "5"; //$NON-NLS-1$
- }
- protected void setupProperties() {
- fSerialPortTable = new ArrayList<String>();
- fBaudRateTable = new ArrayList<String>();
- fDataBitsTable = new ArrayList<String>();
- fStopBitsTable = new ArrayList<String>();
- fParityTable = new ArrayList<String>();
- fFlowControlTable = new ArrayList<String>();
- fDefaultConnType = ""; //$NON-NLS-1$
- fDefaultSerialPort = ""; //$NON-NLS-1$
- fDefaultBaudRate = ""; //$NON-NLS-1$
- fDefaultDataBits = ""; //$NON-NLS-1$
- fDefaultStopBits = ""; //$NON-NLS-1$
- fDefaultParity = ""; //$NON-NLS-1$
- fDefaultFlowControl = ""; //$NON-NLS-1$
-
- fBaudRateTable.add("300"); //$NON-NLS-1$
- fBaudRateTable.add("1200"); //$NON-NLS-1$
- fBaudRateTable.add("2400"); //$NON-NLS-1$
- fBaudRateTable.add("4800"); //$NON-NLS-1$
- fBaudRateTable.add("9600"); //$NON-NLS-1$
- fBaudRateTable.add("19200"); //$NON-NLS-1$
- fBaudRateTable.add("38400"); //$NON-NLS-1$
- fBaudRateTable.add("57600"); //$NON-NLS-1$
- fBaudRateTable.add("115200"); //$NON-NLS-1$
-
- fDataBitsTable.add("5"); //$NON-NLS-1$
- fDataBitsTable.add("6"); //$NON-NLS-1$
- fDataBitsTable.add("7"); //$NON-NLS-1$
- fDataBitsTable.add("8"); //$NON-NLS-1$
-
- fStopBitsTable.add("1"); //$NON-NLS-1$
- fStopBitsTable.add("1_5"); //$NON-NLS-1$
- fStopBitsTable.add("2"); //$NON-NLS-1$
-
- fParityTable.add("None"); //$NON-NLS-1$
- fParityTable.add("Even"); //$NON-NLS-1$
- fParityTable.add("Odd"); //$NON-NLS-1$
- fParityTable.add("Mark"); //$NON-NLS-1$
- fParityTable.add("Space"); //$NON-NLS-1$
-
- fFlowControlTable.add("None"); //$NON-NLS-1$
- fFlowControlTable.add("RTS/CTS"); //$NON-NLS-1$
- fFlowControlTable.add("Xon/Xoff"); //$NON-NLS-1$
-
- fDefaultBaudRate = fBaudRateTable.get(4);
- fDefaultDataBits = fDataBitsTable.get(3);
- fDefaultStopBits = fStopBitsTable.get(0);
- fDefaultParity = fParityTable.get(0);
- fDefaultFlowControl = fFlowControlTable.get(0);
-
- Enumeration<CommPortIdentifier> portIdEnum= CommPortIdentifier.getPortIdentifiers();
- while (portIdEnum.hasMoreElements()) {
- CommPortIdentifier identifier = portIdEnum.nextElement();
- String strName = identifier.getName();
- int nPortType = identifier.getPortType();
-
- if (nPortType == CommPortIdentifier.PORT_SERIAL)
- fSerialPortTable.add(strName);
- }
-
- Collections.sort(fSerialPortTable);
-
- if (!fSerialPortTable.isEmpty()) {
- fDefaultSerialPort = fSerialPortTable.get(0);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - extracted from TerminalSettings
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.connector;
-
-import gnu.io.SerialPort;
-
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-
-public class SerialSettings implements ISerialSettings {
- protected String fSerialPort;
- protected String fBaudRate;
- protected String fDataBits;
- protected String fStopBits;
- protected String fParity;
- protected String fFlowControl;
- protected String fTimeout;
- final private SerialProperties fProperties=new SerialProperties();
-
- @Override
- public String getSerialPort() {
- return fSerialPort;
- }
-
- public void setSerialPort(String strSerialPort) {
- fSerialPort = strSerialPort;
- }
-
- public String getBaudRateString() {
- return fBaudRate;
- }
-
- @Override
- public int getBaudRate() {
- int nBaudRate;
-
- try {
- nBaudRate = Integer.parseInt(fBaudRate);
- } catch (NumberFormatException numberFormatException) {
- nBaudRate = 9600;
- }
-
- return nBaudRate;
- }
-
- public void setBaudRate(String strBaudRate) {
- fBaudRate = strBaudRate;
- }
-
- public String getDataBitsString() {
- return fDataBits;
- }
-
- @Override
- public int getDataBits() {
- if (fDataBits.equals("5")) { //$NON-NLS-1$
- return SerialPort.DATABITS_5;
- } else if (fDataBits.equals("6")) { //$NON-NLS-1$
- return SerialPort.DATABITS_6;
- } else if (fDataBits.equals("7")) { //$NON-NLS-1$
- return SerialPort.DATABITS_7;
- } else {
- return SerialPort.DATABITS_8;
- }
- }
-
- public void setDataBits(String strDataBits) {
- fDataBits = strDataBits;
- }
-
- public String getStopBitsString() {
- return fStopBits;
- }
-
- @Override
- public int getStopBits() {
- if (fStopBits.equals("1_5")) { //$NON-NLS-1$
- return SerialPort.STOPBITS_1_5;
- } else if (fStopBits.equals("2")) { //$NON-NLS-1$
- return SerialPort.STOPBITS_2;
- } else { // 1
- return SerialPort.STOPBITS_1;
- }
- }
-
- public void setStopBits(String strStopBits) {
- fStopBits = strStopBits;
- }
-
- public String getParityString() {
- return fParity;
- }
-
- @Override
- public int getParity() {
- if (fParity.equals("Even")) //$NON-NLS-1$
- {
- return SerialPort.PARITY_EVEN;
- } else if (fParity.equals("Odd")) //$NON-NLS-1$
- {
- return SerialPort.PARITY_ODD;
- } else if (fParity.equals("Mark")) //$NON-NLS-1$
- {
- return SerialPort.PARITY_MARK;
- } else if (fParity.equals("Space")) //$NON-NLS-1$
- {
- return SerialPort.PARITY_SPACE;
- } else // None
- {
- return SerialPort.PARITY_NONE;
- }
- }
-
- public void setParity(String strParity) {
- fParity = strParity;
- }
-
- public String getFlowControlString() {
- return fFlowControl;
- }
-
- @Override
- public int getFlowControl() {
- if (fFlowControl.equals("RTS/CTS")) //$NON-NLS-1$
- {
- return SerialPort.FLOWCONTROL_RTSCTS_IN;
- } else if (fFlowControl.equals("Xon/Xoff")) //$NON-NLS-1$
- {
- return SerialPort.FLOWCONTROL_XONXOFF_IN;
- } else // None
- {
- return SerialPort.FLOWCONTROL_NONE;
- }
- }
-
- public void setFlowControl(String strFlow) {
- fFlowControl = strFlow;
- }
-
- @Override
- public String getSummary() {
- return getSerialPort() + ", " + //$NON-NLS-1$
- getBaudRateString() + ", " + //$NON-NLS-1$
- getDataBitsString() + ", " + //$NON-NLS-1$
- getStopBitsString() + ", " + //$NON-NLS-1$
- getParityString() + ", " + //$NON-NLS-1$
- getFlowControlString();
- }
-
- @Override
- public void load(ISettingsStore store) {
- fSerialPort = store.get("SerialPort", fProperties.getDefaultSerialPort());//$NON-NLS-1$
- fBaudRate = store.get("BaudRate", fProperties.getDefaultBaudRate());//$NON-NLS-1$
- fDataBits = store.get("DataBits", fProperties.getDefaultDataBits());//$NON-NLS-1$
- fStopBits = store.get("StopBits", fProperties.getDefaultStopBits());//$NON-NLS-1$
- fParity = store.get("Parity", fProperties.getDefaultParity());//$NON-NLS-1$
- fFlowControl = store.get("FlowControl", fProperties.getDefaultFlowControl());//$NON-NLS-1$
- fTimeout = store.get("Timeout",fProperties.getDefaultTimeout()); //$NON-NLS-1$
- }
-
- @Override
- public void save(ISettingsStore store) {
- store.put("SerialPort", fSerialPort); //$NON-NLS-1$
- store.put("BaudRate", fBaudRate); //$NON-NLS-1$
- store.put("DataBits", fDataBits); //$NON-NLS-1$
- store.put("StopBits", fStopBits); //$NON-NLS-1$
- store.put("Parity", fParity); //$NON-NLS-1$
- store.put("FlowControl", fFlowControl); //$NON-NLS-1$
- }
-
- public SerialProperties getProperties() {
- return fProperties;
- }
-
- @Override
- public int getTimeout() {
- try {
- return Integer.parseInt(fTimeout);
- } catch (NumberFormatException numberFormatException) {
- return 10;
- }
- }
- public String getTimeoutString() {
- return fTimeout;
- }
-
- public void setTimeout(String timeout) {
- fTimeout = timeout;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.controls;
-
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
-
-/**
- * Serial wizard configuration panel implementation.
- */
-public class SerialConfigurationPanel extends AbstractExtendedConfigurationPanel {
-
- private SerialLinePanel serialSettingsPage;
-
- /**
- * Constructor.
- *
- * @param container The configuration panel container or <code>null</code>.
- */
- public SerialConfigurationPanel(IConfigurationPanelContainer container) {
- super(container);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void setupPanel(Composite parent) {
- Composite panel = new Composite(parent, SWT.NONE);
- panel.setLayout(new GridLayout());
- GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
- panel.setLayoutData(data);
-
- // Create the host selection combo
- if (isWithoutSelection()) createHostsUI(panel, true);
-
- serialSettingsPage = new SerialLinePanel(getContainer());
- serialSettingsPage.setupPanel(panel);
-
- // Create the encoding selection combo
- createEncodingUI(panel, true);
-
- setControl(panel);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
- */
- @Override
- public void extractData(Map<String, Object> data) {
- // set the terminal connector id for serial
- data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.serial.SerialConnector"); //$NON-NLS-1$
-
- serialSettingsPage.extractData(data);
- data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#fillSettingsForHost(java.lang.String)
- */
- @Override
- protected void fillSettingsForHost(String host){
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#saveSettingsForHost(boolean)
- */
- @Override
- protected void saveSettingsForHost(boolean add){
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
- */
- @Override
- public boolean isValid(){
- return serialSettingsPage.isValid();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
- serialSettingsPage.doSaveWidgetValues(settings, idPrefix);
- // Save the encodings widget values
- doSaveEncodingsWidgetValues(settings, idPrefix);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
- serialSettingsPage.doRestoreWidgetValues(settings, idPrefix);
- // Restore the encodings widget values
- doRestoreEncodingsWidgetValues(settings, idPrefix);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#getHostFromSettings()
- */
- @Override
- protected String getHostFromSettings() {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#isWithHostList()
- */
- @Override
- public boolean isWithHostList() {
- return false;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.controls;
-
-import gnu.io.CommPortIdentifier;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.tm.terminal.connector.serial.activator.UIPlugin;
-import org.eclipse.tm.terminal.connector.serial.interfaces.ITraceIds;
-import org.eclipse.tm.terminal.connector.serial.nls.Messages;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Serial line terminal launcher configuration panel implementation.
- */
-public class SerialLinePanel extends AbstractConfigurationPanel {
- public static final String fcDefaultTTYSpeed = "9600"; //$NON-NLS-1$
- public static final String fcDefaultTTYDeviceWin32 = "COM1"; //$NON-NLS-1$
- public static final String fcDefaultTTYDeviceSolaris = "/dev/cua/a"; //$NON-NLS-1$
- public static final String fcDefaultTTYDeviceLinux = "/dev/ttyS0"; //$NON-NLS-1$
- public static final String fcDefaultTTYDatabits = "8"; //$NON-NLS-1$
- public static final String fcDefaultTTYParity = "None"; //$NON-NLS-1$
- public static final String fcDefaultTTYStopbits = "1"; //$NON-NLS-1$
- public static final String fcDefaultTTYFlowControl = "None"; //$NON-NLS-1$
- public static final String fcDefaultTTYTimeout = "5"; //$NON-NLS-1$
- public static final String fcEditableTTYOther = "Other..."; //$NON-NLS-1$
-
- private static final String[] fcTTYSpeedRates = { "600", //$NON-NLS-1$
- "1200", //$NON-NLS-1$
- "2400", //$NON-NLS-1$
- "4800", //$NON-NLS-1$
- "9600", //$NON-NLS-1$
- "14400", //$NON-NLS-1$
- "19200", //$NON-NLS-1$
- "38400", //$NON-NLS-1$
- "57600", //$NON-NLS-1$
- "115200" //$NON-NLS-1$
- };
-
- private static final String[] fcTTYDatabits = {
- "8", "7" //$NON-NLS-1$ //$NON-NLS-2$
- };
-
- private static final String[] fcTTYParity = {
- "None", "Odd", "Even" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- };
-
- private static final String[] fcTTYStopbits = {
- "1", "2" //$NON-NLS-1$ //$NON-NLS-2$
- };
-
- private static final String[] fcTTYFlowControl = {
- "None", "Hardware", "Software" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- };
-
- Label hostTTYDeviceLabel;
- Combo hostTTYDeviceCombo;
- Label hostTTYSpeedLabel;
- Combo hostTTYSpeedCombo;
- Label hostTTYBitsLabel;
- Combo hostTTYBitsCombo;
- Label hostTTYParityLabel;
- Combo hostTTYParityCombo;
- Label hostTTYStopbitsLabel;
- Combo hostTTYStopbitsCombo;
- Label hostTTYFlowControlLabel;
- Combo hostTTYFlowControlCombo;
- Label hostTTYTimeoutLabel;
- Text hostTTYTimeoutText;
-
- // Keep the fInputValidator protected!
- protected IInputValidator inputValidatorBaud;
-
- int lastSelected = -1;
- int lastSelectedBaud = -1;
-
- /**
- * Constructor.
- *
- * @param container The configuration panel container or <code>null</code>.
- */
- public SerialLinePanel(IConfigurationPanelContainer container) {
- super(container);
- }
-
- protected class CustomSerialBaudRateInputValidator implements IInputValidator {
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String)
- */
- @Override
- public String isValid(String newText) {
- if (newText != null && newText.trim().length() > 0) {
- if (!newText.matches("[0-9]*")) { //$NON-NLS-1$
- return Messages.SerialLinePanel_error_invalidCharactesBaudRate;
- }
- } else if (newText != null) {
- // Empty string is an error without message (see interface)!
- return ""; //$NON-NLS-1$
- }
- return null;
- }
- }
-
- /**
- * Returns the input validator to be used for checking the custom serial
- * baud rate for basic plausibility.
- */
- protected IInputValidator getCustomSerialBaudRateInputValidator() {
- if (inputValidatorBaud == null) {
- inputValidatorBaud = new CustomSerialBaudRateInputValidator();
- }
- return inputValidatorBaud;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void setupPanel(Composite parent) {
- Assert.isNotNull(parent);
-
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- panel.setBackground(parent.getBackground());
-
- setControl(panel);
-
- final Composite client = new Composite(parent, SWT.NONE);
- Assert.isNotNull(client);
- client.setLayout(new GridLayout(2, false));
- client.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- client.setBackground(panel.getBackground());
-
- // Host TTY settings
- hostTTYDeviceLabel = new Label(client, SWT.NONE);
- hostTTYDeviceLabel.setText(Messages.SerialLinePanel_hostTTYDevice_label);
-
- hostTTYDeviceCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- hostTTYDeviceCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYDeviceCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- // if the user selected the special editable device, show a dialog asking for the device name
- if (fcEditableTTYOther.equals(hostTTYDeviceCombo.getText())) {
- List<String> tty = new ArrayList<String>();
- List<String> tcp = new ArrayList<String>();
- String selected = hostTTYDeviceCombo.getItem(lastSelected);
- for (String device : hostTTYDeviceCombo.getItems()) {
- if (!device.equalsIgnoreCase(fcEditableTTYOther)) {
- if (device.toUpperCase().startsWith("TCP:")) { //$NON-NLS-1$
- tcp.add(device);
- }
- else {
- tty.add(device);
- }
- }
- }
- SerialPortAddressDialog dialog = new SerialPortAddressDialog(client.getShell(), selected, tty, tcp);
- if (dialog.open() == Window.OK) {
- // retrieve the custom serial device name and set it to the combobox drop
- String device = dialog.getData();
- if (device != null && device.trim().length() > 0) {
- hostTTYDeviceCombo.add(device.trim());
- hostTTYDeviceCombo.setText(device.trim());
- } else if (lastSelected != -1) {
- hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(lastSelected));
- }
- } else if (lastSelected != -1){
- hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(lastSelected));
- }
- }
- lastSelected = hostTTYDeviceCombo.getSelectionIndex();
-
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
-
- hostTTYSpeedLabel = new Label(client, SWT.NONE);
- hostTTYSpeedLabel.setText(Messages.SerialLinePanel_hostTTYSpeed_label);
-
- hostTTYSpeedCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- hostTTYSpeedCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYSpeedCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- // if the user selected the special editable baud rate, show a dialog asking for the baud rate
- if (fcEditableTTYOther.equals(hostTTYSpeedCombo.getText())) {
- InputDialog dialog = new InputDialog(getControl().getShell(),
- Messages.SerialLinePanel_customSerialBaudRate_title,
- Messages.SerialLinePanel_customSerialBaudRate_message,
- "", //$NON-NLS-1$
- getCustomSerialBaudRateInputValidator());
- if (dialog.open() == Window.OK) {
- // retrieve the custom serial device name and set it to the combobox drop
- String device = dialog.getValue();
- if (device != null && device.trim().length() > 0) {
- int index = hostTTYSpeedCombo.indexOf(fcEditableTTYOther);
- if (index != -1 && index == hostTTYSpeedCombo.getItemCount() - 1) {
- hostTTYSpeedCombo.add(device.trim());
- } else if (index != -1) {
- hostTTYSpeedCombo.setItem(index + 1, device.trim());
- }
- hostTTYSpeedCombo.setText(device.trim());
- } else if (lastSelectedBaud != -1) {
- hostTTYSpeedCombo.setText(hostTTYSpeedCombo.getItem(lastSelectedBaud));
- }
- } else if (lastSelectedBaud != -1){
- hostTTYSpeedCombo.setText(hostTTYSpeedCombo.getItem(lastSelectedBaud));
- }
- }
- lastSelectedBaud = hostTTYSpeedCombo.getSelectionIndex();
-
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
-
- // Query the list of available serial port interfaces.
- UIPlugin.getTraceHandler().trace("SerialLinePanel: Start quering the available comm ports.", ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$
-
- // Query the serial devices now.
- BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
- @Override
- public void run() {
- queryAvailableSerialDevices();
- }
- });
-
- // add a special device which is being the editable one if requested at the end of the list
- hostTTYDeviceCombo.add(fcEditableTTYOther);
-
- if (hostTTYDeviceCombo.indexOf(getDefaultHostTTYDevice()) != -1) {
- hostTTYDeviceCombo.setText(getDefaultHostTTYDevice());
- } else {
- if ("".equals(hostTTYDeviceCombo.getText()) && hostTTYDeviceCombo.getItemCount() > 0) { //$NON-NLS-1$
- // USI: For SWT-GTK we need the special empty entry as well. Otherwise we will have problems
- // getting the selection changed event!
- if (hostTTYDeviceCombo.getItemCount() == 1
- && fcEditableTTYOther.equals(hostTTYDeviceCombo.getItem(0))) {
- hostTTYDeviceCombo.add("", 0); //$NON-NLS-1$
- }
- hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(0));
- }
- }
-
- if (hostTTYDeviceCombo.getItemCount() > 0) {
- hostTTYDeviceCombo.setEnabled(true);
- } else {
- hostTTYDeviceCombo.setEnabled(false);
- }
- lastSelected = hostTTYDeviceCombo.getSelectionIndex();
-
- for (String fcTTYSpeedRate : fcTTYSpeedRates) {
- hostTTYSpeedCombo.add(fcTTYSpeedRate);
- }
- hostTTYSpeedCombo.add(fcEditableTTYOther);
-
- hostTTYSpeedCombo.setText(fcDefaultTTYSpeed);
- lastSelectedBaud = hostTTYSpeedCombo.getSelectionIndex();
-
- // add the advanced serial options
- hostTTYBitsLabel = new Label(client, SWT.NONE);
- hostTTYBitsLabel.setText(Messages.SerialLinePanel_hostTTYDatabits_label);
- hostTTYBitsCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- hostTTYBitsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYBitsCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
-
- for (String fcTTYDatabit : fcTTYDatabits) {
- hostTTYBitsCombo.add(fcTTYDatabit);
- }
- hostTTYBitsCombo.setText(fcDefaultTTYDatabits);
-
- hostTTYParityLabel = new Label(client, SWT.NONE);
- hostTTYParityLabel.setText(Messages.SerialLinePanel_hostTTYParity_label);
- hostTTYParityCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- hostTTYParityCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYParityCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
-
- for (String element : fcTTYParity) {
- hostTTYParityCombo.add(element);
- }
- hostTTYParityCombo.setText(fcDefaultTTYParity);
-
- hostTTYStopbitsLabel = new Label(client, SWT.NONE);
- hostTTYStopbitsLabel.setText(Messages.SerialLinePanel_hostTTYStopbits_label);
- hostTTYStopbitsCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- hostTTYStopbitsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYStopbitsCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
-
- for (String fcTTYStopbit : fcTTYStopbits) {
- hostTTYStopbitsCombo.add(fcTTYStopbit);
- }
- hostTTYStopbitsCombo.setText(fcDefaultTTYStopbits);
-
- hostTTYFlowControlLabel = new Label(client, SWT.NONE);
- hostTTYFlowControlLabel.setText(Messages.SerialLinePanel_hostTTYFlowControl_label);
- hostTTYFlowControlCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- hostTTYFlowControlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYFlowControlCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
-
- for (String element : fcTTYFlowControl) {
- hostTTYFlowControlCombo.add(element);
- }
- hostTTYFlowControlCombo.setText(fcDefaultTTYFlowControl);
-
- hostTTYTimeoutLabel = new Label(client, SWT.NONE);
- hostTTYTimeoutLabel.setText(Messages.SerialLinePanel_hostTTYTimeout_label);
- hostTTYTimeoutText = new Text(client, SWT.SINGLE | SWT.BORDER);
- hostTTYTimeoutText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- hostTTYTimeoutText.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
- if (container != null) container.validate();
- }
- });
- hostTTYTimeoutText.setText(fcDefaultTTYTimeout);
- }
-
- /**
- * Query the list of serial devices.
- */
- protected void queryAvailableSerialDevices() {
- // Avoid printing the library version output to stdout if the platform
- // is not in debug mode.
- String prop = System.getProperty("gnu.io.rxtx.NoVersionOutput"); //$NON-NLS-1$
- if (prop == null && !Platform.inDebugMode()) {
- System.setProperty("gnu.io.rxtx.NoVersionOutput", "true"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // java.lang.UnsatisfiedLinkError: ../plugins/gnu.io.rxtx.solaris.sparc_2.1.7.200702281917/os/solaris/sparc/librxtxSerial.so:
- // Can't load Sparc 32-bit .so on a Sparc 32-bit platform
- // May happen in CommPortIdentifier static constructor!
- try {
- Enumeration<CommPortIdentifier> ttyPortIds = CommPortIdentifier.getPortIdentifiers();
- if (!ttyPortIds.hasMoreElements()) {
- UIPlugin.getTraceHandler().trace("SerialLinePanel: NO comm ports available at all!", ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$
- }
- final List<String> ports = new ArrayList<String>();
- while (ttyPortIds.hasMoreElements()) {
- CommPortIdentifier port = ttyPortIds.nextElement();
- String type = "unknown"; //$NON-NLS-1$
- if (port.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
- type = "parallel"; //$NON-NLS-1$
- }
- if (port.getPortType() == CommPortIdentifier.PORT_SERIAL) {
- type = "serial"; //$NON-NLS-1$
- }
- UIPlugin.getTraceHandler().trace("SerialLinePanel: Found comm port: name='" + port.getName() + "', type='" + type, ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$ //$NON-NLS-2$
- // only add serial ports
- if (port.getPortType() == CommPortIdentifier.PORT_SERIAL) {
- UIPlugin.getTraceHandler().trace("SerialLinePanel: Adding found serial comm port to combo!", ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$
- if (!ports.contains(port.getName())) {
- ports.add(port.getName());
- }
- }
- }
- if (!ports.isEmpty()) {
- Collections.sort(ports);
- // This method may executed in a separate thread. We must spawn back
- // into the UI thread to execute the adding of the ports to the control.
- PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
- @Override
- public void run() {
- for (String port : ports) {
- hostTTYDeviceCombo.add(port);
- }
- }
- });
- }
- } catch (UnsatisfiedLinkError e) {
- IStatus status = new Status(IStatus.WARNING, UIPlugin.getUniqueIdentifier(),
- Messages.SerialLinePanel_warning_FailedToLoadSerialPorts, e);
- UIPlugin.getDefault().getLog().log(status);
- } catch (NoClassDefFoundError e) {
- // The NoClassDefFoundError happens the second time if the load of the library
- // failed once! We do ignore this error completely!
- }
- }
-
- /**
- * Enables or disables the configuration panels controls.
- *
- * @param enabled Specify <code>true</code> to enable the controls, <code>false</code> otherwise.
- */
- @Override
- public void setEnabled(boolean enabled) {
- hostTTYDeviceLabel.setEnabled(enabled);
- hostTTYDeviceCombo.setEnabled(enabled);
- hostTTYSpeedLabel.setEnabled(enabled);
- hostTTYSpeedCombo.setEnabled(enabled);
- hostTTYBitsLabel.setEnabled(enabled);
- hostTTYBitsCombo.setEnabled(enabled);
- hostTTYParityLabel.setEnabled(enabled);
- hostTTYParityCombo.setEnabled(enabled);
- hostTTYStopbitsLabel.setEnabled(enabled);
- hostTTYStopbitsCombo.setEnabled(enabled);
- hostTTYFlowControlLabel.setEnabled(enabled);
- hostTTYFlowControlCombo.setEnabled(enabled);
- }
-
- /**
- * The name of the serial ports differ between the host platforms, so we have to
- * detect the default host TTY device based on the host platform.
- */
- public String getDefaultHostTTYDevice() {
- String osName = System.getProperty("os.name"); //$NON-NLS-1$
- // Linux ?
- if (osName.equalsIgnoreCase("Linux")) { //$NON-NLS-1$
- return fcDefaultTTYDeviceLinux;
- }
- // Solaris ?
- if (osName.equalsIgnoreCase("SunOS")) { //$NON-NLS-1$
- return fcDefaultTTYDeviceSolaris;
- }
- // Windows ?
- if (osName.toLowerCase().startsWith("windows")) { //$NON-NLS-1$
- return fcDefaultTTYDeviceWin32;
- }
- return ""; //$NON-NLS-1$
- }
-
- /**
- * Returns the default value for the serial port speed setting in bit/s
- */
- public String getDefaultHostTTYSpeed() {
- return fcDefaultTTYSpeed;
- }
-
- /**
- * Returns the default value for the serial port data bits setting
- */
- public String getDefaultHostTTYDatabits() {
- return fcDefaultTTYDatabits;
- }
-
- /**
- * Returns the default value for the serial port parity setting
- */
- public String getDefaultHostTTYParity() {
- return fcDefaultTTYParity;
- }
-
- /**
- * Returns the default value for the serial port stop bits setting
- */
- public String getDefaultHostTTYStopbits() {
- return fcDefaultTTYStopbits;
- }
-
- /**
- * Returns the default value for the serial port flow control setting
- */
- public String getDefaultHostTTYFlowControl() {
- return fcDefaultTTYFlowControl;
- }
-
- /**
- * Returns the default value for the serial port timeout setting.
- */
- public String getDefaultHostTTYTimeout() {
- return fcDefaultTTYTimeout;
- }
-
- /**
- * Set the text to the combo if available as selectable option.
- *
- * @param combo The combo box control. Must not be <code>null</code>.
- * @param value The value to set. Must not be <code>null</code>.
- */
- protected void doSetTextInCombo(Combo combo, String value) {
- Assert.isNotNull(combo);
- Assert.isNotNull(value);
- if (combo.indexOf(value) != 1) {
- combo.setText(value);
- }
- }
-
- /**
- * Select the given tty device if available.
- *
- * @param value The tty device to select. Must not be <code>null</code>.
- */
- public void setSelectedTTYDevice(String value) {
- doSetTextInCombo(hostTTYDeviceCombo, value);
- }
-
- /**
- * Select the given tty device if available. The method
- * will do nothing if the specified index is invalid.
- *
- * @param index The index of the tty device to select.
- */
- public void setSelectedTTYDevice(int index) {
- if (index >= 0 && index < hostTTYDeviceCombo.getItemCount()) {
- hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(index));
- }
- }
-
- /**
- * Select the given tty device speed if available.
- *
- * @param value The tty device speed to select. Must not be <code>null</code>.
- */
- public void setSelectedTTYSpeed(String value) {
- doSetTextInCombo(hostTTYSpeedCombo, value);
- }
-
- /**
- * Select the given tty device data bit configuration if available.
- *
- * @param value The tty device data bit configuration to select. Must not be <code>null</code>.
- */
- public void setSelectedTTYDatabits(String value) {
- doSetTextInCombo(hostTTYBitsCombo, value);
- }
-
- /**
- * Select the given tty device parity configuration if available.
- *
- * @param value The tty device parity configuration to select. Must not be <code>null</code>.
- */
- public void setSelectedTTYParity(String value) {
- doSetTextInCombo(hostTTYParityCombo, value);
- }
-
- /**
- * Select the given tty device stop bit configuration if available.
- *
- * @param value The tty device stop bit configuration to select. Must not be <code>null</code>.
- */
- public void setSelectedTTYStopbits(String value) {
- doSetTextInCombo(hostTTYStopbitsCombo, value);
- }
-
- /**
- * Select the given tty device flow control configuration if available.
- *
- * @param value The tty device flow control configuration to select. Must not be <code>null</code>.
- */
- public void setSelectedTTYFlowControl(String value) {
- doSetTextInCombo(hostTTYFlowControlCombo, value);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
- */
- @Override
- public boolean isValid() {
- String selectedTTYDevice = hostTTYDeviceCombo.getText();
- if (selectedTTYDevice == null || selectedTTYDevice.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYDevice, IMessageProvider.ERROR);
- return false;
- }
-
- if (fcEditableTTYOther.equals(selectedTTYDevice)) {
- setMessage(Messages.SerialLinePanel_info_editableTTYDeviceSelected, IMessageProvider.INFORMATION);
- return false;
- }
-
- String selectedTTYSpeedRate = hostTTYSpeedCombo.getText();
- if (selectedTTYSpeedRate == null || selectedTTYSpeedRate.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYSpeedRate, IMessageProvider.ERROR);
- return false;
- }
-
- if (fcEditableTTYOther.equals(selectedTTYSpeedRate)) {
- setMessage(Messages.SerialLinePanel_info_editableTTYBaudRateSelected, IMessageProvider.INFORMATION);
- return false;
- }
-
- String option = hostTTYBitsCombo.getText();
- if (option == null || option.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYDatabits, IMessageProvider.ERROR);
- return false;
- }
-
- option = hostTTYParityCombo.getText();
- if (option == null || option.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYParity, IMessageProvider.ERROR);
- return false;
- }
-
- option = hostTTYStopbitsCombo.getText();
- if (option == null || option.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYStopbits, IMessageProvider.ERROR);
- return false;
- }
-
- option = hostTTYFlowControlCombo.getText();
- if (option == null || option.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYFlowControl, IMessageProvider.ERROR);
- return false;
- }
-
- option = hostTTYTimeoutText.getText();
- if (option == null || option.trim().length() == 0) {
- setMessage(Messages.SerialLinePanel_error_emptyHostTTYFlowControl, IMessageProvider.ERROR);
- return false;
- }
-
- return true;
- }
-
- private final String fcSelectedTTYDeviceSlotId = "SerialLinePanel.selectedTTYDevice." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
- private final String fcSelectedTTYSpeedRateSlotId = "SerialLinePanel.selectedTTYSpeedRate." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
- private final String fcSelectedTTYDatabitsSlotId = "SerialLinePanel.selectedTTYDatabits." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
- private final String fcSelectedTTYParitySlotId = "SerialLinePanel.selectedTTYParity." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
- private final String fcSelectedTTYStopbitsSlotId = "SerialLinePanel.selectedTTYStopbits." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
- private final String fcSelectedTTYFlowControlSlotId = "SerialLinePanel.selectedTTYFlowControl." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
- private final String fcSelectedTTYTimeoutSlotId = "SerialLinePanel.selectedTTYTimeout." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- String selectedTTYDevice = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYDeviceSlotId, idPrefix));
- if (selectedTTYDevice != null && selectedTTYDevice.trim().length() > 0) {
- if (hostTTYDeviceCombo.indexOf(selectedTTYDevice) != -1) {
- hostTTYDeviceCombo.setText(selectedTTYDevice);
- }
- }
-
- String selectedTTYSpeedRate = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYSpeedRateSlotId, idPrefix));
- if (selectedTTYSpeedRate != null && selectedTTYSpeedRate.trim().length() > 0) {
- if (hostTTYSpeedCombo.indexOf(selectedTTYSpeedRate) != -1) {
- hostTTYSpeedCombo.setText(selectedTTYSpeedRate);
- }
- }
-
- String option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYDatabitsSlotId, idPrefix));
- if (option != null && option.trim().length() > 0 && hostTTYBitsCombo.indexOf(option) != -1) {
- hostTTYBitsCombo.setText(option);
- }
-
- option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYParitySlotId, idPrefix));
- if (option != null && option.trim().length() > 0 && hostTTYParityCombo.indexOf(option) != -1) {
- hostTTYParityCombo.setText(option);
- }
-
- option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYStopbitsSlotId, idPrefix));
- if (option != null && option.trim().length() > 0 && hostTTYStopbitsCombo.indexOf(option) != -1) {
- hostTTYStopbitsCombo.setText(option);
- }
-
- option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYFlowControlSlotId, idPrefix));
- if (option != null && option.trim().length() > 0 && hostTTYFlowControlCombo.indexOf(option) != -1) {
- hostTTYFlowControlCombo.setText(option);
- }
-
- option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYTimeoutSlotId, idPrefix));
- if (option != null && option.trim().length() > 0 && !option.equals(hostTTYTimeoutText.getText())) {
- hostTTYTimeoutText.setText(option);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYDeviceSlotId, idPrefix), hostTTYDeviceCombo.getText());
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYSpeedRateSlotId, idPrefix), hostTTYSpeedCombo.getText());
-
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYDatabitsSlotId, idPrefix), hostTTYBitsCombo.getText());
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYParitySlotId, idPrefix), hostTTYParityCombo.getText());
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYStopbitsSlotId, idPrefix), hostTTYStopbitsCombo.getText());
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYFlowControlSlotId, idPrefix), hostTTYFlowControlCombo.getText());
- settings.put(prefixDialogSettingsSlotId(fcSelectedTTYTimeoutSlotId, idPrefix), hostTTYTimeoutText.getText());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
- */
- @Override
- public void setupData(Map<String, Object> data) {
- if (data == null) return;
-
- hostTTYDeviceCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE));
- hostTTYSpeedCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE));
-
- hostTTYBitsCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS));
- hostTTYParityCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_PARITY));
- hostTTYStopbitsCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS));
- hostTTYFlowControlCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL));
-
- Object value = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
- if (value instanceof Integer) {
- hostTTYTimeoutText.setText(((Integer)value).toString());
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
- */
- @Override
- public void extractData(Map<String, Object> data) {
- if (data == null) return;
-
- data.put(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE, hostTTYDeviceCombo.getText());
- data.put(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE, hostTTYSpeedCombo.getText());
-
- data.put(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS, hostTTYBitsCombo.getText());
- data.put(ITerminalsConnectorConstants.PROP_SERIAL_PARITY, hostTTYParityCombo.getText());
- data.put(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS, hostTTYStopbitsCombo.getText());
- data.put(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL, hostTTYFlowControlCombo.getText());
-
- if (hostTTYTimeoutText.getText() != null) {
- Integer timeout = null;
- try {
- timeout = Integer.decode(hostTTYTimeoutText.getText());
- } catch (NumberFormatException e) { /* ignored on purpose */ }
- if (timeout != null) data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, timeout);
- else data.remove(ITerminalsConnectorConstants.PROP_TIMEOUT);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.controls;
-
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.VerifyEvent;
-import org.eclipse.swt.events.VerifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.tm.terminal.connector.serial.activator.UIPlugin;
-import org.eclipse.tm.terminal.connector.serial.nls.Messages;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Serial line port or address dialog.
- */
-public class SerialPortAddressDialog extends TitleAreaDialog implements IMessageProvider {
- private String contextHelpId = null;
-
- private String message;
- private int messageType;
- private String errorMessage;
- private String title;
-
- // The default message is shown to the user if no other message is set
- private String defaultMessage;
- private int defaultMessageType;
-
- Button ttyControlSelector;
- Combo ttyControl;
- Button tcpControlSelector;
- Combo addressControl;
- Combo portControl;
- Label portLabel;
-
- List<String> ttyHistory;
- List<String> tcpHistory;
-
- String data = null;
-
- // regular expressions for validator
- /* default */ static final String IP_CHARACTERS_REGEX = "[0-9][0-9\\.]*"; //$NON-NLS-1$
- /* default */ static final String IP_FRAGMENT_REGEX = "([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])"; //$NON-NLS-1$
- /* default */ static final String IP_REGEX = IP_FRAGMENT_REGEX + "(\\." + IP_FRAGMENT_REGEX + "){3}[ ]*"; //$NON-NLS-1$ //$NON-NLS-2$
-
- // RFC 1034 - ftp://ftp.rfc-editor.org/in-notes/std/std13.txt
- /* default */ static final String NAME_CHARACTERS_REGEX = "[a-zA-Z][0-9a-zA-Z\\-_\\.]*"; //$NON-NLS-1$
- // characters that can be set at the beginning
- /* default */ static final String NAME_START_REGEX = "[a-zA-Z]"; //$NON-NLS-1$
- // characters that can be set after the starting character
- /* default */ static final String NAME_FOLLOW_REGEX = "[a-zA-Z0-9-_]"; //$NON-NLS-1$
- // characters that can be set at the end
- /* default */ static final String NAME_END_REGEX = "[a-zA-Z0-9]"; //$NON-NLS-1$
- // single name fragment
- /* default */ static final String NAME_FRAGMENT_REGEX = "(" + NAME_START_REGEX + "(" + NAME_FOLLOW_REGEX + "*" + NAME_END_REGEX + ")?)"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-
- /* default */ static final String NAME_REGEX = NAME_FRAGMENT_REGEX + "(\\." + NAME_FRAGMENT_REGEX + ")*[ ]*"; //$NON-NLS-1$ //$NON-NLS-2$
-
- /**
- * Constructor.
- * @param parentShell
- */
- public SerialPortAddressDialog(Shell parentShell, String selected, List<String> ttyHistory, List<String> tcpHistory) {
- super(parentShell);
- this.ttyHistory = ttyHistory;
- this.tcpHistory = tcpHistory;
- this.data = selected;
-
- this.contextHelpId = UIPlugin.getUniqueIdentifier() + ".SerialPortAddressDialog"; //$NON-NLS-1$
- setHelpAvailable(true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#isResizable()
- */
- @Override
- protected boolean isResizable() {
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#create()
- */
- @Override
- public void create() {
- super.create();
-
- // If the dialog got set a message, make sure the message is really shown
- // to the user from the beginning.
- if (isMessageSet()) {
- if (errorMessage != null) {
- super.setErrorMessage(errorMessage);
- }
- else {
- super.setMessage(message, messageType);
- }
- } else if (defaultMessage != null) {
- // Default message set
- super.setMessage(defaultMessage, defaultMessageType);
- }
-
- // If the dialog got set a title, make sure the title is shown
- if (title != null) {
- super.setTitle(title);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected final Control createDialogArea(Composite parent) {
- if (contextHelpId != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
- }
-
- // Let the super implementation create the dialog area control
- Control control = super.createDialogArea(parent);
- // Setup the inner panel as scrollable composite
- if (control instanceof Composite) {
- ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
-
- GridLayout layout = new GridLayout(1, true);
- layout.marginHeight = 0; layout.marginWidth = 0;
- layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
-
- sc.setLayout(layout);
- sc.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
-
- sc.setExpandHorizontal(true);
- sc.setExpandVertical(true);
-
- Composite composite = new Composite(sc, SWT.NONE);
- composite.setLayout(new GridLayout());
-
- // Setup the dialog area content
- createDialogAreaContent(composite);
-
- sc.setContent(composite);
- sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
- // Return the scrolled composite as new dialog area control
- control = sc;
- }
-
- return control;
- }
-
- /**
- * Creates the dialog area content.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- */
- protected void createDialogAreaContent(Composite parent) {
- Assert.isNotNull(parent);
-
- setDialogTitle(Messages.SerialPortAddressDialog_dialogtitle);
- setTitle(Messages.SerialPortAddressDialog_title);
-
- Composite ttyComp = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- ttyComp.setLayout(layout);
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = 250;
- ttyComp.setLayoutData(layoutData);
-
- Composite panel = new Composite(ttyComp, SWT.NONE);
- layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- panel.setLayoutData(layoutData);
-
- ttyControlSelector = new Button(panel, SWT.RADIO);
- ttyControlSelector.setText(Messages.SerialLinePanel_hostTTYDevice_label);
- layoutData = new GridData(SWT.LEAD, SWT.CENTER, false, false);
- ttyControlSelector.setLayoutData(layoutData);
- ttyControlSelector.setSelection(true);
- ttyControlSelector.addSelectionListener(new SelectionAdapter(){
- @Override
- public void widgetSelected(SelectionEvent e) {
- boolean selected = ttyControlSelector.getSelection();
- setTTYControlEnabled(selected);
- setTCPControlEnabled(!selected);
- onModify();
- }
- });
-
- ttyControl = new Combo(panel, SWT.DROP_DOWN);
- layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
- ttyControl.setLayoutData(layoutData);
- ttyControl.addModifyListener(new ModifyListener(){
- @Override
- public void modifyText(ModifyEvent e) {
- onModify();
- }
- });
-
- parent.getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- boolean enable = ttyHistory != null && ttyHistory.contains(data);
- setTTYControlEnabled(enable);
- setTCPControlEnabled(!enable);
- onModify();
- }
- });
-
- Composite tcpComp = new Composite(parent, SWT.NONE);
- layout = new GridLayout(2, true);
- tcpComp.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- tcpComp.setLayoutData(layoutData);
-
- Composite tcpAddrComp = new Composite(tcpComp, SWT.NONE);
- layout = new GridLayout(2, false);
- layout.marginWidth = 0; layout.marginHeight = 0;
- tcpAddrComp.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- tcpAddrComp.setLayoutData(layoutData);
-
- tcpControlSelector = new Button(tcpAddrComp, SWT.RADIO);
- tcpControlSelector.setText(Messages.SerialPortAddressDialog_address);
- layoutData = new GridData(SWT.LEAD, SWT.CENTER, false, false);
- tcpControlSelector.setLayoutData(layoutData);
- tcpControlSelector.setSelection(false);
- tcpControlSelector.addSelectionListener(new SelectionAdapter(){
- @Override
- public void widgetSelected(SelectionEvent e) {
- boolean selected = tcpControlSelector.getSelection();
- setTTYControlEnabled(!selected);
- setTCPControlEnabled(selected);
- onModify();
- }
- });
-
- addressControl = new Combo(tcpAddrComp, SWT.DROP_DOWN);
- layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
- addressControl.setLayoutData(layoutData);
- addressControl.addModifyListener(new ModifyListener(){
- @Override
- public void modifyText(ModifyEvent e) {
- onModify();
- }
- });
-
- Composite tcpPortComp = new Composite(tcpComp, SWT.NONE);
- layout = new GridLayout(2, false);
- layout.marginWidth = 0; layout.marginHeight = 0;
- tcpPortComp.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- tcpPortComp.setLayoutData(layoutData);
-
- portLabel = new Label(tcpPortComp, SWT.HORIZONTAL);
- portLabel.setText(Messages.SerialPortAddressDialog_port);
- layoutData = new GridData(SWT.LEAD, SWT.CENTER, false, false);
- portLabel.setLayoutData(layoutData);
-
- portControl = new Combo(tcpPortComp, SWT.DROP_DOWN);
- layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
- portControl.setLayoutData(layoutData);
- portControl.addVerifyListener(new VerifyListener() {
- @Override
- public void verifyText(VerifyEvent e) {
- StringBuilder buffer = new StringBuilder(((Combo)e.widget).getText());
-
- try {
- if (e.end > e.start) {
- buffer.replace(e.start, e.end, e.text);
- } else if (e.end >= 0) {
- buffer.insert(e.end, e.text);
- }
- } catch (StringIndexOutOfBoundsException exc) { /* ignored on purpose */ }
-
- String fulltext = buffer.toString();
- e.doit = fulltext.matches("([0-9]{0,5})|(0((x|X)[0-9a-fA-F]{0,4})?)"); //$NON-NLS-1$
-
- if (e.doit && fulltext.length() > 0 && !fulltext.equalsIgnoreCase("0x")) { //$NON-NLS-1$
- try {
- int value = Integer.decode(fulltext).intValue();
- if (value < 0 || value > 65535) {
- e.doit = false;
- }
- }
- catch (Exception ex) {
- e.doit = false;
- }
- }
- }
- });
- portControl.addModifyListener(new ModifyListener(){
- @Override
- public void modifyText(ModifyEvent e) {
- onModify();
- }
- });
-
- // Trigger the runnable after having created all controls!
- parent.getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- boolean enable = tcpHistory != null && tcpHistory.contains(data);
- setTTYControlEnabled(!enable);
- setTCPControlEnabled(enable);
- onModify();
- }
- });
-
- applyDialogFont(ttyComp);
- applyDialogFont(tcpComp);
-
- setupData();
- }
-
- private void setupData() {
- setTTYControlEnabled(true);
- setTCPControlEnabled(false);
- if (ttyHistory != null && !ttyHistory.isEmpty()) {
- for (String tty : ttyHistory) {
- if (tty != null && tty.trim().length() > 0 && ttyControl.indexOf(tty) == -1) {
- ttyControl.add(tty.trim());
- }
- if (tty != null && tty.equals(data)) {
- ttyControl.setText(tty.trim());
- }
- }
- }
- if (tcpHistory != null && !tcpHistory.isEmpty()) {
- for (String tcp : tcpHistory) {
- String[] data = tcp.split(":"); //$NON-NLS-1$
- if (data.length > 1) {
- if (data[1] != null && data[1].trim().length() > 0 && ttyControl.indexOf(data[1]) == -1) {
- addressControl.add(data[1].trim());
- }
- }
- if (data.length > 2) {
- if (data[2] != null && data[2].trim().length() > 0 && ttyControl.indexOf(data[2]) == -1) {
- addressControl.add(data[2].trim());
- }
- }
- if (tcp.equals(this.data)) {
- setTTYControlEnabled(false);
- setTCPControlEnabled(true);
- if (data.length > 1) {
- addressControl.setText(data[1]);
- }
- if (data.length > 2) {
- portControl.setText(data[2]);
- }
- }
- }
- }
- onModify();
- }
-
- void setTTYControlEnabled(boolean enable) {
- ttyControlSelector.setSelection(enable);
- ttyControl.setEnabled(enable);
- }
-
- void setTCPControlEnabled(boolean enable) {
- tcpControlSelector.setSelection(enable);
- addressControl.setEnabled(enable);
- portControl.setEnabled(enable);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.TrayDialog#createButtonBar(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected Control createButtonBar(Composite parent) {
- Control control = super.createButtonBar(parent);
- setButtonEnabled(OK, false);
- return control;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- @Override
- protected void okPressed() {
- if (ttyControlSelector.getSelection()) {
- data = ttyControl.getText();
- }
- else {
- data = "tcp:" + addressControl.getText() + ":" + portControl.getText(); //$NON-NLS-1$ //$NON-NLS-2$
- }
- super.okPressed();
- }
-
- /**
- * Called from the single controls if the content of the controls changed.
- */
- protected void onModify() {
- setMessage(null);
-
- boolean valid = false;
-
- if (ttyControlSelector.getSelection()) {
- valid = isTtyControlValid();
- } else {
- valid = isAddressControlValid();
- valid &= isPortControlValid();
- }
-
- if (getMessage() == null) {
- setDefaultMessage(Messages.SerialPortAddressDialog_message, IMessageProvider.INFORMATION);
- }
-
- setButtonEnabled(OK, valid);
- }
-
- private static final Pattern validCharacters = Platform.OS_WIN32.equals(Platform.getOS()) ? Pattern.compile("[\\w]+") : Pattern.compile("[\\w/]+"); //$NON-NLS-1$ //$NON-NLS-2$
-
- /**
- * Validates the tty device control.
- *
- * @return <code>True</code> if the control is valid, <code>false</code> otherwise.
- */
- protected boolean isTtyControlValid() {
- if (ttyControl == null || ttyControl.isDisposed()) return false;
-
- boolean valid = true;
-
- String m = null;
- int mt = IMessageProvider.NONE;
-
- String newText = ttyControl.getText();
- Assert.isNotNull(newText);
- if (newText.trim().length() > 0) {
- Matcher matcher = validCharacters.matcher(newText);
- if (!matcher.matches()) {
- m = Messages.SerialLinePanel_error_invalidCharactes;
- mt = IMessageProvider.ERROR;
- }
- }
- else {
- m = Messages.SerialLinePanel_error_emptyHostTTYDevice;
- mt = IMessageProvider.INFORMATION;
- }
-
- valid = mt != IMessageProvider.ERROR;
- if (mt > getMessageType()) setMessage(m, mt);
-
- return valid;
- }
-
- /**
- * Validates the address control.
- *
- * @return <code>True</code> if the control is valid, <code>false</code> otherwise.
- */
- protected boolean isAddressControlValid() {
- if (addressControl == null || addressControl.isDisposed()) return false;
-
- boolean valid = true;
-
- String m = null;
- int mt = IMessageProvider.NONE;
-
- String ipOrHostName = addressControl.getText();
-
- // info message when value is empty
- if (ipOrHostName == null || ipOrHostName.trim().length() == 0) {
- m = Messages.SerialPortAddressDialog_Information_MissingTargetNameAddress;
- mt = IMessageProvider.INFORMATION;
- } else {
- ipOrHostName = ipOrHostName.trim();
- // check IP address when only numeric values and '.' are entered
- if (ipOrHostName.matches(IP_CHARACTERS_REGEX)) {
- if (!ipOrHostName.matches(IP_REGEX)) {
- m = Messages.SerialPortAddressDialog_Error_InvalidTargetIpAddress;
- mt = IMessageProvider.ERROR;
- }
- }
- else if (ipOrHostName.matches(NAME_CHARACTERS_REGEX)) {
- if (!ipOrHostName.matches(NAME_REGEX)) {
- m = Messages.SerialPortAddressDialog_Error_InvalidTargetNameAddress;
- mt = IMessageProvider.ERROR;
- }
- }
- else {
- m = Messages.SerialPortAddressDialog_Error_InvalidTargetNameAddress;
- mt = IMessageProvider.ERROR;
- }
- }
-
- valid = mt != IMessageProvider.ERROR;
- if (mt > getMessageType()) setMessage(m, mt);
-
- return valid;
- }
-
- /**
- * Validates the port control.
- *
- * @return <code>True</code> if the control is valid, <code>false</code> otherwise.
- */
- protected boolean isPortControlValid() {
- if (portControl == null || portControl.isDisposed()) return false;
-
- boolean valid = true;
-
- String m = null;
- int mt = IMessageProvider.NONE;
-
- String newText = portControl.getText();
- Assert.isNotNull(newText);
- if (newText.trim().length() > 0) {
- if (!newText.matches("([0-9]{0,5})|(0((x|X)[0-9a-fA-F]{0,4})?)")) { //$NON-NLS-1$
- m = Messages.SerialPortAddressDialog_Error_InvalidPort;
- mt = IMessageProvider.ERROR;
- } else {
- try {
- int value = Integer.decode(newText).intValue();
- if (value < 0 || value > 65535) {
- m = Messages.SerialPortAddressDialog_Error_InvalidPortRange;
- mt = IMessageProvider.ERROR;
- }
- }
- catch (Exception ex) { /* ignored on purpose */ }
- }
- }
- else {
- m = Messages.SerialPortAddressDialog_Information_MissingPort;
- mt = IMessageProvider.INFORMATION;
- }
-
- valid = mt != IMessageProvider.ERROR;
- if (mt > getMessageType()) setMessage(m, mt);
-
- return valid;
- }
-
- /**
- * Return the new name after OK was pressed.
- * Unless OK was pressed, the old name is returned.
- */
- public String getData() {
- return data;
- }
-
- /**
- * Cleanup when dialog is closed.
- */
- protected void dispose() {
- message = null;
- messageType = IMessageProvider.NONE;
- errorMessage = null;
- title = null;
- defaultMessage = null;
- defaultMessageType = IMessageProvider.NONE;
- }
-
- /**
- * Cleanup the Dialog and close it.
- */
- @Override
- public boolean close() {
- dispose();
- return super.close();
- }
-
- /**
- * Set the enabled state of the dialog button specified by the given id (@see <code>IDialogConstants</code>)
- * to the given state.
- *
- * @param buttonId The button id for the button to change the enabled state for.
- * @param enabled The new enabled state to set for the button.
- */
- public void setButtonEnabled(int buttonId, boolean enabled) {
- Button button = getButton(buttonId);
- if (button != null) {
- button.setEnabled(enabled);
- }
- }
-
- /**
- * Sets the title for this dialog.
- *
- * @param title The title.
- */
- public void setDialogTitle(String title) {
- if (getShell() != null && !getShell().isDisposed()) {
- getShell().setText(title);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.TitleAreaDialog#setTitle(java.lang.String)
- */
- @Override
- public void setTitle(String newTitle) {
- title = newTitle;
- super.setTitle(newTitle);
- }
-
- /**
- * Set the default message. The default message is shown within the
- * dialogs message area if no other message is set.
- *
- * @param message The default message or <code>null</code>.
- * @param type The default message type. See {@link IMessageProvider}.
- */
- public void setDefaultMessage(String message, int type) {
- defaultMessage = message;
- defaultMessageType = type;
- // Push the default message to the dialog if no other message is set
- if (!isMessageSet() && getContents() != null) {
- super.setMessage(defaultMessage, defaultMessageType);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.TitleAreaDialog#setMessage(java.lang.String, int)
- */
- @Override
- public void setMessage(String newMessage, int newType) {
- // To be able to implement IMessageProvider, we have to remember the
- // set message ourselfs. There is no access to these information by the
- // base class.
- message = newMessage; messageType = newType;
- // Only pass on to super implementation if the control has been created yet
- if (getContents() != null) {
- super.setMessage(message != null ? message : defaultMessage, message != null ? messageType : defaultMessageType);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.TitleAreaDialog#setErrorMessage(java.lang.String)
- */
- @Override
- public void setErrorMessage(String newErrorMessage) {
- // See setMessage(...)
- errorMessage = newErrorMessage;
- super.setErrorMessage(newErrorMessage);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
- */
- @Override
- public String getMessage() {
- return errorMessage != null ? errorMessage : message;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
- */
- @Override
- public int getMessageType() {
- return errorMessage != null ? IMessageProvider.ERROR : messageType;
- }
-
- /**
- * Returns if or if not an message is set to the dialog.
- *
- * @return <code>True</code> if a message has been set, <code>false</code> otherwise.
- */
- public boolean isMessageSet() {
- return errorMessage != null || message != null;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.interfaces;
-
-/**
- * Trace slot identifiers.
- */
-public interface ITraceIds {
-
- /**
- * If activated, trace information about serial device discovery is printed out.
- */
- public static final String TRACE_SERIAL_LINE_PANEL = "trace/serialLinePanel"; //$NON-NLS-1$
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.interfaces;
-
-/**
- * The properties specific to the wire type "serial".
- */
-public interface IWireTypeSerial {
-
- /**
- * The data container.
- */
- public static String PROPERTY_CONTAINER_NAME = "serial"; //$NON-NLS-1$
-
- /**
- * The serial device name.
- */
- public static final String PROPERTY_SERIAL_DEVICE = "device"; //$NON-NLS-1$
-
- /**
- * The baud rate.
- */
- public static final String PROPERTY_SERIAL_BAUD_RATE = "baudrate"; //$NON-NLS-1$
-
- /**
- * The data bits
- */
- public static final String PROPERTY_SERIAL_DATA_BITS = "databits"; //$NON-NLS-1$
-
- /**
- * The parity
- */
- public static final String PROPERTY_SERIAL_PARITY = "parity"; //$NON-NLS-1$
-
- /**
- * The stop bits
- */
- public static final String PROPERTY_SERIAL_STOP_BITS = "stopbits"; //$NON-NLS-1$
-
- /**
- * The flow control
- */
- public static final String PROPERTY_SERIAL_FLOW_CONTROL = "flowcontrol"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.launcher;
-
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
-import org.eclipse.tm.terminal.connector.serial.connector.SerialSettings;
-import org.eclipse.tm.terminal.connector.serial.controls.SerialConfigurationPanel;
-import org.eclipse.tm.terminal.connector.serial.nls.Messages;
-import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
-import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
-import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
-
-/**
- * Serial launcher delegate implementation.
- */
-@SuppressWarnings("restriction")
-public class SerialLauncherDelegate extends AbstractLauncherDelegate {
- // The serial terminal connection memento handler
- private final IMementoHandler mementoHandler = new SerialMementoHandler();
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
- */
- @Override
- public boolean needsUserConfiguration() {
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
- */
- @Override
- public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
- return new SerialConfigurationPanel(container);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
- */
- @Override
- public void execute(Map<String, Object> properties, ITerminalService.Done done) {
- Assert.isNotNull(properties);
-
- // Set the terminal tab title
- String terminalTitle = getTerminalTitle(properties);
- if (terminalTitle != null) {
- properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle);
- }
-
- // Get the terminal service
- ITerminalService terminal = TerminalServiceFactory.getService();
- // If not available, we cannot fulfill this request
- if (terminal != null) {
- terminal.openConsole(properties, done);
- }
- }
-
- /**
- * Returns the terminal title string.
- * <p>
- * The default implementation constructs a title like "Serial <port> (Start time) ".
- *
- * @return The terminal title string or <code>null</code>.
- */
- private String getTerminalTitle(Map<String, Object> properties) {
- // Try to see if the user set a title explicitly via the properties map.
- String title = getDefaultTerminalTitle(properties);
- if (title != null) return title;
-
- String device = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE);
-
- if (device != null) {
- DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
- String date = format.format(new Date(System.currentTimeMillis()));
- return NLS.bind(Messages.SerialLauncherDelegate_terminalTitle, new String[]{device, date});
- }
-
- return Messages.SerialLauncherDelegate_terminalTitle_default;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
- */
- @Override
- public Object getAdapter(Class adapter) {
- if (IMementoHandler.class.equals(adapter)) {
- return mementoHandler;
- }
- return super.getAdapter(adapter);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
- */
- @Override
- public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
- Assert.isNotNull(properties);
-
- // Check for the terminal connector id
- String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
- if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.serial.SerialConnector"; //$NON-NLS-1$
-
- String port = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE);
- String baud = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE);
- Object value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
- String timeout = value instanceof Integer ? ((Integer)value).toString() : null;
- String databits = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS);
- String stopbits = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS);
- String parity = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_PARITY);
- String flowcontrol = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL);
-
- // Construct the terminal settings store
- ISettingsStore store = new SettingsStore();
-
- // Construct the serial settings
- SerialSettings serialSettings = new SerialSettings();
- serialSettings.setSerialPort(port);
- serialSettings.setBaudRate(baud);
- serialSettings.setTimeout(timeout);
- serialSettings.setDataBits(databits);
- serialSettings.setStopBits(stopbits);
- serialSettings.setParity(parity);
- serialSettings.setFlowControl(flowcontrol);
-
- // And save the settings to the store
- serialSettings.save(store);
-
- // Construct the terminal connector instance
- ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
- if (connector != null) {
- // Apply default settings
- connector.setDefaultSettings();
- // And load the real settings
- connector.load(store);
- }
-
- return connector;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.launcher;
-
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
-import org.eclipse.ui.IMemento;
-
-/**
- * Serial terminal connection memento handler implementation.
- */
-public class SerialMementoHandler implements IMementoHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
- */
- @Override
- public void saveState(IMemento memento, Map<String, Object> properties) {
- Assert.isNotNull(memento);
- Assert.isNotNull(properties);
-
- // Do not write the terminal title to the memento -> needs to
- // be recreated at the time of restoration.
- memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE));
- memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE));
- memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS));
- memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_PARITY, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_PARITY));
- memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS));
- memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL));
- Object value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
- memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT, value instanceof Integer ? ((Integer)value).intValue() : -1);
- memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
- */
- @Override
- public void restoreState(IMemento memento, Map<String, Object> properties) {
- Assert.isNotNull(memento);
- Assert.isNotNull(properties);
-
- // Restore the terminal properties from the memento
- properties.put(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE));
- properties.put(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE));
- properties.put(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS));
- properties.put(ITerminalsConnectorConstants.PROP_SERIAL_PARITY, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_PARITY));
- properties.put(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS));
- properties.put(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL));
- Integer timeout = memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT);
- if (timeout != null && timeout.intValue() != -1) properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT, timeout);
- properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.connector.serial.nls;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Externalized strings management.
- */
-public class Messages extends NLS {
-
- // The plug-in resource bundle name
- private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.serial.nls.Messages"; //$NON-NLS-1$
-
- /**
- * Static constructor.
- */
- static {
- // Load message values from bundle file
- NLS.initializeMessages(BUNDLE_NAME, Messages.class);
- }
-
- // **** Declare externalized string id's down here *****
-
- public static String SerialLauncherDelegate_terminalTitle;
- public static String SerialLauncherDelegate_terminalTitle_default;
-
- public static String SerialLinePanel_hostTTYDevice_label;
- public static String SerialLinePanel_hostTTYSpeed_label;
- public static String SerialLinePanel_hostTTYDatabits_label;
- public static String SerialLinePanel_hostTTYParity_label;
- public static String SerialLinePanel_hostTTYStopbits_label;
- public static String SerialLinePanel_hostTTYFlowControl_label;
- public static String SerialLinePanel_hostTTYTimeout_label;
- public static String SerialLinePanel_customSerialBaudRate_title;
- public static String SerialLinePanel_customSerialBaudRate_message;
- public static String SerialLinePanel_error_invalidCharactes;
- public static String SerialLinePanel_error_invalidCharactesBaudRate;
- public static String SerialLinePanel_error_emptyHostTTYDevice;
- public static String SerialLinePanel_error_emptyHostTTYSpeedRate;
- public static String SerialLinePanel_error_emptyHostTTYDatabits;
- public static String SerialLinePanel_error_emptyHostTTYParity;
- public static String SerialLinePanel_error_emptyHostTTYStopbits;
- public static String SerialLinePanel_error_emptyHostTTYFlowControl;
- public static String SerialLinePanel_error_emptyHostTTYTimeout;
- public static String SerialLinePanel_info_editableTTYDeviceSelected;
- public static String SerialLinePanel_info_editableTTYBaudRateSelected;
- public static String SerialLinePanel_warning_FailedToLoadSerialPorts;
-
- public static String SerialPortAddressDialog_dialogtitle;
- public static String SerialPortAddressDialog_title;
- public static String SerialPortAddressDialog_message;
- public static String SerialPortAddressDialog_address;
- public static String SerialPortAddressDialog_port;
- public static String SerialPortAddressDialog_Information_MissingTargetNameAddress;
- public static String SerialPortAddressDialog_Error_InvalidTargetNameAddress;
- public static String SerialPortAddressDialog_Error_InvalidTargetIpAddress;
- public static String SerialPortAddressDialog_Information_MissingPort;
- public static String SerialPortAddressDialog_Error_InvalidPort;
- public static String SerialPortAddressDialog_Error_InvalidPortRange;
-
- public static String SerialConnector_Error_LiberayNotInstalled;
-
- public static String SerialConnectWorker_PROP_TITLE;
- public static String SerialConnectWorker_PORT_IN_USE;
- public static String SerialConnectWorker_ANOTHER_TERMINAL;
- public static String SerialConnectWorker_PORT_STOLEN;
- public static String SerialConnectWorker_PORT_NOT_STOLEN;
- public static String SerialConnectWorker_NO_SUCH_PORT;
- public static String SerialConnectWorker_OWNERSHIP_GRANTED;
-
-}
+++ /dev/null
-###############################################################################
-# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-###############################################################################
-
-SerialLauncherDelegate_terminalTitle=Serial {0} ({1})
-SerialLauncherDelegate_terminalTitle_default=Serial Terminal
-
-SerialLinePanel_hostTTYDevice_label=Port:
-SerialLinePanel_hostTTYSpeed_label=Baud Rate:
-SerialLinePanel_hostTTYDatabits_label=Data Bits:
-SerialLinePanel_hostTTYParity_label=Parity:
-SerialLinePanel_hostTTYStopbits_label=Stop Bits:
-SerialLinePanel_hostTTYFlowControl_label=Flow Control:
-SerialLinePanel_hostTTYTimeout_label=Timeout (sec):
-SerialLinePanel_customSerialBaudRate_title=Configure Custom Serial Baud Rate
-SerialLinePanel_customSerialBaudRate_message=Please enter the custom serial baud rate:
-SerialLinePanel_error_invalidCharactes=The device name you've entered contains invalid characters.
-SerialLinePanel_error_invalidCharactesBaudRate=The baud rate you've entered contains invalid characters.
-SerialLinePanel_error_emptyHostTTYDevice=Please select a valid host serial device.
-SerialLinePanel_error_emptyHostTTYSpeedRate=Please select a valid serial device speed.
-SerialLinePanel_error_emptyHostTTYDatabits=Please select a valid number of data bits.
-SerialLinePanel_error_emptyHostTTYParity=Please select a valid parity.
-SerialLinePanel_error_emptyHostTTYStopbits=Please select a valid number of stop bits.
-SerialLinePanel_error_emptyHostTTYFlowControl=Please select a valid flow control.
-SerialLinePanel_error_emptyHostTTYTimeout=Please select a valid timeout.
-SerialLinePanel_info_editableTTYDeviceSelected=Please re-select ''Other...'' again to activate the custom serial device input dialog.
-SerialLinePanel_info_editableTTYBaudRateSelected=Please re-select ''Other...'' again to activate the custom serial baud rate input dialog.
-SerialLinePanel_warning_FailedToLoadSerialPorts=Failed to enumerate the systems serial ports.
-
-SerialPortAddressDialog_dialogtitle=Other...
-SerialPortAddressDialog_title=Configure Custom Serial Device
-SerialPortAddressDialog_message=Select the type of the custom serial device and configure the device properties.
-SerialPortAddressDialog_address=Address:
-SerialPortAddressDialog_port=Port:
-SerialPortAddressDialog_Information_MissingTargetNameAddress=Please enter a valid target name or IP address.
-SerialPortAddressDialog_Error_InvalidTargetNameAddress=Target name or IP address is not valid.
-SerialPortAddressDialog_Error_InvalidTargetIpAddress=Target IP address is not valid.
-SerialPortAddressDialog_Information_MissingPort=Please enter a valid port number.
-SerialPortAddressDialog_Error_InvalidPort=Target port number must be a valid number in the range of 0 to 65535.
-SerialPortAddressDialog_Error_InvalidPortRange=Target port number must be in the range of 0 to 65535.
-
-
-SerialConnector_Error_LiberayNotInstalled = The RXTX library has not been installed properly! \n\
-\n\
-Installation:\n\
--------------\n\
-* Either (a) Use Help > Software Updates, Add Site and install from:\n\
-\ \ \ http://rxtx.qbang.org/eclipse/\n\
-* Or (b) Download and install RXTX for Eclipse from:\n\
-\ \ \ http://rxtx.qbang.org/eclipse/downloads/\n\
-\n\
-For other Platforms, more info and help see\n\
-\ \ \ http://www.rxtx.org/\n\
-\ \ \ https://bugs.eclipse.org/bugs/show_bug.cgi?id=175336#c6\n\
-\n\
-This message is also available in your Error Log for Copy & Paste.
-
-# Port Ownership Handling
-SerialConnectWorker_PROP_TITLE = Terminal
-SerialConnectWorker_PORT_IN_USE = Serial port \''{0}\'' is currently in use by {1}\!\nDo you want to try and steal the port?
-SerialConnectWorker_ANOTHER_TERMINAL = another Terminal View
-SerialConnectWorker_PORT_STOLEN = Port \''{0}\'' successfully obtained from {1}\r\n
-SerialConnectWorker_PORT_NOT_STOLEN = Connection Error!\r\n \''{0}\'' is already in use by {1}.\r\n
-SerialConnectWorker_NO_SUCH_PORT = No such port: \''{0}\''\r\n
-SerialConnectWorker_OWNERSHIP_GRANTED = Connection canceled due to ownership request from {0}.\r\n
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src/"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-org.eclipse.tm.terminal.control/debug/log = false
-org.eclipse.tm.terminal.control/debug/log/char = false
-org.eclipse.tm.terminal.control/debug/log/VT100Backend = false
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.tm.terminal.control</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-eclipse.preferences.version=1
-encoding//src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java=UTF-8
+++ /dev/null
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.contexts"?>
-<!--
-Copyright (c) 2008 Wind River Systems, Inc.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Eclipse Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
-
-Contributors:
-Martin Oberhuber (Wind River) - initial API and implementation
--->
-<contexts>
- <context id="terminal_view">
- <description>The Terminal View supports direct connections to remote systems via serial or network connections.
- </description>
- </context>
-</contexts>
\ No newline at end of file
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.tm.terminal.control; singleton:=true
-Bundle-Version: 4.2.0.qualifier
-Bundle-Activator: org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.ui
-Bundle-ActivationPolicy: lazy
-Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ClassPath: .
-Export-Package: org.eclipse.tm.internal.terminal.connector;x-internal:=true,
- org.eclipse.tm.internal.terminal.control,
- org.eclipse.tm.internal.terminal.control.actions,
- org.eclipse.tm.internal.terminal.control.impl;x-internal:=true,
- org.eclipse.tm.internal.terminal.emulator;x-internal:=true,
- org.eclipse.tm.internal.terminal.model;x-internal:=true,
- org.eclipse.tm.internal.terminal.preferences,
- org.eclipse.tm.internal.terminal.provisional.api,
- org.eclipse.tm.internal.terminal.provisional.api.provider,
- org.eclipse.tm.internal.terminal.textcanvas;x-internal:=true,
- org.eclipse.tm.terminal.model
+++ /dev/null
-Terminal README
-===============
-
-The Terminal is a UI-less model of a grid of characters,
-plus an SWT widget that's updated asynchronously for
-maximum performance. The widget can be hooked up to various
-ITerminalConnectors providing an InputStream, OutputStream,
-and a method for setting the Terminal Size.
-
-The widget processes ANSI control characters, including NUL,
-backspace, carriage return, linefeed, and a subset of ANSI
-escape sequences sufficient to allow use of screen-oriented
-applications, such as vi, Emacs, and any GNU readline-enabled
-application (Bash, bc, ncftp, etc.).
-
-This is not yet a fully compliant vt100 / vt102 terminal
-emulator!
-
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>June 5, 2007</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-# about.ini
-# contains information about a feature
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# "%key" are externalized strings defined in about.properties
-# This file does not need to be translated.
-
-# Property "aboutText" contains blurb for "About" dialog (translated)
-aboutText=%blurb
-
-# Property "windowImage" contains path to window icon (16x16)
-# needed for primary features only
-
-# Property "featureImage" contains path to feature image (32x32)
-featureImage=tm32.png
-
-# Property "aboutImage" contains path to product image (500x330 or 115x164)
-# needed for primary features only
-
-# Property "appName" contains name of the application (not translated)
-# needed for primary features only
-
-# Property "welcomePage" contains path to welcome page (special XML-based format)
-# optional
-
-# Property "welcomePerspective" contains the id of the perspective in which the
-# welcome page is to be opened.
-# optional
\ No newline at end of file
+++ /dev/null
-################################################################################
-# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Martin Oberhuber - initial API and implementation
-################################################################################
-# about.properties
-# contains externalized strings for about.ini
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# fill-ins are supplied by about.mappings
-# This file should be translated.
-#
-# Do not translate any values surrounded by {}
-
-blurb=Target Management Terminal Widget\n\
-\n\
-Version: {featureVersion}\n\
-\n\
-(c) Copyright Wind River Systems, Inc. and others 2003, 2016. All rights reserved.\n\
-Visit http://www.eclipse.org/tm
+++ /dev/null
-###############################################################################
-# Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Initial Contributors:
-# The following Wind River employees contributed to the Terminal component
-# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
-# Helmut Haigermoser and Ted Williams.
-#
-# Contributors:
-# Michael Scharf (Wind River) - split into core, view and connector plugins
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-# Anna Dushistova (MontaVista) - added icons
-###############################################################################
-bin.includes = .,\
- META-INF/,\
- plugin.xml,\
- plugin.properties,\
- .options,\
- README.txt,\
- about.html,\
- about.ini,\
- about.properties,\
- tm32.png,\
- icons/,\
- HelpContexts.xml,\
- css/
-
-source.. = src/
-output.. = bin/
-src.includes = schema/,\
- about.html
-
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2015 vogella GmbH and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Lars Vogel <Lars.Vogel@gmail.com> - initial API and implementation
- ******************************************************************************/
-
-IEclipsePreferences#org-eclipse-tm-terminal-control {
- preferences:
- "TerminalPrefInvertColors=true"
-}
+++ /dev/null
-###############################################################################
-# Copyright (c) 2003 - 2015 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Initial Contributors:
-# The following Wind River employees contributed to the Terminal component
-# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
-# Helmut Haigermoser and Ted Williams.
-#
-# Contributors:
-# Michael Scharf (Wind River) - split into core, view and connector plugins
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
-###############################################################################
-
-# NLS_MESSAGEFORMAT_NONE
-
-pluginName = Terminal Control (Embeddable Widget)
-providerName = Eclipse.org - Target Management
-
-terminal.context.name.edit=Terminal Control in Focus
-terminal.context.description.edit=Show modified keyboard shortcuts in context menu
-
-terminal.context.name.terminal=Terminal Typing Connected
-terminal.context.description.terminal=Override ALT+x menu access keys while typing into the Terminal
-
-terminal.insertion.description=Terminal view insertion
-terminal.insertion.name=Terminal view insert
-terminal.insertion.category.name=Terminal view commands
-terminal.view.insertion.description = Terminal view commands
-
-terminal.command.copy.name=Copy
-terminal.command.paste.name=Paste
-terminal.command.maximize.name=Maximize Active View or Editor
-terminal.command.quickaccess.name=Quick Access
-
-terminal.preferences.name = Terminal
-terminal.font.description = The font for the terminal console.
-terminal.font.label = Terminal Console Font
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<!--
-# Copyright (c) 2006, 2014 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Michael Scharf (Wind River) - initial API and implementation
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-# Michael Scharf (Wind River) - [237425] undefined tm.terminal command
-# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
-# Martin Oberhuber (Wind River) - [434294] Add Mac bindings with COMMAND
-# Martin Oberhuber (Wind River) - [434487] Add key bindings for "maximize view" and "quick access"
-# Martin Oberhuber (Wind River) - [434939] Fix Keybinding conflicts with JEE Luna package
--->
-<plugin>
- <extension-point id="connectors" name="Terminal Connector Extensions" schema="schema/connectors.exsd"/>
-
- <extension point="org.eclipse.ui.contexts">
- <context
- name="%terminal.context.name.terminal"
- description="%terminal.context.description.terminal"
- parentId="org.eclipse.ui.contexts.window"
- id="org.eclipse.tm.terminal.TerminalContext"
- />
- <context
- name="%terminal.context.name.edit"
- description="%terminal.context.description.edit"
- parentId="org.eclipse.ui.contexts.window"
- id="org.eclipse.tm.terminal.EditContext" />
- </extension>
-
- <extension point="org.eclipse.help.contexts">
- <contexts file="HelpContexts.xml"/>
- </extension>
- <extension
- point="org.eclipse.ui.commands">
- <!-- Dummy commands for bindings, see below -->
- <command
- categoryId="org.eclipse.tm.terminal.category1"
- id="org.eclipse.tm.terminal.command1"
- name="%terminal.insertion.name"/>
- <command
- categoryId="org.eclipse.tm.terminal.category1"
- id="org.eclipse.tm.terminal.copy"
- name="%terminal.command.copy.name"/>
- <command
- categoryId="org.eclipse.tm.terminal.category1"
- id="org.eclipse.tm.terminal.paste"
- name="%terminal.command.paste.name"/>
- <command
- categoryId="org.eclipse.tm.terminal.category1"
- id="org.eclipse.tm.terminal.maximize"
- name="%terminal.command.maximize.name">
- </command>
- <command
- categoryId="org.eclipse.tm.terminal.category1"
- id="org.eclipse.tm.terminal.quickaccess"
- name="%terminal.command.quickaccess.name"/>
- <category
- description="%terminal.view.insertion.description"
- id="org.eclipse.tm.terminal.category1"
- name="%terminal.insertion.category.name"/>
- </extension>
-
- <extension point="org.eclipse.help.contexts">
- <contexts file="HelpContexts.xml"/>
- </extension>
-
- <extension
- point="org.eclipse.ui.bindings">
- <!--
- These keybindings are needed to disable the menu-activation keys (e.g.,
- Alt-F for the File menu, etc.). The code in method
- TerminalControl.TerminalFocusListener.focusGained() disables the Eclipse key
- binding service, but it doesn't disable the global menu-activation
- keys.
- -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+A"/> <!-- Search -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+B"/> <!-- Readline word-left: just to be safe -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+C"/> <!-- ClearCase, Extract Constant -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+D"/> <!-- Design, Diagram, Debug -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+E"/> <!-- Edit -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+F"/> <!-- File -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+G"/> <!-- Tar&get -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+H"/> <!-- Help -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+L"/> <!-- Ana&lyze -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+N"/> <!-- Navigate -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+P"/> <!-- Project, Papyrus, Ping -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+R"/> <!-- Run -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+S"/> <!-- Source -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+T"/> <!-- Refactor -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+V"/> <!-- CVS -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+W"/> <!-- Window -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+Y"/> <!-- S&ystem -->
- <!--
- For Copy and Paste, we need replacements since the default Ctrl+C / Ctrl+V
- need to go to the terminal and thus are not available for local Copy and Paste.
- This is not an issue on Mac, where COMMAND+C / COMMAND+V works fine.
-
- We add both CTRL+INSERT and CTRL+SHIFT+C since on some keyboards, an INSERT key
- may not be available. Note: we want the "least surprising" and "most available"
- of all bindings to be shown in the context menu according to the algorithm in
- IBindingService#getBestActiveBindingFor().
- Therefore, we do not want these extra bindings to be shown on the Mac.
-
- Unfortunately, there is no way in Bindings to say "NOT Platforms X,Y,Z"
- We would really like one of the following here but it doesnt work with Eclipse 4.3:
- platforms="!carbon,!cocoa"
- platforms="win32,motif,gtk,photon,wpf"
- Since Eclipse doesnt support this, we will redefine the original Mac bindings below,
- just to make them show up in the context menu.
- -->
- <key
- commandId="org.eclipse.tm.terminal.copy"
- contextId="org.eclipse.tm.terminal.EditContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+INSERT"/><!-- Ctrl+Insert -->
- <key
- commandId="org.eclipse.tm.terminal.copy"
- contextId="org.eclipse.tm.terminal.EditContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+M2+C"><!-- Ctrl+Shift+C -->
- </key>
- <key
- commandId="org.eclipse.tm.terminal.paste"
- contextId="org.eclipse.tm.terminal.EditContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M2+INSERT"/><!-- Shift+Insert -->
- <key
- commandId="org.eclipse.tm.terminal.paste"
- contextId="org.eclipse.tm.terminal.EditContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+M2+V"/><!-- Ctrl+Shift+V -->
- <!--
- Mac shortcuts need to be redefined with Platform Filter, in order to make
- them "better" than the bindings above and thus show up in the menu.
- See the algorithm in IBindingService#getBestActiveBindingFor().
- It looks like the "carbon" entry is also valid for "cocoa" automatically.
- -->
- <key
- commandId="org.eclipse.tm.terminal.copy"
- contextId="org.eclipse.tm.terminal.EditContext"
- platform="carbon"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+C">
- </key>
- <key
- commandId="org.eclipse.tm.terminal.paste"
- contextId="org.eclipse.tm.terminal.EditContext"
- platform="carbon"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+V"/>
- <!--
- Additional Bindings for Quick Access (Ctrl+3) and Maximize View (Ctrl+M)
- since these are extremely valuable, but the original shortcut may need
- to go to the Terminal.
- -->
- <!-- org.eclipse.ui.window.quickAccess -->
- <key
- commandId="org.eclipse.tm.terminal.quickaccess"
- contextId="org.eclipse.tm.terminal.EditContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M3+ARROW_RIGHT"/>
- <!-- org.eclipse.ui.window.maximizePart -->
- <key
- commandId="org.eclipse.tm.terminal.maximize"
- contextId="org.eclipse.tm.terminal.EditContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M3+ARROW_UP"/>
- </extension>
-
- <extension point="org.eclipse.ui.preferencePages">
- <page
- name="%terminal.preferences.name"
- class="org.eclipse.tm.internal.terminal.preferences.TerminalPreferencePage"
- id="org.eclipse.tm.terminal.TerminalPreferencePage">
- </page>
- </extension>
-
- <extension point="org.eclipse.core.runtime.preferences">
- <initializer class="org.eclipse.tm.internal.terminal.preferences.TerminalPreferenceInitializer"/>
- </extension>
-
- <extension point="org.eclipse.ui.themes" id="terminal.font">
- <fontDefinition
- defaultsTo="org.eclipse.jface.textfont"
- id="terminal.views.view.font.definition"
- label="%terminal.font.label">
- <description>
- %terminal.font.description
- </description>
- </fontDefinition>
- </extension>
-
-<!-- Theme contributions -->
- <extension point="org.eclipse.e4.ui.css.swt.theme">
- <stylesheet
- uri="css/org.eclipse.tm.terminal.stylesheet.dark.css">
- <themeid refid="org.eclipse.e4.ui.css.theme.e4_dark"/>
- </stylesheet>
- </extension>
-
-</plugin>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.eclipse.tm.terminal</groupId>
- <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
- <version>4.2.0-SNAPSHOT</version>
- <relativePath>../../admin/pom-build.xml</relativePath>
- </parent>
-
- <version>4.2.0-SNAPSHOT</version>
- <artifactId>org.eclipse.tm.terminal.control</artifactId>
- <packaging>eclipse-plugin</packaging>
-</project>
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.tm.terminal.control" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
- <appInfo>
- <meta.schema plugin="org.eclipse.tm.terminal.control" id="connectors" name="Terminal Connector Extensions"/>
- </appInfo>
- <documentation>
-
- </documentation>
- </annotation>
-
- <element name="extension">
- <annotation>
- <appInfo>
- <meta.element />
- </appInfo>
- </annotation>
- <complexType>
- <sequence minOccurs="1" maxOccurs="unbounded">
- <element ref="connector"/>
- </sequence>
- <attribute name="point" type="string" use="required">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="id" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="name" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- <appInfo>
- <meta.attribute translatable="true"/>
- </appInfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="connector">
- <complexType>
- <attribute name="class" type="string" use="required">
- <annotation>
- <documentation>
- A class extending TerminalConnectorImpl
- </documentation>
- <appInfo>
- <meta.attribute kind="java" basedOn="org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl:"/>
- </appInfo>
- </annotation>
- </attribute>
- <attribute name="id" type="string" use="required">
- <annotation>
- <documentation>
- Uniquely identify this connector for programmatic access. Clients will use this ID in order to find and instantiate it.
- </documentation>
- </annotation>
- </attribute>
- <attribute name="name" type="string">
- <annotation>
- <documentation>
- The name of the connection (used in the UI)
- </documentation>
- <appInfo>
- <meta.attribute translatable="true"/>
- </appInfo>
- </annotation>
- </attribute>
- <attribute name="hidden" type="boolean" use="default" value="false">
- <annotation>
- <documentation>
- When set to "true", the terminal connector will not be visible to the user in connector selections.
- </documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
-
-
-
-
- <annotation>
- <appInfo>
- <meta.section type="copyright"/>
- </appInfo>
- <documentation>
- Copyright (c) 2006 - 2015 Wind River Systems, Inc. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Eclipse Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
-
-Contributors:
-Michael Scharf (Wind River) - initial API and implementation
-Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
- </documentation>
- </annotation>
-
-</schema>
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Michael Scharf (Wind River) - [200541] Extract from TerminalConnectorExtension.TerminalConnectorProxy
- * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
- * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.connector;
-
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
-
-/**
- * An {@link ITerminalConnector} instance, also known as terminal connection
- * type, for maintaining a single terminal connection.
- *
- * It provides all terminal connector functions that can be provided by static
- * markup without loading the actual implementation class. The actual
- * {@link TerminalConnectorImpl} implementation class is lazily loaded by the
- * provided {@link TerminalConnector.Factory} interface when needed. class, and
- * delegates to the actual implementation when needed. The following methods can
- * be called without initializing the contributed implementation class:
- * {@link #getId()}, {@link #getName()}, {@link #getSettingsSummary()},{@link #load(ISettings)},
- * {@link #setTerminalSize(int, int)}, {@link #save(ISettings)},
- * {@link #getAdapter(Class)}
- *
- * @noextend This class is not intended to be subclassed by clients.
- * @noinstantiate This class is not intended to be instantiated by clients.
- * Clients can get terminal connector instances through the
- * {@link TerminalConnectorExtension} class.
- * @since org.eclipse.tm.terminal 2.0
- */
-public class TerminalConnector implements ITerminalConnector {
- /**
- * Creates an instance of TerminalConnectorImpl. This is used to lazily load
- * classed defined in extensions.
- *
- * @since org.eclipse.tm.terminal 2.0
- */
- public interface Factory {
- /**
- * Factory method to create the actual terminal connector implementation
- * when needed.
- *
- * @return a Connector
- * @throws Exception
- */
- TerminalConnectorImpl makeConnector() throws Exception;
- }
- /**
- * The factory for creating impl instances.
- */
- private final TerminalConnector.Factory fTerminalConnectorFactory;
- /**
- * The (display) name of the TerminalConnector
- */
- private final String fName;
- /**
- * The unique id the connector
- */
- private final String fId;
- /**
- * Flag to mark the connector as hidden.
- */
- private final boolean fHidden;
- /**
- * The connector
- */
- private TerminalConnectorImpl fConnector;
- /**
- * If the initialization of the class specified in the extension fails,
- * this variable contains the error
- */
- private Exception fException;
- /**
- * The store might be set before the real connector is initialized.
- * This keeps the value until the connector is created.
- */
- private ISettingsStore fStore;
- /**
- * Constructor for the terminal connector.
- *
- * @param terminalConnectorFactory Factory for lazily instantiating the
- * TerminalConnectorImpl when needed.
- * @param id terminal connector ID. The connector is publicly known under
- * this ID.
- * @param name translatable name to display the connector in the UI.
- */
- public TerminalConnector(TerminalConnector.Factory terminalConnectorFactory, String id, String name, boolean hidden) {
- fTerminalConnectorFactory = terminalConnectorFactory;
- fId = id;
- fName = name;
- fHidden = hidden;
- }
- public String getInitializationErrorMessage() {
- getConnectorImpl();
- if(fException!=null)
- return fException.getLocalizedMessage();
- return null;
- }
- public String getId() {
- return fId;
- }
- public String getName() {
- return fName;
- }
- public boolean isHidden() {
- return fHidden;
- }
- private TerminalConnectorImpl getConnectorImpl() {
- if(!isInitialized()) {
- try {
- fConnector=fTerminalConnectorFactory.makeConnector();
- fConnector.initialize();
- } catch (Exception e) {
- fException=e;
- fConnector=new TerminalConnectorImpl(){
- public void connect(ITerminalControl control) {
- // super.connect(control);
- control.setState(TerminalState.CLOSED);
- control.setMsg(getInitializationErrorMessage());
- }
- public OutputStream getTerminalToRemoteStream() {
- return null;
- }
- public String getSettingsSummary() {
- return null;
- }};
- // that's the place where we log the exception
- Logger.logException(e);
- }
- if(fConnector!=null && fStore!=null)
- fConnector.load(fStore);
- }
- return fConnector;
- }
-
- public boolean isInitialized() {
- return fConnector!=null || fException!=null;
- }
- public void connect(ITerminalControl control) {
- getConnectorImpl().connect(control);
- }
- public void disconnect() {
- getConnectorImpl().disconnect();
- }
- public OutputStream getTerminalToRemoteStream() {
- return getConnectorImpl().getTerminalToRemoteStream();
- }
- public String getSettingsSummary() {
- if(fConnector!=null)
- return getConnectorImpl().getSettingsSummary();
- else
- return TerminalMessages.NotInitialized;
- }
- public boolean isLocalEcho() {
- return getConnectorImpl().isLocalEcho();
- }
- public void load(ISettingsStore store) {
- if(fConnector==null) {
- fStore=store;
- } else {
- getConnectorImpl().load(store);
- }
- }
- @Override
- public void setDefaultSettings() {
- getConnectorImpl().setDefaultSettings();
- }
- public void save(ISettingsStore store) {
- // no need to save the settings: it cannot have changed
- // because we are not initialized....
- if(fConnector!=null)
- getConnectorImpl().save(store);
- }
- public void setTerminalSize(int newWidth, int newHeight) {
- // we assume that setTerminalSize is called also after
- // the terminal has been initialized. Else we would have to cache
- // the values....
- if(fConnector!=null) {
- fConnector.setTerminalSize(newWidth, newHeight);
- }
- }
- public Object getAdapter(Class adapter) {
- TerminalConnectorImpl connector=null;
- if(isInitialized())
- connector=getConnectorImpl();
- // if we cannot create the connector then we cannot adapt...
- if(connector!=null) {
- // maybe the connector is adaptable
- if(connector instanceof IAdaptable) {
- Object result =((IAdaptable)connector).getAdapter(adapter);
- // Not sure if the next block is needed....
- if(result==null)
- //defer to the platform
- result= Platform.getAdapterManager().getAdapter(connector, adapter);
- if(result!=null)
- return result;
- }
- // maybe the real adapter is what we need....
- if(adapter.isInstance(connector))
- return connector;
- }
- // maybe we have to be adapted....
- return Platform.getAdapterManager().getAdapter(this, adapter);
- }
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2008, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.connector;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-class TerminalToRemoteInjectionOutputStream extends FilterOutputStream {
- /**
- * This class handles bytes written to the {@link TerminalToRemoteInjectionOutputStream}.
- */
- static abstract public class Interceptor {
- protected OutputStream fOriginal;
- /**
- * @param original the injection into the original stream begins
- * @throws IOException
- */
- public void begin(OutputStream original) throws IOException {
- fOriginal=original;
- }
- /**
- * @param b a byte was written to the {@link TerminalToRemoteInjectionOutputStream}.
- * @throws IOException
- */
- public void write(int b) throws IOException {
- }
- /**
- * @param b bytes written to the {@link TerminalToRemoteInjectionOutputStream}.
- * @param off the start offset in the data.
- * @param len the number of bytes to write.
- * @throws IOException
- */
- public void write(byte[] b, int off, int len) throws IOException {
- }
- /**
- * The injection into the normal stream ends.
- * @throws IOException
- */
- public void close() throws IOException {
- }
- public void flush() {
- }
- }
- static public class BufferInterceptor extends Interceptor {
- private final ByteArrayOutputStream fBuffer=new ByteArrayOutputStream();
- public void close() throws IOException {
- fOriginal.write(fBuffer.toByteArray());
- }
- public void write(byte[] b, int off, int len) throws IOException {
- fBuffer.write(b, off, len);
- }
- public void write(int b) throws IOException {
- fBuffer.write(b);
- }
- }
- private class TerminalFilterOutputStream extends OutputStream {
- final private Object fLock=TerminalToRemoteInjectionOutputStream.this;
- public void close() throws IOException {
- synchronized(fLock) {
- if(fInjection==this) {
- flush();
- ungrabOutput();
- }
- }
- }
- public void write(byte[] b, int off, int len) throws IOException {
- synchronized(fLock) {
- checkStream();
- out.write(b, off, len);
- }
- }
- public void write(byte[] b) throws IOException {
- synchronized(fLock) {
- checkStream();
- out.write(b);
- }
- }
- public void flush() throws IOException {
- synchronized(fLock) {
- checkStream();
- out.flush();
- }
- }
- public void write(int b) throws IOException {
- synchronized(fLock) {
- checkStream();
- out.write(b);
- }
- }
- private void checkStream() throws IOException {
- if(fInjection!=this)
- throw new IOException("Stream is closed"); //$NON-NLS-1$
- }
- }
- private Interceptor fInterceptor;
- private TerminalFilterOutputStream fInjection;
- public TerminalToRemoteInjectionOutputStream(OutputStream out) {
- super(out);
- }
- synchronized protected void ungrabOutput() throws IOException {
- if(fInterceptor!=null) {
- fInterceptor.close();
- fInterceptor=null;
- fInjection=null;
- }
- }
- /**
- * There can only be one injection stream active at a time. You must call close on the
- * returned output stream to end the injection.
- * @param interceptor This is used handle bytes sent while the injection stream is active.
- * @return a output stream that can be used to write to the decorated stream.
- * @throws IOException
- */
- public synchronized OutputStream grabOutput(Interceptor interceptor) throws IOException {
- if(fInjection!=null) {
- throw new IOException("Buffer in use"); //$NON-NLS-1$
- }
- fInterceptor=interceptor;
- fInterceptor.begin(out);
- fInjection=new TerminalFilterOutputStream();
- return fInjection;
- }
- /** See {@link #grabOutput(TerminalToRemoteInjectionOutputStream.Interceptor)}.
- * @return injection output stream
- * @throws IOException
- */
- public synchronized OutputStream grabOutput() throws IOException {
- return grabOutput(new BufferInterceptor());
- }
- synchronized public void close() throws IOException {
- if(fInjection!=null) {
- fInjection.close();
- }
- super.close();
- }
- synchronized public void flush() throws IOException {
- if(fInterceptor!=null)
- fInterceptor.flush();
- out.flush();
- }
- synchronized public void write(byte[] b, int off, int len) throws IOException {
- if(fInterceptor!=null)
- fInterceptor.write(b, off, len);
- else
- out.write(b, off, len);
- }
- synchronized public void write(int b) throws IOException {
- if(fInterceptor!=null)
- fInterceptor.write(b);
- else
- out.write(b);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial implementation
- * Michael Scharf (Wing River) - [211659] Add field assist to terminal input field
- * Michael Scharf (Wing River) - [196447] The optional terminal input line should be resizeable
- * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
- * Michael Scharf (Wing River) - [236458] Fix 168197 lost the last entry
- * Anton Leherbauer (Wind River) - [220971] The optional terminal input line has redraw problems when resizing
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.eclipse.jface.fieldassist.IContentProposal;
-import org.eclipse.jface.fieldassist.IContentProposalProvider;
-import org.eclipse.jface.fieldassist.TextContentAdapter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Sash;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
-
-
-
-/**
- * Manages the Command History for the command line input
- * of the terminal control.
- * <li>
- * <ul>Navigate with ARROW_UP,ARROW_DOWN,PAGE_UP,PAGE_DOWN
- * <ul>ESC to cancel history editing
- * <ul>History can be edited (by moving up and edit) but changes are
- * not persistent (like in bash).
- * <ul>If the same command is entered multiple times in a row,
- * only one entry is kept in the history.
- * </li>
- *
- */
-public class CommandInputFieldWithHistory implements ICommandInputField {
- private class FieldAssist implements IContentProposalProvider {
-
- public IContentProposal[] getProposals(String contents, int position) {
- String prefix=contents.substring(0, position);
- List<Proposal> result=new ArrayList<Proposal>();
- // show an entry only once
- Set<String> seen=new HashSet<String>();
- for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) {
- String history = iterator.next();
- if(history.startsWith(prefix) && !seen.contains(history)) {
- // the content is the rest of the history item
- String content=history.substring(prefix.length());
- result.add(new Proposal(content,history));
- // don't add this proposal again
- seen.add(history);
- }
- }
- return result.toArray(new IContentProposal[result.size()]);
- }
-
- }
- private static class Proposal implements IContentProposal {
-
- private final String fContent;
- private final String fLabel;
- Proposal(String content, String label) {
- fContent= content;
- fLabel= label;
- }
- public String getContent() {
- return fContent;
- }
-
- public String getLabel() {
- return fLabel;
- }
-
- public String getDescription() {
- return null;
- }
-
- public int getCursorPosition() {
- return fContent.length();
- }
- }
-
- final List<String> fHistory=new ArrayList<String>();
- /**
- * Keeps a modifiable history while in history editing mode
- */
- List<Object> fEditedHistory;
- /**
- * The current position in the edit history
- */
- private int fEditHistoryPos=0;
- /**
- * The limit of the history.
- */
- private final int fMaxSize;
- /**
- * The input text field.
- */
- private Text fInputField;
- private Sash fSash;
- private Composite fPanel;
- public CommandInputFieldWithHistory(int maxHistorySize) {
- fMaxSize=maxHistorySize;
- }
- /**
- * Add a line to the history.
- * @param line The line to be added to the history.
- */
- protected void pushLine(String line) {
- endHistoryMode();
- // anything to remember?
- if(line==null || line.trim().length()==0)
- return;
- fHistory.add(0,line);
- // ignore if the same as last
- if(fHistory.size()>1 && line.equals(fHistory.get(1)))
- fHistory.remove(0);
- // limit the history size.
- if(fHistory.size()>=fMaxSize)
- fHistory.remove(fHistory.size()-1);
- }
- /**
- * Sets the history
- * @param history or null
- */
- public void setHistory(String history) {
- endHistoryMode();
- fHistory.clear();
- if(history==null)
- return;
- // add history entries separated by '\n'
- // fHistory.addAll(Arrays.asList(history.split("\n"))); //$NON-NLS-1$
- //<J2ME CDC-1.1 Foundation-1.1 variant>
- StringTokenizer tok=new StringTokenizer(history,"\n"); //$NON-NLS-1$
- while(tok.hasMoreElements())
- fHistory.add((String) tok.nextElement());
- //</J2ME CDC-1.1 Foundation-1.1 variant>
- }
- /**
- * @return the current content of the history buffer and new line separated list
- */
- public String getHistory() {
- StringBuffer buff=new StringBuffer();
- boolean sep=false;
- for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) {
- String line=iterator.next();
- if(line.length()>0) {
- if(sep)
- buff.append("\n"); //$NON-NLS-1$
- else
- sep=true;
- buff.append(line);
- }
- }
- return buff.toString();
- }
- /**
- * @param currLine Line of text to be moved in history
- * @param count (+1 or -1) for forward and backward movement. -1 goes back
- * @return the new string to be displayed in the command line or null,
- * if the limit is reached.
- */
- public String move(String currLine, int count) {
- if(!inHistoryMode()) {
- fEditedHistory=new ArrayList<Object>(fHistory.size()+1);
- fEditedHistory.add(currLine);
- fEditedHistory.addAll(fHistory);
- fEditHistoryPos=0;
- }
- fEditedHistory.set(fEditHistoryPos,currLine);
- if(fEditHistoryPos+count>=fEditedHistory.size())
- return null;
- if(fEditHistoryPos+count<0)
- return null;
- fEditHistoryPos+=count;
- return (String) fEditedHistory.get(fEditHistoryPos);
- }
- private boolean inHistoryMode() {
- return fEditedHistory!=null;
- }
-
- /**
- * Exit the history movements and go to position 0;
- * @return the string to be shown in the command line
- */
- protected String escape() {
- if(!inHistoryMode())
- return null;
- String line= (String) fEditedHistory.get(0);
- endHistoryMode();
- return line;
- }
- /**
- * End history editing
- */
- private void endHistoryMode() {
- fEditedHistory=null;
- fEditHistoryPos=0;
- }
- public void createControl(final Composite parent,final ITerminalViewControl terminal) {
-// fSash = new Sash(parent,SWT.HORIZONTAL|SWT.SMOOTH);
- fSash = new Sash(parent,SWT.HORIZONTAL);
- final GridData gd_sash = new GridData(SWT.FILL, SWT.CENTER, true, false);
- gd_sash.heightHint=5;
- fSash.setLayoutData(gd_sash);
- fSash.addListener (SWT.Selection, new Listener () {
- public void handleEvent (Event e) {
- if (e.detail == SWT.DRAG) {
- // don't redraw during drag, it causes paint errors - bug 220971
- return;
- }
- // no idea why this is needed
- GridData gdata = (GridData) fInputField.getLayoutData();
- Rectangle sashRect = fSash.getBounds ();
- Rectangle containerRect = parent.getClientArea ();
-
- int h=fInputField.getLineHeight();
- // make sure the input filed height is a multiple of the line height
- gdata.heightHint = Math.max(((containerRect.height-e.y-sashRect.height)/h)*h,h);
- // do not show less then one line
- e.y=Math.min(e.y,containerRect.height-h);
- fInputField.setLayoutData(gdata);
- parent.layout();
- // else the content assist icon will be replicated
- parent.redraw();
- }
- });
- fPanel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginWidth = 0; layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 2;
- fPanel.setLayout(layout);
- fPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- fInputField=new Text(fPanel, SWT.MULTI|SWT.BORDER|SWT.WRAP|SWT.V_SCROLL);
- GridData data=new GridData(SWT.FILL, SWT.FILL, true, false);
- boolean installDecoration=true;
- if(installDecoration) {
- // The ContentAssistCommandAdapter says: "The client is responsible for
- // ensuring that adequate space is reserved for the decoration."
- // TODO: what is the "adequate space"???
- data.horizontalIndent=6;
- }
- fInputField.setLayoutData(data);
- fInputField.setFont(terminal.getFont());
- // Register field assist *before* the key listener.
- // Else the ENTER key is sent *first* to the input field
- // and then to the field assist popup.
- // (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
- new ContentAssistCommandAdapter(
- fInputField,
- new TextContentAdapter(),
- new FieldAssist(),
- null,
- null,
- installDecoration);
- fInputField.addKeyListener(new KeyListener(){
- public void keyPressed(KeyEvent e) {
- // if the field assist has handled the key already then
- // ignore it (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
- if(!e.doit)
- return;
- if(e.character==SWT.CR || e.character==SWT.LF) {
- e.doit=false;
- String line=fInputField.getText();
- if(!terminal.pasteString(line+'\r'))
- return;
- pushLine(line);
- setCommand("");//$NON-NLS-1$
- } else if(e.keyCode==SWT.ARROW_UP || e.keyCode==SWT.PAGE_UP) {
- e.doit=false;
- setCommand(move(fInputField.getText(),1));
- } else if(e.keyCode==SWT.ARROW_DOWN || e.keyCode==SWT.PAGE_DOWN) {
- e.doit=false;
- setCommand(move(fInputField.getText(),-1));
- } else if(e.keyCode==SWT.ESC) {
- e.doit=false;
- setCommand(escape());
- }
- }
- private void setCommand(String line) {
- if(line==null)
- return;
- fInputField.setText(line);
- fInputField.setSelection(fInputField.getCharCount());
- }
- public void keyReleased(KeyEvent e) {
- }
- });
- }
- public void setFont(Font font) {
- fInputField.setFont(font);
- fInputField.getParent().layout(true);
- }
- public void dispose() {
- fSash.dispose();
- fSash=null;
- fPanel.dispose();
- fPanel=null;
- fInputField.dispose();
- fInputField=null;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Interface to create a command input control.
- *
- */
-public interface ICommandInputField {
- /**
- * @param parent
- * @param terminal
- */
- void createControl(Composite parent, ITerminalViewControl terminal);
-
- void dispose();
- /**
- * Sets the font of a control created with {@link #createControl(Composite, ITerminalViewControl)}
- * @param control
- * @param font the new text font
- */
- void setFont(Font font);
-
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-
-/**
- * Provided by a view implementation.
- * @author Michael Scharf
- *
- */
-public interface ITerminalListener {
- /**
- * Called when the state of the connection has changed.
- * @param state
- */
- void setState(TerminalState state);
-
- /**
- * Set the title of the terminal.
- * @param title
- */
- void setTerminalTitle(String title);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-/**
- * Terminal listener allowing to listen to terminal selection changes.
- *
- * @since 4.1
- */
-public interface ITerminalListener2 extends ITerminalListener {
-
- /**
- * selection has been changed internally e.g. select all
- * clients might want to react on that
- * NOTE: this does not include mouse selections
- * those are handled in separate MouseListeners
- * TODO should be unified
- */
- void setTerminalSelectionChanged();
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 CWI. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Davy Landman (CWI) - [475267][api] Initial definition of interface
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
-
-/**
- * Terminal specific version of {@link org.eclipse.swt.events.MouseListener}
- * @since 4.1
- */
-public interface ITerminalMouseListener {
- /**
- * Invoked when a double-click has happend inside the terminal control.<br>
- * <br>
- * <strong>Important:</strong> the event fires for every click, even outside the text region.
- * @param terminalText a read-only view of the current terminal text
- * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
- */
- void mouseDoubleClick(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
- /**
- * Invoked when a mouse button is pushed down inside the terminal control.<br>
- * <br>
- * <strong>Important:</strong> the event fires for every mouse down, even outside the text region.
- * @param terminalText a read-only view of the current terminal text
- * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
- */
- void mouseDown(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
- /**
- * Invoked when a mouse button is released inside the terminal control.<br>
- * <br>
- * <strong>Important:</strong> the event fires for every mouse up, even outside the text region.
- * @param terminalText a read-only view of the current terminal text
- * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
- */
- void mouseUp(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
- * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
- * Davy Landman (CWI) - [475267][api] Allow custom mouse listeners
- ******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-import java.io.UnsupportedEncodingException;
-
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-
-/**
- * @author Michael Scharf
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface ITerminalViewControl {
- /**
- * Set the encoding that the Terminal uses to decode byte streams into
- * characters.
- *
- * @see ITerminalControl#setEncoding(String)
- * @since org.eclipse.tm.terminal 2.0
- */
- void setEncoding(String encoding) throws UnsupportedEncodingException;
-
- /**
- * Get the Terminal's current encoding.
- *
- * @return the current Encoding of the Terminal.
- * @see ITerminalControl#getEncoding()
- * @since org.eclipse.tm.terminal 2.0
- */
- String getEncoding();
-
- boolean isEmpty();
- /**
- * Sets the Terminal font
- * @deprecated use {@link #setFont(String)} in order to support bold and italic variants of the given font
- * @param font
- */
- void setFont(Font font);
- /**
- * Sets the font for the Terminal, using a JFace symbolic font name, such
- * that bold and italic variants can be leveraged.
- * @since 3.2
- * @param fontName
- */
- void setFont(String fontName);
- void setInvertedColors(boolean invert);
- Font getFont();
- /**
- * @return the text control
- */
- Control getControl();
- /**
- * @return the root of all controls
- */
- Control getRootControl();
- boolean isDisposed();
- void selectAll();
- void clearTerminal();
- void copy();
- void paste();
- String getSelection();
- TerminalState getState();
- Clipboard getClipboard();
- void disconnectTerminal();
- void disposeTerminal();
- String getSettingsSummary();
- ITerminalConnector[] getConnectors();
- void setFocus();
- ITerminalConnector getTerminalConnector();
- void setConnector(ITerminalConnector connector);
- void connectTerminal();
- /**
- * @param write a single character to terminal
- */
- void sendKey(char arg0);
- /**
- * @param string write string to terminal
- */
- public boolean pasteString(String string);
-
- boolean isConnected();
-
- /**
- * @param inputField null means no input field is shown
- */
- void setCommandInputField(ICommandInputField inputField);
- /**
- * @return null or the current input field
- */
- ICommandInputField getCommandInputField();
-
- /**
- * @return the maximum number of lines to display
- * in the terminal view. -1 means unlimited.
- */
- public int getBufferLineLimit();
-
- /**
- * @param bufferLineLimit the maximum number of lines to show
- * in the terminal view. -1 means unlimited.
- */
- public void setBufferLineLimit(int bufferLineLimit);
- boolean isScrollLock();
- void setScrollLock(boolean on);
-
- /**
- * @since 4.1
- */
- void addMouseListener(ITerminalMouseListener listener);
- /**
- * @since 4.1
- */
- void removeMouseListener(ITerminalMouseListener listener);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-
-public class TerminalViewControlFactory {
- /**
- * Instantiate a Terminal widget.
- * @param target Callback for notifying the owner of Terminal state changes.
- * @param wndParent The Window parent to embed the Terminal in.
- * @param connectors Provided connectors.
- */
- public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
- return makeControl(target, wndParent, connectors, false);
- }
-
- /**
- * Instantiate a Terminal widget.
- * @param target Callback for notifying the owner of Terminal state changes.
- * @param wndParent The Window parent to embed the Terminal in.
- * @param connectors Provided connectors.
- * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings
- * from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page.
- * Otherwise, clients need to maintain settings themselves.
- * @since 3.2
- */
- public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors, boolean useCommonPrefs) {
- return new VT100TerminalControl(target, wndParent, connectors, useCommonPrefs);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - Adapted from TerminalAction
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-public abstract class AbstractTerminalAction extends Action {
- private final ITerminalViewControl fTarget;
-
- public AbstractTerminalAction(String strId) {
- this(null, strId, 0);
- }
-
- public AbstractTerminalAction(ITerminalViewControl target,
- String strId) {
- this(target, strId, 0);
- }
-
- public AbstractTerminalAction(ITerminalViewControl target,
- String strId, int style) {
- super("", style); //$NON-NLS-1$
-
- fTarget = target;
-
- setId(strId);
- }
-
- abstract public void run();
-
- protected void setupAction(String strText, String strToolTip,
- String strImage, String strEnabledImage, String strDisabledImage,
- boolean bEnabled) {
- setupAction(strText, strToolTip, strImage, strEnabledImage,
- strDisabledImage, bEnabled, TerminalPlugin.getDefault()
- .getImageRegistry());
- }
-
- protected void setupAction(String strText, String strToolTip,
- String strHoverImage, String strEnabledImage,
- String strDisabledImage, boolean bEnabled,
- ImageRegistry imageRegistry) {
- setupAction(strText, strToolTip, imageRegistry
- .getDescriptor(strHoverImage), imageRegistry
- .getDescriptor(strEnabledImage), imageRegistry
- .getDescriptor(strDisabledImage), bEnabled);
- }
-
- protected void setupAction(String strText, String strToolTip,
- ImageDescriptor hoverImage, ImageDescriptor enabledImage,
- ImageDescriptor disabledImage, boolean bEnabled) {
- setText(strText);
- setToolTipText(strToolTip);
- setEnabled(bEnabled);
- if (enabledImage != null) {
- setImageDescriptor(enabledImage);
- }
- if (disabledImage != null) {
- setDisabledImageDescriptor(disabledImage);
- }
- if (hoverImage != null) {
- setHoverImageDescriptor(hoverImage);
- }
- }
-
- /**
- * Return the terminal instance on which the action should operate.
- *
- * @return the terminal instance on which the action should operate.
- */
- protected ITerminalViewControl getTarget() {
- return fTarget;
- }
-
- /**
- * Subclasses can update their action
- *
- * @param aboutToShow true before the menu is shown -- false when the menu
- * gets hidden
- */
- public void updateAction(boolean aboutToShow) {
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.osgi.util.NLS;
-
-public class ActionMessages extends NLS {
- static {
- NLS.initializeMessages(ActionMessages.class.getName(),
- ActionMessages.class);
- }
-
- public static String COPY;
- public static String CUT;
- public static String PASTE;
- public static String SELECTALL;
- public static String CLEARALL;
-
-}
+++ /dev/null
-###############################################################################
-# Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Initial Contributors:
-# The following Wind River employees contributed to the Terminal component
-# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
-# Helmut Haigermoser and Ted Williams.
-#
-# Contributors:
-# Michael Scharf (Wind River) - split into core, view and connector plugins
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-# Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
-###############################################################################
-
-# NLS_MESSAGEFORMAT_NONE
-
-COPY = Copy
-CUT = Cut
-PASTE = Paste
-SELECTALL = Select All
-CLEARALL = Clear Terminal
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - extracted from TerminalConsts
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-public interface ImageConsts {
- public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$
- public final static String IMAGE_DIR_LOCALTOOL = IMAGE_DIR_ROOT + "clcl16/"; // basic colors - size 16x16 //$NON-NLS-1$
- public final static String IMAGE_DIR_DLCL = IMAGE_DIR_ROOT + "dlcl16/"; // disabled - size 16x16 //$NON-NLS-1$
- public final static String IMAGE_DIR_ELCL = IMAGE_DIR_ROOT+ "elcl16/"; // enabled - size 16x16 //$NON-NLS-1$
-
- public static final String IMAGE_CLCL_CLEAR_ALL = "ImageClclClearAll"; //$NON-NLS-1$
-
- public static final String IMAGE_DLCL_CLEAR_ALL = "ImageDlclClearAll"; //$NON-NLS-1$
-
- public static final String IMAGE_ELCL_CLEAR_ALL = "ImageElclClearAll"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
- ********************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionClearAll extends AbstractTerminalAction {
- public TerminalActionClearAll() {
- super(TerminalActionClearAll.class.getName());
-
- setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL,
- ImageConsts.IMAGE_CLCL_CLEAR_ALL,
- ImageConsts.IMAGE_ELCL_CLEAR_ALL,
- ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
- }
-
- public TerminalActionClearAll(ITerminalViewControl target) {
- super(target, TerminalActionClearAll.class.getName());
-
- setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL,
- ImageConsts.IMAGE_CLCL_CLEAR_ALL,
- ImageConsts.IMAGE_ELCL_CLEAR_ALL,
- ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
- }
-
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.clearTerminal();
- }
- }
-
- public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- setEnabled(target != null && !target.isEmpty());
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-
-public class TerminalActionCopy extends AbstractTerminalAction {
- public TerminalActionCopy() {
- super(TerminalActionCopy.class.getName());
- setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
- ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
- setupAction(ActionMessages.COPY, ActionMessages.COPY, si
- .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
- }
-
- public TerminalActionCopy(ITerminalViewControl target) {
- super(target, TerminalActionCopy.class.getName());
- setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
- ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
- setupAction(ActionMessages.COPY, ActionMessages.COPY, si
- .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
- }
-
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- String selection = target.getSelection();
-
- if (!selection.equals("")) {//$NON-NLS-1$
- target.copy();
- } else {
- target.sendKey('\u0003');
- }
- }
- }
-
- public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- boolean bEnabled = target != null;
- if (aboutToShow && bEnabled) {
- bEnabled = target.getSelection().length() > 0;
- }
- setEnabled(bEnabled);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-
-public class TerminalActionCut extends AbstractTerminalAction {
- public TerminalActionCut() {
- super(TerminalActionCut.class.getName());
- ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
- setupAction(ActionMessages.CUT, ActionMessages.CUT, si
- .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
- }
-
- public TerminalActionCut(ITerminalViewControl target) {
- super(target, TerminalActionCut.class.getName());
- ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
- setupAction(ActionMessages.CUT, ActionMessages.CUT, si
- .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
- .getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
- }
-
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.sendKey('\u0018');
- }
- }
-
- public void updateAction(boolean aboutToShow) {
- // Cut is always disabled
- setEnabled(false);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
- * Uwe Stieber (Wind River) - [294719] [terminal] SWT Widget disposed in TerminalActionPaste
- * Martin Oberhuber (Wind River) - [296212] Cannot paste text into terminal on some Linux hosts
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-
-public class TerminalActionPaste extends AbstractTerminalAction {
- public TerminalActionPaste() {
- super(TerminalActionPaste.class.getName());
- setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
- ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
- setupAction(ActionMessages.PASTE, ActionMessages.PASTE,
- si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
- si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
- si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED),
- false);
- }
-
- public TerminalActionPaste(ITerminalViewControl target) {
- super(target, TerminalActionPaste.class.getName());
- setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
- ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
- setupAction(ActionMessages.PASTE, ActionMessages.PASTE,
- si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
- si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
- si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED),
- false);
- }
-
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.paste();
- }
- }
-
- public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- boolean bEnabled = target != null && target.getClipboard() != null && !target.getClipboard().isDisposed();
- if (bEnabled) {
- String strText = (String) target.getClipboard().getContents(
- TextTransfer.getInstance());
- bEnabled = ((strText != null) && (!strText.equals("")) && (target.getState() == TerminalState.CONNECTED));//$NON-NLS-1$
- }
- setEnabled(bEnabled);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionSelectAll extends AbstractTerminalAction {
- public TerminalActionSelectAll() {
- super(TerminalActionSelectAll.class.getName());
-
- setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL,
- (ImageDescriptor) null, null, null, false);
- }
-
- public TerminalActionSelectAll(ITerminalViewControl target) {
- super(target, TerminalActionSelectAll.class.getName());
-
- setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL,
- (ImageDescriptor) null, null, null, false);
- }
-
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.selectAll();
- }
- }
-
- public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- setEnabled(target != null && !target.isEmpty());
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.impl;
-
-import java.io.OutputStream;
-
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-
-/**
- * need a better name!
- * @author Michael Scharf
- *
- */
-public interface ITerminalControlForText {
-
- TerminalState getState();
- void setState(TerminalState state);
- void setTerminalTitle(String title);
-
- ITerminalConnector getTerminalConnector();
-
- OutputStream getOutputStream();
-
- /**
- * Enable/disable Application Cursor Keys mode (DECCKM)
- * @param enable
- */
- void enableApplicationCursorKeys(boolean enable);
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.impl;
-
-import org.eclipse.osgi.util.NLS;
-
-public class TerminalMessages extends NLS {
- static {
- NLS.initializeMessages(TerminalMessages.class.getName(), TerminalMessages.class);
- }
-
- public static String TerminalError;
- public static String SocketError;
- public static String IOError;
- public static String CannotConnectTo;
- public static String NotInitialized;
-
- //Preference Page
- public static String INVERT_COLORS;
- public static String BUFFERLINES;
-
-}
+++ /dev/null
-###############################################################################
-# Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Initial Contributors:
-# The following Wind River employees contributed to the Terminal component
-# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
-# Helmut Haigermoser and Ted Williams.
-#
-# Contributors:
-# Michael Scharf (Wind River) - split into core, view and connector plugins
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
-###############################################################################
-
-# NLS_MESSAGEFORMAT_VAR
-
-TerminalError = Terminal Error
-SocketError = Socket Error
-IOError = IO Error
-CannotConnectTo = Cannot initialize {0}:\n{1}
-NotInitialized = Not Initialized
-
-INVERT_COLORS = Invert terminal colors
-BUFFERLINES = Terminal buffer lines:
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.control.impl;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.tm.internal.terminal.control.actions.ImageConsts;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-public class TerminalPlugin extends AbstractUIPlugin {
- private static TerminalPlugin plugin;
- public static final String PLUGIN_ID = "org.eclipse.tm.terminal.control"; //$NON-NLS-1$
- public static final String HELP_VIEW = PLUGIN_ID + ".terminal_view"; //$NON-NLS-1$
-
- /**
- * The constructor.
- */
- public TerminalPlugin() {
- }
- /**
- * Returns the shared instance.
- */
- public static TerminalPlugin getDefault() {
- return plugin;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- public static boolean isOptionEnabled(String strOption) {
- String strEnabled = Platform.getDebugOption(strOption);
- if (strEnabled == null)
- return false;
-
- return new Boolean(strEnabled).booleanValue();
- }
-
- @Override
- protected void initializeImageRegistry(ImageRegistry imageRegistry) {
- try {
- // Local toolbars
- putImageInRegistry(imageRegistry, ImageConsts.IMAGE_CLCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_LOCALTOOL + "clear_co.gif"); //$NON-NLS-1$
- // Enabled local toolbars
- putImageInRegistry(imageRegistry, ImageConsts.IMAGE_ELCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_ELCL + "clear_co.gif"); //$NON-NLS-1$
- // Disabled local toolbars
- putImageInRegistry(imageRegistry, ImageConsts.IMAGE_DLCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_DLCL + "clear_co.gif"); //$NON-NLS-1$
- } catch (MalformedURLException malformedURLException) {
- malformedURLException.printStackTrace();
- }
- }
-
- protected void putImageInRegistry(ImageRegistry imageRegistry, String strKey, String relativePath) throws MalformedURLException {
- URL url = TerminalPlugin.getDefault().getBundle().getEntry(relativePath);
- ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url);
- imageRegistry.put(strKey, imageDescriptor);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-
-package org.eclipse.tm.internal.terminal.emulator;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.jface.bindings.TriggerSequence;
-import org.eclipse.jface.bindings.keys.KeySequence;
-import org.eclipse.jface.bindings.keys.KeyStroke;
-import org.eclipse.jface.bindings.keys.SWTKeySupport;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.keys.IBindingService;
-
-class EditActionAccelerators {
- private static final String COPY_COMMAND_ID = "org.eclipse.tm.terminal.copy"; //$NON-NLS-1$
- private static final String PASTE_COMMAND_ID = "org.eclipse.tm.terminal.paste"; //$NON-NLS-1$
-
- private final Map commandIdsByAccelerator = new HashMap();
-
- private void load() {
- addAccelerator(COPY_COMMAND_ID);
- addAccelerator(PASTE_COMMAND_ID);
- }
-
- private void addAccelerator(String commandId) {
- TriggerSequence[] bindings = bindingsFor(commandId);
- for (int i=0; i<bindings.length; ++i) {
- if (bindings[i] instanceof KeySequence) {
- KeyStroke[] keyStrokes = ((KeySequence) bindings[i]).getKeyStrokes();
- if (keyStrokes.length != 0) {
- int accelerator = SWTKeySupport.convertKeyStrokeToAccelerator(keyStrokes[0]);
- commandIdsByAccelerator.put(new Integer(accelerator), commandId);
- }
- }
- }
- }
-
- private static TriggerSequence[] bindingsFor(String commandId) {
- IBindingService bindingService = bindingService();
- return bindingService.getActiveBindingsFor(commandId);
- }
-
- private static IBindingService bindingService() {
- return (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
- }
-
- boolean isCopyAction(int accelerator) {
- return isMatchingAction(accelerator, COPY_COMMAND_ID);
- }
-
- boolean isPasteAction(int accelerator) {
- return isMatchingAction(accelerator, PASTE_COMMAND_ID);
- }
-
- private boolean isMatchingAction(int accelerator, String commandId) {
- if (commandIdsByAccelerator.isEmpty()) {
- load();
- }
- return commandId.equals(commandIdsByAccelerator.get(new Integer(accelerator)));
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
- * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
- * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.emulator;
-
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- *
- */
-public interface IVT100EmulatorBackend {
-
- /**
- * This method erases all text from the Terminal view. Including the history
- */
- void clearAll();
-
- /**
- * Sets the Dimensions of the addressable scroll space of the screen....
- * Keeps the cursor position relative to the bottom of the screen!
- * @param lines
- * @param cols
- */
- void setDimensions(int lines, int cols);
-
- /**
- * This method makes room for N characters on the current line at the cursor
- * position. Text under the cursor moves right without wrapping at the end
- * of the line.
- * 01234
- * 0 123
- */
- void insertCharacters(int charactersToInsert);
-
- /**
- * Erases from cursor to end of screen, including cursor position. Cursor does not move.
- */
- void eraseToEndOfScreen();
-
- /**
- * Erases from beginning of screen to cursor, including cursor position. Cursor does not move.
- */
- void eraseToCursor();
-
- /**
- * Erases complete display. All lines are erased and changed to single-width. Cursor does not move.
- */
- void eraseAll();
-
- /**
- * Erases complete line.
- */
- void eraseLine();
-
- /**
- * Erases from cursor to end of line, including cursor position.
- */
- void eraseLineToEnd();
-
- /**
- * Erases from beginning of line to cursor, including cursor position.
- */
- void eraseLineToCursor();
-
- /**
- * Inserts n lines at line with cursor. Lines displayed below cursor move down.
- * Lines moved past the bottom margin are lost. This sequence is ignored when
- * cursor is outside scrolling region.
- * @param n the number of lines to insert
- */
- void insertLines(int n);
-
- /**
- * Deletes n characters, starting with the character at cursor position.
- * When a character is deleted, all characters to the right of cursor move
- * left. This creates a space character at right margin. This character
- * has same character attribute as the last character moved left.
- * @param n
- * 012345
- * 0145xx
- */
- void deleteCharacters(int n);
-
- /**
- * Deletes n lines, starting at line with cursor. As lines are deleted,
- * lines displayed below cursor move up. Lines added to bottom of screen
- * have spaces with same character attributes as last line moved up. This
- * sequence is ignored when cursor is outside scrolling region.
- * @param n the number of lines to delete
- */
- void deleteLines(int n);
-
- Style getDefaultStyle();
-
- void setDefaultStyle(Style defaultStyle);
-
- Style getStyle();
-
- /**
- * Sets the style to be used from now on
- * @param style
- */
- void setStyle(Style style);
-
- /**
- * This method displays a subset of the newly-received text in the Terminal
- * view, wrapping text at the right edge of the screen and overwriting text
- * when the cursor is not at the very end of the screen's text.
- * <p>
- *
- * There are never any ANSI control characters or escape sequences in the
- * text being displayed by this method (this includes newlines, carriage
- * returns, and tabs).
- * <p>
- */
- void appendString(String buffer);
-
- /**
- * Process a newline (Control-J) character. A newline (NL) character just
- * moves the cursor to the same column on the next line, creating new lines
- * when the cursor reaches the bottom edge of the terminal. This is
- * counter-intuitive, especially to UNIX programmers who are taught that
- * writing a single NL to a terminal is sufficient to move the cursor to the
- * first column of the next line, as if a carriage return (CR) and a NL were
- * written.
- * <p>
- *
- * UNIX terminals typically display a NL character as a CR followed by a NL
- * because the terminal device typically has the ONLCR attribute bit set
- * (see the termios(4) man page for details), which causes the terminal
- * device driver to translate NL to CR + NL on output. The terminal itself
- * (i.e., a hardware terminal or a terminal emulator, like xterm or this
- * code) _always_ interprets a CR to mean "move the cursor to the beginning
- * of the current line" and a NL to mean "move the cursor to the same column
- * on the next line".
- * <p>
- */
- void processNewline();
-
- /**
- * This method returns the relative line number of the line containing the
- * cursor. The returned line number is relative to the topmost visible line,
- * which has relative line number 0.
- *
- * @return The relative line number of the line containing the cursor.
- */
- int getCursorLine();
-
- int getCursorColumn();
-
- /**
- * This method moves the cursor to the specified line and column. Parameter
- * <i>targetLine</i> is the line number of a screen line, so it has a
- * minimum value of 0 (the topmost screen line) and a maximum value of
- * heightInLines - 1 (the bottommost screen line). A line does not have to
- * contain any text to move the cursor to any column in that line.
- */
- void setCursor(int targetLine, int targetColumn);
-
- void setCursorColumn(int targetColumn);
-
- void setCursorLine(int targetLine);
-
- int getLines();
-
- int getColumns();
-
- /**
- * Enables VT100 line wrapping mode (default is off).
- * This corresponds to the VT100 'eat_newline_glitch' terminal capability.
- * If enabled, writing to the rightmost column does not cause
- * an immediate wrap to the next line. Instead the line wrap occurs on the
- * next output character.
- *
- * @param enable whether to enable or disable VT100 line wrapping mode
- */
- void setVT100LineWrapping(boolean enable);
-
- /**
- * @return whether VT100 line wrapping mode is enabled
- */
- boolean isVT100LineWrapping();
-
- /**
- * Enables/disables insert mode (IRM).
- *
- * @param enable whether to enable insert mode
- */
- void setInsertMode(boolean enable);
-
- /**
- * Set scrolling region. Negative values reset the scroll region.
- *
- * @param top top line of scroll region
- * @param bottom bottom line of scroll region
- */
- void setScrollRegion(int top, int bottom);
-
- /**
- * Scroll text upwards.
- *
- * @param lines number of lines to scroll
- */
- void scrollUp(int lines);
-
- /**
- * Scroll text downwards.
- *
- * @param lines number of lines to scroll
- */
- void scrollDown(int lines);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.emulator;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-
-public class LoggingOutputStream extends FilterOutputStream {
-
- public LoggingOutputStream(OutputStream out) {
- super(out);
- }
-
- public void write(byte[] b, int off, int len) throws IOException {
- if(Logger.isLogEnabled())
- Logger.log("Received " + len + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$
- Logger.encode(new String(b, 0, len)) + "'"); //$NON-NLS-1$
-
- // we cannot call super.write, because this would call our write
- // which logs character by character.....
- //super.write(b, off, len);
- if ((off | len | (b.length - (len + off)) | (off + len)) < 0)
- throw new IndexOutOfBoundsException();
-
- for (int i = 0 ; i < len ; i++) {
- super.write(b[off + i]);
- }
- }
-
- public void write(int b) throws IOException {
- if(Logger.isLogEnabled())
- Logger.log("Received " + 1 + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$
- Logger.encode(new String(new byte[]{(byte)b}, 0, 1)) + "'"); //$NON-NLS-1$
- super.write(b);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
- * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
- * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.emulator;
-
-import java.io.PrintStream;
-
-import org.eclipse.tm.terminal.model.Style;
-
-public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
- final IVT100EmulatorBackend fBackend;
- final PrintStream fWriter;
- public VT100BackendTraceDecorator(IVT100EmulatorBackend backend, PrintStream out) {
- fBackend = backend;
- fWriter=out;
- }
-
- public void appendString(String buffer) {
- fWriter.println("appendString(\""+buffer+"\")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.appendString(buffer);
- }
-
- public void clearAll() {
- fWriter.println("clearAll()"); //$NON-NLS-1$
- fBackend.clearAll();
- }
-
- public void deleteCharacters(int n) {
- fWriter.println("deleteCharacters("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.deleteCharacters(n);
- }
-
- public void deleteLines(int n) {
- fWriter.println("deleteLines("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.deleteLines(n);
- }
-
- public void eraseAll() {
- fWriter.println("eraseAll()"); //$NON-NLS-1$
- fBackend.eraseAll();
- }
-
- public void eraseLine() {
- fWriter.println("eraseLine()"); //$NON-NLS-1$
- fBackend.eraseLine();
- }
-
- public void eraseLineToCursor() {
- fWriter.println("eraseLineToCursor()"); //$NON-NLS-1$
- fBackend.eraseLineToCursor();
- }
-
- public void eraseLineToEnd() {
- fWriter.println("eraseLineToEnd()"); //$NON-NLS-1$
- fBackend.eraseLineToEnd();
- }
-
- public void eraseToCursor() {
- fWriter.println("eraseToCursor()"); //$NON-NLS-1$
- fBackend.eraseToCursor();
- }
-
- public void eraseToEndOfScreen() {
- fWriter.println("eraseToEndOfScreen()"); //$NON-NLS-1$
- fBackend.eraseToEndOfScreen();
- }
-
- public int getColumns() {
- return fBackend.getColumns();
- }
-
- public int getCursorColumn() {
- return fBackend.getCursorColumn();
- }
-
- public int getCursorLine() {
- return fBackend.getCursorLine();
- }
-
- public Style getDefaultStyle() {
- return fBackend.getDefaultStyle();
- }
-
- public int getLines() {
- return fBackend.getLines();
- }
-
- public Style getStyle() {
- return fBackend.getStyle();
- }
-
- public void insertCharacters(int charactersToInsert) {
- fWriter.println("insertCharacters("+charactersToInsert+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.insertCharacters(charactersToInsert);
- }
-
- public void insertLines(int n) {
- fWriter.println("insertLines("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.insertLines(n);
- }
-
- public void processNewline() {
- fWriter.println("processNewline()"); //$NON-NLS-1$
- fBackend.processNewline();
- }
-
- public void setCursor(int targetLine, int targetColumn) {
- fWriter.println("setCursor("+targetLine+", "+targetColumn+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- fBackend.setCursor(targetLine, targetColumn);
- }
-
- public void setCursorColumn(int targetColumn) {
- fWriter.println("setCursorColumn("+targetColumn+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setCursorColumn(targetColumn);
- }
-
- public void setCursorLine(int targetLine) {
- fWriter.println("setCursorLine("+targetLine+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setCursorLine(targetLine);
- }
-
- public void setDefaultStyle(Style defaultStyle) {
- fWriter.println("setDefaultStyle("+defaultStyle+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setDefaultStyle(defaultStyle);
- }
-
- public void setDimensions(int lines, int cols) {
- fWriter.println("setDimensions("+lines+","+cols+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- fBackend.setDimensions(lines, cols);
- }
-
- public void setStyle(Style style) {
- fWriter.println("setStyle("+style+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setStyle(style);
- }
-
- public void setVT100LineWrapping(boolean enable) {
- fWriter.println("setVT100LineWrapping("+enable+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setVT100LineWrapping(enable);
- }
-
- public boolean isVT100LineWrapping() {
- return fBackend.isVT100LineWrapping();
- }
-
- public void setInsertMode(boolean enable) {
- fWriter.println("setInsertMode("+enable+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setInsertMode(enable);
- }
-
- public void setScrollRegion(int top, int bottom) {
- fWriter.println("setScrollRegion("+top+','+bottom+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.setScrollRegion(top, bottom);
- }
-
- public void scrollUp(int lines) {
- fWriter.println("scrollUp("+lines+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.scrollUp(lines);
- }
-
- public void scrollDown(int lines) {
- fWriter.println("scrollDown("+lines+")"); //$NON-NLS-1$ //$NON-NLS-2$
- fBackend.scrollDown(lines);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Michael Scharf (Wind River) - [209746] There are cases where some colors not displayed correctly
- * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
- * Michael Scharf (Wind River) - [262996] get rid of TerminalState.OPENED
- * Martin Oberhuber (Wind River) - [334969] Fix multi-command SGR sequence
- * Kris De Volder (VMWare) - [392107] Switched interpretation for ESC[0K and ESC[1K sequences
- * Martin Oberhuber (Wind River) - [401386] Regression: No header on top due to incorrect ESC[K interpretation
- * Martin Oberhuber (Wind River) - [401480] Handle ESC[39;49m and ESC[G
- * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
- * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
- * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
- * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.emulator;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * This class processes character data received from the remote host and
- * displays it to the user using the Terminal view's StyledText widget. This
- * class processes ANSI control characters, including NUL, backspace, carriage
- * return, linefeed, and a subset of ANSI escape sequences sufficient to allow
- * use of screen-oriented applications, such as vi, Emacs, and any GNU
- * readline-enabled application (Bash, bc, ncftp, etc.).
- * <p>
- *
- * @author Fran Litterio <francis.litterio@windriver.com>
- * @author Chris Thew <chris.thew@windriver.com>
- */
-public class VT100Emulator implements ControlListener {
- /** This is a character processing state: Initial state. */
- private static final int ANSISTATE_INITIAL = 0;
-
- /** This is a character processing state: We've seen an escape character. */
- private static final int ANSISTATE_ESCAPE = 1;
-
- /**
- * This is a character processing state: We've seen a '[' after an escape
- * character. Expecting a parameter character or a command character next.
- */
- private static final int ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND = 2;
-
- /**
- * This is a character processing state: We've seen a ']' after an escape
- * character. We are now expecting an operating system command that
- * reprograms an intelligent terminal.
- */
- private static final int ANSISTATE_EXPECTING_OS_COMMAND = 3;
-
- /**
- * This is a character processing state: We've seen a '[?' after an escape
- * character. Expecting a parameter character or a command character next.
- */
- private static final int ANSISTATE_EXPECTING_DEC_PRIVATE_COMMAND = 4;
-
- /**
- * This is a character processing state: We've seen one of ()*+-./ after an escape
- * character. Expecting a character set designation character.
- */
- private static final int ANSISTATE_EXPECTING_CHARSET_DESIGNATION = 5;
-
-
- /**
- * This field holds the current state of the Finite TerminalState Automaton (FSA)
- * that recognizes ANSI escape sequences.
- *
- * @see #processNewText()
- */
- private int ansiState = ANSISTATE_INITIAL;
-
- /**
- * This field holds a reference to the {@link TerminalControl} object that
- * instantiates this class.
- */
- private final ITerminalControlForText terminal;
-
- /**
- * This field holds a reference to the StyledText widget that is used to
- * display text to the user.
- */
- final private IVT100EmulatorBackend text;
- /**
- * This field hold the saved absolute line number of the cursor when
- * processing the "ESC 7" and "ESC 8" command sequences.
- */
- private int savedCursorLine = 0;
-
- /**
- * This field hold the saved column number of the cursor when processing the
- * "ESC 7" and "ESC 8" command sequences.
- */
- private int savedCursorColumn = 0;
-
- /**
- * This field holds an array of StringBuffer objects, each of which is one
- * parameter from the current ANSI escape sequence. For example, when
- * parsing the escape sequence "\e[20;10H", this array holds the strings
- * "20" and "10".
- */
- private final StringBuffer[] ansiParameters = new StringBuffer[16];
-
- /**
- * This field holds the OS-specific command found in an escape sequence of
- * the form "\e]...\u0007".
- */
- private final StringBuffer ansiOsCommand = new StringBuffer(128);
-
- /**
- * This field holds the index of the next unused element of the array stored
- * in field {@link #ansiParameters}.
- */
- private int nextAnsiParameter = 0;
-
- Reader fReader;
-
- boolean fCrAfterNewLine;
- /**
- * The constructor.
- */
- public VT100Emulator(ITerminalTextData data, ITerminalControlForText terminal, Reader reader) {
- super();
-
- Logger.log("entered"); //$NON-NLS-1$
-
- this.terminal = terminal;
-
- for (int i = 0; i < ansiParameters.length; ++i) {
- ansiParameters[i] = new StringBuffer();
- }
- setInputStreamReader(reader);
- if(TerminalPlugin.isOptionEnabled(Logger.TRACE_DEBUG_LOG_VT100BACKEND))
- text=new VT100BackendTraceDecorator(new VT100EmulatorBackend(data),System.out);
- else
- text=new VT100EmulatorBackend(data);
-
-// text.setDimensions(24, 80);
- Style style=Style.getStyle("BLACK", "WHITE"); //$NON-NLS-1$ //$NON-NLS-2$
- text.setDefaultStyle(style);
- text.setStyle(style);
- }
-
- /**
- * Set the reader that this Terminal gets its input from.
- *
- * The reader can be changed while the Terminal is running, but a change of
- * the reader likely loses some characters which have not yet been fully
- * read. Changing the reader can be done in order to change the selected
- * Encoding, though. This is typically done when the Terminal is
- * constructed, i.e. before it really starts operation; or, when the user
- * manually selects a different encoding and thus doesn't care about losing
- * old characters.
- *
- * @param reader the new Reader
- */
- public void setInputStreamReader(Reader reader) {
- fReader = reader;
- }
-
- public void setDimensions(int lines,int cols) {
- text.setDimensions(lines, cols);
- ITerminalConnector telnetConnection = getConnector();
- if (telnetConnection != null) {
- telnetConnection.setTerminalSize(text.getColumns(), text.getLines());
- }
-
- }
-
- /**
- * This method performs clean up when this VT100Emulator object is no longer
- * needed. After calling this method, no other method on this object should
- * be called.
- */
- public void dispose() {
- }
-
- /**
- * This method is required by interface ControlListener. It allows us to
- * know when the StyledText widget is moved.
- */
- public void controlMoved(ControlEvent event) {
- Logger.log("entered"); //$NON-NLS-1$
- // Empty.
- }
-
- /**
- * This method is required by interface ControlListener. It allows us to
- * know when the StyledText widget is resized.
- */
- public void controlResized(ControlEvent event) {
- Logger.log("entered"); //$NON-NLS-1$
- adjustTerminalDimensions();
- }
-
- /**
- * This method erases all text from the Terminal view.
- */
- public void clearTerminal() {
- Logger.log("entered"); //$NON-NLS-1$
- text.clearAll();
- }
-
- /**
- * This method is called when the user changes the Terminal view's font. We
- * attempt to recompute the pixel width of the new font's characters and fix
- * the terminal's dimensions.
- */
- public void fontChanged() {
- Logger.log("entered"); //$NON-NLS-1$
-
- if (text != null)
- adjustTerminalDimensions();
- }
-// /**
-// * This method executes in the Display thread to process data received from
-// * the remote host by class {@link org.eclipse.tm.internal.terminal.telnet.TelnetConnection} and
-// * other implementors of {@link ITerminalConnector}, like the
-// * SerialPortHandler.
-// * <p>
-// * These connectors write text to the terminal's buffer through
-// * {@link TerminalControl#writeToTerminal(String)} and then have
-// * this run method executed in the display thread. This method
-// * must not execute at the same time as methods
-// * {@link #setNewText(StringBuffer)} and {@link #clearTerminal()}.
-// * <p>
-// * IMPORTANT: This method must be called in strict alternation with method
-// * {@link #setNewText(StringBuffer)}.
-// * <p>
-// */
- public void processText() {
- try {
- // Find the width and height of the terminal, and resize it to display an
- // integral number of lines and columns.
-
- adjustTerminalDimensions();
-
- // Restore the caret offset, process and display the new text, then save
- // the caret offset. See the documentation for field caretOffset for
- // details.
-
- // ISSUE: Is this causing the scroll-to-bottom-on-output behavior?
-
- try {
- processNewText();
- } catch (IOException e) {
- Logger.logException(e);
- }
-
- } catch (Exception ex) {
- Logger.logException(ex);
- }
- }
- /**
- * This method scans the newly received text, processing ANSI control
- * characters and escape sequences and displaying normal text.
- * @throws IOException
- */
- private void processNewText() throws IOException {
- Logger.log("entered"); //$NON-NLS-1$
-
-
- // Scan the newly received text.
-
- while (hasNextChar()) {
- char character = getNextChar();
-
- switch (ansiState) {
- case ANSISTATE_INITIAL:
- switch (character) {
- case '\u0000':
- break; // NUL character. Ignore it.
-
- case '\u0007':
- processBEL(); // BEL (Control-G)
- break;
-
- case '\b':
- processBackspace(); // Backspace
- break;
-
- case '\t':
- processTab(); // Tab.
- break;
-
- case '\n':
- processNewline(); // Newline (Control-J)
- if(fCrAfterNewLine)
- processCarriageReturn(); // Carriage Return (Control-M)
- break;
-
- case '\r':
- processCarriageReturn(); // Carriage Return (Control-M)
- break;
-
- case '\u001b':
- ansiState = ANSISTATE_ESCAPE; // Escape.
- break;
-
- default:
- processNonControlCharacters(character);
- break;
- }
- break;
-
- case ANSISTATE_ESCAPE:
- // We've seen an escape character. Here, we process the character
- // immediately following the escape.
-
- switch (character) {
- case '[':
- ansiState = ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND;
- nextAnsiParameter = 0;
-
- // Erase the parameter strings in preparation for optional
- // parameter characters.
-
- for (int i = 0; i < ansiParameters.length; ++i) {
- ansiParameters[i].delete(0, ansiParameters[i].length());
- }
- break;
-
- case ']':
- ansiState = ANSISTATE_EXPECTING_OS_COMMAND;
- ansiOsCommand.delete(0, ansiOsCommand.length());
- break;
-
- case ')':
- case '(':
- case '*':
- case '+':
- case '-':
- case '.':
- case '/':
- ansiState = ANSISTATE_EXPECTING_CHARSET_DESIGNATION;
- break;
-
- case '7':
- // Save cursor position and character attributes
-
- ansiState = ANSISTATE_INITIAL;
- savedCursorLine = relativeCursorLine();
- savedCursorColumn = getCursorColumn();
- break;
-
- case '8':
- // Restore cursor and attributes to previously saved
- // position
-
- ansiState = ANSISTATE_INITIAL;
- moveCursor(savedCursorLine, savedCursorColumn);
- break;
-
- case 'c':
- // Reset the terminal
- ansiState = ANSISTATE_INITIAL;
- resetTerminal();
- break;
-
- default:
- Logger
- .log("Unsupported escape sequence: escape '" + character + "'"); //$NON-NLS-1$ //$NON-NLS-2$
- ansiState = ANSISTATE_INITIAL;
- break;
- }
- break;
-
- case ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND:
- if (character == '?') {
- ansiState = ANSISTATE_EXPECTING_DEC_PRIVATE_COMMAND;
- break;
- }
-
- // Parameters can appear after the '[' in an escape sequence, but they
- // are optional.
-
- if (character == '@' || (character >= 'A' && character <= 'Z')
- || (character >= 'a' && character <= 'z')) {
- ansiState = ANSISTATE_INITIAL;
- processAnsiCommandCharacter(character);
- } else {
- processAnsiParameterCharacter(character);
- }
- break;
-
- case ANSISTATE_EXPECTING_OS_COMMAND:
- // A BEL (\u0007) character marks the end of the OSC sequence.
-
- if (character == '\u0007') {
- ansiState = ANSISTATE_INITIAL;
- processAnsiOsCommand();
- } else {
- ansiOsCommand.append(character);
- }
- break;
-
- case ANSISTATE_EXPECTING_DEC_PRIVATE_COMMAND:
- // Parameters can appear after the '[?' in an escape sequence, but they
- // are optional.
-
- if (character == '@' || (character >= 'A' && character <= 'Z')
- || (character >= 'a' && character <= 'z')) {
- ansiState = ANSISTATE_INITIAL;
- processDecPrivateCommandCharacter(character);
- } else {
- processAnsiParameterCharacter(character);
- }
- break;
-
- case ANSISTATE_EXPECTING_CHARSET_DESIGNATION:
- if (character != '%')
- ansiState = ANSISTATE_INITIAL;
- // Character set designation commands are ignored
- break;
-
- default:
- // This should never happen! If it does happen, it means there is a
- // bug in the FSA. For robustness, we return to the initial
- // state.
-
- Logger.log("INVALID ANSI FSA STATE: " + ansiState); //$NON-NLS-1$
- ansiState = ANSISTATE_INITIAL;
- break;
- }
- }
- }
- private void resetTerminal() {
- text.eraseAll();
- text.setCursor(0, 0);
- text.setStyle(text.getDefaultStyle());
- text.setScrollRegion(-1, -1);
- text.setInsertMode(false);
- terminal.enableApplicationCursorKeys(false);
- }
- /**
- * This method is called when we have parsed an OS Command escape sequence.
- * The only one we support is "\e]0;...\u0007", which sets the terminal
- * title.
- */
- private void processAnsiOsCommand() {
- if (ansiOsCommand.charAt(0) != '0' || ansiOsCommand.charAt(1) != ';') {
- Logger
- .log("Ignoring unsupported ANSI OSC sequence: '" + ansiOsCommand + "'"); //$NON-NLS-1$ //$NON-NLS-2$
- return;
- }
- terminal.setTerminalTitle(ansiOsCommand.substring(2));
- }
-
- /**
- * This method dispatches control to various processing methods based on the
- * command character found in the most recently received ANSI escape
- * sequence. This method only handles command characters that follow the
- * ANSI standard Control Sequence Introducer (CSI), which is "\e[...", where
- * "..." is an optional ';'-separated sequence of numeric parameters.
- * <p>
- */
- private void processAnsiCommandCharacter(char ansiCommandCharacter) {
- // If the width or height of the terminal is ridiculously small (one line or
- // column or less), don't even try to process the escape sequence. This avoids
- // throwing an exception (SPR 107450). The display will be messed up, but what
- // did you user expect by making the terminal so small?
-
- switch (ansiCommandCharacter) {
- case '@':
- // Insert character(s).
- processAnsiCommand_atsign();
- break;
-
- case 'A':
- // Move cursor up N lines (default 1).
- processAnsiCommand_A();
- break;
-
- case 'B':
- // Move cursor down N lines (default 1).
- processAnsiCommand_B();
- break;
-
- case 'C':
- // Move cursor forward N columns (default 1).
- processAnsiCommand_C();
- break;
-
- case 'D':
- // Move cursor backward N columns (default 1).
- processAnsiCommand_D();
- break;
-
- case 'd':
- // Line Position Absolute [row] (default = [1,column]) (VPA).
- processAnsiCommand_d();
- break;
-
- case 'E':
- // Move cursor to first column of Nth next line (default 1).
- processAnsiCommand_E();
- break;
-
- case 'F':
- // Move cursor to first column of Nth previous line (default 1).
- processAnsiCommand_F();
- break;
-
- case 'G':
- // Move to column N of current line (default 1).
- processAnsiCommand_G();
- break;
-
- case 'H':
- // Set cursor Position.
- processAnsiCommand_H();
- break;
-
- case 'h':
- // Reset Mode.
- processAnsiCommand_h();
- break;
-
- case 'J':
- // Erase part or all of display. Cursor does not move.
- processAnsiCommand_J();
- break;
-
- case 'K':
- // Erase in line (cursor does not move).
- processAnsiCommand_K();
- break;
-
- case 'L':
- // Insert line(s) (current line moves down).
- processAnsiCommand_L();
- break;
-
- case 'l':
- // Set Mode.
- processAnsiCommand_l();
- break;
-
- case 'M':
- // Delete line(s).
- processAnsiCommand_M();
- break;
-
- case 'm':
- // Set Graphics Rendition (SGR).
- processAnsiCommand_m();
- break;
-
- case 'n':
- // Device Status Report (DSR).
- processAnsiCommand_n();
- break;
-
- case 'P':
- // Delete character(s).
- processAnsiCommand_P();
- break;
-
- case 'r':
- // Set Scrolling Region.
- processAnsiCommand_r();
- break;
-
- case 'S':
- // Scroll up.
- processAnsiCommand_S();
- break;
-
- case 'T':
- // Scroll down.
- processAnsiCommand_T();
- break;
-
- case 'X':
- // Erase character.
- // Emacs, vi, and GNU readline don't seem to use this command, so we ignore
- // it for now.
- break;
-
- case 'Z':
- // Cursor back tab.
- // Emacs, vi, and GNU readline don't seem to use this command, so we ignore
- // it for now.
- break;
-
- default:
- Logger.log("Ignoring unsupported ANSI command character: '" + //$NON-NLS-1$
- ansiCommandCharacter + "'"); //$NON-NLS-1$
- break;
- }
- }
-
- /**
- * This method dispatches control to various processing methods based on the
- * command character found in the most recently received DEC private mode escape
- * sequence. This method only handles command characters that follow the
- * control sequence CSI ?
- */
- private void processDecPrivateCommandCharacter(char commandCharacter) {
- switch (commandCharacter) {
- case 'h':
- // DEC Private Mode Set (DECSET)
- processDecPrivateCommand_h();
- break;
-
- case 'l':
- // DEC Private Mode Reset (DECRST)
- processDecPrivateCommand_l();
- break;
-
- default:
- Logger.log("Ignoring unsupported DEC private command character: '" + //$NON-NLS-1$
- commandCharacter + "'"); //$NON-NLS-1$
- break;
- }
- }
-
- /**
- * This method makes room for N characters on the current line at the cursor
- * position. Text under the cursor moves right without wrapping at the end
- * of the line.
- */
- private void processAnsiCommand_atsign() {
- int charactersToInsert = getAnsiParameter(0);
- text.insertCharacters(charactersToInsert);
- }
-
- /**
- * This method moves the cursor up by the number of lines specified by the
- * escape sequence parameter (default 1).
- */
- private void processAnsiCommand_A() {
- moveCursorUp(getAnsiParameter(0));
- }
-
- /**
- * This method moves the cursor down by the number of lines specified by the
- * escape sequence parameter (default 1).
- */
- private void processAnsiCommand_B() {
- moveCursorDown(getAnsiParameter(0));
- }
-
- /**
- * This method moves the cursor forward by the number of columns specified
- * by the escape sequence parameter (default 1).
- */
- private void processAnsiCommand_C() {
- moveCursorForward(getAnsiParameter(0));
- }
-
- /**
- * This method moves the cursor backward by the number of columns specified
- * by the escape sequence parameter (default 1).
- */
- private void processAnsiCommand_D() {
- moveCursorBackward(getAnsiParameter(0));
- }
-
- /**
- * This method moves the cursor to a specific row.
- */
- private void processAnsiCommand_d() {
- // Line Position Absolute [row] (default = [1,column]) (VPA).
- text.setCursorLine(getAnsiParameter(0) - 1);
- }
-
- /**
- * This method moves the cursor to the first column of the Nth next line,
- * where N is specified by the ANSI parameter (default 1).
- */
- private void processAnsiCommand_E() {
- int linesToMove = getAnsiParameter(0);
-
- moveCursor(relativeCursorLine() + linesToMove, 0);
- }
-
- /**
- * This method moves the cursor to the first column of the Nth previous
- * line, where N is specified by the ANSI parameter (default 1).
- */
- private void processAnsiCommand_F() {
- int linesToMove = getAnsiParameter(0);
-
- moveCursor(relativeCursorLine() - linesToMove, 0);
- }
-
- /**
- * This method moves the cursor within the current line to the column
- * specified by the ANSI parameter (default is column 1).
- */
- private void processAnsiCommand_G() {
- moveCursor(relativeCursorLine(), getAnsiParameter(0) - 1);
- }
-
- /**
- * This method sets the cursor to a position specified by the escape
- * sequence parameters (default is the upper left corner of the screen).
- */
- private void processAnsiCommand_H() {
- moveCursor(getAnsiParameter(0) - 1, getAnsiParameter(1) - 1);
- }
-
- /**
- * This method sets terminal modes.
- */
- private void processAnsiCommand_h() {
- if (getAnsiParameter(0) == 4) {
- // set insert mode
- text.setInsertMode(true);
- }
- }
-
- /**
- * This method deletes some (or all) of the text on the screen without
- * moving the cursor.
- */
- private void processAnsiCommand_J() {
- int ansiParameter;
-
- if (ansiParameters[0].length() == 0)
- ansiParameter = 0;
- else
- ansiParameter = getAnsiParameter(0);
-
- switch (ansiParameter) {
- case 0:
- text.eraseToEndOfScreen();
- break;
-
- case 1:
- // Erase from beginning to current position (inclusive).
- text.eraseToCursor();
- break;
-
- case 2:
- // Erase entire display.
-
- text.eraseAll();
- break;
-
- default:
- Logger.log("Unexpected J-command parameter: " + ansiParameter); //$NON-NLS-1$
- break;
- }
- }
-
- /**
- * This method deletes some (or all) of the text in the current line without
- * moving the cursor.
- */
- private void processAnsiCommand_K() {
- //Bug 401386: missing parameter must be interpreted as 0, and not 1 like most other defaults.
- int ansiParameter = 0;
- if (ansiParameters[0].length() > 0)
- ansiParameter = getAnsiParameter(0);
-
- switch (ansiParameter) {
- case 0:
- // Erase from current position to end (inclusive).
- text.eraseLineToEnd();
- break;
-
- case 1:
- // Erase from beginning to current position (inclusive).
- text.eraseLineToCursor();
- break;
-
- case 2:
- // Erase entire line.
- text.eraseLine();
- break;
-
- default:
- Logger.log("Unexpected K-command parameter: " + ansiParameter); //$NON-NLS-1$
- break;
- }
- }
-
- /**
- * Insert one or more blank lines. The current line of text moves down. Text
- * that falls off the bottom of the screen is deleted.
- */
- private void processAnsiCommand_L() {
- text.insertLines(getAnsiParameter(0));
- }
-
- /**
- * This method resets terminal modes.
- */
- private void processAnsiCommand_l() {
- if (getAnsiParameter(0) == 4) {
- // reset insert mode
- text.setInsertMode(false);
- }
- }
-
- /**
- * Delete one or more lines of text. Any lines below the deleted lines move
- * up, which we implement by appending newlines to the end of the text.
- */
- private void processAnsiCommand_M() {
- text.deleteLines(getAnsiParameter(0));
- }
-
- /**
- * This method sets a new graphics rendition mode, such as
- * foreground/background color, bold/normal text, and reverse video.
- */
- private void processAnsiCommand_m() {
- if (ansiParameters[0].length() == 0) {
- // This a special case: when no ANSI parameter is specified, act like a
- // single parameter equal to 0 was specified.
-
- ansiParameters[0].append('0');
- }
- Style style=text.getStyle();
- // There are a non-zero number of ANSI parameters. Process each one in
- // order.
-
- int totalParameters = ansiParameters.length;
- int parameterIndex = 0;
-
- while (parameterIndex < totalParameters
- && ansiParameters[parameterIndex].length() > 0) {
- int ansiParameter = getAnsiParameter(parameterIndex);
-
- switch (ansiParameter) {
- case 0:
- // Reset all graphics modes.
- style = text.getDefaultStyle();
- break;
-
- case 1:
- style = style.setBold(true);
- break;
-
- case 4:
- style = style.setUnderline(true);
- break;
-
- case 5:
- style = style.setBlink(true);
- break;
-
- case 7:
- style = style.setReverse(true);
- break;
-
- case 10: // Set primary font. Ignored.
- break;
-
- case 21:
- case 22:
- style = style.setBold(false);
- break;
-
- case 24:
- style = style.setUnderline(false);
- break;
-
- case 25:
- style = style.setBlink(false);
- break;
-
- case 27:
- style = style.setReverse(false);
- break;
-
- case 30:
- style = style.setForground("BLACK"); //$NON-NLS-1$
- break;
-
- case 31:
- style = style.setForground("RED"); //$NON-NLS-1$
- break;
-
- case 32:
- style = style.setForground("GREEN"); //$NON-NLS-1$
- break;
-
- case 33:
- style = style.setForground("YELLOW"); //$NON-NLS-1$
- break;
-
- case 34:
- style = style.setForground("BLUE"); //$NON-NLS-1$
- break;
-
- case 35:
- style = style.setForground("MAGENTA"); //$NON-NLS-1$
- break;
-
- case 36:
- style = style.setForground("CYAN"); //$NON-NLS-1$
- break;
-
- case 37:
- style = style.setForground("WHITE_FOREGROUND"); //$NON-NLS-1$
- break;
-
- case 39: //Foreground: Default
- style = style.setForground(text.getDefaultStyle().getForground());
- break;
-
- case 40:
- style = style.setBackground("BLACK"); //$NON-NLS-1$
- break;
-
- case 41:
- style = style.setBackground("RED"); //$NON-NLS-1$
- break;
-
- case 42:
- style = style.setBackground("GREEN"); //$NON-NLS-1$
- break;
-
- case 43:
- style = style.setBackground("YELLOW"); //$NON-NLS-1$
- break;
-
- case 44:
- style = style.setBackground("BLUE"); //$NON-NLS-1$
- break;
-
- case 45:
- style = style.setBackground("MAGENTA"); //$NON-NLS-1$
- break;
-
- case 46:
- style = style.setBackground("CYAN"); //$NON-NLS-1$
- break;
-
- case 47:
- style = style.setBackground("WHITE"); //$NON-NLS-1$
- break;
-
- case 49: //Background: Default
- style = style.setBackground(text.getDefaultStyle().getBackground());
- break;
-
- default:
- Logger
- .log("Unsupported graphics rendition parameter: " + ansiParameter); //$NON-NLS-1$
- break;
- }
-
- ++parameterIndex;
- }
- text.setStyle(style);
- }
-
- /**
- * This method responds to an ANSI Device Status Report (DSR) command from
- * the remote endpoint requesting the ready status or the cursor position.
- * Requests for other kinds of status are ignored.
- */
- private void processAnsiCommand_n() {
- String reply;
-
- if (getAnsiParameter(0) == 5) {
- // Report that the terminal is ready and has no malfunctions.
- reply = "\u001b[0n"; //$NON-NLS-1$
-
- } else if (getAnsiParameter(0) == 6) {
- // Send the ANSI cursor position (which is 1-based) to the remote
- // endpoint.
- reply = "\u001b[" + (relativeCursorLine() + 1) + ";" + //$NON-NLS-1$ //$NON-NLS-2$
- (getCursorColumn() + 1) + "R"; //$NON-NLS-1$
-
- } else {
- // Do nothing if the numeric parameter was not 5 or 6.
- return;
- }
-
- try {
- terminal.getOutputStream().write(reply.getBytes("ISO-8859-1")); //$NON-NLS-1$
- terminal.getOutputStream().flush();
- } catch (IOException ex) {
- Logger.log("Caught IOException!"); //$NON-NLS-1$
- }
- }
-
- /**
- * Deletes one or more characters starting at the current cursor position.
- * Characters on the same line and to the right of the deleted characters
- * move left. If there are no characters on the current line at or to the
- * right of the cursor column, no text is deleted.
- */
- private void processAnsiCommand_P() {
- text.deleteCharacters(getAnsiParameter(0));
- }
-
- /**
- * Set Scrolling Region [top;bottom] (default = full size of window) (DECSTBM).
- */
- private void processAnsiCommand_r() {
- int top = 0;
- int bottom = 0;
- if (ansiParameters[0].length() > 0 && ansiParameters[1].length() > 0) {
- top = getAnsiParameter(0);
- bottom = getAnsiParameter(1);
- }
- text.setScrollRegion(top-1, bottom-1);
- }
-
- /**
- * Scroll up n lines (default = 1 line).
- */
- private void processAnsiCommand_S() {
- text.scrollUp(getAnsiParameter(0));
- }
-
- /**
- * Scroll down n lines (default = 1 line).
- */
- private void processAnsiCommand_T() {
- text.scrollDown(getAnsiParameter(0));
- }
-
- private void processDecPrivateCommand_h() {
- int param = getAnsiParameter(0);
- switch (param) {
- case 1:
- // Enable Application Cursor Keys (DECCKM)
- terminal.enableApplicationCursorKeys(true);
- break;
- case 47:
- case 1047:
- case 1048:
- case 1049:
- // Use Alternate Screen Buffer (ignored).
- break;
- default:
- Logger.log("Unsupported command parameter: CSI ?" + param + 'h'); //$NON-NLS-1$
- break;
- }
- }
-
- private void processDecPrivateCommand_l() {
- int param = getAnsiParameter(0);
- switch (param) {
- case 1:
- // Enable Normal Cursor Keys (DECCKM)
- terminal.enableApplicationCursorKeys(false);
- break;
- case 47:
- case 1047:
- case 1048:
- case 1049:
- // Use Normal Screen Buffer (ignored, but reset scroll region).
- text.setScrollRegion(-1, -1);
- break;
- default:
- Logger.log("Unsupported command parameter: CSI ?" + param + 'l'); //$NON-NLS-1$
- break;
- }
- }
-
- /**
- * This method returns one of the numeric ANSI parameters received in the
- * most recent escape sequence.
- *
- * @return The <i>parameterIndex</i>th numeric ANSI parameter or -1 if the
- * index is out of range.
- */
- private int getAnsiParameter(int parameterIndex) {
- if (parameterIndex < 0 || parameterIndex >= ansiParameters.length) {
- // This should never happen.
- return -1;
- }
-
- String parameter = ansiParameters[parameterIndex].toString();
-
- if (parameter.length() == 0)
- return 1;
-
- int parameterValue = 1;
-
- // Don't trust the remote endpoint to send well formed numeric
- // parameters.
-
- try {
- parameterValue = Integer.parseInt(parameter);
- } catch (NumberFormatException ex) {
- parameterValue = 1;
- }
-
- return parameterValue;
- }
-
- /**
- * This method processes a single parameter character in an ANSI escape
- * sequence. Parameters are the (optional) characters between the leading
- * "\e[" and the command character in an escape sequence (e.g., in the
- * escape sequence "\e[20;10H", the parameter characters are "20;10").
- * Parameters are integers separated by one or more ';'s.
- */
- private void processAnsiParameterCharacter(char ch) {
- if (ch == ';') {
- ++nextAnsiParameter;
- } else {
- if (nextAnsiParameter < ansiParameters.length)
- ansiParameters[nextAnsiParameter].append(ch);
- }
- }
- /**
- * This method processes a contiguous sequence of non-control characters.
- * This is a performance optimization, so that we don't have to insert or
- * append each non-control character individually to the StyledText widget.
- * A non-control character is any character that passes the condition in the
- * below while loop.
- * @throws IOException
- */
- private void processNonControlCharacters(char character) throws IOException {
- StringBuffer buffer=new StringBuffer();
- buffer.append(character);
- // Identify a contiguous sequence of non-control characters, starting at
- // firstNonControlCharacterIndex in newText.
- while(hasNextChar()) {
- character=getNextChar();
- if(character == '\u0000' || character == '\b' || character == '\t'
- || character == '\u0007' || character == '\n'
- || character == '\r' || character == '\u001b') {
- pushBackChar(character);
- break;
- }
- buffer.append(character);
- }
-
- // Now insert the sequence of non-control characters in the StyledText widget
- // at the location of the cursor.
-
- displayNewText(buffer.toString());
- }
-
- /**
- * This method displays a subset of the newly-received text in the Terminal
- * view, wrapping text at the right edge of the screen and overwriting text
- * when the cursor is not at the very end of the screen's text.
- * <p>
- *
- * There are never any ANSI control characters or escape sequences in the
- * text being displayed by this method (this includes newlines, carriage
- * returns, and tabs).
- * <p>
- */
- private void displayNewText(String buffer) {
- text.appendString(buffer);
- }
-
-
- /**
- * Process a BEL (Control-G) character.
- */
- private void processBEL() {
- // TODO
- //Display.getDefault().beep();
- }
-
- /**
- * Process a backspace (Control-H) character.
- */
- private void processBackspace() {
- moveCursorBackward(1);
- }
-
- /**
- * Process a tab (Control-I) character. We don't insert a tab character into
- * the StyledText widget. Instead, we move the cursor forward to the next
- * tab stop, without altering any of the text. Tab stops are every 8
- * columns. The cursor will never move past the rightmost column.
- */
- private void processTab() {
- moveCursorForward(8 - (getCursorColumn() % 8));
- }
-
- /**
- * Process a newline (Control-J) character. A newline (NL) character just
- * moves the cursor to the same column on the next line, creating new lines
- * when the cursor reaches the bottom edge of the terminal. This is
- * counter-intuitive, especially to UNIX programmers who are taught that
- * writing a single NL to a terminal is sufficient to move the cursor to the
- * first column of the next line, as if a carriage return (CR) and a NL were
- * written.
- * <p>
- *
- * UNIX terminals typically display a NL character as a CR followed by a NL
- * because the terminal device typically has the ONLCR attribute bit set
- * (see the termios(4) man page for details), which causes the terminal
- * device driver to translate NL to CR + NL on output. The terminal itself
- * (i.e., a hardware terminal or a terminal emulator, like xterm or this
- * code) _always_ interprets a CR to mean "move the cursor to the beginning
- * of the current line" and a NL to mean "move the cursor to the same column
- * on the next line".
- * <p>
- */
- private void processNewline() {
- text.processNewline();
- }
-
- /**
- * Process a Carriage Return (Control-M).
- */
- private void processCarriageReturn() {
- text.setCursorColumn(0);
- }
-
- /**
- * This method computes the width of the terminal in columns and its height
- * in lines, then adjusts the width and height of the view's StyledText
- * widget so that it displays an integral number of lines and columns of
- * text. The adjustment is always to shrink the widget vertically or
- * horizontally, because if the control were to grow, it would be clipped by
- * the edges of the view window (i.e., the view window does not become
- * larger to accommodate its contents becoming larger).
- * <p>
- *
- * This method must be called immediately before each time text is written
- * to the terminal so that we can properly line wrap text. Because it is
- * called so frequently, it must be fast when there is no resizing to be
- * done.
- * <p>
- */
- private void adjustTerminalDimensions() {
- // Compute how many pixels we need to shrink the StyledText control vertically
- // to make it display an integral number of lines of text.
-
- // TODO
-// if(text.getColumns()!=80 && text.getLines()!=80)
-// text.setDimensions(24, 80);
- // If we are in a TELNET connection and we know the dimensions of the terminal,
- // we give the size information to the TELNET connection object so it can
- // communicate it to the TELNET server. If we are in a serial connection,
- // there is nothing we can do to tell the remote host about the size of the
- // terminal.
- ITerminalConnector telnetConnection = getConnector();
- // TODO MSA: send only if dimensions have really changed!
- if (telnetConnection != null) {
- telnetConnection.setTerminalSize(text.getColumns(), text.getLines());
- }
-
- }
-
- private ITerminalConnector getConnector() {
- if(terminal.getTerminalConnector()!=null)
- return terminal.getTerminalConnector();
- return null;
- }
-
- /**
- * This method returns the relative line number of the line containing the
- * cursor. The returned line number is relative to the topmost visible line,
- * which has relative line number 0.
- *
- * @return The relative line number of the line containing the cursor.
- */
- private int relativeCursorLine() {
- return text.getCursorLine();
- }
-
- /**
- * This method moves the cursor to the specified line and column. Parameter
- * <i>targetLine</i> is the line number of a screen line, so it has a
- * minimum value of 0 (the topmost screen line) and a maximum value of
- * heightInLines - 1 (the bottommost screen line). A line does not have to
- * contain any text to move the cursor to any column in that line.
- */
- private void moveCursor(int targetLine, int targetColumn) {
- text.setCursor(targetLine,targetColumn);
- }
-
- /**
- * This method moves the cursor down <i>lines</i> lines, but won't move the
- * cursor past the bottom of the screen. This method does not cause any
- * scrolling.
- */
- private void moveCursorDown(int lines) {
- moveCursor(relativeCursorLine() + lines, getCursorColumn());
- }
-
- /**
- * This method moves the cursor up <i>lines</i> lines, but won't move the
- * cursor past the top of the screen. This method does not cause any
- * scrolling.
- */
- private void moveCursorUp(int lines) {
- moveCursor(relativeCursorLine() - lines, getCursorColumn());
- }
-
- /**
- * This method moves the cursor forward <i>columns</i> columns, but won't
- * move the cursor past the right edge of the screen, nor will it move the
- * cursor onto the next line. This method does not cause any scrolling.
- */
- private void moveCursorForward(int columnsToMove) {
- moveCursor(relativeCursorLine(), getCursorColumn() + columnsToMove);
- }
-
- /**
- * This method moves the cursor backward <i>columnsToMove</i> columns, but
- * won't move the cursor past the left edge of the screen, nor will it move
- * the cursor onto the previous line. This method does not cause any
- * scrolling.
- */
- private void moveCursorBackward(int columnsToMove) {
- moveCursor(relativeCursorLine(), getCursorColumn() - columnsToMove);
- }
- /**
- * Resets the state of the terminal text (foreground color, background color,
- * font style and other internal state). It essentially makes it ready for new input.
- */
- public void resetState() {
- ansiState=ANSISTATE_INITIAL;
- text.setStyle(text.getDefaultStyle());
- text.setScrollRegion(-1, -1);
- text.setInsertMode(false);
- }
-
-// public OutputStream getOutputStream() {
-// return fTerminalInputStream.getOutputStream();
-// }
-
- /**
- * Buffer for {@link #pushBackChar(char)}.
- */
- private int fNextChar=-1;
-
- private char getNextChar() throws IOException {
- int c=-1;
- if(fNextChar!=-1) {
- c= fNextChar;
- fNextChar=-1;
- } else {
- c = fReader.read();
- }
- // TODO: better end of file handling
- if(c==-1)
- c=0;
- return (char)c;
- }
-
- private boolean hasNextChar() throws IOException {
- if(fNextChar>=0)
- return true;
- return fReader.ready();
- }
-
- /**
- * Put back one character to the stream. This method can push
- * back exactly one character. The character is the next character
- * returned by {@link #getNextChar}
- * @param c the character to be pushed back.
- */
- void pushBackChar(char c) {
- //assert fNextChar!=-1: "Already a character waiting:"+fNextChar; //$NON-NLS-1$
- fNextChar=c;
- }
- private int getCursorColumn() {
- return text.getCursorColumn();
- }
- public boolean isCrAfterNewLine() {
- return fCrAfterNewLine;
- }
- public void setCrAfterNewLine(boolean crAfterNewLine) {
- fCrAfterNewLine = crAfterNewLine;
- }
- void setVT100LineWrapping(boolean enable) {
- text.setVT100LineWrapping(enable);
- }
- boolean isVT100LineWrapping() {
- return text.isVT100LineWrapping();
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [206329] Changing terminal size right after connect does not scroll properly
- * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
- * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
- * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.emulator;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- *
- */
-public class VT100EmulatorBackend implements IVT100EmulatorBackend {
-
- private static class ScrollRegion {
- static final ScrollRegion FULL_WINDOW = new ScrollRegion(0, Integer.MAX_VALUE-1);
- private final int fTop;
- private final int fBottom;
- ScrollRegion(int top, int bottom) {
- fTop = top;
- fBottom = bottom;
- }
- boolean contains(int line) {
- return line >= fTop && line <= fBottom;
- }
- int getTopLine() {
- return fTop;
- }
- int getBottomLine() {
- return fBottom;
- }
- int getHeight() {
- return fBottom - fTop + 1;
- }
- }
-
- /**
- * This field holds the number of the column in which the cursor is
- * logically positioned. The leftmost column on the screen is column 0, and
- * column numbers increase to the right. The maximum value of this field is
- * {@link #widthInColumns} - 1. We track the cursor column using this field
- * to avoid having to recompute it repeatly using StyledText method calls.
- * <p>
- *
- * The StyledText widget that displays text has a vertical bar (called the
- * "caret") that appears _between_ character cells, but ANSI terminals have
- * the concept of a cursor that appears _in_ a character cell, so we need a
- * convention for which character cell the cursor logically occupies when
- * the caret is physically between two cells. The convention used in this
- * class is that the cursor is logically in column N when the caret is
- * physically positioned immediately to the _left_ of column N.
- * <p>
- *
- * When fCursorColumn is N, the next character output to the terminal appears
- * in column N. When a character is output to the rightmost column on a
- * given line (column widthInColumns - 1), the cursor moves to column 0 on
- * the next line after the character is drawn (this is the default line wrapping
- * mode). If VT100 line wrapping mode is enabled, the cursor does not move
- * to the next line until the next character is printed (this is known as
- * the VT100 'eat_newline_glitch').
- * If the cursor is in the bottommost line when line wrapping
- * occurs, the topmost visible line is scrolled off the top edge of the
- * screen.
- * <p>
- */
- private int fCursorColumn;
- private int fCursorLine;
- /* true if last output occurred on rightmost column
- * and next output requires line wrap */
- private boolean fWrapPending;
- private boolean fInsertMode;
- private Style fDefaultStyle;
- private Style fStyle;
- int fLines;
- int fColumns;
- final private ITerminalTextData fTerminal;
- private boolean fVT100LineWrapping;
- private ScrollRegion fScrollRegion = ScrollRegion.FULL_WINDOW;
-
- public VT100EmulatorBackend(ITerminalTextData terminal) {
- fTerminal=terminal;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#clearAll()
- */
- public void clearAll() {
- synchronized (fTerminal) {
- // clear the history
- int n=fTerminal.getHeight();
- for (int line = 0; line < n; line++) {
- fTerminal.cleanLine(line);
- }
- fTerminal.setDimensions(fLines, fTerminal.getWidth());
- setStyle(getDefaultStyle());
- setCursor(0, 0);
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setDimensions(int, int)
- */
- public void setDimensions(int lines, int cols) {
- synchronized (fTerminal) {
- if(lines==fLines && cols==fColumns)
- return; // nothing to do
- // relative cursor line
- int cl=getCursorLine();
- int cc=getCursorColumn();
- int height=fTerminal.getHeight();
- // absolute cursor line
- int acl=cl+height-fLines;
- int newLines=Math.max(lines,height);
- if(lines<fLines) {
- if(height==fLines) {
- // if the terminal has no history, then resize by
- // setting the size to the new size
- // TODO We are assuming that cursor line points at end of text
- newLines=Math.max(lines, cl+1);
- }
- }
- fLines=lines;
- fColumns=cols;
- // make the terminal at least as high as we need lines
- fTerminal.setDimensions(newLines, fColumns);
- // compute relative cursor line
- cl=acl-(newLines-fLines);
- setCursor(cl, cc);
- }
- }
-
- int toAbsoluteLine(int line) {
- synchronized (fTerminal) {
- return fTerminal.getHeight()-fLines+line;
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#insertCharacters(int)
- */
- public void insertCharacters(int charactersToInsert) {
- synchronized (fTerminal) {
- int line=toAbsoluteLine(fCursorLine);
- int n=charactersToInsert;
- for (int col = fColumns-1; col >=fCursorColumn+n; col--) {
- char c=fTerminal.getChar(line, col-n);
- Style style=fTerminal.getStyle(line, col-n);
- fTerminal.setChar(line, col,c, style);
- }
- int last=Math.min(fCursorColumn+n, fColumns);
- for (int col = fCursorColumn; col <last; col++) {
- fTerminal.setChar(line, col,'\000', null);
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseToEndOfScreen()
- */
- public void eraseToEndOfScreen() {
- synchronized (fTerminal) {
- eraseLineToEnd();
- for (int line = toAbsoluteLine(fCursorLine+1); line < toAbsoluteLine(fLines); line++) {
- fTerminal.cleanLine(line);
- }
- }
-
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseToCursor()
- */
- public void eraseToCursor() {
- synchronized (fTerminal) {
- for (int line = toAbsoluteLine(0); line < toAbsoluteLine(fCursorLine); line++) {
- fTerminal.cleanLine(line);
- }
- eraseLineToCursor();
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseAll()
- */
- public void eraseAll() {
- synchronized (fTerminal) {
- for (int line = toAbsoluteLine(0); line < toAbsoluteLine(fLines); line++) {
- fTerminal.cleanLine(line);
- }
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseLine()
- */
- public void eraseLine() {
- synchronized (fTerminal) {
- fTerminal.cleanLine(toAbsoluteLine(fCursorLine));
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseLineToEnd()
- */
- public void eraseLineToEnd() {
- synchronized (fTerminal) {
- int line=toAbsoluteLine(fCursorLine);
- for (int col = fCursorColumn; col < fColumns; col++) {
- fTerminal.setChar(line, col, '\000', null);
- }
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseLineToCursor()
- */
- public void eraseLineToCursor() {
- synchronized (fTerminal) {
- int line=toAbsoluteLine(fCursorLine);
- for (int col = 0; col <= fCursorColumn; col++) {
- fTerminal.setChar(line, col, '\000', null);
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#insertLines(int)
- */
- public void insertLines(int n) {
- synchronized (fTerminal) {
- if(!isCusorInScrollingRegion())
- return;
- assert n>0;
- int line=toAbsoluteLine(fCursorLine);
- int nLines=Math.min(fTerminal.getHeight()-line, fScrollRegion.getBottomLine()-fCursorLine+1);
- fTerminal.scroll(line, nLines, n);
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#deleteCharacters(int)
- */
- public void deleteCharacters(int n) {
- synchronized (fTerminal) {
- int line=toAbsoluteLine(fCursorLine);
- for (int col = fCursorColumn+n; col < fColumns; col++) {
- char c=fTerminal.getChar(line, col);
- Style style=fTerminal.getStyle(line, col);
- fTerminal.setChar(line, col-n,c, style);
- }
- int first=Math.max(fCursorColumn, fColumns-n);
- for (int col = first; col <fColumns; col++) {
- fTerminal.setChar(line, col,'\000', null);
- }
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#deleteLines(int)
- */
- public void deleteLines(int n) {
- synchronized (fTerminal) {
- if(!isCusorInScrollingRegion())
- return;
- assert n>0;
- int line=toAbsoluteLine(fCursorLine);
- int nLines=Math.min(fTerminal.getHeight()-line, fScrollRegion.getBottomLine()-fCursorLine+1);
- fTerminal.scroll(line, nLines, -n);
- }
- }
- private boolean isCusorInScrollingRegion() {
- return fScrollRegion.contains(fCursorLine);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getDefaultStyle()
- */
- public Style getDefaultStyle() {
- synchronized (fTerminal) {
- return fDefaultStyle;
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setDefaultStyle(org.eclipse.tm.terminal.model.Style)
- */
- public void setDefaultStyle(Style defaultStyle) {
- synchronized (fTerminal) {
- fDefaultStyle = defaultStyle;
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getStyle()
- */
- public Style getStyle() {
- synchronized (fTerminal) {
- if(fStyle==null)
- return fDefaultStyle;
- return fStyle;
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setStyle(org.eclipse.tm.terminal.model.Style)
- */
- public void setStyle(Style style) {
- synchronized (fTerminal) {
- fStyle=style;
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#appendString(java.lang.String)
- */
- public void appendString(String buffer) {
- synchronized (fTerminal) {
- char[] chars=buffer.toCharArray();
- if (fInsertMode)
- insertCharacters(chars.length);
- int line=toAbsoluteLine(fCursorLine);
- int i=0;
- while (i < chars.length) {
- if(fWrapPending) {
- line = doLineWrap();
- }
- int n=Math.min(fColumns-fCursorColumn,chars.length-i);
- fTerminal.setChars(line, fCursorColumn, chars, i, n, fStyle);
- int col=fCursorColumn+n;
- i+=n;
- // wrap needed?
- if(col == fColumns) {
- if (fVT100LineWrapping) {
- // deferred line wrapping (eat_newline_glitch)
- setCursorColumn(col - 1);
- fWrapPending = true;
- } else {
- line = doLineWrap();
- }
- } else {
- setCursorColumn(col);
- }
- }
- }
- }
-
- private int doLineWrap() {
- int line;
- line=toAbsoluteLine(fCursorLine);
- fTerminal.setWrappedLine(line);
- doNewline();
- line=toAbsoluteLine(fCursorLine);
- setCursorColumn(0);
- return line;
- }
-
- /**
- * MUST be called from a synchronized block!
- */
- private void doNewline() {
- if (fCursorLine == fScrollRegion.getBottomLine())
- scrollUp(1);
- else if (fCursorLine+1>=fLines) {
- int h=fTerminal.getHeight();
- fTerminal.addLine();
- if(h!=fTerminal.getHeight())
- setCursorLine(fCursorLine+1);
- } else {
- setCursorLine(fCursorLine+1);
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#processNewline()
- */
- public void processNewline() {
- synchronized (fTerminal) {
- doNewline();
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getCursorLine()
- */
- public int getCursorLine() {
- synchronized (fTerminal) {
- return fCursorLine;
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getCursorColumn()
- */
- public int getCursorColumn() {
- synchronized (fTerminal) {
- return fCursorColumn;
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setCursor(int, int)
- */
- public void setCursor(int targetLine, int targetColumn) {
- synchronized (fTerminal) {
- setCursorLine(targetLine);
- setCursorColumn(targetColumn);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setCursorColumn(int)
- */
- public void setCursorColumn(int targetColumn) {
- synchronized (fTerminal) {
- if(targetColumn<0)
- targetColumn=0;
- else if(targetColumn>=fColumns)
- targetColumn=fColumns-1;
- fCursorColumn=targetColumn;
- fWrapPending = false;
- // We make the assumption that nobody is changing the
- // terminal cursor except this class!
- // This assumption gives a huge performance improvement
- fTerminal.setCursorColumn(targetColumn);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setCursorLine(int)
- */
- public void setCursorLine(int targetLine) {
- synchronized (fTerminal) {
- if(targetLine<0)
- targetLine=0;
- else if(targetLine>=fLines)
- targetLine=fLines-1;
- fCursorLine=targetLine;
- // We make the assumption that nobody is changing the
- // terminal cursor except this class!
- // This assumption gives a huge performance improvement
- fTerminal.setCursorLine(toAbsoluteLine(targetLine));
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getLines()
- */
- public int getLines() {
- synchronized (fTerminal) {
- return fLines;
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getColumns()
- */
- public int getColumns() {
- synchronized (fTerminal) {
- return fColumns;
- }
- }
-
- public void setVT100LineWrapping(boolean enable) {
- fVT100LineWrapping = enable;
- }
-
- public boolean isVT100LineWrapping() {
- return fVT100LineWrapping;
- }
-
- public void setInsertMode(boolean enable) {
- fInsertMode = enable;
- }
-
- public void setScrollRegion(int top, int bottom) {
- if (top < 0 || bottom < 0)
- fScrollRegion = ScrollRegion.FULL_WINDOW;
- else if (top < bottom)
- fScrollRegion = new ScrollRegion(top, bottom);
- }
-
- public void scrollUp(int n) {
- assert n>0;
- synchronized (fTerminal) {
- int line = toAbsoluteLine(fScrollRegion.getTopLine());
- int nLines = Math.min(fTerminal.getHeight()-line, fScrollRegion.getHeight());
- fTerminal.scroll(line, nLines, -n);
- }
- }
-
- public void scrollDown(int n) {
- assert n>0;
- synchronized (fTerminal) {
- int line = toAbsoluteLine(fScrollRegion.getTopLine());
- int nLines = Math.min(fTerminal.getHeight()-line, fScrollRegion.getHeight());
- fTerminal.scroll(line, nLines, n);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [206892] State handling: Only allow connect when CLOSED
- * Martin Oberhuber (Wind River) - [206883] Serial Terminal leaks Jobs
- * Martin Oberhuber (Wind River) - [208145] Terminal prints garbage after quick disconnect/reconnect
- * Martin Oberhuber (Wind River) - [207785] NPE when trying to send char while no longer connected
- * Michael Scharf (Wind River) - [209665] Add ability to log byte streams from terminal
- * Ruslan Sychev (Xored Software) - [217675] NPE or SWTException when closing Terminal View while connection establishing
- * Michael Scharf (Wing River) - [196447] The optional terminal input line should be resizeable
- * Martin Oberhuber (Wind River) - [168197] Replace JFace MessagDialog by SWT MessageBox
- * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
- * Michael Scharf (Wind River) - [237398] Terminal get Invalid Thread Access when the title is set
- * Martin Oberhuber (Wind River) - [240745] Pressing Ctrl+F1 in the Terminal should bring up context help
- * Michael Scharf (Wind River) - [240098] The cursor should not blink when the terminal is disconnected
- * Anton Leherbauer (Wind River) - [335021] Middle mouse button copy/paste does not work with the terminal
- * Max Stepanov (Appcelerator) - [339768] Fix ANSI code for PgUp / PgDn
- * Pawel Piech (Wind River) - [333613] "Job found still running" after shutdown
- * Martin Oberhuber (Wind River) - [348700] Terminal unusable after disconnect
- * Simon Bernard (Sierra Wireless) - [351424] [terminal] Terminal does not support del and insert key
- * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
- * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
- * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
- * Anton Leherbauer (Wind River) - [434294] Incorrect handling of function keys with modifiers
- * Martin Oberhuber (Wind River) - [434294] Add Mac bindings with COMMAND
- * Anton Leherbauer (Wind River) - [434749] UnhandledEventLoopException when copying to clipboard while the selection is empty
- * Martin Oberhuber (Wind River) - [436612] Restore Eclipse 3.4 compatibility by using Reflection
- * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
- * Anton Leherbauer (Wind River) - [420928] Terminal widget leaks memory
- * Davy Landman (CWI) - [475267][api] Allow custom mouse listeners
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.emulator;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Field;
-import java.net.SocketException;
-import java.nio.charset.Charset;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.bindings.Binding;
-import org.eclipse.jface.bindings.keys.KeySequence;
-import org.eclipse.jface.bindings.keys.KeyStroke;
-import org.eclipse.jface.bindings.keys.SWTKeySupport;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.tm.internal.terminal.control.ICommandInputField;
-import org.eclipse.tm.internal.terminal.control.ITerminalListener;
-import org.eclipse.tm.internal.terminal.control.ITerminalListener2;
-import org.eclipse.tm.internal.terminal.control.ITerminalMouseListener;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-import org.eclipse.tm.internal.terminal.preferences.ITerminalConstants;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.internal.terminal.textcanvas.PipedInputStream;
-import org.eclipse.tm.internal.terminal.textcanvas.PollingTextCanvasModel;
-import org.eclipse.tm.internal.terminal.textcanvas.TextCanvas;
-import org.eclipse.tm.internal.terminal.textcanvas.TextLineRenderer;
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.TerminalTextDataFactory;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.contexts.IContextActivation;
-import org.eclipse.ui.contexts.IContextService;
-import org.eclipse.ui.handlers.IHandlerService;
-import org.eclipse.ui.keys.IBindingService;
-
-/**
- *
- * This class was originally written to use nested classes, which unfortunately makes
- * this source file larger and more complex than it needs to be. In particular, the
- * methods in the nested classes directly access the fields of the enclosing class.
- * One day we should pull the nested classes out into their own source files (but still
- * in this package).
- *
- * @author Chris Thew <chris.thew@windriver.com>
- */
-public class VT100TerminalControl implements ITerminalControlForText, ITerminalControl, ITerminalViewControl
-{
- protected final static String[] LINE_DELIMITERS = { "\n" }; //$NON-NLS-1$
-
- /**
- * This field holds a reference to a TerminalText object that performs all ANSI
- * text processing on data received from the remote host and controls how text is
- * displayed using the view's StyledText widget.
- */
- private final VT100Emulator fTerminalText;
- private Display fDisplay;
- private TextCanvas fCtlText;
- private Composite fWndParent;
- private Clipboard fClipboard;
- private KeyListener fKeyHandler;
- private final ITerminalListener fTerminalListener;
- private String fMsg = ""; //$NON-NLS-1$
- private TerminalFocusListener fFocusListener;
- private ITerminalConnector fConnector;
- private final ITerminalConnector[] fConnectors;
- private final boolean fUseCommonPrefs;
- private boolean connectOnEnterIfClosed = true;
-
- PipedInputStream fInputStream;
- private static final String defaultEncoding = Charset.defaultCharset().name();
- private String fEncoding = defaultEncoding;
- private InputStreamReader fInputStreamReader;
-
- private ICommandInputField fCommandInputField;
-
- private volatile TerminalState fState;
-
- private final ITerminalTextData fTerminalModel;
-
- private final EditActionAccelerators editActionAccelerators = new EditActionAccelerators();
-
- private boolean fApplicationCursorKeys;
-
- /**
- * Listens to changes in the preferences
- */
- private final IPropertyChangeListener fPreferenceListener=new IPropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent event) {
- if(event.getProperty().equals(ITerminalConstants.PREF_BUFFERLINES)
- || event.getProperty().equals(ITerminalConstants.PREF_INVERT_COLORS)) {
- updatePreferences();
- }
- }
- };
- private final IPropertyChangeListener fFontListener = new IPropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent event) {
- if (event.getProperty().equals(ITerminalConstants.FONT_DEFINITION)) {
- onTerminalFontChanged();
- }
- }
- };
-
- /**
- * Is protected by synchronize on this
- */
- volatile private Job fJob;
-
- private PollingTextCanvasModel fPollingTextCanvasModel;
-
- public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
- this(target, wndParent, connectors, false);
- }
-
- /**
- * Instantiate a Terminal widget.
- * @param target Callback for notifying the owner of Terminal state changes.
- * @param wndParent The Window parent to embed the Terminal in.
- * @param connectors Provided connectors.
- * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings
- * from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page.
- * Otherwise, clients need to maintain settings themselves.
- * @since 3.2
- */
- public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors, boolean useCommonPrefs) {
- fConnectors=connectors;
- fUseCommonPrefs = useCommonPrefs;
- fTerminalListener=target;
- fTerminalModel=TerminalTextDataFactory.makeTerminalTextData();
- fTerminalModel.setMaxHeight(1000);
- fInputStream=new PipedInputStream(8*1024);
- fTerminalText = new VT100Emulator(fTerminalModel, this, null);
- try {
- // Use Default Encoding as start, until setEncoding() is called
- setEncoding(null);
- } catch (UnsupportedEncodingException e) {
- // Should never happen
- e.printStackTrace();
- // Fall back to local Platform Default Encoding
- fEncoding = defaultEncoding;
- fInputStreamReader = new InputStreamReader(fInputStream);
- fTerminalText.setInputStreamReader(fInputStreamReader);
- }
-
- setupTerminal(wndParent);
- }
-
- @Override
- public void setEncoding(String encoding) throws UnsupportedEncodingException {
- if (encoding == null) {
- // TODO better use a standard remote-to-local encoding?
- encoding = "ISO-8859-1"; //$NON-NLS-1$
- // TODO or better use the local default encoding?
- // encoding = defaultEncoding;
- }
- fInputStreamReader = new InputStreamReader(fInputStream, encoding);
- // remember encoding if above didn't throw an exception
- fEncoding = encoding;
- fTerminalText.setInputStreamReader(fInputStreamReader);
- }
-
- @Override
- public String getEncoding() {
- return fEncoding;
- }
-
- @Override
- public ITerminalConnector[] getConnectors() {
- return fConnectors;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#copy()
- */
- @Override
- public void copy() {
- copy(DND.CLIPBOARD);
- }
-
- private void copy(int clipboardType) {
- String selection = getSelection();
- if (selection.length() > 0) {
- Object[] data = new Object[] { selection };
- Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
- fClipboard.setContents(data, types, clipboardType);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#paste()
- */
- @Override
- public void paste() {
- paste(DND.CLIPBOARD);
-// TODO paste in another thread.... to avoid blocking
-// new Thread() {
-// public void run() {
-// for (int i = 0; i < strText.length(); i++) {
-// sendChar(strText.charAt(i), false);
-// }
-//
-// }
-// }.start();
- }
-
- private void paste(int clipboardType) {
- TextTransfer textTransfer = TextTransfer.getInstance();
- String strText = (String) fClipboard.getContents(textTransfer, clipboardType);
- pasteString(strText);
- }
-
- /**
- * @param strText the text to paste
- */
- @Override
- public boolean pasteString(String strText) {
- if(!isConnected())
- return false;
- if (strText == null)
- return false;
- if (!fEncoding.equals(defaultEncoding)) {
- sendString(strText);
- } else {
- // TODO I do not understand why pasteString would do this here...
- for (int i = 0; i < strText.length(); i++) {
- sendChar(strText.charAt(i), false);
- }
- }
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#selectAll()
- */
- @Override
- public void selectAll() {
- getCtlText().selectAll();
- if (fTerminalListener instanceof ITerminalListener2) {
- ((ITerminalListener2)fTerminalListener).setTerminalSelectionChanged();
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#sendKey(char)
- */
- @Override
- public void sendKey(char character) {
- Event event;
- KeyEvent keyEvent;
-
- event = new Event();
- event.widget = getCtlText();
- event.character = character;
- event.keyCode = 0;
- event.stateMask = 0;
- event.doit = true;
- keyEvent = new KeyEvent(event);
-
- fKeyHandler.keyPressed(keyEvent);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#clearTerminal()
- */
- @Override
- public void clearTerminal() {
- // The TerminalText object does all text manipulation.
- getTerminalText().clearTerminal();
- getCtlText().clearSelection();
- if (fTerminalListener instanceof ITerminalListener2) {
- ((ITerminalListener2)fTerminalListener).setTerminalSelectionChanged();
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getClipboard()
- */
- @Override
- public Clipboard getClipboard() {
- return fClipboard;
- }
-
- /**
- * @return non null selection
- */
- @Override
- public String getSelection() {
- String txt= fCtlText.getSelectionText();
- if(txt==null)
- txt=""; //$NON-NLS-1$
- return txt;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setFocus()
- */
- @Override
- public void setFocus() {
- getCtlText().setFocus();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isEmpty()
- */
- @Override
- public boolean isEmpty() {
- return getCtlText().isEmpty();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isDisposed()
- */
- @Override
- public boolean isDisposed() {
- return getCtlText().isDisposed();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isConnected()
- */
- @Override
- public boolean isConnected() {
- return fState==TerminalState.CONNECTED;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#disposeTerminal()
- */
- @Override
- public void disposeTerminal() {
- Logger.log("entered."); //$NON-NLS-1$
- if(fUseCommonPrefs) {
- TerminalPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPreferenceListener);
- JFaceResources.getFontRegistry().removeListener(fFontListener);
- }
- disconnectTerminal();
- fClipboard.dispose();
- getTerminalText().dispose();
- }
-
- @Override
- public void connectTerminal() {
- Logger.log("entered."); //$NON-NLS-1$
- if(getTerminalConnector()==null)
- return;
- fTerminalText.resetState();
- fApplicationCursorKeys = false;
- if(fConnector.getInitializationErrorMessage()!=null) {
- showErrorMessage(NLS.bind(
- TerminalMessages.CannotConnectTo,
- fConnector.getName(),
- fConnector.getInitializationErrorMessage()));
- // we cannot connect because the connector was not initialized
- return;
- }
- // clean the error message
- setMsg(""); //$NON-NLS-1$
- getTerminalConnector().connect(this);
- waitForConnect();
- }
-
- @Override
- public ITerminalConnector getTerminalConnector() {
- return fConnector;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#disconnectTerminal()
- */
- @Override
- public void disconnectTerminal() {
- Logger.log("entered."); //$NON-NLS-1$
-
- //Disconnect the remote side first
- if (getState()!=TerminalState.CLOSED) {
- if(getTerminalConnector()!=null) {
- getTerminalConnector().disconnect();
- }
- }
-
- //Ensure that a new Job can be started; then clean up old Job.
- Job job;
- synchronized(this) {
- job = fJob;
- fJob = null;
- }
- if (job!=null) {
- job.cancel();
- // Join job to avoid leaving job running after workbench shutdown (333613).
- // Interrupt to be fast enough; cannot close fInputStream since it is re-used (bug 348700).
- Thread t = job.getThread();
- if(t!=null) t.interrupt();
- try {
- job.join();
- } catch (InterruptedException e) {}
- }
- fPollingTextCanvasModel.stopPolling();
- }
-
- private void waitForConnect() {
- Logger.log("entered."); //$NON-NLS-1$
-
- // TODO Eliminate the nested dispatch loop
- do {
- if (!fDisplay.readAndDispatch())
- fDisplay.sleep();
- } while (getState()==TerminalState.CONNECTING);
-
- if (getCtlText().isDisposed()) {
- disconnectTerminal();
- return;
- }
- if (getMsg().length() > 0) {
- showErrorMessage(getMsg());
- disconnectTerminal();
- return;
- }
- if (getCtlText().isFocusControl()) {
- if (getState() == TerminalState.CONNECTED)
- fFocusListener.captureKeyEvents(true);
- }
- fPollingTextCanvasModel.startPolling();
- startReaderJob();
- }
-
- private synchronized void startReaderJob() {
- if(fJob==null) {
- fJob=new Job("Terminal data reader") { //$NON-NLS-1$
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- IStatus status=Status.OK_STATUS;
- try {
- while(true) {
- while(fInputStream.available()==0 && !monitor.isCanceled()) {
- try {
- fInputStream.waitForAvailable(500);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- if(monitor.isCanceled()) {
- //Do not disconnect terminal here because another reader job may already be running
- status=Status.CANCEL_STATUS;
- break;
- }
- try {
- // TODO: should block when no text is available!
- fTerminalText.processText();
- } catch (Exception e) {
- disconnectTerminal();
- status=new Status(IStatus.ERROR,TerminalPlugin.PLUGIN_ID,e.getLocalizedMessage(),e);
- break;
- }
- }
- } finally {
- // clean the job: start a new one when the connection gets restarted
- // Bug 208145: make sure we do not clean an other job that's already started (since it would become a Zombie)
- synchronized (VT100TerminalControl.this) {
- if (fJob==this) {
- fJob=null;
- }
- }
- }
- return status;
- }
-
- };
- fJob.setSystem(true);
- fJob.schedule();
- }
- }
-
- private void showErrorMessage(String message) {
- String strTitle = TerminalMessages.TerminalError;
- // [168197] Replace JFace MessagDialog by SWT MessageBox
- //MessageDialog.openError( getShell(), strTitle, message);
- MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
- mb.setText(strTitle);
- mb.setMessage(message);
- mb.open();
- }
-
- protected void sendString(String string) {
- Logger.log(string);
- try {
- // Send the string after converting it to an array of bytes using the
- // platform's default character encoding.
- //
- // TODO: Find a way to force this to use the ISO Latin-1 encoding.
- // TODO: handle Encoding Errors in a better way
-
- getOutputStream().write(string.getBytes(fEncoding));
- getOutputStream().flush();
- } catch (SocketException socketException) {
- displayTextInTerminal(socketException.getMessage());
-
- String strMsg = TerminalMessages.SocketError
- + "!\n" + socketException.getMessage(); //$NON-NLS-1$
- showErrorMessage(strMsg);
-
- Logger.logException(socketException);
-
- disconnectTerminal();
- } catch (IOException ioException) {
- showErrorMessage(TerminalMessages.IOError + "!\n" + ioException.getMessage());//$NON-NLS-1$
-
- Logger.logException(ioException);
-
- disconnectTerminal();
- }
- }
-
- @Override
- public Shell getShell() {
- return getCtlText().getShell();
- }
-
- protected void sendChar(char chKey, boolean altKeyPressed) {
- try {
- int byteToSend = chKey;
- OutputStream os = getOutputStream();
- if (os==null) {
- // Bug 207785: NPE when trying to send char while no longer connected
- Logger.log("NOT sending '" + byteToSend + "' because no longer connected"); //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- if (altKeyPressed) {
- // When the ALT key is pressed at the same time that a character is
- // typed, translate it into an ESCAPE followed by the character. The
- // alternative in this case is to set the high bit of the character
- // being transmitted, but that will cause input such as ALT-f to be
- // seen as the ISO Latin-1 character '�', which can be confusing to
- // European users running Emacs, for whom Alt-f should move forward a
- // word instead of inserting the '�' character.
- //
- // TODO: Make the ESCAPE-vs-highbit behavior user configurable.
-
- byte[] bytesToSend = String.valueOf(chKey).getBytes(fEncoding);
- StringBuilder b = new StringBuilder("sending ESC"); //$NON-NLS-1$
- for (int i = 0; i < bytesToSend.length; i++) {
- if (i != 0) b.append(" +"); //$NON-NLS-1$
- b.append(" '" + bytesToSend[i] + "'"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- Logger.log(b.toString());
- os.write('\u001b');
- os.write(bytesToSend);
- } else {
- byte[] bytesToSend = String.valueOf(chKey).getBytes(fEncoding);
- StringBuilder b = new StringBuilder("sending"); //$NON-NLS-1$
- for (int i = 0; i < bytesToSend.length; i++) {
- if (i != 0) b.append(" +"); //$NON-NLS-1$
- b.append(" '" + bytesToSend[i] + "'"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- Logger.log(b.toString());
- os.write(bytesToSend);
- }
- os.flush();
- }
- } catch (SocketException socketException) {
- Logger.logException(socketException);
-
- displayTextInTerminal(socketException.getMessage());
-
- String strMsg = TerminalMessages.SocketError
- + "!\n" + socketException.getMessage(); //$NON-NLS-1$
-
- showErrorMessage(strMsg);
- Logger.logException(socketException);
-
- disconnectTerminal();
- } catch (IOException ioException) {
- Logger.logException(ioException);
-
- displayTextInTerminal(ioException.getMessage());
-
- String strMsg = TerminalMessages.IOError + "!\n" + ioException.getMessage(); //$NON-NLS-1$
-
- showErrorMessage(strMsg);
- Logger.logException(ioException);
-
- disconnectTerminal();
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setupTerminal(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void setupTerminal(Composite parent) {
- Assert.isNotNull(parent);
- boolean wasDisposed = true;
- TerminalState oldState = fState;
- fState = TerminalState.CLOSED;
- if (fClipboard != null && !fClipboard.isDisposed()) {
- // terminal was not disposed (DnD)
- wasDisposed = false;
- fClipboard.dispose();
- fPollingTextCanvasModel.stopPolling();
- }
- if (fWndParent != null && !fWndParent.isDisposed()) {
- // terminal widget gets a new parent (DnD)
- fWndParent.dispose();
- }
- setupControls(parent);
- setCommandInputField(fCommandInputField);
- setupListeners();
- if (fUseCommonPrefs && wasDisposed) {
- updatePreferences();
- onTerminalFontChanged();
- TerminalPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPreferenceListener);
- JFaceResources.getFontRegistry().addListener(fFontListener);
- }
- setupHelp(fWndParent, TerminalPlugin.HELP_VIEW);
-
- if (!wasDisposed) {
- fState = oldState;
- }
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.ITerminalViewControl#updatePreferences()
- */
- private void updatePreferences() {
- int bufferLineLimit = Platform.getPreferencesService().getInt(TerminalPlugin.PLUGIN_ID, ITerminalConstants.PREF_BUFFERLINES, 0, null);
- boolean invert = Platform.getPreferencesService().getBoolean(TerminalPlugin.PLUGIN_ID, ITerminalConstants.PREF_INVERT_COLORS, false, null);
- setBufferLineLimit(bufferLineLimit);
- setInvertedColors(invert);
- }
-
- private void onTerminalFontChanged() {
- // set the font for all
- setFont(ITerminalConstants.FONT_DEFINITION);
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.ITerminalViewControl#setFont(java.lang.String)
- */
- @Override
- public void setFont(String fontName) {
- Font font=JFaceResources.getFont(fontName);
- getCtlText().setFont(font);
- if(fCommandInputField!=null) {
- fCommandInputField.setFont(font);
- }
- // Tell the TerminalControl singleton that the font has changed.
- fCtlText.updateFont(fontName);
- getTerminalText().fontChanged();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.ITerminalViewControl#setFont(org.eclipse.swt.graphics.Font)
- */
- @Override
- @Deprecated
- public void setFont(Font font) {
- getCtlText().setFont(font);
- if(fCommandInputField!=null) {
- fCommandInputField.setFont(font);
- }
-
- // Tell the TerminalControl singleton that the font has changed.
- fCtlText.onFontChange();
- getTerminalText().fontChanged();
- }
- @Override
- public Font getFont() {
- return getCtlText().getFont();
- }
- @Override
- public Control getControl() {
- return fCtlText;
- }
- @Override
- public Control getRootControl() {
- return fWndParent;
- }
- protected void setupControls(Composite parent) {
- fWndParent=new Composite(parent,SWT.NONE);
- GridLayout layout=new GridLayout();
- layout.marginWidth=0; layout.marginHeight=0; layout.verticalSpacing=0;
- fWndParent.setLayout(layout);
-
- ITerminalTextDataSnapshot snapshot=fTerminalModel.makeSnapshot();
- // TODO how to get the initial size correctly!
- snapshot.updateSnapshot(false);
- fPollingTextCanvasModel=new PollingTextCanvasModel(snapshot);
- fCtlText=new TextCanvas(fWndParent,fPollingTextCanvasModel,SWT.NONE,new TextLineRenderer(fCtlText,fPollingTextCanvasModel));
-
- fCtlText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- fCtlText.addResizeHandler(new TextCanvas.ResizeListener() {
- @Override
- public void sizeChanged(int lines, int columns) {
- fTerminalText.setDimensions(lines, columns);
- }
- });
- fCtlText.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseUp(MouseEvent e) {
- // update selection used by middle mouse button paste
- if (e.button == 1 && getSelection().length() > 0) {
- copy(DND.SELECTION_CLIPBOARD);
- }
- }
- });
-
- fDisplay = getCtlText().getDisplay();
- fClipboard = new Clipboard(fDisplay);
- }
-
- protected void setupListeners() {
- fKeyHandler = new TerminalKeyHandler();
- fFocusListener = new TerminalFocusListener();
-
- getCtlText().addKeyListener(fKeyHandler);
- getCtlText().addFocusListener(fFocusListener);
-
- }
-
- /**
- * Setup all the help contexts for the controls.
- */
- protected void setupHelp(Composite parent, String id) {
- Control[] children = parent.getChildren();
-
- for (int nIndex = 0; nIndex < children.length; nIndex++) {
- if (children[nIndex] instanceof Composite) {
- setupHelp((Composite) children[nIndex], id);
- }
- }
-
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, id);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#displayTextInTerminal(java.lang.String)
- */
- @Override
- public void displayTextInTerminal(String text) {
- writeToTerminal("\r\n"+text+"\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- private void writeToTerminal(String text) {
- try {
- getRemoteToTerminalOutputStream().write(text.getBytes(fEncoding));
- } catch (UnsupportedEncodingException e) {
- // should never happen!
- e.printStackTrace();
- } catch (IOException e) {
- // should never happen!
- e.printStackTrace();
- }
- }
-
- @Override
- public OutputStream getRemoteToTerminalOutputStream() {
- if(Logger.isLogEnabled()) {
- return new LoggingOutputStream(fInputStream.getOutputStream());
- } else {
- return fInputStream.getOutputStream();
- }
- }
- protected boolean isLogCharEnabled() {
- return TerminalPlugin.isOptionEnabled(Logger.TRACE_DEBUG_LOG_CHAR);
- }
-
- @Override
- public OutputStream getOutputStream() {
- if(getTerminalConnector()!=null)
- return getTerminalConnector().getTerminalToRemoteStream();
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setMsg(java.lang.String)
- */
- @Override
- public void setMsg(String msg) {
- fMsg = msg;
- }
-
- public String getMsg() {
- return fMsg;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getCtlText()
- */
- protected TextCanvas getCtlText() {
- return fCtlText;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getTerminalText()
- */
- public VT100Emulator getTerminalText() {
- return fTerminalText;
- }
- protected class TerminalFocusListener implements FocusListener {
- private IContextActivation terminalContextActivation = null;
- private IContextActivation editContextActivation = null;
-
- protected TerminalFocusListener() {
- super();
- }
-
- @Override
- @SuppressWarnings("cast")
- public void focusGained(FocusEvent event) {
- // Disable all keyboard accelerators (e.g., Control-B) so the Terminal view
- // can see every keystroke. Without this, Emacs, vi, and Bash are unusable
- // in the Terminal view.
- if (getState() == TerminalState.CONNECTED)
- captureKeyEvents(true);
-
- IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
- editContextActivation = contextService.activateContext("org.eclipse.tm.terminal.EditContext"); //$NON-NLS-1$
- }
-
- @Override
- @SuppressWarnings("cast")
- public void focusLost(FocusEvent event) {
- // Enable all keybindings.
- captureKeyEvents(false);
-
- // Restore the command context to its previous value.
-
- IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
- contextService.deactivateContext(editContextActivation);
- }
-
- @SuppressWarnings("cast")
- protected void captureKeyEvents(boolean capture) {
- IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
- IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
-
- boolean enableKeyFilter = !capture;
- if (bindingService.isKeyFilterEnabled() != enableKeyFilter)
- bindingService.setKeyFilterEnabled(enableKeyFilter);
-
- if (capture && terminalContextActivation == null) {
- // The above code fails to cause Eclipse to disable menu-activation
- // accelerators (e.g., Alt-F for the File menu), so we set the command
- // context to be the Terminal view's command context. This enables us to
- // override menu-activation accelerators with no-op commands in our
- // plugin.xml file, which enables the Terminal view to see absolutely _all_
- // key-presses.
- terminalContextActivation = contextService.activateContext("org.eclipse.tm.terminal.TerminalContext"); //$NON-NLS-1$
-
- } else if (!capture && terminalContextActivation != null) {
- contextService.deactivateContext(terminalContextActivation);
- terminalContextActivation = null;
- }
- }
- }
-
- protected class TerminalKeyHandler extends KeyAdapter {
- @Override
- public void keyPressed(KeyEvent event) {
- //TODO next 2 lines are probably obsolete now
- if (getState()==TerminalState.CONNECTING)
- return;
-
- //TODO we should no longer handle copy & paste specially.
- //Instead, we should have Ctrl+Shift always go to local since there is no escape sequence for this.
- //On Mac, Command+Anything already goes always to local.
- //Note that this decision means that Command will NOT be Meta in Emacs on a Remote.
- int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
- if (editActionAccelerators.isCopyAction(accelerator)) {
- copy();
- return;
- }
- if (editActionAccelerators.isPasteAction(accelerator)) {
- paste();
- return;
- }
-
- // We set the event.doit to false to prevent any further processing of this
- // key event. The only reason this is here is because I was seeing the F10
- // key both send an escape sequence (due to this method) and switch focus
- // to the Workbench File menu (forcing the user to click in the Terminal
- // view again to continue entering text). This fixes that.
-
- event.doit = false;
-
- char character = event.character;
- int modifierKeys = event.stateMask & SWT.MODIFIER_MASK;
- boolean ctrlKeyPressed = (event.stateMask & SWT.CTRL) != 0;
- boolean onlyCtrlKeyPressed = modifierKeys == SWT.CTRL;
- boolean macCmdKeyPressed = (event.stateMask & SWT.COMMAND) != 0;
-
- // To fix SPR 110341, we consider the Alt key to be pressed only when the
- // Control key is _not_ also pressed. This works around a bug in SWT where,
- // on European keyboards, the AltGr key being pressed appears to us as Control
- // + Alt being pressed simultaneously.
- boolean altKeyPressed = (event.stateMask & SWT.ALT) != 0 && !ctrlKeyPressed;
-
- //if (!isConnected()) {
- if (fState==TerminalState.CLOSED) {
- // Pressing ENTER while not connected causes us to connect.
- if (character == '\r' && isConnectOnEnterIfClosed()) {
- connectTerminal();
- return;
- }
-
- // Ignore all other keyboard input when not connected.
- // Allow other key handlers (such as Ctrl+F1) do their work
- event.doit = true;
- return;
- }
-
- // Manage the Del key
- if (event.keyCode == 0x000007f) {
- sendString("\u001b[3~"); //$NON-NLS-1$
- return;
- }
-
- // TODO Linux tty is usually expecting a DEL (^?) character
- // but this causes issues with some telnet servers and
- // serial connections. Workaround: stty erase ^H
- //if (event.keyCode == SWT.BS) {
- // sendChar(SWT.DEL, altKeyPressed);
- // return;
- //}
-
- // If the event character is NUL ('\u0000'), then a special key was pressed
- // (e.g., PageUp, PageDown, an arrow key, a function key, Shift, Alt,
- // Control, etc.). The one exception is when the user presses Control-@,
- // which sends a NUL character, in which case we must send the NUL to the
- // remote endpoint. This is necessary so that Emacs will work correctly,
- // because Control-@ (i.e., NUL) invokes Emacs' set-mark-command when Emacs
- // is running on a terminal. When the user presses Control-@, the keyCode
- // is 50.
- // On a Mac, the Cmd key is always used for local commands.
-
- if (macCmdKeyPressed || (character == '\u0000' && event.keyCode != 50)) {
- // A special key was pressed. Figure out which one it was and send the
- // appropriate ANSI escape sequence.
- //
- // IMPORTANT: Control will not enter this method for these special keys
- // unless certain <keybinding> tags are present in the plugin.xml file
- // for the Terminal view. Do not delete those tags.
-
- String escSeq = null;
- boolean anyModifierPressed = modifierKeys != 0;
- boolean onlyMacCmdKeyPressed = modifierKeys == SWT.COMMAND;
-
- switch (event.keyCode) {
- case 0x1000001: // Up arrow.
- if (!anyModifierPressed)
- escSeq = fApplicationCursorKeys ? "\u001bOA" : "\u001b[A"; //$NON-NLS-1$ //$NON-NLS-2$
- break;
-
- case 0x1000002: // Down arrow.
- if (!anyModifierPressed)
- escSeq = fApplicationCursorKeys ? "\u001bOB" : "\u001b[B"; //$NON-NLS-1$ //$NON-NLS-2$
- break;
-
- case 0x1000003: // Left arrow.
- if (onlyCtrlKeyPressed) {
- escSeq = "\u001b[1;5D"; //$NON-NLS-1$
- } else if (!anyModifierPressed) {
- escSeq = fApplicationCursorKeys ? "\u001bOD" : "\u001b[D"; //$NON-NLS-1$ //$NON-NLS-2$
- } else if (onlyMacCmdKeyPressed) {
- // Cmd-Left is "Home" on the Mac
- escSeq = fApplicationCursorKeys ? "\u001bOH" : "\u001b[H"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- break;
-
- case 0x1000004: // Right arrow.
- if (onlyCtrlKeyPressed) {
- escSeq = "\u001b[1;5C"; //$NON-NLS-1$
- } else if (!anyModifierPressed) {
- escSeq = fApplicationCursorKeys ? "\u001bOC" : "\u001b[C"; //$NON-NLS-1$ //$NON-NLS-2$
- } else if (onlyMacCmdKeyPressed) {
- // Cmd-Right is "End" on the Mac
- escSeq = fApplicationCursorKeys ? "\u001bOF" : "\u001b[F"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- break;
-
- case 0x1000005: // PgUp key.
- if (!anyModifierPressed)
- escSeq = "\u001b[5~"; //$NON-NLS-1$
- break;
-
- case 0x1000006: // PgDn key.
- if (!anyModifierPressed)
- escSeq = "\u001b[6~"; //$NON-NLS-1$
- break;
-
- case 0x1000007: // Home key.
- if (!anyModifierPressed)
- escSeq = fApplicationCursorKeys ? "\u001bOH" : "\u001b[H"; //$NON-NLS-1$ //$NON-NLS-2$
- break;
-
- case 0x1000008: // End key.
- if (!anyModifierPressed)
- escSeq = fApplicationCursorKeys ? "\u001bOF" : "\u001b[F"; //$NON-NLS-1$ //$NON-NLS-2$
- break;
-
- case 0x1000009: // Insert.
- if (!anyModifierPressed)
- escSeq = "\u001b[2~"; //$NON-NLS-1$
- break;
-
- case 0x100000a: // F1 key.
- if (!anyModifierPressed)
- escSeq = "\u001bOP"; //$NON-NLS-1$
- break;
-
- case 0x100000b: // F2 key.
- if (!anyModifierPressed)
- escSeq = "\u001bOQ"; //$NON-NLS-1$
- break;
-
- case 0x100000c: // F3 key.
- if (!anyModifierPressed)
- escSeq = "\u001bOR"; //$NON-NLS-1$
- break;
-
- case 0x100000d: // F4 key.
- if (!anyModifierPressed)
- escSeq = "\u001bOS"; //$NON-NLS-1$
- break;
-
- case 0x100000e: // F5 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[15~"; //$NON-NLS-1$
- break;
-
- case 0x100000f: // F6 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[17~"; //$NON-NLS-1$
- break;
-
- case 0x1000010: // F7 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[18~"; //$NON-NLS-1$
- break;
-
- case 0x1000011: // F8 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[19~"; //$NON-NLS-1$
- break;
-
- case 0x1000012: // F9 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[20~"; //$NON-NLS-1$
- break;
-
- case 0x1000013: // F10 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[21~"; //$NON-NLS-1$
- break;
-
- case 0x1000014: // F11 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[23~"; //$NON-NLS-1$
- break;
-
- case 0x1000015: // F12 key.
- if (!anyModifierPressed)
- escSeq = "\u001b[24~"; //$NON-NLS-1$
- break;
-
- default:
- // Ignore other special keys. Control flows through this case when
- // the user presses SHIFT, CONTROL, ALT, and any other key not
- // handled by the above cases.
- break;
- }
-
- if (escSeq == null) {
- // Any unmapped key should be handled locally by Eclipse
- event.doit = true;
- processKeyBinding(event, accelerator);
- } else
- sendString(escSeq);
-
- // It's ok to return here, because we never locally echo special keys.
-
- return;
- }
-
- Logger.log("stateMask = " + event.stateMask); //$NON-NLS-1$
-
- if (onlyCtrlKeyPressed) {
- switch (character) {
- case ' ':
- // Send a NUL character -- many terminal emulators send NUL when
- // Control-Space is pressed. This is used to set the mark in Emacs.
- character = '\u0000';
- break;
- case '/':
- // Ctrl+/ is undo in emacs
- character = '\u001f';
- break;
- }
- }
-
- //TODO: At this point, Ctrl+M sends the same as Ctrl+Shift+M .
- //This is undesired. Fixing this here might make the special Ctrl+Shift+C
- //handling unnecessary further up.
- sendChar(character, altKeyPressed);
-
- // Now decide if we should locally echo the character we just sent. We do
- // _not_ locally echo the character if any of these conditions are true:
- //
- // o This is a serial connection.
- //
- // o This is a TCP connection (i.e., m_telnetConnection is not null) and
- // the remote endpoint is not a TELNET server.
- //
- // o The ALT (or META) key is pressed.
- //
- // o The character is any of the first 32 ISO Latin-1 characters except
- // Control-I or Control-M.
- //
- // o The character is the DELETE character.
-
- if (getTerminalConnector() == null
- || getTerminalConnector().isLocalEcho() == false || altKeyPressed
- || (character >= '\u0001' && character < '\t')
- || (character > '\t' && character < '\r')
- || (character > '\r' && character <= '\u001f')
- || character == '\u007f') {
- // No local echoing.
- return;
- }
-
- // Locally echo the character.
-
- StringBuffer charBuffer = new StringBuffer();
- charBuffer.append(character);
-
- // If the character is a carriage return, we locally echo it as a CR + LF
- // combination.
-
- if (character == '\r')
- charBuffer.append('\n');
-
- writeToTerminal(charBuffer.toString());
- }
-
- /*
- * Process given event as Eclipse key binding.
- */
- @SuppressWarnings("cast")
- private void processKeyBinding(KeyEvent event, int accelerator) {
- IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
- KeyStroke keyStroke = SWTKeySupport.convertAcceleratorToKeyStroke(accelerator);
- Binding binding = bindingService.getPerfectMatch(KeySequence.getInstance(keyStroke));
- if (binding != null) {
- ParameterizedCommand cmd = binding.getParameterizedCommand();
- if (cmd != null) {
- IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getAdapter(IHandlerService.class);
- Event cmdEvent = new Event();
- cmdEvent.type = SWT.KeyDown;
- cmdEvent.display = event.display;
- cmdEvent.widget = event.widget;
- cmdEvent.character = event.character;
- cmdEvent.keyCode = event.keyCode;
- ////Bug - KeyEvent.keyLocation was introduced in Eclipse 3.6
- ////Use reflection for now to remain backward compatible down to Eclipse 3.4
- //cmdEvent.keyLocation = event.keyLocation;
- try {
- Field f1 = event.getClass().getField("keyLocation"); //$NON-NLS-1$
- Field f2 = cmdEvent.getClass().getField("keyLocation"); //$NON-NLS-1$
- f2.set(cmdEvent, f1.get(event));
- } catch(NoSuchFieldException nsfe) {
- /* ignore, this is Eclipse 3.5 or earlier */
- } catch(Throwable t) {
- t.printStackTrace();
- }
- cmdEvent.stateMask = event.stateMask;
- event.doit = false;
- try {
- handlerService.executeCommand(cmd, cmdEvent);
- } catch (ExecutionException e) {
- TerminalPlugin.getDefault().getLog().log(
- new Status(IStatus.ERROR,TerminalPlugin.PLUGIN_ID,e.getLocalizedMessage(),e));
- } catch (Exception e) {
- // ignore other exceptions from cmd execution
- }
- }
- }
- }
-
- }
-
- @Override
- public void setTerminalTitle(String title) {
- fTerminalListener.setTerminalTitle(title);
- }
-
-
- @Override
- public TerminalState getState() {
- return fState;
- }
-
-
- @Override
- public void setState(TerminalState state) {
- fState=state;
- fTerminalListener.setState(state);
- // enable the (blinking) cursor if the terminal is connected
- runAsyncInDisplayThread(new Runnable() {
- @Override
- public void run() {
- if(fCtlText!=null && !fCtlText.isDisposed()) {
- if (isConnected()) {
- fCtlText.setCursorEnabled(true);
- } else {
- fCtlText.setCursorEnabled(false);
- // Stop capturing all key events
- fFocusListener.captureKeyEvents(false);
- }
- }
- }
- });
- }
- /**
- * @param runnable run in display thread
- */
- private void runAsyncInDisplayThread(Runnable runnable) {
- if(Display.findDisplay(Thread.currentThread())!=null)
- runnable.run();
- else if(PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench().getDisplay() != null && !PlatformUI.getWorkbench().getDisplay().isDisposed())
- PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
- // else should not happen and we ignore it...
- }
-
- @Override
- public String getSettingsSummary() {
- if(getTerminalConnector()!=null)
- return getTerminalConnector().getSettingsSummary();
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public void setConnector(ITerminalConnector connector) {
- fConnector=connector;
-
- }
- @Override
- public ICommandInputField getCommandInputField() {
- return fCommandInputField;
- }
-
- @Override
- public void setCommandInputField(ICommandInputField inputField) {
- if(fCommandInputField!=null)
- fCommandInputField.dispose();
- fCommandInputField=inputField;
- if(fCommandInputField!=null)
- fCommandInputField.createControl(fWndParent, this);
- if(fWndParent.isVisible())
- fWndParent.layout(true);
- }
-
- @Override
- public int getBufferLineLimit() {
- return fTerminalModel.getMaxHeight();
- }
-
- @Override
- public void setBufferLineLimit(int bufferLineLimit) {
- if(bufferLineLimit<=0)
- return;
- synchronized (fTerminalModel) {
- if(fTerminalModel.getHeight()>bufferLineLimit)
- fTerminalModel.setDimensions(bufferLineLimit, fTerminalModel.getWidth());
- fTerminalModel.setMaxHeight(bufferLineLimit);
- }
- }
-
- @Override
- public boolean isScrollLock() {
- return fCtlText.isScrollLock();
- }
-
- @Override
- public void setScrollLock(boolean on) {
- fCtlText.setScrollLock(on);
- }
-
- @Override
- public void setInvertedColors(boolean invert) {
- fCtlText.setInvertedColors(invert);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setConnectOnEnterIfClosed(boolean)
- */
- @Override
- public final void setConnectOnEnterIfClosed(boolean on) {
- connectOnEnterIfClosed = on;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isConnectOnEnterIfClosed()
- */
- @Override
- public final boolean isConnectOnEnterIfClosed() {
- return connectOnEnterIfClosed;
- }
-
- @Override
- public void setVT100LineWrapping(boolean enable) {
- getTerminalText().setVT100LineWrapping(enable);
- }
-
- @Override
- public boolean isVT100LineWrapping() {
- return getTerminalText().isVT100LineWrapping();
- }
-
- @Override
- public void enableApplicationCursorKeys(boolean enable) {
- fApplicationCursorKeys = enable;
- }
-
- @Override
- public void addMouseListener(ITerminalMouseListener listener) {
- getCtlText().addTerminalMouseListener(listener);
- }
-
- @Override
- public void removeMouseListener(ITerminalMouseListener listener) {
- getCtlText().removeTerminalMouseListener(listener);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-
-public interface ISnapshotChanges {
-
- /**
- * @param line might bigger than the number of lines....
- */
- void markLineChanged(int line);
-
- /**
- * Marks all lines in the range as changed
- * @param line >=0
- * @param n might be out of range
- */
- void markLinesChanged(int line, int n);
-
- /**
- * Marks all lines within the scrolling region
- * changed and resets the scrolling information
- */
- void convertScrollingIntoChanges();
-
- /**
- * @return true if something has changed
- */
- boolean hasChanged();
-
- /**
- * @param startLine
- * @param size
- * @param shift
- */
- void scroll(int startLine, int size, int shift);
-
- /**
- * Mark all lines changed
- * @param height if no window is set this is the number of
- * lines that are marked as changed
- */
- void setAllChanged(int height);
-
- int getFirstChangedLine();
-
- int getLastChangedLine();
-
- int getScrollWindowStartLine();
-
- int getScrollWindowSize();
-
- int getScrollWindowShift();
-
- boolean hasLineChanged(int line);
-
- void markDimensionsChanged();
- boolean hasDimensionsChanged();
- void markCursorChanged();
-
- /**
- * @return true if the terminal data has changed
- */
- boolean hasTerminalChanged();
- /**
- * mark the terminal as changed
- */
- void setTerminalChanged();
-
-
- void copyChangedLines(ITerminalTextData dest, ITerminalTextData source);
-
- /**
- * @param startLine -1 means follow the end of the data
- * @param size number of lines to follow
- */
- void setInterestWindow(int startLine, int size);
- int getInterestWindowStartLine();
- int getInterestWindowSize();
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-
-
-/**
- * Collects the changes of the {@link ITerminalTextData}
- *
- */
-public class SnapshotChanges implements ISnapshotChanges {
- /**
- * The first line changed
- */
- private int fFirstChangedLine;
- /**
- * The last line changed
- */
- private int fLastChangedLine;
- private int fScrollWindowStartLine;
- private int fScrollWindowSize;
- private int fScrollWindowShift;
- /**
- * true, if scrolling should not tracked anymore
- */
- private boolean fScrollDontTrack;
- /**
- * The lines that need to be copied
- * into the snapshot (lines that have
- * not changed don't have to be copied)
- */
- private boolean[] fChangedLines;
-
- private int fInterestWindowSize;
- private int fInterestWindowStartLine;
- private boolean fDimensionsChanged;
- private boolean fTerminalHasChanged;
- private boolean fCursorHasChanged;
-
- public SnapshotChanges(int nLines) {
- setChangedLinesLength(nLines);
- fFirstChangedLine=Integer.MAX_VALUE;
- fLastChangedLine=-1;
- }
- public SnapshotChanges(int windowStart, int windowSize) {
- setChangedLinesLength(windowStart+windowSize);
- fFirstChangedLine=Integer.MAX_VALUE;
- fLastChangedLine=-1;
- fInterestWindowStartLine=windowStart;
- fInterestWindowSize=windowSize;
-
- }
- /**
- * This is used in asserts to throw an {@link RuntimeException}.
- * This is useful for tests.
- * @return never -- throws an exception
- */
- private boolean throwRuntimeException() {
- throw new RuntimeException();
- }
- /**
- * @param line
- * @param size
- * @return true if the range overlaps with the interest window
- */
- boolean isInInterestWindow(int line, int size) {
- if(fInterestWindowSize<=0)
- return true;
- if(line+size<=fInterestWindowStartLine || line>=fInterestWindowStartLine+fInterestWindowSize)
- return false;
- return true;
- }
- /**
- * @param line
- * @return true if the line is within the interest window
- */
- boolean isInInterestWindow(int line) {
- if(fInterestWindowSize<=0)
- return true;
- if(line<fInterestWindowStartLine || line>=fInterestWindowStartLine+fInterestWindowSize)
- return false;
- return true;
- }
- /**
- * @param line
- * @return the line within the window
- */
- int fitLineToWindow(int line) {
- if(fInterestWindowSize<=0)
- return line;
- if(line<fInterestWindowStartLine)
- return fInterestWindowStartLine;
- return line;
- }
- /**
- * The result is only defined if {@link #isInInterestWindow(int, int)} returns true!
- * @param line the line <b>before</b> {@link #fitLineToWindow(int)} has been called!
- * @param size
- * @return the adjusted size.
- * <p>Note:</p> {@link #fitLineToWindow(int)} has to be called on the line to
- * move the window correctly!
- */
- int fitSizeToWindow(int line, int size) {
- if(fInterestWindowSize<=0)
- return size;
- if(line<fInterestWindowStartLine) {
- size-=fInterestWindowStartLine-line;
- line=fInterestWindowStartLine;
- }
- if(line+size>fInterestWindowStartLine+fInterestWindowSize)
- size=fInterestWindowStartLine+fInterestWindowSize-line;
- return size;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#markLineChanged(int)
- */
- public void markLineChanged(int line) {
- if(!isInInterestWindow(line))
- return;
- line=fitLineToWindow(line);
- if(line<fFirstChangedLine)
- fFirstChangedLine=line;
- if(line>fLastChangedLine)
- fLastChangedLine=line;
- // in case the terminal got resized we expand
- // don't remember the changed line because
- // there is nothing to copy
- if(line<getChangedLineLength()) {
- setChangedLine(line,true);
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#markLinesChanged(int, int)
- */
- public void markLinesChanged(int line, int n) {
- if(n<=0 || !isInInterestWindow(line,n))
- return;
- // do not exceed the bounds of fChangedLines
- // the terminal might have been resized and
- // we can only keep changes for the size of the
- // previous terminal
- n=fitSizeToWindow(line, n);
- line=fitLineToWindow(line);
- int m=Math.min(line+n, getChangedLineLength());
- for (int i = line; i < m; i++) {
- setChangedLine(i,true);
- }
- // this sets fFirstChangedLine as well
- markLineChanged(line);
- // this sets fLastChangedLine as well
- markLineChanged(line+n-1);
- }
- public void markCursorChanged() {
- fCursorHasChanged=true;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#convertScrollingIntoChanges()
- */
- public void convertScrollingIntoChanges() {
- markLinesChanged(fScrollWindowStartLine,fScrollWindowSize);
- fScrollWindowStartLine=0;
- fScrollWindowSize=0;
- fScrollWindowShift=0;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#hasChanged()
- */
- public boolean hasChanged() {
- if(fFirstChangedLine!=Integer.MAX_VALUE || fLastChangedLine>0 || fScrollWindowShift!=0 ||fDimensionsChanged || fCursorHasChanged)
- return true;
- return false;
- }
- public void markDimensionsChanged() {
- fDimensionsChanged=true;
- }
- public boolean hasDimensionsChanged() {
- return fDimensionsChanged;
- }
- public boolean hasTerminalChanged() {
- return fTerminalHasChanged;
- }
- public void setTerminalChanged() {
- fTerminalHasChanged=true;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#scroll(int, int, int)
- */
- public void scroll(int startLine, int size, int shift) {
- size=fitSizeToWindow(startLine, size);
- startLine=fitLineToWindow(startLine);
- // let's track only negative shifts
- if(fScrollDontTrack) {
- // we are in a state where we cannot track scrolling
- // so let's simply mark the scrolled lines as changed
- markLinesChanged(startLine, size);
- } else if(shift>=0) {
- // we cannot handle positive scroll
- // forget about clever caching of scroll events
- doNotTrackScrollingAnymore();
- // mark all lines inside the scroll region as changed
- markLinesChanged(startLine, size);
- } else {
- // we have already scrolled
- if(fScrollWindowShift<0) {
- // we have already scrolled
- if(fScrollWindowStartLine==startLine && fScrollWindowSize==size) {
- // we are scrolling the same region again?
- fScrollWindowShift+=shift;
- scrollChangesLinesWithNegativeShift(startLine,size,shift);
- } else {
- // mark all lines in the old scroll region as changed
- doNotTrackScrollingAnymore();
- // mark all lines changed, because
- markLinesChanged(startLine, size);
- }
- } else {
- // first scroll in this change -- we just notify it
- fScrollWindowStartLine=startLine;
- fScrollWindowSize=size;
- fScrollWindowShift=shift;
- scrollChangesLinesWithNegativeShift(startLine,size,shift);
- }
- }
- }
- /**
- * Some incompatible scrolling occurred. We cannot do the
- * scroll optimization anymore...
- */
- private void doNotTrackScrollingAnymore() {
- if(fScrollWindowSize>0) {
- // convert the current scrolling into changes
- markLinesChanged(fScrollWindowStartLine, fScrollWindowSize);
- fScrollWindowStartLine=0;
- fScrollWindowSize=0;
- fScrollWindowShift=0;
- }
- // don't be clever on scrolling anymore
- fScrollDontTrack=true;
- }
- /**
- * Scrolls the changed lines data
- *
- * @param line
- * @param n
- * @param shift must be negative!
- */
- private void scrollChangesLinesWithNegativeShift(int line, int n, int shift) {
- assert shift <0 || throwRuntimeException();
- // scroll the region
- // don't run out of bounds!
- int m=Math.min(line+n+shift,getChangedLineLength()+shift);
- for (int i = line; i < m; i++) {
- setChangedLine(i, hasLineChanged(i-shift));
- // move the first changed line up.
- // We don't have to move the maximum down,
- // because with a shift scroll, the max is moved
- // my the next loop in this method
- if(i<fFirstChangedLine && hasLineChanged(i)) {
- fFirstChangedLine=i;
- }
- }
- // mark the "opened" lines as changed
- for (int i = Math.max(0,line+n+shift); i < line+n; i++) {
- markLineChanged(i);
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#setAllChanged(int)
- */
- public void setAllChanged(int height) {
- fScrollWindowStartLine=0;
- fScrollWindowSize=0;
- fScrollWindowShift=0;
- fFirstChangedLine=fitLineToWindow(0);
- fLastChangedLine=fFirstChangedLine+fitSizeToWindow(0, height)-1;
- // no need to keep an array of changes anymore
- setChangedLinesLength(0);
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getFirstChangedLine()
- */
- public int getFirstChangedLine() {
- return fFirstChangedLine;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getLastChangedLine()
- */
- public int getLastChangedLine() {
- return fLastChangedLine;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getScrollWindowStartLine()
- */
- public int getScrollWindowStartLine() {
- return fScrollWindowStartLine;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getScrollWindowSize()
- */
- public int getScrollWindowSize() {
- return fScrollWindowSize;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getScrollWindowShift()
- */
- public int getScrollWindowShift() {
- return fScrollWindowShift;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#copyChangedLines(org.eclipse.tm.terminal.model.ITerminalTextData, org.eclipse.tm.terminal.model.ITerminalTextData)
- */
- public void copyChangedLines(ITerminalTextData dest, ITerminalTextData source) {
- int n=Math.min(fLastChangedLine+1,source.getHeight());
- for (int i = fFirstChangedLine; i < n ; i++) {
- if(hasLineChanged(i))
- dest.copyLine(source,i,i);
- }
- }
-
- public int getInterestWindowSize() {
- return fInterestWindowSize;
- }
-
- public int getInterestWindowStartLine() {
- return fInterestWindowStartLine;
- }
-
- public void setInterestWindow(int startLine, int size) {
- int oldStartLine=fInterestWindowStartLine;
- int oldSize=fInterestWindowSize;
- fInterestWindowStartLine=startLine;
- fInterestWindowSize=size;
- if(oldSize>0) {
- int shift=oldStartLine-startLine;
- if(shift==0) {
- if(size>oldSize) {
- // add lines to the end
- markLinesChanged(oldStartLine+oldSize, size-oldSize);
- }
- // else no lines within the window have changed
-
- } else if(Math.abs(shift)<size) {
- if(shift<0) {
- // we can scroll
- scroll(startLine, oldSize, shift);
- // mark the lines at the end as new
- for (int i = oldStartLine+oldSize; i < startLine+size; i++) {
- markLineChanged(i);
- }
- } else {
- // we cannot shift positive -- mark all changed
- markLinesChanged(startLine, size);
- }
- } else {
- // no scrolling possible
- markLinesChanged(startLine, size);
- }
-
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#hasLineChanged(int)
- */
- public boolean hasLineChanged(int line) {
- if(line<fChangedLines.length)
- return fChangedLines[line];
- // since the height of the terminal could
- // have changed but we have tracked only changes
- // of the previous terminal height, any line outside
- // the the range of the previous height has changed
- return isInInterestWindow(line);
- }
- int getChangedLineLength() {
- return fChangedLines.length;
- }
- void setChangedLine(int line,boolean changed){
- fChangedLines[line]=changed;
- }
- void setChangedLinesLength(int length) {
- fChangedLines=new boolean[length];
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse synchronized public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * This is a decorator to make all access to
- * ITerminalTextData synchronized
- *
- */
-public class SynchronizedTerminalTextData implements ITerminalTextData {
- final ITerminalTextData fData;
- public SynchronizedTerminalTextData(ITerminalTextData data) {
- fData=data;
- }
- synchronized public void addLine() {
- fData.addLine();
- }
- synchronized public void cleanLine(int line) {
- fData.cleanLine(line);
- }
- synchronized public void copy(ITerminalTextData source) {
- fData.copy(source);
- }
- synchronized public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- fData.copyLine(source, sourceLine, destLine);
- }
- synchronized public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
- fData.copyRange(source, sourceStartLine, destStartLine, length);
- }
- synchronized public char getChar(int line, int column) {
- return fData.getChar(line, column);
- }
- synchronized public char[] getChars(int line) {
- return fData.getChars(line);
- }
- synchronized public int getCursorColumn() {
- return fData.getCursorColumn();
- }
- synchronized public int getCursorLine() {
- return fData.getCursorLine();
- }
- synchronized public int getHeight() {
- return fData.getHeight();
- }
- synchronized public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
- return fData.getLineSegments(line, startCol, numberOfCols);
- }
- synchronized public int getMaxHeight() {
- return fData.getMaxHeight();
- }
- synchronized public Style getStyle(int line, int column) {
- return fData.getStyle(line, column);
- }
- synchronized public Style[] getStyles(int line) {
- return fData.getStyles(line);
- }
- synchronized public int getWidth() {
- return fData.getWidth();
- }
- synchronized public ITerminalTextDataSnapshot makeSnapshot() {
- return fData.makeSnapshot();
- }
- synchronized public void scroll(int startLine, int size, int shift) {
- fData.scroll(startLine, size, shift);
- }
- synchronized public void setChar(int line, int column, char c, Style style) {
- fData.setChar(line, column, c, style);
- }
- synchronized public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- fData.setChars(line, column, chars, start, len, style);
- }
- synchronized public void setChars(int line, int column, char[] chars, Style style) {
- fData.setChars(line, column, chars, style);
- }
- synchronized public void setCursorColumn(int column) {
- fData.setCursorColumn(column);
- }
- synchronized public void setCursorLine(int line) {
- fData.setCursorLine(line);
- }
- synchronized public void setDimensions(int height, int width) {
- fData.setDimensions(height, width);
- }
- synchronized public void setMaxHeight(int height) {
- fData.setMaxHeight(height);
- }
- synchronized public boolean isWrappedLine(int line) {
- return fData.isWrappedLine(line);
- }
- synchronized public void setWrappedLine(int line) {
- fData.setWrappedLine(line);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * This class is thread safe.
- *
- */
-public class TerminalTextData implements ITerminalTextData {
- final ITerminalTextData fData;
- /**
- * A list of active snapshots
- */
- public TerminalTextDataSnapshot[] fSnapshots=new TerminalTextDataSnapshot[0];
- private int fCursorColumn;
- private int fCursorLine;
- /**
- * Debug helper method -- use as "New Detail Formatter.." in the
- * debugger variables view:
- * <pre>TerminalTextData.toMultiLineText(this,0,200))</pre>
- * @param term the terminal
- * @param start start line to show
- * @param len number of lines to show -- negative numbers means show all
- * @return a string representation of the content
- */
- static public String toMultiLineText(ITerminalTextDataReadOnly term, int start, int len) {
- if(len<0)
- len=term.getHeight();
- StringBuffer buff=new StringBuffer();
- int width=term.getWidth();
- int n=Math.min(len,term.getHeight()-start);
- for (int line = start; line < n; line++) {
- if(line>0)
- buff.append("\n"); //$NON-NLS-1$
- for (int column = 0; column < width; column++) {
- buff.append(term.getChar(line, column));
- }
- }
- // get rid of the empty space at the end of the lines
- //return buff.toString().replaceAll("\000+", ""); //$NON-NLS-1$//$NON-NLS-2$
- //<J2ME CDC-1.1 Foundation-1.1 variant>
- int i = buff.length() - 1;
- while (i >= 0 && buff.charAt(i) == '\000') {
- i--;
- }
- buff.setLength(i + 1);
- return buff.toString();
- //</J2ME CDC-1.1 Foundation-1.1 variant>
- }
-
- /**
- * Show the first 100 lines
- * see {@link #toMultiLineText(ITerminalTextDataReadOnly, int, int)}
- * @param term A read-only terminal model
- * @return a string representation of the terminal
- */
- static public String toMultiLineText(ITerminalTextDataReadOnly term) {
- return toMultiLineText(term, 0, 100);
- }
-
- public TerminalTextData() {
- this(new TerminalTextDataFastScroll());
-
-// this(new TerminalTextDataStore());
- }
- public TerminalTextData(ITerminalTextData data) {
- fData=data;
- }
- public int getWidth() {
- return fData.getWidth();
- }
- public int getHeight() {
- // no need for an extra variable
- return fData.getHeight();
- }
- public void setDimensions(int height, int width) {
- int h=getHeight();
- int w=getWidth();
- if(w==width && h==height)
- return;
- fData.setDimensions(height, width);
- sendDimensionsChanged(h, w, height, width);
- }
- private void sendDimensionsChanged(int oldHeight, int oldWidth, int newHeight, int newWidth) {
- // determine what has changed
- if(oldWidth==newWidth) {
- if(oldHeight<newHeight)
- sendLinesChangedToSnapshot(oldHeight, newHeight-oldHeight);
- else
- sendLinesChangedToSnapshot(newHeight,oldHeight-newHeight);
- } else {
- sendLinesChangedToSnapshot(0, oldHeight);
- }
- sendDimensionsChanged();
- }
- public LineSegment[] getLineSegments(int line, int column, int len) {
- return fData.getLineSegments(line, column, len);
- }
- public char getChar(int line, int column) {
- return fData.getChar(line, column);
- }
- public Style getStyle(int line, int column) {
- return fData.getStyle(line, column);
- }
- public void setChar(int line, int column, char c, Style style) {
- fData.setChar(line, column, c, style);
- sendLineChangedToSnapshots(line);
- }
- public void setChars(int line, int column, char[] chars, Style style) {
- fData.setChars(line, column, chars, style);
- sendLineChangedToSnapshots(line);
- }
- public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- fData.setChars(line, column, chars, start, len, style);
- sendLineChangedToSnapshots(line);
- }
- public void scroll(int startLine, int size, int shift) {
- fData.scroll(startLine, size, shift);
- sendScrolledToSnapshots(startLine, size, shift);
- }
- public String toString() {
- return fData.toString();
- }
- private void sendDimensionsChanged() {
- for (int i = 0; i < fSnapshots.length; i++) {
- fSnapshots[i].markDimensionsChanged();
- }
- }
- /**
- * @param line notifies snapshots that line line has changed
- */
- protected void sendLineChangedToSnapshots(int line) {
- for (int i = 0; i < fSnapshots.length; i++) {
- fSnapshots[i].markLineChanged(line);
- }
- }
- /**
- * Notify snapshots that multiple lines have changed
- * @param line changed line
- * @param n number of changed lines
- */
- protected void sendLinesChangedToSnapshot(int line,int n) {
- for (int i = 0; i < fSnapshots.length; i++) {
- fSnapshots[i].markLinesChanged(line, n);
- }
- }
-
- /**
- * Notify snapshot that a region was scrolled
- * @param startLine first line of scrolled region
- * @param size size of scrolled region (number of lines)
- * @param shift delta by which the region is scrolled
- */
- protected void sendScrolledToSnapshots(int startLine,int size, int shift) {
- for (int i = 0; i < fSnapshots.length; i++) {
- fSnapshots[i].scroll(startLine, size, shift);
- }
- }
- protected void sendCursorChanged() {
- for (int i = 0; i < fSnapshots.length; i++) {
- fSnapshots[i].markCursorChanged();
- }
- }
- /**
- * Removes the snapshot from the @observer@ list
- * @param snapshot A snapshot of a terminal model
- */
- protected void removeSnapshot(TerminalTextDataSnapshot snapshot) {
- // poor mans approach to modify the array
- List<TerminalTextDataSnapshot> list=new ArrayList<TerminalTextDataSnapshot>();
- list.addAll(Arrays.asList(fSnapshots));
- list.remove(snapshot);
- fSnapshots=list.toArray(new TerminalTextDataSnapshot[list.size()]);
- }
-
- public ITerminalTextDataSnapshot makeSnapshot() {
- // poor mans approach to modify the array
- TerminalTextDataSnapshot snapshot=new TerminalTextDataSnapshot(this);
- snapshot.markDimensionsChanged();
- List<TerminalTextDataSnapshot> list=new ArrayList<TerminalTextDataSnapshot>();
- list.addAll(Arrays.asList(fSnapshots));
- list.add(snapshot);
- fSnapshots=list.toArray(new TerminalTextDataSnapshot[list.size()]);
- return snapshot;
- }
- public void addLine() {
- int oldHeight=getHeight();
- fData.addLine();
- // was is an append or a scroll?
- int newHeight=getHeight();
- if(newHeight>oldHeight) {
- //the line was appended
- sendLinesChangedToSnapshot(oldHeight, 1);
- int width=getWidth();
- sendDimensionsChanged(oldHeight, width, newHeight, width);
-
- } else {
- // the line was scrolled
- sendScrolledToSnapshots(0, oldHeight, -1);
- }
-
- }
-
- public void copy(ITerminalTextData source) {
- fData.copy(source);
- fCursorLine=source.getCursorLine();
- fCursorColumn=source.getCursorColumn();
- }
-
- public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- fData.copyLine(source, sourceLine, destLine);
- }
- public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
- fData.copyRange(source, sourceStartLine, destStartLine, length);
- }
- public char[] getChars(int line) {
- return fData.getChars(line);
- }
- public Style[] getStyles(int line) {
- return fData.getStyles(line);
- }
- public int getMaxHeight() {
- return fData.getMaxHeight();
- }
- public void setMaxHeight(int height) {
- fData.setMaxHeight(height);
- }
- public void cleanLine(int line) {
- fData.cleanLine(line);
- sendLineChangedToSnapshots(line);
- }
- public int getCursorColumn() {
- return fCursorColumn;
- }
- public int getCursorLine() {
- return fCursorLine;
- }
- public void setCursorColumn(int column) {
- fCursorColumn=column;
- sendCursorChanged();
- }
- public void setCursorLine(int line) {
- fCursorLine=line;
- sendCursorChanged();
- }
-
- public boolean isWrappedLine(int line) {
- return fData.isWrappedLine(line);
- }
-
- public void setWrappedLine(int line) {
- fData.setWrappedLine(line);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * This class is optimized for scrolling the entire {@link #getHeight()}.
- * The scrolling is done by moving an offset into the data and using
- * the modulo operator.
- *
- */
-public class TerminalTextDataFastScroll implements ITerminalTextData {
-
- final ITerminalTextData fData;
- private int fHeight;
- private int fMaxHeight;
- /**
- * The offset into the array.
- */
- int fOffset;
- public TerminalTextDataFastScroll(ITerminalTextData data,int maxHeight) {
- fMaxHeight=maxHeight;
- fData=data;
- fData.setDimensions(maxHeight, fData.getWidth());
- if(maxHeight>2)
- assert shiftOffset(-2) || throwRuntimeException();
- }
- public TerminalTextDataFastScroll(int maxHeight) {
- this(new TerminalTextDataStore(),maxHeight);
- }
- public TerminalTextDataFastScroll() {
- this(new TerminalTextDataStore(),1);
- }
- /**
- * This is used in asserts to throw an {@link RuntimeException}.
- * This is useful for tests.
- * @return never -- throws an exception
- */
- private boolean throwRuntimeException() {
- throw new RuntimeException();
- }
- /**
- *
- * @param line
- * @return the actual line number in {@link #fData}
- */
- int getPositionOfLine(int line) {
- return (line+fOffset)%fMaxHeight;
- }
- /**
- * Moves offset by delta. This does <b>not</b> move the data!
- * @param delta
- */
- void moveOffset(int delta) {
- assert Math.abs(delta)<fMaxHeight || throwRuntimeException();
- fOffset=(fMaxHeight+fOffset+delta)%fMaxHeight;
-
- }
- /**
- * Test method to shift the offset for testing (if assert ==true)
- * @param shift TODO
- * @return true
- */
- private boolean shiftOffset(int shift) {
- moveOffset(shift);
- return true;
- }
- public void addLine() {
- if(getHeight()<fMaxHeight) {
- setDimensions(getHeight()+1, getWidth());
- } else {
- scroll(0,getHeight(),-1);
- }
- }
- public void cleanLine(int line) {
- fData.cleanLine(getPositionOfLine(line));
- }
-
- public void copy(ITerminalTextData source) {
- int n=source.getHeight();
- setDimensions(source.getHeight(),source.getWidth());
- for (int i = 0; i < n; i++) {
- fData.copyLine(source, i, getPositionOfLine(i));
- }
- }
-
- public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- fData.copyLine(source, sourceLine, getPositionOfLine(destLine));
- }
-
- public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
- assert (destStartLine>=0 && destStartLine+length<=fHeight) || throwRuntimeException();
- for (int i = 0; i < length; i++) {
- fData.copyLine(source, i+sourceStartLine, getPositionOfLine(i+destStartLine));
- }
- }
-
- public char getChar(int line, int column) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- return fData.getChar(getPositionOfLine(line), column);
- }
-
- public char[] getChars(int line) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- return fData.getChars(getPositionOfLine(line));
- }
-
- public int getHeight() {
- return fHeight;
- }
-
- public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- return fData.getLineSegments(getPositionOfLine(line), startCol, numberOfCols);
- }
-
- public int getMaxHeight() {
- return fMaxHeight;
- }
-
- public Style getStyle(int line, int column) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- return fData.getStyle(getPositionOfLine(line), column);
- }
-
- public Style[] getStyles(int line) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- return fData.getStyles(getPositionOfLine(line));
- }
-
- public int getWidth() {
- return fData.getWidth();
- }
-
- public ITerminalTextDataSnapshot makeSnapshot() {
- return fData.makeSnapshot();
- }
- private void cleanLines(int line, int len) {
- for (int i = line; i < line+len; i++) {
- fData.cleanLine(getPositionOfLine(i));
- }
- }
- public void scroll(int startLine, int size, int shift) {
- assert (startLine>=0 && startLine+size<=fHeight) || throwRuntimeException();
- if(shift>=fMaxHeight || -shift>=fMaxHeight) {
- cleanLines(startLine, fMaxHeight-startLine);
- return;
- }
- if(size==fHeight) {
- // This is the case this class is optimized for!
- moveOffset(-shift);
- // we only have to clean the lines that appear by the move
- if(shift<0) {
- cleanLines(Math.max(startLine, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
- } else {
- cleanLines(startLine, Math.min(shift, getHeight()-startLine));
- }
- } else {
- // we have to copy the lines.
- if(shift<0) {
- // move the region up
- // shift is negative!!
- for (int i = startLine; i < startLine+size+shift; i++) {
- fData.copyLine(fData, getPositionOfLine(i-shift), getPositionOfLine(i));
- }
- // then clean the opened lines
- cleanLines(Math.max(0, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
- } else {
- for (int i = startLine+size-1; i >=startLine && i-shift>=0; i--) {
- fData.copyLine(fData, getPositionOfLine(i-shift), getPositionOfLine(i));
- }
- cleanLines(startLine, Math.min(shift, getHeight()-startLine));
- }
- }
- }
-
- public void setChar(int line, int column, char c, Style style) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- fData.setChar(getPositionOfLine(line), column, c, style);
- }
-
- public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- fData.setChars(getPositionOfLine(line), column, chars, start, len, style);
- }
-
- public void setChars(int line, int column, char[] chars, Style style) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- fData.setChars(getPositionOfLine(line), column, chars, style);
- }
-
- public void setDimensions(int height, int width) {
- assert height>=0 || throwRuntimeException();
- assert width>=0 || throwRuntimeException();
- if(height > fMaxHeight)
- setMaxHeight(height);
- fHeight=height;
- if(width!=fData.getWidth())
- fData.setDimensions(fMaxHeight, width);
- }
-
- public void setMaxHeight(int maxHeight) {
- assert maxHeight>=fHeight || throwRuntimeException();
- // move everything to offset0
- int start=getPositionOfLine(0);
- if(start!=0) {
- // invent a more efficient algorithm....
- ITerminalTextData buffer=new TerminalTextDataStore();
- // create a buffer with the expected height
- buffer.setDimensions(maxHeight, getWidth());
- int n=Math.min(fMaxHeight-start,maxHeight);
- // copy the first part
- buffer.copyRange(fData, start, 0, n);
- // copy the second part
- if(n<maxHeight)
- buffer.copyRange(fData, 0, n, Math.min(fMaxHeight-n,maxHeight-n));
- // copy the buffer back to our data
- fData.copy(buffer);
- shiftOffset(-start);
- } else {
- fData.setDimensions(maxHeight, fData.getWidth());
- }
- fMaxHeight=maxHeight;
- }
- public int getCursorColumn() {
- throw new UnsupportedOperationException();
- }
- public int getCursorLine() {
- throw new UnsupportedOperationException();
- }
- public void setCursorColumn(int column) {
- throw new UnsupportedOperationException();
- }
- public void setCursorLine(int line) {
- throw new UnsupportedOperationException();
- }
- public boolean isWrappedLine(int line) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- return fData.isWrappedLine(getPositionOfLine(line));
- }
- public void setWrappedLine(int line) {
- assert (line>=0 && line<fHeight) || throwRuntimeException();
- fData.setWrappedLine(getPositionOfLine(line));
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * The public methods of this class have to be called from one thread!
- *
- * Threading considerations:
- * This class is <b>not threadsafe</b>!
- */
-class TerminalTextDataSnapshot implements ITerminalTextDataSnapshot {
- /**
- * The changes of the current snapshot relative to the
- * previous snapshot
- */
- volatile ISnapshotChanges fCurrentChanges;
- /**
- * Keeps track of changes that happened since the current
- * snapshot has been made.
- */
- ISnapshotChanges fFutureChanges;
- /**
- * Is used as lock and is the reference to the terminal we take snapshots from.
- */
- final TerminalTextData fTerminal;
- /**
- * A snapshot copy of of fTerminal
- */
- // snapshot does not need internal synchronisation
- final TerminalTextDataWindow fSnapshot;
- // this variable is synchronized on fTerminal!
- private SnapshotOutOfDateListener[] fListener=new SnapshotOutOfDateListener[0];
- // this variable is synchronized on fTerminal!
- private boolean fListenersNeedNotify;
- private int fInterestWindowSize;
- private int fInterestWindowStartLine;
-
- TerminalTextDataSnapshot(TerminalTextData terminal) {
- fSnapshot = new TerminalTextDataWindow();
- fTerminal = terminal;
- fCurrentChanges = new SnapshotChanges(fTerminal.getHeight());
- fCurrentChanges.setTerminalChanged();
- fFutureChanges = new SnapshotChanges(fTerminal.getHeight());
- fFutureChanges.markLinesChanged(0, fTerminal.getHeight());
- fListenersNeedNotify=true;
- fInterestWindowSize=-1;
- }
- /**
- * This is used in asserts to throw an {@link RuntimeException}.
- * This is useful for tests.
- * @return never -- throws an exception
- */
- private boolean throwRuntimeException() {
- throw new RuntimeException();
- }
-
- public void detach() {
- fTerminal.removeSnapshot(this);
- }
-
- public boolean isOutOfDate() {
- // this is called from fTerminal, therefore we lock on fTerminal
- synchronized (fTerminal) {
- return fFutureChanges.hasChanged();
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#snapshot()
- */
- public void updateSnapshot(boolean detectScrolling) {
- // make sure terminal does not change while we make the snapshot
- synchronized (fTerminal) {
- // let's make the future changes current
- fCurrentChanges=fFutureChanges;
- fFutureChanges=new SnapshotChanges(fTerminal.getHeight());
- fFutureChanges.setInterestWindow(fInterestWindowStartLine, fInterestWindowSize);
- // and update the snapshot
- if(fSnapshot.getHeight()!=fTerminal.getHeight()||fSnapshot.getWidth()!=fTerminal.getWidth()) {
- if(fInterestWindowSize==-1)
- fSnapshot.setWindow(0, fTerminal.getHeight());
- // if the dimensions have changed, we need a full copy
- fSnapshot.copy(fTerminal);
- // and we mark all lines as changed
- fCurrentChanges.setAllChanged(fTerminal.getHeight());
- } else {
- // first we do the scroll on the copy
- int start=fCurrentChanges.getScrollWindowStartLine();
- int lines=Math.min(fCurrentChanges.getScrollWindowSize(), fSnapshot.getHeight()-start);
- fSnapshot.scroll(start, lines, fCurrentChanges.getScrollWindowShift());
- // and then create the snapshot of the changed lines
- fCurrentChanges.copyChangedLines(fSnapshot, fTerminal);
- }
- fListenersNeedNotify=true;
- fSnapshot.setCursorLine(fTerminal.getCursorLine());
- fSnapshot.setCursorColumn(fTerminal.getCursorColumn());
- }
- if(!detectScrolling) {
- // let's pretend there was no scrolling and
- // convert the scrolling into line changes
- fCurrentChanges.convertScrollingIntoChanges();
- }
- }
-
- public char getChar(int line, int column) {
- return fSnapshot.getChar(line, column);
- }
-
- public int getHeight() {
- return fSnapshot.getHeight();
- }
-
- public LineSegment[] getLineSegments(int line, int column, int len) {
- return fSnapshot.getLineSegments(line, column, len);
- }
-
- public Style getStyle(int line, int column) {
- return fSnapshot.getStyle(line, column);
- }
-
- public int getWidth() {
- return fSnapshot.getWidth();
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getFirstChangedLine()
- */
- public int getFirstChangedLine() {
- return fCurrentChanges.getFirstChangedLine();
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getLastChangedLine()
- */
- public int getLastChangedLine() {
- return fCurrentChanges.getLastChangedLine();
- }
-
- public boolean hasLineChanged(int line) {
- return fCurrentChanges.hasLineChanged(line);
- }
- public boolean hasDimensionsChanged() {
- return fCurrentChanges.hasDimensionsChanged();
- }
- public boolean hasTerminalChanged() {
- return fCurrentChanges.hasTerminalChanged();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getScrollChangeY()
- */
- public int getScrollWindowStartLine() {
- return fCurrentChanges.getScrollWindowStartLine();
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getScrollChangeN()
- */
- public int getScrollWindowSize() {
- return fCurrentChanges.getScrollWindowSize();
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getScrollChangeShift()
- */
- public int getScrollWindowShift() {
- return fCurrentChanges.getScrollWindowShift();
- }
-
- /**
- * Announces a change in line line
- * @param line
- */
- void markLineChanged(int line) {
- // threading
- fFutureChanges.markLineChanged(line);
- fFutureChanges.setTerminalChanged();
- notifyListers();
- }
- /**
- * Announces a change of n lines beginning with line line
- * @param line
- * @param n
- */
- void markLinesChanged(int line,int n) {
- fFutureChanges.markLinesChanged(line,n);
- fFutureChanges.setTerminalChanged();
- notifyListers();
- }
-
- void markDimensionsChanged() {
- fFutureChanges.markDimensionsChanged();
- fFutureChanges.setTerminalChanged();
- notifyListers();
- }
- void markCursorChanged() {
- fFutureChanges.markCursorChanged();
- fFutureChanges.setTerminalChanged();
- notifyListers();
- }
-
- /**
- * @param startLine
- * @param size
- * @param shift
- */
- void scroll(int startLine, int size, int shift) {
- fFutureChanges.scroll(startLine,size,shift);
- fFutureChanges.setTerminalChanged();
- notifyListers();
- }
- /**
- * Notifies listeners about the change
- */
- private void notifyListers() {
- // this code has to be called from a block synchronized on fTerminal
- synchronized (fTerminal) {
- if(fListenersNeedNotify) {
- for (int i = 0; i < fListener.length; i++) {
- fListener[i].snapshotOutOfDate(this);
- }
- fListenersNeedNotify=false;
- }
- }
- }
- public ITerminalTextDataSnapshot makeSnapshot() {
- return fSnapshot.makeSnapshot();
- }
-
- synchronized public void addListener(SnapshotOutOfDateListener listener) {
- List<SnapshotOutOfDateListener> list=new ArrayList<SnapshotOutOfDateListener>();
- list.addAll(Arrays.asList(fListener));
- list.add(listener);
- fListener=list.toArray(new SnapshotOutOfDateListener[list.size()]);
- }
-
- synchronized public void removeListener(SnapshotOutOfDateListener listener) {
- List<SnapshotOutOfDateListener> list=new ArrayList<SnapshotOutOfDateListener>();
- list.addAll(Arrays.asList(fListener));
- list.remove(listener);
- fListener=list.toArray(new SnapshotOutOfDateListener[list.size()]);
- }
- public String toString() {
- return fSnapshot.toString();
- }
-
-
- public int getInterestWindowSize() {
- return fInterestWindowSize;
- }
-
-
- public int getInterestWindowStartLine() {
- return fInterestWindowStartLine;
- }
-
- public void setInterestWindow(int startLine, int size) {
- assert startLine>=0 || throwRuntimeException();
- assert size>=0 || throwRuntimeException();
- fInterestWindowStartLine=startLine;
- fInterestWindowSize=size;
- fSnapshot.setWindow(startLine, size);
- fFutureChanges.setInterestWindow(startLine, size);
- notifyListers();
- }
-
-
- public char[] getChars(int line) {
- return fSnapshot.getChars(line);
- }
-
-
- public Style[] getStyles(int line) {
- return fSnapshot.getStyles(line);
- }
- public int getCursorColumn() {
- return fSnapshot.getCursorColumn();
- }
- public int getCursorLine() {
- return fSnapshot.getCursorLine();
- }
- public ITerminalTextData getTerminalTextData() {
- return fTerminal;
- }
- public boolean isWrappedLine(int line) {
- return fSnapshot.isWrappedLine(line);
- }
-}
-
-
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.List;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * This class is thread safe.
- *
- */
-public class TerminalTextDataStore implements ITerminalTextData {
- private char[][] fChars;
- private Style[][] fStyle;
- private int fWidth;
- private int fHeight;
- private int fMaxHeight;
- private int fCursorColumn;
- private int fCursorLine;
- final private BitSet fWrappedLines = new BitSet();
-
- public TerminalTextDataStore() {
- fChars=new char[0][];
- fStyle=new Style[0][];
- fWidth=0;
- }
- /**
- * This is used in asserts to throw an {@link RuntimeException}.
- * This is useful for tests.
- * @return never -- throws an exception
- */
- private boolean throwRuntimeException() {
- throw new RuntimeException();
- }
-
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getWidth()
- */
- public int getWidth() {
- return fWidth;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getHeight()
- */
- public int getHeight() {
- return fHeight;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setDimensions(int, int)
- */
- public void setDimensions(int height, int width) {
- assert height>=0 || throwRuntimeException();
- assert width>=0 || throwRuntimeException();
- // just extend the region
- if(height>fChars.length) {
- int h=4*height/3;
- if(fMaxHeight>0 && h>fMaxHeight)
- h=fMaxHeight;
- fStyle=(Style[][]) resizeArray(fStyle, height);
- fChars=(char[][]) resizeArray(fChars, height);
- }
- // clean the new lines
- if(height>fHeight) {
- for (int i = fHeight; i < height; i++) {
- cleanLine(i);
- }
- }
- // set dimensions after successful resize!
- fWidth=width;
- fHeight=height;
- }
- /**
- * Reallocates an array with a new size, and copies the contents of the old
- * array to the new array.
- *
- * @param origArray the old array, to be reallocated.
- * @param newSize the new array size.
- * @return A new array with the same contents (chopped off if needed or filled with 0 or null).
- */
- private Object resizeArray(Object origArray, int newSize) {
- int oldSize = Array.getLength(origArray);
- if(oldSize==newSize)
- return origArray;
- Class<?> elementType = origArray.getClass().getComponentType();
- Object newArray = Array.newInstance(elementType, newSize);
- int preserveLength = Math.min(oldSize, newSize);
- if (preserveLength > 0)
- System.arraycopy(origArray, 0, newArray, 0, preserveLength);
- return newArray;
- }
-
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getLineSegments(int, int, int)
- */
- public LineSegment[] getLineSegments(int line, int column, int len) {
- // get the styles and chars for this line
- Style[] styles=fStyle[line];
- char[] chars=fChars[line];
- int col=column;
- int n=column+len;
-
- // expand the line if needed....
- if(styles==null)
- styles=new Style[n];
- else if(styles.length<n)
- styles=(Style[]) resizeArray(styles, n);
-
- if(chars==null)
- chars=new char[n];
- else if(chars.length<n)
- chars=(char[]) resizeArray(chars, n);
-
- // and create the line segments
- Style style=styles[column];
- List<LineSegment> segments=new ArrayList<LineSegment>();
- for (int i = column; i < n; i++) {
- if(styles[i]!=style) {
- segments.add(new LineSegment(col,new String(chars,col,i-col),style));
- style=styles[i];
- col=i;
- }
- }
- if(col < n) {
- segments.add(new LineSegment(col,new String(chars,col,n-col),style));
- }
- return segments.toArray(new LineSegment[segments.size()]);
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getChar(int, int)
- */
- public char getChar(int line, int column) {
- assert column<fWidth || throwRuntimeException();
- if(fChars[line]==null||column>=fChars[line].length)
- return 0;
- return fChars[line][column];
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getStyle(int, int)
- */
- public Style getStyle(int line, int column) {
- assert column<fWidth || throwRuntimeException();
- if(fStyle[line]==null || column>=fStyle[line].length)
- return null;
- return fStyle[line][column];
- }
-
- void ensureLineLength(int iLine, int length) {
- if(length>fWidth)
- throw new RuntimeException();
- if(fChars[iLine]==null) {
- fChars[iLine]=new char[length];
- } else if(fChars[iLine].length<length) {
- fChars[iLine]=(char[]) resizeArray(fChars[iLine],length);
- }
- if(fStyle[iLine]==null) {
- fStyle[iLine]=new Style[length];
- } else if(fStyle[iLine].length<length) {
- fStyle[iLine]=(Style[]) resizeArray(fStyle[iLine],length);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setChar(int, int, char, org.eclipse.tm.internal.terminal.text.Style)
- */
- public void setChar(int line, int column, char c, Style style) {
- ensureLineLength(line,column+1);
- fChars[line][column]=c;
- fStyle[line][column]=style;
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setChars(int, int, char[], org.eclipse.tm.internal.terminal.text.Style)
- */
- public void setChars(int line, int column, char[] chars, Style style) {
- setChars(line,column,chars,0,chars.length,style);
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setChars(int, int, char[], int, int, org.eclipse.tm.internal.terminal.text.Style)
- */
- public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- ensureLineLength(line,column+len);
- for (int i = 0; i < len; i++) {
- fChars[line][column+i]=chars[i+start];
- fStyle[line][column+i]=style;
- }
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#scroll(int, int, int)
- */
- public void scroll(int startLine, int size, int shift) {
- assert startLine+size <= getHeight() || throwRuntimeException();
- if(shift<0) {
- // move the region up
- // shift is negative!!
- for (int i = startLine; i < startLine+size+shift; i++) {
- fChars[i]=fChars[i-shift];
- fStyle[i]=fStyle[i-shift];
- fWrappedLines.set(i, fWrappedLines.get(i-shift));
- }
- // then clean the opened lines
- cleanLines(Math.max(startLine, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
-// cleanLines(Math.max(0, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
- } else {
- for (int i = startLine+size-1; i >=startLine && i-shift>=0; i--) {
- fChars[i]=fChars[i-shift];
- fStyle[i]=fStyle[i-shift];
- fWrappedLines.set(i, fWrappedLines.get(i-shift));
- }
- cleanLines(startLine, Math.min(shift, getHeight()-startLine));
- }
- }
- /**
- * Replaces the lines with new empty data
- * @param line
- * @param len
- */
- private void cleanLines(int line, int len) {
- for (int i = line; i < line+len; i++) {
- cleanLine(i);
- }
- }
-
- /*
- * @return a text representation of the object.
- * Lines are separated by '\n'. No style information is returned.
- */
- public String toString() {
- StringBuffer buff=new StringBuffer();
- for (int line = 0; line < getHeight(); line++) {
- if(line>0)
- buff.append("\n"); //$NON-NLS-1$
- for (int column = 0; column < fWidth; column++) {
- buff.append(getChar(line, column));
- }
- }
- return buff.toString();
- }
-
-
- public ITerminalTextDataSnapshot makeSnapshot() {
- throw new UnsupportedOperationException();
- }
-
- public void addLine() {
- if(fMaxHeight>0 && getHeight()<fMaxHeight) {
- setDimensions(getHeight()+1, getWidth());
- } else {
- scroll(0,getHeight(),-1);
- }
- }
-
- public void copy(ITerminalTextData source) {
- fWidth=source.getWidth();
- int n=source.getHeight();
- if(getHeight()!=n) {
- fChars=new char[n][];
- fStyle=new Style[n][];
- }
- for (int i = 0; i < n; i++) {
- copyLine(source, i, i);
- }
- fHeight=n;
- fCursorLine=source.getCursorLine();
- fCursorColumn=source.getCursorColumn();
- }
- public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine,int length) {
- for (int i = 0; i < length; i++) {
- copyLine(source, i+sourceStartLine, i+destStartLine);
- }
- }
-
- public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- fChars[destLine]=source.getChars(sourceLine);
- fStyle[destLine]=source.getStyles(sourceLine);
- fWrappedLines.set(destLine, source.isWrappedLine(sourceLine));
- }
-
- public char[] getChars(int line) {
- if(fChars[line]==null)
- return null;
- return fChars[line].clone();
- }
-
- public Style[] getStyles(int line) {
- if(fStyle[line]==null)
- return null;
- return fStyle[line].clone();
- }
-
- public void setLine(int line, char[] chars, Style[] styles) {
- fChars[line]=chars.clone();
- fStyle[line]=styles.clone();
- fWrappedLines.clear(line);
- }
-
- public void setMaxHeight(int height) {
- fMaxHeight=height;
- }
-
- public int getMaxHeight() {
- return fMaxHeight;
- }
-
- public void cleanLine(int line) {
- fChars[line]=null;
- fStyle[line]=null;
- fWrappedLines.clear(line);
- }
- public int getCursorColumn() {
- return fCursorColumn;
- }
- public int getCursorLine() {
- return fCursorLine;
- }
- public void setCursorColumn(int column) {
- fCursorColumn=column;
- }
- public void setCursorLine(int line) {
- fCursorLine=line;
- }
- public boolean isWrappedLine(int line) {
- return fWrappedLines.get(line);
- }
- public void setWrappedLine(int line) {
- fWrappedLines.set(line);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.tm.terminal.model.ITerminalTextData;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- * This class stores the data only within a window {@link #setWindow(int, int)} and
- * {@link #getWindowStartLine()} and {@link #getWindowSize()}. Everything outside
- * the is <code>char=='\000'</code> and <code>style=null</code>.
- *
- */
-public class TerminalTextDataWindow implements ITerminalTextData {
- final ITerminalTextData fData;
- int fWindowStartLine;
- int fWindowSize;
- int fHeight;
- int fMaxHeight;
- public TerminalTextDataWindow(ITerminalTextData data) {
- fData=data;
- }
- public TerminalTextDataWindow() {
- this(new TerminalTextDataStore());
- }
- /**
- * This is used in asserts to throw an {@link RuntimeException}.
- * This is useful for tests.
- * @return never -- throws an exception
- */
- private boolean throwRuntimeException() {
- throw new RuntimeException();
- }
- /**
- * @param line
- * @return true if the line is within the window
- */
- boolean isInWindow(int line) {
- return line>=fWindowStartLine && line<fWindowStartLine+fWindowSize;
- }
- public char getChar(int line, int column) {
- if(!isInWindow(line))
- return 0;
- return fData.getChar(line-fWindowStartLine, column);
- }
-
- public char[] getChars(int line) {
- if(!isInWindow(line))
- return null;
- return fData.getChars(line-fWindowStartLine);
- }
-
- public int getHeight() {
- return fHeight;
- }
-
- public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
- if(!isInWindow(line))
- return new LineSegment[]{new LineSegment(startCol,new String(new char[numberOfCols]),null)};
- return fData.getLineSegments(line-fWindowStartLine, startCol, numberOfCols);
- }
-
- public int getMaxHeight() {
- return fMaxHeight;
- }
-
- public Style getStyle(int line, int column) {
- if(!isInWindow(line))
- return null;
- return fData.getStyle(line-fWindowStartLine, column);
- }
-
- public Style[] getStyles(int line) {
- if(!isInWindow(line))
- return null;
- return fData.getStyles(line-fWindowStartLine);
- }
-
- public int getWidth() {
- return fData.getWidth();
- }
-
- public ITerminalTextDataSnapshot makeSnapshot() {
- throw new UnsupportedOperationException();
- }
- public void addLine() {
- if(fMaxHeight>0 && getHeight()<fMaxHeight) {
- setDimensions(getHeight()+1, getWidth());
- } else {
- scroll(0,getHeight(),-1);
- }
- }
- public void copy(ITerminalTextData source) {
- // we inherit the dimensions of the source
- setDimensions(source.getHeight(), source.getWidth());
- int n=Math.min(fWindowSize, source.getHeight()-fWindowStartLine);
- if(n>0)
- fData.copyRange(source, fWindowStartLine, 0, n);
- }
- public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
- int n=length;
- int dStart=destStartLine-fWindowStartLine;
- int sStart=sourceStartLine;
- // if start outside our range, cut the length to copy
- if(dStart<0) {
- n+=dStart;
- sStart-=dStart;
- dStart=0;
- }
- // do not exceed the window size
- n=Math.min(n,fWindowSize);
- if(n>0)
- fData.copyRange(source, sStart, dStart, n);
-
- }
- public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- if(isInWindow(destLine))
- fData.copyLine(source, sourceLine, destLine-fWindowStartLine);
- }
- public void scroll(int startLine, int size, int shift) {
- assert (startLine>=0 && startLine+size<=fHeight) || throwRuntimeException();
- int n=size;
- int start=startLine-fWindowStartLine;
- // if start outside our range, cut the length to copy
- if(start<0) {
- n+=start;
- start=0;
- }
- n=Math.min(n,fWindowSize-start);
- // do not exceed the window size
- if(n>0)
- fData.scroll(start, n, shift);
- }
- public void setChar(int line, int column, char c, Style style) {
- if(!isInWindow(line))
- return;
- fData.setChar(line-fWindowStartLine, column, c, style);
- }
- public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- if(!isInWindow(line))
- return;
- fData.setChars(line-fWindowStartLine, column, chars, start, len, style);
- }
- public void setChars(int line, int column, char[] chars, Style style) {
- if(!isInWindow(line))
- return;
- fData.setChars(line-fWindowStartLine, column, chars, style);
- }
- public void setDimensions(int height, int width) {
- assert height>=0 || throwRuntimeException();
- fData.setDimensions(fWindowSize, width);
- fHeight=height;
- }
- public void setMaxHeight(int height) {
- fMaxHeight=height;
- }
- public void setWindow(int startLine, int size) {
- fWindowStartLine=startLine;
- fWindowSize=size;
- fData.setDimensions(fWindowSize, getWidth());
- }
- public int getWindowStartLine() {
- return fWindowStartLine;
- }
- public int getWindowSize() {
- return fWindowSize;
- }
- public void setHeight(int height) {
- fHeight = height;
- }
- public void cleanLine(int line) {
- if(isInWindow(line))
- fData.cleanLine(line-fWindowStartLine);
- }
- public int getCursorColumn() {
- return fData.getCursorColumn();
- }
- public int getCursorLine() {
- return fData.getCursorLine();
- }
- public void setCursorColumn(int column) {
- fData.setCursorColumn(column);
- }
- public void setCursorLine(int line) {
- fData.setCursorLine(line);
- }
- public boolean isWrappedLine(int line) {
- if(isInWindow(line))
- return fData.isWrappedLine(line - fWindowStartLine);
- return false;
- }
- public void setWrappedLine(int line) {
- if(isInWindow(line))
- fData.setWrappedLine(line - fWindowStartLine);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.preferences;
-
-/**
- * Constants for Terminal Preferences.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface ITerminalConstants {
-
- public static final String PREF_HAS_MIGRATED = "TerminalPref.migrated"; //$NON-NLS-1$
-
- public static final String PREF_BUFFERLINES = "TerminalPrefBufferLines"; //$NON-NLS-1$
- public static final String PREF_INVERT_COLORS = "TerminalPrefInvertColors"; //$NON-NLS-1$
- public static final int DEFAULT_BUFFERLINES = 1000;
- public static final boolean DEFAULT_INVERT_COLORS = false;
-
- public static final String FONT_DEFINITION = "terminal.views.view.font.definition"; //$NON-NLS-1$
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
- * Martin Oberhuber (Wind River) - [436612] Restore Eclipse 3.4 compatibility
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.preferences;
-
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-/**
- * Terminal Preference Initializer.
- *
- * @noextend This class is not intended to be subclassed by clients.
- * @noinstantiate This class is not intended to be instantiated by clients.
- * @noreference This class is not intended to be referenced by clients.
- */
-public class TerminalPreferenceInitializer extends AbstractPreferenceInitializer {
-
- public TerminalPreferenceInitializer() {
- }
-
- public void initializeDefaultPreferences() {
- //DefaultScope.INSTANCE was added in Eclipse 3.7
- IEclipsePreferences defaultPrefs = DefaultScope.INSTANCE.getNode(TerminalPlugin.PLUGIN_ID);
- defaultPrefs.putBoolean(ITerminalConstants.PREF_INVERT_COLORS, ITerminalConstants.DEFAULT_INVERT_COLORS);
- defaultPrefs.putInt(ITerminalConstants.PREF_BUFFERLINES, ITerminalConstants.DEFAULT_BUFFERLINES);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.preferences;
-
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-
-/**
- * Terminal Preference Page.
- *
- * @noextend This class is not intended to be subclassed by clients.
- * @noinstantiate This class is not intended to be instantiated by clients.
- * @noreference This class is not intended to be referenced by clients.
- */
-public class TerminalPreferencePage extends FieldEditorPreferencePage implements
- IWorkbenchPreferencePage {
- protected BooleanFieldEditor fInvertColors;
-
- protected IntegerFieldEditor fEditorBufferSize;
-
- public TerminalPreferencePage() {
- super(GRID);
- }
- protected void createFieldEditors() {
- setupPage();
- }
- public void init(IWorkbench workbench) {
- // do nothing
- }
- protected void setupPage() {
- setupData();
- setupEditors();
- }
- protected void setupData() {
- TerminalPlugin plugin;
- IPreferenceStore preferenceStore;
-
- plugin = TerminalPlugin.getDefault();
- preferenceStore = plugin.getPreferenceStore();
- setPreferenceStore(preferenceStore);
- }
- protected void setupEditors() {
- fInvertColors = new BooleanFieldEditor(
- ITerminalConstants.PREF_INVERT_COLORS, TerminalMessages.INVERT_COLORS,
- getFieldEditorParent());
- fEditorBufferSize = new IntegerFieldEditor(ITerminalConstants.PREF_BUFFERLINES,
- TerminalMessages.BUFFERLINES, getFieldEditorParent());
-
- fEditorBufferSize.setValidRange(0, Integer.MAX_VALUE);
-
- addField(fInvertColors);
- addField(fEditorBufferSize);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.fieldassist.ControlDecoration;
-import org.eclipse.jface.fieldassist.FieldDecoration;
-import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * Abstract settings page providing a common implementation of the listener handling.
- */
-public abstract class AbstractSettingsPage implements ISettingsPage, IMessageProvider {
- // A message associated with the control.
- private String message = null;
-
- // The message type of the associated message.
- private int messageType = IMessageProvider.NONE;
-
- // Reference to the listener
- private final ListenerList listeners = new ListenerList();
-
- // Flag to control the control decorations
- private boolean hasDecoration = false;
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#addListener(org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage.Listener)
- */
- public void addListener(Listener listener) {
- Assert.isNotNull(listener);
- listeners.add(listener);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#removeListener(org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage.Listener)
- */
- public void removeListener(Listener listener) {
- Assert.isNotNull(listener);
- listeners.remove(listener);
- }
-
- /**
- * Fire the listeners for the given control.
- *
- * @param control The control or <code>null</code>.
- */
- public void fireListeners(Control control) {
- Object[] list = listeners.getListeners();
- for (int i = 0; i < list.length; i++) {
- Object l = list[i];
- if (!(l instanceof Listener)) continue;
- ((Listener)l).onSettingsPageChanged(control);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
- */
- public final String getMessage() {
- return message;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
- */
- public final int getMessageType() {
- return messageType;
- }
-
- /**
- * Set the message and the message type.
- *
- * @param message The message or <code>null</code>.
- * @param messageType The type of the message (NONE, INFORMATION, WARNING, ERROR).
- */
- public final void setMessage(String message, int messageType) {
- this.message = message;
- this.messageType = messageType;
- }
-
- /**
- * Sets if or if not the settings panel widgets will have control decorations
- * or not. The method has effect only if called before {@link #createControl(org.eclipse.swt.widgets.Composite)}.
- *
- * @param value <code>True</code> if the panel widgets have control decorations, <code>false</code> otherwise.
- */
- public final void setHasControlDecoration(boolean value) {
- this.hasDecoration = value;
- }
-
- /**
- * Returns if or if not the settings panel widgets will have control
- * decorations or not.
- *
- * @return <code>True</code> if the panel widgets have control decorations, <code>false</code> otherwise.
- */
- protected final boolean hasControlDecoration() {
- return hasDecoration;
- }
-
- /**
- * Creates a new instance of a {@link ControlDecoration} object associated with
- * the given control. The method is called after the control has been created.
- *
- * @param control The control. Must not be <code>null</code>.
- * @return The control decoration object instance.
- */
- protected final ControlDecoration createControlDecoration(Control control) {
- Assert.isNotNull(control);
- if (!hasDecoration) return null;
- ControlDecoration controlDecoration = new ControlDecoration(control, getControlDecorationPosition());
- controlDecoration.setShowOnlyOnFocus(false);
- control.setData("controlDecoration", controlDecoration); //$NON-NLS-1$
- return controlDecoration;
- }
-
- /**
- * Returns the control decoration position. The default is
- * {@link SWT#TOP} | {@link SWT#LEFT}.
- *
- * @return The control position.
- */
- protected int getControlDecorationPosition() {
- return SWT.TOP | SWT.LEFT;
- }
-
- /**
- * Updates the control decoration of the given control to represent the given message
- * and message type. If the message is <code>null</code> or the message type is
- * {@link IMessageProvider#NONE} no decoration will be shown.
- *
- * @param control The control. Must not be <code>null</code>.
- * @param message The message.
- * @param messageType The message type.
- */
- protected final void updateControlDecoration(Control control, String message, int messageType) {
- Assert.isNotNull(control);
-
- ControlDecoration controlDecoration = (ControlDecoration)control.getData("controlDecoration"); //$NON-NLS-1$
- if (controlDecoration != null) {
- // The description is the same as the message
- controlDecoration.setDescriptionText(message);
-
- // The icon depends on the message type
- FieldDecorationRegistry registry = FieldDecorationRegistry.getDefault();
-
- // Determine the id of the decoration to show
- String decorationId = FieldDecorationRegistry.DEC_INFORMATION;
- if (messageType == IMessageProvider.ERROR) {
- decorationId = FieldDecorationRegistry.DEC_ERROR;
- } else if (messageType == IMessageProvider.WARNING) {
- decorationId = FieldDecorationRegistry.DEC_WARNING;
- }
-
- // Get the field decoration
- FieldDecoration fieldDeco = registry.getFieldDecoration(decorationId);
- if (fieldDeco != null) {
- controlDecoration.setImage(fieldDeco.getImage());
- }
-
- if (message == null || messageType == IMessageProvider.NONE) {
- controlDecoration.hide();
- }
- else {
- controlDecoration.show();
- }
- }
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * @author Michael Scharf
- *
- * TODO: Michael Scharf: provide a long description of a wizard
- * TODO: Michael Scharf: allow multiple pages to be generated
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
- * </p>
- */
-public interface ISettingsPage {
-
- public interface Listener {
-
- /**
- * Invoked by settings page controls to signal that the settings page
- * changed and page container may update their state.
- *
- * @param control The control which triggered the event or <code>null</code>
- */
- public void onSettingsPageChanged(Control control);
- }
-
- /**
- * Create a page to be shown in a dialog or wizard to setup the connection.
- * @param parent
- */
- void createControl(Composite parent);
-
- /**
- * Called before the page is shown. Loads the state from the {@link ITerminalConnector}.
- */
- void loadSettings();
-
- /**
- * Called when the OK button is pressed.
- */
- void saveSettings();
-
- /**
- * @return true if the
- */
- boolean validateSettings();
-
- /**
- * Adds the given listener.
- * <p>
- * Has not effect if the same listener is already registered.
- *
- * @param listener The listener. Must not be <code>null</code>.
- */
- public void addListener(Listener listener);
-
- /**
- * Removes the given listener.
- * <p>
- * Has no effect if the same listener was not registered.
- *
- * @param listener The listener. Must not be <code>null</code>.
- */
- public void removeListener(Listener listener);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-/**
- * A simple interface to a store to persist the state of a connection.
- *
- * @author Michael Scharf
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
- * </p>
- */
-public interface ISettingsStore {
- /**
- * @param key alpha numeric key, may contain dots (.)
- * @return value
- */
- String get(String key);
-
- /**
- * @param key alpha numeric key, may contain dots (.)
- * @param defaultValue
- * @return the value or the default
- */
- String get(String key, String defaultValue);
-
- /**
- * Save a string value
- * @param key alpha numeric key, may contain dots (.)
- * @param value
- */
- void put(String key, String value);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
- * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
-
-/**
- * A contributed connection type to manage a single connection.
- *
- * Implementations of this class are contributed through the
- * <code>org.eclipse.tm.terminal.control.connectors</code> extension point. This
- * class gives access to the static markup of a terminal connector extension as
- * well as providing the lifecycle management for the dynamically loaded
- * {@link TerminalConnectorImpl} instance, which performs the actual
- * communications. This pattern allows for lazy initialization, bundle
- * activation and class loading of the actual {@link TerminalConnectorImpl}
- * instance.
- *
- * Clients can get terminal connector instances from the
- * {@link TerminalConnectorExtension} class, or from
- * {@link ITerminalViewControl#getTerminalConnector()} when running inside an
- * active terminal widget.
- *
- * @noimplement This interface is not intended to be implemented by clients.
- * @noextend This interface is not intended to be extended by clients.
- *
- * @author Michael Scharf
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added
- * as part of a work in progress. There is no guarantee that this API
- * will work or that it will remain the same. Please do not use this API
- * without consulting with the <a
- * href="http://www.eclipse.org/tm/">Target Management</a> team.
- * </p>
- */
-public interface ITerminalConnector extends IAdaptable {
- /**
- * @return an ID of this connector. The id from the plugin.xml.
- * @since org.eclipse.tm.terminal 2.0
- */
- String getId();
-
- /**
- * @return <code>null</code> the name (as specified in the plugin.xml)
- * @since org.eclipse.tm.terminal 2.0
- */
- String getName();
-
- /**
- * @return <code>True</code> if the connector is not visible in user
- * selections.
- * @since org.eclipse.tm.terminal 3.0.1
- */
- boolean isHidden();
-
- /**
- * @return true if the {@link TerminalConnectorImpl} has been initialized.
- * If there was an initialization error, {@link #getInitializationErrorMessage()}
- * returns the error message.
- * @since org.eclipse.tm.terminal 2.0
- */
- boolean isInitialized();
-
- /**
- * This method initializes the connector if it is not initialized!
- * If the connector was initialized successfully, <code>null</code> is
- * returned. Otherwise an error message describing the problem is returned.
- * @return <code>null</code> or a localized error message.
- * @since org.eclipse.tm.terminal 2.0
- */
- String getInitializationErrorMessage();
-
- /**
- * Connect using the current state of the settings.
- * @param control Used to inform the UI about state changes and messages from the connection.
- */
- void connect(ITerminalControl control);
-
- /**
- * Disconnect if connected. Else do nothing.
- */
- void disconnect();
-
- /**
- * @return true if a local echo is needed.
- * TODO:Michael Scharf: this should be handed within the connection....
- */
- boolean isLocalEcho();
-
- /**
- * Notify the remote site that the size of the terminal has changed.
- * @param newWidth
- * @param newHeight
- */
- void setTerminalSize(int newWidth, int newHeight);
-
- /**
- * @return the terminal to remote stream (bytes written to this stream will
- * be sent to the remote site). For the stream in the other direction (remote to
- * terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}
- * @since org.eclipse.tm.terminal 2.0
- */
- OutputStream getTerminalToRemoteStream();
-
- /**
- * Load the state of this connection. Is typically called before
- * {@link #connect(ITerminalControl)}.
- *
- * @param store a string based data store. Short keys like "foo" can be used to
- * store the state of the connection.
- */
- void load(ISettingsStore store);
-
- /**
- * When the view or dialog containing the terminal is closed,
- * the state of the connection is saved into the settings store <code>store</code>
- * @param store
- */
- void save(ISettingsStore store);
-
- /**
- * Set or reset the settings store to the default values.
- */
- void setDefaultSettings();
-
- /**
- * @return A string that represents the settings of the connection. This representation
- * may be shown in the status line of the terminal view.
- */
- String getSettingsSummary();
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
- * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
- * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Represents the terminal view as seen by a terminal connection.
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part
- * of a work in progress. There is no guarantee that this API will work or that
- * it will remain the same. Please do not use this API without consulting with
- * the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
- * </p>
- *
- * @author Michael Scharf
- * @noimplement This interface is not intended to be implemented by clients.
- * @noextend This interface is not intended to be extended by clients.
- */
-public interface ITerminalControl {
-
- /**
- * @return the current state of the connection
- */
- TerminalState getState();
-
- /**
- * @param state
- */
- void setState(TerminalState state);
-
- /**
- * Setup the terminal control within the given parent composite.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- */
- void setupTerminal(Composite parent);
-
- /**
- * A shell to show dialogs.
- * @return the shell in which the terminal is shown.
- */
- Shell getShell();
-
- /**
- * Set the encoding that the Terminal uses to decode bytes from the
- * Terminal-to-remote-Stream into Unicode Characters used in Java; or, to
- * encode Characters typed by the user into bytes sent over the wire to the
- * remote.
- *
- * By default, the local Platform Default Encoding is used. Also note that
- * the encoding must not be applied in case the terminal stream is processed
- * by some data transfer protocol which requires binary data.
- *
- * Validity of the encoding set here is not checked. Since some encodings do
- * not cover the entire range of Unicode characters, it can happen that a
- * particular Unicode String typed in by the user can not be encoded into a
- * byte Stream with the encoding specified. and UnsupportedEncodingException
- * will be thrown in this case at the time the String is about to be
- * processed.
- *
- * The concrete encoding to use can either be specified manually by a user,
- * by means of a dialog, or a connector can try to obtain it automatically
- * from the remote side e.g. by evaluating an environment variable such as
- * LANG on UNIX systems.
- *
- * @since org.eclipse.tm.terminal 2.0
- */
- void setEncoding(String encoding) throws UnsupportedEncodingException;
-
- /**
- * Return the current encoding. That's interesting when the previous
- * setEncoding() call failed and the fallback default encoding should be
- * queried, such that e.g. a combobox with encodings to choose can be
- * properly initialized.
- *
- * @return the current Encoding of the Terminal.
- * @since org.eclipse.tm.terminal 2.0
- */
- String getEncoding();
-
- /**
- * Show a text in the terminal. If puts newlines at the beginning and the
- * end.
- *
- * @param text TODO: Michael Scharf: Is this really needed?
- */
- void displayTextInTerminal(String text);
-
- /**
- * @return a stream used to write to the terminal. Any bytes written to this
- * stream appear in the terminal or are interpreted by the emulator as
- * control sequences. The stream in the opposite direction, terminal
- * to remote is in {@link ITerminalConnector#getTerminalToRemoteStream()}.
- */
- OutputStream getRemoteToTerminalOutputStream();
-
- /**
- * Set the title of the terminal view.
- * @param title
- */
- void setTerminalTitle(String title);
-
- /**
- * Show an error message during connect.
- * @param msg
- * TODO: Michael Scharf: Should be replaced by a better error notification mechanism!
- */
- void setMsg(String msg);
-
- /**
- * Sets if or if not the terminal view control should try to reconnect
- * the terminal connection if the user hits ENTER in a closed terminal.
- * <p>
- * Reconnect on ENTER if terminal is closed is enabled by default.
- *
- * @param on <code>True</code> to enable the reconnect, <code>false</code> to disable it.
- */
- void setConnectOnEnterIfClosed(boolean on);
-
- /**
- * Returns if or if not the terminal view control should try to reconnect
- * the terminal connection if the user hits ENTER in a closed terminal.
- *
- * @return <code>True</code> the reconnect is enabled, <code>false</code> if disabled.
- */
- boolean isConnectOnEnterIfClosed();
-
- /**
- * Enables VT100 line wrapping mode (default is off).
- * This corresponds to the VT100 'eat_newline_glitch' terminal capability.
- * If enabled, writing to the rightmost column does not cause
- * an immediate wrap to the next line. Instead the line wrap occurs on the
- * next output character.
- *
- * @param enable whether to enable or disable VT100 line wrapping mode
- */
- void setVT100LineWrapping(boolean enable);
-
- /**
- * @return whether VT100 line wrapping mode is enabled
- */
- boolean isVT100LineWrapping();
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2005, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Fran Litterio (Wind River) - initial API and implementation
- * Ted Williams (Wind River) - refactored into org.eclipse namespace
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-/**
- * A simple logger class. Every method in this class is static, so they can be
- * called from both class and instance methods. To use this class, write code
- * like this:
- * <p>
- *
- * <pre>
- * Logger.log("something has happened");
- * Logger.log("counter is " + counter);
- * </pre>
- *
- * @author Fran Litterio <francis.litterio@windriver.com>
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
- * </p>
- */
-public final class Logger {
- public static final String TRACE_DEBUG_LOG = "org.eclipse.tm.terminal.control/debug/log"; //$NON-NLS-1$
- public static final String TRACE_DEBUG_LOG_CHAR = "org.eclipse.tm.terminal.control/debug/log/char"; //$NON-NLS-1$
- public static final String TRACE_DEBUG_LOG_VT100BACKEND = "org.eclipse.tm.terminal.control/debug/log/VT100Backend"; //$NON-NLS-1$
-
- private static PrintStream logStream;
-
- static {
- // Any of the three known debugging options turns on the creation of the log file
- boolean createLogFile = TerminalPlugin.isOptionEnabled(TRACE_DEBUG_LOG)
- || TerminalPlugin.isOptionEnabled(TRACE_DEBUG_LOG_CHAR)
- || TerminalPlugin.isOptionEnabled(TRACE_DEBUG_LOG_VT100BACKEND);
-
- // Log only if tracing is enabled
- if (createLogFile && TerminalPlugin.getDefault() != null) {
- IPath logFile = Platform.getStateLocation(TerminalPlugin.getDefault().getBundle());
- if (logFile != null && logFile.toFile().isDirectory()) {
- logFile = logFile.append("tmterminal.log"); //$NON-NLS-1$
- try {
- logStream = new PrintStream(new FileOutputStream(logFile.toFile(), true));
- } catch (Exception ex) {
- logStream = System.err;
- logStream.println("Exception when opening log file -- logging to stderr!"); //$NON-NLS-1$
- ex.printStackTrace(logStream);
- }
- }
- }
- }
-
- /**
- * Encodes a String such that non-printable control characters are
- * converted into user-readable escape sequences for logging.
- * @param message String to encode
- * @return encoded String
- */
- public static final String encode(String message) {
- boolean encoded = false;
- StringBuffer buf = new StringBuffer(message.length()+32);
- for (int i=0; i<message.length(); i++) {
- char c=message.charAt(i);
- switch(c) {
- case '\\':
- case '\'':
- buf.append('\\'); buf.append(c); encoded=true;
- break;
- case '\r':
- buf.append('\\'); buf.append('r'); encoded=true;
- break;
- case '\n':
- buf.append('\\'); buf.append('n'); encoded=true;
- break;
- case '\t':
- buf.append('\\'); buf.append('t'); encoded=true;
- break;
- case '\f':
- buf.append('\\'); buf.append('f'); encoded=true;
- break;
- case '\b':
- buf.append('\\'); buf.append('b'); encoded=true;
- break;
- default:
- if (c <= '\u000f') {
- buf.append('\\'); buf.append('x'); buf.append('0');
- buf.append(Integer.toHexString(c));
- encoded=true;
- } else if (c>=' ' && c<'\u007f') {
- buf.append(c);
- } else if (c <= '\u00ff') {
- buf.append('\\'); buf.append('x');
- buf.append(Integer.toHexString(c));
- encoded=true;
- } else {
- buf.append('\\'); buf.append('u');
- if (c<='\u0fff') {
- buf.append('0');
- }
- buf.append(Integer.toHexString(c));
- encoded=true;
- }
- }
- }
- if (encoded) {
- return buf.toString();
- }
- return message;
- }
-
- /**
- * Checks if logging is enabled.
- * @return true if logging is enabled.
- */
- public static final boolean isLogEnabled() {
- return (logStream!=null);
- }
-
- /**
- * Logs the specified message. Do not append a newline to parameter
- * <i>message</i>. This method does that for you.
- *
- * @param message A String containing the message to log.
- */
- public static final void log(String message) {
- if (logStream != null) {
- // Read my own stack to get the class name, method name, and line
- // number of
- // where this method was called.
-
- StackTraceElement caller = new Throwable().getStackTrace()[1];
- int lineNumber = caller.getLineNumber();
- String className = caller.getClassName();
- String methodName = caller.getMethodName();
- className = className.substring(className.lastIndexOf('.') + 1);
-
- logStream.println(className + "." + methodName + ":" + lineNumber + ": " + message); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
- logStream.flush();
- }
- }
-
- /**
- * Writes a stack trace for an exception to both Standard Error and to the
- * log file.
- */
- public static final void logException(Exception ex) {
- // log in eclipse error log
- if (TerminalPlugin.getDefault() != null) {
- TerminalPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TerminalPlugin.PLUGIN_ID, IStatus.OK, ex.getMessage(), ex));
- } else {
- ex.printStackTrace();
- }
- // Additional Tracing for debug purposes:
- // Read my own stack to get the class name, method name, and line number
- // of where this method was called
- if(logStream!=null) {
- StackTraceElement caller = new Throwable().getStackTrace()[1];
- int lineNumber = caller.getLineNumber();
- String className = caller.getClassName();
- String methodName = caller.getMethodName();
- className = className.substring(className.lastIndexOf('.') + 1);
-
- PrintStream tmpStream = System.err;
-
- if (logStream != null) {
- tmpStream = logStream;
- }
-
- tmpStream.println(className
- + "." + methodName + ":" + lineNumber + ": " + //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
- "Caught exception: " + ex); //$NON-NLS-1$
- ex.printStackTrace(tmpStream);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-/**
- * A settings store implementation doing nothing.
- */
-public class NullSettingsStore implements ISettingsStore {
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String)
- */
- @Override
- public String get(String key) {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String, java.lang.String)
- */
- @Override
- public String get(String key, String defaultValue) {
- return defaultValue;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#put(java.lang.String, java.lang.String)
- */
- @Override
- public void put(String key, String value) {
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.RegistryFactory;
-import org.eclipse.tm.internal.terminal.connector.TerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
-
-/**
- * A factory to get {@link ITerminalConnector} instances.
- *
- * @author Michael Scharf
- *
- * @noextend This class is not intended to be subclassed by clients.
- * @noinstantiate This class is not intended to be instantiated by clients.
- *
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
- * part of a work in progress. There is no guarantee that this API will work or
- * that it will remain the same. Please do not use this API without consulting
- * with the <a href="http://www.eclipse.org/tm/">Target Management</a>
- * team.
- * </p>
- */
-public class TerminalConnectorExtension {
- static private ITerminalConnector makeConnector(final IConfigurationElement config) {
- String id = config.getAttribute("id"); //$NON-NLS-1$
- if(id==null || id.length()==0)
- id=config.getAttribute("class"); //$NON-NLS-1$
- String name= config.getAttribute("name"); //$NON-NLS-1$
- if(name==null || name.length()==0) {
- name=id;
- }
- String hidden = config.getAttribute("hidden"); //$NON-NLS-1$
- boolean isHidden = hidden != null ? new Boolean(hidden).booleanValue() : false;
- TerminalConnector.Factory factory=new TerminalConnector.Factory(){
- public TerminalConnectorImpl makeConnector() throws Exception {
- return (TerminalConnectorImpl)config.createExecutableExtension("class"); //$NON-NLS-1$
- }};
- return new TerminalConnector(factory,id,name, isHidden);
- }
-
- /**
- * Return a specific terminal connector for a given connector id. The
- * terminal connector is not yet instantiated to any real connection.
- *
- * @param id the id of the terminal connector in the
- * <code>org.eclipse.tm.terminal.control.connectors</code>
- * extension point
- * @return a new ITerminalConnector with id or <code>null</code> if there
- * is no extension with that id.
- * @since org.eclipse.tm.terminal 2.0
- */
- public static ITerminalConnector makeTerminalConnector(String id) {
- IConfigurationElement[] config = RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.control.connectors"); //$NON-NLS-1$
- for (int i = 0; i < config.length; i++) {
- if(id.equals(config[i].getAttribute("id"))) { //$NON-NLS-1$
- return makeConnector(config[i]);
- }
- }
- return null;
- }
- /**
- * Return a list of available terminal connectors (connection types).
- *
- * The terminal connectors returned are not yet instantiated to any real
- * connection. Each terminal connector can connect to one remote system at a
- * time.
- *
- * @return a new list of {@link ITerminalConnector} instances defined in the
- * <code>org.eclipse.tm.terminal.control.connectors</code>
- * extension point
- * @since org.eclipse.tm.terminal 2.0 return value is ITerminalConnector[]
- */
- public static ITerminalConnector[] makeTerminalConnectors() {
- IConfigurationElement[] config = RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.control.connectors"); //$NON-NLS-1$
- List<ITerminalConnector> result=new ArrayList<ITerminalConnector>();
- for (int i = 0; i < config.length; i++) {
- result.add(makeConnector(config[i]));
- }
- return result.toArray(new ITerminalConnector[result.size()]);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Michael Scharf (Wind River) - [262996] get rid of TerminalState.OPENED
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api;
-
-/**
- * Represent the sate of a terminal connection.
- * In java 1.5 this would be an enum.
- * @author Michael Scharf
- *
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
- * </p>
- */
-public class TerminalState {
- /**
- * The terminal is not connected.
- */
- public final static TerminalState CLOSED=new TerminalState("CLOSED"); //$NON-NLS-1$
-
- /**
- * The terminal is about to connect.
- */
- public final static TerminalState CONNECTING=new TerminalState("CONNECTING..."); //$NON-NLS-1$
-
- /**
- * The terminal is connected.
- */
- public final static TerminalState CONNECTED=new TerminalState("CONNECTED"); //$NON-NLS-1$
-
- private final String fState;
-
- public TerminalState(String state) {
- fState = state;
- }
-
- public String toString() {
- return fState;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2008, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.provisional.api.provider;
-
-import java.io.OutputStream;
-
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.Logger;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-
-/**
- * Abstract base class for all terminal connector implementations to be
- * registered via the <code>org.eclipse.tm.terminal.control.connectors</code>
- * extension point.
- *
- * @since org.eclipse.tm.terminal 2.0
- */
-public abstract class TerminalConnectorImpl {
-
- /**
- * The TerminalControl associated with this connector.
- * Required for advertising state changes when needed.
- */
- protected ITerminalControl fControl;
-
- /**
- * Initialize this connector. This is called once after the constructor, in
- * order to perform any required initializations such as loading required
- * native libraries. Any work that may lead to runtime exceptions should be
- * done in this method rather than in the constructor.
- *
- * @throws Exception when the connector fails to initialize (due to missing
- * required libraries, for instance).
- */
- public void initialize() throws Exception {
- }
-
- /**
- * Connect using the current state of the settings.
- *
- * This method is designed to be overridden by actual implementations, in
- * order to open the streams required for communicating with the remote
- * side. Extenders must call <code>super.connect(control)</code> as the
- * first thing they are doing.
- *
- * @param control Used to inform the UI about state changes and messages
- * from the connection.
- */
- public void connect(ITerminalControl control) {
- Logger.log("entered."); //$NON-NLS-1$
- fControl = control;
- }
-
- /**
- * Disconnect if connected. Else do nothing. Has to set the state of the
- * {@link ITerminalControl} when finished disconnecting.
- */
- public final void disconnect() {
- Logger.log("entered."); //$NON-NLS-1$
- doDisconnect();
- fControl.setState(TerminalState.CLOSED);
- }
-
- /**
- * Disconnect if connected. Else do nothing. Clients should override to
- * perform any extra work needed for disconnecting.
- */
- protected void doDisconnect() {
- // Do nothing by default
- }
-
- /**
- * @return the terminal to remote stream (bytes written to this stream will
- * be sent to the remote site). For the stream in the other direction (remote to
- * terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}
- */
- abstract public OutputStream getTerminalToRemoteStream();
-
- /**
- * @return A string that represents the settings of the connection. This representation
- * may be shown in the status line of the terminal view.
- */
- abstract public String getSettingsSummary();
-
- /**
- * Test if local echo is needed. The default implementation returns
- * <code>false</code>. Override to modify this behavior.
- *
- * @return true if a local echo is needed. TODO:Michael Scharf: this should
- * be handed within the connection....
- */
- public boolean isLocalEcho() {
- return false;
- }
-
- /**
- * Set or reset the settings store to the default values.
- */
- public void setDefaultSettings() {
- // do nothing by default
- }
-
- /**
- * Load the state or settings of this connection. Is typically called before
- * {@link #connect(ITerminalControl)}.
- *
- * Connectors that have nothing to configure do not need to implement this.
- * Those terminals that do have configuration need to override this method
- * to load settings.
- *
- * @param store a string based data store. Short keys like "foo" can be used
- * to store the state of the connection.
- */
- public void load(ISettingsStore store) {
- // do nothing by default
- }
-
- /**
- * When the view or dialog containing the terminal is closed, the state of
- * the connection is saved into the settings store <code>store</code>.
- *
- * Connectors that have no state or settings to persist do not need to
- * override this. Others should override to persist their settings.
- *
- * @param store the store for persisting settings.
- */
- public void save(ISettingsStore store) {
- // do nothing by default
- }
-
- /**
- * Notify the remote site that the size of the terminal has changed.
- *
- * Concrete connectors should override this if they have the possibility to
- * inform the remote about changed terminal size.
- *
- * @param newWidth the new width in characters.
- * @param newHeight the new height in characters.
- */
- public void setTerminalSize(int newWidth, int newHeight) {
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
- * Anton Leherbauer (Wind River) - [219589] Copy an entire line selection
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-
-abstract public class AbstractTextCanvasModel implements ITextCanvasModel {
- protected List<ITextCanvasModelListener> fListeners = new ArrayList<ITextCanvasModelListener>();
- private int fCursorLine;
- private int fCursorColumn;
- private boolean fShowCursor;
- private long fCursorTime;
- private boolean fCursorIsEnabled;
- private final ITerminalTextDataSnapshot fSnapshot;
- private int fLines;
-
- private int fSelectionStartLine=-1;
- private int fSeletionEndLine;
- private int fSelectionStartCoumn;
- private int fSelectionEndColumn;
- private ITerminalTextDataSnapshot fSelectionSnapshot;
- private String fCurrentSelection=""; //$NON-NLS-1$
- private final Point fSelectionAnchor=new Point(0,0);
- /**
- * do not update while update is running
- */
- boolean fInUpdate;
- private int fCols;
-
- public AbstractTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
- fSnapshot=snapshot;
- fLines=fSnapshot.getHeight();
- }
- public void addCellCanvasModelListener(ITextCanvasModelListener listener) {
- fListeners.add(listener);
- }
-
- public void removeCellCanvasModelListener(ITextCanvasModelListener listener) {
- fListeners.remove(listener);
- }
-
- protected void fireCellRangeChanged(int x, int y, int width, int height) {
- for (Iterator<ITextCanvasModelListener> iter = fListeners.iterator(); iter.hasNext();) {
- ITextCanvasModelListener listener = iter.next();
- listener.rangeChanged(x, y, width, height);
- }
- }
- protected void fireDimensionsChanged( int width,int height) {
- for (Iterator<ITextCanvasModelListener> iter = fListeners.iterator(); iter.hasNext();) {
- ITextCanvasModelListener listener = iter.next();
- listener.dimensionsChanged(width,height);
- }
-
- }
- protected void fireTerminalDataChanged() {
- for (Iterator<ITextCanvasModelListener> iter = fListeners.iterator(); iter.hasNext();) {
- ITextCanvasModelListener listener = iter.next();
- listener.terminalDataChanged();
- }
-
- }
-
- public ITerminalTextDataReadOnly getTerminalText() {
- return fSnapshot;
- }
- protected ITerminalTextDataSnapshot getSnapshot() {
- return fSnapshot;
- }
- protected void updateSnapshot() {
- if(!fInUpdate && fSnapshot.isOutOfDate()) {
- fInUpdate=true;
- try {
- fSnapshot.updateSnapshot(false);
- if(fSnapshot.hasTerminalChanged())
- fireTerminalDataChanged();
- // TODO why does hasDimensionsChanged not work??????
- // if(fSnapshot.hasDimensionsChanged())
- // fireDimensionsChanged();
- if(fLines!=fSnapshot.getHeight() || fCols!=fSnapshot.getWidth()) {
- fireDimensionsChanged(fSnapshot.getWidth(),fSnapshot.getHeight());
- fLines=fSnapshot.getHeight();
- fCols=fSnapshot.getWidth();
- }
- int y=fSnapshot.getFirstChangedLine();
- // has any line changed?
- if(y<Integer.MAX_VALUE) {
- int height=fSnapshot.getLastChangedLine()-y+1;
- fireCellRangeChanged(0, y, fSnapshot.getWidth(), height);
- }
-
- } finally {
- fInUpdate=false;
- }
- }
- }
- /**
- * must be called from the UI thread
- */
- public void update() {
- // do the poll....
- updateSnapshot();
- updateSelection();
- updateCursor();
- }
-
-
- public int getCursorColumn() {
- return fCursorColumn;
- }
-
- public int getCursorLine() {
- return fCursorLine;
- }
-
- public boolean isCursorOn() {
- return fShowCursor && fCursorIsEnabled;
- }
- /**
- * should be called regularly to draw an update of the
- * blinking cursor
- */
- protected void updateCursor() {
- if(!fCursorIsEnabled)
- return;
- int cursorLine=getSnapshot().getCursorLine();
- int cursorColumn=getSnapshot().getCursorColumn();
- // if cursor at the end put it to the end of the
- // last line...
- if(cursorLine>=getSnapshot().getHeight()) {
- cursorLine=getSnapshot().getHeight()-1;
- cursorColumn=getSnapshot().getWidth()-1;
- }
- // has the cursor moved?
- if(fCursorLine!=cursorLine || fCursorColumn!=cursorColumn) {
- // hide the old cursor!
- fShowCursor=false;
- // clean the previous cursor
- // bug 206363: paint also the char to the left and right of the cursor - see also below
- int col=fCursorColumn;
- int width=2;
- if(col>0) {
- col--;
- width++;
- }
- fireCellRangeChanged(col, fCursorLine, width, 1);
- // the cursor is shown when it moves!
- fShowCursor=true;
- fCursorTime=System.currentTimeMillis();
- fCursorLine=cursorLine;
- fCursorColumn=cursorColumn;
- // and draw the new cursor
- fireCellRangeChanged(fCursorColumn, fCursorLine, 1, 1);
- } else {
- long t=System.currentTimeMillis();
- // TODO make the cursor blink time customisable
- if(t-fCursorTime>500) {
- fShowCursor=!fShowCursor;
- fCursorTime=t;
- // on some windows machines, there is some left
- // over when updating the cursor .
- // https://bugs.eclipse.org/bugs/show_bug.cgi?id=206363
- int col=fCursorColumn;
- int width=2;
- if(col>0) {
- col--;
- width++;
- }
- fireCellRangeChanged(col, fCursorLine, width, 1);
- }
- }
- }
- public void setVisibleRectangle(int startLine, int startCol, int height, int width) {
- fSnapshot.setInterestWindow(Math.max(0,startLine), Math.max(1,height));
- update();
- }
- protected void showCursor(boolean show) {
- fShowCursor=true;
- }
- public void setCursorEnabled(boolean visible) {
- fCursorTime=System.currentTimeMillis();
- fShowCursor=visible;
- fCursorIsEnabled=visible;
- fireCellRangeChanged(fCursorColumn, fCursorLine, 1, 1);
- }
- public boolean isCursorEnabled() {
- return fCursorIsEnabled;
- }
-
- public Point getSelectionEnd() {
- if(fSelectionStartLine<0)
- return null;
- else
- return new Point(fSelectionEndColumn, fSeletionEndLine);
- }
-
- public Point getSelectionStart() {
- if (fSelectionStartLine < 0)
- return null;
- else
- return new Point(fSelectionStartCoumn,fSelectionStartLine);
- }
- public Point getSelectionAnchor() {
- if(fSelectionStartLine<0)
- return null;
- return new Point(fSelectionAnchor.x,fSelectionAnchor.y);
- }
- public void setSelectionAnchor(Point anchor) {
- fSelectionAnchor.x=anchor.x;
- fSelectionAnchor.y=anchor.y;
- }
-
- public void setSelection(int startLine, int endLine, int startColumn, int endColumn) {
-// System.err.println(startLine+","+endLine+","+startColumn+","+endColumn);
- doSetSelection(startLine, endLine, startColumn, endColumn);
- fCurrentSelection=extractSelectedText();
- }
- private void doSetSelection(int startLine, int endLine, int startColumn, int endColumn) {
- assert(startLine<0 || startLine<=endLine);
- if(startLine>=0) {
- if(fSelectionSnapshot==null) {
- fSelectionSnapshot=fSnapshot.getTerminalTextData().makeSnapshot();
- fSelectionSnapshot.updateSnapshot(true);
- }
- } else if(fSelectionSnapshot!=null) {
- fSelectionSnapshot.detach();
- fSelectionSnapshot=null;
- }
- int oldStart=fSelectionStartLine;
- int oldEnd=fSeletionEndLine;
- fSelectionStartLine = startLine;
- fSeletionEndLine = endLine;
- fSelectionStartCoumn = startColumn;
- fSelectionEndColumn = endColumn;
- if(fSelectionSnapshot!=null) {
- fSelectionSnapshot.setInterestWindow(0, fSelectionSnapshot.getHeight());
- }
- int changedStart;
- int changedEnd;
- if(oldStart<0) {
- changedStart=fSelectionStartLine;
- changedEnd=fSeletionEndLine;
- } else if(fSelectionStartLine<0) {
- changedStart=oldStart;
- changedEnd=oldEnd;
- } else {
- changedStart=Math.min(oldStart, fSelectionStartLine);
- changedEnd=Math.max(oldEnd, fSeletionEndLine);
- }
- if(changedStart>=0) {
- fireCellRangeChanged(0, changedStart, fSnapshot.getWidth(), changedEnd-changedStart+1);
- }
- }
-
- public boolean hasLineSelection(int line) {
- if (fSelectionStartLine < 0)
- return false;
- else
- return line >= fSelectionStartLine && line <= fSeletionEndLine;
- }
-
- public String getSelectedText() {
- return fCurrentSelection;
- }
- /**
- * Calculates the currently selected text
- * @return the currently selected text
- */
- private String extractSelectedText() {
- if(fSelectionStartLine<0 || fSelectionStartCoumn<0 || fSelectionSnapshot==null)
- return ""; //$NON-NLS-1$
- StringBuffer buffer=new StringBuffer();
- for (int line = fSelectionStartLine; line <= fSeletionEndLine; line++) {
- String text;
- char[] chars=fSelectionSnapshot.getChars(line);
- if(chars!=null) {
- text=new String(chars);
- if(line==fSeletionEndLine && fSelectionEndColumn >= 0)
- text=text.substring(0, Math.min(fSelectionEndColumn+1,text.length()));
- if(line==fSelectionStartLine)
- text=text.substring(Math.min(fSelectionStartCoumn,text.length()));
- // get rid of the empty space at the end of the lines
- // text=text.replaceAll("\000+$",""); //$NON-NLS-1$//$NON-NLS-2$
- // <J2ME-CDC-1.1 version>
- int i = text.length() - 1;
- while (i >= 0 && text.charAt(i) == '\000') {
- i--;
- }
- text = text.substring(0, i + 1);
- // </J2ME-CDC-1.1 version>
- // null means space
- text=text.replace('\000', ' ');
- } else {
- text=""; //$NON-NLS-1$
- }
- buffer.append(text);
- if(line < fSeletionEndLine && !fSelectionSnapshot.isWrappedLine(line))
- buffer.append('\n');
- }
- return buffer.toString();
- }
- private void updateSelection() {
- if (fSelectionSnapshot != null && fSelectionSnapshot.isOutOfDate()) {
- fSelectionSnapshot.updateSnapshot(true);
- // has the selection moved?
- if (fSelectionSnapshot != null && fSelectionStartLine >= 0 && fSelectionSnapshot.getScrollWindowSize() > 0) {
- int start = fSelectionStartLine + fSelectionSnapshot.getScrollWindowShift();
- int end = fSeletionEndLine + fSelectionSnapshot.getScrollWindowShift();
- if (start < 0)
- if (end >= 0)
- start = 0;
- else
- start = -1;
- doSetSelection(start, end, fSelectionStartCoumn, fSelectionEndColumn);
- }
- // check if the content of the selection has changed. If the content has
- // changed, clear the selection
- if (fCurrentSelection.length()>0 && fSelectionSnapshot != null
- && fSelectionSnapshot.getFirstChangedLine() <= fSeletionEndLine
- && fSelectionSnapshot.getLastChangedLine() >= fSelectionStartLine) {
- // has the selected text changed?
- if (!fCurrentSelection.equals(extractSelectedText())) {
- setSelection(-1, -1, -1, -1);
- }
- }
- // update the observed window...
- if (fSelectionSnapshot != null)
- // todo make -1 to work!
- fSelectionSnapshot.setInterestWindow(0, fSelectionSnapshot.getHeight());
- }
- }
-
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-
-/**
- * A Grid based Canvas. The canvas has rows and columns.
- * CellPainting is done with the abstract method drawCell
- */
-abstract public class GridCanvas extends VirtualCanvas {
- /** width of a cell */
- private int fCellWidth;
- /** height of a cell */
- private int fCellHeight;
-
- public GridCanvas(Composite parent, int style) {
- super(parent, style);
- addListener(SWT.MouseWheel, new Listener() {
- public void handleEvent(Event event) {
- if(getVerticalBar().isVisible()) {
- int delta=-fCellHeight;
- if(event.count<0)
- delta=-delta;
- scrollYDelta(delta);
- }
- event.doit=false;
- }
- });
-
- }
-
- /** template method paint.
- * iterates over all cells in the clipping rectangle and paints them.
- */
- protected void paint(GC gc) {
- Rectangle clipping=gc.getClipping();
- if(clipping.width==0 || clipping.height==0)
- return;
- Rectangle clientArea= getScreenRectInVirtualSpace();
- // Beginning coordinates
- int xOffset=clientArea.x;
- int yOffset=clientArea.y;
- int colFirst=virtualXToCell(xOffset+clipping.x);
- if(colFirst>getCols())
- colFirst=getCols();
- else if (colFirst < 0) {
- colFirst = 0;
- }
- int rowFirst=virtualYToCell(yOffset+clipping.y);
- // End coordinates
- int colLast=virtualXToCell(xOffset+clipping.x+clipping.width+fCellWidth);
- if(colLast>getCols())
- colLast=getCols();
- int rowLast=virtualYToCell(yOffset+clipping.y+clipping.height+fCellHeight);
- if(rowLast>getRows())
- rowLast=getRows();
- // System.out.println(rowFirst+"->"+rowLast+" "+System.currentTimeMillis());
- // draw the cells
- for(int row=rowFirst;row<=rowLast;row++) {
- int cx=colFirst*fCellWidth-xOffset;
- int cy=row*fCellHeight-yOffset;
- drawLine(gc,row,cx,cy,colFirst,colLast);
- }
- paintUnoccupiedSpace(gc,clipping);
- }
- /**
- * @param gc
- * @param row the line to draw
- * @param x coordinate on screen
- * @param y coordinate on screen
- * @param colFirst first column to draw
- * @param colLast last column to draw
- */
- abstract void drawLine(GC gc, int row, int x, int y, int colFirst, int colLast);
-
- abstract protected int getRows();
- abstract protected int getCols();
-
- protected void setCellWidth(int cellWidth) {
- fCellWidth = cellWidth;
- getHorizontalBar().setIncrement(fCellWidth);
- }
-
- public int getCellWidth() {
- return fCellWidth;
- }
-
- protected void setCellHeight(int cellHeight) {
- fCellHeight = cellHeight;
- getVerticalBar().setIncrement(fCellHeight);
- }
-
- public int getCellHeight() {
- return fCellHeight;
- }
-
- int virtualXToCell(int x) {
- return x/fCellWidth;
- }
-
- int virtualYToCell(int y) {
- return y/fCellHeight;
- }
-
- protected Point screenPointToCell(int x, int y) {
- x=screenXtoVirtual(x)/fCellWidth;
- y=screenYtoVirtual(y)/fCellHeight;
- return new Point(x,y);
- }
-
- Point screenPointToCell(Point point) {
- return screenPointToCell(point.x,point.y);
- }
-
- protected Point cellToOriginOnScreen(int x, int y) {
- x=virtualXtoScreen(fCellWidth*x);
- y=virtualYtoScreen(fCellHeight*y);
- return new Point(x,y);
- }
-
- Point cellToOriginOnScreen(Point cell) {
- return cellToOriginOnScreen(cell.x,cell.y);
- }
-
- Rectangle getCellScreenRect(Point cell) {
- return getCellScreenRect(cell.x,cell.y);
- }
-
- Rectangle getCellScreenRect(int x, int y) {
- x=fCellWidth*virtualXtoScreen(x);
- y=fCellHeight*virtualYtoScreen(y);
- return new Rectangle(x,y,fCellWidth,fCellHeight);
- }
-
- protected Rectangle getCellVirtualRect(Point cell) {
- return getCellVirtualRect(cell.x,cell.y);
- }
-
- Rectangle getCellVirtualRect(int x, int y) {
- x=fCellWidth*x;
- y=fCellHeight*y;
- return new Rectangle(x,y,fCellWidth,fCellHeight);
- }
- protected void viewRectangleChanged(int x, int y, int width, int height) {
- int cellX=virtualXToCell(x);
- int cellY=virtualYToCell(y);
- // End coordinates
- int xE=virtualXToCell(x+width);
-// if(xE>getCols())
-// xE=getCols();
- int yE=virtualYToCell(y+height);
-// if(yE>getRows())
-// yE=getRows();
- visibleCellRectangleChanged(cellX,cellY,xE-cellX,yE-cellY);
- }
-
- /**
- * Called when the viewed part has changed.
- * Override when you need this information....
- * Is only called if the values change (well, almost)
- * @param x origin of visible cells
- * @param y origin of visible cells
- * @param width number of cells visible in x direction
- * @param height number of cells visible in y direction
- */
- protected void visibleCellRectangleChanged(int x, int y, int width, int height) {
- }
-
- protected void setVirtualExtend(int width, int height) {
- int cellHeight = getCellHeight();
- if (cellHeight > 0) {
- height -= height % cellHeight;
- }
- super.setVirtualExtend(width, height);
- }
-
- protected void setVirtualOrigin(int x, int y) {
- int cellHeight = getCellHeight();
- if (cellHeight > 0) {
- int remainder = y % cellHeight;
- if (remainder < 0) {
- y -= (cellHeight + remainder);
- } else {
- y -= remainder;
- }
- }
- super.setVirtualOrigin(x, y);
- }
-
- protected void scrollY(ScrollBar vBar) {
- int vSelection = vBar.getSelection ();
- Rectangle bounds = getVirtualBounds();
- int y = -vSelection;
- int cellHeight = getCellHeight();
- if (cellHeight > 0) {
- int remainder = y % cellHeight;
- if (remainder < 0) {
- y -= (cellHeight + remainder);
- } else {
- y -= remainder;
- }
- }
- int deltaY = y - bounds.y;
- if(deltaY!=0) {
- scrollSmart(0,deltaY);
- setVirtualOrigin(bounds.x, bounds.y += deltaY);
- }
- if (-bounds.y + getRows() * getCellHeight() >= bounds.height) {
- // scrolled to bottom - need to redraw bottom area
- Rectangle clientRect = getClientArea();
- redraw(0, clientRect.height - fCellHeight, clientRect.width, fCellHeight, false);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
- * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-
-/**
- *
- */
-public interface ILinelRenderer {
- int getCellWidth();
- int getCellHeight();
- void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int colFirst, int colLast);
- /**
- * Update for a font change from the global JFace Registry.
- */
- void onFontChange();
- /**
- * Set a new font
- * @param fontName Jface name of the new font
- * @since 3.2
- */
- void updateFont(String fontName);
- void setInvertedColors(boolean invert);
- Color getDefaultBackgroundColor();
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
-
-public interface ITextCanvasModel {
- void addCellCanvasModelListener(ITextCanvasModelListener listener);
- void removeCellCanvasModelListener(ITextCanvasModelListener listener);
-
- ITerminalTextDataReadOnly getTerminalText();
- /**
- * This is is
- * @param startLine
- * @param startCol
- * @param height
- * @param width
- */
- void setVisibleRectangle(int startLine, int startCol, int height, int width);
-
- /**
- * @return true when the cursor is shown (used for blinking cursors)
- */
- boolean isCursorOn();
- /**
- * Show/Hide the cursor.
- * @param visible
- */
- void setCursorEnabled(boolean visible);
-
- /**
- * @return true if the cursor is shown.
- */
- boolean isCursorEnabled();
-
- /**
- * @return the line of the cursor
- */
- int getCursorLine();
- /**
- * @return the column of the cursor
- */
- int getCursorColumn();
-
- /**
- * @return the start of the selection or null if nothing is selected
- * {@link Point#x} is the column and {@link Point#y} is the line.
- */
- Point getSelectionStart();
- /**
- * @return the end of the selection or null if nothing is selected
- * {@link Point#x} is the column and {@link Point#y} is the line.
- */
- Point getSelectionEnd();
-
- Point getSelectionAnchor();
-
- void setSelectionAnchor(Point anchor);
- /**
- * Sets the selection. A negative startLine clears the selection.
- * @param startLine
- * @param endLine
- * @param startColumn
- * @param endColumn
- */
- void setSelection(int startLine, int endLine, int startColumn, int endColumn);
-
- /**
- * @param line
- * @return true if line is part of the selection
- */
- boolean hasLineSelection(int line);
-
- String getSelectedText();
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-/**
- */
-public interface ITextCanvasModelListener {
- void rangeChanged(int col, int line, int width, int height);
- void dimensionsChanged(int cols, int rows);
- /**
- * Called when any text change happened. Used to scroll to the
- * end of text in auto scroll mode. This does not get fired
- * when the window of interest has changed!
- */
- void terminalDataChanged();
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 1996, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Douglas Lea (Addison Wesley) - [cq:1552] BoundedBufferWithStateTracking adapted to BoundedByteBuffer
- * Martin Oberhuber (Wind River) - the waitForAvailable method
- * Martin Oberhuber (Wind River) - [208166] Avoid unnecessary arraycopy in BoundedByteBuffer
- * Pawel Piech (Wind River) - [333613] "Job found still running" after shutdown
- *******************************************************************************/
-
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * The main purpose of this class is to start a runnable in the
- * display thread when data is available and to pretend no data
- * is available after a given amount of time the runnable is running.
- *
- */
-public class PipedInputStream extends InputStream {
- /**
- * The output stream used by the terminal backend to write to the terminal
- */
- protected final OutputStream fOutputStream;
- /**
- * A blocking byte queue.
- */
- private final BoundedByteBuffer fQueue;
-
- /**
- * A byte bounded buffer used to synchronize the input and the output stream.
- * <p>
- * Adapted from BoundedBufferWithStateTracking
- * http://gee.cs.oswego.edu/dl/cpj/allcode.java
- * http://gee.cs.oswego.edu/dl/cpj/
- * <p>
- * BoundedBufferWithStateTracking is part of the examples for the book
- * Concurrent Programming in Java: Design Principles and Patterns by
- * Doug Lea (ISBN 0-201-31009-0). Second edition published by
- * Addison-Wesley, November 1999. The code is
- * Copyright(c) Douglas Lea 1996, 1999 and released to the public domain
- * and may be used for any purposes whatsoever.
- * <p>
- * For some reasons a solution based on
- * PipedOutputStream/PipedIntputStream
- * does work *very* slowly:
- * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4404700
- * <p>
- *
- */
- private class BoundedByteBuffer {
- protected final byte[] fBuffer; // the elements
- protected int fPutPos = 0; // circular indices
- protected int fTakePos = 0;
- protected int fUsedSlots = 0; // the count
- private boolean fClosed;
- public BoundedByteBuffer(int capacity) throws IllegalArgumentException {
- // make sure we don't deadlock on too small capacity
- if (capacity <= 0)
- throw new IllegalArgumentException();
- fBuffer = new byte[capacity];
- }
- /**
- * @return the bytes available for {@link #read()}
- * Must be called with a lock on this!
- */
- public int available() {
- return fUsedSlots;
- }
- /**
- * Writes a single byte to the buffer. Blocks if the buffer is full.
- * @param b byte to write to the buffer
- * @throws InterruptedException when the thread is interrupted while waiting
- * for the buffer to become ready
- * Must be called with a lock on this!
- */
- public void write(byte b) throws InterruptedException {
- while (fUsedSlots == fBuffer.length)
- // wait until not full
- wait();
-
- fBuffer[fPutPos] = b;
- fPutPos = (fPutPos + 1) % fBuffer.length; // cyclically increment
-
- if (fUsedSlots++ == 0) // signal if was empty
- notifyAll();
- }
- public int getFreeSlots() {
- return fBuffer.length - fUsedSlots;
- }
- public void write(byte[] b, int off, int len) throws InterruptedException {
- assert len<=getFreeSlots();
- while (fUsedSlots == fBuffer.length)
- // wait until not full
- wait();
- int n = Math.min(len, fBuffer.length - fPutPos);
- System.arraycopy(b, off, fBuffer, fPutPos, n);
- if (fPutPos + len > fBuffer.length)
- System.arraycopy(b, off + n, fBuffer, 0, len - n);
- fPutPos = (fPutPos + len) % fBuffer.length; // cyclically increment
- boolean wasEmpty = fUsedSlots == 0;
- fUsedSlots += len;
- if (wasEmpty) // signal if was empty
- notifyAll();
- }
- /**
- * Read a single byte. Blocks until a byte is available.
- * @return a byte from the buffer
- * @throws InterruptedException when the thread is interrupted while waiting
- * for the buffer to become ready
- * Must be called with a lock on this!
- */
- public int read() throws InterruptedException {
- while (fUsedSlots == 0) {
- if(fClosed)
- return -1;
- // wait until not empty
- wait();
- }
- byte b = fBuffer[fTakePos];
- fTakePos = (fTakePos + 1) % fBuffer.length;
-
- if (fUsedSlots-- == fBuffer.length) // signal if was full
- notifyAll();
- return b;
- }
- public int read(byte[] cbuf, int off, int len) throws InterruptedException {
- assert len<=available();
- while (fUsedSlots == 0) {
- if(fClosed)
- return 0;
- // wait until not empty
- wait();
- }
- int n = Math.min(len, fBuffer.length - fTakePos);
- System.arraycopy(fBuffer, fTakePos, cbuf, off, n);
- if (fTakePos + len > n)
- System.arraycopy(fBuffer, 0, cbuf, off + n, len - n);
- fTakePos = (fTakePos + len) % fBuffer.length;
- boolean wasFull = fUsedSlots == fBuffer.length;
- fUsedSlots -= len;
- if(wasFull)
- notifyAll();
-
- return len;
- }
- public void close() {
- fClosed=true;
- notifyAll();
- }
- public boolean isClosed() {
- return fClosed;
- }
- }
-
- /**
- * An output stream that calls {@link PipedInputStream#textAvailable}
- * every time data is written to the stream. The data is written to
- * {@link PipedInputStream#fQueue}.
- *
- */
- class PipedOutputStream extends OutputStream {
- public void write(byte[] b, int off, int len) throws IOException {
- try {
- synchronized (fQueue) {
- if(fQueue.isClosed())
- throw new IOException("Stream is closed!"); //$NON-NLS-1$
- int written=0;
- while(written<len) {
- if(fQueue.getFreeSlots()==0) {
- // if no slots available, write one byte and block
- // until free slots are available
- fQueue.write(b[off + written]);
- written++;
- } else {
- // if slots are available, write as much as
- // we can in one junk
- int n=Math.min(fQueue.getFreeSlots(), len-written);
- fQueue.write(b, off + written, n);
- written+=n;
- }
- }
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
-
- public void write(int b) throws IOException {
- try {
- synchronized(fQueue) {
- if(fQueue.isClosed())
- throw new IOException("Stream is closed!"); //$NON-NLS-1$
- fQueue.write((byte)b);
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- public void close() throws IOException {
- synchronized(fQueue) {
- fQueue.close();
- }
- }
- }
- /**
- * @param bufferSize the size of the buffer of the output stream
- */
- public PipedInputStream(int bufferSize) {
- fOutputStream =new PipedOutputStream();
- fQueue=new BoundedByteBuffer(bufferSize);
- }
- /**
- * @return the output stream used by the backend to write to the terminal.
- */
- public OutputStream getOutputStream() {
- return fOutputStream;
- }
- /**
- * Waits until data is available for reading.
- * @param millis see {@link Object#wait(long)}
- * @throws InterruptedException when the thread is interrupted while waiting
- * for the buffer to become ready
- */
- public void waitForAvailable(long millis) throws InterruptedException {
- synchronized(fQueue) {
- if(fQueue.available()==0 && !fQueue.fClosed)
- fQueue.wait(millis);
- }
- }
- /**
- * Must be called in the Display Thread!
- * @return number of characters available for reading.
- */
- public int available() {
- synchronized(fQueue) {
- return fQueue.available();
- }
- }
- /**
- * @return the next available byte. Check with {@link #available}
- * if characters are available.
- */
- public int read() throws IOException {
- try {
- synchronized (fQueue) {
- return fQueue.read();
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- return -1;
- }
- }
- /**
- * Closing a <tt>PipedInputStream</tt> is the same as closing the output stream.
- * The stream will allow reading data that's still in the pipe after which it will
- * throw an <tt>IOException</tt>.
- */
- public void close() throws IOException {
- synchronized(fQueue) {
- fQueue.close();
- }
- }
-
- public int read(byte[] cbuf, int off, int len) throws IOException {
- int n=0;
- if(len==0)
- return 0;
- // read as much as we can using a single synchronized statement
- try {
- synchronized (fQueue) {
- // if nothing available, block and read one byte
- if (fQueue.available() == 0) {
- // block now until at least one byte is available
- int c = fQueue.read();
- // are we at the end of stream
- if (c == -1)
- return -1;
- cbuf[off] = (byte) c;
- n++;
- }
- // is there more data available?
- if (n < len && fQueue.available() > 0) {
- // read at most available()
- int nn = Math.min(fQueue.available(), len - n);
- // are we at the end of the stream?
- if (nn == 0 && fQueue.isClosed()) {
- // if no byte was read, return -1 to indicate end of stream
- // else return the bytes we read up to now
- if (n == 0)
- n = -1;
- return n;
- }
- fQueue.read(cbuf, off + n, nn);
- n += nn;
- }
-
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- return n;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [420928] Terminal widget leaks memory
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-
-/**
- * @author Michael.Scharf@scharf-software.com
- *
- */
-public class PollingTextCanvasModel extends AbstractTextCanvasModel {
- private static final int DEFAULT_POLL_INTERVAL = 50;
- int fPollInterval = -1;
-
- /**
- *
- */
- public PollingTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
- super(snapshot);
- startPolling();
- }
- public void setUpdateInterval(int t) {
- fPollInterval = t;
- }
- public void stopPolling() {
- // timerExec only dispatches if the delay is >=0
- fPollInterval = -1;
- }
- public void startPolling() {
- if (fPollInterval < 0) {
- fPollInterval = DEFAULT_POLL_INTERVAL;
- Display.getDefault().timerExec(fPollInterval, new Runnable(){
- public void run() {
- update();
- Display.getDefault().timerExec(fPollInterval, this);
- }
- });
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Michael Scharf (Wind River) - [205260] Terminal does not take the font from the preferences
- * Michael Scharf (Wind River) - [209746] There are cases where some colors not displayed correctly
- * Michael Scharf (Wind River) - [206328] Terminal does not draw correctly with proportional fonts
- * Martin Oberhuber (Wind River) - [247700] Terminal uses ugly fonts in JEE package
- * Martin Oberhuber (Wind River) - [335358] Fix Terminal color definition
- * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
- * Martin Oberhuber (Wind River) - [475422] Fix display on MacOSX Retina
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.internal.terminal.preferences.ITerminalConstants;
-import org.eclipse.tm.terminal.model.Style;
-import org.eclipse.tm.terminal.model.StyleColor;
-
-public class StyleMap {
- private static final String BLACK = "black"; //$NON-NLS-1$
- private static final String WHITE = "white"; //$NON-NLS-1$
- private static final String WHITE_FOREGROUND = "white_foreground"; //$NON-NLS-1$
- private static final String GRAY = "gray"; //$NON-NLS-1$
- private static final String MAGENTA = "magenta"; //$NON-NLS-1$
- private static final String CYAN = "cyan"; //$NON-NLS-1$
- private static final String YELLOW = "yellow"; //$NON-NLS-1$
- private static final String BLUE = "blue"; //$NON-NLS-1$
- private static final String GREEN = "green"; //$NON-NLS-1$
- private static final String RED = "red"; //$NON-NLS-1$
-
- private static final String PREFIX = "org.eclipse.tm.internal."; //$NON-NLS-1$
- String fFontName=ITerminalConstants.FONT_DEFINITION;
- Map<StyleColor, Color> fColorMapForeground=new HashMap<StyleColor, Color>();
- Map<StyleColor, Color> fColorMapBackground=new HashMap<StyleColor, Color>();
- Map<StyleColor, Color> fColorMapIntense=new HashMap<StyleColor, Color>();
- private Point fCharSize;
- private final Style fDefaultStyle;
- private boolean fInvertColors;
- private boolean fProportional;
- private final int[] fOffsets=new int[256];
- StyleMap() {
- initColors();
- fDefaultStyle=Style.getStyle(StyleColor.getStyleColor(BLACK),StyleColor.getStyleColor(WHITE));
- updateFont();
- }
- private void initColors() {
- initForegroundColors();
- initBackgroundColors();
- initIntenseColors();
- }
- private void initForegroundColors() {
- if(fInvertColors) {
- setColor(fColorMapForeground, WHITE, 0, 0, 0);
- setColor(fColorMapForeground, WHITE_FOREGROUND, 50, 50, 50);
- setColor(fColorMapForeground, BLACK, 229, 229, 229);
- } else {
- setColor(fColorMapForeground, WHITE, 255, 255, 255);
- setColor(fColorMapForeground, WHITE_FOREGROUND, 229, 229, 229);
- setColor(fColorMapForeground, BLACK, 50, 50, 50);
- }
- setColor(fColorMapForeground, RED, 205, 0, 0);
- setColor(fColorMapForeground, GREEN, 0, 205, 0);
- setColor(fColorMapForeground, BLUE, 0, 0, 238);
- setColor(fColorMapForeground, YELLOW, 205, 205, 0);
- setColor(fColorMapForeground, CYAN, 0, 205, 205);
- setColor(fColorMapForeground, MAGENTA, 205, 0, 205);
- setColor(fColorMapForeground, GRAY, 229, 229, 229);
- }
-
- private void initBackgroundColors() {
- if(fInvertColors) {
- setColor(fColorMapBackground, WHITE, 0, 0, 0);
- setColor(fColorMapBackground, WHITE_FOREGROUND, 50, 50, 50); // only used when colors are inverse
- setColor(fColorMapBackground, BLACK, 255, 255, 255);
- } else {
- setColor(fColorMapBackground, WHITE, 255, 255, 255);
- setColor(fColorMapBackground, WHITE_FOREGROUND, 229, 229, 229);
- setColor(fColorMapBackground, BLACK, 0, 0, 0);
- }
- setColor(fColorMapBackground, RED, 205, 0, 0);
- setColor(fColorMapBackground, GREEN, 0, 205, 0);
- setColor(fColorMapBackground, BLUE, 0, 0, 238);
- setColor(fColorMapBackground, YELLOW, 205, 205, 0);
- setColor(fColorMapBackground, CYAN, 0, 205, 205);
- setColor(fColorMapBackground, MAGENTA, 205, 0, 205);
- setColor(fColorMapBackground, GRAY, 229, 229, 229);
- }
-
- private void initIntenseColors() {
- if(fInvertColors) {
- setColor(fColorMapIntense, WHITE, 127, 127, 127);
- setColor(fColorMapIntense, WHITE_FOREGROUND, 0, 0, 0); // only used when colors are inverse
- setColor(fColorMapIntense, BLACK, 255, 255, 255);
- } else {
- setColor(fColorMapIntense, WHITE, 255, 255, 255);
- setColor(fColorMapIntense, WHITE_FOREGROUND, 255, 255, 255);
- setColor(fColorMapIntense, BLACK, 0, 0, 0);
- }
- setColor(fColorMapIntense, RED, 255, 0, 0);
- setColor(fColorMapIntense, GREEN, 0, 255, 0);
- setColor(fColorMapIntense, BLUE, 92, 92, 255);
- setColor(fColorMapIntense, YELLOW, 255, 255, 0);
- setColor(fColorMapIntense, CYAN, 0, 255, 255);
- setColor(fColorMapIntense, MAGENTA, 255, 0, 255);
- setColor(fColorMapIntense, GRAY, 255, 255, 255);
- }
-
- private void setColor(Map<StyleColor, Color> colorMap, String name, int r, int g, int b) {
- String colorName=PREFIX+r+"-"+g+"-"+b; //$NON-NLS-1$//$NON-NLS-2$
- Color color=JFaceResources.getColorRegistry().get(colorName);
- if(color==null) {
- JFaceResources.getColorRegistry().put(colorName, new RGB(r,g,b));
- color=JFaceResources.getColorRegistry().get(colorName);
- }
- colorMap.put(StyleColor.getStyleColor(name), color);
- colorMap.put(StyleColor.getStyleColor(name.toUpperCase()), color);
- }
-
- public Color getForegrondColor(Style style) {
- style = defaultIfNull(style);
- Map<StyleColor, Color> map = style.isBold() ? fColorMapIntense : fColorMapForeground;
- //Map map = fColorMapForeground;
- if(style.isReverse())
- return getColor(map ,style.getBackground());
- else
- return getColor(map ,style.getForground());
- }
- public Color getBackgroundColor(Style style) {
- style = defaultIfNull(style);
- if(style.isReverse())
- return getColor(fColorMapBackground,style.getForground());
- else
- return getColor(fColorMapBackground,style.getBackground());
- }
- Color getColor(Map<StyleColor, Color> map,StyleColor color) {
- Color c=map.get(color);
- if(c==null) {
- c=Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
- }
- return c;
- }
- private Style defaultIfNull(Style style) {
- if(style==null)
- style=fDefaultStyle;
- return style;
- }
- public void setInvertedColors(boolean invert) {
- if(invert==fInvertColors)
- return;
- fInvertColors=invert;
- initColors();
- }
-// static Font getBoldFont(Font font) {
-// FontData fontDatas[] = font.getFontData();
-// FontData data = fontDatas[0];
-// return new Font(Display.getCurrent(), data.getName(), data.getHeight(), data.getStyle()|SWT.BOLD);
-// }
-
- public Font getFont(Style style) {
- style = defaultIfNull(style);
- if(style.isBold()) {
- return JFaceResources.getFontRegistry().getBold(fFontName);
- } else if(style.isUnderline()) {
- return JFaceResources.getFontRegistry().getItalic(fFontName);
-
- }
- return JFaceResources.getFontRegistry().get(fFontName);
- }
-
- public Font getFont() {
- return JFaceResources.getFontRegistry().get(fFontName);
-
- }
- public int getFontWidth() {
- return fCharSize.x;
- }
- public int getFontHeight() {
- return fCharSize.y;
- }
- public void updateFont() {
- updateFont(ITerminalConstants.FONT_DEFINITION);
- }
- /**
- * Update the StyleMap for a new font name.
- * The font name must be a valid name in the Jface font registry.
- * @param fontName Jface name of the new font to use.
- * @since 3.2
- */
- public void updateFont(String fontName) {
- Display display=Display.getCurrent();
- GC gc = new GC (display);
- if (JFaceResources.getFontRegistry().hasValueFor(fontName)) {
- fFontName = fontName;
- } else {
- //fall back to "basic jface text font"
- fFontName = "org.eclipse.jface.textfont"; //$NON-NLS-1$
- }
- gc.setFont(getFont());
- fCharSize = gc.textExtent ("W"); //$NON-NLS-1$
- fProportional=false;
-
- for (char c = ' '; c <= '~'; c++) {
- // consider only the first 128 chars for deciding if a font
- // is proportional. Collect char width as a side-effect.
- if(measureChar(gc, c, true))
- fProportional=true;
- }
- if(fProportional) {
- // Widest char minus the padding on the left and right:
- // Looks much better for small fonts
- fCharSize.x-=2;
- // Collect width of the upper characters (for offset calculation)
- for (char c = '~'+1; c < fOffsets.length; c++) {
- measureChar(gc, c,false);
- }
- // Calculate offsets based on each character's width and the bounding box
- for (int i = ' '; i < fOffsets.length; i++) {
- fOffsets[i]=(fCharSize.x-fOffsets[i])/2;
- }
- } else {
- // Non-Proportional: Reset all offsets (eg after font change)
- for (int i = 0; i < fOffsets.length; i++) {
- fOffsets[i]=0;
- }
- String t = "The quick brown Fox jumps over the Lazy Dog."; //$NON-NLS-1$
- Point ext=gc.textExtent(t);
- if(ext.x != fCharSize.x * t.length()) {
- //Bug 475422: On OSX with Retina display and due to scaling,
- //a text many be shorter than the sum of its bounding boxes.
- //Because even with fixed width font, bounding box size
- //may not be an integer but a fraction eg 6.75 pixels.
- //
- //Painting in proportional mode ensures that each character
- //is painted individually into its proper bounding box, rather
- //than using an optimization where Strings would be drawn as
- //a whole. This fixes the "fractional bounding box" problem.
- fProportional=true;
- }
- //measure font in boldface, too, and if wider then treat like proportional
- gc.setFont(getFont(fDefaultStyle.setBold(true)));
- Point charSizeBold = gc.textExtent("W"); //$NON-NLS-1$
- if (fCharSize.x != charSizeBold.x) {
- fProportional=true;
- }
- }
- gc.dispose ();
- }
- /**
- * @param gc
- * @param c
- * @param updateMax
- * @return true if the the font is proportional
- */
- private boolean measureChar(GC gc, char c, boolean updateMax) {
- boolean proportional=false;
- Point ext=gc.textExtent(String.valueOf(c));
- if(ext.x>0 && ext.y>0 && (fCharSize.x!=ext.x || fCharSize.y!=ext.y)) {
- proportional=true;
- if(updateMax) {
- fCharSize.x=Math.max(fCharSize.x, ext.x);
- fCharSize.y=Math.max(fCharSize.y, ext.y);
- }
- }
- fOffsets[c]=ext.x;
- return proportional;
- }
- public boolean isFontProportional() {
- return fProportional;
- }
- /**
- * Return the offset in pixels required to center a given character
- * @param c the character to measure
- * @return the offset in x direction to center this character
- */
- public int getCharOffset(char c) {
- if(c>=fOffsets.length)
- return 0;
- return fOffsets[c];
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Michael Scharf (Wind River) - [240098] The cursor should not blink when the terminal is disconnected
- * Uwe Stieber (Wind River) - [281328] The very first few characters might be missing in the terminal control if opened and connected programmatically
- * Martin Oberhuber (Wind River) - [294327] After logging in, the remote prompt is hidden
- * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
- * Uwe Stieber (Wind River) - [205486] Fix ScrollLock always moving to line 1
- * Anton Leherbauer (Wind River) - [219589] Copy an entire line selection
- * Anton Leherbauer (Wind River) - [196465] Resizing Terminal changes Scroller location
- * Anton Leherbauer (Wind River) - [324608] Terminal has strange scrolling behaviour
- * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
- * Anton Leherbauer (Wind River) - [434749] UnhandledEventLoopException when copying to clipboard while the selection is empty
- * Davy Landman (CWI) - [475267][api] Allow custom mouse listeners
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tm.internal.terminal.control.ITerminalMouseListener;
-
-/**
- * A cell oriented Canvas. Maintains a list of "cells".
- * It can either be vertically or horizontally scrolled.
- * The CellRenderer is responsible for painting the cell.
- */
-public class TextCanvas extends GridCanvas {
- protected final ITextCanvasModel fCellCanvasModel;
- /** Renders the cells */
- private final ILinelRenderer fCellRenderer;
- private boolean fScrollLock;
- private Point fDraggingStart;
- private Point fDraggingEnd;
- private boolean fHasSelection;
- private ResizeListener fResizeListener;
- private final List<ITerminalMouseListener> fMouseListeners;
-
- // The minSize is meant to determine the minimum size of the backing store
- // (grid) into which remote data is rendered. If the viewport is smaller
- // than that minimum size, the backing store size remains at the minSize,
- // and a scrollbar is shown instead. In reality, this has the following
- // issues or effects today:
- // (a) Bug 281328: For very early data coming in before the widget is
- // realized, the minSize determines into what initial grid that is
- // rendered. See also @link{#addResizeHandler(ResizeListener)}.
- // (b) Bug 294468: Since we have redraw and size computation problems
- // with horizontal scrollers, for now the minColumns must be small
- // enough to avoid a horizontal scroller appearing in most cases.
- // (b) Bug 294327: since we have problems with the vertical scroller
- // showing the correct location, minLines must be small enough
- // to avoid a vertical scroller or new data may be rendered off-screen.
- // As a compromise, we have been working with a 20x4 since the Terminal
- // inception, though many users would want a 80x24 minSize and backing
- // store. Pros and cons of the small minsize:
- // + consistent "remote size==viewport size", vi works as expected
- // - dumb terminals which expect 80x24 render garbled on small viewport.
- // If bug 294468 were resolved, an 80 wide minSize would be preferrable
- // since it allows switching the terminal viewport small/large as needed,
- // without destroying the backing store. For a complete solution,
- // Bug 196462 tracks the request for a user-defined fixed-widow-size-mode.
- private int fMinColumns=80;
- private int fMinLines=4;
- private boolean fCursorEnabled;
- private boolean fResizing;
-
- /**
- * Create a new CellCanvas with the given SWT style bits.
- * (SWT.H_SCROLL and SWT.V_SCROLL are automatically added).
- */
- public TextCanvas(Composite parent, ITextCanvasModel model, int style,ILinelRenderer cellRenderer) {
- super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);
- fCellRenderer=cellRenderer;
- setCellWidth(fCellRenderer.getCellWidth());
- setCellHeight(fCellRenderer.getCellHeight());
- fCellCanvasModel=model;
- fCellCanvasModel.addCellCanvasModelListener(new ITextCanvasModelListener(){
- public void rangeChanged(int col, int line, int width, int height) {
- if(isDisposed()) return;
- repaintRange(col,line,width,height);
- }
- public void dimensionsChanged(int cols, int rows) {
- if(isDisposed()) return;
- calculateGrid();
- }
- public void terminalDataChanged() {
- if(isDisposed()) return;
-
- // scroll to end (unless scroll lock is active)
- if (!fResizing) {
- calculateGrid();
- scrollToEnd();
- }
- }
- });
- // let the cursor blink if the text canvas gets the focus...
- addFocusListener(new FocusListener(){
- public void focusGained(FocusEvent e) {
- fCellCanvasModel.setCursorEnabled(fCursorEnabled);
- }
- public void focusLost(FocusEvent e) {
- fCellCanvasModel.setCursorEnabled(false);
- }});
- fMouseListeners = new ArrayList<ITerminalMouseListener>();
- addMouseListener(new MouseListener(){
- public void mouseDoubleClick(MouseEvent e) {
- if (fMouseListeners.size() > 0) {
- Point pt = screenPointToCell(e.x, e.y);
- if (pt != null) {
- for (ITerminalMouseListener l : fMouseListeners) {
- l.mouseDoubleClick(fCellCanvasModel.getTerminalText(), pt.y, pt.x, e.button);
- }
- }
- }
- }
- public void mouseDown(MouseEvent e) {
- if(e.button==1) { // left button
- fDraggingStart=screenPointToCell(e.x, e.y);
- fHasSelection=false;
- if((e.stateMask&SWT.SHIFT)!=0) {
- Point anchor=fCellCanvasModel.getSelectionAnchor();
- if(anchor!=null)
- fDraggingStart=anchor;
- } else {
- fCellCanvasModel.setSelectionAnchor(fDraggingStart);
- }
- fDraggingEnd=null;
- }
- if (fMouseListeners.size() > 0) {
- Point pt = screenPointToCell(e.x, e.y);
- if (pt != null) {
- for (ITerminalMouseListener l : fMouseListeners) {
- l.mouseDown(fCellCanvasModel.getTerminalText(), pt.y, pt.x, e.button);
- }
- }
- }
- }
- public void mouseUp(MouseEvent e) {
- if(e.button==1) { // left button
- updateHasSelection(e);
- if(fHasSelection)
- setSelection(screenPointToCell(e.x, e.y));
- else
- fCellCanvasModel.setSelection(-1,-1,-1,-1);
- fDraggingStart=null;
- }
- if (fMouseListeners.size() > 0) {
- Point pt = screenPointToCell(e.x, e.y);
- if (pt != null) {
- for (ITerminalMouseListener l : fMouseListeners) {
- l.mouseUp(fCellCanvasModel.getTerminalText(), pt.y, pt.x, e.button);
- }
- }
- }
- }
- });
- addMouseMoveListener(new MouseMoveListener() {
-
- public void mouseMove(MouseEvent e) {
- if (fDraggingStart != null) {
- updateHasSelection(e);
- setSelection(screenPointToCell(e.x, e.y));
- }
- }
- });
- serVerticalBarVisible(true);
- setHorizontalBarVisible(false);
- }
-
- /**
- * The user has to drag the mouse to at least one character to make a selection.
- * Once this is done, even a one char selection is OK.
- *
- * @param e
- */
- private void updateHasSelection(MouseEvent e) {
- if(fDraggingStart!=null) {
- Point p=screenPointToCell(e.x, e.y);
- if(fDraggingStart.x!=p.x||fDraggingStart.y!=p.y)
- fHasSelection=true;
- }
- }
-
- void setSelection(Point p) {
- if (fDraggingStart !=null && !p.equals(fDraggingEnd)) {
- fDraggingEnd = p;
- if (compare(p, fDraggingStart) < 0) {
- // bug 219589 - make sure selection start coordinates are non-negative
- int startColumn = Math.max(0, p.x);
- int startRow = Math.max(p.y, 0);
- fCellCanvasModel.setSelection(startRow, fDraggingStart.y, startColumn, fDraggingStart.x);
- } else {
- fCellCanvasModel.setSelection(fDraggingStart.y, p.y, fDraggingStart.x, p.x);
-
- }
- }
- }
-
- int compare(Point p1, Point p2) {
- if (p1.equals(p2))
- return 0;
- if (p1.y == p2.y) {
- if (p1.x > p2.x)
- return 1;
- else
- return -1;
- }
- if (p1.y > p2.y) {
- return 1;
- } else {
- return -1;
- }
- }
- public ILinelRenderer getCellRenderer() {
- return fCellRenderer;
- }
-
- public int getMinColumns() {
- return fMinColumns;
- }
-
- public void setMinColumns(int minColumns) {
- fMinColumns = minColumns;
- }
-
- public int getMinLines() {
- return fMinLines;
- }
-
- public void setMinLines(int minLines) {
- fMinLines = minLines;
- }
-
- protected void onResize(boolean init) {
- if(fResizeListener!=null) {
- Rectangle bonds=getClientArea();
- int cellHeight = getCellHeight();
- int cellWidth = getCellWidth();
- int lines=bonds.height/cellHeight;
- int columns=bonds.width/cellWidth;
- // when the view is minimised, its size is set to 0
- // we don't sent this to the terminal!
- if((lines>0 && columns>0) || init) {
- if(columns<fMinColumns) {
- if(!isHorizontalBarVisble()) {
- setHorizontalBarVisible(true);
- bonds=getClientArea();
- lines=bonds.height/cellHeight;
- }
- columns=fMinColumns;
- } else if(columns>=fMinColumns && isHorizontalBarVisble()) {
- setHorizontalBarVisible(false);
- bonds=getClientArea();
- lines=bonds.height/cellHeight;
- columns=bonds.width/cellWidth;
- }
- if(lines<fMinLines)
- lines=fMinLines;
- fResizeListener.sizeChanged(lines, columns);
- }
- }
- super.onResize();
- calculateGrid();
- }
-
- protected void onResize() {
- fResizing = true;
- try {
- onResize(false);
- } finally {
- fResizing = false;
- }
- }
-
- private void calculateGrid() {
- Rectangle virtualBounds = getVirtualBounds();
- setRedraw(false);
- try {
- setVirtualExtend(getCols()*getCellWidth(),getRows()*getCellHeight());
- getParent().layout();
- if (fResizing) {
- // scroll to end if view port was near last line
- Rectangle viewRect = getViewRectangle();
- if (virtualBounds.height - (viewRect.y + viewRect.height) < getCellHeight() * 2)
- scrollToEnd();
- }
- } finally {
- setRedraw(true);
- }
- }
- void scrollToEnd() {
- if(!fScrollLock) {
- int y=-(getRows()*getCellHeight()-getClientArea().height);
- if (y > 0) {
- y = 0;
- }
- Rectangle v=getViewRectangle();
- if(v.y!=-y) {
- setVirtualOrigin(v.x,y);
- }
- // make sure the scroll area is correct:
- scrollY(getVerticalBar());
- scrollX(getHorizontalBar());
- }
- }
- /**
- *
- * @return true if the cursor should be shown on output....
- */
- public boolean isScrollLock() {
- return fScrollLock;
- }
- /**
- * If set then if the size changes
- */
- public void setScrollLock(boolean scrollLock) {
- fScrollLock=scrollLock;
- }
- protected void repaintRange(int col, int line, int width, int height) {
- Point origin=cellToOriginOnScreen(col,line);
- Rectangle r=new Rectangle(origin.x,origin.y,width*getCellWidth(),height*getCellHeight());
- repaint(r);
- }
- protected void drawLine(GC gc, int line, int x, int y, int colFirst, int colLast) {
- fCellRenderer.drawLine(fCellCanvasModel, gc,line,x,y,colFirst, colLast);
- }
- protected Color getTerminalBackgroundColor() {
- return fCellRenderer.getDefaultBackgroundColor();
- }
- protected void visibleCellRectangleChanged(int x, int y, int width, int height) {
- fCellCanvasModel.setVisibleRectangle(y,x,height,width);
- update();
- }
- protected int getCols() {
- return fCellCanvasModel.getTerminalText().getWidth();
- }
- protected int getRows() {
- return fCellCanvasModel.getTerminalText().getHeight();
- }
- public String getSelectionText() {
- // TODO -- create a hasSelectionMethod!
- return fCellCanvasModel.getSelectedText();
- }
- public void copy() {
- String selectionText = getSelectionText();
- if (selectionText != null && selectionText.length() > 0) {
- Clipboard clipboard = new Clipboard(getDisplay());
- clipboard.setContents(new Object[] { selectionText }, new Transfer[] { TextTransfer.getInstance() });
- clipboard.dispose();
- }
- }
- public void selectAll() {
- fCellCanvasModel.setSelection(0, fCellCanvasModel.getTerminalText().getHeight(), 0, fCellCanvasModel.getTerminalText().getWidth());
- fCellCanvasModel.setSelectionAnchor(new Point(0,0));
- }
-
- /**
- * @since 4.1
- */
- public void clearSelection() {
- fCellCanvasModel.setSelection(-1,-1,-1,-1);
- }
-
- public boolean isEmpty() {
- return false;
- }
- /**
- * Gets notified when the visible size of the terminal changes.
- * This should update the model!
- *
- */
- public interface ResizeListener {
- void sizeChanged(int lines, int columns);
- }
- /**
- * @param listener this listener gets notified, when the size of
- * the widget changed. It should change the dimensions of the underlying
- * terminaldata
- */
- public void addResizeHandler(ResizeListener listener) {
- if(fResizeListener!=null)
- throw new IllegalArgumentException("There can be at most one listener at the moment!"); //$NON-NLS-1$
- fResizeListener=listener;
-
- // Bug 281328: [terminal] The very first few characters might be missing in
- // the terminal control if opened and connected programmatically
- //
- // In case the terminal had not been visible yet or is too small (less than one
- // line visible), the terminal should have a minimum size to avoid RuntimeExceptions.
- Rectangle bonds=getClientArea();
- if (bonds.height<getCellHeight() || bonds.width<getCellWidth()) {
- //Widget not realized yet, or minimized to < 1 item:
- //Just tell the listener our min size
- fResizeListener.sizeChanged(getMinLines(), getMinColumns());
- } else {
- //Widget realized: compute actual size and force telling the listener
- onResize(true);
- }
- }
-
- /**
- * Notify about a change of the global Font Preference.
- */
- public void onFontChange() {
- fCellRenderer.onFontChange();
- setCellWidth(fCellRenderer.getCellWidth());
- setCellHeight(fCellRenderer.getCellHeight());
- calculateGrid();
- }
-
- public void updateFont(String fontName) {
- fCellRenderer.updateFont(fontName);
- setCellWidth(fCellRenderer.getCellWidth());
- setCellHeight(fCellRenderer.getCellHeight());
- calculateGrid();
- }
-
- public void setInvertedColors(boolean invert) {
- fCellRenderer.setInvertedColors(invert);
- redraw();
- }
-
- /**
- * @return true if the cursor is enabled (blinking). By default the cursor is not enabled.
- */
- public boolean isCursorEnabled() {
- return fCursorEnabled;
- }
-
- /**
- * @param enabled enabling means that the cursor blinks
- */
- public void setCursorEnabled(boolean enabled) {
- if(enabled!=fCursorEnabled) {
- fCursorEnabled=enabled;
- fCellCanvasModel.setCursorEnabled(fCursorEnabled);
- }
-
- }
-
- public void addTerminalMouseListener(final ITerminalMouseListener listener) {
- fMouseListeners.add(listener);
- }
-
- public void removeTerminalMouseListener(ITerminalMouseListener listener) {
- fMouseListeners.remove(listener);
- }
-}
-
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Michael Scharf (Wind River) - [205260] Terminal does not take the font from the preferences
- * Michael Scharf (Wind River) - [206328] Terminal does not draw correctly with proportional fonts
- * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
- * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
-import org.eclipse.tm.terminal.model.LineSegment;
-import org.eclipse.tm.terminal.model.Style;
-
-/**
- *
- */
-public class TextLineRenderer implements ILinelRenderer {
- private final ITextCanvasModel fModel;
- StyleMap fStyleMap=new StyleMap();
- public TextLineRenderer(TextCanvas c, ITextCanvasModel model) {
- fModel=model;
- }
- /* (non-Javadoc)
- * @see com.imagicus.thumbs.view.ICellRenderer#getCellWidth()
- */
- public int getCellWidth() {
- return fStyleMap.getFontWidth();
- }
- /* (non-Javadoc)
- * @see com.imagicus.thumbs.view.ICellRenderer#getCellHeight()
- */
- public int getCellHeight() {
- return fStyleMap.getFontHeight();
- }
- public void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int colFirst, int colLast) {
- if(line<0 || line>=getTerminalText().getHeight() || colFirst>=getTerminalText().getWidth() || colFirst-colLast==0) {
- fillBackground(gc, x, y, getCellWidth()*(colLast-colFirst), getCellHeight());
- } else {
- colLast=Math.min(colLast, getTerminalText().getWidth());
- LineSegment[] segments=getTerminalText().getLineSegments(line, colFirst, colLast-colFirst);
- for (int i = 0; i < segments.length; i++) {
- LineSegment segment=segments[i];
- Style style=segment.getStyle();
- setupGC(gc, style);
- String text=segment.getText();
- drawText(gc, x, y, colFirst, segment.getColumn(), text);
- drawCursor(model, gc, line, x, y, colFirst);
- }
- if(fModel.hasLineSelection(line)) {
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
- gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION));
- Point start=model.getSelectionStart();
- Point end=model.getSelectionEnd();
- char[] chars=model.getTerminalText().getChars(line);
- if(chars==null)
- return;
- int offset=0;
- if(start.y==line)
- offset=start.x;
- offset=Math.max(offset, colFirst);
- int len;
- if(end.y==line)
- len=end.x-offset+1;
- else
- len=chars.length-offset+1;
- len=Math.min(len,chars.length-offset);
- if(len>0) {
- String text=new String(chars,offset,len);
- drawText(gc, x, y, colFirst, offset, text);
- }
- }
- }
- }
-
- private void fillBackground(GC gc, int x, int y, int width, int height) {
- Color bg=gc.getBackground();
- gc.setBackground(getDefaultBackgroundColor());
- gc.fillRectangle (x,y,width,height);
- gc.setBackground(bg);
-
- }
-
- public Color getDefaultBackgroundColor() {
- // null == default style
- return fStyleMap.getBackgroundColor(null);
- }
-
- private void drawCursor(ITextCanvasModel model, GC gc, int row, int x, int y, int colFirst) {
- if(!model.isCursorOn())
- return;
- int cursorLine=model.getCursorLine();
-
- if(row==cursorLine) {
- int cursorColumn=model.getCursorColumn();
- if(cursorColumn<getTerminalText().getWidth()) {
- Style style=getTerminalText().getStyle(row, cursorColumn);
- if(style==null) {
- // TODO make the cursor color customizable
- style=Style.getStyle("BLACK", "WHITE"); //$NON-NLS-1$//$NON-NLS-2$
- }
- style=style.setReverse(!style.isReverse());
- setupGC(gc,style);
- String text=String.valueOf(getTerminalText().getChar(row, cursorColumn));
- drawText(gc, x, y, colFirst, cursorColumn, text);
- }
- }
- }
- private void drawText(GC gc, int x, int y, int colFirst, int col, String text) {
- int offset=(col-colFirst)*getCellWidth();
- if(fStyleMap.isFontProportional()) {
- // draw the background
- // TODO why does this not work???????
-// gc.fillRectangle(x,y,fStyleMap.getFontWidth()*text.length(),fStyleMap.getFontHeight());
- for (int i = 0; i < text.length(); i++) {
- char c=text.charAt(i);
- int xx=x+offset+i*fStyleMap.getFontWidth();
- // TODO why do I have to draw the background character by character??????
- gc.fillRectangle(xx,y,fStyleMap.getFontWidth(),fStyleMap.getFontHeight());
- if(c!=' ' && c!='\000') {
- gc.drawString(String.valueOf(c),fStyleMap.getCharOffset(c)+xx,y,true);
- }
- }
- } else {
- text=text.replace('\000', ' ');
- gc.drawString(text,x+offset,y,false);
- }
- }
- private void setupGC(GC gc, Style style) {
- Color c=fStyleMap.getForegrondColor(style);
- if(c!=gc.getForeground()) {
- gc.setForeground(c);
- }
- c=fStyleMap.getBackgroundColor(style);
- if(c!=gc.getBackground()) {
- gc.setBackground(c);
- }
- Font f=fStyleMap.getFont(style);
- if(f!=gc.getFont()) {
- gc.setFont(f);
- }
- }
- ITerminalTextDataReadOnly getTerminalText() {
- return fModel.getTerminalText();
- }
- public void onFontChange() {
- fStyleMap.updateFont();
- }
- public void updateFont(String fontName) {
- fStyleMap.updateFont(fontName);
- }
- public void setInvertedColors(boolean invert) {
- fStyleMap.setInvertedColors(invert);
-
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
- *******************************************************************************/
-package org.eclipse.tm.internal.terminal.textcanvas;
-
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-/**
- * A <code>Canvas</code> showing a virtual object.
- * Virtual: the extent of the total canvas.
- * Screen: the visible client area in the screen.
- */
-public abstract class VirtualCanvas extends Canvas {
-
- private final Rectangle fVirtualBounds = new Rectangle(0,0,0,0);
- private Rectangle fClientArea;
- /**
- * prevent infinite loop in {@link #updateScrollbars()}
- */
- private boolean fInUpdateScrollbars;
- private static boolean fInUpdateScrollbarsLogged;
-
- public VirtualCanvas(Composite parent, int style) {
- super(parent, style|SWT.NO_BACKGROUND|SWT.NO_REDRAW_RESIZE);
- fClientArea=getClientArea();
- addListener(SWT.Paint, new Listener() {
- public void handleEvent(Event event) {
- paint(event.gc);
- }
- });
- addListener(SWT.Resize, new Listener() {
- public void handleEvent(Event event) {
- fClientArea=getClientArea();
- onResize();
- }
- });
- getVerticalBar().addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event e) {
- scrollY((ScrollBar)e.widget);
-
- }
-
- });
- getHorizontalBar().addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event e) {
- scrollX((ScrollBar)e.widget);
-
- }
- });
- }
- protected void onResize() {
- updateViewRectangle();
- }
- protected void scrollX(ScrollBar hBar) {
- int hSelection = hBar.getSelection ();
- int destX = -hSelection - fVirtualBounds.x;
- fVirtualBounds.x = -hSelection;
- scrollSmart(destX, 0);
- updateViewRectangle();
- }
- protected void scrollXDelta(int delta) {
- getHorizontalBar().setSelection(-fVirtualBounds.x+delta);
- scrollX(getHorizontalBar());
- }
-
- protected void scrollY(ScrollBar vBar) {
- int vSelection = vBar.getSelection ();
- int destY = -vSelection - fVirtualBounds.y;
- if(destY!=0) {
- fVirtualBounds.y = -vSelection;
- scrollSmart(0,destY);
- updateViewRectangle();
- }
-
- }
- protected void scrollYDelta(int delta) {
- getVerticalBar().setSelection(-fVirtualBounds.y+delta);
- scrollY(getVerticalBar());
- }
-
-
- protected void scrollSmart(int deltaX, int deltaY) {
- if (deltaX != 0 || deltaY != 0) {
- Rectangle rect = getBounds();
- scroll (deltaX, deltaY, 0, 0, rect.width, rect.height, false);
- }
- }
-
- /**
- * @param rect in virtual space
- */
- protected void revealRect(Rectangle rect) {
- Rectangle visibleRect=getScreenRectInVirtualSpace();
- // scroll the X part
- int deltaX=0;
- if(rect.x<visibleRect.x) {
- deltaX=rect.x-visibleRect.x;
- } else if(visibleRect.x+visibleRect.width<rect.x+rect.width){
- deltaX=(rect.x+rect.width)-(visibleRect.x+visibleRect.width);
- }
- if(deltaX!=0) {
- getHorizontalBar().setSelection(-fVirtualBounds.x+deltaX);
- scrollX(getHorizontalBar());
- }
-
- // scroll the Y part
- int deltaY=0;
- if(rect.y<visibleRect.y){
- deltaY=rect.y-visibleRect.y;
- } else if(visibleRect.y+visibleRect.height<rect.y+rect.height){
- deltaY=(rect.y+rect.height)-(visibleRect.y+visibleRect.height);
-
- }
- if(deltaY!=0) {
- getVerticalBar().setSelection(-fVirtualBounds.y+deltaY);
- scrollY(getVerticalBar());
- }
- }
-
- protected void repaint(Rectangle r) {
- if(isDisposed())
- return;
- if(inClipping(r,fClientArea)) {
- redraw(r.x, r.y, r.width, r.height, true);
- update();
- }
- }
-
- /**
- * Paint the virtual canvas.
- * Override to implement actual paint method.
- * @param gc graphics context to paint in
- */
- abstract protected void paint(GC gc);
- protected Color getTerminalBackgroundColor() {
-// return getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
- return getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
- }
- protected void paintUnoccupiedSpace(GC gc, Rectangle clipping) {
- int width=fVirtualBounds.width + fVirtualBounds.x;
- int height=fVirtualBounds.height + fVirtualBounds.y;
- int marginWidth = (clipping.x+clipping.width) - width;
- int marginHeight = (clipping.y+clipping.height) - height;
- if(marginWidth>0||marginHeight>0){
- Color bg=getBackground();
- gc.setBackground(getTerminalBackgroundColor());
- if (marginWidth > 0) {
- gc.fillRectangle (width, clipping.y, marginWidth, clipping.height);
- }
- if (marginHeight > 0) {
- gc.fillRectangle (clipping.x, height, clipping.width, marginHeight);
- }
- gc.setBackground(bg);
- }
- }
- /**
- * @private
- */
- protected boolean inClipping(Rectangle clipping, Rectangle r) {
- // TODO check if this is OK in all cases (the <=!)
- //
- if(r.x+r.width<=clipping.x)
- return false;
- if(clipping.x+clipping.width<=r.x)
- return false;
- if(r.y+r.height<=clipping.y)
- return false;
- if(clipping.y+clipping.height<=r.y)
- return false;
-
- return true;
- }
- /**
- * @return the screen rect in virtual space (starting with (0,0))
- * of the visible screen. (x,y>=0)
- */
- protected Rectangle getScreenRectInVirtualSpace() {
- Rectangle r= new Rectangle(fClientArea.x-fVirtualBounds.x,fClientArea.y-fVirtualBounds.y,fClientArea.width,fClientArea.height);
- return r;
- }
- /**
- * @return the rect in virtual space (starting with (0,0))
- * of the visible screen. (x,y>=0)
- */
- protected Rectangle getRectInVirtualSpace(Rectangle r) {
- return new Rectangle(r.x-fVirtualBounds.x,r.y-fVirtualBounds.y,r.width,r.height);
- }
-
- /**
- * Sets the extent of the virtual display area
- * @param width width of the display area
- * @param height height of the display area
- */
- protected void setVirtualExtend(int width, int height) {
- fVirtualBounds.width=width;
- fVirtualBounds.height=height;
- updateScrollbars();
- updateViewRectangle();
- }
- /**
- * sets the scrolling origin. Also sets the scrollbars.
- * Does NOT redraw!
- * Use negative values (move the virtual origin to the top left
- * to see something in the screen (which is located at (0,0))
- * @param x
- * @param y
- */
- protected void setVirtualOrigin(int x, int y) {
- if (fVirtualBounds.x != x || fVirtualBounds.y != y) {
- fVirtualBounds.x=x;
- fVirtualBounds.y=y;
- getHorizontalBar().setSelection(-x);
- getVerticalBar().setSelection(-y);
- updateViewRectangle();
- }
- }
- protected Rectangle getVirtualBounds() {
- return cloneRectangle(fVirtualBounds);
- }
- /**
- * @param x
- * @return the virtual coordinate in screen space
- */
- protected int virtualXtoScreen(int x) {
- return x+fVirtualBounds.x;
- }
- protected int virtualYtoScreen(int y) {
- return y+fVirtualBounds.y;
- }
- protected int screenXtoVirtual(int x) {
- return x-fVirtualBounds.x;
- }
- protected int screenYtoVirtual(int y) {
- return y-fVirtualBounds.y;
- }
- /** called when the viewed part is changing */
- private final Rectangle fViewRectangle=new Rectangle(0,0,0,0);
- protected void updateViewRectangle() {
- if(
- fViewRectangle.x==-fVirtualBounds.x
- && fViewRectangle.y==-fVirtualBounds.y
- && fViewRectangle.width==fClientArea.width
- && fViewRectangle.height==fClientArea.height
- )
- return;
- fViewRectangle.x=-fVirtualBounds.x;
- fViewRectangle.y=-fVirtualBounds.y;
- fViewRectangle.width=fClientArea.width;
- fViewRectangle.height=fClientArea.height;
- viewRectangleChanged(fViewRectangle.x,fViewRectangle.y,fViewRectangle.width,fViewRectangle.height);
- }
- protected Rectangle getViewRectangle() {
- return cloneRectangle(fViewRectangle);
- }
- private Rectangle cloneRectangle(Rectangle r) {
- return new Rectangle(r.x,r.y,r.width,r.height);
- }
- /**
- * Called when the viewed part has changed.
- * Override when you need this information....
- * Is only called if the values change!
- * @param x visible in virtual space
- * @param y visible in virtual space
- * @param width
- * @param height
- */
- protected void viewRectangleChanged(int x, int y, int width, int height) {
- }
- /**
- * @private
- */
- private void updateScrollbars() {
- // don't get into infinite loops....
- if(!fInUpdateScrollbars) {
- fInUpdateScrollbars=true;
- try {
- doUpdateScrollbar();
- } finally {
- fInUpdateScrollbars=false;
- }
- } else {
- if(!fInUpdateScrollbarsLogged) {
- fInUpdateScrollbarsLogged=true;
- TerminalPlugin.getDefault().getLog().log(new Status(IStatus.WARNING,
- TerminalPlugin.PLUGIN_ID, IStatus.OK, "Unexpected Recursion in terminal", //$NON-NLS-1$
- new RuntimeException()));
- }
- }
- }
- private void doUpdateScrollbar() {
- Rectangle clientArea= getClientArea();
- ScrollBar horizontal= getHorizontalBar();
- // even if setVisible was called on the scrollbar, isVisible
- // returns false if its parent is not visible.
- if(!isVisible() || horizontal.isVisible()) {
- horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement());
- int max= fVirtualBounds.width;
- horizontal.setMaximum(max);
- horizontal.setThumb(clientArea.width);
- }
- ScrollBar vertical= getVerticalBar();
- // even if setVisible was called on the scrollbar, isVisible
- // returns false if its parent is not visible.
- if(!isVisible() || vertical.isVisible()) {
- vertical.setPageIncrement(clientArea.height - vertical.getIncrement());
- int max= fVirtualBounds.height;
- vertical.setMaximum(max);
- vertical.setThumb(clientArea.height);
- }
- }
- protected boolean isVertialBarVisible() {
- return getVerticalBar().isVisible();
- }
- protected void serVerticalBarVisible(boolean showVScrollBar) {
- ScrollBar vertical= getVerticalBar();
- vertical.setVisible(showVScrollBar);
- vertical.setSelection(0);
- }
- protected boolean isHorizontalBarVisble() {
- return getHorizontalBar().isVisible();
- }
- protected void setHorizontalBarVisible(boolean showHScrollBar) {
- ScrollBar horizontal= getHorizontalBar();
- horizontal.setVisible(showHScrollBar);
- horizontal.setSelection(0);
- }
-}
-
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-/**
- * A writable matrix of characters and {@link Style}. This is intended to be the
- * low level representation of the text of a Terminal. Higher layers are
- * responsible to fill the text and styles into this representation.
- * <p>
- * <b>Note: </b> Implementations of this interface has to be thread safe.
- * </p>
- *
- * @noimplement This interface is not intended to be implemented by clients.
- * @noextend This interface is not intended to be extended by clients.
- */
-public interface ITerminalTextData extends ITerminalTextDataReadOnly {
-
- /**
- * Sets the dimensions of the data. If the dimensions are smaller than the current
- * dimensions, the lines will be chopped. If the dimensions are bigger, then
- * the new elements will be filled with 0 chars and null Style.
- * @param height
- * @param width
- */
- void setDimensions(int height, int width);
-
- void setMaxHeight(int height);
- int getMaxHeight();
-
- /**
- * Set a single character and the associated {@link Style}.
- * @param line line must be >=0 and < height
- * @param column column must be >=0 and < width
- * @param c the new character at this position
- * @param style the style or null
- */
- void setChar(int line, int column, char c, Style style);
-
- /**
- * Set an array of characters showing in the same {@link Style}.
- * @param line line must be >=0 and < height
- * @param column column must be >=0 and < width
- * @param chars the new characters at this position
- * @param style the style or null
- */
- void setChars(int line, int column, char[] chars, Style style);
-
- /**
- * Set a subrange of an array of characters showing in the same {@link Style}.
- * @param line line must be >=0 and < height
- * @param column column must be >=0 and < width
- * @param chars the new characters at this position
- * @param start the start index in the chars array
- * @param len the number of characters to insert. Characters beyond width are not inserted.
- * @param style the style or null
- */
- void setChars(int line, int column, char[] chars, int start, int len, Style style);
-
-
- /**
- * Cleans the entire line.
- * @param line
- */
- void cleanLine(int line);
-
- /**
- * Shifts some lines up or down. The "empty" space is filled with <code>'\000'</code> chars
- * and <code>null</code> {@link Style}
- * <p>To illustrate shift, here is some sample data:
- * <pre>
- * 0 aaaa
- * 1 bbbb
- * 2 cccc
- * 3 dddd
- * 4 eeee
- * </pre>
- *
- * Shift a region of 3 lines <b>up</b> by one line <code>shift(1,3,-1)</code>
- * <pre>
- * 0 aaaa
- * 1 cccc
- * 2 dddd
- * 3
- * 4 eeee
- * </pre>
- *
- *
- * Shift a region of 3 lines <b>down</b> by one line <code>shift(1,3,1)</code>
- * <pre>
- * 0 aaaa
- * 1
- * 2 bbbb
- * 3 cccc
- * 4 eeee
- * </pre>
- * @param startLine the start line of the shift
- * @param size the number of lines to shift
- * @param shift how much scrolling is done. New scrolled area is filled with <code>'\000</code>'.
- * Negative number means scroll down, positive scroll up (see example above).
- */
- void scroll(int startLine, int size, int shift);
-
- /**Adds a new line to the terminal. If maxHeigth is reached, the entire terminal
- * will be scrolled. Else a line will be added.
- */
- void addLine();
- /**
- * Copies the entire source into this and changes the size accordingly
- * @param source
- */
- void copy(ITerminalTextData source);
- /**
- * Copy a sourceLine from source to this at destLine.
- * @param source
- * @param sourceLine
- * @param destLine
- */
- void copyLine(ITerminalTextData source,int sourceLine, int destLine);
- /**
- * Copy <code>length</code> lines from source starting at sourceLine into this starting at
- * destLine.
- * @param source
- * @param sourceStartLine
- * @param destStartLine
- * @param length
- */
- void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine,int length);
-
- void setCursorLine(int line);
- void setCursorColumn(int column);
-
- /**
- * Makes this line a wrapped line which logically continues on next line.
- *
- * @param line
- * @since 3.3
- */
- void setWrappedLine(int line);
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
- * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-/**
- * @noimplement This interface is not intended to be implemented by clients.
- * @noextend This interface is not intended to be extended by clients.
- */
-public interface ITerminalTextDataReadOnly {
-
- /**
- * @return the width of the terminal
- */
- int getWidth();
-
- /**
- * @return the height of the terminal
- */
- int getHeight();
-
- /**
- * @param line be >=0 and < height
- * @param startCol must be >=0 and < width
- * @param numberOfCols must be > 0
- * @return a the line segments of the specified range
- */
- LineSegment[] getLineSegments(int line, int startCol, int numberOfCols);
-
- /**
- * @param line must be >=0 and < height
- * @param column must be >=0 and < width
- * @return the character at column,line
- */
- char getChar(int line, int column);
-
- /**
- * @param line must be >=0 and < height
- * @param column must be >=0 and < width
- * @return style at column,line or null
- */
- Style getStyle(int line, int column);
-
- /**
- * Creates a new instance of {@link ITerminalTextDataSnapshot} that
- * can be used to track changes. Make sure to call {@link ITerminalTextDataSnapshot#detach()}
- * if you don't need the snapshots anymore.
- * <p><b>Note: </b>A new snapshot is empty and needs a call to {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)} to
- * get its initial values. You might want to setup the snapshot to your needs by calling
- * {@link ITerminalTextDataSnapshot#setInterestWindow(int, int)}.
- * </p>
- * @return a new instance of {@link ITerminalTextDataSnapshot} that "listens" to changes of
- * <code>this</code>.
- */
- public ITerminalTextDataSnapshot makeSnapshot();
-
- char[] getChars(int line);
- Style[] getStyles(int line);
-
- /**
- * @return the line in which the cursor is at the moment
- */
- int getCursorLine();
- /**
- * @return the column at which the cursor is at the moment
- */
- int getCursorColumn();
-
- /**
- * @param line
- * @return true if this line got wrapped, ie. logically continues on next line
- * @since 3.3
- */
- boolean isWrappedLine(int line);
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-/**
- * This class maintains a snapshot of an instance of {@link ITerminalTextData}.
- * While the {@link ITerminalTextData} continues changing, the snapshot remains
- * unchanged until the next snapshot is taken by calling
- * {@link #updateSnapshot(boolean)}. This is important, because the
- * {@link ITerminalTextData} might get modified by another thread. Suppose you
- * would want to draw the content of the {@link ITerminalTextData} using the
- * following loop:
- *
- * <pre>
- * for (int line = 0; line < term.getHeight(); line++)
- * for (int column = 0; column < term.getWidth(); column++)
- * drawCharacter(column, line, term.getChar(column, line), term.getStyle(column, line));
- * </pre>
- *
- * This might fail because the background thread could change the dimensions of
- * the {@link ITerminalTextData} while you iterate the loop. One solution would
- * be to put a <code>synchronized(term){}</code> statement around the code. This
- * has two problems: 1. you would have to know about the internals of the
- * synchronisation of {@link ITerminalTextData}. 2. The other thread that
- * changes {@link ITerminalTextData} is blocked while the potentially slow
- * drawing is done.
- * <p>
- * <b>Solution:</b> Take a snapshot of the terminal and use the snapshot to draw
- * the content. There is no danger that the data structure get changed while you
- * draw. There are also methods to find out what has changed to minimize the
- * number of lines that get redrawn.
- * </p>
- *
- * <p>
- * <b>Drawing optimization</b>: To optimize redrawing of changed lines, this
- * class keeps track of lines that have changed since the previous snapshot.
- * </p>
- *
- * <pre>
- * // iterate over the potentially changed lines
- * for (int line = snap.getFirstChangedLine(); line <= snap.getLastChangedLine(); line++)
- * // redraw only if the line has changed
- * if (snap.hasLineChanged(line))
- * for (int column = 0; column < snap.getWidth(); column++)
- * drawCharacter(column, line, snap.getChar(column, line), snap.getStyle(column, line));
- * </pre>
- *
- * <p>
- * <b>Scroll optimization:</b> Often new lines are appended at the bottom of the
- * terminal and the rest of the lines are scrolled up. In this case all lines
- * would be marked as changed. To optimize for this case,
- * {@link #updateSnapshot(boolean)} can be called with <code>true</code> for the
- * <code>detectScrolling</code> parameter. The object will keep track of
- * scrolling. The UI must <b>first</b> handle the scrolling and then use the
- * {@link #hasLineChanged(int)} method to determine scrolling:
- *
- * <pre>
- * // scroll the visible region of the UI <b>before</b> drawing the changed lines.
- * doUIScrolling(snap.getScrollChangeY(), snap.getScrollChangeN(), snap.getScrollChangeShift());
- * // iterate over the potentially changed lines
- * for (int line = snap.getFirstChangedLine(); line <= snap.getFirstChangedLine(); line++)
- * // redraw only if the line has changed
- * if (snap.hasLineChanged(line))
- * for (int column = 0; column < snap.getWidth(); column++)
- * drawCharacter(column, line, snap.getChar(column, line), snap.getStyle(column, line));
- * </pre>
- *
- * </p>
- * <p>
- * <b>Threading Note</b>: This class is not thread safe! All methods have to be
- * called by the a same thread, that created the instance by calling
- * {@link ITerminalTextDataReadOnly#makeSnapshot()}.
- * </p>
- *
- * @noimplement This interface is not intended to be implemented by clients.
- * @noextend This interface is not intended to be extended by clients.
- */
-public interface ITerminalTextDataSnapshot extends ITerminalTextDataReadOnly {
- /**
- * This listener gets called when the current snapshot
- * is out of date. Calling {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}
- * will have an effect. Once the {@link #snapshotOutOfDate(ITerminalTextDataSnapshot)} method is called,
- * it will not be called until {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}
- * is called and a new snapshot needs to be updated again.
- * <p>
- * A typical terminal view would not update the snapshot immediately
- * after the {@link #snapshotOutOfDate(ITerminalTextDataSnapshot)} has been called. It would introduce a
- * delay to update the UI (and the snapshot} 10 or 20 times per second.
- *
- * <p>Make sure you don't spend too much time in this method.
- */
- interface SnapshotOutOfDateListener {
- /**
- * Gets called when the snapshot is out of date. To get the snapshot up to date,
- * call {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}.
- * @param snapshot The snapshot that is out of date
- */
- void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot);
- }
- void addListener(SnapshotOutOfDateListener listener);
- void removeListener(SnapshotOutOfDateListener listener);
-
- /**
- * Ends the listening to the {@link ITerminalTextData}. After this
- * has been called no new snapshot data is collected.
- */
- void detach();
- /**
- * @return true if the data has changed since the previous snapshot.
- */
- boolean isOutOfDate();
-
- /**
- * The window of interest is the region the snapshot should track.
- * Changes outside this region are ignored. The change takes effect after
- * an update!
- * @param startLine -1 means track the end of the data
- * @param size number of lines to track. A size of -1 means track all.
- */
- void setInterestWindow(int startLine, int size);
- int getInterestWindowStartLine();
- int getInterestWindowSize();
-
- /**
- * Create a new snapshot of the {@link ITerminalTextData}. It will efficiently
- * copy the data of the {@link ITerminalTextData} into an internal representation.
- * The snapshot also keeps track of the changes since the previous snapshot.
- * <p>With the methods {@link #getFirstChangedLine()}, {@link #getLastChangedLine()} and
- * {@link #hasLineChanged(int)}
- * you can find out what has changed in the current snapshot since the previous snapshot.
- * @param detectScrolling if <code>true</code> the snapshot tries to identify scroll
- * changes since the last snapshot. In this case the information about scrolling
- * can be retrieved using the following methods:
- * {@link #getScrollWindowStartLine()}, {@link #getScrollWindowSize()} and {@link #getScrollWindowShift()}
- * <br><b>Note:</b> The method {@link #hasLineChanged(int)} returns changes <b>after</b> the
- * scrolling has been applied.
- */
- void updateSnapshot(boolean detectScrolling);
-
- /**
- * @return The first line changed in this snapshot compared
- * to the previous snapshot.
- *
- * <p><b>Note:</b> If no line has changed, this
- * returns {@link Integer#MAX_VALUE}
- *
- * <p><b>Note:</b> if {@link #updateSnapshot(boolean)} has been called with <code>true</code>,
- * then this does not include lines that only have been scrolled. This is the
- * first line that has changed <b>after</b> the scroll has been applied.
- */
- int getFirstChangedLine();
-
- /**
- * @return The last line changed in this snapshot compared
- * to the previous snapshot. If the height has changed since the
- * last update of the snapshot, then the returned value is within
- * the new dimensions.
- *
- * <p><b>Note:</b> If no line has changed, this returns <code>-1</code>
- *
- * <p><b>Note:</b> if {@link #updateSnapshot(boolean)} has been called with <code>true</code>,
- * then this does not include lines that only have been scrolled. This is the
- * last line that has changed <b>after</b> the scroll has been applied.
- *
- * <p>A typical for loop using this method would look like this (note the <code><=</code> in the for loop):
- * <pre>
- * for(int line=snap.{@link #getFirstChangedLine()}; line <b><=</b> snap.getLastChangedLine(); line++)
- * if(snap.{@link #hasLineChanged(int) hasLineChanged(line)})
- * doSomething(line);
- * </pre>
- */
- int getLastChangedLine();
-
- /**
- * @param line
- * @return true if the line has changed since the previous snapshot
- */
- boolean hasLineChanged(int line);
-
- boolean hasDimensionsChanged();
-
- /**
- * @return true if the terminal has changed (and not just the
- * window of interest)
- */
- boolean hasTerminalChanged();
- /**
- * If {@link #updateSnapshot(boolean)} was called with <code>true</code>, then this method
- * returns the top of the scroll region.
- * @return The first line scrolled in this snapshot compared
- * to the previous snapshot. See also {@link ITerminalTextData#scroll(int, int, int)}.
- */
- int getScrollWindowStartLine();
-
- /**
- * If {@link #updateSnapshot(boolean)} was called with <code>true</code>, then this method
- * returns the size of the scroll region.
- * @return The number of lines scrolled in this snapshot compared
- * to the previous snapshot. See also {@link ITerminalTextData#scroll(int, int, int)}
- * If nothing has changed, 0 is returned.
- */
- int getScrollWindowSize();
-
- /**
- * If {@link #updateSnapshot(boolean)} was called with <code>true</code>, then this method
- * returns number of lines moved by the scroll region.
- * @return The the scroll shift of this snapshot compared
- * to the previous snapshot. See also {@link ITerminalTextData#scroll(int, int, int)}
- */
- int getScrollWindowShift();
-
- /**
- * @return The {@link ITerminalTextData} on that this instance is observing.
- */
- ITerminalTextData getTerminalTextData();
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-
-public class LineSegment {
- private final String fText;
- private final int fCol;
- private final Style fStyle;
- public LineSegment(int col, String text, Style style) {
- fCol = col;
- fText = text;
- fStyle = style;
- }
- public Style getStyle() {
- return fStyle;
- }
- public String getText() {
- return fText;
- }
- public int getColumn() {
- return fCol;
- }
- public String toString() {
- return "LineSegment("+fCol+", \""+fText+"\","+fStyle+")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- }
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author scharf
- * Flyweight
- * Threadsafe.
- *
- */
-// TODO add an Object for user data, use weak map to keep track of styles with associated
-// user data
-public class Style {
- private final StyleColor fForground;
- private final StyleColor fBackground;
- private final boolean fBold;
- private final boolean fBlink;
- private final boolean fUnderline;
- private final boolean fReverse;
- private final static Map<Style, Style> fgStyles=new HashMap<Style, Style>();
- private Style(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline, boolean reverse) {
- fForground = forground;
- fBackground = background;
- fBold = bold;
- fBlink = blink;
- fUnderline = underline;
- fReverse = reverse;
- }
- public static Style getStyle(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline, boolean reverse) {
- Style style = new Style(forground,background, bold, blink,underline,reverse);
- Style cached;
- synchronized (fgStyles) {
- cached=fgStyles.get(style);
- if(cached==null) {
- cached=style;
- fgStyles.put(cached, cached);
- }
- }
- return cached;
- }
- public static Style getStyle(String forground, String background) {
- return getStyle(StyleColor.getStyleColor(forground), StyleColor.getStyleColor(background),false,false,false,false);
- }
- public static Style getStyle(StyleColor forground, StyleColor background) {
- return getStyle(forground, background,false,false,false,false);
- }
- public Style setForground(StyleColor forground) {
- return getStyle(forground,fBackground,fBold,fBlink,fUnderline,fReverse);
- }
- public Style setBackground(StyleColor background) {
- return getStyle(fForground,background,fBold,fBlink,fUnderline,fReverse);
- }
- public Style setForground(String colorName) {
- return getStyle(StyleColor.getStyleColor(colorName),fBackground,fBold,fBlink,fUnderline,fReverse);
- }
- public Style setBackground(String colorName) {
- return getStyle(fForground,StyleColor.getStyleColor(colorName),fBold,fBlink,fUnderline,fReverse);
- }
- public Style setBold(boolean bold) {
- return getStyle(fForground,fBackground,bold,fBlink,fUnderline,fReverse);
- }
- public Style setBlink(boolean blink) {
- return getStyle(fForground,fBackground,fBold,blink,fUnderline,fReverse);
- }
- public Style setUnderline(boolean underline) {
- return getStyle(fForground,fBackground,fBold,fBlink,underline,fReverse);
- }
- public Style setReverse(boolean reverse) {
- return getStyle(fForground,fBackground,fBold,fBlink,fUnderline,reverse);
- }
- public StyleColor getBackground() {
- return fBackground;
- }
- public boolean isBlink() {
- return fBlink;
- }
- public boolean isBold() {
- return fBold;
- }
- public StyleColor getForground() {
- return fForground;
- }
- public boolean isReverse() {
- return fReverse;
- }
- public boolean isUnderline() {
- return fUnderline;
- }
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((fBackground == null) ? 0 : fBackground.hashCode());
- result = prime * result + (fBlink ? 1231 : 1237);
- result = prime * result + (fBold ? 1231 : 1237);
- result = prime * result + ((fForground == null) ? 0 : fForground.hashCode());
- result = prime * result + (fReverse ? 1231 : 1237);
- result = prime * result + (fUnderline ? 1231 : 1237);
- return result;
- }
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- final Style other = (Style) obj;
- // background == is the same as equals
- if (fBackground != other.fBackground)
- return false;
- if (fBlink != other.fBlink)
- return false;
- if (fBold != other.fBold)
- return false;
- if (fForground != other.fForground)
- return false;
- if (fReverse != other.fReverse)
- return false;
- if (fUnderline != other.fUnderline)
- return false;
- return true;
- }
- public String toString() {
- StringBuffer result=new StringBuffer();
- result.append("Style(foreground="); //$NON-NLS-1$
- result.append(fForground);
- result.append(", background="); //$NON-NLS-1$
- result.append(fBackground);
- if(fBlink)
- result.append(", blink"); //$NON-NLS-1$
- if(fBold)
- result.append(", bold"); //$NON-NLS-1$
- if(fBlink)
- result.append(", blink"); //$NON-NLS-1$
- if(fReverse)
- result.append(", reverse"); //$NON-NLS-1$
- if(fUnderline)
- result.append(", underline"); //$NON-NLS-1$
- result.append(")"); //$NON-NLS-1$
- return result.toString();
- }
-
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- * Flyweight
- * Threadsafe.
- */
-public class StyleColor {
- private final static Map<String, StyleColor> fgStyleColors=new HashMap<String, StyleColor>();
- final String fName;
-
- /**
- * @param name the name of the color. It is up to the UI to associate a
- * named color with a visual representation
- * @return a StyleColor
- */
- public static StyleColor getStyleColor(String name) {
- StyleColor result;
- synchronized (fgStyleColors) {
- result=fgStyleColors.get(name);
- if(result==null) {
- result=new StyleColor(name);
- fgStyleColors.put(name, result);
- }
- }
- return result;
- }
- // nobody except the factory method is allowed to instantiate this class!
- private StyleColor(String name) {
- fName = name;
- }
-
- public String getName() {
- return fName;
- }
-
- public String toString() {
- return fName;
- }
- // no need to override equals and hashCode, because Object uses object identity
-}
\ No newline at end of file
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.model;
-
-import org.eclipse.tm.internal.terminal.model.SynchronizedTerminalTextData;
-import org.eclipse.tm.internal.terminal.model.TerminalTextData;
-
-public class TerminalTextDataFactory {
- static public ITerminalTextData makeTerminalTextData() {
- return new SynchronizedTerminalTextData(new TerminalTextData());
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-org.eclipse.tm.terminal.view.core/debugmode = 0
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.tm.terminal.view.core</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
- </natures>
- <filteredResources>
- <filter>
- <id>1329501981620</id>
- <name></name>
- <type>10</type>
- <matcher>
- <id>org.eclipse.ui.ide.multiFilter</id>
- <arguments>1.0-name-matches-false-false-target</arguments>
- </matcher>
- </filter>
- </filteredResources>
-</projectDescription>
+++ /dev/null
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=4
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+++ /dev/null
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_Target Explorer Java STD
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=false
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=true
-sp_cleanup.remove_unused_imports=true
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-sp_cleanup.use_type_arguments=false
+++ /dev/null
-compilers.f.unresolved-features=1
-compilers.f.unresolved-plugins=1
-compilers.incompatible-environment=1
-compilers.p.build=1
-compilers.p.build.bin.includes=1
-compilers.p.build.encodings=2
-compilers.p.build.java.compiler=2
-compilers.p.build.java.compliance=1
-compilers.p.build.missing.output=2
-compilers.p.build.output.library=1
-compilers.p.build.source.library=1
-compilers.p.build.src.includes=1
-compilers.p.deprecated=1
-compilers.p.discouraged-class=1
-compilers.p.internal=1
-compilers.p.missing-packages=1
-compilers.p.missing-version-export-package=2
-compilers.p.missing-version-import-package=1
-compilers.p.missing-version-require-bundle=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=1
-compilers.p.unknown-class=1
-compilers.p.unknown-element=1
-compilers.p.unknown-identifier=1
-compilers.p.unknown-resource=1
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.s.create-docs=false
-compilers.s.doc-folder=doc
-compilers.s.open-tags=1
-eclipse.preferences.version=1
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.tm.terminal.view.core;singleton:=true
-Bundle-Version: 4.2.0.qualifier
-Bundle-Activator: org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator
-Bundle-Vendor: %providerName
-Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
- org.eclipse.core.runtime;bundle-version="3.8.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ActivationPolicy: lazy
-Bundle-Localization: plugin
-Export-Package: org.eclipse.tm.terminal.view.core,
- org.eclipse.tm.terminal.view.core.activator;x-internal:=true,
- org.eclipse.tm.terminal.view.core.interfaces,
- org.eclipse.tm.terminal.view.core.interfaces.constants,
- org.eclipse.tm.terminal.view.core.internal;x-internal:=true,
- org.eclipse.tm.terminal.view.core.nls;x-internal:=true,
- org.eclipse.tm.terminal.view.core.preferences,
- org.eclipse.tm.terminal.view.core.tracing,
- org.eclipse.tm.terminal.view.core.utils
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>May 24, 2012</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-# about.ini
-# contains information about a feature
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# "%key" are externalized strings defined in about.properties
-# This file does not need to be translated.
-
-# Property "aboutText" contains blurb for "About" dialog (translated)
-aboutText=%blurb
-
-# Property "windowImage" contains path to window icon (16x16)
-# needed for primary features only
-
-# Property "featureImage" contains path to feature image (32x32)
-featureImage=tm32.png
-
-# Property "aboutImage" contains path to product image (500x330 or 115x164)
-# needed for primary features only
-
-# Property "appName" contains name of the application (not translated)
-# needed for primary features only
-
-# Property "welcomePage" contains path to welcome page (special XML-based format)
-# optional
-
-# Property "welcomePerspective" contains the id of the perspective in which the
-# welcome page is to be opened.
-# optional
\ No newline at end of file
+++ /dev/null
-# about.mappings
-# contains fill-ins for about.properties
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file does not need to be translated.
-
-0=@build@
\ No newline at end of file
+++ /dev/null
-################################################################################
-# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Martin Oberhuber - initial API and implementation
-################################################################################
-# about.properties
-# contains externalized strings for about.ini
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# fill-ins are supplied by about.mappings
-# This file should be translated.
-#
-# Do not translate any values surrounded by {}
-
-blurb=TM Terminal\n\
-\n\
-Version: {featureVersion}\n\
-\n\
-(c) Copyright Wind River Systems, Inc. and others 2011, 2016. All rights reserved.\n\
-Visit http://marketplace.eclipse.org/content/tm-terminal
+++ /dev/null
-###############################################################################
-# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- plugin.properties,\
- about.html,\
- plugin.xml,\
- about.ini,\
- about.mappings,\
- about.properties,\
- tm32.png
+++ /dev/null
-##################################################################################
-# Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-##################################################################################
-
-pluginName = Terminal View Core
-providerName = Eclipse.org - Target Management
-
-ExtensionPoint.contextPropertiesProviders = Terminal Context Properties Providers
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
- <extension-point id="contextPropertiesProviders" name="%contextPropertiesProviders" schema="schema/contextPropertiesProviders.exsd"/>
-
-<!-- Property tester contributions -->
- <extension point="org.eclipse.core.expressions.propertyTesters">
- <propertyTester
- class="org.eclipse.tm.terminal.view.core.internal.PropertyTester"
- id="org.eclipse.tm.terminal.view.core.PropertyTester"
- namespace="org.eclipse.tm.terminal.view.core"
- properties="hasContextPropertiesProvider"
- type="java.lang.Object">
- </propertyTester>
- </extension>
-
-</plugin>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.eclipse.tm.terminal</groupId>
- <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
- <version>4.2.0-SNAPSHOT</version>
- <relativePath>../../admin/pom-build.xml</relativePath>
- </parent>
-
- <version>4.2.0-SNAPSHOT</version>
- <artifactId>org.eclipse.tm.terminal.view.core</artifactId>
- <packaging>eclipse-plugin</packaging>
-</project>
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.tm.terminal.view.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
- <appinfo>
- <meta.schema plugin="org.eclipse.tm.terminal.view.core" id="contextPropertiesProviders" name="Terminal Context Properties Providers"/>
- </appinfo>
- <documentation>
- This extension point is used to contribute terminal context properties providers. The context properties provider allows querying desired properties for a given context.
-<p>
-The terminal context is passed in as default variable to the enablement expression evaluation. The terminal context is not expected to be iteratable or countable.
- </documentation>
- </annotation>
-
- <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
-
- <element name="extension">
- <annotation>
- <appinfo>
- <meta.element />
- </appinfo>
- </annotation>
- <complexType>
- <sequence>
- <element ref="contextPropertiesProvider" minOccurs="1" maxOccurs="unbounded"/>
- </sequence>
- <attribute name="point" type="string" use="required">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="id" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="name" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- <appinfo>
- <meta.attribute translatable="true"/>
- </appinfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="contextPropertiesProvider">
- <annotation>
- <documentation>
- Declares a terminal context properties provider contribution.
- </documentation>
- </annotation>
- <complexType>
- <sequence>
- <element ref="enablement"/>
- </sequence>
- <attribute name="class" type="string">
- <annotation>
- <documentation>
- The class that implements <code>org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider</code>.
- </documentation>
- <appinfo>
- <meta.attribute kind="java" basedOn=":org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider"/>
- </appinfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <annotation>
- <appinfo>
- <meta.section type="since"/>
- </appinfo>
- <documentation>
- TM Terminal 4.0.0
- </documentation>
- </annotation>
-
- <annotation>
- <appinfo>
- <meta.section type="examples"/>
- </appinfo>
- <documentation>
- This is an example of the extension point usage:
-<p>
-<pre><code>
- <extension point="org.eclipse.tm.terminal.view.core.contextPropertiesProviders">
- <contextPropertiesProvider
- class="com.my.contribution.MyContextPropertiesProviderImpl">
- </contextPropertiesProvider>
- </extension>
-</code></pre>
- </documentation>
- </annotation>
-
- <annotation>
- <appinfo>
- <meta.section type="apiinfo"/>
- </appinfo>
- <documentation>
- The provider of a terminal context properties provider must implement <samp>org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider</samp>.
- </documentation>
- </annotation>
-
-
- <annotation>
- <appinfo>
- <meta.section type="copyright"/>
- </appinfo>
- <documentation>
- Copyright (c) 2015 Wind River Systems, Inc. and others.
-
-All rights reserved.
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v1.0 which accompanies this distribution, and is
-available at http://www.eclipse.org/legal/epl-v10.html.
- </documentation>
- </annotation>
-
-</schema>
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.expressions.EvaluationResult;
-import org.eclipse.core.expressions.Expression;
-import org.eclipse.core.expressions.ExpressionConverter;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExecutableExtension;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
-import org.eclipse.tm.terminal.view.core.nls.Messages;
-
-/**
- * Terminal context properties provider factory.
- */
-public final class TerminalContextPropertiesProviderFactory {
- // Flag to remember if the contributions got loaded
- private static boolean contributionsLoaded = false;
-
- // The list of all loaded contributions
- private static final List<Proxy> contributions = new ArrayList<Proxy>();
-
- // The proxy used to achieve lazy class loading and plug-in activation
- private static class Proxy implements IExecutableExtension {
- // Reference to the configuration element
- private IConfigurationElement configElement = null;
- // The class implementing the provider
- public String clazz;
- // The context properties provider instance
- private ITerminalContextPropertiesProvider provider = null;
- // The converted expression
- private Expression expression;
-
- /**
- * Constructor.
- */
- protected Proxy() {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
- */
- @Override
- public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
- Assert.isNotNull(config);
- this.configElement = config;
-
- // Read the class attribute.
- // Throws an exception if the attribute value is empty or null.
- clazz = config.getAttribute("class"); //$NON-NLS-1$
- if (clazz == null || "".equals(clazz.trim())) { //$NON-NLS-1$
- throw new CoreException(new Status(IStatus.ERROR,
- CoreBundleActivator.getUniqueIdentifier(),
- NLS.bind(Messages.Extension_error_missingRequiredAttribute, "class", config.getContributor().getName()))); //$NON-NLS-1$
- }
-
- // Read the "enablement" sub element of the extension
- IConfigurationElement[] children = configElement.getChildren("enablement"); //$NON-NLS-1$
- if (children == null || children.length == 0) {
- throw new CoreException(new Status(IStatus.ERROR,
- CoreBundleActivator.getUniqueIdentifier(),
- NLS.bind(Messages.Extension_error_missingRequiredAttribute, "enablement", config.getContributor().getName()))); //$NON-NLS-1$
- }
- // Only one "enablement" element is expected
- expression = ExpressionConverter.getDefault().perform(children[0]);
- }
-
- /**
- * Return the real terminal context properties provider instance for this proxy.
- */
- protected ITerminalContextPropertiesProvider getProvider() {
- if (provider == null && configElement != null) {
- try {
- // Create the service class instance via the configuration element
- Object provider = configElement.createExecutableExtension("class"); //$NON-NLS-1$
- if (provider instanceof ITerminalContextPropertiesProvider) {
- this.provider = (ITerminalContextPropertiesProvider)provider;
- }
- else {
- IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), "Terminal context properties provider '" + provider.getClass().getName() + "' not of type ITerminalContextPropertiesProvider."); //$NON-NLS-1$ //$NON-NLS-2$
- Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
- }
- }
- catch (CoreException e) {
- IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), "Cannot create terminal context properties provider '" + clazz + "'.", e); //$NON-NLS-1$ //$NON-NLS-2$
- Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
- }
- }
- return provider;
- }
-
- /**
- * Returns if or if not the context properties provider contribution is enabled for
- * the given terminal context.
- *
- * @param context The terminal context or <code>null</code>.
- * @return <code>True</code> if the context properties provider contribution is enabled
- * for the given terminal context, <code>false</code> otherwise.
- */
- protected boolean isEnabled(Object context) {
- if (context == null) {
- return getEnablement() == null;
- }
-
- Expression enablement = getEnablement();
-
- // The service contribution is enabled by default if no expression is specified.
- boolean enabled = enablement == null;
-
- if (enablement != null) {
- // Set the default variable to the service context.
- EvaluationContext evalContext = new EvaluationContext(null, context);
- // Allow plug-in activation
- evalContext.setAllowPluginActivation(true);
- // Evaluate the expression
- try {
- enabled = enablement.evaluate(evalContext).equals(EvaluationResult.TRUE);
- } catch (CoreException e) {
- IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e);
- Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
- }
- }
-
- return enabled;
- }
-
- /**
- * Returns the enablement expression.
- *
- * @return The enablement expression or <code>null</code>.
- */
- protected Expression getEnablement() {
- return expression;
- }
- }
-
-
- /**
- * Creates a new terminal context properties provider proxy instance and initialize it.
- *
- * @param config The configuration element. Must not be <code>null</code>.
- * @return The new terminal context properties provider proxy instance.
- */
- private static Proxy getProxy(IConfigurationElement config) {
- Assert.isNotNull(config);
- Proxy proxy = new Proxy();
- try {
- proxy.setInitializationData(config, null, null);
- } catch (CoreException e) {
- if (Platform.inDebugMode()) {
- Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(e.getStatus());
- }
- }
- return proxy;
- }
-
- /**
- * Load the terminal context properties provider contributions.
- */
- private static void loadContributions() {
- IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.tm.terminal.view.core.contextPropertiesProviders"); //$NON-NLS-1$
- if (ep != null) {
- IExtension[] extensions = ep.getExtensions();
- if (extensions != null) {
- for (IExtension extension : extensions) {
- IConfigurationElement[] configElements = extension.getConfigurationElements();
- if (configElements != null) {
- for (IConfigurationElement configElement : configElements) {
- if ("contextPropertiesProvider".equals(configElement.getName())) { //$NON-NLS-1$
- Proxy proxy = getProxy(configElement);
- contributions.add(proxy);
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Get the terminal context properties provider for the given context. The first terminal
- * context properties provider which is enabled is returned.
- *
- * @param context The terminal context. Must not be <code>null</code>.
- *
- * @return The service or <code>null</code>.
- */
- public static ITerminalContextPropertiesProvider getProvider(Object context) {
- Assert.isNotNull(context);
-
- // Load the contributions if not yet loaded
- synchronized (contributions) {
- if (!contributionsLoaded) {
- loadContributions();
- contributionsLoaded = true;
- }
- }
-
- for (Proxy proxy : contributions) {
- if (proxy.isEnabled(context)) {
- return proxy.getProvider();
- }
- }
-
- return null;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
-import org.eclipse.tm.terminal.view.core.nls.Messages;
-import org.osgi.framework.Bundle;
-
-/**
- * Terminal service factory implementation.
- * <p>
- * Provides access to the terminal service instance.
- */
-public final class TerminalServiceFactory {
- private static ITerminalService instance = null;
-
- static {
- // Tries to instantiate the terminal service implementation
- // from the o.e.tm.terminal.view.ui bundle
- Bundle bundle = Platform.getBundle("org.eclipse.tm.terminal.view.ui"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- try {
- Class<?> clazz = bundle.loadClass("org.eclipse.tm.terminal.view.ui.services.TerminalService"); //$NON-NLS-1$
- instance = (ITerminalService) clazz.newInstance();
- }
- catch (Exception e) {
- if (Platform.inDebugMode()) {
- Platform.getLog(bundle).log(new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), Messages.TerminalServiceFactory_error_serviceImplLoadFailed, e));
- }
- }
- }
- }
-
- /**
- * Returns the terminal service instance.
- */
- public static ITerminalService getService() {
- return instance;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.activator;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class CoreBundleActivator implements BundleActivator {
- // The bundle context
- private static BundleContext context;
-
- /**
- * Returns the bundle context
- *
- * @return the bundle context
- */
- public static BundleContext getContext() {
- return context;
- }
-
- /**
- * Convenience method which returns the unique identifier of this plug-in.
- */
- public static String getUniqueIdentifier() {
- if (getContext() != null && getContext().getBundle() != null) {
- return getContext().getBundle().getSymbolicName();
- }
- return "org.eclipse.tm.terminal.view.core"; //$NON-NLS-1$
- }
-
- /* (non-Javadoc)
- * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(BundleContext bundleContext) throws Exception {
- CoreBundleActivator.context = bundleContext;
- }
-
- /* (non-Javadoc)
- * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(BundleContext bundleContext) throws Exception {
- CoreBundleActivator.context = null;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces;
-
-import java.util.Map;
-
-/**
- * Terminal context properties provider.
- * <p>
- * The context properties provider allows querying desired properties
- * for a given context. The context is typically an element from a selection
- * and the inner structure of the element is unknown to the terminal.
- */
-public interface ITerminalContextPropertiesProvider {
-
- /**
- * Returns a unmodifiable map containing the target address and port for the given context,
- * if it can be determined.
- * <p>
- * A context may return multiple target addresses and ports if the context can be reached using
- * different connection methods.
- * <p>
- * <b>Note:</b>
- * <ul>
- * <li>See the constants defined in the context provider constants interface for default
- * address and port types.</li>
- * <li>The target address returned must <b>not</b> necessarily be an IP address.</li>
- * <li>The values of the address or port properties might be <code>null</code>.</li>
- * </ul>
- *
- * @param context The context to get the target addresses and ports from. Must not be <code>null</code>.
- * @return The unmodifiable map containing the target addresses and ports, or <code>null</code>.
- */
- public Map<String, String> getTargetAddress(Object context);
-
- /**
- * Returns the property value stored under the given property key. If the property does not
- * exist, <code>null</code> is returned.
- *
- * @param context The context to get the property from. Must not be <code>null</code>.
- * @param key The property key. Must not be <code>null</code>.
- *
- * @return The stored property value or <code>null</code>.
- */
- public Object getProperty(Object context, String key);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces;
-
-import java.util.Map;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * Terminal service.
- */
-public interface ITerminalService {
-
- /**
- * Client call back interface.
- */
- public interface Done {
- /**
- * Called when the terminal service operation is done.
- *
- * @param status The status of the terminal service operation.
- */
- public void done(IStatus status);
- }
-
- /**
- * Opens a terminal asynchronously and invokes the given callback if done.
- *
- * @param properties The terminal properties. Must not be <code>null</code>.
- * @param done The callback to invoke if finished or <code>null</code>.
- */
- public void openConsole(Map<String, Object> properties, Done done);
-
- /**
- * Close the terminal asynchronously and invokes the given callback if done.
- *
- * @param properties The terminal properties. Must not be <code>null</code>.
- * @param done The callback to invoke if finished or <code>null</code>.
- */
- public void closeConsole(Map<String, Object> properties, Done done);
-
- /**
- * Terminate (disconnect) the terminal asynchronously and invokes the given callback if done.
- *
- * @param properties The terminal properties. Must not be <code>null</code>.
- * @param done The callback to invoke if finished or <code>null</code>.
- */
- public void terminateConsole(Map<String, Object> properties, Done done);
-
- /**
- * Register the given listener to receive notifications about terminal events.
- * Calling this method multiple times with the same listener has no effect.
-
- * @param listener The terminal tab listener. Must not be <code>null</code>.
- */
- public void addTerminalTabListener(ITerminalTabListener listener);
-
- /**
- * Unregister the given listener from receiving notifications about terminal
- * events. Calling this method multiple times with the same listener
- * has no effect.
- *
- * @param listener The terminal tab listener. Must not be <code>null</code>.
- */
- public void removeTerminalTabListener(ITerminalTabListener listener);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014 - 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces;
-
-/**
- * An interface to be implemented by listeners who want to listen
- * to the streams data without interfering with the original data receiver.
- * <p>
- * Listeners are invoked within the monitor processing thread.
- */
-public interface ITerminalServiceOutputStreamMonitorListener {
-
- /**
- * Signals that some content has been read from the monitored stream.
- *
- * @param byteBuffer The byte stream. Must not be <code>null</code>.
- * @param bytesRead The number of bytes that were read into the read buffer.
- */
- public void onContentReadFromStream(byte[] byteBuffer, int bytesRead);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces;
-
-/**
- * Listener to implement and to register to get notified about
- * terminal tabs events, like the disposal of a terminal tab.
- */
-public interface ITerminalTabListener {
-
- /**
- * Invoked once a terminal tab got disposed. The source object is
- * the disposed tab item and data is the custom data object associated
- * with the disposed tab item.
- *
- * @param source The disposed tab item. Must not be <code>null</code>.
- * @param data The custom data object associated with the disposed tab item or <code>null</code>.
- */
- public void terminalTabDisposed(Object source, Object data);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces.constants;
-
-/**
- * Defines the terminal context properties constants.
- */
-public interface IContextPropertiesConstants {
-
- /**
- * Target name.
- * <p>
- * The target name is not meant to be identical with the targets network name. It can
- * be the targets network name, but it can be any other string identifying the target
- * to the user as well. The name is for display only, it is not meant to be used for
- * communicating with the target.
- */
- public static String PROP_NAME = "name"; //$NON-NLS-1$
-
- /**
- * Target agent address.
- * <p>
- * <i>The value is typically the address an agent running at the target.</i>
- */
- public static String PROP_ADDRESS = "address"; //$NON-NLS-1$
-
- /**
- * Target agent port.
- * <p>
- * <i>The value is typically the port an agent running at the target.</i>
- */
- public static String PROP_PORT = "port"; //$NON-NLS-1$
-
- /**
- * The default user name to use to log into the target.
- */
- public static String PROP_DEFAULT_USER = "defaultUser"; //$NON-NLS-1$
-
- /**
- * The default encoding to use.
- */
- public static String PROP_DEFAULT_ENCODING = "defaultEncoding"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces.constants;
-
-/**
- * Line separator constants.
- */
-public interface ILineSeparatorConstants {
-
- /**
- * The line separator setting CR (carriage return only; for example, used by Mac OS 9).
- */
- public final static String LINE_SEPARATOR_CR = "\\r"; //$NON-NLS-1$
-
- /**
- * The line separator setting CRLF (carriage return and line feed; for example, used by
- * Windows).
- */
- public final static String LINE_SEPARATOR_CRLF = "\\r\\n"; //$NON-NLS-1$
-
- /**
- * The line separator setting LF (line feed only; used by all UNIX-based systems).
- */
- public final static String LINE_SEPARATOR_LF = "\\n"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.interfaces.constants;
-
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
-
-
-/**
- * Defines the terminals connector constants.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface ITerminalsConnectorConstants {
-
- /**
- * Property: The unique id of the terminals view to open.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_ID = "id"; //$NON-NLS-1$
-
- /**
- * Property: The unique secondary id of the terminals view to open.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SECONDARY_ID = "secondaryId"; //$NON-NLS-1$
-
- /**
- * Property: The title of the terminal tab to open.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_TITLE = "title"; //$NON-NLS-1$
-
- /**
- * Property: The encoding of the terminal tab to open.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_ENCODING = "encoding"; //$NON-NLS-1$
-
- /**
- * Property: Custom data object to associate with the terminal tab.
- * <p>
- * Property Type: {@link Object}
- */
- public static final String PROP_DATA = "data"; //$NON-NLS-1$
-
- /**
- * Property: External selection to associate with the terminal tab.
- * <p>
- * Property Type: {@link org.eclipse.jface.viewers.ISelection}
- */
- public static final String PROP_SELECTION = "selection"; //$NON-NLS-1$
-
- /**
- * Property: Flag to force a new terminal tab.
- * <p>
- * Property Type: {@link Boolean}
- */
- public static final String PROP_FORCE_NEW = "terminal.forceNew"; //$NON-NLS-1$
-
- /**
- * Property: Terminal launcher delegate id.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_DELEGATE_ID = "delegateId"; //$NON-NLS-1$
-
- /**
- * Property: Specific terminal connector type id. Allows clients to
- * override the specifically used terminal connector
- * implementation for a given type.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_TERMINAL_CONNECTOR_ID = "tm.terminal.connector.id"; //$NON-NLS-1$
-
- // ***** Generic terminals connector properties *****
-
- /**
- * Property: Timeout to be passed to the terminal connector. The specific terminal
- * connector implementation may interpret this value differently. If not
- * set, the terminal connector may use a default value.
- * <p>
- * Property Type: {@link Integer}
- */
- public static final String PROP_TIMEOUT = "timeout"; //$NON-NLS-1$
-
- /**
- * Property: Flag to control if a local echo is needed from the terminal widget.
- * <p>Typical for process and streams terminals.
- * <p>
- * Property Type: {@link Boolean}
- */
- public static final String PROP_LOCAL_ECHO = "localEcho"; //$NON-NLS-1$
-
- /**
- * Property: Data flag to tell the terminal to not reconnect when hitting enter
- * in a disconnected terminal.
- * <p>
- * Property Type: {@link Boolean}
- */
- public static final String PROP_DATA_NO_RECONNECT = "data.noReconnect"; //$NON-NLS-1$
-
- /**
- * Property: The line separator expected by the remote terminal on input streams and
- * send by the remote terminal on output streams.
- * <p>Typical for process and streams terminals.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_LINE_SEPARATOR = "lineSeparator"; //$NON-NLS-1$
-
- /**
- * Property: The list of stdout listeners to attach to the corresponding stream monitor.
- * <p>Typical for process and streams terminals.
- * <p>
- * Property Type: {@link ITerminalServiceOutputStreamMonitorListener} array
- */
- public static final String PROP_STDOUT_LISTENERS = "stdoutListeners"; //$NON-NLS-1$
-
- /**
- * Property: The list of stderr listeners to attach to the corresponding stream monitor.
- * <p>Typical for process and streams terminals.
- * <p>
- * Property Type: {@link ITerminalServiceOutputStreamMonitorListener} array
- */
- public static final String PROP_STDERR_LISTENERS = "stderrListeners"; //$NON-NLS-1$
-
- /**
- * Property: If set to <code>true</code>, backslashes are translated to
- * slashes before pasting the text to the terminal widget.
- * <p>
- * Property Type: {@link Boolean}
- */
- public static final String PROP_TRANSLATE_BACKSLASHES_ON_PASTE = "translateBackslashesOnPaste"; //$NON-NLS-1$
-
- // ***** IP based terminals connector properties *****
-
- /**
- * Property: Host name or IP address the terminal server is running.
- * <p>Typical for telnet or ssh terminals.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_IP_HOST = "ip.host"; //$NON-NLS-1$
-
- /**
- * Property: Port at which the terminal server is providing the console input and output.
- * <p>Typical for telnet or ssh terminals.
- * <p>
- * Property Type: {@link Integer}
- */
- public static final String PROP_IP_PORT = "ip.port"; //$NON-NLS-1$
-
- /**
- * Property: An offset to add to the specified port number.
- * <p>Typical for telnet or ssh terminals.
- * <p>
- * Property Type: {@link Integer}
- */
- public static final String PROP_IP_PORT_OFFSET = "ip.port.offset"; //$NON-NLS-1$
-
- // ***** Process based terminals connector properties *****
-
- /**
- * Property: Process image path.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_PROCESS_PATH = "process.path"; //$NON-NLS-1$
-
- /**
- * Property: Process arguments.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_PROCESS_ARGS = "process.args"; //$NON-NLS-1$
-
- /**
- * Property: Process arguments.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_PROCESS_WORKING_DIR = "process.working_dir"; //$NON-NLS-1$
-
- /**
- * Property: Process environment.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link String} array
- */
- public static final String PROP_PROCESS_ENVIRONMENT = "process.environment"; //$NON-NLS-1$
-
- /**
- * Property: Flag to merge process environment with native environment.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link Boolean}
- */
- public static final String PROP_PROCESS_MERGE_ENVIRONMENT = "process.environment.merge"; //$NON-NLS-1$
-
- /**
- * Property: Runtime process instance.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link Process}
- */
- public static final String PROP_PROCESS_OBJ = "process"; //$NON-NLS-1$
-
- /**
- * Property: Runtime process PTY instance.
- * <p>Typical for process terminals.
- * <p>
- * Property Type: {@link org.eclipse.cdt.utils.pty.PTY}
- */
- public static final String PROP_PTY_OBJ = "pty"; //$NON-NLS-1$
-
- // ***** Streams based terminals connector properties *****
-
- /**
- * Property: Stdin streams instance.
- * <p>Typical for streams terminals.
- * <p>
- * Property Type: {@link OutputStream}
- */
- public static final String PROP_STREAMS_STDIN = "streams.stdin"; //$NON-NLS-1$
-
- /**
- * Property: Stdout streams instance.
- * <p>Typical for streams terminals.
- * <p>
- * Property Type: {@link InputStream}
- */
- public static final String PROP_STREAMS_STDOUT = "streams.stdout"; //$NON-NLS-1$
-
- /**
- * Property: Stderr streams instance.
- * <p>Typical for streams terminals.
- * <p>
- * Property Type: {@link InputStream}
- */
- public static final String PROP_STREAMS_STDERR = "streams.stderr"; //$NON-NLS-1$
-
- // ***** Ssh specific properties *****
-
- /**
- * Property: ssh keep alive value.
- * <p>
- * Property Type: {@link Integer}
- */
- public static final String PROP_SSH_KEEP_ALIVE = "ssh.keep_alive"; //$NON-NLS-1$
-
- /**
- * Property: Ssh password.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SSH_PASSWORD = "ssh.password"; //$NON-NLS-1$
-
- /**
- * Property: Ssh user.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SSH_USER = "ssh.user"; //$NON-NLS-1$
-
- // ***** Serial specific properties *****
-
- /**
- * The serial device name.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SERIAL_DEVICE = "serial.device"; //$NON-NLS-1$
-
- /**
- * The baud rate.
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SERIAL_BAUD_RATE = "serial.baudrate"; //$NON-NLS-1$
-
- /**
- * The data bits
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SERIAL_DATA_BITS = "serial.databits"; //$NON-NLS-1$
-
- /**
- * The parity
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SERIAL_PARITY = "serial.parity"; //$NON-NLS-1$
-
- /**
- * The stop bits
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SERIAL_STOP_BITS = "serial.stopbits"; //$NON-NLS-1$
-
- /**
- * The flow control
- * <p>
- * Property Type: {@link String}
- */
- public static final String PROP_SERIAL_FLOW_CONTROL = "serial.flowcontrol"; //$NON-NLS-1$
-
- // ***** Telnet specific properties *****
-
- /**
- * The end-of-line sequence to be sent to the server on "Enter".
- * <p>
- * Property Type: {@link String}
- * @since 4.2
- */
- public static final String PROP_TELNET_EOL = "telnet.eol"; //$NON-NLS-1$
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.internal;
-
-import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
-
-
-
-/**
- * Property tester implementation.
- */
-public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
- */
- @Override
- public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
-
- // "hasContextPropertiesProvider": Checks if a context properties provider is available for the given receiver.
- if ("hasContextPropertiesProvider".equals(property)) { //$NON-NLS-1$
- boolean hasProvider = TerminalContextPropertiesProviderFactory.getProvider(receiver) != null;
- return expectedValue instanceof Boolean ? ((Boolean)expectedValue).equals(Boolean.valueOf(hasProvider)) : hasProvider;
- }
-
- return false;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.nls;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Externalized strings management.
- */
-public class Messages extends NLS {
-
- // The plug-in resource bundle name
- private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.view.core.nls.Messages"; //$NON-NLS-1$
-
- /**
- * Static constructor.
- */
- static {
- // Load message values from bundle file
- NLS.initializeMessages(BUNDLE_NAME, Messages.class);
- }
-
- // **** Declare externalized string id's down here *****
-
- public static String TerminalServiceFactory_error_serviceImplLoadFailed;
-
- public static String Extension_error_missingRequiredAttribute;
-}
+++ /dev/null
-###############################################################################
-# Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-###############################################################################
-
-TerminalServiceFactory_error_serviceImplLoadFailed=Failed to load terminal service implementation.
-
-Extension_error_missingRequiredAttribute=Required attribute "{0}" missing for extension "{1}"!
-
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.preferences;
-
-import java.io.OutputStream;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
-import org.eclipse.core.runtime.preferences.IPreferenceFilter;
-import org.eclipse.core.runtime.preferences.IScopeContext;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.osgi.service.prefs.BackingStoreException;
-
-/**
- * Helper class to handle scoped Eclipse preferences for plug-in's. Scoped
- * preferences means a given preference context plus the default preferences
- * scope.
- * <p>
- * On changes a {@link PreferenceChangeEvent} is sent to inform all listeners of the change.
- *
- * @see IEclipsePreferences
- * @see IEclipsePreferences.PreferenceChangeEvent
- * @see IEclipsePreferences.IPreferenceChangeListener
- */
-public class ScopedEclipsePreferences {
- /**
- * The preferences scope qualifier.
- */
- private final String qualifier;
-
- /**
- * The default scope preference node.
- */
- protected final IEclipsePreferences defaultPrefs;
-
- /**
- * The context scope preference node.
- */
- protected final IEclipsePreferences contextScopePrefs;
-
- /**
- * The registered preference change listeners.
- */
- private final ListenerList listeners = new ListenerList();
-
- /**
- * Constructor.
- * <p>
- * Initialize the scoped preferences with a new instance scope for the given qualifier. The default
- * scope is determined by calling <code>DefaultScope().getNode(qualifier)</code>.
- *
- * @param qualifier The qualifier for the preferences (in example the unique identifier of a plugin). Must not be <code>null</code>.
- */
- public ScopedEclipsePreferences(String qualifier) {
- this(InstanceScope.INSTANCE, qualifier);
- }
-
- /**
- * Constructor.
- * <p>
- * Initialize the scoped preferences with the given scope. The default scope
- * is determined by calling <code>DefaultScope().getNode(qualifier)</code>.
- *
- * @param context The preference scope context. Must not be <code>null</code>.
- * @param qualifier The qualifier for the preferences (in example the unique identifier of a plugin). Must not be <code>null</code>.
- */
- public ScopedEclipsePreferences(IScopeContext context, String qualifier) {
- Assert.isNotNull(context);
- Assert.isNotNull(qualifier);
- this.qualifier = qualifier;
- defaultPrefs = DefaultScope.INSTANCE.getNode(getQualifier());
- contextScopePrefs = context.getNode(getQualifier());
- }
-
- /**
- * Returns the qualifier that is used to get the preferences.
- * For plugin preferences, this is the unique identifier of the plugin.
- */
- protected final String getQualifier() {
- return qualifier;
- }
-
- /**
- * Exports the preferences to the stream.
- * <p>
- * <b>Note:</b> The stream will be closed after the export.
- *
- * @param stream The stream to where preferences and defaults should be exported.
- */
- public void exportPreferences(OutputStream stream) {
- Assert.isNotNull(stream);
- try {
- IPreferenceFilter filter = new IPreferenceFilter() {
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.preferences.IPreferenceFilter#getScopes()
- */
- @Override
- public String[] getScopes() {
- return new String[] { InstanceScope.SCOPE };
- }
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.preferences.IPreferenceFilter#getMapping(java.lang.String)
- */
- @Override
- public Map getMapping(String scope) {
- return null;
- }
- };
-
- Platform.getPreferencesService().exportPreferences(contextScopePrefs, new IPreferenceFilter[] { filter }, stream);
- stream.close();
- }
- catch (Exception e) {
- }
- }
-
- /**
- * Check whether a key is set or not.
- *
- * @param key The key to check.
- * @return <code>null</code> if the key does not exist.
- */
- public boolean containsKey(String key) {
- return Platform.getPreferencesService().getString(getQualifier(), key, null, null) != null;
- }
-
- /**
- * Get a String preference value.
- *
- * @param key The preference key.
- * @return The value of the preference key or the default value if not set.
- */
- public final String getString(String key) {
- return Platform.getPreferencesService().getString(getQualifier(), key, null, null);
- }
-
- /**
- * Get a boolean preference value.
- *
- * @param key The preference key.
- * @return The value of the preference key or the default value if not set.
- */
- public final boolean getBoolean(String key) {
- return Platform.getPreferencesService().getBoolean(getQualifier(), key, false, null);
- }
-
- /**
- * Get an int preference value.
- *
- * @param key The preference key.
- * @return The value of the preference key or the default value if not set.
- */
- public final int getInt(String key) {
- return Platform.getPreferencesService().getInt(getQualifier(), key, 0, null);
- }
-
- /**
- * Get a long preference value.
- *
- * @param key The preference key.
- * @return The value of the preference key or the default value if not set.
- */
- public final long getLong(String key) {
- return Platform.getPreferencesService().getLong(getQualifier(), key, 0, null);
- }
-
- /**
- * Get a default String preference value.
- *
- * @param key The preference key.
- * @return The default value of the preference key or <code>null</code>.
- */
- public final String getDefaultString(String key) {
- return defaultPrefs.get(key, null);
- }
-
- /**
- * Get a default boolean preference value.
- *
- * @param key The preference key.
- * @return The default value of the preference key or <code>null</code>.
- */
- public final boolean getDefaultBoolean(String key) {
- return defaultPrefs.getBoolean(key, false);
- }
-
- /**
- * Get a default int preference value.
- *
- * @param key The preference key.
- * @return The default value of the preference key or <code>null</code>.
- */
- public final int getDefaultInt(String key) {
- return defaultPrefs.getInt(key, 0);
- }
-
- /**
- * Get a default long preference value.
- *
- * @param key The preference key.
- * @return The default value of the preference key or <code>null</code>.
- */
- public final long getDefaultLong(String key) {
- return defaultPrefs.getLong(key, 0);
- }
-
- /**
- * Set a String preference value. If the value is <code>null</code> or is equal to
- * the default value, the entry will be removed.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed.
- *
- * @param key The preference key.
- * @return The value of the preference key.
- */
- public void putString(String key, String value) {
- String defValue = defaultPrefs.get(key, null);
- String instValue = getString(key);
- if (value == null || value.equals(defValue)) {
- contextScopePrefs.remove(key);
- flushAndNotify(contextScopePrefs, key, instValue, defValue);
- }
- else if (!value.equals(instValue)) {
- contextScopePrefs.put(key, value);
- flushAndNotify(contextScopePrefs, key, instValue, value);
- }
- }
-
- /**
- * Set a boolean preference value. If the value is equal the default value,
- * the entry will be removed.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed.
- *
- * @param key The preference key.
- * @return The value of the preference key.
- */
- public void putBoolean(String key, boolean value) {
- boolean defValue = defaultPrefs.getBoolean(key, false);
- boolean instValue = getBoolean(key);
- if (value == defValue) {
- contextScopePrefs.remove(key);
- flushAndNotify(contextScopePrefs, key, Boolean.toString(instValue), Boolean.toString(defValue));
- }
- else if (value != instValue) {
- contextScopePrefs.putBoolean(key, value);
- flushAndNotify(contextScopePrefs, key, Boolean.toString(instValue), Boolean.toString(value));
- }
- }
-
- /**
- * Set an int preference value. If the value is equal to the default value,
- * the entry will be removed.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
- * and new values are string representation in base 10.
- *
- * @param key The preference key.
- * @return The value of the preference key.
- */
- public void putInt(String key, int value) {
- int defValue = defaultPrefs.getInt(key, 0);
- int instValue = getInt(key);
- if (value == defValue) {
- contextScopePrefs.remove(key);
- flushAndNotify(contextScopePrefs, key, Integer.toString(instValue), Integer.toString(defValue));
- }
- else if (value != instValue) {
- contextScopePrefs.putInt(key, value);
- flushAndNotify(contextScopePrefs, key, Integer.toString(instValue), Integer.toString(value));
- }
- }
-
- /**
- * Set a long preference value. If the given value is equal to the default
- * value, the entry will be removed.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
- * and new values are string representation in base 10.
- *
- * @param key The preference key.
- * @return The value of the preference key.
- */
- public void putLong(String key, long value) {
- long defValue = defaultPrefs.getLong(key, 0);
- long instValue = getLong(key);
- if (value == defValue) {
- contextScopePrefs.remove(key);
- flushAndNotify(contextScopePrefs, key, Long.toString(instValue), Long.toString(defValue));
- }
- else if (value != instValue) {
- contextScopePrefs.putLong(key, value);
- flushAndNotify(contextScopePrefs, key, Long.toString(instValue), Long.toString(value));
- }
- }
-
- /**
- * Set a default String preference value. If the given value is <code>null</code>,
- * the entry will be removed.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed.
- *
- * @param key The preference key.
- * @return The default value of the preference key.
- */
- public void putDefaultString(String key, String value) {
- String defValue = defaultPrefs.get(key, null);
- if (value == null) {
- defaultPrefs.remove(key);
- flushAndNotify(defaultPrefs, key, defValue, null);
- }
- else if (!value.equals(defValue)) {
- defaultPrefs.put(key, value);
- flushAndNotify(defaultPrefs, key, defValue, value);
- }
- }
-
- /**
- * Set a default boolean preference value.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed.
- *
- * @param key The preference key.
- * @return The default value of the preference key.
- */
- public void putDefaultBoolean(String key, boolean value) {
- boolean defValue = defaultPrefs.getBoolean(key, false);
- if (value != defValue) {
- defaultPrefs.putBoolean(key, value);
- flushAndNotify(defaultPrefs, key, Boolean.toString(defValue), Boolean.toString(value));
- }
- }
-
- /**
- * Set a default int preference value.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
- * and new values are string representation in base 10.
- *
- * @param key The preference key.
- * @return The default value of the preference key.
- */
- public void putDefaultInt(String key, int value) {
- int defValue = defaultPrefs.getInt(key, 0);
- if (value != defValue) {
- defaultPrefs.putInt(key, value);
- flushAndNotify(defaultPrefs, key, Integer.toString(defValue), Integer.toString(value));
- }
- }
-
- /**
- * Set a default long preference value.
- * <p>
- * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
- * and new values are string representation in base 10.
- *
- * @param key The preference key.
- * @return The default value of the preference key.
- */
- public void putDefaultLong(String key, long value) {
- long defValue = defaultPrefs.getLong(key, 0);
- if (value != defValue) {
- defaultPrefs.putLong(key, value);
- flushAndNotify(defaultPrefs, key, Long.toString(defValue), Long.toString(value));
- }
- }
-
- /**
- * Write back the changes to the store and notify all listeners about the changed key.
- *
- * @param node The preference node which has changed. Must not be <code>null</code>.
- * @param key The key of the changed preference. Must not be <code>null</code>.
- * @param oldValue The old value as a {@link String}, or <code>null</code>.
- * @param newValue The new value as a {@link String}, or <code>null</code>.
- */
- protected final void flushAndNotify(IEclipsePreferences node, String key, String oldValue, String newValue) {
- // Flush the preferences to the persistence store
- try { node.flush(); } catch (BackingStoreException e) { /* Ignored on purpose */ }
-
- // Notify the listeners
- firePreferenceEvent(node, key, oldValue, newValue);
- }
-
- /**
- * Register the given listener to receive notifications of preference changes to this node.
- * Calling this method multiple times with the same listener has no effect. The given listener
- * argument must not be <code>null</code>.
- *
- * @param listener The preference change listener. Must not be <code>null</code>.
- */
- public void addPreferenceChangeListener(IPreferenceChangeListener listener) {
- Assert.isNotNull(listener);
- listeners.add(listener);
- }
-
- /**
- * De-register the given listener from receiving notifications of preference changes
- * to this node. Calling this method multiple times with the same listener has no
- * effect. The given listener argument must not be <code>null</code>.
- *
- * @param listener The preference change listener. Must not be <code>null</code>.
- */
- public void removePreferenceChangeListener(IPreferenceChangeListener listener) {
- Assert.isNotNull(listener);
- listeners.remove(listener);
- }
-
- /**
- * Convenience method for notifying the registered preference change listeners.
- *
- * @param node The preference node which has changed. Must not be <code>null</code>.
- * @param key The key of the changed preference. Must not be <code>null</code>.
- * @param oldValue The old value as a {@link String}, or <code>null</code>.
- * @param newValue The new value as a {@link String}, or <code>null</code>.
- */
- protected void firePreferenceEvent(IEclipsePreferences node, String key, String oldValue, String newValue) {
- Assert.isNotNull(node);
- Assert.isNotNull(key);
-
- // If no listener is registered, we are done here
- if (listeners.isEmpty()) return;
-
- // Get the list or currently registered listeners
- Object[] l = listeners.getListeners();
- // Create the preference change event
- final PreferenceChangeEvent event = new PreferenceChangeEvent(node, key, oldValue, newValue);
- for (int i = 0; i < l.length; i++) {
- final IPreferenceChangeListener listener = (IPreferenceChangeListener) l[i];
- ISafeRunnable job = new ISafeRunnable() {
- @Override
- public void handleException(Throwable exception) {
- // already logged in Platform#run()
- }
-
- @Override
- public void run() throws Exception {
- listener.preferenceChange(event);
- }
- };
- SafeRunner.run(job);
- }
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.tracing;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
-
-/**
- * Helper class to handle tracing using the platforms debug capabilities.
- */
-public class TraceHandler {
- /**
- * The bundle identifier.
- */
- private final String identifier;
-
- /**
- * The tracer instance.
- */
- private Tracer tracer = null;
-
- /**
- * The tracer is responsible for writing the trace message to the desired
- * output media.
- */
- protected static class Tracer {
-
- /**
- * The bundle identifier.
- */
- private final String fIdentifier;
-
- /**
- * The qualifier for the default "<bundle identifier>/debugmode"
- * tracing slot.
- */
- private final String fDebugModeQualifier;
-
- /**
- * Constructor.
- *
- * @param identifier The bundle identifier. Must not be <code>null</code>.
- */
- public Tracer(String identifier) {
- Assert.isNotNull(identifier);
- fIdentifier = identifier;
-
- // Initialize the debug mode qualifier
- fDebugModeQualifier = fIdentifier + "/debugmode"; //$NON-NLS-1$
- }
-
- /**
- * Returns the value of the debug mode tracing slot.
- * <p>
- * If not set, or the value is not an {@link Integer}, the method returns <code>0</code>.
- *
- * @return The debug mode value.
- */
- protected int getDebugMode() {
- try {
- String mode = Platform.getDebugOption(fDebugModeQualifier);
- if (mode != null && Integer.decode(mode).intValue() > 0) {
- return Integer.decode(mode).intValue();
- }
- } catch (NumberFormatException e) { /* ignored on purpose */ }
-
- return 0;
- }
-
- /**
- * Check if the specified trace slot is enabled.
- *
- * @param slotId The name of the slot.
- * @return <code>true</code> if the slot is defined and enabled, <code>false</code> otherwise.
- */
- protected boolean isSlotEnabled(String slotId) {
- return fIdentifier != null ? Boolean.parseBoolean(Platform.getDebugOption(fIdentifier + "/" + slotId)) : false; //$NON-NLS-1$
- }
-
- /**
- * Check if tracing is enabled for given mode and slot.
- *
- * @param debugMode The debug mode for the current debug.
- * @param slotId The name of the slot.
- *
- * @return <code>true</code> if the debug should be written, <code>false</code> otherwise.
- */
- protected final boolean isEnabled(int debugMode, String slotId) {
- return getDebugMode() < 0 ||
- (debugMode <= getDebugMode() &&
- (slotId == null || slotId.trim().length() == 0 || isSlotEnabled(slotId)));
- }
-
- /**
- * Format the trace message.
- *
- * @param message The trace message.
- * @param debugMode The debug mode.
- * @param slotId The name of the slot.
- * @param severity The severity. See {@link IStatus} for valid severity values.
- * @param clazz The class that calls this tracer.
- *
- * @see IStatus
- */
- protected String getFormattedDebugMessage(String message, int debugMode, String slotId, int severity, Object clazz) {
- StringBuffer debug = new StringBuffer();
- if (slotId != null || clazz != null) {
- if (clazz != null) {
- String name = clazz instanceof Class<?> ? ((Class<?>)clazz).getSimpleName() : clazz.getClass().getSimpleName();
- debug.append(name.trim().length() > 0 ? name.trim() : clazz instanceof Class<?> ? ((Class<?>)clazz).getName() : clazz.getClass().getName());
- }
- if (slotId != null) {
- debug.append(" at "); //$NON-NLS-1$
- debug.append(slotId);
- }
- if (debugMode >= 0) {
- debug.append(" (Mode "); //$NON-NLS-1$
- debug.append(debugMode);
- debug.append(')');
- }
- debug.append('\n');
- debug.append('\t');
- }
- debug.append(message);
-
- return debug.toString();
- }
-
- /**
- * Write the trace message.
- *
- * @param message The trace message.
- * @param debugMode The debug mode.
- * @param slotId The name of the slot.
- * @param severity The severity. See {@link IStatus} for valid severity values.
- * @param clazz The class that calls this tracer.
- *
- * @see IStatus
- */
- protected void write(String message, int debugMode, String slotId, int severity, Object clazz) {
- String formattedMessage = getFormattedDebugMessage(message, debugMode, slotId, severity, clazz);
- if (severity == IStatus.ERROR || severity == IStatus.WARNING) {
- System.err.println(formattedMessage);
- }
- else {
- System.out.println(formattedMessage);
- }
- }
-
- /**
- * Trace the given message with the given debug mode and slot.
- *
- * @param message The trace message.
- * @param debugMode The debug mode.
- * @param slotId The name of the slot.
- * @param severity The severity. See {@link IStatus} for valid severity values.
- * @param clazz The class that calls this tracer.
- *
- * @see IStatus
- */
- public final void trace(String message, int debugMode, String slotId, int severity, Object clazz) {
- if (isEnabled(debugMode, slotId)) {
- write(message, debugMode, slotId, severity, clazz);
- }
- }
- }
-
- /**
- * Constructor.
- * <p>
- * Initializes the tracing handler with the given bundle identifier.
- *
- * @param identifier The bundle identifier or <code>null</code>.
- */
- public TraceHandler(String identifier) {
- this.identifier = identifier != null ? identifier : CoreBundleActivator.getUniqueIdentifier();
- Assert.isNotNull(this.identifier);
- }
-
- /**
- * Returns the identifier.
- */
- protected final String getIdentifier() {
- return identifier;
- }
-
- /**
- * Returns the tracer instance. Create a new tracer instance
- * on first invocation.
- *
- * @return The tracer instance.
- */
- protected Tracer getTracer() {
- if (tracer == null) {
- tracer = new Tracer(identifier);
- }
- return tracer;
- }
-
- /**
- * Return the current debug mode.
- */
- public final int getDebugMode() {
- return getTracer().getDebugMode();
- }
-
- /**
- * Check whether a trace slot is enabled. The debug mode defaults
- * to 0.
- *
- * @param slotId The name of the slot.
- *
- * @return <code>true</code> if the slot is enabled, <code>false</code> otherwise.
- */
- public final boolean isSlotEnabled(String slotId) {
- return isSlotEnabled(0, slotId);
- }
-
- /**
- * Check whether a trace slot is enabled with the given debug mode.
- *
- * @param debugMode The debug mode
- * @param slotId The name of the slot.
- *
- * @return <code>true</code> if the slot is enabled, <code>false</code> otherwise.
- */
- public final boolean isSlotEnabled(int debugMode, String slotId) {
- return getTracer().isEnabled(debugMode, slotId);
- }
-
- /**
- * Trace the given message.
- * <p>
- * The message severity will be {@link IStatus#INFO} and the message will be
- * traced unconditionally.
- *
- * @param message The message.
- * @param clazz The class that calls this tracer or <code>null</code>.
- */
- public final void trace(String message, Object clazz) {
- getTracer().trace(message, 0, null, IStatus.INFO, clazz);
- }
-
- /**
- * Trace the given message.
- * <p>
- * The message severity will be {@link IStatus#INFO}.
- *
- * @param message The message.
- * @param debugMode The minimum debug mode that has to be set to write out the message.
- * @param clazz The class that calls this tracer or <code>null</code>.
- */
- public final void trace(String message, int debugMode, Object clazz) {
- getTracer().trace(message, debugMode, null, IStatus.INFO, clazz);
- }
-
- /**
- * Trace the given message.
- * <p>
- * The message severity will be {@link IStatus#INFO} and the debug mode
- * will default to <code>0</code>.
- *
- * @param message The message.
- * @param slotId The slot that has to be enabled to write out the message.
- * @param clazz The class that calls this tracer or <code>null</code>.
- */
- public final void trace(String message, String slotId, Object clazz) {
- getTracer().trace(message, 0, slotId, IStatus.INFO, clazz);
- }
-
- /**
- * Trace the given message.
- *
- * @param message The message.
- * @param debugMode The minimum debug mode that has to be set to write out the message.
- * @param slotId The slot that has to be enabled to write out the message.
- * @param severity The severity. See {@link IStatus} for valid severity values.
- * @param clazz The class that calls this tracer or <code>null</code>.
- *
- * @see IStatus
- */
- public final void trace(String message, int debugMode, String slotId, int severity, Object clazz) {
- getTracer().trace(message, debugMode, slotId, severity, clazz);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.core.utils;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.osgi.service.environment.Constants;
-
-/**
- * Environment handling utility methods.
- */
-public class Env {
-
- // Reference to the monitor to lock if determining the native environment
- private final static Object ENV_GET_MONITOR = new Object();
-
- // Reference to the native environment with the case of the variable names preserved
- private static Map<String, String> nativeEnvironmentCasePreserved = null;
-
- /**
- * Returns the merged environment of the native environment and the passed
- * in environment. Passed in variables will overwrite the native environment
- * if the same variables are set there.
- * <p>
- * For use with terminals, the parameter <code>terminal</code> should be set to
- * <code>true</code>. In this case, the method will assure that the <code>TERM</code>
- * environment variable is always set to <code>ANSI</code> and is not overwritten
- * by the passed in environment.
- *
- * @param envp The environment to set on top of the native environment or <code>null</code>.
- * @param terminal <code>True</code> if used with an terminal, <code>false</code> otherwise.
- *
- * @return The merged environment.
- */
- public static String[] getEnvironment(String[] envp, boolean terminal) {
- // Get the cached native environment
- Map<String, String> nativeEnv = getNativeEnvironmentCasePreserved();
- // Make a copy of the native environment so it can be manipulated without changing
- // the cached environment
- Map<String, String> env = new LinkedHashMap<String, String>(nativeEnv);
- // Set the TERM environment variable if in terminal mode
- if (terminal) env.put("TERM", "xterm"); //$NON-NLS-1$ //$NON-NLS-2$
-
- // On Windows, the environment variable names are not case-sensitive. However,
- // we desire to preserve the original case. Build up a translation map between
- // an all lowercase name and the original environment name
- Map<String, String> k2n = null;
- if (Platform.OS_WIN32.equals(Platform.getOS())) {
- k2n = new HashMap<String, String>();
- for (String name : env.keySet()) {
- k2n.put(name.toLowerCase(), name);
- }
- }
-
- // If a "local" environment is provided, merge it with the native
- // environment.
- if (envp != null) {
- for (int i = 0; i < envp.length; i++) {
- // The full provided variable in form "name=value"
- String envpPart = envp[i];
- // Split the variable
- int eqIdx = envpPart.indexOf('=');
- if (eqIdx < 1)
- continue;
- String name = envpPart.substring(0, eqIdx);
- // Map the variable name to the real environment name (Windows only)
- if (Platform.OS_WIN32.equals(Platform.getOS())) {
- if (k2n.containsKey(name.toLowerCase())) {
- String candidate = k2n.get(name.toLowerCase());
- Assert.isNotNull(candidate);
- name = candidate;
- }
- // Filter out environment variables with bad names
- if ("".equals(name.trim()) || name.contains(":")) { //$NON-NLS-1$ //$NON-NLS-2$
- continue;
- }
- }
- // Get the variable value
- String value = envpPart.substring(eqIdx+1);
- // Don't overwrite the TERM variable if in terminal mode
- if (terminal && "TERM".equals(name)) continue; //$NON-NLS-1$
- // If a variable with the name does not exist, just append it
- if (!env.containsKey(name) && !"<unset>".equals(value)) { //$NON-NLS-1$
- env.put(name, value);
- } else if (env.containsKey(name)) {
- // If the value contains the special placeholder "<unset>", remove the variable from the environment
- if ("<unset>".equals(value)) {//$NON-NLS-1$
- env.remove(name);
- } else {
- // A variable with the name already exist, check if the value is different
- String oldValue = env.get(name);
- if (oldValue != null && !oldValue.equals(value) || oldValue == null && value != null) {
- env.put(name, value);
- }
- }
- }
- }
- }
-
- // Convert into an array of strings
- List<String> keys = new ArrayList<String>(env.keySet());
- // On Windows hosts, sort the environment keys
- if (Platform.OS_WIN32.equals(Platform.getOS())) Collections.sort(keys);
- Iterator<String> iter = keys.iterator();
- List<String> strings = new ArrayList<String>(env.size());
- StringBuilder buffer = null;
- while (iter.hasNext()) {
- String key = iter.next();
- buffer = new StringBuilder(key);
- buffer.append('=').append(env.get(key));
- strings.add(buffer.toString());
- }
-
- return strings.toArray(new String[strings.size()]);
- }
-
- /**
- * Determine the native environment.
- *
- * @return The native environment, or an empty map.
- */
- private static Map<String, String> getNativeEnvironmentCasePreserved() {
- synchronized (ENV_GET_MONITOR) {
- if (nativeEnvironmentCasePreserved == null) {
- nativeEnvironmentCasePreserved = new LinkedHashMap<String, String>();
- cacheNativeEnvironment(nativeEnvironmentCasePreserved);
- }
- return new LinkedHashMap<String, String>(nativeEnvironmentCasePreserved);
- }
- }
-
- /**
- * Query the native environment and store it to the specified cache.
- *
- * @param cache The environment cache. Must not be <code>null</code>.
- */
- private static void cacheNativeEnvironment(Map<String, String> cache) {
- Assert.isNotNull(cache);
-
- try {
- String nativeCommand = null;
- if (Platform.getOS().equals(Constants.OS_WIN32)) {
- nativeCommand = "cmd.exe /C set"; //$NON-NLS-1$
- } else if (!Platform.getOS().equals(Constants.OS_UNKNOWN)) {
- nativeCommand = "env"; //$NON-NLS-1$
- }
- if (nativeCommand == null) { return; }
- Process process = Runtime.getRuntime().exec(nativeCommand);
-
- // read process directly on other platforms
- // we need to parse out matching '{' and '}' for function declarations in .bash environments
- // pattern is [function name]=() { and we must find the '}' on its own line with no trailing ';'
- InputStream stream = process.getInputStream();
- InputStreamReader isreader = new InputStreamReader(stream);
- BufferedReader reader = new BufferedReader(isreader);
- try {
- String line = reader.readLine();
- while (line != null) {
- String key = null;
- String value = null;
- int func = line.indexOf("=()"); //$NON-NLS-1$
- if (func > 0) {
- key = line.substring(0, func);
- // scan until we find the closing '}' with no following chars
- value = line.substring(func + 1);
- do {
- line = reader.readLine();
- if (line == null)
- break;
- if (line.equals("}")) //$NON-NLS-1$
- value += ';';
- value += ' ' + line;
- } while (!line.equals("}")); //$NON-NLS-1$
- line = reader.readLine();
- } else {
- int separator = line.indexOf('=');
- if (separator > 0) {
- key = line.substring(0, separator);
- value = line.substring(separator + 1);
- StringBuilder bufValue = new StringBuilder(value);
- line = reader.readLine();
- if (line != null) {
- // this line has a '=' read ahead to check next line for '=', might be broken on more
- // than one line
- separator = line.indexOf('=');
- while (separator < 0) {
- bufValue.append(line.trim());
- line = reader.readLine();
- if (line == null) {
- // if next line read is the end of the file quit the loop
- break;
- }
- separator = line.indexOf('=');
- }
- }
- value = bufValue.toString();
- }
- }
- if (key != null) {
- cache.put(key, value);
- } else {
- line = reader.readLine();
- }
- }
- } finally {
- reader.close();
- }
- } catch (IOException e) {
- // Native environment-fetching code failed.
- // This can easily happen and is not useful to log.
- }
- }
-
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-org.eclipse.tm.terminal.view.ui/debugmode = 0
-org.eclipse.tm.terminal.view.ui/trace/outputStreamMonitor = false
-org.eclipse.tm.terminal.view.ui/trace/launchTerminalCommandHandler = false
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.tm.terminal.view.ui</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
- </natures>
- <filteredResources>
- <filter>
- <id>1329502074611</id>
- <name></name>
- <type>10</type>
- <matcher>
- <id>org.eclipse.ui.ide.multiFilter</id>
- <arguments>1.0-name-matches-false-false-target</arguments>
- </matcher>
- </filter>
- </filteredResources>
-</projectDescription>
+++ /dev/null
-#Fri Oct 07 16:14:53 CEST 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=4
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+++ /dev/null
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_Target Explorer Java STD
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=false
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=true
-sp_cleanup.remove_unused_imports=true
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-sp_cleanup.use_type_arguments=false
+++ /dev/null
-compilers.f.unresolved-features=1
-compilers.f.unresolved-plugins=1
-compilers.incompatible-environment=1
-compilers.p.build=1
-compilers.p.build.bin.includes=1
-compilers.p.build.encodings=2
-compilers.p.build.java.compiler=2
-compilers.p.build.java.compliance=1
-compilers.p.build.missing.output=2
-compilers.p.build.output.library=1
-compilers.p.build.source.library=1
-compilers.p.build.src.includes=1
-compilers.p.deprecated=1
-compilers.p.discouraged-class=1
-compilers.p.internal=1
-compilers.p.missing-packages=1
-compilers.p.missing-version-export-package=2
-compilers.p.missing-version-import-package=1
-compilers.p.missing-version-require-bundle=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=1
-compilers.p.unknown-class=1
-compilers.p.unknown-element=1
-compilers.p.unknown-identifier=1
-compilers.p.unknown-resource=1
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.s.create-docs=false
-compilers.s.doc-folder=doc
-compilers.s.open-tags=1
-eclipse.preferences.version=1
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.tm.terminal.view.ui;singleton:=true
-Bundle-Version: 4.2.0.qualifier
-Bundle-Activator: org.eclipse.tm.terminal.view.ui.activator.UIPlugin
-Bundle-Vendor: %providerName
-Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
- org.eclipse.core.runtime;bundle-version="3.8.0",
- org.eclipse.core.resources;bundle-version="3.8.1";resolution:=optional,
- org.eclipse.core.variables;bundle-version="3.2.600",
- org.eclipse.debug.ui;bundle-version="3.8.1";resolution:=optional,
- org.eclipse.egit.ui;bundle-version="2.0.0";resolution:=optional,
- org.eclipse.tm.terminal.view.core;bundle-version="4.0.0",
- org.eclipse.tm.terminal.control;bundle-version="4.0.0",
- org.eclipse.ui;bundle-version="3.8.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ActivationPolicy: lazy
-Bundle-Localization: plugin
-Export-Package: org.eclipse.tm.terminal.view.ui.actions,
- org.eclipse.tm.terminal.view.ui.activator;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.controls,
- org.eclipse.tm.terminal.view.ui.help,
- org.eclipse.tm.terminal.view.ui.interfaces,
- org.eclipse.tm.terminal.view.ui.interfaces.tracing;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.internal;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.internal.dialogs;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.internal.handler;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.launcher,
- org.eclipse.tm.terminal.view.ui.listeners,
- org.eclipse.tm.terminal.view.ui.local.showin;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.manager,
- org.eclipse.tm.terminal.view.ui.nls;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.panels,
- org.eclipse.tm.terminal.view.ui.preferences;x-internal:=true,
- org.eclipse.tm.terminal.view.ui.services,
- org.eclipse.tm.terminal.view.ui.streams,
- org.eclipse.tm.terminal.view.ui.tabs,
- org.eclipse.tm.terminal.view.ui.view,
- org.eclipse.tm.terminal.view.ui.view.showin;x-internal:=true
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>May 24, 2012</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-###############################################################################
-# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- plugin.properties,\
- plugin.xml,\
- about.html,\
- icons/,\
- contexts.xml
-src.includes = schema/
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<contexts>
- <context id="LaunchTerminalSettingsDialog">
- <description>Select the terminal type and specify the connections settings to connect a new terminal.</description>
- </context>
- <context id="EncodingSelectionDialog">
- <description>Select the new encoding for the active terminal.</description>
- </context>
- <context id="ExternalExecutablesDialog">
- <description>Add or modify an external executable added to the 'Show in Local Terminal' context menu.</description>
- </context>
-</contexts>
+++ /dev/null
-##################################################################################
-# Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-##################################################################################
-
-pluginName = Terminal View
-providerName = Eclipse.org - Target Management
-
-# ----- Terminal View -----
-
-ViewCategory.name=Terminal
-
-TerminalsView.name=Terminal
-TerminalsView.name.old=Terminals (Old)
-TerminalsView.context.name=In Terminal View
-TerminalsView.context.description=Show modified keyboard shortcuts in context menu
-
-# ----- Terminal Connectors -----
-
-TerminalConnector.streams=Streams Connector (hidden)
-
-# ----- Terminal Launcher Delegates -----
-
-StreamsLauncherDelegate.label=Streams Terminal
-
-# ----- Commands and Menu contributions -----
-command.category.name=Terminal Commands
-
-toolbar.terminal.label=Terminal
-
-command.launch.selection.name=Open Terminal on Selection
-command.launch.name=Open Terminal
-command.launch.label=Open Terminal...
-command.launch.tooltip=Open a Terminal
-
-command.disconnect.name=Disconnect Terminal
-command.disconnect.label=Disconnect
-command.disconnect.tooltip=Disconnect Terminal Connection
-
-command.newview.name=New Terminal View
-
-menu.showIn.label = Show in Local Terminal
-menu.showIn.mnemonic=I
-
-LocalLauncherDelegate.label=Local Terminal
-
-command.launch.name=Open Local Terminal on Selection
-
-menu.showIn.localterminal.label = Terminal
-
-TerminalConnector.local=Local
-
-# ----- Extension Points -----
-
-ExtensionPoint.launcherDelegates.name=Terminal Launcher Delegates
-
-# ----- Activity contributions -----
-
-activities.category.terminals.name=Terminal
-activities.category.terminals.description=Use the terminal to connect to remote hosts via telnet, ssh and others.
-
-activities.activity.terminals.views.name=Terminal Views
-activities.activity.terminals.views.description=Terminal related views.
-
-# ----- Preference Pages -----
-
-preference.page.name=Local Terminal
-
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-
-<!-- Extension points -->
- <extension-point id="launcherDelegates" name="%ExtensionPoint.launcherDelegates.name" schema="schema/launcherDelegates.exsd"/>
-
-<!-- View contributions -->
- <extension point="org.eclipse.ui.views">
- <category
- id="org.eclipse.tm.terminal.view.ui.views.category"
- name="%ViewCategory.name">
- </category>
-
- <view
- allowMultiple="true"
- category="org.eclipse.tm.terminal.view.ui.views.category"
- class="org.eclipse.tm.terminal.view.ui.view.TerminalsView"
- icon="icons/eview16/terminal_view.gif"
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- name="%TerminalsView.name">
- </view>
-
- <!-- Bug 466644: Contribute another view with the old (TCF) ID to handle the ID change -->
- <!-- The sole purpose of this view is to close itself when it's in an old workspace/persepctive -->
- <view
- allowMultiple="true"
- class="org.eclipse.tm.terminal.view.ui.view.OldTerminalsViewHandler"
- icon="icons/eview16/terminal_view.gif"
- id="org.eclipse.tcf.te.ui.terminals.TerminalsView"
- name="%TerminalsView.name.old">
- </view>
- </extension>
-
-<!-- Perspective extension contributions -->
- <extension point="org.eclipse.ui.perspectiveExtensions">
- <perspectiveExtension targetID="org.eclipse.tcf.te.ui.perspective">
- <!-- Register the view shortcuts -->
- <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- <!-- Place the Terminal view relative to the Task List view -->
- <view
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.views.TaskList"
- visible="false">
- </view>
- </perspectiveExtension>
-
- <perspectiveExtension targetID="org.eclipse.ui.resourcePerspective">
- <!-- Register the view shortcuts -->
- <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- <!-- Place the Terminal view relative to the Task List view -->
- <view
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.views.TaskList"
- visible="false">
- </view>
- </perspectiveExtension>
-
- <perspectiveExtension targetID="org.eclipse.debug.ui.DebugPerspective">
- <!-- Register the view shortcuts -->
- <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- <!-- Place the Terminal view relative to the Task List view -->
- <view
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.views.TaskList"
- visible="false">
- </view>
- </perspectiveExtension>
-
- <perspectiveExtension targetID="org.eclipse.cdt.ui.CPerspective">
- <!-- Register the view shortcuts -->
- <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- <!-- Place the Terminal view relative to the Task List view -->
- <view
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.views.TaskList"
- visible="false">
- </view>
- </perspectiveExtension>
-
- <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective">
- <!-- Register the view shortcuts -->
- <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- <!-- Place the Terminal view relative to the Task List view -->
- <view
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.views.ProblemView"
- visible="false">
- </view>
- </perspectiveExtension>
-
- <perspectiveExtension targetID="org.eclipse.pde.ui.PDEPerspective">
- <!-- Register the view shortcuts -->
- <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- <!-- Place the Terminal view relative to the Task List view -->
- <view
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.views.ProblemView"
- visible="false">
- </view>
- </perspectiveExtension>
-
- <perspectiveExtension targetID="*">
- <!-- Show In shortcut -->
- <showInPart id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- </perspectiveExtension>
- </extension>
-
-<!-- Terminal connector contributions -->
- <extension point="org.eclipse.tm.terminal.control.connectors">
- <connector
- name="%TerminalConnector.streams"
- id="org.eclipse.tm.terminal.connector.streams.StreamsConnector"
- hidden="true"
- class="org.eclipse.tm.terminal.view.ui.streams.StreamsConnector"/>
- </extension>
-
-<!-- Preferences contributions -->
- <extension point="org.eclipse.core.expressions.propertyTesters">
- <propertyTester
- class="org.eclipse.tm.terminal.view.ui.internal.PropertyTester"
- id="org.eclipse.tm.terminal.view.ui.PropertyTester"
- namespace="org.eclipse.tm.terminal.view.ui"
- properties="hasApplicableLauncherDelegates,canDisconnect"
- type="java.lang.Object">
- </propertyTester>
- </extension>
- <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
- <delegate
- class="org.eclipse.tm.terminal.view.ui.streams.StreamsLauncherDelegate"
- hidden="true"
- id="org.eclipse.tm.terminal.connector.streams.launcher.streams"
- label="%StreamsLauncherDelegate.label">
- </delegate>
- </extension>
- <extension point="org.eclipse.ui.menus">
- <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
- <toolbar
- id="org.eclipse.tm.terminal.view.ui.toolbar"
- label="%toolbar.terminal.label">
- <command
- commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
- icon="platform:/plugin/org.eclipse.ui.console/icons/full/eview16/console_view.gif"
- id="org.eclipse.tm.terminal.view.ui.commands.launchToolbar"
- label="%command.launch.label"
- style="push"
- tooltip="%command.launch.tooltip">
- </command>
- </toolbar>
- </menuContribution>
- <menuContribution locationURI="toolbar:org.eclipse.tm.terminal.view.ui.TerminalsView">
- <command
- commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
- icon="platform:/plugin/org.eclipse.ui.console/icons/full/eview16/console_view.gif"
- id="org.eclipse.tm.terminal.view.ui.commands.launchToolbarTerminalsView"
- label="%command.launch.label"
- style="push"
- tooltip="%command.launch.tooltip">
- </command>
- <command
- commandId="org.eclipse.tm.terminal.view.ui.command.disconnect"
- icon="icons/elcl16/disconnect.gif"
- id="org.eclipse.tm.terminal.view.ui.commands.disconnect"
- label="%command.disconnect.label"
- style="push"
- tooltip="%command.disconnect.tooltip">
- </command>
- </menuContribution>
- <menuContribution locationURI="popup:org.eclipse.tm.terminal.view.ui.TerminalsView?after=additions">
- <command
- commandId="org.eclipse.tm.terminal.maximize"
- id="org.eclipse.tm.terminal.view.ui.commands.maximizePart"
- label="Maximize View"
- style="push">
- </command>
- <command
- commandId="org.eclipse.tm.terminal.quickaccess"
- id="org.eclipse.tm.terminal.view.ui.commands.quickAccess"
- label="Quick Access"
- style="push">
- </command>
- </menuContribution>
-
- <!-- Project Explorer "Show In" contribution -->
- <menuContribution locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?before=group.edit">
- <menu
- id="org.eclipse.tm.terminal.view.ui.ProjectExplorer.menu.showIn"
- label="%menu.showIn.label"
- mnemonic="%menu.showIn.mnemonic">
- <separator name="additions" visible="false"/>
- <dynamic
- class="org.eclipse.tm.terminal.view.ui.local.showin.DynamicContributionItems"
- id="org.eclipse.tm.terminal.connector.local.LocalLauncherDynamicContributionItems">
- <visibleWhen
- checkEnabled="false">
- <or>
- <with variable="selection">
- <iterate operator="and" ifEmpty="false">
- <adapt type="org.eclipse.core.resources.IResource">
- <not>
- <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
- See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
- <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
- </not>
- </adapt>
- </iterate>
- </with>
- <and>
- <with variable="selection">
- <iterate operator="and" ifEmpty="false">
- <adapt type="org.eclipse.core.resources.IResource">
- <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
- See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
- <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
- </adapt>
- </iterate>
- </with>
- <with
- variable="org.eclipse.tm.terminal.external.executable.configured">
- <equals
- value="TRUE">
- </equals>
- </with>
- </and>
- </or>
- </visibleWhen>
- </dynamic>
- </menu>
- </menuContribution>
-
- <!-- JDT Package Explorer "Show In" contribution -->
- <menuContribution locationURI="popup:org.eclipse.jdt.ui.PackageExplorer?before=group.edit">
- <menu
- id="org.eclipse.tm.terminal.view.ui.PackageExplorer.menu.showIn"
- label="%menu.showIn.label"
- mnemonic="%menu.showIn.mnemonic">
- <separator name="additions" visible="false"/>
- <dynamic
- class="org.eclipse.tm.terminal.view.ui.local.showin.DynamicContributionItems"
- id="org.eclipse.tm.terminal.connector.local.LocalLauncherDynamicContributionItems">
- <visibleWhen
- checkEnabled="false">
- <or>
- <with variable="selection">
- <iterate operator="and" ifEmpty="false">
- <adapt type="org.eclipse.core.resources.IResource">
- <not>
- <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
- See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
- <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
- </not>
- </adapt>
- </iterate>
- </with>
- <and>
- <with variable="selection">
- <iterate operator="and" ifEmpty="false">
- <adapt type="org.eclipse.core.resources.IResource">
- <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
- See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
- <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
- </adapt>
- </iterate>
- </with>
- <with
- variable="org.eclipse.tm.terminal.external.executable.configured">
- <equals
- value="TRUE">
- </equals>
- </with>
- </and>
- </or>
- </visibleWhen>
- </dynamic>
- </menu>
- </menuContribution>
-
- </extension>
- <extension point="org.eclipse.ui.commands">
- <category
- id="org.eclipse.tm.terminal.view.ui.commands.category"
- name="%command.category.name">
- </category>
-
- <command
- categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
- helpContextId="org.eclipse.tm.terminal.view.ui.command_Launch"
- id="org.eclipse.tm.terminal.view.ui.command.launch"
- name="%command.launch.selection.name">
- </command>
- <command
- categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
- helpContextId="org.eclipse.tm.terminal.view.ui.command_Launch"
- id="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
- name="%command.launch.name">
- </command>
- <command
- categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
- helpContextId="org.eclipse.tm.terminal.view.ui.command_Disconnect"
- id="org.eclipse.tm.terminal.view.ui.command.disconnect"
- name="%command.disconnect.name">
- </command>
- <command
- categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
- helpContextId="org.eclipse.tm.terminal.view.ui.command_NewView"
- id="org.eclipse.tm.terminal.view.ui.command.newview"
- name="%command.newview.name">
- </command>
- </extension>
- <extension point="org.eclipse.ui.bindings">
- <key
- commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
- contextId="org.eclipse.ui.contexts.window"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="CTRL+SHIFT+M3+T"/> <!-- Bug 435111: Don't use M1 since COMMAND+Option T already taken on Mac -->
- </extension>
- <extension point="org.eclipse.ui.handlers">
- <handler
- class="org.eclipse.tm.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
- commandId="org.eclipse.tm.terminal.view.ui.command.launch">
- </handler>
- <handler
- class="org.eclipse.tm.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
- commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar">
- </handler>
- <handler
- class="org.eclipse.tm.terminal.view.ui.internal.handler.DisconnectTerminalCommandHandler"
- commandId="org.eclipse.tm.terminal.view.ui.command.disconnect">
- <enabledWhen>
- <with variable="activePart">
- <instanceof value="org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView"/>
- <test property="org.eclipse.tm.terminal.view.ui.canDisconnect" value="true"/>
- </with>
- </enabledWhen>
- </handler>
-
- <handler
- class="org.eclipse.tm.terminal.view.ui.internal.handler.MaximizeViewHandler"
- commandId="org.eclipse.tm.terminal.maximize">
- <activeWhen>
- <with variable="activePartId">
- <equals value="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- </with>
- </activeWhen>
- </handler>
-
- <handler
- class="org.eclipse.tm.terminal.view.ui.internal.handler.QuickAccessHandler"
- commandId="org.eclipse.tm.terminal.quickaccess">
- <activeWhen>
- <with variable="activePartId">
- <equals value="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- </with>
- </activeWhen>
- </handler>
-
- <handler
- class="org.eclipse.tm.terminal.view.ui.internal.handler.NewTerminalViewHandler"
- commandId="org.eclipse.tm.terminal.view.ui.command.newview">
- <activeWhen>
- <with variable="activePartId">
- <equals value="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
- </with>
- </activeWhen>
- </handler>
- </extension>
- <extension point="org.eclipse.help.contexts">
- <contexts
- file="contexts.xml">
- </contexts>
- </extension>
- <extension point="org.eclipse.ui.activities">
- <category
- description="%activities.category.terminals.description"
- id="org.eclipse.tm.terminal.view.ui.category"
- name="%activities.category.terminals.name">
- </category>
-
- <activity
- description="%activities.activity.terminals.views.description"
- id="org.eclipse.tm.terminal.view.ui.activity.views"
- name="%activities.activity.terminals.views.name">
- </activity>
-
- <activityPatternBinding
- activityId="org.eclipse.tm.terminal.view.ui.activity.views"
- pattern="org\.eclipse\.tm\.terminal\.view\.ui/org\.eclipse\.tm\.terminal\.view\.ui\.TerminalsView">
- </activityPatternBinding>
- <activityPatternBinding
- activityId="org.eclipse.tm.terminal.view.ui.activity.views"
- pattern="org\.eclipse\.tm\.terminal\.view\.ui/org\.eclipse\.tm\.terminal\.view\.ui\.toolbar">
- </activityPatternBinding>
- <activityPatternBinding
- activityId="org.eclipse.tm.terminal.view.ui.activity.views"
- pattern="org\.eclipse\.tm\.terminal\.view\.ui/org\.eclipse\.tm\.terminal\.view\.ui\.commands\..*">
- </activityPatternBinding>
-
- <categoryActivityBinding
- activityId="org.eclipse.tm.terminal.view.ui.activity.views"
- categoryId="org.eclipse.tm.terminal.view.ui.category">
- </categoryActivityBinding>
-
- <defaultEnablement
- id="org.eclipse.tm.terminal.view.ui.activity.views">
- </defaultEnablement>
-
- <!-- Hide the old TCF Terminals (Migration Only) View from the View Shortcuts Menu -->
- <activity
- id="org.eclipse.tm.terminal.view.ui.activity.oldview"
- name="Terminal Views (Old)">
- </activity>
-
- <activityPatternBinding
- activityId="org.eclipse.tm.terminal.view.ui.activity.oldview"
- pattern=".*/org\.eclipse\.tcf\.te\.ui\.terminals\.TerminalsView">
- </activityPatternBinding>
-
- <!-- TBD Remove this category binding to hide the Migration Capability from the Preferences -->
- <!--
- <categoryActivityBinding
- activityId="org.eclipse.tm.terminal.view.ui.activity.oldview"
- categoryId="org.eclipse.tm.terminal.view.ui.category">
- </categoryActivityBinding>
- -->
- </extension>
-
- <extension point="org.eclipse.ui.contexts">
- <context
- id="org.eclipse.tm.terminal.view.ui.TerminalsView"
- name="%TerminalsView.context.name"
- description="%TerminalsView.context.description"
- parentId="org.eclipse.ui.contexts.window">
- </context>
- </extension>
- <extension
- point="org.eclipse.ui.preferencePages">
- <page
- category="org.eclipse.tm.terminal.TerminalPreferencePage"
- class="org.eclipse.tm.terminal.view.ui.preferences.PreferencePage"
- id="org.eclipse.tm.terminal.view.ui.preferences"
- name="%preference.page.name">
- </page>
- </extension>
- <extension point="org.eclipse.core.runtime.preferences">
- <initializer class="org.eclipse.tm.terminal.view.ui.preferences.PreferencesInitializer"/>
- </extension>
-
- <extension
- point="org.eclipse.ui.services">
- <sourceProvider
- provider="org.eclipse.tm.terminal.view.ui.internal.ExternalExecutablesState">
- <variable
- name="org.eclipse.tm.terminal.external.executable.configured"
- priorityLevel="workbench">
- </variable>
- </sourceProvider>
- </extension>
-</plugin>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.eclipse.tm.terminal</groupId>
- <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
- <version>4.2.0-SNAPSHOT</version>
- <relativePath>../../admin/pom-build.xml</relativePath>
- </parent>
-
- <version>4.2.0-SNAPSHOT</version>
- <artifactId>org.eclipse.tm.terminal.view.ui</artifactId>
- <packaging>eclipse-plugin</packaging>
-</project>
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.tcf.te.ui.terminals" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
- <appinfo>
- <meta.schema plugin="org.eclipse.tcf.te.ui.terminals" id="launcherDelegates" name="Terminal Launcher Delegates"/>
- </appinfo>
- <documentation>
- This extension point is used to contribute terminal launcher delegates.
-<p>
-Terminal launcher delegates contributes terminal settings widget to the <code>LaunchTerminalSettingsDialog</code> required to open a remote terminal through a specific communication channel, like TCF or SSH.
- </documentation>
- </annotation>
-
- <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
-
- <element name="extension">
- <annotation>
- <appinfo>
- <meta.element />
- </appinfo>
- </annotation>
- <complexType>
- <sequence>
- <element ref="delegate" minOccurs="1" maxOccurs="unbounded"/>
- </sequence>
- <attribute name="point" type="string" use="required">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="id" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="name" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- <appinfo>
- <meta.attribute translatable="true"/>
- </appinfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="delegate">
- <annotation>
- <documentation>
- Declares a terminal launcher delegate contribution.
- </documentation>
- </annotation>
- <complexType>
- <sequence>
- <element ref="class" minOccurs="0" maxOccurs="1"/>
- <element ref="description" minOccurs="0" maxOccurs="1"/>
- <element ref="enablement" minOccurs="0" maxOccurs="1"/>
- </sequence>
- <attribute name="id" type="string" use="required">
- <annotation>
- <documentation>
- The unique id of the terminal launcher delegate contribution.
- </documentation>
- </annotation>
- </attribute>
- <attribute name="label" type="string">
- <annotation>
- <documentation>
- The label representing the terminal launcher delegate within the UI.
- </documentation>
- </annotation>
- </attribute>
- <attribute name="class" type="string">
- <annotation>
- <documentation>
- The class that implements <code>org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate</code> or extends <code>org.eclipse.tcf.te.ui.terminals.launcher.AbstractLauncherDelegate</code>.
-<p>
-The terminal launcher delegate implementation class must be specified either by the class attribute or the class child element!
- </documentation>
- <appinfo>
- <meta.attribute kind="java" basedOn="org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate:org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate"/>
- </appinfo>
- </annotation>
- </attribute>
- <attribute name="hidden" type="boolean">
- <annotation>
- <documentation>
- If <code>true</code>, than the terminal launcher delegate is not visible in the UI, even if a possible <code>enablement</code> will evaluate to <code>true</code>.
- </documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="description" type="string">
- <annotation>
- <documentation>
- A short description of the terminal connector type to be presented in the UI.
- </documentation>
- </annotation>
- </element>
-
- <element name="class">
- <annotation>
- <documentation>
- Used when creating an <code>IExecutableExtension</code> with a named parameter, or more than one.
- </documentation>
- </annotation>
- <complexType>
- <sequence>
- <element ref="parameter" minOccurs="0" maxOccurs="unbounded"/>
- </sequence>
- <attribute name="class" type="string">
- <annotation>
- <documentation>
- The class that implements <code>org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate</code> or extends <code>org.eclipse.tcf.te.ui.terminals.launcher.AbstractLauncherDelegate</code>.
-<p>
-The terminal launcher delegate implementation class must be specified either by the class attribute or the class child element!
- </documentation>
- <appinfo>
- <meta.attribute kind="java" basedOn="org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate:org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate"/>
- </appinfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="parameter">
- <annotation>
- <documentation>
- A parameter for an <code>IExecutableExtension</code>.
- </documentation>
- </annotation>
- <complexType>
- <attribute name="name" type="string" use="required">
- <annotation>
- <documentation>
- <p>The parameter name.</p>
- </documentation>
- </annotation>
- </attribute>
- <attribute name="value" type="string" use="required">
- <annotation>
- <documentation>
- <p>The parameter value.</p>
- </documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <annotation>
- <appinfo>
- <meta.section type="since"/>
- </appinfo>
- <documentation>
- Target Explorer 1.0.0
- </documentation>
- </annotation>
-
- <annotation>
- <appinfo>
- <meta.section type="examples"/>
- </appinfo>
- <documentation>
- This is an example of the extension point usage:
-<p>
-<pre><code>
- <extension point="org.eclipse.tcf.te.ui.terminals.launcherDelegates">
- <delegate
- id="org.eclipse.tcf.te.ui.terminals.launcher.tcf"
- class="org.eclipse.tcf.te.tcf.terminals.ui.internal.TerminalLauncherDelegate"
- label="TCF Terminal">
- <enablement>
- ...
- </enablement>
- </delegate>
- </extension>
-</code></pre>
- </documentation>
- </annotation>
-
- <annotation>
- <appinfo>
- <meta.section type="apiinfo"/>
- </appinfo>
- <documentation>
- The provider of a launcher delegate must implement <samp>org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate</samp>.
- </documentation>
- </annotation>
-
-
- <annotation>
- <appinfo>
- <meta.section type="copyright"/>
- </appinfo>
- <documentation>
- Copyright (c) 2011 Wind River Systems, Inc. and others.
-
-All rights reserved.
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v1.0 which accompanies this distribution, and is
-available at http://www.eclipse.org/legal/epl-v10.html.
- </documentation>
- </annotation>
-
-</schema>
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.actions;
-
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderToolbarHandler;
-import org.eclipse.ui.ISources;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.handlers.IHandlerService;
-
-/**
- * Abstract terminal action wrapper implementation.
- */
-public abstract class AbstractAction extends AbstractTerminalAction {
- // Reference to the parent toolbar handler
- private final TabFolderToolbarHandler parent;
-
- /**
- * Constructor.
- *
- * @param parent
- * The parent toolbar handler instance. Must not be
- * <code>null</code>.
- * @param id
- * The terminal action id. Must not be <code>null</code>.
- */
- public AbstractAction(TabFolderToolbarHandler parent, String id) {
- super(id);
-
- Assert.isNotNull(parent);
- this.parent = parent;
- }
-
- /**
- * Returns the parent toolbar handler.
- *
- * @return The parent toolbar handler.
- */
- protected final TabFolderToolbarHandler getParent() {
- return parent;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getParent().getActiveTerminalViewControl();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
- */
- @Override
- public void run() {
- // Get the active tab item from the tab folder manager
- TabFolderManager manager = (TabFolderManager)getParent().getAdapter(TabFolderManager.class);
- if (manager != null) {
- // If we have the active tab item, we can get the active terminal control
- CTabItem activeTabItem = manager.getActiveTabItem();
- if (activeTabItem != null) {
- // And execute the command
- executeCommand(activeTabItem.getData("customData")); //$NON-NLS-1$
- }
- }
- }
-
- /**
- * Executes the command for the given data node as current and active menu selection.
- * <p>
- * <b>Node:</b> If the provided data node is <code>null</code>, the method will trigger
- * the command with an empty selection.
- *
- * @param data The terminal custom data node or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected void executeCommand(Object data) {
- // Get the command service from the workbench
- ICommandService service = (ICommandService)PlatformUI.getWorkbench().getAdapter(ICommandService.class);
- if (service != null && getCommandId() != null) {
- // Get the command
- final Command command = service.getCommand(getCommandId());
- if (command != null && command.isDefined()) {
- IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
- Assert.isNotNull(handlerSvc);
-
- // Construct a selection element
- IStructuredSelection selection = data != null ? new StructuredSelection(data) : new StructuredSelection();
- // Construct the application context
- EvaluationContext context = new EvaluationContext(handlerSvc.getCurrentState(), selection);
- // Apply the selection to the "activeMenuSelection" and "selection" variable too
- context.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
- context.addVariable(ISources.ACTIVE_MENU_SELECTION_NAME, selection);
- // Allow plug-in activation
- context.setAllowPluginActivation(true);
- // And execute the event
- try {
- ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
- Assert.isNotNull(pCmd);
-
- handlerSvc.executeCommandInContext(pCmd, null, context);
- } catch (Exception e) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.AbstractAction_error_commandExecutionFailed, getCommandId(), e.getLocalizedMessage()),
- e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- }
- }
-
- /**
- * Returns the command id of the command to execute.
- *
- * @return The command id. Must be never <code>null</code>.
- */
- protected abstract String getCommandId();
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
- */
- @Override
- public void updateAction(boolean aboutToShow) {
- // Ignore the flag given from outside. We have to decide ourself
- // what the enabled state of the action is
- boolean enabled = getTarget() != null;
-
- // If a target terminal control is available, we need to find the corresponding
- // VLM target object which we need to trigger the handler
- if (enabled) {
- // The action will be enabled if we can determine the VLM target object
- enabled = false;
- // Get the active tab item from the tab folder manager
- TabFolderManager manager = (TabFolderManager)getParent().getAdapter(TabFolderManager.class);
- if (manager != null) {
- // If we have the active tab item, we can get the active terminal control
- CTabItem activeTabItem = manager.getActiveTabItem();
- if (activeTabItem != null) {
- enabled = checkEnableAction(activeTabItem.getData("customData")); //$NON-NLS-1$
- }
- }
- }
-
- setEnabled(enabled);
- }
-
- /**
- * Checks if the action should be enabled based on the given terminal data object.
- *
- * @param data The terminal data node or <code>null</code>.
- * @return <code>True</code> to enable the action, <code>false</code> otherwise.
- */
- protected boolean checkEnableAction(Object data) {
- return data != null;
- }
-
- /**
- * Returns if the action is a separator. Returning <code>true</code> here
- * means that an additional separator toolbar element is added right or
- * above of the action.
- *
- * @return <code>True</code> if the action is separating the parent contribution manager, <code>false</code> otherwise.
- */
- public boolean isSeparator() {
- return false;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.actions;
-
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.handlers.IHandlerService;
-
-/**
- * Opens a new terminal view with a new secondary view ID.
- *
- * @since 4.1
- */
-public class NewTerminalViewAction extends AbstractTerminalAction {
-
- //private ITerminalsView view = null;
-
- /**
- * Constructor.
- */
- public NewTerminalViewAction(ITerminalsView view) {
- super(null, NewTerminalViewAction.class.getName(), IAction.AS_PUSH_BUTTON);
-
- //this.view = view;
- setupAction(Messages.NewTerminalViewAction_menu, Messages.NewTerminalViewAction_tooltip,
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_NewTerminalView_Hover),
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_NewTerminalView_Enabled),
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_NewTerminalView_Disabled), true);
- setEnabled(true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
- */
- @SuppressWarnings("cast")
- @Override
- public void run() {
- ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
- Command command = service != null ? service.getCommand("org.eclipse.tm.terminal.view.ui.command.newview") : null; //$NON-NLS-1$
- if (command != null && command.isDefined() && command.isEnabled()) {
- try {
- ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
- Assert.isNotNull(pCmd);
- IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
- Assert.isNotNull(handlerSvc);
- handlerSvc.executeCommandInContext(pCmd, null, handlerSvc.getCurrentState());
- } catch (Exception e) {
- // If the platform is in debug mode, we print the exception to the log view
- if (Platform.inDebugMode()) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- Messages.AbstractTriggerCommandHandler_error_executionFailed, e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- }
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.actions;
-
-import java.io.UnsupportedEncodingException;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.window.Window;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.ui.internal.dialogs.EncodingSelectionDialog;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-
-/**
- * Terminal control select encoding action implementation.
- */
-public class SelectEncodingAction extends AbstractTerminalAction {
- // Reference to the parent tab folder manager
- private final TabFolderManager tabFolderManager;
-
- /**
- * Constructor.
- *
- * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>.
- */
- public SelectEncodingAction(TabFolderManager tabFolderManager) {
- super(null, SelectEncodingAction.class.getName(), IAction.AS_PUSH_BUTTON);
-
- Assert.isNotNull(tabFolderManager);
- this.tabFolderManager = tabFolderManager;
-
- setupAction(Messages.SelectEncodingAction_menu,
- Messages.SelectEncodingAction_tooltip,
- (ImageDescriptor)null,
- (ImageDescriptor)null,
- (ImageDescriptor)null,
- true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
- */
- @Override
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target == null) return;
-
- EncodingSelectionDialog dialog = new EncodingSelectionDialog(null);
- dialog.setEncoding(target.getEncoding());
- if (dialog.open() == Window.OK) {
- try {
- target.setEncoding(dialog.getEncoding());
- tabFolderManager.updateStatusLine();
- }
- catch (UnsupportedEncodingException e) { e.printStackTrace(); }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
- */
- @Override
- public void updateAction(boolean aboutToShow) {
- setEnabled(aboutToShow
- && getTarget() != null && getTarget().getState() == TerminalState.CONNECTED);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-
-/**
- * Terminal console tab scroll lock action.
- */
-public class TabScrollLockAction extends AbstractTerminalAction {
-
- /**
- * Constructor.
- */
- public TabScrollLockAction() {
- super(null, TabScrollLockAction.class.getName(), IAction.AS_RADIO_BUTTON);
-
- setupAction(Messages.TabScrollLockAction_text,
- Messages.TabScrollLockAction_tooltip,
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_ScrollLock_Hover),
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_ScrollLock_Enabled),
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_ScrollLock_Disabled),
- true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
- */
- @Override
- public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.setScrollLock(!target.isScrollLock());
- setChecked(target.isScrollLock());
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
- */
- @Override
- public void updateAction(boolean aboutToShow) {
- setEnabled(aboutToShow && getTarget() != null && getTarget().getState() == TerminalState.CONNECTED);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.tm.terminal.view.ui.tabs.TabCommandFieldHandler;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-
-/**
- * Toggle command input field.
- */
-public class ToggleCommandFieldAction extends AbstractTerminalAction {
- private ITerminalsView view = null;
-
- /**
- * Constructor.
- */
- public ToggleCommandFieldAction(ITerminalsView view) {
- super(null, ToggleCommandFieldAction.class.getName(), IAction.AS_CHECK_BOX);
-
- this.view = view;
- setupAction(Messages.ToggleCommandFieldAction_menu, Messages.ToggleCommandFieldAction_toolTip,
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_ToggleCommandField_Hover),
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_ToggleCommandField_Enabled),
- UIPlugin.getImageDescriptor(ImageConsts.ACTION_ToggleCommandField_Disabled), true);
-
- TabCommandFieldHandler handler = getCommandFieldHandler();
- setChecked(handler != null && handler.hasCommandInputField());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.IAction#run()
- */
- @Override
- public void run() {
- TabCommandFieldHandler handler = getCommandFieldHandler();
- if (handler != null) {
- handler.setCommandInputField(!handler.hasCommandInputField());
- }
- setChecked(handler != null && handler.hasCommandInputField());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
- */
- @Override
- public void updateAction(boolean aboutToShow) {
- TabCommandFieldHandler handler = getCommandFieldHandler();
- ITerminalViewControl target = getTarget();
- setEnabled(aboutToShow && handler != null
- && target != null && target.getState() == TerminalState.CONNECTED);
- setChecked(handler != null && handler.hasCommandInputField());
- }
-
- /**
- * Returns the command input field handler for the active tab.
- *
- * @return The command input field handler or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected TabCommandFieldHandler getCommandFieldHandler() {
- TabCommandFieldHandler handler = null;
- // Get the active tab item from the tab folder manager
- TabFolderManager manager = (TabFolderManager)view.getAdapter(TabFolderManager.class);
- if (manager != null) {
- // If we have the active tab item, we can get the active terminal control
- CTabItem activeTabItem = manager.getActiveTabItem();
- if (activeTabItem != null && !activeTabItem.isDisposed()) {
- handler = manager.getTabCommandFieldHandler(activeTabItem);
- }
- }
- return handler;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.activator;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.core.preferences.ScopedEclipsePreferences;
-import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
-import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
-import org.eclipse.tm.terminal.view.ui.listeners.WorkbenchWindowListener;
-import org.eclipse.tm.terminal.view.ui.view.TerminalsView;
-import org.eclipse.tm.terminal.view.ui.view.TerminalsViewMementoHandler;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IWindowListener;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchListener;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class UIPlugin extends AbstractUIPlugin {
- // The shared instance
- private static UIPlugin plugin;
- // The scoped preferences instance
- private static volatile ScopedEclipsePreferences scopedPreferences;
- // The trace handler instance
- private static volatile TraceHandler traceHandler;
- // The workbench listener instance
- private IWorkbenchListener listener;
- // The global window listener instance
- private IWindowListener windowListener;
-
- /**
- * The constructor
- */
- public UIPlugin() {
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static UIPlugin getDefault() {
- return plugin;
- }
-
- /**
- * Convenience method which returns the unique identifier of this plug-in.
- */
- public static String getUniqueIdentifier() {
- if (getDefault() != null && getDefault().getBundle() != null) {
- return getDefault().getBundle().getSymbolicName();
- }
- return "org.eclipse.tm.terminal.view.ui"; //$NON-NLS-1$
- }
-
- /**
- * Return the scoped preferences for this plug-in.
- */
- public static ScopedEclipsePreferences getScopedPreferences() {
- if (scopedPreferences == null) {
- scopedPreferences = new ScopedEclipsePreferences(getUniqueIdentifier());
- }
- return scopedPreferences;
- }
-
- /**
- * Returns the bundles trace handler.
- *
- * @return The bundles trace handler.
- */
- public static TraceHandler getTraceHandler() {
- if (traceHandler == null) {
- traceHandler = new TraceHandler(getUniqueIdentifier());
- }
- return traceHandler;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
-
- // Create and register the workbench listener instance
- listener = new IWorkbenchListener() {
-
- @Override
- public boolean preShutdown(IWorkbench workbench, boolean forced) {
- if (workbench != null && workbench.getActiveWorkbenchWindow() != null && workbench.getActiveWorkbenchWindow().getActivePage() != null) {
- // Find all "Terminal" views
- IViewReference[] refs = workbench.getActiveWorkbenchWindow().getActivePage().getViewReferences();
- for (IViewReference ref : refs) {
- IViewPart part = ref.getView(false);
- if (part instanceof TerminalsView) {
- /*
- * The terminal tabs to save to the views memento on shutdown can
- * be determined only _before_ the saveState(memento) method of the
- * view is called. Within saveState, it is already to late and the
- * terminals might be in CLOSED state already. This depends on the
- * terminal type and the corresponding connector implementation.
- *
- * To be safe, we determine the still opened terminals on shutdown
- * separately here in the preShutdown.
- */
- final List<CTabItem> saveables = new ArrayList<CTabItem>();
-
- // Get the tab folder
- CTabFolder tabFolder = (CTabFolder)((TerminalsView)part).getAdapter(CTabFolder.class);
- if (tabFolder != null && !tabFolder.isDisposed()) {
- // Get the list of tab items
- CTabItem[] items = tabFolder.getItems();
- // Loop the tab items and find the still connected ones
- for (CTabItem item : items) {
- // Ignore disposed items
- if (item.isDisposed()) continue;
- // Get the terminal view control
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- if (terminal == null || terminal.getState() != TerminalState.CONNECTED) {
- continue;
- }
- // Still connected -> Add to the list
- saveables.add(item);
- }
- }
-
- // Push the determined saveable items to the memento handler
- TerminalsViewMementoHandler mementoHandler = (TerminalsViewMementoHandler)((TerminalsView)part).getAdapter(TerminalsViewMementoHandler.class);
- if (mementoHandler != null) mementoHandler.setSaveables(saveables);
- }
- }
- }
-
- return true;
- }
-
- @Override
- public void postShutdown(IWorkbench workbench) {
- }
- };
- PlatformUI.getWorkbench().addWorkbenchListener(listener);
-
- if (windowListener == null && PlatformUI.getWorkbench() != null) {
- windowListener = new WorkbenchWindowListener();
- PlatformUI.getWorkbench().addWindowListener(windowListener);
- activateContexts();
- }
- }
-
- void activateContexts() {
- if (Display.getCurrent() != null) {
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window != null && windowListener != null) windowListener.windowOpened(window);
- }
- else {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable(){
- @Override
- public void run() {
- activateContexts();
- }});
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(BundleContext context) throws Exception {
- if (windowListener != null && PlatformUI.getWorkbench() != null) {
- PlatformUI.getWorkbench().removeWindowListener(windowListener);
- windowListener = null;
- }
-
- plugin = null;
- scopedPreferences = null;
- traceHandler = null;
- if (listener != null) { PlatformUI.getWorkbench().removeWorkbenchListener(listener); listener = null; }
- super.stop(context);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
- */
- @Override
- protected void initializeImageRegistry(ImageRegistry registry) {
- Bundle bundle = Platform.getBundle("org.eclipse.ui.console"); //$NON-NLS-1$
- if (bundle != null) {
- URL url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + "full/" + ImageConsts.IMAGE_DIR_EVIEW + "console_view.gif"); //$NON-NLS-1$ //$NON-NLS-2$
- registry.put(ImageConsts.VIEW_Terminals, ImageDescriptor.createFromURL(url));
-
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + "full/" + ImageConsts.IMAGE_DIR_CLCL + "lock_co.gif"); //$NON-NLS-1$ //$NON-NLS-2$
- registry.put(ImageConsts.ACTION_ScrollLock_Hover, ImageDescriptor.createFromURL(url));
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + "full/" + ImageConsts.IMAGE_DIR_ELCL + "lock_co.gif"); //$NON-NLS-1$ //$NON-NLS-2$
- registry.put(ImageConsts.ACTION_ScrollLock_Enabled, ImageDescriptor.createFromURL(url));
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + "full/" + ImageConsts.IMAGE_DIR_DLCL + "lock_co.gif"); //$NON-NLS-1$ //$NON-NLS-2$
- registry.put(ImageConsts.ACTION_ScrollLock_Disabled, ImageDescriptor.createFromURL(url));
- }
-
- bundle = getBundle();
- URL url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_CLCL + "command_input_field.gif"); //$NON-NLS-1$
- registry.put(ImageConsts.ACTION_ToggleCommandField_Hover, ImageDescriptor.createFromURL(url));
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_ELCL + "command_input_field.gif"); //$NON-NLS-1$
- registry.put(ImageConsts.ACTION_ToggleCommandField_Enabled, ImageDescriptor.createFromURL(url));
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_DLCL + "command_input_field.gif"); //$NON-NLS-1$
- registry.put(ImageConsts.ACTION_ToggleCommandField_Disabled, ImageDescriptor.createFromURL(url));
-
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_CLCL + "new_terminal_view.gif"); //$NON-NLS-1$
- registry.put(ImageConsts.ACTION_NewTerminalView_Hover, ImageDescriptor.createFromURL(url));
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_ELCL + "new_terminal_view.gif"); //$NON-NLS-1$
- registry.put(ImageConsts.ACTION_NewTerminalView_Enabled, ImageDescriptor.createFromURL(url));
- url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_DLCL + "new_terminal_view.gif"); //$NON-NLS-1$
- registry.put(ImageConsts.ACTION_NewTerminalView_Disabled, ImageDescriptor.createFromURL(url));
- }
-
- /**
- * Loads the image registered under the specified key from the image
- * registry and returns the <code>Image</code> object instance.
- *
- * @param key The key the image is registered with.
- * @return The <code>Image</code> object instance or <code>null</code>.
- */
- public static Image getImage(String key) {
- return getDefault().getImageRegistry().get(key);
- }
-
- /**
- * Loads the image registered under the specified key from the image
- * registry and returns the <code>ImageDescriptor</code> object instance.
- *
- * @param key The key the image is registered with.
- * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
- */
- public static ImageDescriptor getImageDescriptor(String key) {
- return getDefault().getImageRegistry().getDescriptor(key);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.controls;
-
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
-
-/**
- * Base control to deal with wizard or property page controls
- * which should share the same UI space.
- */
-public class ConfigurationPanelControl implements IConfigurationPanelContainer, IMessageProvider {
- private final Map<String, IConfigurationPanel> configurationPanels = new Hashtable<String, IConfigurationPanel>();
-
- private String message = null;
- private int messageType = IMessageProvider.NONE;
-
- private boolean isGroup;
-
- private Composite panel;
- private StackLayout panelLayout;
-
- private String activeConfigurationPanelKey = null;
- private IConfigurationPanel activeConfigurationPanel = null;
-
- private final AbstractConfigurationPanel EMPTY_PANEL;
-
- /**
- * An empty configuration panel implementation.
- */
- private static final class EmptySettingsPanel extends AbstractConfigurationPanel {
-
- /**
- * Constructor.
- *
- * @param container The configuration panel container or <code>null</code>.
- */
- public EmptySettingsPanel(IConfigurationPanelContainer container) {
- super(container);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void setupPanel(Composite parent) {
- Composite panel = new Composite(parent, SWT.NONE);
- panel.setLayout(new GridLayout());
- panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- panel.setBackground(parent.getBackground());
-
- setControl(panel);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
- */
- @Override
- public boolean isValid() {
- return false;
- }
- }
-
- /**
- * Cleanup all resources the control might have been created.
- */
- public void dispose() {
- EMPTY_PANEL.dispose();
- }
-
- /**
- * Constructor.
- */
- public ConfigurationPanelControl() {
- EMPTY_PANEL = new EmptySettingsPanel(this);
- clear();
- setPanelIsGroup(false);
- }
-
- /**
- * Sets if or if not the controls panel is a <code>Group</code>.
- *
- * @param isGroup <code>True</code> if the controls panel is a group, <code>false</code> otherwise.
- */
- public void setPanelIsGroup(boolean isGroup) {
- this.isGroup = isGroup;
- }
-
- /**
- * Returns if or if not the controls panel is a <code>Group</code>.
- *
- * @return <code>True</code> if the controls panel is a group, <code>false</code> otherwise.
- */
- public boolean isPanelIsGroup() {
- return isGroup;
- }
-
- /**
- * Returns the controls panel.
- *
- * @return The controls panel or <code>null</code>.
- */
- public Composite getPanel() {
- return panel;
- }
-
- /**
- * Returns the label text to set for the group (if the panel is a group).
- *
- * @return The label text to apply or <code>null</code>.
- */
- public String getGroupLabel() {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer#validate()
- */
- @Override
- public void validate() {
- }
-
- /**
- * To be called from the embedding control to setup the controls UI elements.
- *
- * @param parent The parent control. Must not be <code>null</code>!
- */
- public void setupPanel(Composite parent, String[] configurationPanelKeys) {
- Assert.isNotNull(parent);
-
- if (isPanelIsGroup()) {
- panel = new Group(parent, SWT.NONE);
- if (getGroupLabel() != null) ((Group)panel).setText(getGroupLabel());
- } else {
- panel = new Composite(parent, SWT.NONE);
- }
- Assert.isNotNull(panel);
- panel.setFont(parent.getFont());
- panel.setBackground(parent.getBackground());
-
- panelLayout = new StackLayout();
- panel.setLayout(panelLayout);
-
- setupConfigurationPanels(panel, configurationPanelKeys);
- EMPTY_PANEL.setupPanel(panel);
- }
-
- /**
- * Removes all configuration panels.
- */
- public void clear() {
- configurationPanels.clear();
- }
-
- /**
- * Returns a unsorted list of all registered configuration panel id's.
- *
- * @return A list of registered configuration panel id's.
- */
- public String[] getConfigurationPanelIds() {
- return configurationPanels.keySet().toArray(new String[configurationPanels.keySet().size()]);
- }
-
- /**
- * Returns the configuration panel instance registered for the given configuration panel key.
- *
- * @param key The key to get the configuration panel for. Must not be <code>null</code>!
- * @return The configuration panel instance or an empty configuration panel if the key is unknown.
- */
- public IConfigurationPanel getConfigurationPanel(String key) {
- IConfigurationPanel panel = key != null ? configurationPanels.get(key) : null;
- return panel != null ? panel : EMPTY_PANEL;
- }
-
- /**
- * Returns if or if not the given configuration panel is equal to the
- * empty configuration panel.
- *
- * @param panel The configuration panel or <code>null</code>.
- * @return <code>True</code> if the configuration panel is equal to the empty configuration panel.
- */
- public final boolean isEmptyConfigurationPanel(IConfigurationPanel panel) {
- return EMPTY_PANEL == panel;
- }
-
- /**
- * Adds the given configuration panel under the given configuration panel key to the
- * list of known panels. If the given configuration panel is <code>null</code>, any
- * configuration panel stored under the given key is removed from the list of known panels.
- *
- * @param key The key to get the configuration panel for. Must not be <code>null</code>!
- * @param panel The configuration panel instance or <code>null</code>.
- */
- public void addConfigurationPanel(String key, IConfigurationPanel panel) {
- if (key == null) return;
- if (panel != null) {
- configurationPanels.put(key, panel);
- } else {
- configurationPanels.remove(key);
- }
- }
-
- /**
- * Setup the configuration panels for being presented to the user. This method is called by the
- * controls <code>doSetupPanel(...)</code> and initialize all possible configuration panels to show.
- * The default implementation iterates over the given list of configuration panel keys and calls
- * <code>setupPanel(...)</code> for each of them.
- *
- * @param parent The parent composite to use for the configuration panels. Must not be <code>null</code>!
- * @param configurationPanelKeys The list of configuration panels to initialize. Might be <code>null</code> or empty!
- */
- public void setupConfigurationPanels(Composite parent, String[] configurationPanelKeys) {
- Assert.isNotNull(parent);
-
- if (configurationPanelKeys != null) {
- for (int i = 0; i < configurationPanelKeys.length; i++) {
- IConfigurationPanel configPanel = getConfigurationPanel(configurationPanelKeys[i]);
- Assert.isNotNull(configPanel);
- configPanel.setupPanel(parent);
- }
- }
- }
-
- /**
- * Make the wizard configuration panel registered under the given configuration panel key the
- * most top configuration panel. If no configuration panel is registered under the given key,
- * nothing will happen.
- *
- * @param key The key to get the wizard configuration panel for. Must not be <code>null</code>!
- */
- public void showConfigurationPanel(String key) {
- String activeKey = getActiveConfigurationPanelKey();
- if (key != null && key.equals(activeKey) && activeConfigurationPanel != null) {
- return;
- }
- IConfigurationPanel configPanel = getActiveConfigurationPanel();
- Map<String, Object> data = new HashMap<String, Object>();
- if (configPanel != null) configPanel.extractData(data);
- configPanel = getConfigurationPanel(key);
- Assert.isNotNull(configPanel);
- if (configPanel.getControl() != null) {
- activeConfigurationPanel = configPanel;
- activeConfigurationPanelKey = key;
- panelLayout.topControl = configPanel.getControl();
- panel.layout();
- if (!data.isEmpty()) configPanel.updateData(data);
- configPanel.activate();
- }
- else {
- activeConfigurationPanelKey = key;
- }
- }
-
- /**
- * Returns the currently active configuration panel.
- *
- * @return The active configuration panel or <code>null</code>.
- */
- public IConfigurationPanel getActiveConfigurationPanel() {
- return activeConfigurationPanel;
- }
-
- /**
- * Returns the currently active configuration panel key.
- *
- * @return The active configuration panel key or <code>null</code>.
- */
- public String getActiveConfigurationPanelKey() {
- return activeConfigurationPanelKey;
- }
-
- /**
- * Returns the dialog settings to use to save and restore control specific
- * widget values.
- *
- * @param settings The parent dialog settings. Must not be <code>null</code>.
- * @return The dialog settings to use.
- */
- public final IDialogSettings getDialogSettings(IDialogSettings settings) {
- Assert.isNotNull(settings);
-
- // Store the settings of the control within it's own section.
- String sectionName = this.getClass().getSimpleName();
- Assert.isNotNull(sectionName);
-
- IDialogSettings section = settings.getSection(sectionName);
- if (section == null) {
- section = settings.addNewSection(sectionName);
- }
-
- return section;
- }
-
- /**
- * Restore the widget values from the dialog settings store to recreate the control history.
- * <p>
- * <b>Note:</b>
- * The control is saving the widget values into a section equal to the class name {@link Class#getName()}.
- * After the sections has been created, the method calls <code>doRestoreWidgetValues</code> for restoring
- * the single properties from the dialog settings. Subclasses may override <code>doRestoreWidgetValues</code>
- * only to deal with the single properties only or <code>restoreWidgetValues</code> when to override the
- * creation of the subsections.
- *
- * @param settings The dialog settings object instance to restore the widget values from. Must not be <code>null</code>!
- * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
- */
- public final void restoreWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- // now, call the hook for actually reading the single properties from the dialog settings.
- doRestoreWidgetValues(getDialogSettings(settings), idPrefix);
- }
-
- /**
- * Hook to restore the widget values finally plain from the given dialog settings. This method should
- * not fragment the given dialog settings any further.
- *
- * @param settings The dialog settings to restore the widget values from. Must not be <code>null</code>!
- * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
- */
- public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- for (String panelKey : configurationPanels.keySet()) {
- IConfigurationPanel configPanel = getConfigurationPanel(panelKey);
- if (configPanel != null && !isEmptyConfigurationPanel(configPanel)) {
- IDialogSettings configPanelSettings = settings.getSection(panelKey);
- if (configPanelSettings == null) configPanelSettings = settings.addNewSection(panelKey);
- configPanel.doRestoreWidgetValues(configPanelSettings, idPrefix);
- }
- }
- }
-
- /**
- * Saves the widget values to the dialog settings store for remembering the history. The control might
- * be embedded within multiple pages multiple times handling different properties. Because the single
- * controls should not mix up the history, we create subsections within the given dialog settings if
- * they do not already exist. After the sections has been created, the method calls <code>doSaveWidgetValues</code>
- * for saving the single properties to the dialog settings. Subclasses may override <code>doSaveWidgetValues</code>
- * only to deal with the single properties only or <code>saveWidgetValues</code> when to override the
- * creation of the subsections.
- *
- * @param settings The dialog settings object instance to save the widget values to. Must not be <code>null</code>!
- * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
- */
- public final void saveWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- // now, call the hook for actually writing the single properties to the dialog settings.
- doSaveWidgetValues(getDialogSettings(settings), idPrefix);
- }
-
- /**
- * Hook to save the widget values finally plain to the given dialog settings. This method should
- * not fragment the given dialog settings any further.
- *
- * @param settings The dialog settings to save the widget values to. Must not be <code>null</code>!
- * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
- */
- public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- IConfigurationPanel configPanel = getActiveConfigurationPanel();
- if (configPanel != null && !isEmptyConfigurationPanel(configPanel)) {
- String key = getActiveConfigurationPanelKey();
- IDialogSettings configPanelSettings = settings.getSection(key);
- if (configPanelSettings == null) configPanelSettings = settings.addNewSection(key);
- configPanel.doSaveWidgetValues(configPanelSettings, idPrefix);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
- */
- @Override
- public final String getMessage() {
- return message;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
- */
- @Override
- public final int getMessageType() {
- return messageType;
- }
-
- /**
- * Set the message and the message type to display.
- *
- * @param message The message or <code>null</code>.
- * @param messageType The message type or <code>IMessageProvider.NONE</code>.
- */
- @Override
- public final void setMessage(String message, int messageType) {
- this.message = message;
- this.messageType = messageType;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.controls;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-
-/**
- * A helper class to create a composite with a highlighted note
- * entry and a message text.
- */
-public class NoteCompositeHelper {
-
- /**
- * The common label text to show on a note. Defaults to "Note:".
- */
- public static final String NOTE_LABEL = Messages.NoteCompositeHelper_note_label;
-
- private static class NoteComposite extends Composite {
-
- public NoteComposite(Composite parent, int style) {
- super(parent, style);
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- Control[] childs = getChildren();
- for (int iChild = 0; iChild < childs.length; iChild++) {
- Control child = childs[iChild];
- child.setEnabled(enabled);
- }
- }
- }
-
- /**
- * Creates a composite with a highlighted Note entry and a message text.
- * This is designed to take up the full width of the page.
- *
- * @see PreferencePage#createNoteComposite, this is a plain copy of that!
- * @param font
- * the font to use
- * @param composite
- * the parent composite
- * @param title
- * the title of the note
- * @param message
- * the message for the note
- *
- * @return the composite for the note
- */
- public static Composite createNoteComposite(Font font, Composite composite, String title, String message) {
- return createNoteComposite(font, composite, title, message, SWT.DEFAULT);
- }
-
- /**
- * Creates a composite with a highlighted Note entry and a message text.
- * This is designed to take up the full width of the page.
- *
- * @see PreferencePage#createNoteComposite, this is a plain copy of that!
- * @param font
- * the font to use
- * @param composite
- * the parent composite
- * @param title
- * the title of the note
- * @param message
- * the message for the note
- * @param minCharsPerLine
- * the minimum number of characters per line. Defaults to '65' if less than '20'.
- *
- * @return the composite for the note
- */
- public static Composite createNoteComposite(Font font, Composite composite, String title, String message, int minCharsPerLine) {
- final GC gc = new GC(composite);
- gc.setFont(font);
-
- Composite messageComposite = new NoteComposite(composite, SWT.NONE);
-
- GridLayout messageLayout = new GridLayout();
- messageLayout.numColumns = 2;
- messageLayout.marginWidth = 0;
- messageLayout.marginHeight = 0;
- messageComposite.setLayout(messageLayout);
-
- GridData layoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
- if (composite.getLayout() instanceof GridLayout) {
- layoutData.horizontalSpan = ((GridLayout) composite.getLayout()).numColumns;
- }
- messageComposite.setLayoutData(layoutData);
- messageComposite.setFont(font);
-
- final Label noteLabel = new Label(messageComposite, SWT.BOLD);
- noteLabel.setText(title);
- noteLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT));
- noteLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
-
- final IPropertyChangeListener fontListener = new IPropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent event) {
- // Note: This is actually wrong but the same as in platforms
- // PreferencePage
- if (JFaceResources.BANNER_FONT.equals(event.getProperty())) {
- noteLabel.setFont(JFaceResources.getFont(JFaceResources.BANNER_FONT));
- }
- }
- };
- JFaceResources.getFontRegistry().addListener(fontListener);
- noteLabel.addDisposeListener(new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent event) {
- JFaceResources.getFontRegistry().removeListener(fontListener);
- }
- });
-
- Label messageLabel = new Label(messageComposite, SWT.WRAP);
- messageLabel.setText(message);
- messageLabel.setFont(font);
-
- /**
- * Set the controls style to FILL_HORIZONTAL making it multi-line if
- * needed
- */
- layoutData = new GridData(GridData.FILL_HORIZONTAL);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), minCharsPerLine >= 20 ? minCharsPerLine : 65);
- messageLabel.setLayoutData(layoutData);
-
- gc.dispose();
-
- return messageComposite;
- }
-
- /**
- * change the text of the second label
- *
- * @param messageComposite
- * the NoteComposite that gets returned from createNoteComposite
- * @param msg
- * the new text
- */
- public static void setMessage(Composite messageComposite, String msg) {
- if (messageComposite instanceof NoteComposite) {
- Control[] children = messageComposite.getChildren();
- if (children.length == 2) {
- Control c = children[1];
- if (c instanceof Label) {
- ((Label) c).setText(msg);
- messageComposite.pack();
- }
- }
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.help;
-
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-
-
-/**
- * UI Context help id definitions.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface IContextHelpIds {
-
- /**
- * UI plug-in common context help id prefix.
- */
- public final static String PREFIX = UIPlugin.getUniqueIdentifier() + "."; //$NON-NLS-1$
-
- /**
- * Launch terminal settings dialog.
- */
- public final static String LAUNCH_TERMINAL_SETTINGS_DIALOG = PREFIX + "LaunchTerminalSettingsDialog"; //$NON-NLS-1$
-
- /**
- * Terminal control encoding selection dialog.
- */
- public final static String ENCODING_SELECTION_DIALOG = PREFIX + "EncodingSelectionDialog"; //$NON-NLS-1$
-
- /**
- * External executables dialog.
- * @since 4.1
- */
- public final static String EXTERNAL_EXECUTABLES_DIALOG = PREFIX + "ExternalExecutablesDialog"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-import java.util.Map;
-
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
-
-/**
- * Terminal launcher configuration panel.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- * Clients should extend {@link AbstractConfigurationPanel} instead.
- */
-public interface IConfigurationPanel extends IMessageProvider {
-
- /**
- * Returns the configuration panel container.
- *
- * @return The configuration panel container or <code>null</code>.
- */
- public IConfigurationPanelContainer getContainer();
-
- /**
- * Creates the terminal launcher configuration panel UI elements within the
- * given parent composite. Terminal launcher configuration panels should always
- * create another composite within the given composite, which is the panel top
- * control. The top control is queried later from the stack layout to show the
- * different panels if the selected terminal launcher changed.
- *
- * @param parent The parent composite to create the UI elements in. Must not be <code>null</code>.
- */
- public void setupPanel(Composite parent);
-
- /**
- * Cleanup all resources the wizard configuration panel might have been created.
- */
- public void dispose();
-
- /**
- * Returns the terminal launcher configuration panels top control, typically a
- * composite control. This control is requested every time the stack layout is
- * required to set a new top control because the selected terminal launcher changed.
- *
- * @return The top control or <code>null</code> if the configuration panel has been not setup yet.
- */
- public Composite getControl();
-
- /**
- * Validates the control and sets the message text and type so the parent
- * page or control is able to display validation result informations.
- * The default implementation of this method does nothing.
- *
- * @return Result of validation.
- */
- public boolean isValid();
-
- /**
- * Restore the widget values plain from the given dialog settings. This method should
- * not fragment the given dialog settings any further.
- *
- * @param settings The dialog settings to restore the widget values from. Must not be <code>null</code>!
- * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
- */
- public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix);
-
- /**
- * Save the widget values plain to the given dialog settings. This method should
- * not fragment the given dialog settings any further.
- *
- * @param settings The dialog settings to save the widget values to. Must not be <code>null</code>!
- * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
- */
- public void doSaveWidgetValues(IDialogSettings settings, String idPrefix);
-
- /**
- * Enables or disables all UI elements belonging to the wizard configuration panel.
- *
- * @param enabled <code>True</code> to enable the UI elements, <code>false</code> otherwise.
- */
- public void setEnabled(boolean enabled);
-
- /**
- * Called when the panel gets the active panel.
- */
- public void activate();
-
- /**
- * Initialize the widgets based of the data from the given map.
- * <p>
- * This method may called multiple times during the lifetime of the panel and the given
- * map might be even <code>null</code>.
- *
- * @param data The map or <code>null</code>.
- */
- public void setupData(Map<String, Object> data);
-
- /**
- * Extract the data from the widgets and write it back to the given map.
- * <p>
- * This method may called multiple times during the lifetime of the panel and the given
- * map might be even <code>null</code>.
- *
- * @param data The map or <code>null</code>.
- */
- public void extractData(Map<String, Object> data);
-
- /**
- * Update the data from the given properties container which contains the current
- * working data.
- * <p>
- * This method may called multiple times during the lifetime of the panel and the given
- * map might be even <code>null</code>.
- *
- * @param data The map or <code>null</code>.
- */
- public void updateData(Map<String, Object> data);
-
- /**
- * Set the selection to the terminal launcher configuration panel.
- *
- * @param selection The selection or <code>null</code>.
- */
- public void setSelection(ISelection selection);
-
- /**
- * Returns the selection associated with the terminal launcher configuration panel.
- *
- * @return The selection or <code>null</code>.
- */
- public ISelection getSelection();
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-
-
-/**
- * A container to deal with configuration panels.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface IConfigurationPanelContainer {
-
- /**
- * Validates the container status.
- * <p>
- * If necessary, set the corresponding messages and message types to signal when some sub
- * elements of the container needs user attention.
- */
- public void validate();
-
- /**
- * Set the message and the message type to display.
- *
- * @param message The message or <code>null</code>.
- * @param messageType The message type or <code>IMessageProvider.NONE</code>.
- */
- public void setMessage(String message, int messageType);
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Dirk Fauth - [460496] Moved from o.e.tm.t.connector.local.showin.interfaces
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-/**
- * External executables data property names.
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- * @since 4.1
- */
-public interface IExternalExecutablesProperties {
-
- /**
- * The name/label of the external executable.
- */
- public final String PROP_NAME = "Name"; //$NON-NLS-1$
-
- /**
- * The absolute path of the external executable.
- */
- public final String PROP_PATH = "Path"; //$NON-NLS-1$
-
- /**
- * The arguments to pass to the external executable.
- */
- public final String PROP_ARGS = "Args"; //$NON-NLS-1$
-
- /**
- * The absolute path to the icon representing the external executable.
- */
- public final String PROP_ICON = "Icon"; //$NON-NLS-1$
-
- /**
- * If set, backslashes are translated to forward slashes on paste.
- */
- public final String PROP_TRANSLATE = "Translate"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-import java.util.Map;
-
-import org.eclipse.core.expressions.Expression;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IExecutableExtension;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
-import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
-
-/**
- * Terminal launcher delegate.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- * Clients should extend {@link AbstractLauncherDelegate} instead.
- */
-public interface ILauncherDelegate extends IExecutableExtension, IAdaptable {
-
- /**
- * Returns the unique id of the launcher delegate. The returned
- * id must be never <code>null</code> or an empty string.
- *
- * @return The unique id.
- */
- public String getId();
-
- /**
- * Returns the label or UI name of the launcher delegate.
- *
- * @return The label or UI name. An empty string if not set.
- */
- public String getLabel();
-
- /**
- * Returns if or if not the launcher delegate is hidden for the user.
- *
- * @return <code>True</code> if the launcher delegate is hidden, <code>false</code> otherwise.
- */
- public boolean isHidden();
-
- /**
- * Returns the enablement expression.
- *
- * @return The enablement expression or <code>null</code>.
- */
- public Expression getEnablement();
-
- /**
- * Returns if or if not the user needs to set configuration details for this launcher to work.
- * The settings to configure are provided to the user through the configuration panel returned
- * by {@link #getPanel(BaseDialogPageControl)}.
- *
- * @return <code>True</code> if a user configuration is required, <code>false</code> otherwise.
- */
- public boolean needsUserConfiguration();
-
- /**
- * Returns the configuration panel instance to present to the user. The instance must be always
- * the same on subsequent calls until disposed.
- * <p>
- * The method may return <code>null</code> if the launcher does not provide any user
- * configurable settings. In this case, {@link #needsUserConfiguration()} should return
- * <code>false</code>.
- *
- * @param container The configuration panel container or <code>null</code>.
- * @return The configuration panel instance or <code>null</code>
- */
- public IConfigurationPanel getPanel(IConfigurationPanelContainer container);
-
- /**
- * Execute the terminal launch.
- *
- * @param properties The properties. Must not be <code>null</code>.
- * @param done The callback or <code>null</code>.
- */
- public void execute(Map<String, Object> properties, ITerminalService.Done done);
-
- /**
- * Creates the terminal connector for this launcher delegate based on
- * the given properties.
- *
- * @param properties The terminal properties. Must not be <code>null</code>.
- * @return The terminal connector or <code>null</code>.
- */
- public ITerminalConnector createTerminalConnector(Map<String, Object> properties);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-import java.util.Map;
-
-import org.eclipse.ui.IMemento;
-
-/**
- * Terminal properties memento handler.
- */
-public interface IMementoHandler {
-
- /**
- * Saves the terminal properties in the given memento.
- *
- * @param memento The memento. Must not be <code>null</code>.
- * @param properties The map containing the terminal properties to save. Must not be <code>null</code>.
- */
- public void saveState(IMemento memento, Map<String, Object> properties);
-
- /**
- * Restore the terminal properties from the given memento.
- *
- * @param memento The memento. Must not be <code>null</code>.
- * @param properties The map receiving the restored terminal properties. Must not be <code>null</code>.
- */
- public void restoreState(IMemento memento, Map<String, Object> properties);
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-/**
- * Terminal plug-in preference key definitions.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface IPreferenceKeys {
- /**
- * Preference keys family prefix.
- */
- public final String PREF_TERMINAL = "terminals"; //$NON-NLS-1$
-
- /**
- * Preference key: Remove terminated terminals when a new terminal is created.
- */
- public final String PREF_REMOVE_TERMINATED_TERMINALS = PREF_TERMINAL + ".removeTerminatedTerminals"; //$NON-NLS-1$
-
- // showin preferences
-
- /**
- * Preference key: Local terminal initial working directory.
- * @since 4.1
- */
- public final String PREF_LOCAL_TERMINAL_INITIAL_CWD = PREF_TERMINAL + ".localTerminalInitialCwd"; //$NON-NLS-1$
-
- /**
- * Preference value: Local terminal initial working directory is "User home"
- * @since 4.1
- */
- public final String PREF_INITIAL_CWD_USER_HOME = "userhome"; //$NON-NLS-1$
-
- /**
- * Preference value: Local terminal initial working directory is "Eclipse home"
- * @since 4.1
- */
- public final String PREF_INITIAL_CWD_ECLIPSE_HOME = "eclipsehome"; //$NON-NLS-1$
-
- /**
- * Preference value: Local terminal initial working directory is "Eclipse workspace"
- * @since 4.1
- */
- public final String PREF_INITIAL_CWD_ECLIPSE_WS = "eclipsews"; //$NON-NLS-1$
-
- /**
- * Preference key: Local terminal default shell command on Unix hosts.
- * @since 4.1
- */
- public final String PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX = PREF_TERMINAL + ".localTerminalDefaultShellUnix"; //$NON-NLS-1$
-
- /**
- * Preference key: Local terminal default shell command arguments on Unix hosts.
- * @since 4.1
- */
- public final String PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS = PREF_TERMINAL + ".localTerminalDefaultShellUnixArgs"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-import org.eclipse.ui.IViewPart;
-
-/**
- * Terminal view public interface.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface ITerminalsView extends IViewPart {
-
- /**
- * Switch to the empty page control.
- */
- public void switchToEmptyPageControl();
-
- /**
- * Switch to the tab folder control.
- */
- public void switchToTabFolderControl();
-
- /**
- * Returns the context help id associated with the terminal
- * console view instance.
- *
- * @return The context help id or <code>null</code> if none is associated.
- */
- public String getContextHelpId();
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-/**
- * Terminal common UI constants.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface IUIConstants {
- /**
- * The view id of the terminals view.
- */
- public static final String ID = "org.eclipse.tm.terminal.view.ui.TerminalsView"; //$NON-NLS-1$
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces;
-
-/**
- * Image registry constants.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface ImageConsts {
- /**
- * The root directory where to load the images from, relative to
- * the bundle directory.
- */
- public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$
-
- /**
- * The directory where to load colored local toolbar images from,
- * relative to the image root directory.
- */
- public final static String IMAGE_DIR_CLCL = "clcl16/"; //$NON-NLS-1$
-
- /**
- * The directory where to load disabled local toolbar images from,
- * relative to the image root directory.
- */
- public final static String IMAGE_DIR_DLCL = "dlcl16/"; //$NON-NLS-1$
-
- /**
- * The directory where to load enabled local toolbar images from,
- * relative to the image root directory.
- */
- public final static String IMAGE_DIR_ELCL = "elcl16/"; //$NON-NLS-1$
-
- /**
- * The directory where to load view related images from, relative to
- * the image root directory.
- */
- public final static String IMAGE_DIR_EVIEW = "eview16/"; //$NON-NLS-1$
-
- /**
- * The key to access the terminals console view image.
- */
- public static final String VIEW_Terminals = "TerminalsView"; //$NON-NLS-1$
-
- /**
- * The key to access the scroll lock action image (enabled).
- */
- public static final String ACTION_ScrollLock_Enabled = "ScrollLockAction_enabled"; //$NON-NLS-1$
-
- /**
- * The key to access the scroll lock action image (disabled).
- */
- public static final String ACTION_ScrollLock_Disabled = "ScrollLockAction_disabled"; //$NON-NLS-1$
-
- /**
- * The key to access the scroll lock action image (hover).
- */
- public static final String ACTION_ScrollLock_Hover = "ScrollLockAction_hover"; //$NON-NLS-1$
-
- /**
- * The key to access the new terminal view action image (enabled).
- * @since 4.1
- */
- public static final String ACTION_NewTerminalView_Enabled = "NewTerminalViewAction_enabled"; //$NON-NLS-1$
-
- /**
- * The key to access the new terminal view action image (disabled).
- * @since 4.1
- */
- public static final String ACTION_NewTerminalView_Disabled = "NewTerminalViewAction_disabled"; //$NON-NLS-1$
-
- /**
- * The key to access the new terminal view action image (hover).
- * @since 4.1
- */
- public static final String ACTION_NewTerminalView_Hover = "NewTerminalViewAction_hover"; //$NON-NLS-1$
-
- /**
- * The key to access the toggle command field action image (enabled).
- */
- public static final String ACTION_ToggleCommandField_Enabled = "ToggleCommandField_enabled"; //$NON-NLS-1$
-
- /**
- * The key to access the toggle command field action image (disabled).
- */
- public static final String ACTION_ToggleCommandField_Disabled = "ToggleCommandField_disabled"; //$NON-NLS-1$
-
- /**
- * The key to access the toggle command field action image (hover).
- */
- public static final String ACTION_ToggleCommandField_Hover = "ToggleCommandField_hover"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.interfaces.tracing;
-
-/**
- * Core plug-in trace slot identifiers.
- *
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface ITraceIds {
-
- /**
- * If activated, tracing information about the terminals output stream monitor is printed out.
- */
- public static final String TRACE_OUTPUT_STREAM_MONITOR = "trace/outputStreamMonitor"; //$NON-NLS-1$
-
- /**
- * If activated, tracing information about the launch terminal command handler is printed out.
- */
- public static final String TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER = "trace/launchTerminalCommandHandler"; //$NON-NLS-1$
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2016 Dirk Fauth and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
-import org.eclipse.ui.AbstractSourceProvider;
-import org.eclipse.ui.ISources;
-
-/**
- * SourceProvider that provides a state to determine whether external executables are configured or not.
- */
-public class ExternalExecutablesState extends AbstractSourceProvider {
- public final static String CONFIGURED_STATE = "org.eclipse.tm.terminal.external.executable.configured"; //$NON-NLS-1$
- private boolean enabled;
-
- public ExternalExecutablesState() {
- List<Map<String, String>> externals = ExternalExecutablesManager.load();
- this.enabled = (externals != null && !externals.isEmpty());
- }
-
- @Override
- public String[] getProvidedSourceNames() {
- return new String[] { CONFIGURED_STATE };
- }
-
- @Override
- public Map getCurrentState() {
- Map<String, String> map = new HashMap<String, String>(1);
- map.put(CONFIGURED_STATE, Boolean.valueOf(enabled).toString().toUpperCase());
- return map;
- }
-
- public void enable() {
- fireSourceChanged(ISources.WORKBENCH, CONFIGURED_STATE, "TRUE"); //$NON-NLS-1$
- }
-
- public void disable() {
- fireSourceChanged(ISources.WORKBENCH, CONFIGURED_STATE, "FALSE"); //$NON-NLS-1$
- }
-
- @Override
- public void dispose() {
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal;
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-
-
-/**
- * Terminal property tester implementation.
- */
-public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
- */
- @SuppressWarnings("cast")
- @Override
- public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
-
- if ("hasApplicableLauncherDelegates".equals(property)) { //$NON-NLS-1$
- ISelection selection = receiver instanceof ISelection ? (ISelection)receiver : new StructuredSelection(receiver);
- return expectedValue.equals(Boolean.valueOf(LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection).length > 0));
- }
-
- if ("canDisconnect".equals(property) && receiver instanceof ITerminalsView) { //$NON-NLS-1$
- CTabItem tabItem = null;
-
- TabFolderManager manager = (TabFolderManager) ((ITerminalsView)receiver).getAdapter(TabFolderManager.class);
- if (manager != null) {
- tabItem = manager.getActiveTabItem();
- }
-
- if (tabItem != null && !tabItem.isDisposed() && tabItem.getData() instanceof ITerminalViewControl) {
- ITerminalViewControl terminal = (ITerminalViewControl)tabItem.getData();
- TerminalState state = terminal.getState();
- return expectedValue.equals(Boolean.valueOf(state != TerminalState.CLOSED));
- }
- return false;
- }
-
- return false;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-
-/**
- * Simple default Terminal settings store implementation keeping the settings
- * within memory.
- */
-public class SettingsStore implements ISettingsStore {
- private final Map<String, Object> settings = new HashMap<String, Object>();
-
- /**
- * Constructor.
- */
- public SettingsStore() {
- }
-
- /**
- * Returns the map containing the settings.
- *
- * @return The map containing the settings.
- */
- public final Map<String, Object> getSettings() {
- return settings;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String, java.lang.String)
- */
- @Override
- public final String get(String key, String defaultValue) {
- Assert.isNotNull(key);
- String value = settings.get(key) instanceof String ? (String) settings.get(key) : null;
- return value != null ? value : defaultValue;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String)
- */
- @Override
- public final String get(String key) {
- Assert.isNotNull(key);
- return settings.get(key) instanceof String ? (String) settings.get(key) : null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#put(java.lang.String, java.lang.String)
- */
- @Override
- public final void put(String key, String value) {
- Assert.isNotNull(key);
- if (value == null) settings.remove(key);
- else settings.put(key, value);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.dialogs;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Encoding selection dialog implementation.
- */
-public class EncodingSelectionDialog extends TrayDialog {
- private String contextHelpId = null;
-
- // The selected encoding or null
- /* default */ String encoding = null;
-
- // Reference to the encodings panel
- private EncodingPanel encodingPanel = null;
-
- /**
- * Encodings panel implementation
- */
- protected class EncodingPanel extends AbstractExtendedConfigurationPanel {
-
- /**
- * Constructor
- *
- * @param container The configuration panel container or <code>null</code>.
- */
- public EncodingPanel(IConfigurationPanelContainer container) {
- super(container);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void setupPanel(Composite parent) {
- Composite panel = new Composite(parent, SWT.NONE);
- panel.setLayout(new GridLayout());
- GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
- panel.setLayoutData(data);
-
- // Create the encoding selection combo
- createEncodingUI(panel, false);
- if (EncodingSelectionDialog.this.encoding != null) {
- setEncoding(EncodingSelectionDialog.this.encoding);
- }
-
- setControl(panel);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
- */
- @Override
- protected void saveSettingsForHost(boolean add) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
- */
- @Override
- protected void fillSettingsForHost(String host) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
- */
- @Override
- protected String getHostFromSettings() {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getEncoding()
- */
- @Override
- public String getEncoding() {
- return super.getEncoding();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setEncoding(java.lang.String)
- */
- @Override
- public void setEncoding(String encoding) {
- super.setEncoding(encoding);
- }
- }
-
- /**
- * Constructor.
- *
- * @param shell The parent shell or <code>null</code>.
- */
- public EncodingSelectionDialog(Shell shell) {
- super(shell);
-
- this.contextHelpId = IContextHelpIds.ENCODING_SELECTION_DIALOG;
- setHelpAvailable(true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected final Control createDialogArea(Composite parent) {
- if (contextHelpId != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
- }
-
- // Let the super implementation create the dialog area control
- Control control = super.createDialogArea(parent);
- // Setup the inner panel as scrollable composite
- if (control instanceof Composite) {
- ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
-
- GridLayout layout = new GridLayout(1, true);
- layout.marginHeight = 0; layout.marginWidth = 0;
- layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
-
- sc.setLayout(layout);
- sc.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
-
- sc.setExpandHorizontal(true);
- sc.setExpandVertical(true);
-
- Composite composite = new Composite(sc, SWT.NONE);
- composite.setLayout(new GridLayout());
-
- // Setup the dialog area content
- createDialogAreaContent(composite);
-
- sc.setContent(composite);
- sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
- // Return the scrolled composite as new dialog area control
- control = sc;
- }
-
- return control;
- }
-
- /**
- * Creates the dialog area content.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- */
- protected void createDialogAreaContent(Composite parent) {
- Assert.isNotNull(parent);
-
- setDialogTitle(Messages.EncodingSelectionDialog_title);
-
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
-
- encodingPanel = new EncodingPanel(null);
- encodingPanel.setupPanel(panel);
-
- applyDialogFont(panel);
- }
-
- /**
- * Sets the title for this dialog.
- *
- * @param title The title.
- */
- public void setDialogTitle(String title) {
- if (getShell() != null && !getShell().isDisposed()) {
- getShell().setText(title);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- @Override
- protected void okPressed() {
- // Save the selected encoding
- if (encodingPanel != null) encoding = encodingPanel.getEncoding();
- super.okPressed();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
- */
- @Override
- protected void cancelPressed() {
- // Reset the encoding
- encoding = null;
- super.cancelPressed();
- }
-
- /**
- * Set the encoding to default to on creating the dialog.
- */
- public final void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- /**
- * Returns the selected encoding or <code>null</code>.
- */
- public final String getEncoding() {
- return encoding;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.dialogs;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl;
-import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
-import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
-import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
-import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.ISelectionService;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Launch terminal settings dialog implementation.
- */
-public class LaunchTerminalSettingsDialog extends TrayDialog {
- private String contextHelpId = null;
-
- // The parent selection
- private ISelection selection = null;
-
- // The sub controls
- /* default */ Combo terminals;
- /* default */ SettingsPanelControl settings;
-
- // Map the label added to the combo box to the corresponding launcher delegate.
- /* default */ final Map<String, ILauncherDelegate> label2delegate = new HashMap<String, ILauncherDelegate>();
-
- // Map the label added to the combo box to the corresponding launcher properties for external executables.
- /* default */ final Map<String, Map<String, Object>> label2properties = new HashMap<String, Map<String, Object>>();
-
- // The data object containing the currently selected settings
- private Map<String, Object> data = null;
-
- // The dialog settings storage
- private IDialogSettings dialogSettings;
-
- // In case of a single available terminal launcher delegate, the label of that delegate
- private String singleDelegateLabel = null;
-
- /**
- * The control managing the terminal setting panels.
- */
- protected class SettingsPanelControl extends ConfigurationPanelControl {
-
- /**
- * Constructor.
- */
- public SettingsPanelControl() {
- setPanelIsGroup(true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl#getGroupLabel()
- */
- @Override
- public String getGroupLabel() {
- return Messages.LaunchTerminalSettingsDialog_group_label;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl#showConfigurationPanel(java.lang.String)
- */
- @Override
- public void showConfigurationPanel(String key) {
- // Check if we have to create the panel first
- IConfigurationPanel configPanel = getConfigurationPanel(key);
- if (isEmptyConfigurationPanel(configPanel)) {
- // Get the corresponding delegate
- ILauncherDelegate delegate = label2delegate.get(key);
- Assert.isNotNull(delegate);
- // Create the wizard configuration panel instance
- configPanel = delegate.getPanel(this);
- if (configPanel != null) {
- // Add it to the settings panel control
- settings.addConfigurationPanel(key, configPanel);
- // Push the selection to the configuration panel
- configPanel.setSelection(getSelection());
- // Create the panel controls
- configPanel.setupPanel(getPanel());
- // Restore widget values
- IDialogSettings dialogSettings = LaunchTerminalSettingsDialog.this.settings.getDialogSettings(LaunchTerminalSettingsDialog.this.getDialogSettings());
- IDialogSettings configPanelSettings = dialogSettings != null ? dialogSettings.getSection(key) : null;
- if (configPanelSettings != null) configPanel.doRestoreWidgetValues(configPanelSettings, null);
- }
- }
-
- super.showConfigurationPanel(key);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer#validate()
- */
- @Override
- public void validate() {
- LaunchTerminalSettingsDialog.this.validate();
- }
- }
-
- /**
- * Constructor.
- *
- * @param shell The parent shell or <code>null</code>.
- */
- public LaunchTerminalSettingsDialog(Shell shell) {
- this(shell, 0);
- }
-
- private long start = 0;
-
- /**
- * Constructor.
- *
- * @param shell The parent shell or <code>null</code>.
- */
- public LaunchTerminalSettingsDialog(Shell shell, long start) {
- super(shell);
- this.start = start;
-
- initializeDialogSettings();
-
- this.contextHelpId = IContextHelpIds.LAUNCH_TERMINAL_SETTINGS_DIALOG;
- setHelpAvailable(true);
- }
-
- /**
- * Sets the parent selection.
- *
- * @param selection The parent selection or <code>null</code>.
- */
- public void setSelection(ISelection selection) {
- this.selection = selection;
- }
-
- /**
- * Returns the parent selection.
- *
- * @return The parent selection or <code>null</code>.
- */
- public ISelection getSelection() {
- return selection;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#close()
- */
- @Override
- public boolean close() {
- dispose();
- return super.close();
- }
-
- /**
- * Dispose the dialog resources.
- */
- protected void dispose() {
- if (settings != null) { settings.dispose(); settings = null; }
- dialogSettings = null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#isResizable()
- */
- @Override
- protected boolean isResizable() {
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected Control createContents(Composite parent) {
- Control composite = super.createContents(parent);
-
- // Validate the dialog after having created all the content
- validate();
-
- return composite;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected final Control createDialogArea(Composite parent) {
- if (contextHelpId != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
- }
-
- // Let the super implementation create the dialog area control
- Control control = super.createDialogArea(parent);
- // Setup the inner panel as scrollable composite
- if (control instanceof Composite) {
- ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
-
- GridLayout layout = new GridLayout(1, true);
- layout.marginHeight = 0; layout.marginWidth = 0;
- layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
-
- sc.setLayout(layout);
- sc.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
-
- sc.setExpandHorizontal(true);
- sc.setExpandVertical(true);
-
- Composite composite = new Composite(sc, SWT.NONE);
- composite.setLayout(new GridLayout());
-
- // Setup the dialog area content
- createDialogAreaContent(composite);
-
- sc.setContent(composite);
- sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
- // Return the scrolled composite as new dialog area control
- control = sc;
- }
-
- return control;
- }
-
- /**
- * Sets the title for this dialog.
- *
- * @param title The title.
- */
- public void setDialogTitle(String title) {
- if (getShell() != null && !getShell().isDisposed()) {
- getShell().setText(title);
- }
- }
-
- /**
- * Creates the dialog area content.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- */
- protected void createDialogAreaContent(Composite parent) {
- Assert.isNotNull(parent);
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Creating dialog area after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
-
- setDialogTitle(Messages.LaunchTerminalSettingsDialog_title);
-
- final List<String> items = getTerminals();
-
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
-
- if (items.size() != 1) {
- Label label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.LaunchTerminalSettingsDialog_combo_label);
-
- terminals = new Combo(panel, SWT.READ_ONLY);
- terminals.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- terminals.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- // Get the old panel
- IConfigurationPanel oldPanel = settings.getActiveConfigurationPanel();
- // Extract the current settings in an special properties container
- Map<String, Object> data = new HashMap<String, Object>();
- if (oldPanel != null) oldPanel.extractData(data);
- // Clean out settings which are never passed between the panels
- data.remove(ITerminalsConnectorConstants.PROP_IP_PORT);
- data.remove(ITerminalsConnectorConstants.PROP_TIMEOUT);
- data.remove(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
- data.remove(ITerminalsConnectorConstants.PROP_ENCODING);
- // Switch to the new panel
- settings.showConfigurationPanel(terminals.getText());
- // Get the new panel
- IConfigurationPanel newPanel = settings.getActiveConfigurationPanel();
- // Re-setup the relevant data
- if (newPanel != null) newPanel.setupData(data);
-
- // resize the dialog if needed to show the complete panel
- getShell().pack();
- // validate the settings dialog
- validate();
- }
- });
-
- // fill the combo with content
- fillCombo(terminals, items);
- } else {
- Assert.isTrue(items.size() == 1);
- singleDelegateLabel = items.get(0);
- }
-
- // Create the settings panel control
- settings = new SettingsPanelControl();
-
- // Create, initialize and add the first visible panel. All
- // other panels are created on demand only.
- String terminalLabel = terminals != null ? terminals.getItem(0) : singleDelegateLabel;
- if (terminalLabel != null) {
- // Get the corresponding delegate
- ILauncherDelegate delegate = label2delegate.get(terminalLabel);
- Assert.isNotNull(delegate);
- // Create the wizard configuration panel instance
- IConfigurationPanel configPanel = delegate.getPanel(settings);
- if (configPanel != null) {
- // Add it to the settings panel control
- settings.addConfigurationPanel(terminalLabel, configPanel);
- // Push the selection to the configuration panel
- configPanel.setSelection(getSelection());
- }
- }
-
- // Setup the panel control
- settings.setupPanel(panel, terminals != null ? terminals.getItems() : new String[] { singleDelegateLabel });
- GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
- layoutData.horizontalSpan = 2;
- settings.getPanel().setLayoutData(layoutData);
-
- // Preselect the first terminal launcher
- if (terminals != null) {
- terminals.select(0);
- settings.showConfigurationPanel(terminals.getText());
-
- terminals.setEnabled(terminals.getItemCount() > 1);
- } else {
- settings.showConfigurationPanel(singleDelegateLabel);
- }
-
- restoreWidgetValues();
-
- applyDialogFont(panel);
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Created dialog area after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
- }
-
- /**
- * Fill the given combo with the given list of terminal launcher delegate labels.
- *
- * @param combo The combo. Must not be <code>null</code>.
- * @param items The list of terminal launcher delegates. Must not be <code>null</code>.
- */
- protected void fillCombo(Combo combo, List<String> items) {
- Assert.isNotNull(combo);
- Assert.isNotNull(items);
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Filling combo after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
-
- Collections.sort(items);
- combo.setItems(items.toArray(new String[items.size()]));
- }
-
- /**
- * Returns the list of terminal launcher delegate labels. The method queries the
- * terminal launcher delegates and initialize the <code>label2delegate</code> map.
- *
- * @return The list of terminal launcher delegate labels or an empty list.
- */
- protected List<String> getTerminals() {
- List<String> items = new ArrayList<String>();
-
- ILauncherDelegate localLauncher = null;
-
- if(selection==null || selection.isEmpty()){
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Getting launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
-
- ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getLauncherDelegates(false);
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Got launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
-
- for (ILauncherDelegate delegate : delegates) {
- if (delegate.isHidden() || isFiltered(selection, delegate)) continue;
- String label = delegate.getLabel();
- if (label == null || "".equals(label.trim())) label = delegate.getId(); //$NON-NLS-1$
- label2delegate.put(label, delegate);
- items.add(label);
-
- if ("org.eclipse.tm.terminal.connector.local.launcher.local".equals(delegate.getId())) { //$NON-NLS-1$
- localLauncher = delegate;
- }
- }
- } else {
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Getting applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
-
- ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection);
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Got applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
- }
-
- for (ILauncherDelegate delegate : delegates) {
- if (delegate.isHidden() || isFiltered(selection, delegate)) continue;
- String label = delegate.getLabel();
- if (label == null || "".equals(label.trim())) label = delegate.getId(); //$NON-NLS-1$
- label2delegate.put(label, delegate);
- items.add(label);
-
- if ("org.eclipse.tm.terminal.connector.local.launcher.local".equals(delegate.getId())) { //$NON-NLS-1$
- localLauncher = delegate;
- }
- }
- }
-
- // if the local launcher was found, check for configured external executables
- if (localLauncher != null) {
- List<Map<String, String>> l = ExternalExecutablesManager.load();
- if (l != null && !l.isEmpty()) {
- for (Map<String, String> executableData : l) {
- String name = executableData.get(IExternalExecutablesProperties.PROP_NAME);
- String path = executableData.get(IExternalExecutablesProperties.PROP_PATH);
- String args = executableData.get(IExternalExecutablesProperties.PROP_ARGS);
-
- String strTranslate = executableData.get(IExternalExecutablesProperties.PROP_TRANSLATE);
- boolean translate = strTranslate != null ? Boolean.parseBoolean(strTranslate) : false;
-
- if (name != null && !"".equals(name) && path != null && !"".equals(path)) { //$NON-NLS-1$ //$NON-NLS-2$
- ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
- ISelection selection = service != null ? service.getSelection() : null;
- if (selection != null && selection.isEmpty()) selection = null;
-
- Map<String, Object> properties = new HashMap<String, Object>();
- properties.put(ITerminalsConnectorConstants.PROP_PROCESS_PATH, path);
- properties.put(ITerminalsConnectorConstants.PROP_PROCESS_ARGS, args);
- properties.put(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE, Boolean.valueOf(translate));
-
- // store external executable and properties
- label2delegate.put(name, localLauncher);
- label2properties.put(name, properties);
- items.add(name);
- }
- }
- }
-
- }
-
- return items;
- }
-
- /**
- * Hook to allow additional filtering of the applicable launcher delegates.
- * <p>
- * <b>Note:</b> The default implementation always returns <code>false</code>.
- *
- * @param selection The selection or <code>null</code>.
- * @param delegate The launcher delegate. Must not be <code>null</code>.
- *
- * @return <code>True</code> if the launcher delegate is filtered based on the given selection, <code>false</code> otherwise.
- */
- protected boolean isFiltered(ISelection selection, ILauncherDelegate delegate) {
- return false;
- }
-
- /**
- * Validate the dialog.
- */
- public void validate() {
- IConfigurationPanel panel = this.settings.getActiveConfigurationPanel();
- Button okButton = getButton(IDialogConstants.OK_ID);
- if (okButton != null) okButton.setEnabled(panel.isValid());
- }
-
- /**
- * Set the given message and message type.
- *
- * @param message The message or <code>null</code>.
- * @param messageType The message type or <code>IMessageProvider.NONE</code>.
- */
- public void setMessage(String message, int messageType) {
- if (settings != null) {
- settings.setMessage(message, messageType);
- }
- }
-
- /**
- * Save the dialog's widget values.
- */
- protected void saveWidgetValues() {
- IDialogSettings settings = getDialogSettings();
- if (settings != null && terminals != null) {
- settings.put("terminalLabel", terminals.getText()); //$NON-NLS-1$
- this.settings.saveWidgetValues(settings, null);
- }
- }
-
- /**
- * Restore the dialog's widget values.
- */
- protected void restoreWidgetValues() {
- IDialogSettings settings = getDialogSettings();
- if (settings != null) {
- String terminalLabel = settings.get("terminalLabel"); //$NON-NLS-1$
- int index = terminalLabel != null && terminals != null ? Arrays.asList(terminals.getItems()).indexOf(terminalLabel) : -1;
- if (index != -1) {
- terminals.select(index);
- this.settings.showConfigurationPanel(terminals.getText());
- }
-
- this.settings.restoreWidgetValues(settings, null);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- @Override
- protected void okPressed() {
- IConfigurationPanel panel = this.settings.getActiveConfigurationPanel();
- Assert.isNotNull(panel);
-
- if (!panel.isValid()) {
- MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
- mb.setText(Messages.LaunchTerminalSettingsDialog_error_title);
- mb.setMessage(NLS.bind(Messages.LaunchTerminalSettingsDialog_error_invalidSettings, panel.getMessage() != null ? panel.getMessage() : Messages.LaunchTerminalSettingsDialog_error_unknownReason));
- mb.open();
- return;
- }
- data = new HashMap<String, Object>();
-
- // Store the id of the selected delegate
- String terminalLabel = terminals != null ? terminals.getText() : singleDelegateLabel;
- String delegateId = terminalLabel != null ? label2delegate.get(terminalLabel).getId() : null;
- if (delegateId != null) data.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegateId);
- // Store the selection
- data.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
-
- // Add the properties for external executables if there are any
- if (label2properties.containsKey(terminalLabel)) {
- data.putAll(label2properties.get(terminalLabel));
- }
-
- // Store the delegate specific settings
- panel.extractData(data);
-
- // Save the current widget values
- saveWidgetValues();
-
- super.okPressed();
- }
-
- /**
- * Returns the configured terminal launcher settings.
- * <p>
- * The settings are extracted from the UI widgets once
- * OK got pressed.
- *
- * @return The configured terminal launcher settings or <code>null</code>.
- */
- public Map<String, Object> getSettings() {
- return data;
- }
-
- /**
- * Initialize the dialog settings storage.
- */
- protected void initializeDialogSettings() {
- IDialogSettings settings = UIPlugin.getDefault().getDialogSettings();
- Assert.isNotNull(settings);
- IDialogSettings section = settings.getSection(getClass().getSimpleName());
- if (section == null) {
- section = settings.addNewSection(getClass().getSimpleName());
- }
- setDialogSettings(section);
- }
-
- /**
- * Returns the associated dialog settings storage.
- *
- * @return The dialog settings storage.
- */
- public IDialogSettings getDialogSettings() {
- // The dialog settings may not been initialized here. Initialize first in this case
- // to be sure that we do have always the correct dialog settings.
- if (dialogSettings == null) {
- initializeDialogSettings();
- }
- return dialogSettings;
- }
-
- /**
- * Sets the associated dialog settings storage.
- *
- * @return The dialog settings storage.
- */
- public void setDialogSettings(IDialogSettings dialogSettings) {
- this.dialogSettings = dialogSettings;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.expressions.IEvaluationContext;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.ISources;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.handlers.IHandlerService;
-
-/**
- * Abstract command handler triggering a command to be executed.
- */
-public abstract class AbstractTriggerCommandHandler extends AbstractHandler {
-
- /**
- * Trigger a command to be executed.
- *
- * @param commandId The command id. Must not be <code>null</code>.
- * @param selection The selection to pass on to the command or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected void triggerCommand(String commandId, ISelection selection) {
- Assert.isNotNull(commandId);
-
- ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
- Command command = service != null ? service.getCommand(commandId) : null;
- if (command != null && command.isDefined() && command.isEnabled()) {
- try {
- ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
- Assert.isNotNull(pCmd);
- IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
- Assert.isNotNull(handlerSvc);
- IEvaluationContext ctx = handlerSvc.getCurrentState();
- if (selection != null) {
- ctx = new EvaluationContext(ctx, selection);
- ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
- }
- handlerSvc.executeCommandInContext(pCmd, null, ctx);
- } catch (Exception e) {
- // If the platform is in debug mode, we print the exception to the log view
- if (Platform.inDebugMode()) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- Messages.AbstractTriggerCommandHandler_error_executionFailed, e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * Disconnect terminal connection command handler implementation.
- */
-public class DisconnectTerminalCommandHandler extends AbstractHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- @SuppressWarnings("cast")
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- CTabItem item = null;
-
- ISelection selection = HandlerUtil.getCurrentSelection(event);
- if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
- Object element = ((IStructuredSelection)selection).getFirstElement();
- if (element instanceof CTabItem && ((CTabItem)element).getData() instanceof ITerminalViewControl) {
- item = (CTabItem)element;
- }
- }
-
- if (item == null && HandlerUtil.getActivePart(event) instanceof ITerminalsView) {
- ITerminalsView view = (ITerminalsView)HandlerUtil.getActivePart(event);
- TabFolderManager mgr = (TabFolderManager)view.getAdapter(TabFolderManager.class);
- if (mgr != null && mgr.getActiveTabItem() != null) {
- item = mgr.getActiveTabItem();
- }
- }
-
- if (item != null && item.getData() instanceof ITerminalViewControl) {
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- if (terminal != null && !terminal.isDisposed()) {
- terminal.disconnectTerminal();
- }
- }
-
- return null;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.handler;
-
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.IContextPropertiesConstants;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
-import org.eclipse.tm.terminal.view.ui.internal.dialogs.LaunchTerminalSettingsDialog;
-import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * Launch terminal command handler implementation.
- */
-public class LaunchTerminalCommandHandler extends AbstractHandler {
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- String commandId = event.getCommand().getId();
- // "org.eclipse.tm.terminal.view.ui.command.launchToolbar"
- // "org.eclipse.tm.terminal.view.ui.command.launch"
-
- long start = System.currentTimeMillis();
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
- String date = format.format(new Date(start));
-
- UIPlugin.getTraceHandler().trace("Started at " + date + " (" + start + ")", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
- }
-
- // Get the active shell
- Shell shell = HandlerUtil.getActiveShell(event);
- // Get the current selection
- ISelection selection = HandlerUtil.getCurrentSelection(event);
-
- if (commandId.equals("org.eclipse.tm.terminal.view.ui.command.launchToolbar")) { //$NON-NLS-1$
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("(a) Attempt to open launch terminal settings dialog after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
- }
-
- LaunchTerminalSettingsDialog dialog = new LaunchTerminalSettingsDialog(shell, start);
-
- if(isValidSelection(selection)){
- dialog.setSelection(selection);
- }
- if (dialog.open() == Window.OK) {
- // Get the terminal settings from the dialog
- Map<String, Object> properties = dialog.getSettings();
- if (properties != null) {
- String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
- Assert.isNotNull(delegateId);
- ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
- Assert.isNotNull(delegateId);
- delegate.execute(properties, null);
- }
- }
- }
- else {
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Getting applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
- }
-
- // Check if the dialog needs to be shown at all
- ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection);
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("Got applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
- }
-
- if (delegates.length > 1 || (delegates.length == 1 && delegates[0].needsUserConfiguration())) {
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
- UIPlugin.getTraceHandler().trace("(b) Attempt to open launch terminal settings dialog after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
- ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
- }
-
- // Create the launch terminal settings dialog
- LaunchTerminalSettingsDialog dialog = new LaunchTerminalSettingsDialog(shell, start);
- if(isValidSelection(selection)){
- dialog.setSelection(selection);
- }
- if (dialog.open() == Window.OK) {
- // Get the terminal settings from the dialog
- Map<String, Object> properties = dialog.getSettings();
- if (properties != null) {
- String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
- Assert.isNotNull(delegateId);
- ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
- Assert.isNotNull(delegateId);
- delegate.execute(properties, null);
- }
- }
- }
- else if (delegates.length == 1) {
- ILauncherDelegate delegate = delegates[0];
- Map<String, Object> properties = new HashMap<String, Object>();
-
- // Store the id of the selected delegate
- properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegate.getId());
- // Store the selection
- properties.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
-
- // Execute
- delegate.execute(properties, null);
- }
- }
-
- return null;
- }
-
- private boolean isValidSelection(ISelection selection) {
- if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
- Object element = ((IStructuredSelection) selection).getFirstElement();
- ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
- if (provider != null) {
- Map<String, String> props = provider.getTargetAddress(element);
- if (props != null && props.containsKey(IContextPropertiesConstants.PROP_ADDRESS)) {
- return true;
- }
- }
- }
-
- return false;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.handler;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-
-/**
- * Maximize view handler implementation.
- */
-public class MaximizeViewHandler extends AbstractTriggerCommandHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- triggerCommand("org.eclipse.ui.window.maximizePart", null); //$NON-NLS-1$
- return null;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.handler;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
-import org.eclipse.tm.terminal.view.ui.manager.ConsoleManager;
-
-/**
- * New Terminal View handler implementation
- */
-public class NewTerminalViewHandler extends AbstractTriggerCommandHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- String secondaryId = ConsoleManager.getInstance().getNextTerminalSecondaryId(IUIConstants.ID);
- ConsoleManager.getInstance().showConsoleView(IUIConstants.ID, secondaryId);
-
- triggerCommand("org.eclipse.tm.terminal.view.ui.command.launchToolbar", null); //$NON-NLS-1$
-
- return null;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.internal.handler;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-
-/**
- * Quick access handler implementation.
- */
-public class QuickAccessHandler extends AbstractTriggerCommandHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- triggerCommand("org.eclipse.ui.window.quickAccess", null); //$NON-NLS-1$
- return null;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.launcher;
-
-import java.util.Map;
-
-import org.eclipse.core.expressions.Expression;
-import org.eclipse.core.expressions.ExpressionConverter;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-
-/**
- * Abstract launcher delegate implementation.
- */
-public abstract class AbstractLauncherDelegate extends PlatformObject implements ILauncherDelegate {
- // The mandatory id of the extension
- private String id = null;
- // The label of the extension
- private String label = null;
- // The converted expression
- private Expression expression;
- // The hidden attribute
- private boolean hidden;
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
- */
- @Override
- public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
- if (config == null) return;
-
- // Initialize the id field by reading the <id> extension attribute.
- // Throws an exception if the id is empty or null.
- id = config.getAttribute("id"); //$NON-NLS-1$
- if (id == null || "".equals(id.trim())) { //$NON-NLS-1$
- throw createMissingMandatoryAttributeException("id", config.getContributor().getName()); //$NON-NLS-1$
- }
-
- // Try the "label" attribute first
- label = config.getAttribute("label"); //$NON-NLS-1$
- // If "label" is not found or empty, try the "name" attribute as fallback
- if (label == null || "".equals(label.trim())) { //$NON-NLS-1$
- label = config.getAttribute("name"); //$NON-NLS-1$
- }
-
- // Read the sub elements of the extension
- IConfigurationElement[] children = config.getChildren();
- // The "enablement" element is the only expected one
- if (children != null && children.length > 0) {
- expression = ExpressionConverter.getDefault().perform(children[0]);
- }
-
- // Read "hidden" attribute
- String value = config.getAttribute("hidden"); //$NON-NLS-1$
- if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
- hidden = Boolean.parseBoolean(value);
- }
- }
-
- /**
- * Creates a new {@link CoreException} to be thrown if a mandatory extension attribute
- * is missing.
- *
- * @param attributeName The attribute name. Must not be <code>null</code>.
- * @param extensionId The extension id. Must not be <code>null</code>.
- *
- * @return The {@link CoreException} instance.
- */
- protected CoreException createMissingMandatoryAttributeException(String attributeName, String extensionId) {
- Assert.isNotNull(attributeName);
- Assert.isNotNull(extensionId);
-
- return new CoreException(new Status(IStatus.ERROR,
- UIPlugin.getUniqueIdentifier(),
- 0,
- NLS.bind(Messages.Extension_error_missingRequiredAttribute, attributeName, extensionId),
- null));
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getId()
- */
- @Override
- public String getId() {
- return id;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getLabel()
- */
- @Override
- public String getLabel() {
- return label != null ? label.trim() : ""; //$NON-NLS-1$
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getEnablement()
- */
- @Override
- public Expression getEnablement() {
- return expression;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#isHidden()
- */
- @Override
- public boolean isHidden() {
- return hidden;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof AbstractLauncherDelegate) {
- return id.equals(((AbstractLauncherDelegate)obj).id);
- }
- return super.equals(obj);
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode() {
- return id.hashCode();
- }
-
- /**
- * Get the title from the settings, and use it as the default title.
- *
- * @param properties the setting properties map.
- * @return the value retrieved via the @see {@link ITerminalsConnectorConstants#PROP_TITLE}, or null if the key hasn't been set.
- *
- * @since 4.1
- */
- protected String getDefaultTerminalTitle(Map<String, Object> properties) {
- String title = (String)properties.get(ITerminalsConnectorConstants.PROP_TITLE);
- return title != null ? title : null;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.launcher;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.expressions.EvaluationResult;
-import org.eclipse.core.expressions.Expression;
-import org.eclipse.core.expressions.IEvaluationContext;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.ISources;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.handlers.IHandlerService;
-
-/**
- * Terminal launcher delegate manager implementation.
- */
-public class LauncherDelegateManager {
- // Flag to mark the extension point manager initialized (extensions loaded).
- private boolean initialized = false;
-
- // The map containing all loaded contributions
- private final Map<String, Proxy> extensionsMap = new HashMap<String, Proxy>();
-
- // The extension point comparator
- private ExtensionPointComparator comparator = null;
-
- /**
- * Executable extension proxy implementation.
- */
- /* default */ static class Proxy {
- // The extension instance. Created on first access
- private ILauncherDelegate instance;
- // The configuration element
- private final IConfigurationElement element;
- // The unique id of the extension.
- private String id;
-
- /**
- * Constructor.
- *
- * @param element The configuration element. Must not be <code>null</code>.
- * @throws CoreException In case the configuration element attribute <i>id</i> is <code>null</code> or empty.
- */
- public Proxy(IConfigurationElement element) throws CoreException {
- Assert.isNotNull(element);
- this.element = element;
-
- // Extract the extension attributes
- id = element.getAttribute("id"); //$NON-NLS-1$
- if (id == null || id.trim().length() == 0) {
- throw new CoreException(new Status(IStatus.ERROR,
- UIPlugin.getUniqueIdentifier(),
- 0,
- NLS.bind(Messages.Extension_error_missingRequiredAttribute, "id", element.getContributor().getName()), //$NON-NLS-1$
- null));
- }
-
- instance = null;
- }
-
- /**
- * Returns the extensions unique id.
- *
- * @return The unique id.
- */
- public String getId() {
- return id;
- }
-
- /**
- * Returns the configuration element for this extension.
- *
- * @return The configuration element.
- */
- public IConfigurationElement getConfigurationElement() {
- return element;
- }
-
- /**
- * Returns the extension class instance. The contributing
- * plug-in will be activated if not yet activated anyway.
- *
- * @return The extension class instance or <code>null</code> if the instantiation fails.
- */
- public ILauncherDelegate getInstance() {
- if (instance == null) instance = newInstance();
- return instance;
- }
-
- /**
- * Returns always a new extension class instance which is different
- * to what {@link #getInstance()} would return.
- *
- * @return A new extension class instance or <code>null</code> if the instantiation fails.
- */
- public ILauncherDelegate newInstance() {
- IConfigurationElement element = getConfigurationElement();
- Assert.isNotNull(element);
-
- // The "class" to load can be specified either as attribute or as child element
- if (element.getAttribute("class") != null || element.getChildren("class").length > 0) { //$NON-NLS-1$ //$NON-NLS-2$
- try {
- return (ILauncherDelegate)element.createExecutableExtension("class"); //$NON-NLS-1$
- } catch (Exception e) {
- // Possible exceptions: CoreException, ClassCastException.
- Platform.getLog(UIPlugin.getDefault().getBundle()).log(new Status(IStatus.ERROR,
- UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.Extension_error_invalidExtensionPoint, element.getDeclaringExtension().getUniqueIdentifier()), e));
- }
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- // Proxies are equal if they have encapsulate an element
- // with the same unique id
- if (obj instanceof Proxy) {
- return getId().equals(((Proxy)obj).getId());
- }
- return super.equals(obj);
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode() {
- // The hash code of a proxy is the one from the id
- return getId().hashCode();
- }
- }
-
- /**
- * Extension point comparator implementation.
- * <p>
- * The comparator assure that extension are read in a predictable order.
- * <p>
- * The order of the extensions is defined as following:<br>
- * <ul><li>Extensions contributed by our own plug-ins (<code>org.eclipse.tm.terminal.*</code>)
- * in ascending alphabetic order and</li>
- * <li>Extensions contributed by any other plug-in in ascending alphabetic order.</li>
- * <li>Extensions contributed by the same plug-in in ascending alphabetic order by the
- * extensions unique id</li>
- */
- /* default */ static class ExtensionPointComparator implements Comparator<IExtension> {
- private final static String OWN_PLUGINS_PATTERN = "org.eclipse.tm.terminal."; //$NON-NLS-1$
-
- /* (non-Javadoc)
- * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
- */
- @Override
- public int compare(IExtension o1, IExtension o2) {
- // We ignore any comparisation with null and
- if (o1 == null || o2 == null) return 0;
- // Check if it is the exact same element
- if (o1 == o2) return 0;
-
- // The extensions are compared by the unique id of the contributing plug-in first
- String contributor1 = o1.getContributor().getName();
- String contributor2 = o2.getContributor().getName();
-
- // Contributions from our own plug-ins comes before 3rdParty plug-ins
- if (contributor1.startsWith(OWN_PLUGINS_PATTERN) && !contributor2.startsWith(OWN_PLUGINS_PATTERN))
- return -1;
- if (!contributor1.startsWith(OWN_PLUGINS_PATTERN) && contributor2.startsWith(OWN_PLUGINS_PATTERN))
- return 1;
- if (contributor1.startsWith(OWN_PLUGINS_PATTERN) && contributor2.startsWith(OWN_PLUGINS_PATTERN)) {
- int value = contributor1.compareTo(contributor2);
- // Within the same plug-in, the extension are sorted by their unique id (if available)
- if (value == 0 && o1.getUniqueIdentifier() != null && o2.getUniqueIdentifier() != null)
- return o1.getUniqueIdentifier().compareTo(o2.getUniqueIdentifier());
- // Otherwise, just return the comparisation result from the contributors
- return value;
- }
-
- // Contributions from all other plug-ins are sorted alphabetical
- int value = contributor1.compareTo(contributor2);
- // Within the same plug-in, the extension are sorted by their unique id (if available)
- if (value == 0 && o1.getUniqueIdentifier() != null && o2.getUniqueIdentifier() != null)
- return o1.getUniqueIdentifier().compareTo(o2.getUniqueIdentifier());
- // Otherwise, just return the comparisation result from the contributors
- return value;
- }
-
- }
-
- /*
- * Thread save singleton instance creation.
- */
- private static class LazyInstanceHolder {
- public static LauncherDelegateManager instance = new LauncherDelegateManager();
- }
-
- /**
- * Returns the singleton instance.
- */
- public static LauncherDelegateManager getInstance() {
- return LazyInstanceHolder.instance;
- }
-
- /**
- * Constructor.
- */
- LauncherDelegateManager() {
- super();
- }
-
- /**
- * Returns the list of all contributed terminal launcher delegates.
- *
- * @param unique If <code>true</code>, the method returns new instances for each
- * contributed terminal launcher delegate.
- *
- * @return The list of contributed terminal launcher delegates, or an empty array.
- */
- public ILauncherDelegate[] getLauncherDelegates(boolean unique) {
- List<ILauncherDelegate> contributions = new ArrayList<ILauncherDelegate>();
- for (Proxy launcherDelegate : getExtensions().values()) {
- ILauncherDelegate instance = unique ? launcherDelegate.newInstance() : launcherDelegate.getInstance();
- if (instance != null && !contributions.contains(instance)) {
- contributions.add(instance);
- }
- }
-
- return contributions.toArray(new ILauncherDelegate[contributions.size()]);
- }
-
- /**
- * Returns the terminal launcher delegate identified by its unique id. If no terminal
- * launcher delegate with the specified id is registered, <code>null</code> is returned.
- *
- * @param id The unique id of the terminal launcher delegate or <code>null</code>
- * @param unique If <code>true</code>, the method returns new instances of the terminal launcher delegate contribution.
- *
- * @return The terminal launcher delegate instance or <code>null</code>.
- */
- public ILauncherDelegate getLauncherDelegate(String id, boolean unique) {
- ILauncherDelegate contribution = null;
- Map<String, Proxy> extensions = getExtensions();
- if (extensions.containsKey(id)) {
- Proxy proxy = extensions.get(id);
- // Get the extension instance
- contribution = unique ? proxy.newInstance() : proxy.getInstance();
- }
-
- return contribution;
- }
-
- /**
- * Returns the applicable terminal launcher delegates for the given selection.
- *
- * @param selection The selection or <code>null</code>.
- * @return The list of applicable terminal launcher delegates or an empty array.
- */
- @SuppressWarnings("cast")
- public ILauncherDelegate[] getApplicableLauncherDelegates(ISelection selection) {
- List<ILauncherDelegate> applicable = new ArrayList<ILauncherDelegate>();
-
- for (ILauncherDelegate delegate : getLauncherDelegates(false)) {
- Expression enablement = delegate.getEnablement();
-
- // The launcher delegate is applicable by default if
- // no expression is specified.
- boolean isApplicable = enablement == null;
-
- if (enablement != null) {
- if (selection != null) {
- // Set the default variable to selection.
- IEvaluationContext currentState = ((IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class)).getCurrentState();
- EvaluationContext context = new EvaluationContext(currentState, selection);
- // Set the "selection" variable to the selection.
- context.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
- // Allow plug-in activation
- context.setAllowPluginActivation(true);
- // Evaluate the expression
- try {
- isApplicable = enablement.evaluate(context).equals(EvaluationResult.TRUE);
- } catch (CoreException e) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
- UIPlugin.getDefault().getLog().log(status);
- }
- } else {
- // The enablement is false by definition if
- // there is no selection.
- isApplicable = false;
- }
- }
-
- // Add the page if applicable
- if (isApplicable) applicable.add(delegate);
- }
-
- return applicable.toArray(new ILauncherDelegate[applicable.size()]);
- }
-
- /**
- * Returns the map of managed extensions. If not loaded before,
- * this methods trigger the loading of the extensions to the managed
- * extension point.
- *
- * @return The map of extensions.
- */
- protected Map<String, Proxy> getExtensions() {
- // Load and store the extensions thread-safe!
- synchronized (extensionsMap) {
- if (!initialized) { loadExtensions(); initialized = true; }
- }
- return extensionsMap;
- }
-
- /**
- * Returns the extension point comparator instance. If not available,
- * {@link #doCreateExtensionPointComparator()} is called to create a new instance.
- *
- * @return The extension point comparator or <code>null</code> if the instance creation fails.
- */
- protected final ExtensionPointComparator getExtensionPointComparator() {
- if (comparator == null) {
- comparator = new ExtensionPointComparator();
- }
- return comparator;
- }
-
- /**
- * Returns the extensions of the specified extension point sorted.
- * <p>
- * For the order of the extensions, see {@link ExtensionPointComparator}.
- *
- * @param point The extension point. Must not be <code>null</code>.
- * @return The extensions in sorted order or an empty array if the extension point has no extensions.
- */
- protected IExtension[] getExtensionsSorted(IExtensionPoint point) {
- Assert.isNotNull(point);
-
- List<IExtension> extensions = new ArrayList<IExtension>(Arrays.asList(point.getExtensions()));
- if (extensions.size() > 0) {
- Collections.sort(extensions, getExtensionPointComparator());
- }
-
- return extensions.toArray(new IExtension[extensions.size()]);
- }
-
- /**
- * Loads the extensions for the managed extension point.
- */
- protected void loadExtensions() {
- // If already initialized, this method will do nothing.
- if (initialized) return;
-
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- IExtensionPoint point = registry.getExtensionPoint("org.eclipse.tm.terminal.view.ui.launcherDelegates"); //$NON-NLS-1$
- if (point != null) {
- IExtension[] extensions = getExtensionsSorted(point);
- for (IExtension extension : extensions) {
- IConfigurationElement[] elements = extension.getConfigurationElements();
- for (IConfigurationElement element : elements) {
- if ("delegate".equals(element.getName())) { //$NON-NLS-1$
- try {
- Proxy candidate = new Proxy(element);
- if (candidate.getId() != null) {
- // If no extension with this id had been registered before, register now.
- if (!extensionsMap.containsKey(candidate.getId())) {
- extensionsMap.put(candidate.getId(), candidate);
- }
- else {
- throw new CoreException(new Status(IStatus.ERROR,
- UIPlugin.getUniqueIdentifier(),
- 0,
- NLS.bind(Messages.Extension_error_duplicateExtension, candidate.getId(), element.getContributor().getName()),
- null));
- }
- } else {
- throw new CoreException(new Status(IStatus.ERROR,
- UIPlugin.getUniqueIdentifier(),
- 0,
- NLS.bind(Messages.Extension_error_missingRequiredAttribute, "id", element.getAttribute("label")), //$NON-NLS-1$ //$NON-NLS-2$
- null));
- }
- } catch (CoreException e) {
- Platform.getLog(UIPlugin.getDefault().getBundle()).log(new Status(IStatus.ERROR,
- UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.Extension_error_invalidExtensionPoint, element.getDeclaringExtension().getUniqueIdentifier()), e));
- }
- }
- }
- }
- }
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.listeners;
-
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IPartService;
-import org.eclipse.ui.IPerspectiveListener;
-import org.eclipse.ui.IWindowListener;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.IWorkbenchWindow;
-
-/**
- * Abstract window listener implementation.
- */
-public abstract class AbstractWindowListener implements IWindowListener {
- // The part listener instance
- protected final IPartListener2 partListener;
- // The perspective listener instance
- protected final IPerspectiveListener perspectiveListener;
-
- // Flag to remember if the initialization is done or not
- private boolean initialized = false;
-
- /**
- * Constructor
- */
- public AbstractWindowListener() {
- // Create the part listener instance
- partListener = createPartListener();
- // Create the perspective listener instance
- perspectiveListener = createPerspectiveListener();
- }
-
- /**
- * Creates a new part listener instance.
- * <p>
- * <b>Note:</b> The default implementation returns <code>null</code>.
- *
- * @return The part listener instance or <code>null</code>.
- */
- protected IPartListener2 createPartListener() {
- return null;
- }
-
- /**
- * Creates a new perspective listener instance.
- * <p>
- * <b>Note:</b> The default implementation returns <code>null</code>.
- *
- * @return The perspective listener instance or <code>null</code>.
- */
- protected IPerspectiveListener createPerspectiveListener() {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow)
- */
- @Override
- public void windowActivated(IWorkbenchWindow window) {
- if (!initialized && window != null) {
- windowOpened(window);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWindowListener#windowDeactivated(org.eclipse.ui.IWorkbenchWindow)
- */
- @Override
- public void windowDeactivated(IWorkbenchWindow window) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow)
- */
- @Override
- public void windowClosed(IWorkbenchWindow window) {
- // On close, remove the listeners from the window
- if (window != null) {
- if (window.getPartService() != null && partListener != null) {
- window.getPartService().removePartListener(partListener);
- }
-
- if (perspectiveListener != null) window.removePerspectiveListener(perspectiveListener);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow)
- */
- @Override
- public void windowOpened(IWorkbenchWindow window) {
- if (window != null) {
- // On open, register the part listener to the window
- if (window.getPartService() != null && partListener != null) {
- // Get the part service
- IPartService service = window.getPartService();
- // Unregister the part listener, just in case
- service.removePartListener(partListener);
- // Register the part listener
- service.addPartListener(partListener);
- // Signal the active part to the part listener after registration
- IWorkbenchPage page = window.getActivePage();
- if (page != null) {
- IWorkbenchPartReference partRef = page.getActivePartReference();
- if (partRef != null) partListener.partActivated(partRef);
- }
- }
-
- // Register the perspective listener
- if (perspectiveListener != null) {
- window.addPerspectiveListener(perspectiveListener);
- // Signal the active perspective to the perspective listener after registration
- if (window.getActivePage() != null) {
- perspectiveListener.perspectiveActivated(window.getActivePage(), window.getActivePage().getPerspective());
- }
- }
-
- initialized = true;
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.listeners;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.contexts.IContextActivation;
-import org.eclipse.ui.contexts.IContextService;
-
-/**
- * The part listener implementation. Takes care of
- * activation and deactivation of key binding contexts.
- */
-public class WorkbenchPartListener implements IPartListener2 {
-
- // The context activations per workbench part reference
- private final Map<IWorkbenchPartReference, IContextActivation> activations = new HashMap<IWorkbenchPartReference, IContextActivation>();
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partBroughtToTop(org.eclipse.ui.IWorkbenchPartReference)
- */
- @Override
- public void partBroughtToTop(IWorkbenchPartReference partRef) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partOpened(org.eclipse.ui.IWorkbenchPartReference)
- */
- @Override
- public void partOpened(IWorkbenchPartReference partRef) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partClosed(org.eclipse.ui.IWorkbenchPartReference)
- */
- @Override
- public void partClosed(IWorkbenchPartReference partRef) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partVisible(org.eclipse.ui.IWorkbenchPartReference)
- */
- @Override
- public void partVisible(IWorkbenchPartReference partRef) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partHidden(org.eclipse.ui.IWorkbenchPartReference)
- */
- @Override
- public void partHidden(IWorkbenchPartReference partRef) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partActivated(org.eclipse.ui.IWorkbenchPartReference)
- */
- @SuppressWarnings("cast")
- @Override
- public void partActivated(IWorkbenchPartReference partRef) {
- if ("org.eclipse.tm.terminal.view.ui.TerminalsView".equals(partRef.getId())) { //$NON-NLS-1$
- IWorkbenchPart part = partRef.getPart(false);
- if (part != null && part.getSite() != null) {
- IContextService service = (IContextService)part.getSite().getService(IContextService.class);
- if (service != null) {
- IContextActivation activation = service.activateContext(partRef.getId());
- if (activation != null) {
- activations.put(partRef, activation);
- } else {
- activations.remove(partRef);
- }
- }
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partDeactivated(org.eclipse.ui.IWorkbenchPartReference)
- */
- @SuppressWarnings("cast")
- @Override
- public void partDeactivated(IWorkbenchPartReference partRef) {
- if ("org.eclipse.tm.terminal.view.ui.TerminalsView".equals(partRef.getId())) { //$NON-NLS-1$
- IWorkbenchPart part = partRef.getPart(false);
- if (part != null && part.getSite() != null) {
- IContextService service = (IContextService)part.getSite().getService(IContextService.class);
- if (service != null) {
- IContextActivation activation = activations.remove(partRef);
- if (activation != null) {
- service.deactivateContext(activation);
- }
- }
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPartListener2#partInputChanged(org.eclipse.ui.IWorkbenchPartReference)
- */
- @Override
- public void partInputChanged(IWorkbenchPartReference partRef) {
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.listeners;
-
-import org.eclipse.ui.IPartListener2;
-
-/**
- * The window listener implementation. Takes care of the
- * management of the global listeners per workbench window.
- */
-public class WorkbenchWindowListener extends AbstractWindowListener {
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.listeners.AbstractWindowListener#createPartListener()
- */
- @Override
- protected IPartListener2 createPartListener() {
- return new WorkbenchPartListener();
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.local.showin;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
-import org.eclipse.ui.ISelectionService;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.CompoundContributionItem;
-import org.eclipse.ui.menus.IWorkbenchContribution;
-import org.eclipse.ui.services.IServiceLocator;
-
-/**
- * Dynamic "Show In" contribution items implementation.
- */
-public class DynamicContributionItems extends CompoundContributionItem implements IWorkbenchContribution {
- // Service locator to located the handler service.
- protected IServiceLocator serviceLocator;
- // Reference to the local terminal launcher delegate
- /* default */ ILauncherDelegate delegate;
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.menus.IWorkbenchContribution#initialize(org.eclipse.ui.services.IServiceLocator)
- */
- @Override
- public void initialize(IServiceLocator serviceLocator) {
- this.serviceLocator = serviceLocator;
-
- // Get the local terminal launcher delegate
- delegate = LauncherDelegateManager.getInstance().getLauncherDelegate("org.eclipse.tm.terminal.connector.local.launcher.local", false); //$NON-NLS-1$
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
- */
- @Override
- protected IContributionItem[] getContributionItems() {
- List<IContributionItem> items = new ArrayList<IContributionItem>();
-
- if (delegate != null) {
- List<Map<String, String>> l = ExternalExecutablesManager.load();
- if (l != null && !l.isEmpty()) {
- for (Map<String, String> executableData : l) {
- String name = executableData.get(IExternalExecutablesProperties.PROP_NAME);
- String path = executableData.get(IExternalExecutablesProperties.PROP_PATH);
- String args = executableData.get(IExternalExecutablesProperties.PROP_ARGS);
- String icon = executableData.get(IExternalExecutablesProperties.PROP_ICON);
-
- String strTranslate = executableData.get(IExternalExecutablesProperties.PROP_TRANSLATE);
- boolean translate = strTranslate != null ? Boolean.parseBoolean(strTranslate) : false;
-
- if (name != null && !"".equals(name) && path != null && !"".equals(path)) { //$NON-NLS-1$ //$NON-NLS-2$
- IAction action = createAction(name, path, args, translate);
-
- ImageData id = icon != null ? ExternalExecutablesManager.loadImage(icon) : null;
- if (id != null) {
- ImageDescriptor desc = ImageDescriptor.createFromImageData(id);
- if (desc != null) action.setImageDescriptor(desc);
- }
-
- IContributionItem item = new ActionContributionItem(action);
- items.add(item);
- }
- }
- }
- }
-
- return items.toArray(new IContributionItem[items.size()]);
- }
-
- /**
- * Creates the action to execute.
- *
- * @param label The label. Must not be <code>null</code>.
- * @param path The executable path. Must not be <code>null</code>.
- * @param args The executable arguments or <code>null</code>.
- * @param translate Translate backslashes.
- *
- * @return The action to execute.
- */
- protected IAction createAction(final String label, final String path, final String args, final boolean translate) {
- Assert.isNotNull(label);
- Assert.isNotNull(path);
-
- IAction action = new Action(label) {
- @Override
- public void run() {
- Assert.isNotNull(delegate);
-
- ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
- ISelection selection = service != null ? service.getSelection() : null;
- if (selection != null && selection.isEmpty()) selection = null;
-
- Map<String, Object> properties = new HashMap<String, Object>();
- properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegate.getId());
- if (selection != null) properties.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
- properties.put(ITerminalsConnectorConstants.PROP_PROCESS_PATH, path);
- if (args != null) properties.put(ITerminalsConnectorConstants.PROP_PROCESS_ARGS, args);
- properties.put(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE, Boolean.valueOf(translate));
-
- delegate.execute(properties, null);
- }
- };
-
- return action;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.local.showin;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
-import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.PlatformUI;
-import org.osgi.framework.Bundle;
-
-/**
- * External executables dialog implementation.
- */
-public class ExternalExecutablesDialog extends TrayDialog {
- private String contextHelpId = null;
- private final boolean edit;
-
- private Text name;
- /* default */ Text path;
- private Text args;
- /* default */ Text icon;
- private Button translate;
-
- /* default */ String last_filter_path = null;
- /* default */ String last_filter_icon = null;
-
- private Map<String, String> executableData;
-
- /**
- * Constructor.
- *
- * @param shell The parent shell or <code>null</code>.
- */
- public ExternalExecutablesDialog(Shell shell, boolean edit) {
- super(shell);
- this.edit = edit;
-
- this.contextHelpId = IContextHelpIds.EXTERNAL_EXECUTABLES_DIALOG;
- setHelpAvailable(true);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected final Control createDialogArea(Composite parent) {
- if (contextHelpId != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
- }
-
- // Let the super implementation create the dialog area control
- Control control = super.createDialogArea(parent);
- // Setup the inner panel as scrollable composite
- if (control instanceof Composite) {
- ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
-
- GridLayout layout = new GridLayout(1, true);
- layout.marginHeight = 0; layout.marginWidth = 0;
- layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
-
- sc.setLayout(layout);
- sc.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
-
- sc.setExpandHorizontal(true);
- sc.setExpandVertical(true);
-
- Composite composite = new Composite(sc, SWT.NONE);
- composite.setLayout(new GridLayout());
-
- // Setup the dialog area content
- createDialogAreaContent(composite);
-
- sc.setContent(composite);
- sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
- // Return the scrolled composite as new dialog area control
- control = sc;
- }
-
- return control;
- }
-
- /**
- * Creates the dialog area content.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- */
- protected void createDialogAreaContent(Composite parent) {
- Assert.isNotNull(parent);
-
- setDialogTitle(edit ? Messages.ExternalExecutablesDialog_title_edit : Messages.ExternalExecutablesDialog_title_add);
-
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, true);
- layoutData.widthHint = convertWidthInCharsToPixels(50);
- panel.setLayoutData(layoutData);
-
- Label label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.ExternalExecutablesDialog_field_name);
- layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- label.setLayoutData(layoutData);
-
- name = new Text(panel, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = convertWidthInCharsToPixels(30);
- name.setLayoutData(layoutData);
- name.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- validate();
- }
- });
-
- label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.ExternalExecutablesDialog_field_path);
- layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- label.setLayoutData(layoutData);
-
- Composite panel2 = new Composite(panel, SWT.NONE);
- layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel2.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- panel2.setLayoutData(layoutData);
-
- path = new Text(panel2, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = convertWidthInCharsToPixels(30);
- path.setLayoutData(layoutData);
- path.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- validate();
- }
- });
-
- Button button = new Button(panel2, SWT.PUSH);
- button.setText(Messages.ExternalExecutablesDialog_button_browse);
- layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- layoutData.widthHint = convertWidthInCharsToPixels(10);
- button.setLayoutData(layoutData);
- button.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
-
- String selectedFile = path.getText();
- if (selectedFile != null && selectedFile.trim().length() > 0) {
- IPath filePath = new Path(selectedFile);
- // If the selected file points to an directory, use the directory as is
- IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1);
- while (filterPath != null && filterPath.segmentCount() > 1 && !filterPath.toFile().exists()) {
- filterPath = filterPath.removeLastSegments(1);
- }
- String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null : filePath.lastSegment();
-
- if (filterPath != null && !filterPath.isEmpty()) dialog.setFilterPath(filterPath.toString());
- if (filterFileName != null) dialog.setFileName(filterFileName);
- } else {
- String workspace = null;
- Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- workspace = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();
- }
-
- String filterPath = last_filter_path != null ? last_filter_path : workspace;
- dialog.setFilterPath(filterPath);
- }
-
- selectedFile = dialog.open();
- if (selectedFile != null) {
- last_filter_path = dialog.getFilterPath();
- path.setText(selectedFile);
- }
- }
- });
-
- label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.ExternalExecutablesDialog_field_args);
- layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- label.setLayoutData(layoutData);
-
- args = new Text(panel, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = convertWidthInCharsToPixels(30);
- args.setLayoutData(layoutData);
- args.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- validate();
- }
- });
-
- label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.ExternalExecutablesDialog_field_icon);
- layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- label.setLayoutData(layoutData);
-
- panel2 = new Composite(panel, SWT.NONE);
- layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel2.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- panel2.setLayoutData(layoutData);
-
- icon = new Text(panel2, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = convertWidthInCharsToPixels(30);
- icon.setLayoutData(layoutData);
- icon.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- validate();
- }
- });
-
- button = new Button(panel2, SWT.PUSH);
- button.setText(Messages.ExternalExecutablesDialog_button_browse);
- layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- layoutData.widthHint = convertWidthInCharsToPixels(10);
- button.setLayoutData(layoutData);
- button.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
-
- String selectedFile = icon.getText();
- if (selectedFile != null && selectedFile.trim().length() > 0) {
- IPath filePath = new Path(selectedFile);
- // If the selected file points to an directory, use the directory as is
- IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1);
- while (filterPath != null && filterPath.segmentCount() > 1 && !filterPath.toFile().exists()) {
- filterPath = filterPath.removeLastSegments(1);
- }
- String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null : filePath.lastSegment();
-
- if (filterPath != null && !filterPath.isEmpty()) dialog.setFilterPath(filterPath.toString());
- if (filterFileName != null) dialog.setFileName(filterFileName);
- } else {
- String workspace = null;
- Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- workspace = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();
- }
-
- String filterPath = last_filter_icon != null ? last_filter_icon : workspace;
- dialog.setFilterPath(filterPath);
- }
-
- selectedFile = dialog.open();
- if (selectedFile != null) {
- last_filter_icon = dialog.getFilterPath();
- icon.setText(selectedFile);
- }
- }
- });
-
- translate = new Button(panel, SWT.CHECK);
- translate.setText(Messages.ExternalExecutablesDialog_field_translate);
- layoutData = new GridData(SWT.FILL, SWT.TOP, true, false);
- layoutData.horizontalSpan = 2;
- translate.setLayoutData(layoutData);
- translate.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- validate();
- }
- });
-
- if (executableData != null) {
- String value = executableData.get(IExternalExecutablesProperties.PROP_NAME);
- name.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
- value = executableData.get(IExternalExecutablesProperties.PROP_PATH);
- path.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
- value = executableData.get(IExternalExecutablesProperties.PROP_ARGS);
- args.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
- value = executableData.get(IExternalExecutablesProperties.PROP_ICON);
- icon.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
- value = executableData.get(IExternalExecutablesProperties.PROP_TRANSLATE);
- translate.setSelection(value != null ? Boolean.parseBoolean(value) : false);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.TrayDialog#createButtonBar(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected Control createButtonBar(Composite parent) {
- Control control = super.createButtonBar(parent);
- validate();
- return control;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
- */
- @Override
- protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
- if (IDialogConstants.OK_ID == id && !edit) {
- label = Messages.ExternalExecutablesDialog_button_add;
- }
- return super.createButton(parent, id, label, defaultButton);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- @Override
- protected void okPressed() {
- if (name != null && path != null) {
- // Extract the executable properties
- if (executableData == null) executableData = new HashMap<String, String>();
-
- String value = name.getText();
- if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
- executableData.put(IExternalExecutablesProperties.PROP_NAME, value);
- } else {
- executableData.remove(IExternalExecutablesProperties.PROP_NAME);
- }
-
- value = path.getText();
- if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
- executableData.put(IExternalExecutablesProperties.PROP_PATH, value);
- } else {
- executableData.remove(IExternalExecutablesProperties.PROP_PATH);
- }
-
- value = args.getText();
- if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
- executableData.put(IExternalExecutablesProperties.PROP_ARGS, value);
- } else {
- executableData.remove(IExternalExecutablesProperties.PROP_ARGS);
- }
-
- value = icon.getText();
- if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
- executableData.put(IExternalExecutablesProperties.PROP_ICON, value);
- } else {
- executableData.remove(IExternalExecutablesProperties.PROP_ICON);
- }
-
- if (translate.getSelection()) {
- executableData.put(IExternalExecutablesProperties.PROP_TRANSLATE, Boolean.TRUE.toString());
- } else {
- executableData.remove(IExternalExecutablesProperties.PROP_TRANSLATE);
- }
- } else {
- executableData = null;
- }
- super.okPressed();
- }
-
- @Override
- protected void cancelPressed() {
- // If the user pressed cancel, the dialog needs to return null
- executableData = null;
- super.cancelPressed();
- }
-
- /**
- * Returns the executable properties the user entered.
- *
- * @return The executable properties or <code>null</code>.
- */
- public Map<String, String> getExecutableData() {
- return executableData;
- }
-
- /**
- * Set or reset the executable properties. This method has effect
- * only if called before opening the dialog.
- *
- * @param data The executable properties or <code>null</code>.
- */
- public void setExecutableData(Map<String, String> data) {
- if (data == null) {
- executableData = null;
- } else {
- executableData = new HashMap<String, String>(data);
- }
- }
-
- /**
- * Validate the dialog.
- */
- public void validate() {
- boolean valid = true;
-
- if (name != null && !name.isDisposed()) {
- valid = !"".equals(name.getText()); //$NON-NLS-1$
- }
-
- if (path != null && !path.isDisposed()) {
- String value = path.getText();
- if (!"".equals(value)) { //$NON-NLS-1$
- File f = new File(value);
- valid |= f.isAbsolute() && f.canRead();
- } else {
- valid = false;
- }
- }
-
- if (icon != null && !icon.isDisposed()) {
- String value = icon.getText();
- if (!"".equals(value)) { //$NON-NLS-1$
- File f = new File(value);
- valid |= f.isAbsolute() && f.canRead();
- }
- }
-
- Button okButton = getButton(IDialogConstants.OK_ID);
- if (okButton != null) okButton.setEnabled(valid);
- }
-
- /**
- * Sets the title for this dialog.
- *
- * @param title The title.
- */
- public void setDialogTitle(String title) {
- if (getShell() != null && !getShell().isDisposed()) {
- getShell().setText(title);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.local.showin;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.ImageLoader;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
-import org.eclipse.tm.terminal.view.ui.internal.ExternalExecutablesState;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.services.ISourceProviderService;
-
-/**
- * External executables manager implementation.
- */
-public class ExternalExecutablesManager {
- // Flag to indicate if we have searched for git bash already
- private static boolean gitBashSearchDone = false;
-
- /**
- * Loads the list of all saved external executables.
- *
- * @return The list of all saved external executables or <code>null</code>.
- */
- public static List<Map<String, String>> load() {
- List<Map<String, String>> l = new ArrayList<Map<String, String>>();
-
- IPath stateLocation = UIPlugin.getDefault().getStateLocation();
- if (stateLocation != null) {
- File f = stateLocation.append(".executables/data.properties").toFile(); //$NON-NLS-1$
- if (f.canRead()) {
- FileReader r = null;
-
- try {
- Properties data = new Properties();
- r= new FileReader(f);
- data.load(r);
-
- Map<Integer, Map<String, String>> c = new HashMap<Integer, Map<String, String>>();
- for (String name : data.stringPropertyNames()) {
- if (name == null || name.indexOf('.') == -1) continue;
- int ix = name.indexOf('.');
- String n = name.substring(0, ix);
- String k = (ix + 1) < name.length() ? name.substring(ix + 1) : null;
- if (n == null || k == null) continue;
-
- Integer i = null;
- try { i = Integer.decode(n); } catch (NumberFormatException e) { /* ignored on purpose */ }
- if (i == null) continue;
-
- Map<String, String> m = c.get(i);
- if (m == null) {
- m = new HashMap<String, String>();
- c.put(i, m);
- }
- Assert.isNotNull(m);
-
- m.put(k, data.getProperty(name));
- }
-
- List<Integer> k = new ArrayList<Integer>(c.keySet());
- Collections.sort(k);
- for (Integer i : k) {
- Map<String, String> m = c.get(i);
- if (m != null && !m.isEmpty()) l.add(m);
- }
- } catch (Exception e) {
- if (Platform.inDebugMode()) {
- e.printStackTrace();
- }
- } finally {
- if (r != null) try { r.close(); } catch (IOException e) { /* ignored on purpose */ }
- }
- }
- }
-
- // Lookup git bash (Windows Hosts only)
- if (!gitBashSearchDone && Platform.OS_WIN32.equals(Platform.getOS())) {
- // Check the existing entries first
- // Find a entry labeled "Git Bash"
- Map<String, String> m = null;
- for (Map<String, String> candidate : l) {
- String name = candidate.get(IExternalExecutablesProperties.PROP_NAME);
- if ("Git Bash".equals(name)) { //$NON-NLS-1$
- m = candidate;
- break;
- }
- }
-
- // If not found in the existing entries, check the path
- if (m == null) {
- String gitPath = null;
- String iconPath = null;
-
- String path = System.getenv("PATH"); //$NON-NLS-1$
- if (path != null) {
- StringTokenizer tokenizer = new StringTokenizer(path, ";"); //$NON-NLS-1$
- while (tokenizer.hasMoreTokens()) {
- String token = tokenizer.nextToken();
- File f = new File(token, "git.exe"); //$NON-NLS-1$
- if (f.canRead()) {
- File f2 = new File(f.getParentFile().getParentFile(), "bin/sh.exe"); //$NON-NLS-1$
- if (f2.canExecute()) {
- gitPath = f2.getAbsolutePath();
- }
-
- iconPath = getGitIconPath(f.getParentFile().getParentFile());
-
- break;
- }
- }
- }
-
- // if it is not found in the PATH, check the default install locations
- if (gitPath == null) {
- File f = new File("C:/Program Files (x86)/Git/bin/sh.exe"); //$NON-NLS-1$
- if (!f.exists()) {
- f = new File("C:/Program Files/Git/bin/sh.exe"); //$NON-NLS-1$
- }
-
- if (f.exists() && f.canExecute()) {
- gitPath = f.getAbsolutePath();
- iconPath = getGitIconPath(f.getParentFile().getParentFile());
- }
- }
-
- if (gitPath != null) {
- m = new HashMap<String, String>();
- m.put(IExternalExecutablesProperties.PROP_NAME, "Git Bash"); //$NON-NLS-1$
- m.put(IExternalExecutablesProperties.PROP_PATH, gitPath);
- m.put(IExternalExecutablesProperties.PROP_ARGS, "--login -i"); //$NON-NLS-1$
- if (iconPath != null) m.put(IExternalExecutablesProperties.PROP_ICON, iconPath);
- m.put(IExternalExecutablesProperties.PROP_TRANSLATE, Boolean.TRUE.toString());
-
- l.add(m);
- save(l);
- }
- }
-
- // Do not search again for git bash while the session is running
- gitBashSearchDone = true;
- }
-
- return l;
- }
-
- private static String getGitIconPath(File parent) {
- File f = new File(parent, "etc/git.ico"); //$NON-NLS-1$
- if (f.canRead()) {
- return f.getAbsolutePath();
- }
-
- // check for icon in newer versions of Git for Windows 32 bit
- f = new File(parent, "mingw32/share/git/git-for-windows.ico"); //$NON-NLS-1$
- if (f.canRead()) {
- return f.getAbsolutePath();
- }
-
- // check for icon in newer versions of Git for Windows 64 bit
- f = new File(parent, "mingw64/share/git/git-for-windows.ico"); //$NON-NLS-1$
- if (f.canRead()) {
- return f.getAbsolutePath();
- }
-
- return null;
- }
-
- /**
- * Saves the list of external executables.
- *
- * @param l The list of external executables or <code>null</code>.
- */
- @SuppressWarnings("cast")
- public static void save(List<Map<String, String>> l) {
- ISourceProviderService sourceProviderService = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class);
- ExternalExecutablesState stateService = (ExternalExecutablesState) sourceProviderService.getSourceProvider(ExternalExecutablesState.CONFIGURED_STATE);
-
- IPath stateLocation = UIPlugin.getDefault().getStateLocation();
- if (stateLocation != null) {
- File f = stateLocation.append(".executables/data.properties").toFile(); //$NON-NLS-1$
- if (f.isFile() && (l == null || l.isEmpty())) {
- @SuppressWarnings("unused")
- boolean s = f.delete();
-
- if (stateService != null) stateService.disable();
- } else {
- FileWriter w = null;
-
- try {
- Properties data = new Properties();
- for (int i = 0; i < l.size(); i++) {
- Map<String, String> m = l.get(i);
- for (Entry<String, String> e : m.entrySet()) {
- String key = Integer.toString(i) + "." + e.getKey(); //$NON-NLS-1$
- data.setProperty(key, e.getValue());
- }
- }
-
- if (!f.exists()) {
- @SuppressWarnings("unused")
- boolean s = f.getParentFile().mkdirs();
- s = f.createNewFile();
- }
- w = new FileWriter(f);
- data.store(w, null);
-
- if (stateService != null) stateService.enable();
- } catch (Exception e) {
- if (Platform.inDebugMode()) {
- e.printStackTrace();
- }
- } finally {
- if (w != null) {
- try {
- w.flush();
- w.close();
- } catch (IOException e) {
- /* ignored on purpose */
- }
- }
- }
- }
- }
- }
-
- /**
- * Loads the image data suitable for showing an icon in a menu
- * (16 x 16, 8bit depth) from the given file.
- *
- * @param path The image file path. Must not be <code>null</code>.
- * @return The image data or <code>null</code>.
- */
- public static ImageData loadImage(String path) {
- Assert.isNotNull(path);
-
- ImageData id = null;
- ImageData biggest = null;
-
- ImageLoader loader = new ImageLoader();
- ImageData[] data = loader.load(path);
-
- if (data != null) {
- for (ImageData d : data) {
- if (d.height == 16 && d.width == 16) {
- if (id == null || id.height != 16 && id.width != 16) {
- id = d;
- } else if (d.depth < id.depth && d.depth >= 8){
- id = d;
- }
- } else {
- if (id == null) {
- id = d;
- biggest = d;
- } else if (id.height != 16 && d.height < id.height && id.width != 16 && d.width < id.width) {
- id = d;
- } else if (biggest == null || d.height > biggest.height && d.width > biggest.width) {
- biggest = d;
- }
- }
- }
- }
-
- // if the icon is still to big -> downscale the biggest
- if (id != null && id.height > 16 && id.width > 16) {
- id = biggest.scaledTo(16, 16);
- }
-
- return id;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.manager;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-import org.eclipse.tm.terminal.view.ui.view.TerminalsView;
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IPartService;
-import org.eclipse.ui.IPerspectiveDescriptor;
-import org.eclipse.ui.IPerspectiveListener;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PerspectiveAdapter;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Terminal console manager.
- */
-public class ConsoleManager {
-
- // Constant to indicate any secondary id is acceptable
- private final static String ANY_SECONDARY_ID = new String("*"); //$NON-NLS-1$
-
- // Reference to the perspective listener instance
- private final IPerspectiveListener perspectiveListener;
-
- // Internal perspective listener implementation
- static class ConsoleManagerPerspectiveListener extends PerspectiveAdapter {
- private final List<IViewReference> references = new ArrayList<IViewReference>();
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.PerspectiveAdapter#perspectiveActivated(org.eclipse.ui.IWorkbenchPage, org.eclipse.ui.IPerspectiveDescriptor)
- */
- @Override
- public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
- // If the old references list is empty, just return
- if (references.isEmpty()) return;
- // Create a copy of the old view references list
- List<IViewReference> oldReferences = new ArrayList<IViewReference>(references);
-
- // Get the current list of view references
- List<IViewReference> references = new ArrayList<IViewReference>(Arrays.asList(page.getViewReferences()));
- for (IViewReference reference : oldReferences) {
- if (references.contains(reference)) continue;
- // Previous visible terminals console view reference, make visible again
- try {
- page.showView(reference.getId(), reference.getSecondaryId(), IWorkbenchPage.VIEW_VISIBLE);
- } catch (PartInitException e) { /* Failure on part instantiation is ignored */ }
- }
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.PerspectiveAdapter#perspectivePreDeactivate(org.eclipse.ui.IWorkbenchPage, org.eclipse.ui.IPerspectiveDescriptor)
- */
- @Override
- public void perspectivePreDeactivate(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
- references.clear();
- for (IViewReference reference : page.getViewReferences()) {
- IViewPart part = reference.getView(false);
- if (part instanceof TerminalsView && !references.contains(reference)) {
- references.add(reference);
- }
- }
- }
- }
-
- // Reference to the part listener instance
- private final IPartListener2 partListener;
-
- // The ids of the last activated terminals view
- /* default */ String lastActiveViewId = null;
- /* default */ String lastActiveSecondaryViewId = null;
-
- // Internal part listener implementation
- class ConsoleManagerPartListener implements IPartListener2 {
-
- @Override
- public void partActivated(IWorkbenchPartReference partRef) {
- IWorkbenchPart part = partRef.getPart(false);
- if (part instanceof ITerminalsView) {
- lastActiveViewId = ((ITerminalsView)part).getViewSite().getId();
- lastActiveSecondaryViewId = ((ITerminalsView)part).getViewSite().getSecondaryId();
- //System.out.println("Terminals view activated: id = " + lastActiveViewId + ", secondary id = " + lastActiveSecondaryViewId); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
-
- @Override
- public void partBroughtToTop(IWorkbenchPartReference partRef) {
- }
-
- @Override
- public void partClosed(IWorkbenchPartReference partRef) {
- }
-
- @Override
- public void partDeactivated(IWorkbenchPartReference partRef) {
- }
-
- @Override
- public void partOpened(IWorkbenchPartReference partRef) {
- }
-
- @Override
- public void partHidden(IWorkbenchPartReference partRef) {
- }
-
- @Override
- public void partVisible(IWorkbenchPartReference partRef) {
- }
-
- @Override
- public void partInputChanged(IWorkbenchPartReference partRef) {
- }
- }
-
- /*
- * Thread save singleton instance creation.
- */
- private static class LazyInstanceHolder {
- public static ConsoleManager fInstance = new ConsoleManager();
- }
-
- /**
- * Returns the singleton instance for the console manager.
- */
- public static ConsoleManager getInstance() {
- return LazyInstanceHolder.fInstance;
- }
-
- /**
- * Constructor.
- */
- ConsoleManager() {
- super();
-
- perspectiveListener = new ConsoleManagerPerspectiveListener();
- partListener = new ConsoleManagerPartListener();
-
- if (PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) {
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(perspectiveListener);
-
- IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
- service.addPartListener(partListener);
- }
- }
-
- /**
- * Returns the active workbench window page if the workbench is still running.
- *
- * @return The active workbench window page or <code>null</code>
- */
- private final IWorkbenchPage getActiveWorkbenchPage() {
- // To lookup the console view, the workbench must be still running
- if (PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) {
- return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- }
- return null;
- }
-
- /**
- * Returns the console view if available within the active workbench window page.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- * @param secondaryId The terminals console view secondary id or <code>null</code>.
- *
- * @return The console view instance if available or <code>null</code> otherwise.
- */
- public ITerminalsView findConsoleView(String id, String secondaryId) {
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- ITerminalsView view = null;
-
- // Get the active workbench page
- IWorkbenchPage page = getActiveWorkbenchPage();
- if (page != null) {
- // Look for the view
- IViewPart part = getTerminalsViewWithSecondaryId(id != null ? id : IUIConstants.ID, secondaryId, true);
- // Check the interface
- if (part instanceof ITerminalsView) {
- view = (ITerminalsView)part;
- }
- }
-
- return view;
- }
-
- /**
- * Search and return a terminal view with a specific secondary id
- *
- * @param id The terminals console view id. Must not be <code>null</code>.
- * @param secondaryId The terminals console view secondary id or <code>null</code>.
- * @param restore <code>True</code> if to try to restore the view, <code>false</code> otherwise.
- *
- * @return The terminals console view instance or <code>null</code> if not found.
- */
- private IViewPart getTerminalsViewWithSecondaryId(String id, String secondaryId, boolean restore) {
- Assert.isNotNull(id);
-
- IWorkbenchPage page = getActiveWorkbenchPage();
-
- IViewReference[] refs = page.getViewReferences();
- for (int i = 0; i < refs.length; i++) {
- IViewReference ref = refs[i];
- if (ref.getId().equals(id)) {
- if (ANY_SECONDARY_ID.equals(secondaryId)
- || secondaryId == null && ref.getSecondaryId() == null
- || secondaryId != null && secondaryId.equals(ref.getSecondaryId())) {
- return ref.getView(restore);
- }
- }
- }
- return null;
- }
-
- /**
- * Search and return the active terminals view.
- *
- * @param id The terminals console view id. Must not be <code>null</code>.
- * @param secondaryId The terminals console view secondary id or <code>null</code>.
- * @return The terminals console view instance or <code>null</code> if not found.
- */
- private IViewPart getActiveTerminalsView(String id, String secondaryId) {
- Assert.isNotNull(id);
-
- IViewPart part = null;
-
- if (id.equals(lastActiveViewId)) {
- if (secondaryId == null || ANY_SECONDARY_ID.equals(secondaryId) || secondaryId.equals(lastActiveSecondaryViewId)) {
- part = getTerminalsViewWithSecondaryId(lastActiveViewId, lastActiveSecondaryViewId, false);
- }
- }
-
- if (part == null) {
- part = getTerminalsViewWithSecondaryId(id, secondaryId, true);
- if (part != null) {
- lastActiveViewId = part.getViewSite().getId();
- lastActiveSecondaryViewId = part.getViewSite().getSecondaryId();
- }
- }
-
- return part;
- }
-
- /**
- * Return a new secondary id to use, based on the number of open terminal views.
- *
- * @param id The terminals console view id. Must not be <code>null</code>.
- * @return The next secondary id, or <code>null</code> if it is the first one
- * @since 4.1
- */
- public String getNextTerminalSecondaryId(String id) {
- Assert.isNotNull(id);
-
- IWorkbenchPage page = getActiveWorkbenchPage();
- Map<String, IViewReference> terminalViews = new HashMap<String, IViewReference>();
-
- int maxNumber = 0;
- IViewReference[] refs = page.getViewReferences();
- for (int i = 0; i < refs.length; i++) {
- IViewReference ref = refs[i];
- if (ref.getId().equals(id)) {
- if (ref.getSecondaryId() != null) {
- terminalViews.put(ref.getSecondaryId(), ref);
- int scondaryIdInt = Integer.parseInt(ref.getSecondaryId());
- if (scondaryIdInt > maxNumber) {
- maxNumber = scondaryIdInt;
- }
- }
- else {
- // add the one with secondaryId == null with 0 by default
- terminalViews.put(Integer.toString(0), ref);
- }
- }
- }
- if (terminalViews.size() == 0) {
- return null;
- }
-
- int i = 0;
- for (; i < maxNumber; i++) {
- String secondaryIdStr = Integer.toString(i);
- if (!terminalViews.keySet().contains(secondaryIdStr)) {
- // found a free slot
- if (i == 0)
- return null;
- return Integer.toString(i);
- }
- }
- // add a new one
- return Integer.toString(i + 1);
- }
-
- /**
- * Show the terminals console view specified by the given id.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- */
- public IViewPart showConsoleView(String id, String secondaryId) {
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- // Get the active workbench page
- IWorkbenchPage page = getActiveWorkbenchPage();
- if (page != null) {
- try {
- // show the view
- IViewPart part = getActiveTerminalsView(id != null ? id : IUIConstants.ID, secondaryId);
- if (part == null) part = page.showView(id != null ? id : IUIConstants.ID, secondaryId, IWorkbenchPage.VIEW_ACTIVATE);
- // and force the view to the foreground
- page.bringToTop(part);
- return part;
- }
- catch (PartInitException e) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- return null;
- }
-
- /**
- * Bring the terminals console view, specified by the given id, to the top of the view stack.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- * @param secondaryId The terminals console view secondary id or <code>null</code>.
- * @param activate If <code>true</code> activate the console view.
- */
- private IViewPart bringToTop(String id, String secondaryId, boolean activate) {
- // Get the active workbench page
- IWorkbenchPage page = getActiveWorkbenchPage();
- if (page != null) {
- // get (last) active terminal view
- IViewPart activePart = getActiveTerminalsView(id != null ? id : IUIConstants.ID, secondaryId);
- if (activePart == null) {
- // Create a new one
- IViewPart newPart = showConsoleView(id != null ? id : IUIConstants.ID, getSecondaryId(secondaryId, id));
- return newPart;
- }
-
- if (activate) page.activate(activePart);
- else page.bringToTop(activePart);
-
- return activePart;
- }
- return null;
- }
-
- /**
- * Return the secondary id to use.
- * @param secondaryId
- * @param id
- * @return the secondaryId argument is not null, or *, otherwise use the auto generated secondary id.
- */
- private String getSecondaryId(String secondaryId, String id){
- if(secondaryId==null || ANY_SECONDARY_ID.equals(secondaryId)){
- return getNextTerminalSecondaryId(id != null ? id : IUIConstants.ID);
- }
-
- return secondaryId;
- }
-
- /**
- * Opens the console with the given title and connector.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- * @param title The console title. Must not be <code>null</code>.
- * @param encoding The terminal encoding or <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- * @param flags The flags controlling how the console is opened or <code>null</code> to use defaults.
- */
- public CTabItem openConsole(String id, String title, String encoding, ITerminalConnector connector, Object data, Map<String, Boolean> flags) {
- return openConsole(id, ANY_SECONDARY_ID, title, encoding, connector, data, flags);
- }
-
- /**
- * Opens the console with the given title and connector.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- * @param secondaryId The terminals console view secondary id or <code>null</code>.
- * @param title The console title. Must not be <code>null</code>.
- * @param encoding The terminal encoding or <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- * @param flags The flags controlling how the console is opened or <code>null</code> to use defaults.
- */
- @SuppressWarnings("cast")
- public CTabItem openConsole(String id, String secondaryId, String title, String encoding, ITerminalConnector connector, Object data, Map<String, Boolean> flags) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- // Get the flags handled by the openConsole method itself
- boolean activate = flags != null && flags.containsKey("activate") ? flags.get("activate").booleanValue() : false; //$NON-NLS-1$ //$NON-NLS-2$
- boolean forceNew = flags != null && flags.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW) ? flags.get(ITerminalsConnectorConstants.PROP_FORCE_NEW).booleanValue() : false;
-
- // Make the consoles view visible
- IViewPart part = bringToTop(id, secondaryId, activate);
- if (!(part instanceof ITerminalsView)) return null;
- // Cast to the correct type
- ITerminalsView view = (ITerminalsView)part;
-
- // Get the tab folder manager associated with the view
- TabFolderManager manager = (TabFolderManager) view.getAdapter(TabFolderManager.class);
- if (manager == null) return null;
-
- // Lookup an existing console first
- String secId = ((IViewSite)part.getSite()).getSecondaryId();
- CTabItem item = findConsole(id, secId, title, connector, data);
-
- // Switch to the tab folder page _before_ calling TabFolderManager#createItem(...).
- // The createItem(...) method invokes the corresponding connect and this may take
- // a while if connecting to a remote host. To allow a "Connecting..." decoration,
- // the tab folder page needs to be visible.
- view.switchToTabFolderControl();
-
- // If no existing console exist or forced -> Create the tab item
- if (item == null || forceNew) {
- // If configured, check all existing tab items if they are associated
- // with terminated consoles
- if (UIPlugin.getScopedPreferences().getBoolean(IPreferenceKeys.PREF_REMOVE_TERMINATED_TERMINALS)) {
- // Remote all terminated tab items. This will invoke the
- // tab's dispose listener.
- manager.removeTerminatedItems();
- // Switch back to the tab folder control as removeTerminatedItems()
- // may have triggered the switch to the empty space control.
- view.switchToTabFolderControl();
- }
-
- // Create a new tab item
- item = manager.createTabItem(title, encoding, connector, data, flags);
- }
- // If still null, something went wrong
- if (item == null) return null;
-
- // Make the item the active console
- manager.bringToTop(item);
-
- // Make sure the terminals view has the focus after opening a new terminal
- view.setFocus();
-
- // Return the tab item of the opened console
- return item;
- }
-
- /**
- * Lookup a console with the given title and the given terminal connector.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- * <b>Note:</b> The method will handle unified console titles itself.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- * @param secondaryId The terminals console view secondary id or <code>null</code>.
- * @param title The console title. Must not be <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- *
- * @return The corresponding console tab item or <code>null</code>.
- */
- @SuppressWarnings("cast")
- public CTabItem findConsole(String id, String secondaryId, String title, ITerminalConnector connector, Object data) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- // Get the console view
- ITerminalsView view = findConsoleView(id, secondaryId);
- if (view == null) return null;
-
- // Get the tab folder manager associated with the view
- TabFolderManager manager = (TabFolderManager) view.getAdapter(TabFolderManager.class);
- if (manager == null) return null;
-
- return manager.findTabItem(title, connector, data);
- }
-
- /**
- * Lookup a console which is assigned with the given terminal control.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- *
- * @param control The terminal control. Must not be <code>null</code>.
- * @return The corresponding console tab item or <code>null</code>.
- */
- @SuppressWarnings("cast")
- public CTabItem findConsole(ITerminalControl control) {
- Assert.isNotNull(control);
-
- CTabItem item = null;
-
- IWorkbenchPage page = getActiveWorkbenchPage();
- if (page != null) {
- IViewReference[] refs = page.getViewReferences();
- for (int i = 0; i < refs.length; i++) {
- IViewReference ref = refs[i];
- IViewPart part = ref != null ? ref.getView(false) : null;
- if (part instanceof ITerminalsView) {
- CTabFolder tabFolder = (CTabFolder) part.getAdapter(CTabFolder.class);
- if (tabFolder == null) continue;
- CTabItem[] candidates = tabFolder.getItems();
- for (CTabItem candidate : candidates) {
- Object data = candidate.getData();
- if (data instanceof ITerminalControl && control.equals(data)) {
- item = candidate;
- break;
- }
- }
- }
- if (item != null) break;
- }
- }
-
- return item;
- }
-
- /**
- * Search all console views for the one that contains a specific connector.
- * <p>
- * <b>Note:</b> The method will handle unified console titles itself.
- *
- * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
- * @param title The console title. Must not be <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- *
- * @return The corresponding console tab item or <code>null</code>.
- */
- @SuppressWarnings("cast")
- private CTabItem findConsoleForTerminalConnector(String id, String title, ITerminalConnector connector, Object data) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
-
- IWorkbenchPage page = getActiveWorkbenchPage();
- if (page != null) {
- IViewReference[] refs = page.getViewReferences();
- for (int i = 0; i < refs.length; i++) {
- IViewReference ref = refs[i];
- if (ref.getId().equals(id)) {
- IViewPart part = ref.getView(true);
- if (part instanceof ITerminalsView) {
- // Get the tab folder manager associated with the view
- TabFolderManager manager = (TabFolderManager) part.getAdapter(TabFolderManager.class);
- if (manager == null) {
- continue;
- }
- CTabItem item = manager.findTabItem(title, connector, data);
- if (item != null) {
- return item;
- }
- }
- }
- }
- }
- return null;
- }
-
- /**
- * Close the console with the given title and the given terminal connector.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- * <b>Note:</b> The method will handle unified console titles itself.
- *
- * @param title The console title. Must not be <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- */
- public void closeConsole(String id, String title, ITerminalConnector connector, Object data) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- // Lookup the console with this connector
- CTabItem console = findConsoleForTerminalConnector(id, title, connector, data);
- // If found, dispose the console
- if (console != null) {
- console.dispose();
- }
- }
-
- /**
- * Terminate (disconnect) the console with the given title and the given terminal connector.
- * <p>
- * <b>Note:</b> The method must be called within the UI thread.
- * <b>Note:</b> The method will handle unified console titles itself.
- *
- * @param title The console title. Must not be <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- */
- public void terminateConsole(String id, String title, ITerminalConnector connector, Object data) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- // Lookup the console
- CTabItem console = findConsoleForTerminalConnector(id, title, connector, data);
- // If found, disconnect the console
- if (console != null && !console.isDisposed()) {
- ITerminalViewControl terminal = (ITerminalViewControl)console.getData();
- if (terminal != null && !terminal.isDisposed()) {
- terminal.disconnectTerminal();
- }
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.nls;
-
-import java.lang.reflect.Field;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Terminal plug-in externalized strings management.
- */
-public class Messages extends NLS {
-
- // The plug-in resource bundle name
- private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.view.ui.nls.Messages"; //$NON-NLS-1$
-
- /**
- * Static constructor.
- */
- static {
- // Load message values from bundle file
- NLS.initializeMessages(BUNDLE_NAME, Messages.class);
- }
-
- /**
- * Returns the corresponding string for the given externalized strings
- * key or <code>null</code> if the key does not exist.
- *
- * @param key The externalized strings key or <code>null</code>.
- * @return The corresponding string or <code>null</code>.
- */
- public static String getString(String key) {
- if (key != null) {
- try {
- Field field = Messages.class.getDeclaredField(key);
- return (String)field.get(null);
- } catch (Exception e) { /* ignored on purpose */ }
- }
-
- return null;
- }
-
- // **** Declare externalized string id's down here *****
-
- public static String Extension_error_missingRequiredAttribute;
- public static String Extension_error_duplicateExtension;
- public static String Extension_error_invalidExtensionPoint;
-
- public static String AbstractTriggerCommandHandler_error_executionFailed;
-
- public static String AbstractAction_error_commandExecutionFailed;
-
- public static String AbstractConfigurationPanel_delete;
- public static String AbstractConfigurationPanel_deleteButtonTooltip;
- public static String AbstractConfigurationPanel_hosts;
- public static String AbstractConfigurationPanel_encoding;
- public static String AbstractConfigurationPanel_encoding_custom;
- public static String AbstractConfigurationPanel_encoding_custom_title;
- public static String AbstractConfigurationPanel_encoding_custom_message;
- public static String AbstractConfigurationPanel_encoding_custom_error;
-
- public static String TabTerminalListener_consoleClosed;
- public static String TabTerminalListener_consoleConnecting;
-
- public static String NewTerminalViewAction_menu;
- public static String NewTerminalViewAction_tooltip;
-
- public static String ToggleCommandFieldAction_menu;
- public static String ToggleCommandFieldAction_toolTip;
-
- public static String SelectEncodingAction_menu;
- public static String SelectEncodingAction_tooltip;
-
- public static String ProcessSettingsPage_dialogTitle;
- public static String ProcessSettingsPage_processImagePathSelectorControl_label;
- public static String ProcessSettingsPage_processImagePathSelectorControl_button;
- public static String ProcessSettingsPage_processArgumentsControl_label;
- public static String ProcessSettingsPage_processWorkingDirControl_label;
- public static String ProcessSettingsPage_localEchoSelectorControl_label;
-
- public static String OutputStreamMonitor_error_readingFromStream;
-
- public static String InputStreamMonitor_error_writingToStream;
-
- public static String TerminalService_error_cannotCreateConnector;
- public static String TerminalService_defaultTitle;
-
- public static String LaunchTerminalSettingsDialog_title;
- public static String LaunchTerminalSettingsDialog_combo_label;
- public static String LaunchTerminalSettingsDialog_group_label;
-
- public static String TabScrollLockAction_text;
- public static String TabScrollLockAction_tooltip;
-
- public static String LaunchTerminalSettingsDialog_error_title;
- public static String LaunchTerminalSettingsDialog_error_invalidSettings;
- public static String LaunchTerminalSettingsDialog_error_unknownReason;
-
- public static String EncodingSelectionDialog_title;
-
- public static String TabFolderManager_encoding;
- public static String TabFolderManager_state_connected;
- public static String TabFolderManager_state_connecting;
- public static String TabFolderManager_state_closed;
-
- public static String NoteCompositeHelper_note_label;
-
- // showin messages
-
- public static String ProcessConnector_error_creatingProcess;
-
- public static String PreferencePage_label;
- public static String PreferencePage_executables_label;
- public static String PreferencePage_executables_column_name_label;
- public static String PreferencePage_executables_column_path_label;
- public static String PreferencePage_executables_button_add_label;
- public static String PreferencePage_executables_button_edit_label;
- public static String PreferencePage_executables_button_remove_label;
- public static String PreferencePage_workingDir_label;
- public static String PreferencePage_workingDir_userhome_label;
- public static String PreferencePage_workingDir_eclipsehome_label;
- public static String PreferencePage_workingDir_eclipsews_label;
- public static String PreferencePage_workingDir_button_browse;
- public static String PreferencePage_workingDir_note_label;
- public static String PreferencePage_workingDir_note_text;
- public static String PreferencePage_workingDir_button_variables;
- public static String PreferencePage_workingDir_invalid;
- public static String PreferencePage_command_label;
- public static String PreferencePage_command_button_browse;
- public static String PreferencePage_command_invalid;
- public static String PreferencePage_command_note_label;
- public static String PreferencePage_command_note_text;
- public static String PreferencePage_command_arguments_label;
-
- public static String ExternalExecutablesDialog_title_add;
- public static String ExternalExecutablesDialog_title_edit;
- public static String ExternalExecutablesDialog_button_add;
- public static String ExternalExecutablesDialog_button_browse;
- public static String ExternalExecutablesDialog_field_path;
- public static String ExternalExecutablesDialog_field_name;
- public static String ExternalExecutablesDialog_field_args;
- public static String ExternalExecutablesDialog_field_icon;
- public static String ExternalExecutablesDialog_field_translate;
-
-}
+++ /dev/null
-###############################################################################
-# Copyright (c) 2012, 2016 Wind River Systems, Inc. and others. All rights reserved.
-# This program and the accompanying materials are made available under the terms
-# of the Eclipse Public License v1.0 which accompanies this distribution, and is
-# available at http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Wind River Systems - initial API and implementation
-###############################################################################
-
-Extension_error_missingRequiredAttribute=Required attribute "{0}" missing for extension "{1}"!
-Extension_error_duplicateExtension=Duplicate extension with id ''{0}''. Ignoring duplicated contribution from contributor ''{1}''!
-Extension_error_invalidExtensionPoint=Failed to instantiate the executable extension from extension point ''{0}''.
-
-AbstractTriggerCommandHandler_error_executionFailed=Failed to execute command {0}.
-
-AbstractAction_error_commandExecutionFailed="Failed to execute command (id = {0}). Possibly caused by: {1}
-
-AbstractConfigurationPanel_delete=Delete
-AbstractConfigurationPanel_deleteButtonTooltip=Delete terminal settings for host
-AbstractConfigurationPanel_hosts=Hosts:
-AbstractConfigurationPanel_encoding=Encoding:
-AbstractConfigurationPanel_encoding_custom=Other...
-AbstractConfigurationPanel_encoding_custom_title=Other...
-AbstractConfigurationPanel_encoding_custom_message=Please enter the name of the encoding to use for the terminal.
-AbstractConfigurationPanel_encoding_custom_error=Unsupported encoding. Please enter the name of a supported encoding.
-
-TabTerminalListener_consoleClosed=<{1}> {0}
-TabTerminalListener_consoleConnecting={0} : {1}...
-
-NewTerminalViewAction_menu=New Terminal View
-NewTerminalViewAction_tooltip=Open a new Terminal View
-
-ToggleCommandFieldAction_menu=Toggle Command Input Field
-ToggleCommandFieldAction_toolTip=Toggle Command Input Field
-
-SelectEncodingAction_menu=Switch Encoding...
-SelectEncodingAction_tooltip=Switch the Encoding of the active Terminal
-
-ProcessSettingsPage_dialogTitle=Select Process Image
-ProcessSettingsPage_processImagePathSelectorControl_label=Image Path:
-ProcessSettingsPage_processImagePathSelectorControl_button=Browse
-ProcessSettingsPage_processArgumentsControl_label=Arguments:
-ProcessSettingsPage_processWorkingDirControl_label=Working Dir:
-ProcessSettingsPage_localEchoSelectorControl_label=Local Echo
-
-OutputStreamMonitor_error_readingFromStream=Exception when reading from stream. Possibly caused by: {0}
-
-InputStreamMonitor_error_writingToStream=Exception when writing to stream. Possibly caused by: {0}
-
-TerminalService_error_cannotCreateConnector=Cannot create a valid terminal connector instance from the provided terminal properties.
-TerminalService_defaultTitle=Console
-
-LaunchTerminalSettingsDialog_title=Launch Terminal
-LaunchTerminalSettingsDialog_combo_label=Choose terminal:
-LaunchTerminalSettingsDialog_group_label=Settings
-
-TabScrollLockAction_text=Scroll &Lock
-TabScrollLockAction_tooltip=Scroll Lock
-
-LaunchTerminalSettingsDialog_error_title=Terminal Settings
-LaunchTerminalSettingsDialog_error_invalidSettings=The specified settings are invalid\n\n\
-{0}\n\n\
-Please review and specify valid settings. Or cancel the settings dialog to abort.
-LaunchTerminalSettingsDialog_error_unknownReason=Cannot determine specifically which setting is invalid.
-
-EncodingSelectionDialog_title=Encoding
-
-TabFolderManager_encoding=Encoding: {0}
-TabFolderManager_state_connected=Connected
-TabFolderManager_state_connecting=Connecting
-TabFolderManager_state_closed=Closed
-
-NoteCompositeHelper_note_label=Note:
-
-# ----- showin
-
-ProcessConnector_error_creatingProcess=Exception when creating process. Possibly caused by: {0}
-
-ExternalExecutablesDialog_title_add=Add External Executable
-ExternalExecutablesDialog_title_edit=Edit External Executable
-ExternalExecutablesDialog_button_add=Add
-ExternalExecutablesDialog_button_browse=Browse...
-ExternalExecutablesDialog_field_path=Path:
-ExternalExecutablesDialog_field_name=Name:
-ExternalExecutablesDialog_field_args=Arguments:
-ExternalExecutablesDialog_field_icon=Icon:
-ExternalExecutablesDialog_field_translate=Translate Backslashes on Paste
-
-# ----- Preference Pages -----
-
-PreferencePage_label=Local Terminal Settings:
-PreferencePage_executables_label="Show In ..." Custom Entries
-PreferencePage_executables_column_name_label=Name
-PreferencePage_executables_column_path_label=Path
-PreferencePage_executables_button_add_label=Add...
-PreferencePage_executables_button_edit_label=Edit...
-PreferencePage_executables_button_remove_label=Remove
-PreferencePage_workingDir_label=Initial Working Directory
-PreferencePage_workingDir_userhome_label=User home
-PreferencePage_workingDir_eclipsehome_label=Eclipse home
-PreferencePage_workingDir_eclipsews_label=Eclipse workspace
-PreferencePage_workingDir_button_browse=&Browse...
-PreferencePage_workingDir_note_label=Note:
-PreferencePage_workingDir_note_text=The chosen initial working directory might be overwritten by the current selection of the active view.
-PreferencePage_workingDir_button_variables=&Variables...
-PreferencePage_workingDir_invalid=Selected initial working directory is not a directory or is not readable.
-PreferencePage_command_label=Shell Command
-PreferencePage_command_button_browse=&Browse...
-PreferencePage_command_invalid=Selected shell command is not a file or is not readable or executable.
-PreferencePage_command_note_label=Note:
-PreferencePage_command_note_text=Leave the shell command empty to fallback to the SHELL environment variable or if not set, to /bin/sh.
-PreferencePage_command_arguments_label=Arguments:
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.panels;
-
-import java.util.Map;
-
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-
-/**
- * Abstract terminal launcher configuration panel implementation.
- */
-public abstract class AbstractConfigurationPanel implements IConfigurationPanel {
- private final IConfigurationPanelContainer container;
-
- private Composite topControl = null;
-
- // The selection
- private ISelection selection;
-
- private String message = null;
- private int messageType = IMessageProvider.NONE;
-
- private boolean enabled = true;
-
- /**
- * Constructor.
- *
- * @param container The configuration panel container or <code>null</code>.
- */
- public AbstractConfigurationPanel(IConfigurationPanelContainer container) {
- super();
- this.container = container;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#getContainer()
- */
- @Override
- public IConfigurationPanelContainer getContainer() {
- return container;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
- */
- @Override
- public final String getMessage() {
- return message;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
- */
- @Override
- public final int getMessageType() {
- return messageType;
- }
-
- /**
- * Set the message and the message type to display.
- *
- * @param message The message or <code>null</code>.
- * @param messageType The message type or <code>IMessageProvider.NONE</code>.
- */
- protected final void setMessage(String message, int messageType) {
- this.message = message;
- this.messageType = messageType;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#dispose()
- */
- @Override
- public void dispose() {
- }
-
- /**
- * Sets the top control.
- *
- * @param topControl The top control or <code>null</code>.
- */
- protected void setControl(Composite topControl) {
- this.topControl = topControl;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#getControl()
- */
- @Override
- public Composite getControl() {
- return topControl;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setSelection(org.eclipse.jface.viewers.ISelection)
- */
- @Override
- public void setSelection(ISelection selection) {
- this.selection = selection;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#getSelection()
- */
- @Override
- public ISelection getSelection() {
- return selection;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
- }
-
- /**
- * Returns the correctly prefixed dialog settings slot id. In case the given id
- * suffix is <code>null</code> or empty, <code>id</code> is returned as is.
- *
- * @param settingsSlotId The dialog settings slot id to prefix.
- * @param prefix The prefix.
- * @return The correctly prefixed dialog settings slot id.
- */
- public final String prefixDialogSettingsSlotId(String settingsSlotId, String prefix) {
- if (settingsSlotId != null && prefix != null && prefix.trim().length() > 0) {
- settingsSlotId = prefix + "." + settingsSlotId; //$NON-NLS-1$
- }
- return settingsSlotId;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setEnabled(boolean)
- */
- @Override
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- /**
- * @return Returns the enabled state.
- */
- public boolean isEnabled() {
- return enabled;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#isValid()
- */
- @Override
- public boolean isValid() {
- setMessage(null, NONE);
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#activate()
- */
- @Override
- public void activate() {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#extractData(java.util.Map)
- */
- @Override
- public void extractData(Map<String, Object> data) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupData(java.util.Map)
- */
- @Override
- public void setupData(Map<String, Object> data) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#updateData(java.util.Map)
- */
- @Override
- public void updateData(Map<String, Object> data) {
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.panels;
-
-import java.nio.charset.Charset;
-import java.nio.charset.IllegalCharsetNameException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.IContextPropertiesConstants;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.WorkbenchEncoding;
-import org.osgi.framework.Bundle;
-
-/**
- * Abstract terminal configuration panel implementation.
- */
-public abstract class AbstractExtendedConfigurationPanel extends AbstractConfigurationPanel {
- private static final String LAST_HOST_TAG = "lastHost";//$NON-NLS-1$
- private static final String HOSTS_TAG = "hosts";//$NON-NLS-1$
- private static final String ENCODINGS_TAG = "encodings"; //$NON-NLS-1$
-
- // The sub-controls
- /* default */ Combo hostCombo;
- private Button deleteHostButton;
- /* default */ Combo encodingCombo;
-
- // The last selected encoding
- /* default */ String lastSelectedEncoding;
- // The last entered custom encodings
- /* default */ final List<String> encodingHistory = new ArrayList<String>();
-
- // A map containing the settings per host
- protected final Map<String, Map<String, String>> hostSettingsMap = new HashMap<String, Map<String, String>>();
-
- /**
- * Constructor.
- *
- * @param container The configuration panel container or <code>null</code>.
- */
- public AbstractExtendedConfigurationPanel(IConfigurationPanelContainer container) {
- super(container);
- }
-
- /**
- * Returns the host name or IP from the current selection.
- *
- * @return The host name or IP, or <code>null</code>.
- */
- public String getSelectionHost() {
- ISelection selection = getSelection();
- if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
- Object element = ((IStructuredSelection) selection).getFirstElement();
- ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
- if (provider != null) {
- Map<String, String> props = provider.getTargetAddress(element);
- if (props != null && props.containsKey(IContextPropertiesConstants.PROP_ADDRESS)) {
- return props.get(IContextPropertiesConstants.PROP_ADDRESS);
- }
- }
- }
-
- return null;
- }
-
- /**
- * Returns the default encoding based on the current selection.
- *
- * @return The default encoding or <code>null</code>.
- */
- public String getSelectionEncoding() {
- ISelection selection = getSelection();
- if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
- Object element = ((IStructuredSelection) selection).getFirstElement();
- ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
- if (provider != null) {
- Object encoding = provider.getProperty(element, IContextPropertiesConstants.PROP_DEFAULT_ENCODING);
- if (encoding instanceof String) return ((String) encoding).trim();
- }
- }
-
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- String[] hosts = settings.getArray(HOSTS_TAG);
- if (hosts != null) {
- for (int i = 0; i < hosts.length; i++) {
- String hostEntry = hosts[i];
- String[] hostString = hostEntry.split("\\|");//$NON-NLS-1$
- String hostName = hostString[0];
- if (hostString.length == 2) {
- HashMap<String, String> attr = deSerialize(hostString[1]);
- hostSettingsMap.put(hostName, attr);
- }
- else {
- hostSettingsMap.put(hostName, new HashMap<String, String>());
- }
- }
- }
-
- if (!isWithoutSelection()) {
- String host = getSelectionHost();
- if (host != null) {
- fillSettingsForHost(host);
- }
- }
- else {
- if (hostCombo != null) {
- fillHostCombo();
- String lastHost = settings.get(LAST_HOST_TAG);
- if (lastHost != null) {
- int index = hostCombo.indexOf(lastHost);
- if (index != -1) {
- hostCombo.select(index);
- }
- else {
- hostCombo.select(0);
- }
- }
- else {
- hostCombo.select(0);
- }
- fillSettingsForHost(hostCombo.getText());
- }
- }
-
- encodingHistory.clear();
- String[] encodings = settings.getArray(ENCODINGS_TAG);
- if (encodings != null && encodings.length > 0) {
- encodingHistory.addAll(Arrays.asList(encodings));
- for (String encoding : encodingHistory) {
- encodingCombo.add(encoding, encodingCombo.getItemCount() - 1);
- }
- }
- }
-
- /**
- * Restore the encodings widget values.
- *
- * @param settings The dialog settings. Must not be <code>null</code>.
- * @param idPrefix The prefix or <code>null</code>.
- */
- protected void doRestoreEncodingsWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- String encoding = settings.get(prefixDialogSettingsSlotId(ITerminalsConnectorConstants.PROP_ENCODING, idPrefix));
- if (encoding != null && encoding.trim().length() > 0) {
- setEncoding(encoding);
- }
- }
-
- /**
- * Decode the host settings from the given string.
- *
- * @param hostString The encoded host settings. Must not be <code>null</code>.
- * @return The decoded host settings.
- */
- private HashMap<String, String> deSerialize(String hostString) {
- Assert.isNotNull(hostString);
- HashMap<String, String> attr = new HashMap<String, String>();
-
- if (hostString.length() != 0) {
- String[] hostAttrs = hostString.split("\\:");//$NON-NLS-1$
- for (int j = 0; j < hostAttrs.length-1; j = j + 2) {
- String key = hostAttrs[j];
- String value = hostAttrs[j + 1];
- attr.put(key, value);
- }
- }
- return attr;
- }
-
- /**
- * Encode the host settings to a string.
- *
- * @param hostEntry The host settings. Must not be <code>null</code>.
- * @param hostString The host string to encode to. Must not be <code>null</code>.
- */
- private void serialize(Map<String, String> hostEntry, StringBuilder hostString) {
- Assert.isNotNull(hostEntry);
- Assert.isNotNull(hostString);
-
- if (hostEntry.keySet().size() != 0) {
- Iterator<Entry<String, String>> nextHostAttr = hostEntry.entrySet().iterator();
- while (nextHostAttr.hasNext()) {
- Entry<String, String> entry = nextHostAttr.next();
- String attrKey = entry.getKey();
- String attrValue = entry.getValue();
- hostString.append(attrKey + ":" + attrValue + ":");//$NON-NLS-1$ //$NON-NLS-2$
- }
- hostString.deleteCharAt(hostString.length() - 1);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
- */
- @Override
- public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
- Iterator<String> nextHost = hostSettingsMap.keySet().iterator();
- String[] hosts = new String[hostSettingsMap.keySet().size()];
- int i = 0;
- while (nextHost.hasNext()) {
- StringBuilder hostString = new StringBuilder();
- String host = nextHost.next();
- hostString.append(host + "|");//$NON-NLS-1$
- Map<String, String> hostEntry = hostSettingsMap.get(host);
- serialize(hostEntry, hostString);
- hosts[i] = hostString.toString();
- i = i + 1;
- }
- settings.put(HOSTS_TAG, hosts);
- if (isWithoutSelection()) {
- if (hostCombo != null) {
- String host = getHostFromSettings();
- if (host != null) settings.put(LAST_HOST_TAG, host);
- }
- }
-
- if (!encodingHistory.isEmpty()) {
- settings.put(ENCODINGS_TAG, encodingHistory.toArray(new String[encodingHistory.size()]));
- }
- }
-
- /**
- * Save the encodings widget values.
- *
- * @param settings The dialog settings. Must not be <code>null</code>.
- * @param idPrefix The prefix or <code>null</code>.
- */
- protected void doSaveEncodingsWidgetValues(IDialogSettings settings, String idPrefix) {
- Assert.isNotNull(settings);
-
- String encoding = getEncoding();
- if (encoding != null) {
- settings.put(prefixDialogSettingsSlotId(ITerminalsConnectorConstants.PROP_ENCODING, idPrefix), encoding);
- }
- }
-
- protected abstract void saveSettingsForHost(boolean add);
-
- protected abstract void fillSettingsForHost(String host);
-
- protected abstract String getHostFromSettings();
-
- protected void removeSecurePassword(String host) {
- // noop by default
- }
-
- /**
- * Returns the selected host from the hosts combo widget.
- *
- * @return The selected host or <code>null</code>.
- */
- protected final String getHostFromCombo() {
- return hostCombo != null && !hostCombo.isDisposed() ? hostCombo.getText() : null;
- }
-
- protected void removeSettingsForHost(String host) {
- if (hostSettingsMap.containsKey(host)) {
- hostSettingsMap.remove(host);
- }
- }
-
- /**
- * Returns the list of host names of the persisted hosts.
- *
- * @return The list of host names.
- */
- private List<String> getHostList() {
- List<String> hostList = new ArrayList<String>();
- hostList.addAll(hostSettingsMap.keySet());
- return hostList;
- }
-
- /**
- * Fill the host combo with the stored per host setting names.
- */
- protected void fillHostCombo() {
- if (hostCombo != null) {
- hostCombo.removeAll();
- List<String> hostList = getHostList();
- Collections.sort(hostList);
- Iterator<String> nextHost = hostList.iterator();
- while (nextHost.hasNext()) {
- String host = nextHost.next();
- hostCombo.add(host);
- }
- if (hostList.size() <= 1) {
- hostCombo.setEnabled(false);
- }
- else {
- hostCombo.setEnabled(true);
-
- }
- if (deleteHostButton != null) {
- if (hostList.size() == 0) {
- deleteHostButton.setEnabled(false);
- }
- else {
- deleteHostButton.setEnabled(true);
- }
- }
- }
- }
-
- public boolean isWithoutSelection() {
- ISelection selection = getSelection();
- if (selection == null) {
- return true;
- }
- if (selection instanceof IStructuredSelection && selection.isEmpty()) {
- return true;
- }
- return false;
- }
-
- public boolean isWithHostList() {
- return true;
- }
-
- /**
- * Create the host selection combo.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- * @param separator If <code>true</code>, a separator will be added after the controls.
- */
- protected void createHostsUI(Composite parent, boolean separator) {
- Assert.isNotNull(parent);
-
- if (isWithoutSelection() && isWithHostList()) {
- Composite comboComposite = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(3, false);
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- comboComposite.setLayout(layout);
- comboComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-
- Label label = new Label(comboComposite, SWT.HORIZONTAL);
- label.setText(Messages.AbstractConfigurationPanel_hosts);
-
- hostCombo = new Combo(comboComposite, SWT.READ_ONLY);
- hostCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- hostCombo.addSelectionListener(new SelectionListener() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- String host = hostCombo.getText();
- fillSettingsForHost(host);
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- widgetSelected(e);
- }
- });
-
- deleteHostButton = new Button(comboComposite, SWT.NONE);
- // deleteHostButton.setText(Messages.AbstractConfigurationPanel_delete);
-
- ISharedImages workbenchImages = UIPlugin.getDefault().getWorkbench().getSharedImages();
- deleteHostButton.setImage(workbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE).createImage());
-
- deleteHostButton.setToolTipText(Messages.AbstractConfigurationPanel_deleteButtonTooltip);
- deleteHostButton.addSelectionListener(new SelectionListener() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- String host = getHostFromCombo();
- if (host != null && host.length() != 0) {
- removeSettingsForHost(host);
- removeSecurePassword(host);
- fillHostCombo();
- hostCombo.select(0);
- host = getHostFromCombo();
- if (host != null && host.length() != 0) {
- fillSettingsForHost(host);
- }
- }
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- widgetSelected(e);
- }
- });
-
- if (separator) {
- Label sep = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
- sep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- }
- }
- }
-
- /**
- * Create the encoding selection combo.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- * @param separator If <code>true</code>, a separator will be added before the controls.
- */
- protected void createEncodingUI(final Composite parent, boolean separator) {
- Assert.isNotNull(parent);
-
- if (separator) {
- Label sep = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
- sep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- }
-
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-
- Label label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.AbstractConfigurationPanel_encoding);
-
- encodingCombo = new Combo(panel, SWT.READ_ONLY);
- encodingCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- encodingCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (Messages.AbstractConfigurationPanel_encoding_custom.equals(encodingCombo.getText())) {
- InputDialog dialog = new InputDialog(parent.getShell(),
- Messages.AbstractConfigurationPanel_encoding_custom_title,
- Messages.AbstractConfigurationPanel_encoding_custom_message,
- null,
- new IInputValidator() {
- @Override
- public String isValid(String newText) {
- boolean valid = false;
- try {
- if (newText != null && !"".equals(newText)) { //$NON-NLS-1$
- valid = Charset.isSupported(newText);
- }
- } catch (IllegalCharsetNameException e) { /* ignored on purpose */ }
-
- if (!valid) {
- return newText != null && !"".equals(newText) ? Messages.AbstractConfigurationPanel_encoding_custom_error : ""; //$NON-NLS-1$ //$NON-NLS-2$
- }
- return null;
- }
- });
- if (dialog.open() == Window.OK) {
- String encoding = dialog.getValue();
- encodingCombo.add(encoding, encodingCombo.getItemCount() - 1);
- encodingCombo.select(encodingCombo.indexOf(encoding));
- lastSelectedEncoding = encodingCombo.getText();
-
- // Remember the last 5 custom encodings entered
- if (!encodingHistory.contains(encoding)) {
- if (encodingHistory.size() == 5) encodingHistory.remove(4);
- encodingHistory.add(encoding);
- }
-
- } else {
- encodingCombo.select(encodingCombo.indexOf(lastSelectedEncoding));
- }
- }
- }
- });
-
- fillEncodingCombo();
-
- // Apply any default encoding derived from the current selection
- String defaultEncoding = getSelectionEncoding();
- if (defaultEncoding != null && !"".equals(defaultEncoding)) { //$NON-NLS-1$
- setEncoding(defaultEncoding);
- }
- }
-
- /**
- * Fill the encoding combo.
- */
- protected void fillEncodingCombo() {
- if (encodingCombo != null) {
- List<String> encodings = new ArrayList<String>();
-
- // Default encoding
- encodings.add("Default (ISO-8859-1)"); //$NON-NLS-1$
-
- // The currently selected IDE encoding from the preferences
- String ideEncoding = getResourceEncoding();
-
- // The default Eclipse Workbench encoding (configured in the preferences)
- String eclipseEncoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
-
- // The default host (Java VM) encoding
- String hostEncoding = Charset.defaultCharset().name();
-
- addEncodings(encodings, "UTF-8", ideEncoding, eclipseEncoding, hostEncoding); //$NON-NLS-1$
-
- // The "Other..." encoding
- encodings.add(Messages.AbstractConfigurationPanel_encoding_custom);
-
- encodingCombo.setItems(encodings.toArray(new String[encodings.size()]));
- encodingCombo.select(0);
-
- lastSelectedEncoding = encodingCombo.getText();
- }
- }
-
- /**
- * Add given encoding names to the list. Duplicates are filtered out by comparing aliases.
- */
- private void addEncodings(List<String> encodings, String... toadd) {
- Set<String> aliases = new HashSet<String>();
- for (String name : toadd) {
- if (name == null)
- continue;
- try {
- Charset cs = Charset.forName(name);
- if (aliases.containsAll(cs.aliases()))
- continue;
- if (aliases.contains(name.toLowerCase()))
- continue;
- aliases.addAll(cs.aliases());
- aliases.add(name.toLowerCase());
- encodings.add(name);
- } catch (Exception e) {
- // skip
- }
- }
- }
-
- /**
- * Get the current value of the encoding preference. If the value is not set
- * return <code>null</code>.
- * <p>
- * <b>Note:</b> Copied from <code>org.eclipse.ui.ide.IDEEncoding</code>.
- *
- * @return String
- */
- @SuppressWarnings("deprecation")
- private String getResourceEncoding() {
- String preference = null;
- Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- preference = org.eclipse.core.resources.ResourcesPlugin.getPlugin().getPluginPreferences().getString(org.eclipse.core.resources.ResourcesPlugin.PREF_ENCODING);
- }
-
- return preference != null && preference.length() > 0 ? preference : null;
- }
-
- /**
- * Select the encoding.
- *
- * @param encoding The encoding. Must not be <code>null</code>.
- */
- protected void setEncoding(String encoding) {
- Assert.isNotNull(encoding);
-
- if (encodingCombo != null && !encodingCombo.isDisposed()) {
- int index = encodingCombo.indexOf("ISO-8859-1".equals(encoding) ? "Default (ISO-8859-1)" : encoding); //$NON-NLS-1$ //$NON-NLS-2$
- if (index != -1) encodingCombo.select(index);
- else {
- encodingCombo.add(encoding, encodingCombo.getItemCount() - 1);
- encodingCombo.select(encodingCombo.indexOf(encoding));
- }
-
- lastSelectedEncoding = encodingCombo.getText();
- }
- }
-
- /**
- * Returns the selected encoding.
- *
- * @return The selected encoding or <code>null</code>.
- */
- protected String getEncoding() {
- String encoding = encodingCombo != null && !encodingCombo.isDisposed() ? encodingCombo.getText() : null;
- return encoding != null && encoding.startsWith("Default") ? null : encoding; //$NON-NLS-1$
- }
-
- /**
- * Returns if or if not the selected encoding is supported.
- *
- * @return <code>True</code> if the selected encoding is supported.
- */
- protected boolean isEncodingValid() {
- try {
- String encoding = getEncoding();
- return Charset.isSupported(encoding != null ? encoding : "ISO-8859-1"); //$NON-NLS-1$
- } catch (IllegalCharsetNameException e) {
- return false;
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.preferences;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.core.variables.IStringVariableManager;
-import org.eclipse.core.variables.VariablesPlugin;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
-import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableLayout;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.controls.NoteCompositeHelper;
-import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
-import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
-import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesDialog;
-import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.osgi.framework.Bundle;
-
-/**
- * Terminal top preference page implementation.
- */
-public class PreferencePage extends org.eclipse.jface.preference.PreferencePage implements IWorkbenchPreferencePage {
- /* default */ TableViewer viewer;
- private Button addButton;
- private Button editButton;
- private Button removeButton;
- /* default */ Combo workingDir;
- private Button browseButton;
-
- private Button variablesButton;
- private boolean hasVariablesButton = false;
-
- /* default */ Text command;
- private Button commandBrowseButton;
- private Text arguments;
-
- /* default */ final List<Map<String, String>> executables = new ArrayList<Map<String, String>>();
- /* default */ final Map<String, Image> images = new HashMap<String, Image>();
-
- /* default */ static final Object[] NO_ELEMENTS = new Object[0];
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
- */
- @Override
- public void init(IWorkbench workbench) {
- Bundle bundle = Platform.getBundle("org.eclipse.debug.ui"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- hasVariablesButton = true;
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected Control createContents(final Composite parent) {
- final GC gc = new GC(parent);
- gc.setFont(JFaceResources.getDialogFont());
-
- Composite panel = new Composite(parent, SWT.NONE);
- panel.setLayout(new GridLayout());
- GridData layoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
- panel.setLayoutData(layoutData);
-
- Label label = new Label(panel, SWT.HORIZONTAL);
- label.setText(Messages.PreferencePage_label);
- label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-
- if (!Platform.OS_WIN32.equals(Platform.getOS())) {
- Group group = new Group(panel, SWT.NONE);
- group.setText(Messages.PreferencePage_command_label);
- group.setLayout(new GridLayout(2, false));
- group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
-
- command = new Text(group, SWT.SINGLE | SWT.BORDER);
- command.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- command.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- boolean valid = true;
- String message = null;
-
- String text = command.getText();
- if (text != null && !"".equals(text.trim())) { //$NON-NLS-1$
- IPath p = new Path(text.trim());
- valid = p.toFile().isFile() && p.toFile().canRead() && p.toFile().canExecute();
- if (!valid) message = Messages.PreferencePage_command_invalid;
- }
-
- setValid(valid);
- setErrorMessage(message);
- }
- });
-
- commandBrowseButton = new Button(group, SWT.PUSH);
- commandBrowseButton.setText(Messages.PreferencePage_command_button_browse);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 14);
- commandBrowseButton.setLayoutData(layoutData);
- commandBrowseButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(parent.getShell(), SWT.OPEN);
-
- String text = command.getText();
- if (text != null && !"".equals(text.trim())) { //$NON-NLS-1$
- IPath p = new Path(text);
-
- if (p.toFile().isFile() || !p.toFile().exists()) {
- dialog.setFilterPath(p.removeLastSegments(1).toOSString());
- dialog.setFileName(p.lastSegment());
- } else if (p.toFile().isDirectory()) {
- dialog.setFilterPath(p.toOSString());
- }
- }
-
- String selected = dialog.open();
- if (selected != null) {
- IPath sp = new Path(selected);
- command.setText(sp.toOSString());
- }
- }
- });
-
- String cmd = UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX);
- if (cmd != null && !"".equals(cmd)) { //$NON-NLS-1$
- command.setText(new Path(cmd).toOSString());
- }
-
- Composite argsPanel = new Composite(group, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- layout.marginHeight = 0; layout.marginWidth = 0;
- argsPanel.setLayout(layout);
- layoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
- layoutData.horizontalSpan = 2;
- argsPanel.setLayoutData(layoutData);
-
- label = new Label(argsPanel, SWT.NONE);
- label.setText(Messages.PreferencePage_command_arguments_label);
-
- arguments = new Text(argsPanel, SWT.SINGLE | SWT.BORDER);
- arguments.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-
- String args = UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS);
- if (args != null && !"".equals(args)) { //$NON-NLS-1$
- arguments.setText(args);
- }
-
- NoteCompositeHelper.createNoteComposite(group.getFont(), group, Messages.PreferencePage_command_note_label, Messages.PreferencePage_command_note_text);
- }
-
- Group group = new Group(panel, SWT.NONE);
- group.setText(Messages.PreferencePage_workingDir_label);
- group.setLayout(new GridLayout(hasVariablesButton ? 3 : 2, false));
- group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
-
- workingDir = new Combo(group, SWT.DROP_DOWN);
- Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- workingDir.setItems(new String[] { Messages.PreferencePage_workingDir_userhome_label, Messages.PreferencePage_workingDir_eclipsehome_label, Messages.PreferencePage_workingDir_eclipsews_label });
- } else {
- workingDir.setItems(new String[] { Messages.PreferencePage_workingDir_userhome_label, Messages.PreferencePage_workingDir_eclipsehome_label });
- }
- workingDir.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- workingDir.select(0);
- workingDir.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- boolean valid = true;
- String message = null;
-
- String text = workingDir.getText();
- if (text != null && !"".equals(text.trim()) //$NON-NLS-1$
- && !Messages.PreferencePage_workingDir_userhome_label.equals(text)
- && !Messages.PreferencePage_workingDir_eclipsehome_label.equals(text)
- && !Messages.PreferencePage_workingDir_eclipsews_label.equals(text)) {
- try {
- // Resolve possible dynamic variables
- IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
- String resolved = vm.performStringSubstitution(text.trim());
-
- IPath p = new Path(resolved);
- valid = p.toFile().canRead() && p.toFile().isDirectory();
- if (!valid) message = Messages.PreferencePage_workingDir_invalid;
- } catch (CoreException ex) {
- valid = false;
- message = ex.getLocalizedMessage();
- }
- }
-
- setValid(valid);
- setErrorMessage(message);
- }
- });
-
- browseButton = new Button(group, SWT.PUSH);
- browseButton.setText(Messages.PreferencePage_workingDir_button_browse);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 14);
- browseButton.setLayoutData(layoutData);
- browseButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- IPath uh = null;
- IPath eh = null;
- IPath ew = null;
-
- // HOME
- String home = System.getProperty("user.home"); //$NON-NLS-1$
- if (home != null && !"".equals(home)) uh = new Path(home); //$NON-NLS-1$
-
- // ECLIPSE_HOME
- String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$
- if (eclipseHomeLocation != null) {
- try {
- URI uri = URIUtil.fromString(eclipseHomeLocation);
- File f = URIUtil.toFile(uri);
- eh = new Path(f.getAbsolutePath());
- } catch (URISyntaxException ex) { /* ignored on purpose */ }
- }
-
- // ECLIPSE_WORKSPACE
- Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null
- && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null
- && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) {
- ew = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation();
- }
- }
-
- DirectoryDialog dialog = new DirectoryDialog(parent.getShell(), SWT.OPEN);
-
- // Determine the filter path
- String text = workingDir.getText();
- if (Messages.PreferencePage_workingDir_userhome_label.equals(text)) {
- dialog.setFilterPath(uh.toOSString());
- } else if (Messages.PreferencePage_workingDir_eclipsehome_label.equals(text)) {
- dialog.setFilterPath(eh.toOSString());
- } else if (Messages.PreferencePage_workingDir_eclipsews_label.equals(text)) {
- dialog.setFilterPath(ew.toOSString());
- } else if (text != null && !"".equals(text.trim())) { //$NON-NLS-1$
- try {
- // Resolve possible dynamic variables
- IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
- String resolved = vm.performStringSubstitution(text.trim());
- dialog.setFilterPath(resolved);
- } catch (CoreException ex) {
- if (Platform.inDebugMode()) {
- UIPlugin.getDefault().getLog().log(ex.getStatus());
- }
- }
- }
-
- String selected = dialog.open();
- if (selected != null) {
- IPath sp = new Path(selected);
-
- if (uh.equals(sp)) {
- workingDir.select(0);
- } else if (eh.equals(sp)) {
- workingDir.select(1);
- } else if (ew.equals(sp)) {
- workingDir.select(2);
- } else {
- workingDir.setText(sp.toOSString());
- }
- }
- }
- });
-
- if (hasVariablesButton) {
- variablesButton = new Button(group, SWT.PUSH);
- variablesButton.setText(Messages.PreferencePage_workingDir_button_variables);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 14);
- variablesButton.setLayoutData(layoutData);
- variablesButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- org.eclipse.debug.ui.StringVariableSelectionDialog dialog = new org.eclipse.debug.ui.StringVariableSelectionDialog(getShell());
- dialog.open();
- String expression = dialog.getVariableExpression();
- if (expression != null) {
- if ("${eclipse_home}".equals(expression)) { //$NON-NLS-1$
- workingDir.select(1);
- } else if ("${workspace_loc}".equals(expression)) { //$NON-NLS-1$
- workingDir.select(2);
- } else {
- workingDir.setText(expression);
- }
- }
- }
- });
- }
-
- String initialCwd = UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD);
- if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd) || "".equals(initialCwd.trim())) { //$NON-NLS-1$
- workingDir.select(0);
- } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd) || "${eclipse_home}".equals(initialCwd)) { //$NON-NLS-1$
- workingDir.select(1);
- } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd) || "${workspace_loc}".equals(initialCwd)) { //$NON-NLS-1$
- workingDir.select(2);
- } else {
- workingDir.setText(new Path(initialCwd).toOSString());
- }
-
- NoteCompositeHelper.createNoteComposite(group.getFont(), group, Messages.PreferencePage_workingDir_note_label, Messages.PreferencePage_workingDir_note_text);
-
- group = new Group(panel, SWT.NONE);
- group.setText(Messages.PreferencePage_executables_label);
- group.setLayout(new GridLayout(2, false));
- group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
-
- viewer = new TableViewer(group, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
-
- Table table = viewer.getTable();
- table.setHeaderVisible(true);
- table.setLinesVisible(true);
-
- TableColumn column = new TableColumn(table, SWT.LEFT);
- column.setText(Messages.PreferencePage_executables_column_name_label);
- column = new TableColumn(table, SWT.LEFT);
- column.setText(Messages.PreferencePage_executables_column_path_label);
-
- ColumnViewerToolTipSupport.enableFor(viewer);
-
- TableLayout tableLayout = new TableLayout();
- tableLayout.addColumnData(new ColumnWeightData(35));
- tableLayout.addColumnData(new ColumnWeightData(65));
- table.setLayout(tableLayout);
-
- layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
- layoutData.heightHint = Dialog.convertHeightInCharsToPixels(gc.getFontMetrics(), 10);
- table.setLayoutData(layoutData);
-
- Composite buttonsPanel = new Composite(group, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0; layout.marginWidth = 0;
- buttonsPanel.setLayout(layout);
- buttonsPanel.setLayoutData(new GridData(SWT.LEAD, SWT.BEGINNING, false, false));
-
- addButton = new Button(buttonsPanel, SWT.PUSH);
- addButton.setText(Messages.PreferencePage_executables_button_add_label);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 10);
- addButton.setLayoutData(layoutData);
- addButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- ExternalExecutablesDialog dialog = new ExternalExecutablesDialog(PreferencePage.this.getShell(), false);
- if (dialog.open() == Window.OK) {
- // Get the executable properties and add it to the the list
- Map<String, String> executableData = dialog.getExecutableData();
- if (executableData != null && !executables.contains(executableData)) {
- executables.add(executableData);
- viewer.refresh();
- }
- }
- }
- });
-
- editButton = new Button(buttonsPanel, SWT.PUSH);
- editButton.setText(Messages.PreferencePage_executables_button_edit_label);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 10);
- editButton.setLayoutData(layoutData);
- editButton.addSelectionListener(new SelectionAdapter() {
- @SuppressWarnings("unchecked")
- @Override
- public void widgetSelected(SelectionEvent e) {
- ISelection s = viewer.getSelection();
- if (s instanceof IStructuredSelection && !s.isEmpty()) {
- Object element = ((IStructuredSelection)s).getFirstElement();
- if (element instanceof Map) {
- final Map<String, String> m = (Map<String, String>)element;
- ExternalExecutablesDialog dialog = new ExternalExecutablesDialog(PreferencePage.this.getShell(), true);
- dialog.setExecutableData(m);
- if (dialog.open() == Window.OK) {
- Map<String, String> executableData = dialog.getExecutableData();
- if (executableData != null) {
- m.clear();
- m.putAll(executableData);
- viewer.refresh();
- }
- }
- }
- }
- }
- });
-
- removeButton = new Button(buttonsPanel, SWT.PUSH);
- removeButton.setText(Messages.PreferencePage_executables_button_remove_label);
- layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 10);
- removeButton.setLayoutData(layoutData);
- removeButton.addSelectionListener(new SelectionAdapter() {
- @SuppressWarnings("unchecked")
- @Override
- public void widgetSelected(SelectionEvent e) {
- ISelection s = viewer.getSelection();
- if (s instanceof IStructuredSelection && !s.isEmpty()) {
- Iterator<?> iterator = ((IStructuredSelection)s).iterator();
- while (iterator.hasNext()) {
- Object element = iterator.next();
- if (element instanceof Map) {
- Map<String, Object> m = (Map<String, Object>)element;
- executables.remove(m);
- }
- viewer.refresh();
- }
- }
- }
- });
-
- viewer.setContentProvider(new IStructuredContentProvider() {
- @Override
- public Object[] getElements(Object inputElement) {
- if (inputElement instanceof List && !((List<?>)inputElement).isEmpty()) {
- return ((List<?>)inputElement).toArray();
- }
- return NO_ELEMENTS;
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
-
- @Override
- public void dispose() {
- }
- });
-
- viewer.setLabelProvider(new ITableLabelProvider() {
- @SuppressWarnings("unchecked")
- @Override
- public String getColumnText(Object element, int columnIndex) {
- if (element instanceof Map) {
- Map<String, Object> m = (Map<String, Object>)element;
-
- switch (columnIndex) {
- case 0:
- return (String)m.get(IExternalExecutablesProperties.PROP_NAME);
- case 1:
- return (String)m.get(IExternalExecutablesProperties.PROP_PATH);
- }
- }
- return null;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Image getColumnImage(Object element, int columnIndex) {
- Image i = null;
-
- if (element instanceof Map) {
- switch (columnIndex) {
- case 0:
- Map<String, Object> m = (Map<String, Object>)element;
- String icon = (String) m.get(IExternalExecutablesProperties.PROP_ICON);
- if (icon != null) {
- i = images.get(icon);
- if (i == null) {
- ImageData id = ExternalExecutablesManager.loadImage(icon);
- if (id != null) {
- ImageDescriptor d = ImageDescriptor.createFromImageData(id);
- if (d != null) i = d.createImage();
- if (i != null) images.put(icon, i);
- }
- }
- }
- break;
- case 1:
- break;
- }
- }
-
- return i;
- }
-
- @Override
- public void removeListener(ILabelProviderListener listener) {
- }
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- @Override
- public void dispose() {
- }
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- }
- });
-
- List<Map<String, String>> l = ExternalExecutablesManager.load();
- if (l != null) executables.addAll(l);
-
- viewer.setInput(executables);
-
- viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- updateButtons();
- }
- });
-
- updateButtons();
-
- gc.dispose();
-
- return panel;
- }
-
- /**
- * Updates the button states.
- */
- protected void updateButtons() {
- if (viewer != null) {
- addButton.setEnabled(true);
-
- ISelection selection = viewer.getSelection();
-
- boolean hasSelection = selection != null && !selection.isEmpty();
- int count = selection instanceof IStructuredSelection ? ((IStructuredSelection)selection).size() : 0;
-
- editButton.setEnabled(hasSelection && count == 1);
- removeButton.setEnabled(hasSelection && count > 0);
- } else {
- addButton.setEnabled(false);
- editButton.setEnabled(false);
- removeButton.setEnabled(false);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
- */
- @Override
- protected void performDefaults() {
- if (!Platform.OS_WIN32.equals(Platform.getOS())) {
- command.setText(""); //$NON-NLS-1$
- arguments.setText(""); //$NON-NLS-1$
- }
-
- String initialCwd = UIPlugin.getScopedPreferences().getDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD);
- if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd) || "".equals(initialCwd.trim())) { //$NON-NLS-1$
- workingDir.select(0);
- } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd) || "${eclipse_home}".equals(initialCwd)) { //$NON-NLS-1$
- workingDir.select(1);
- } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd) || "${workspace_loc}".equals(initialCwd)) { //$NON-NLS-1$
- workingDir.select(2);
- } else {
- workingDir.setText(new Path(initialCwd).toOSString());
- }
-
- executables.clear();
- List<Map<String, String>> l = ExternalExecutablesManager.load();
- if (l != null) executables.addAll(l);
- viewer.refresh();
-
- super.performDefaults();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#performOk()
- */
- @Override
- public boolean performOk() {
- if (!Platform.OS_WIN32.equals(Platform.getOS())) {
- String text = command.getText();
- IPath p = new Path(text.trim());
- UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX, p.toFile().isFile() && p.toFile().canRead() && p.toFile().canExecute() ? p.toOSString() : null);
-
- text = arguments.getText();
- UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS, !"".equals(text.trim()) ? text.trim() : null); //$NON-NLS-1$
- }
-
- String text = workingDir.getText();
- if (text == null || Messages.PreferencePage_workingDir_userhome_label.equals(text) || "".equals(text.trim())) { //$NON-NLS-1$
- UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, null);
- } else if (Messages.PreferencePage_workingDir_eclipsehome_label.equals(text)) {
- UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME);
- } else if (Messages.PreferencePage_workingDir_eclipsews_label.equals(text)) {
- UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS);
- } else {
- try {
- // Resolve possible dynamic variables
- IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
- String resolved = vm.performStringSubstitution(text.trim());
-
- IPath p = new Path(resolved);
- UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, p.toFile().canRead() && p.toFile().isDirectory() ? text.trim() : null);
- } catch (CoreException e) {
- if (Platform.inDebugMode()) {
- UIPlugin.getDefault().getLog().log(e.getStatus());
- }
- }
- }
-
- ExternalExecutablesManager.save(executables);
-
- return super.performOk();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.DialogPage#dispose()
- */
- @Override
- public void dispose() {
- for (Image i : images.values()) {
- i.dispose();
- }
- images.clear();
- super.dispose();
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.preferences;
-
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.tm.terminal.view.core.preferences.ScopedEclipsePreferences;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
-
-/**
- * Terminal default preferences initializer.
- */
-public class PreferencesInitializer extends AbstractPreferenceInitializer {
-
- /**
- * Constructor.
- */
- public PreferencesInitializer() {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
- */
- @Override
- public void initializeDefaultPreferences() {
- ScopedEclipsePreferences prefs = UIPlugin.getScopedPreferences();
-
- prefs.putDefaultBoolean(IPreferenceKeys.PREF_REMOVE_TERMINATED_TERMINALS, true);
-
- prefs.putDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME);
- prefs.putDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX, null);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.services;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalTabListener;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
-import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
-import org.eclipse.tm.terminal.view.ui.manager.ConsoleManager;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Terminal service implementation.
- */
-@SuppressWarnings("restriction")
-public class TerminalService implements ITerminalService {
- /**
- * The registered terminal tab dispose listeners.
- */
- private final ListenerList terminalTabListeners = new ListenerList();
-
- // Flag to remember if the terminal view has been restored or not.
- private boolean fRestoringView;
-
- // Terminal tab events
-
- /**
- * A terminal tab got disposed.
- */
- public static final int TAB_DISPOSED = 1;
-
- /**
- * Common terminal service runnable implementation.
- */
- protected static abstract class TerminalServiceRunnable {
-
- /**
- * Invoked to execute the terminal service runnable.
- *
- * @param id The terminals view id or <code>null</code>.
- * @param secondaryId The terminals view secondary id or <code>null</code>.
- * @param title The terminal tab title. Must not be <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- * @param done The callback to invoke if the operation finished or <code>null</code>.
- */
- public abstract void run(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done);
-
- /**
- * Returns if or if not to execute the runnable asynchronously.
- * <p>
- * The method returns per default <code>true</code>. Overwrite to
- * modify the behavior.
- *
- * @return <code>True</code> to execute the runnable asynchronously, <code>false</code> otherwise.
- */
- public boolean isExecuteAsync() { return true; }
- }
-
- /**
- * Constructor
- */
- public TerminalService() {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#addTerminalTabListener(org.eclipse.tm.terminal.view.core.interfaces.ITerminalTabListener)
- */
- @Override
- public final void addTerminalTabListener(ITerminalTabListener listener) {
- Assert.isNotNull(listener);
- terminalTabListeners.add(listener);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#removeTerminalTabListener(org.eclipse.tm.terminal.view.core.interfaces.ITerminalTabListener)
- */
- @Override
- public final void removeTerminalTabListener(ITerminalTabListener listener) {
- Assert.isNotNull(listener);
- terminalTabListeners.remove(listener);
- }
-
- /**
- * Convenience method for notifying the registered terminal tab listeners.
- *
- * @param event The terminal tab event.
- * @param source The disposed tab item. Must not be <code>null</code>.
- * @param data The custom data object associated with the disposed tab item or <code>null</code>.
- */
- public final void fireTerminalTabEvent(final int event, final Object source, final Object data) {
- Assert.isNotNull(source);
-
- // If no listener is registered, we are done here
- if (terminalTabListeners.isEmpty()) return;
-
- // Get the list or currently registered listeners
- Object[] l = terminalTabListeners.getListeners();
- // Loop the registered terminal tab listeners and invoke the proper method
- for (int i = 0; i < l.length; i++) {
- final ITerminalTabListener listener = (ITerminalTabListener) l[i];
- ISafeRunnable job = new ISafeRunnable() {
- @Override
- public void handleException(Throwable exception) {
- // already logged in Platform#run()
- }
-
- @Override
- public void run() throws Exception {
- switch (event) {
- case TAB_DISPOSED:
- listener.terminalTabDisposed(source, data);
- break;
- default:
- }
- }
- };
- SafeRunner.run(job);
- }
- }
-
- /**
- * Executes the given runnable operation and invokes the given callback, if any,
- * after the operation finished.
- *
- * @param properties The terminal properties. Must not be <code>null</code>.
- * @param runnable The terminal service runnable. Must not be <code>null</code>.
- * @param done The callback to invoke if the operation has been finished or <code>null</code>.
- */
- protected final void executeServiceOperation(final Map<String, Object> properties, final TerminalServiceRunnable runnable, final Done done) {
- Assert.isNotNull(properties);
- Assert.isNotNull(runnable);
-
- // Extract the properties
- String id = (String)properties.get(ITerminalsConnectorConstants.PROP_ID);
- String secondaryId = (String)properties.get(ITerminalsConnectorConstants.PROP_SECONDARY_ID);
- String title = (String)properties.get(ITerminalsConnectorConstants.PROP_TITLE);
- Object data = properties.get(ITerminalsConnectorConstants.PROP_DATA);
-
- // Normalize the terminals console view id
- id = normalizeId(id, data);
- // Normalize the terminal console tab title
- title = normalizeTitle(title, data);
-
- // Create the terminal connector instance
- final ITerminalConnector connector = createTerminalConnector(properties);
- if (connector == null) {
- // Properties contain invalid connector arguments
- if (done != null) {
- Exception e = new IllegalArgumentException(Messages.TerminalService_error_cannotCreateConnector);
- done.done(new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e));
- }
- return;
- }
-
- // Finalize the used variables
- final String finId = id;
- final String finSecondaryId = secondaryId;
- final String finTitle = title;
- final Object finData = data;
-
- // Execute the operation
- if (!runnable.isExecuteAsync()) {
- runnable.run(finId, finSecondaryId, finTitle, connector, finData, done);
- }
- else {
- try {
- Display display = PlatformUI.getWorkbench().getDisplay();
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- runnable.run(finId, finSecondaryId, finTitle, connector, finData, done);
- }
- });
- }
- catch (Exception e) {
- // if display is disposed, silently ignore.
- }
- }
- }
-
- /**
- * Normalize the terminals view id.
- *
- * @param id The terminals view id or <code>null</code>.
- * @param data The custom data object or <code>null</code>.
- *
- * @return The normalized terminals console view id.
- */
- protected String normalizeId(String id, Object data) {
- return id != null ? id : IUIConstants.ID;
- }
-
- /**
- * Normalize the terminal tab title.
- *
- * @param title The terminal tab title or <code>null</code>.
- * @param data The custom data object or <code>null</code>.
- *
- * @return The normalized terminal tab title.
- */
- protected String normalizeTitle(String title, Object data) {
- // If the title is explicitly specified, return as is
- if (title != null) return title;
-
- // Return the default console title in all other cases
- return Messages.TerminalService_defaultTitle;
- }
-
- /**
- * Creates the terminal connector configured within the given properties.
- *
- * @param properties The terminal console properties. Must not be <code>null</code>.
- * @return The terminal connector or <code>null</code>.
- */
- protected ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
- Assert.isNotNull(properties);
-
- // The terminal connector result object
- ITerminalConnector connector = null;
-
- // Get the launcher delegate id from the properties
- String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
- if (delegateId != null) {
- // Get the launcher delegate
- ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
- if (delegate != null) {
- // Create the terminal connector
- connector = delegate.createTerminalConnector(properties);
- }
- }
-
- return connector;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#openConsole(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
- */
- @Override
- public void openConsole(final Map<String, Object> properties, final Done done) {
- Assert.isNotNull(properties);
- final boolean restoringView = fRestoringView;
-
- executeServiceOperation(properties, new TerminalServiceRunnable() {
- @Override
- @SuppressWarnings("synthetic-access")
- public void run(final String id, final String secondaryId, final String title,
- final ITerminalConnector connector, final Object data, final Done done) {
- if (restoringView) {
- doRun(id, secondaryId, title, connector, data, done);
- } else {
- // First, restore the view. This opens consoles from the memento
- fRestoringView = true;
- ConsoleManager.getInstance().showConsoleView(id, secondaryId);
- fRestoringView = false;
-
- // After that schedule opening the requested console
- try {
- Display display = PlatformUI.getWorkbench().getDisplay();
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- doRun(id, secondaryId, title, connector, data, done);
- }
- });
- }
- catch (Exception e) {
- // if display is disposed, silently ignore.
- }
- }
- }
-
- public void doRun(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done) {
- // Determine the terminal encoding
- String encoding = (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING);
- // Create the flags to pass on to openConsole
- Map<String, Boolean> flags = new HashMap<String, Boolean>();
- flags.put("activate", Boolean.TRUE); //$NON-NLS-1$
- if (properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW) instanceof Boolean) {
- flags.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, (Boolean)properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW));
- }
- if (properties.get(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT) instanceof Boolean) {
- flags.put(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT, (Boolean)properties.get(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT));
- }
- // Open the new console
- CTabItem item;
- if (secondaryId != null)
- item = ConsoleManager.getInstance().openConsole(id, secondaryId, title, encoding, connector, data, flags);
- else
- item = ConsoleManager.getInstance().openConsole(id, title, encoding, connector, data, flags);
- // Associate the original terminal properties with the tab item.
- // This makes it easier to persist the connection data within the memento handler
- if (item != null && !item.isDisposed()) item.setData("properties", properties); //$NON-NLS-1$
-
- // Invoke the callback
- if (done != null) done.done(Status.OK_STATUS);
- }
- }, done);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#closeConsole(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
- */
- @Override
- public void closeConsole(final Map<String, Object> properties, final Done done) {
- Assert.isNotNull(properties);
-
- executeServiceOperation(properties, new TerminalServiceRunnable() {
- @Override
- public void run(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done) {
- // Close the console
- ConsoleManager.getInstance().closeConsole(id, title, connector, data);
- // Invoke the callback
- if (done != null) done.done(Status.OK_STATUS);
- }
- }, done);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#terminateConsole(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
- */
- @Override
- public void terminateConsole(Map<String, Object> properties, Done done) {
- Assert.isNotNull(properties);
-
- executeServiceOperation(properties, new TerminalServiceRunnable() {
- @Override
- public void run(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done) {
- // Close the console
- ConsoleManager.getInstance().terminateConsole(id, title, connector, data);
- // Invoke the callback
- if (done != null) done.done(Status.OK_STATUS);
- }
- }, done);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.streams;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
-import org.eclipse.ui.services.IDisposable;
-
-/**
- * Streams connector implementation.
- */
-public abstract class AbstractStreamsConnector extends TerminalConnectorImpl {
- // Reference to the stdin monitor
- private InputStreamMonitor stdInMonitor;
- // Reference to the stdout monitor
- private OutputStreamMonitor stdOutMonitor;
- // Reference to the stderr monitor
- private OutputStreamMonitor stdErrMonitor;
-
- // Reference to the list of stdout output listeners
- private ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = null;
- // Reference to the list of stderr output listeners
- private ITerminalServiceOutputStreamMonitorListener[] stderrListeners = null;
-
- /**
- * Set the list of stdout listeners.
- *
- * @param listeners The list of stdout listeners or <code>null</code>.
- */
- protected final void setStdoutListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
- this.stdoutListeners = listeners;
- }
-
- /**
- * Set the list of stderr listeners.
- *
- * @param listeners The list of stderr listeners or <code>null</code>.
- */
- protected final void setStderrListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
- this.stderrListeners = listeners;
- }
-
- /**
- * Connect the given streams. The streams connector will wrap each stream
- * with a corresponding terminal stream monitor.
- *
- * @param terminalControl The terminal control. Must not be <code>null</code>.
- * @param stdin The stdin stream or <code>null</code>.
- * @param stdout The stdout stream or <code>null</code>.
- * @param stderr The stderr stream or <code>null</code>.
- * @param localEcho Local echo on or off.
- * @param lineSeparator The line separator used by the stream.
- */
- protected void connectStreams(ITerminalControl terminalControl, OutputStream stdin, InputStream stdout, InputStream stderr, boolean localEcho, String lineSeparator) {
- Assert.isNotNull(terminalControl);
-
- // Create the input stream monitor
- if (stdin != null) {
- stdInMonitor = createStdInMonitor(terminalControl, stdin, localEcho, lineSeparator);
- // Register the connector if it implements IDisposable and stdout/stderr are not monitored
- if (stdout == null && stderr == null && this instanceof IDisposable) stdInMonitor.addDisposable((IDisposable)this);
- // Start the monitoring
- stdInMonitor.startMonitoring();
- }
-
- // Create the output stream monitor
- if (stdout != null) {
- stdOutMonitor = createStdOutMonitor(terminalControl, stdout, lineSeparator);
- // Register the connector if it implements IDisposable
- if (this instanceof IDisposable) stdOutMonitor.addDisposable((IDisposable)this);
- // Register the listeners
- if (stdoutListeners != null) {
- for (ITerminalServiceOutputStreamMonitorListener l : stdoutListeners) {
- stdOutMonitor.addListener(l);
- }
- }
- // Start the monitoring
- stdOutMonitor.startMonitoring();
- }
-
- // Create the error stream monitor
- if (stderr != null) {
- stdErrMonitor = createStdErrMonitor(terminalControl, stderr, lineSeparator);
- // Register the connector if it implements IDisposable and stdout is not monitored
- if (stdout == null && this instanceof IDisposable) stdErrMonitor.addDisposable((IDisposable)this);
- // Register the listeners
- if (stderrListeners != null) {
- for (ITerminalServiceOutputStreamMonitorListener l : stderrListeners) {
- stdErrMonitor.addListener(l);
- }
- }
- // Start the monitoring
- stdErrMonitor.startMonitoring();
- }
- }
-
- /**
- * Creates an stdin monitor for the given terminal control and stdin stream.
- * Subclasses may override to create a specialized stream monitor.
- *
- * @param terminalControl The terminal control. Must not be <code>null</code>.
- * @param stdin The stdin stream or <code>null</code>.
- * @param localEcho Local echo on or off.
- * @param lineSeparator The line separator used by the stream.
- *
- * @return input stream monitor
- */
- protected InputStreamMonitor createStdInMonitor(ITerminalControl terminalControl, OutputStream stdin, boolean localEcho, String lineSeparator) {
- return new InputStreamMonitor(terminalControl, stdin, localEcho, lineSeparator);
- }
-
- /**
- * Creates an stdout monitor for the given terminal control and stdout stream.
- * Subclasses may override to create a specialized stream monitor.
- *
- * @param terminalControl The terminal control. Must not be <code>null</code>.
- * @param stdout The stdout stream or <code>null</code>.
- * @param lineSeparator The line separator used by the stream.
- *
- * @return output stream monitor
- */
- protected OutputStreamMonitor createStdOutMonitor(ITerminalControl terminalControl, InputStream stdout, String lineSeparator) {
- return new OutputStreamMonitor(terminalControl, stdout, lineSeparator);
- }
-
- /**
- * Creates an stderr monitor for the given terminal control and stderr stream.
- * Subclasses may override to create a specialized stream monitor.
- *
- * @param terminalControl The terminal control. Must not be <code>null</code>.
- * @param stderr The stderr stream or <code>null</code>.
- * @param lineSeparator The line separator used by the stream.
- *
- * @return output stream monitor
- */
- protected OutputStreamMonitor createStdErrMonitor(ITerminalControl terminalControl, InputStream stderr, String lineSeparator) {
- return new OutputStreamMonitor(terminalControl, stderr, lineSeparator);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#doDisconnect()
- */
- @Override
- protected void doDisconnect() {
- // Dispose the streams
- if (stdInMonitor != null) { stdInMonitor.dispose(); stdInMonitor = null; }
- if (stdOutMonitor != null) { stdOutMonitor.dispose(); stdOutMonitor = null; }
- if (stdErrMonitor != null) { stdErrMonitor.dispose(); stdErrMonitor = null; }
-
- super.doDisconnect();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getTerminalToRemoteStream()
- */
- @Override
- public OutputStream getTerminalToRemoteStream() {
- return stdInMonitor;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.streams;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ILineSeparatorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.services.IDisposable;
-
-/**
- * Input stream monitor implementation.
- * <p>
- * <b>Note:</b> The input is coming <i>from</i> the terminal. Therefore, the input
- * stream monitor is attached to the stdin stream of the monitored (remote) process.
- */
-public class InputStreamMonitor extends OutputStream implements IDisposable {
- // Reference to the parent terminal control
- private final ITerminalControl terminalControl;
-
- // Reference to the monitored (output) stream
- private final OutputStream stream;
-
- // Reference to the thread writing the stream
- private volatile Thread thread;
-
- // Flag to mark the monitor disposed. When disposed,
- // no further data is written from the monitored stream.
- private volatile boolean disposed;
-
- // A list of object to dispose if this monitor is disposed
- private final List<IDisposable> disposables = new ArrayList<IDisposable>();
-
- // Queue to buffer the data to write to the output stream
- private final Queue<byte[]> queue = new LinkedList<byte[]>();
-
- // ***** Line separator replacement logic *****
-
- private final static int TERMINAL_SENDS_CR = 0;
- private final static int TERMINAL_SENDS_CRLF = 1;
- private final static int PROGRAM_EXPECTS_LF = 0;
- private final static int PROGRAM_EXPECTS_CRLF = 1;
- private final static int PROGRAM_EXPECTS_CR = 2;
- private final static int NO_CHANGE = 0;
- private final static int CHANGE_CR_TO_LF = 1;
- private final static int INSERT_LF_AFTER_CR = 2;
- private final static int REMOVE_CR = 3;
- private final static int REMOVE_LF = 4;
-
- // CRLF conversion table:
- //
- // Expected line separator --> | LF | CRLF | CR |
- // ------------------------------------+-----------------+--------------------+----------------+
- // Local echo off - control sends CR | change CR to LF | insert LF after CR | no change |
- // ------------------------------------+-----------------+--------------------+----------------+
- // Local echo on - control sends CRLF | remove CR | no change | remove LF |
- //
- private final static int[][] CRLF_REPLACEMENT = {
-
- {CHANGE_CR_TO_LF, INSERT_LF_AFTER_CR, NO_CHANGE},
- {REMOVE_CR, NO_CHANGE, REMOVE_LF}
- };
-
- private int replacement;
-
- /**
- * Constructor.
- *
- * @param terminalControl The parent terminal control. Must not be <code>null</code>.
- * @param stream The stream. Must not be <code>null</code>.
- * @param localEcho Local echo on or off.
- * @param lineSeparator The line separator used by the stream.
- */
- public InputStreamMonitor(ITerminalControl terminalControl, OutputStream stream, boolean localEcho, String lineSeparator) {
- super();
-
- Assert.isNotNull(terminalControl);
- this.terminalControl = terminalControl;
- Assert.isNotNull(stream);
- this.stream = stream;
-
- // Determine the line separator replacement setting
- int terminalSends = localEcho ? TERMINAL_SENDS_CRLF : TERMINAL_SENDS_CR;
- if (lineSeparator == null) {
- replacement = NO_CHANGE;
- } else {
- int programExpects;
- if (lineSeparator.equals(ILineSeparatorConstants.LINE_SEPARATOR_LF)) {
- programExpects = PROGRAM_EXPECTS_LF;
- }
- else if (lineSeparator.equals(ILineSeparatorConstants.LINE_SEPARATOR_CR)) {
- programExpects = PROGRAM_EXPECTS_CR;
- }
- else {
- programExpects = PROGRAM_EXPECTS_CRLF;
- }
- replacement = CRLF_REPLACEMENT[terminalSends][programExpects];
- }
-
- }
-
- /**
- * Returns the associated terminal control.
- *
- * @return The associated terminal control.
- */
- protected final ITerminalControl getTerminalControl() {
- return terminalControl;
- }
-
- /**
- * Adds the given disposable object to the list. The method will do nothing
- * if either the disposable object is already part of the list or the monitor
- * is disposed.
- *
- * @param disposable The disposable object. Must not be <code>null</code>.
- */
- public final void addDisposable(IDisposable disposable) {
- Assert.isNotNull(disposable);
- if (!disposed && !disposables.contains(disposable)) disposables.add(disposable);
- }
-
- /**
- * Removes the disposable object from the list.
- *
- * @param disposable The disposable object. Must not be <code>null</code>.
- */
- public final void removeDisposable(IDisposable disposable) {
- Assert.isNotNull(disposable);
- disposables.remove(disposable);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.services.IDisposable#dispose()
- */
- @Override
- public void dispose() {
- // If already disposed --> return immediately
- if (disposed) return;
-
- // Mark the monitor disposed
- disposed = true;
-
- // Close the stream (ignore exceptions on close)
- try { stream.close(); } catch (IOException e) { /* ignored on purpose */ }
- // And interrupt the thread
- close();
-
- // Dispose all registered disposable objects
- for (IDisposable disposable : disposables) disposable.dispose();
- // Clear the list
- disposables.clear();
- }
-
- /**
- * Close the terminal input stream monitor.
- */
- @Override
- public void close() {
- // Not initialized -> return immediately
- if (thread == null) return;
-
- // Copy the reference
- final Thread oldThread = thread;
- // Unlink the monitor from the thread
- thread = null;
- // And interrupt the writer thread
- oldThread.interrupt();
- }
-
- /**
- * Starts the terminal output stream monitor.
- */
- public void startMonitoring() {
- // If already initialized -> return immediately
- if (thread != null) return;
-
- // Create a new runnable which is constantly reading from the stream
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- writeStream();
- }
- };
-
- // Create the writer thread
- thread = new Thread(runnable, "Terminal Input Stream Monitor Thread"); //$NON-NLS-1$
-
- // Configure the writer thread
- thread.setDaemon(true);
-
- // Start the processing
- thread.start();
- }
-
-
- /**
- * Reads from the queue and writes the read content to the stream.
- */
- protected void writeStream() {
- // Read from the queue and write to the stream until disposed
- outer: while (thread != null && !disposed) {
- byte[] data;
- // If the queue is empty, wait until notified
- synchronized(queue) {
- while (queue.isEmpty()) {
- if (disposed) break outer;
- try {
- queue.wait();
- } catch (InterruptedException e) {
- break outer;
- }
- }
- // Retrieves the queue head (is null if queue is empty (should never happen))
- data = queue.poll();
- }
- if (data != null) {
- try {
- // Break up writes into max 1000 byte junks to avoid console input buffer overflows on Windows
- int written = 0;
- byte[] buf = new byte[1000];
- while (written < data.length) {
- int len = Math.min(buf.length, data.length - written);
- System.arraycopy(data, written, buf, 0, len);
- // Write the data to the stream
- stream.write(buf, 0, len);
- written += len;
- // Flush the stream immediately
- stream.flush();
- // Wait a little between writes to allow input being processed
- if (written < data.length)
- Thread.sleep(100);
- }
- } catch (IOException e) {
- // IOException received. If this is happening when already disposed -> ignore
- if (!disposed) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.InputStreamMonitor_error_writingToStream, e.getLocalizedMessage()), e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- catch (InterruptedException e) {
- break;
- }
- }
- }
-
- // Dispose the stream
- dispose();
- }
-
- /* (non-Javadoc)
- * @see java.io.OutputStream#write(int)
- */
- @Override
- public void write(int b) throws IOException {
- synchronized(queue) {
- queue.add(new byte[] { (byte)b });
- queue.notifyAll();
- }
- }
-
- /* (non-Javadoc)
- * @see java.io.OutputStream#write(byte[], int, int)
- */
- @Override
- public void write(byte[] b, int off, int len) throws IOException {
- // Write the whole block to the queue to avoid synchronization
- // to happen for every byte. To do so, we have to avoid calling
- // the super method. Therefore we have to do the same checking
- // here as the base class does.
-
- // Null check. See the implementation in OutputStream.
- if (b == null) throw new NullPointerException();
-
- // Boundary check. See the implementation in OutputStream.
- if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- }
- else if (len == 0) {
- return;
- }
-
- // Make sure that the written block is not interlaced with other input.
- synchronized(queue) {
- // Preprocess the block to be written
- byte[] processedBytes = onWriteContentToStream(b, off, len);
- // If the returned array is not the original one, adjust offset and length
- if (processedBytes != b) {
- off = 0; len = processedBytes.length; b = processedBytes;
- }
-
- // Get the content from the byte buffer specified by offset and length
- byte[] bytes = new byte[len];
- int j = 0;
- for (int i = 0 ; i < len ; i++) {
- bytes[j++] = b[off + i];
- }
-
- queue.add(bytes);
- queue.notifyAll();
- }
- }
-
- /**
- * Allow for processing of data from byte stream from the terminal before
- * it is written to the output stream. If the returned byte array is different
- * than the one that was passed in with the bytes argument, then the
- * length value will be adapted.
- *
- * @param bytes The byte stream. Must not be <code>null</code>.
- * @param off The offset.
- * @param len the length.
- *
- * @return The processed byte stream.
- *
- */
- protected byte[] onWriteContentToStream(byte[] bytes, int off, int len) {
- Assert.isNotNull(bytes);
-
- if (replacement != NO_CHANGE && len > 0) {
- String origText = new String(bytes, off, len);
- String text = null;
- //
- // TODO: check whether this is correct! new String(byte[], int, int) always uses the default
- // encoding!
-
- if (replacement == CHANGE_CR_TO_LF) {
- text = origText.replace('\r', '\n');
- }
- else if (replacement == INSERT_LF_AFTER_CR) {
- text = origText.replaceAll("\r\n|\r", "\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- else if (replacement == REMOVE_CR) {
- text = origText.replaceAll(ILineSeparatorConstants.LINE_SEPARATOR_CR, ""); //$NON-NLS-1$
- }
- else if (replacement == REMOVE_LF) {
- text = origText.replaceAll(ILineSeparatorConstants.LINE_SEPARATOR_LF, ""); //$NON-NLS-1$
- }
-
- if (text != null && !origText.equals(text)) {
- bytes = text.getBytes();
- }
- }
-
- return bytes;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.streams;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ILineSeparatorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.services.IDisposable;
-
-/**
- * Output stream monitor implementation.
- * <p>
- * <b>Note:</b> The output is going <i>to</i> the terminal. Therefore, the output
- * stream monitor is attached to the stdout and/or stderr stream of the monitored
- * (remote) process.
- */
-public class OutputStreamMonitor implements IDisposable {
- // The default buffer size to use
- private static final int BUFFER_SIZE = 8192;
-
- // Reference to the parent terminal control
- private final ITerminalControl terminalControl;
-
- // Reference to the monitored (input) stream
- private final InputStream stream;
-
- // The line separator used by the monitored (input) stream
- private final String lineSeparator;
-
- // Reference to the thread reading the stream
- private Thread thread;
-
- // Flag to mark the monitor disposed. When disposed,
- // no further data is read from the monitored stream.
- private boolean disposed;
-
- // A list of object to dispose if this monitor is disposed
- private final List<IDisposable> disposables = new ArrayList<IDisposable>();
-
- // The list of registered listener
- private final ListenerList listeners;
-
- /**
- * Constructor.
- *
- * @param terminalControl The parent terminal control. Must not be <code>null</code>.
- * @param stream The stream. Must not be <code>null</code>.
- * @param lineSeparator The line separator used by the stream.
- */
- public OutputStreamMonitor(ITerminalControl terminalControl, InputStream stream, String lineSeparator) {
- super();
-
- Assert.isNotNull(terminalControl);
- this.terminalControl = terminalControl;
- Assert.isNotNull(stream);
- this.stream = new BufferedInputStream(stream, BUFFER_SIZE);
-
- this.lineSeparator = lineSeparator;
-
- this.listeners = new ListenerList();
- }
-
- /**
- * Register a streams data receiver listener.
- *
- * @param listener The listener. Must not be <code>null</code>.
- */
- public final void addListener(ITerminalServiceOutputStreamMonitorListener listener) {
- Assert.isNotNull(listener);
- listeners.add(listener);
- }
-
- /**
- * Unregister a streams data receiver listener.
- *
- * @param listener The listener. Must not be <code>null</code>.
- */
- public final void removeListener(ITerminalServiceOutputStreamMonitorListener listener) {
- Assert.isNotNull(listener);
- listeners.remove(listener);
- }
-
- /**
- * Adds the given disposable object to the list. The method will do nothing
- * if either the disposable object is already part of the list or the monitor
- * is disposed.
- *
- * @param disposable The disposable object. Must not be <code>null</code>.
- */
- public final void addDisposable(IDisposable disposable) {
- Assert.isNotNull(disposable);
- if (!disposed && !disposables.contains(disposable)) disposables.add(disposable);
- }
-
- /**
- * Removes the disposable object from the list.
- *
- * @param disposable The disposable object. Must not be <code>null</code>.
- */
- public final void removeDisposable(IDisposable disposable) {
- Assert.isNotNull(disposable);
- disposables.remove(disposable);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.services.IDisposable#dispose()
- */
- @Override
- public void dispose() {
- // If already disposed --> return immediately
- if (disposed) return;
-
- // Mark the monitor disposed
- disposed = true;
-
- // Close the stream (ignore exceptions on close)
- try { stream.close(); } catch (IOException e) { /* ignored on purpose */ }
-
- // Dispose all registered disposable objects
- for (IDisposable disposable : disposables) disposable.dispose();
- // Clear the list
- disposables.clear();
- }
-
- /**
- * Starts the terminal output stream monitor.
- */
- protected void startMonitoring() {
- // If already initialized -> return immediately
- if (thread != null) return;
-
- // Create a new runnable which is constantly reading from the stream
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- readStream();
- }
- };
-
- // Create the reader thread
- thread = new Thread(runnable, "Terminal Output Stream Monitor Thread"); //$NON-NLS-1$
-
- // Configure the reader thread
- thread.setDaemon(true);
- thread.setPriority(Thread.MIN_PRIORITY);
-
- // Start the processing
- thread.start();
- }
-
- /**
- * Returns the terminal control that this stream monitor is associated with.
- */
- protected ITerminalControl getTerminalControl() {
- return terminalControl;
- }
-
- /**
- * Reads from the output stream and write the read content
- * to the terminal control output stream.
- */
- void readStream() {
- // Creates the read buffer
- byte[] readBuffer = new byte[BUFFER_SIZE];
-
- // We need to maintain UI responsiveness but still stream the content
- // to the terminal control fast. Put the thread to a short sleep each second.
- long sleepMarker = System.currentTimeMillis();
-
- // Read from the stream until EOS is reached or the
- // monitor is marked disposed.
- int read = 0;
- while (read >= 0 && !disposed) {
- try {
- // Read from the stream
- read = stream.read(readBuffer);
- // If some data has been read, append to the terminal
- // control output stream
- if (read > 0) {
- // Allow for post processing the read content before appending
- byte[] processedReadBuffer = onContentReadFromStream(readBuffer, read);
- if (processedReadBuffer != readBuffer) {
- read = processedReadBuffer.length;
- }
- terminalControl.getRemoteToTerminalOutputStream().write(processedReadBuffer, 0, read);
- }
- } catch (IOException e) {
- // IOException received. If this is happening when already disposed -> ignore
- if (!disposed) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.OutputStreamMonitor_error_readingFromStream, e.getLocalizedMessage()), e);
- UIPlugin.getDefault().getLog().log(status);
- }
- break;
- } catch (NullPointerException e) {
- // killing the stream monitor while reading can cause an NPE
- // when reading from the stream
- if (!disposed && thread != null) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.OutputStreamMonitor_error_readingFromStream, e.getLocalizedMessage()), e);
- UIPlugin.getDefault().getLog().log(status);
- }
- break;
- }
-
- // See above -> Thread will go to sleep each second
- if (System.currentTimeMillis() - sleepMarker > 1000) {
- sleepMarker = System.currentTimeMillis();
- try { Thread.sleep(1); } catch (InterruptedException e) { /* ignored on purpose */ }
- }
- }
-
- // Dispose ourself
- dispose();
- }
-
- /**
- * Allow for processing of data from byte stream after it is read from
- * client but before it is appended to the terminal. If the returned byte
- * array is different than the one that was passed in with the byteBuffer
- * argument, then the bytesRead value will be ignored and the full
- * returned array will be written out.
- *
- * @param byteBuffer The byte stream. Must not be <code>null</code>.
- * @param bytesRead The number of bytes that were read into the read buffer.
- * @return The processed byte stream.
- *
- */
- protected byte[] onContentReadFromStream(byte[] byteBuffer, int bytesRead) {
- Assert.isNotNull(byteBuffer);
-
- // If tracing is enabled, print out the decimal byte values read
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_OUTPUT_STREAM_MONITOR)) {
- StringBuilder debug = new StringBuilder("byteBuffer [decimal, " + bytesRead + " bytes] : "); //$NON-NLS-1$ //$NON-NLS-2$
- for (int i = 0; i < bytesRead; i++) {
- debug.append(Byte.valueOf(byteBuffer[i]).intValue());
- debug.append(' ');
- }
- System.out.println(debug.toString());
- }
-
- // Remember if the text got changed.
- boolean changed = false;
-
- // How can me make sure that we don't mess with the encoding here?
- String text = new String(byteBuffer, 0, bytesRead);
-
- // Shift-In (14) and Shift-Out(15) confuses the terminal widget
- if (text.indexOf(14) != -1 || text.indexOf(15) != -1) {
- text = text.replaceAll("\\x0e", "").replaceAll("\\x0f", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- changed = true;
- }
-
- // Check on the line separator setting
- if (lineSeparator != null
- && !ILineSeparatorConstants.LINE_SEPARATOR_CRLF.equals(lineSeparator)) {
- String separator = ILineSeparatorConstants.LINE_SEPARATOR_LF.equals(lineSeparator) ? "\n" : "\r"; //$NON-NLS-1$ //$NON-NLS-2$
- String separator2 = ILineSeparatorConstants.LINE_SEPARATOR_LF.equals(lineSeparator) ? "\r" : "\n"; //$NON-NLS-1$ //$NON-NLS-2$
-
- if (text.indexOf(separator) != -1) {
- String[] fragments = text.split(separator);
- StringBuilder b = new StringBuilder();
- for (int i = 0; i < fragments.length; i++) {
- String fragment = fragments[i];
- String nextFragment = i + 1 < fragments.length ? fragments[i + 1] : null;
- b.append(fragment);
- if (fragment.endsWith(separator2) || (nextFragment != null && nextFragment.startsWith(separator2))) {
- // Both separators are found, just add the original separator
- b.append(separator);
- } else {
- b.append("\n\r"); //$NON-NLS-1$
- }
- }
- if (!text.equals(b.toString())) {
- text = b.toString();
- changed = true;
- }
- }
- }
-
- // If changed, get the new bytes array
- if (changed) {
- byteBuffer = text.getBytes();
- bytesRead = byteBuffer.length;
- }
-
- // If listeners are registered, invoke the listeners now.
- if (listeners.size() > 0) {
- for (Object candidate : listeners.getListeners()) {
- if (!(candidate instanceof ITerminalServiceOutputStreamMonitorListener)) continue;
- ((ITerminalServiceOutputStreamMonitorListener)candidate).onContentReadFromStream(byteBuffer, bytesRead);
- }
- }
-
- return byteBuffer;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.streams;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.ui.services.IDisposable;
-
-/**
- * Streams connector implementation.
- */
-public class StreamsConnector extends AbstractStreamsConnector implements IDisposable {
- // Reference to the streams settings
- private final StreamsSettings settings;
-
- /**
- * Constructor.
- */
- public StreamsConnector() {
- this(new StreamsSettings());
- }
-
- /**
- * Constructor.
- *
- * @param settings The streams settings. Must not be <code>null</code>
- */
- public StreamsConnector(StreamsSettings settings) {
- super();
-
- Assert.isNotNull(settings);
- this.settings = settings;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl)
- */
- @Override
- public void connect(ITerminalControl control) {
- Assert.isNotNull(control);
- super.connect(control);
-
- // Setup the listeners
- setStdoutListeners(settings.getStdOutListeners());
- setStderrListeners(settings.getStdErrListeners());
-
- // connect the streams
- connectStreams(control, settings.getStdinStream(), settings.getStdoutStream(), settings.getStderrStream(), settings.isLocalEcho(), settings.getLineSeparator());
-
- // Set the terminal control state to CONNECTED
- control.setState(TerminalState.CONNECTED);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#isLocalEcho()
- */
- @Override
- public boolean isLocalEcho() {
- return settings.isLocalEcho();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.services.IDisposable#dispose()
- */
- @Override
- public void dispose() {
- disconnect();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.streams.AbstractStreamsConnector#doDisconnect()
- */
- @Override
- public void doDisconnect() {
- // Dispose the streams
- super.doDisconnect();
-
- // Set the terminal control state to CLOSED.
- fControl.setState(TerminalState.CLOSED);
- }
-
- // ***** Process Connector settings handling *****
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getSettingsSummary()
- */
- @Override
- public String getSettingsSummary() {
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public void setDefaultSettings() {
- settings.load(new NullSettingsStore());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#load(org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore)
- */
- @Override
- public void load(ISettingsStore store) {
- settings.load(store);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#save(org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore)
- */
- @Override
- public void save(ISettingsStore store) {
- settings.save(store);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.streams;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
-import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
-import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
-import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
-import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
-
-/**
- * Streams launcher delegate implementation.
- */
-public class StreamsLauncherDelegate extends AbstractLauncherDelegate {
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
- */
- @Override
- public boolean needsUserConfiguration() {
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
- */
- @Override
- public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
- */
- @Override
- public void execute(Map<String, Object> properties, ITerminalService.Done done) {
- Assert.isNotNull(properties);
-
- // Get the terminal service
- ITerminalService terminal = TerminalServiceFactory.getService();
- // If not available, we cannot fulfill this request
- if (terminal != null) {
- terminal.openConsole(properties, done);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
- */
- @Override
- public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
- Assert.isNotNull(properties);
-
- // Check for the terminal connector id
- String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
- if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.streams.StreamsConnector"; //$NON-NLS-1$
-
- // Extract the streams properties
- OutputStream stdin = (OutputStream)properties.get(ITerminalsConnectorConstants.PROP_STREAMS_STDIN);
- InputStream stdout = (InputStream)properties.get(ITerminalsConnectorConstants.PROP_STREAMS_STDOUT);
- InputStream stderr = (InputStream)properties.get(ITerminalsConnectorConstants.PROP_STREAMS_STDERR);
- Object value = properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO);
- boolean localEcho = value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
- String lineSeparator = (String)properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR);
- ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS);
- ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS);
-
- // Construct the terminal settings store
- ISettingsStore store = new SettingsStore();
-
- // Construct the streams settings
- StreamsSettings streamsSettings = new StreamsSettings();
- streamsSettings.setStdinStream(stdin);
- streamsSettings.setStdoutStream(stdout);
- streamsSettings.setStderrStream(stderr);
- streamsSettings.setLocalEcho(localEcho);
- streamsSettings.setLineSeparator(lineSeparator);
- streamsSettings.setStdOutListeners(stdoutListeners);
- streamsSettings.setStdErrListeners(stderrListeners);
- // And save the settings to the store
- streamsSettings.save(store);
-
- // Construct the terminal connector instance
- ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
- if (connector != null) {
- // Apply default settings
- connector.setDefaultSettings();
- // And load the real settings
- connector.load(store);
- }
-
- return connector;
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.streams;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
-import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
-
-/**
- * Streams connector settings implementation.
- */
-public class StreamsSettings {
- // Reference to the stdin stream
- private OutputStream stdin;
- // Reference to the stdout stream
- private InputStream stdout;
- // Reference to the stderr stream
- private InputStream stderr;
- // Flag to control the local echo
- private boolean localEcho = true;
- // The line separator setting
- private String lineSeparator = null;
- // The list of stdout output listeners
- private ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = null;
- // The list of stderr output listeners
- private ITerminalServiceOutputStreamMonitorListener[] stderrListeners = null;
-
- /**
- * Sets the stdin stream instance.
- *
- * @param stdin The stream instance or <code>null</code>.
- */
- public void setStdinStream(OutputStream stdin) {
- this.stdin = stdin;
- }
-
- /**
- * Returns the stdin stream instance.
- *
- * @return The stream instance or <code>null</code>.
- */
- public OutputStream getStdinStream() {
- return stdin;
- }
-
- /**
- * Sets the stdout stream instance.
- *
- * @param stdout The stream instance or <code>null</code>.
- */
- public void setStdoutStream(InputStream stdout) {
- this.stdout = stdout;
- }
-
- /**
- * Returns the stdout stream instance.
- *
- * @return The stream instance or <code>null</code>.
- */
- public InputStream getStdoutStream() {
- return stdout;
- }
-
- /**
- * Sets the stderr stream instance.
- *
- * @param stderr The stream instance or <code>null</code>.
- */
- public void setStderrStream(InputStream stderr) {
- this.stderr = stderr;
- }
-
- /**
- * Returns the stderr stream instance.
- *
- * @return The stream instance or <code>null</code>.
- */
- public InputStream getStderrStream() {
- return stderr;
- }
-
- /**
- * Sets if the process requires a local echo from the terminal widget.
- *
- * @param value Specify <code>true</code> to enable the local echo, <code>false</code> otherwise.
- */
- public void setLocalEcho(boolean value) {
- this.localEcho = value;
- }
-
- /**
- * Returns <code>true</code> if the process requires a local echo
- * from the terminal widget.
- *
- * @return <code>True</code> if local echo is enabled, <code>false</code> otherwise.
- */
- public boolean isLocalEcho() {
- return localEcho;
- }
-
- /**
- * Sets the stream line separator.
- *
- * @param separator The stream line separator <code>null</code>.
- */
- public void setLineSeparator(String separator) {
- this.lineSeparator = separator;
- }
-
- /**
- * Returns the stream line separator.
- *
- * @return The stream line separator or <code>null</code>.
- */
- public String getLineSeparator() {
- return lineSeparator;
- }
-
- /**
- * Sets the list of stdout listeners.
- *
- * @param listeners The list of stdout listeners or <code>null</code>.
- */
- public void setStdOutListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
- this.stdoutListeners = listeners;
- }
-
- /**
- * Returns the list of stdout listeners.
- *
- * @return The list of stdout listeners or <code>null</code>.
- */
- public ITerminalServiceOutputStreamMonitorListener[] getStdOutListeners() {
- return stdoutListeners;
- }
-
- /**
- * Sets the list of stderr listeners.
- *
- * @param listeners The list of stderr listeners or <code>null</code>.
- */
- public void setStdErrListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
- this.stderrListeners = listeners;
- }
-
- /**
- * Returns the list of stderr listeners.
- *
- * @return The list of stderr listeners or <code>null</code>.
- */
- public ITerminalServiceOutputStreamMonitorListener[] getStdErrListeners() {
- return stderrListeners;
- }
-
- /**
- * Loads the streams settings from the given settings store.
- *
- * @param store The settings store. Must not be <code>null</code>.
- */
- public void load(ISettingsStore store) {
- Assert.isNotNull(store);
- localEcho = Boolean.parseBoolean(store.get("LocalEcho", Boolean.FALSE.toString())); //$NON-NLS-1$
- lineSeparator = store.get("LineSeparator", null); //$NON-NLS-1$
- if (store instanceof SettingsStore) {
- stdin = (OutputStream)((SettingsStore)store).getSettings().get("stdin"); //$NON-NLS-1$
- stdout = (InputStream)((SettingsStore)store).getSettings().get("stdout"); //$NON-NLS-1$
- stderr = (InputStream)((SettingsStore)store).getSettings().get("stderr"); //$NON-NLS-1$
- stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdOutListeners"); //$NON-NLS-1$
- stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdErrListeners"); //$NON-NLS-1$
- }
- }
-
- /**
- * Saves the process settings to the given settings store.
- *
- * @param store The settings store. Must not be <code>null</code>.
- */
- public void save(ISettingsStore store) {
- Assert.isNotNull(store);
- store.put("LocalEcho", Boolean.toString(localEcho)); //$NON-NLS-1$
- store.put("LineSeparator", lineSeparator); //$NON-NLS-1$
- if (store instanceof SettingsStore) {
- ((SettingsStore)store).getSettings().put("stdin", stdin); //$NON-NLS-1$
- ((SettingsStore)store).getSettings().put("stdout", stdout); //$NON-NLS-1$
- ((SettingsStore)store).getSettings().put("stderr", stderr); //$NON-NLS-1$
- ((SettingsStore)store).getSettings().put("StdOutListeners", stdoutListeners); //$NON-NLS-1$
- ((SettingsStore)store).getSettings().put("StdErrListeners", stderrListeners); //$NON-NLS-1$
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.CommandInputFieldWithHistory;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.ui.services.IDisposable;
-
-/**
- * Tab command input field handler implementation.
- */
-public class TabCommandFieldHandler implements IDisposable, IAdaptable {
- // Reference to the parent tab folder manager
- private final TabFolderManager tabFolderManager;
- // Reference to the associated tab
- private final CTabItem item;
-
- // Reference to the command input field
- private CommandInputFieldWithHistory field;
- // The command field history
- private String history;
-
- /**
- * Constructor.
- *
- * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>
- * @param item The associated tab item. Must not be <code>null</code>.
- */
- public TabCommandFieldHandler(TabFolderManager tabFolderManager, CTabItem item) {
- Assert.isNotNull(tabFolderManager);
- this.tabFolderManager = tabFolderManager;
- Assert.isNotNull(item);
- this.item = item;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.services.IDisposable#dispose()
- */
- @Override
- public void dispose() {
- field = null;
- history = null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Object getAdapter(Class adapter) {
- if (TabFolderManager.class.equals(adapter)) {
- return tabFolderManager;
- }
- if (CTabItem.class.equals(adapter)) {
- return item;
- }
- return null;
- }
-
- /**
- * Returns if or if not the associated tab item has the command input field enabled.
- *
- * @return <code>True</code> if the command input field is enabled, <code>false</code> otherwise.
- */
- public boolean hasCommandInputField() {
- return field != null;
- }
-
- /**
- * Set the command input field on or off.
- *
- * @param on <code>True</code> for on, <code>false</code> for off.
- */
- public void setCommandInputField(boolean on) {
- // save the old history
- if (field != null) {
- history = field.getHistory();
- field = null;
- }
-
- if (on) {
- field = new CommandInputFieldWithHistory(100);
- field.setHistory(history);
- }
-
- // Apply to the terminal control
- Assert.isTrue(!item.isDisposed());
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- if (terminal != null) terminal.setCommandInputField(field);
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
-import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
-import org.eclipse.tm.terminal.view.ui.services.TerminalService;
-
-/**
- * Terminal tab default dispose listener implementation.
- */
-public class TabDisposeListener implements DisposeListener {
- private final TabFolderManager parentTabFolderManager;
-
- /**
- * Constructor.
- *
- * @param parentTabFolderManager The parent tab folder manager. Must not be <code>null</code>
- */
- public TabDisposeListener(TabFolderManager parentTabFolderManager) {
- Assert.isNotNull(parentTabFolderManager);
- this.parentTabFolderManager = parentTabFolderManager;
- }
-
- /**
- * Returns the parent terminal console tab folder manager instance.
- *
- * @return The parent terminal console tab folder manager instance.
- */
- protected final TabFolderManager getParentTabFolderManager() {
- return parentTabFolderManager;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
- */
- @Override
- public void widgetDisposed(DisposeEvent e) {
- // If a tab item gets disposed, we have to dispose the terminal as well
- if (e.getSource() instanceof CTabItem) {
- // Get the terminal control (if any) from the tab item
- Object candidate = ((CTabItem)e.getSource()).getData();
- if (candidate instanceof ITerminalViewControl) {
- ITerminalViewControl terminal = (ITerminalViewControl)candidate;
- // Keep the context menu from being disposed
- terminal.getControl().setMenu(null);
- terminal.disposeTerminal();
- }
- // Dispose the command input field handler
- parentTabFolderManager.disposeTabCommandFieldHandler((CTabItem)e.getSource());
- // Dispose the tab item control
- Control control = ((CTabItem) e.getSource()).getControl();
- if (control != null) control.dispose();
-
- // If all items got removed, we have to switch back to the empty page control
- if (parentTabFolderManager.getTabFolder() != null && parentTabFolderManager.getTabFolder().getItemCount() == 0) {
- parentTabFolderManager.getParentView().switchToEmptyPageControl();
- }
- // Fire selection changed event
- parentTabFolderManager.fireSelectionChanged();
- // Fire the terminal console disposed event
- ITerminalService service = TerminalServiceFactory.getService();
- if (service instanceof TerminalService) {
- ((TerminalService)service).fireTerminalTabEvent(TerminalService.TAB_DISPOSED, e.getSource(), ((CTabItem)e.getSource()).getData("customData")); //$NON-NLS-1$
- }
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.jface.action.IStatusLineManager;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.tm.internal.terminal.control.ITerminalListener;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.TerminalViewControlFactory;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
-import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Terminal tab folder manager.
- */
-public class TabFolderManager extends PlatformObject implements ISelectionProvider {
- // Reference to the parent terminal consoles view
- private final ITerminalsView parentView;
- // Reference to the selection listener instance
- private final SelectionListener selectionListener;
-
- /**
- * List of selection changed listeners.
- */
- private final List<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
-
- /**
- * Map of tab command input field handler per tab item
- */
- private final Map<CTabItem, TabCommandFieldHandler> commandFieldHandler = new HashMap<CTabItem, TabCommandFieldHandler>();
-
- /**
- * The terminal control selection listener implementation.
- */
- private class TerminalControlSelectionListener implements DisposeListener, MouseListener {
- private final ITerminalViewControl terminal;
- private boolean selectMode;
-
- /**
- * Constructor.
- *
- * @param terminal The terminal control. Must not be <code>null</code>.
- */
- public TerminalControlSelectionListener(ITerminalViewControl terminal) {
- Assert.isNotNull(terminal);
- this.terminal = terminal;
-
- // Register ourself as the required listener
- terminal.getControl().addDisposeListener(this);
- terminal.getControl().addMouseListener(this);
- }
-
- /**
- * Returns the associated terminal view control.
- *
- * @return The terminal view control.
- */
- protected final ITerminalViewControl getTerminal() {
- return terminal;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
- */
- @Override
- public void widgetDisposed(DisposeEvent e) {
- // Widget got disposed, check if it is ours
- // If a tab item gets disposed, we have to dispose the terminal as well
- if (e.getSource().equals(terminal.getControl())) {
- // Remove as listener
- getTerminal().getControl().removeDisposeListener(this);
- getTerminal().getControl().removeMouseListener(this);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
- */
- @Override
- public void mouseDown(MouseEvent e) {
- // Left button down -> select mode starts
- if (e.button == 1) selectMode = true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
- */
- @Override
- public void mouseUp(MouseEvent e) {
- if (e.button == 1 && selectMode) {
- selectMode = false;
- // Fire a selection changed event with the terminal controls selection
- try {
- Display display = PlatformUI.getWorkbench().getDisplay();
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- fireSelectionChanged(new StructuredSelection(getTerminal().getSelection()));
- }
- });
- }
- catch (Exception ex) {
- // if display is disposed, silently ignore.
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
- */
- @Override
- public void mouseDoubleClick(MouseEvent e) {
- }
- }
-
- /**
- * Constructor.
- *
- * @param parentView The parent terminals console view. Must not be <code>null</code>.
- */
- public TabFolderManager(ITerminalsView parentView) {
- super();
- Assert.isNotNull(parentView);
- this.parentView = parentView;
-
- // Attach a selection listener to the tab folder
- selectionListener = doCreateTabFolderSelectionListener(this);
- if (getTabFolder() != null) getTabFolder().addSelectionListener(selectionListener);
- }
-
- /**
- * Creates the terminal console tab folder selection listener instance.
- *
- * @param parent The parent terminal console tab folder manager. Must not be <code>null</code>.
- * @return The selection listener instance.
- */
- protected TabFolderSelectionListener doCreateTabFolderSelectionListener(TabFolderManager parent) {
- Assert.isNotNull(parent);
- return new TabFolderSelectionListener(parent);
- }
-
- /**
- * Returns the parent terminal consoles view.
- *
- * @return The terminal consoles view instance.
- */
- protected final ITerminalsView getParentView() {
- return parentView;
- }
-
- /**
- * Returns the tab folder associated with the parent view.
- *
- * @return The tab folder or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected final CTabFolder getTabFolder() {
- return (CTabFolder) getParentView().getAdapter(CTabFolder.class);
- }
-
- /**
- * Returns the selection changed listeners currently registered.
- *
- * @return The registered selection changed listeners or an empty array.
- */
- protected final ISelectionChangedListener[] getSelectionChangedListeners() {
- return selectionChangedListeners.toArray(new ISelectionChangedListener[selectionChangedListeners.size()]);
- }
-
- /**
- * Dispose the tab folder manager instance.
- */
- public void dispose() {
- // Dispose the selection listener
- if (getTabFolder() != null && !getTabFolder().isDisposed()) getTabFolder().removeSelectionListener(selectionListener);
- // Dispose the tab command field handler
- for (TabCommandFieldHandler handler : commandFieldHandler.values()) {
- handler.dispose();
- }
- commandFieldHandler.clear();
- }
-
- /**
- * Creates a new tab item with the given title and connector.
- *
- * @param title The tab title. Must not be <code>null</code>.
- * @param encoding The terminal encoding or <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- * @param flags The flags controlling how the console is opened or <code>null</code> to use defaults.
- *
- * @return The created tab item or <code>null</code> if failed.
- */
- @SuppressWarnings({ "unused", "cast" })
- public CTabItem createTabItem(String title, String encoding, ITerminalConnector connector, Object data, Map<String, Boolean> flags) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
-
- // The result tab item
- CTabItem item = null;
-
- // Get the tab folder from the parent viewer
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder != null) {
- // Generate a unique title string for the new tab item (must be called before creating the item itself)
- title = makeUniqueTitle(title, tabFolder);
- // Create the tab item
- item = new CTabItem(tabFolder, SWT.CLOSE);
- // Set the tab item title
- item.setText(title);
- // Set the tab icon
- Image image = getTabItemImage(connector, data);
- if (image != null) item.setImage(image);
-
- // Setup the tab item listeners
- setupTerminalTabListeners(item);
-
- // Create the composite to create the terminal control within
- Composite composite = new Composite(tabFolder, SWT.NONE);
- composite.setLayout(new FillLayout());
- // Associate the composite with the tab item
- item.setControl(composite);
-
- // Refresh the layout
- tabFolder.getParent().layout(true);
-
- // Create the terminal control
- ITerminalViewControl terminal = TerminalViewControlFactory.makeControl(doCreateTerminalTabTerminalListener(this, item), composite, new ITerminalConnector[] { connector }, true);
- if (terminal instanceof ITerminalControl) {
- Object value = flags != null ? flags.get(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT) : null;
- boolean noReconnect = value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
- ((ITerminalControl)terminal).setConnectOnEnterIfClosed(!noReconnect);
- }
-
- // Add middle mouse button paste support
- addMiddleMouseButtonPasteSupport(terminal);
- // Add the "selection" listener to the terminal control
- new TerminalControlSelectionListener(terminal);
- // Configure the terminal encoding
- try { terminal.setEncoding(encoding); } catch (UnsupportedEncodingException e) { /* ignored on purpose */ }
- // Associated the terminal with the tab item
- item.setData(terminal);
- // Associated the custom data node with the tab item (if any)
- if (data != null) item.setData("customData", data); //$NON-NLS-1$
-
- // Overwrite the text canvas help id
- String contextHelpId = getParentView().getContextHelpId();
- if (contextHelpId != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(terminal.getControl(), contextHelpId);
- }
-
- // Set the context menu
- TabFolderMenuHandler menuHandler = (TabFolderMenuHandler) getParentView().getAdapter(TabFolderMenuHandler.class);
- if (menuHandler != null) {
- Menu menu = (Menu)menuHandler.getAdapter(Menu.class);
- if (menu != null) {
- // One weird occurrence of IllegalArgumentException: Widget has wrong parent.
- // Inspecting the code, this seem extremely unlikely. The terminal is created
- // from a composite parent, the composite parent from the tab folder and the menu
- // from the tab folder. Means, at the end all should have the same menu shell, shouldn't they?
- try {
- terminal.getControl().setMenu(menu);
- } catch (IllegalArgumentException e) {
- // Log exception only if debug mode is set to 1.
- if (UIPlugin.getTraceHandler().isSlotEnabled(1, null)) {
- e.printStackTrace();
- }
- }
- }
- }
-
- // Select the created item within the tab folder
- tabFolder.setSelection(item);
-
- // Set the connector
- terminal.setConnector(connector);
-
- // And connect the terminal
- terminal.connectTerminal();
-
- // Fire selection changed event
- fireSelectionChanged();
- }
-
- // Return the create tab item finally.
- return item;
- }
-
- /**
- * Used for DnD of terminal tab items between terminal views
- * <p>
- * Create a new tab item in the "dropped" terminal view using the
- * information stored in the given item.
- *
- * @param oldItem The old dragged tab item. Must not be <code>null</code>.
- * @return The new dropped tab item.
- */
- @SuppressWarnings({ "unchecked", "cast" })
- public CTabItem cloneTabItemAfterDrop(CTabItem oldItem) {
- Assert.isNotNull(oldItem);
-
- ITerminalViewControl terminal = (ITerminalViewControl)oldItem.getData();
- ITerminalConnector connector = terminal.getTerminalConnector();
- Object data = oldItem.getData("customData"); //$NON-NLS-1$
- Map<String, Object> properties = (Map<String, Object>)oldItem.getData("properties"); //$NON-NLS-1$
- String title = oldItem.getText();
-
- // The result tab item
- CTabItem item = null;
-
- // Get the tab folder from the parent viewer
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder != null) {
- // Generate a unique title string for the new tab item (must be called before creating the item itself)
- title = makeUniqueTitle(title, tabFolder);
- // Create the tab item
- item = new CTabItem(tabFolder, SWT.CLOSE);
- // Set the tab item title
- item.setText(title);
- // Set the tab icon
- Image image = getTabItemImage(connector, data);
- if (image != null) item.setImage(image);
-
- // Setup the tab item listeners
- setupTerminalTabListeners(item);
- // Move the terminal listener to the new item
- TabTerminalListener.move(oldItem, item);
-
- // Create the composite to create the terminal control within
- Composite composite = new Composite(tabFolder, SWT.NONE);
- composite.setLayout(new FillLayout());
- // Associate the composite with the tab item
- item.setControl(composite);
-
- // Refresh the layout
- tabFolder.getParent().layout(true);
-
- // Remember terminal state
- TerminalState oldState = terminal.getState();
-
- // Keep the context menu from being disposed
- terminal.getControl().setMenu(null);
-
- // change the "parent".
- Assert.isTrue(terminal instanceof ITerminalControl);
- ((ITerminalControl)terminal).setupTerminal(composite);
-
- // Add middle mouse button paste support
- addMiddleMouseButtonPasteSupport(terminal);
-
- item.setData(terminal);
-
- // Associate the custom data node with the tab item (if any)
- if (data != null) item.setData("customData", data); //$NON-NLS-1$
- // Associate the properties with the tab item (if any)
- if (properties != null) item.setData("properties", properties); //$NON-NLS-1$
-
- // Overwrite the text canvas help id
- String contextHelpId = getParentView().getContextHelpId();
- if (contextHelpId != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(terminal.getControl(), contextHelpId);
- }
-
- // Set the context menu
- TabFolderMenuHandler menuHandler = (TabFolderMenuHandler) getParentView().getAdapter(TabFolderMenuHandler.class);
- if (menuHandler != null) {
- Menu menu = (Menu)menuHandler.getAdapter(Menu.class);
- if (menu != null) {
- // One weird occurrence of IllegalArgumentException: Widget has wrong parent.
- // Inspecting the code, this seem extremely unlikely. The terminal is created
- // from a composite parent, the composite parent from the tab folder and the menu
- // from the tab folder. Means, at the end all should have the same menu shell, shouldn't they?
- try {
- terminal.getControl().setMenu(menu);
- } catch (IllegalArgumentException e) {
- // Log exception only if debug mode is set to 1.
- if (UIPlugin.getTraceHandler().isSlotEnabled(1, null)) {
- e.printStackTrace();
- }
- }
- }
- }
-
- // Select the created item within the tab folder
- tabFolder.setSelection(item);
-
- // Set the connector
- terminal.setConnector(connector);
-
- // needed to get the focus and cursor
- Assert.isTrue(terminal instanceof ITerminalControl);
- ((ITerminalControl)terminal).setState(oldState);
-
- // Fire selection changed event
- fireSelectionChanged();
- }
-
- // Return the create tab item finally.
- return item;
- }
-
-
- protected void addMiddleMouseButtonPasteSupport(final ITerminalViewControl terminal) {
- terminal.getControl().addMouseListener(new MouseAdapter(){
- @Override
- public void mouseDown(MouseEvent e) {
- // paste when the middle button is clicked
- if (e.button == 2) {
- Clipboard clipboard = terminal.getClipboard();
- if (clipboard.isDisposed()) return;
- int clipboardType = DND.SELECTION_CLIPBOARD;
- if (clipboard.getAvailableTypes(clipboardType).length == 0)
- // use normal clipboard if selection clipboard is not available
- clipboardType = DND.CLIPBOARD;
- String text = (String) clipboard.getContents(TextTransfer.getInstance(), clipboardType);
- if (text != null && text.length() > 0)
- terminal.pasteString(text);
- }
- }
- });
- }
-
- /**
- * Generate a unique title string based on the given proposal.
- *
- * @param proposal The proposal. Must not be <code>null</code>.
- * @return The unique title string.
- */
- protected String makeUniqueTitle(String proposal, CTabFolder tabFolder) {
- Assert.isNotNull(proposal);
- Assert.isNotNull(tabFolder);
-
- String title = proposal;
- int index = 0;
-
- // Loop all existing tab items and check the titles. We have to remember
- // all found titles as modifying the proposal might in turn conflict again
- // with the title of a tab already checked.
- List<String> titles = new ArrayList<String>();
- for (CTabItem item : tabFolder.getItems()) {
- // Get the tab item title
- titles.add(item.getText());
- }
- // Make the proposal unique be appending (<n>) against all known titles.
- while (titles.contains(title)) title = proposal + " (" + ++index + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-
- return title;
- }
-
- /**
- * Setup the terminal console tab item listeners.
- *
- * @param item The tab item. Must not be <code>null</code>.
- */
- protected void setupTerminalTabListeners(final CTabItem item) {
- Assert.isNotNull(item);
-
- // Create and associate the disposal listener
- DisposeListener disposeListener = doCreateTerminalTabDisposeListener(this);
-
- // store the listener to make access easier e.g. needed in DnD
- item.setData("disposeListener", disposeListener); //$NON-NLS-1$
- item.addDisposeListener(disposeListener);
- }
-
- /**
- * Creates a new terminal console tab terminal listener instance.
- *
- * @param tabFolderManager The tab folder manager. Must not be <code>null</code>.
- * @param item The tab item. Must not be <code>null</code>.
- *
- * @return The terminal listener instance.
- */
- protected ITerminalListener doCreateTerminalTabTerminalListener(TabFolderManager tabFolderManager, CTabItem item) {
- Assert.isNotNull(item);
- return new TabTerminalListener(tabFolderManager, item);
- }
-
- /**
- * Creates a new terminal console tab dispose listener instance.
- *
- * @param parent The parent terminal console tab folder manager. Must not be <code>null</code>.
- * @return The dispose listener instance.
- */
- protected DisposeListener doCreateTerminalTabDisposeListener(TabFolderManager parent) {
- Assert.isNotNull(parent);
- return new TabDisposeListener(parent);
- }
-
- /**
- * Returns the tab item image.
- *
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- *
- * @return The tab item image or <code>null</code>.
- */
- protected Image getTabItemImage(ITerminalConnector connector, Object data) {
- Assert.isNotNull(connector);
- return UIPlugin.getImage(ImageConsts.VIEW_Terminals);
- }
-
- /**
- * Lookup a tab item with the given title and the given terminal connector.
- * <p>
- * <b>Note:</b> The method will handle unified tab item titles itself.
- *
- * @param title The tab item title. Must not be <code>null</code>.
- * @param connector The terminal connector. Must not be <code>null</code>.
- * @param data The custom terminal data node or <code>null</code>.
- *
- * @return The corresponding tab item or <code>null</code>.
- */
- public CTabItem findTabItem(String title, ITerminalConnector connector, Object data) {
- Assert.isNotNull(title);
- Assert.isNotNull(connector);
-
- // Get the tab folder
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder == null) return null;
-
- // Loop all existing tab items and try to find a matching title
- for (CTabItem item : tabFolder.getItems()) {
- // Disposed items cannot be matched
- if (item.isDisposed()) continue;
- // Get the title from the current tab item
- String itemTitle = item.getText();
- // The terminal console state might be signaled to the user via the
- // terminal console tab title. Filter out any prefix "<.*>\s*".
- itemTitle = itemTitle.replaceFirst("^<.*>\\s*", ""); //$NON-NLS-1$ //$NON-NLS-2$
- if (itemTitle.startsWith(title)) {
- // The title string matches -> double check with the terminal connector
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- ITerminalConnector connector2 = terminal.getTerminalConnector();
- // If the connector id and name matches -> check on the settings
- if (connector.getId().equals(connector2.getId()) && connector.getName().equals(connector2.getName())) {
- if (!connector.isInitialized()) {
- // an uninitialized connector does not yield a sensible summary
- return item;
- }
- String summary = connector.getSettingsSummary();
- String summary2 = connector2.getSettingsSummary();
- // If we have matching settings -> we've found the matching item
- if (summary.equals(summary2)) return item;
- }
- }
- }
-
- return null;
- }
-
- /**
- * Make the given tab item the active tab and bring the tab to the top.
- *
- * @param item The tab item. Must not be <code>null</code>.
- */
- public void bringToTop(CTabItem item) {
- Assert.isNotNull(item);
-
- // Get the tab folder
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder == null) return;
-
- // Set the given tab item as selection to the tab folder
- tabFolder.setSelection(item);
- // Fire selection changed event
- fireSelectionChanged();
- }
-
- /**
- * Returns the currently active tab.
- *
- * @return The active tab item or <code>null</code> if none.
- */
- public CTabItem getActiveTabItem() {
- // Get the tab folder
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder == null) return null;
-
- return tabFolder.getSelection();
- }
-
- /**
- * Remove all terminated tab items.
- */
- public void removeTerminatedItems() {
- // Get the tab folder
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder == null) return;
-
- // Loop the items and check for terminated status
- for (CTabItem item: tabFolder.getItems()) {
- // Disposed items cannot be matched
- if (item.isDisposed()) continue;
- // Check if the item is terminated
- if (isTerminatedTabItem(item)) {
- // item is terminated -> dispose
- item.dispose();
- }
- }
- }
-
- /**
- * Checks if the given tab item represents a terminated console. Subclasses may
- * overwrite this method to extend the definition of terminated.
- *
- * @param item The tab item or <code>null</code>.
- * @return <code>True</code> if the tab item represents a terminated console, <code>false</code> otherwise.
- */
- protected boolean isTerminatedTabItem(CTabItem item) {
- // Null items or disposed items cannot be matched
- if (item == null || item.isDisposed()) return false;
-
- // First, match the item title. If it contains "<terminated>", the item can be removed
- String itemTitle = item.getText();
- if (itemTitle != null && itemTitle.contains("<terminated>")) { //$NON-NLS-1$
- return true;
- }
- // Second, check if the associated terminal control is closed
- // The title string matches -> double check with the terminal connector
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- if (terminal != null && terminal.getState() == TerminalState.CLOSED) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Returns the command input field handler for the given tab item.
- *
- * @param item The tab item or <code>null</code>.
- * @return The command input field handler or <code>null</code>.
- */
- public final TabCommandFieldHandler getTabCommandFieldHandler(CTabItem item) {
- // Null items or disposed items cannot be matched
- if (item == null || item.isDisposed()) return null;
-
- TabCommandFieldHandler handler = commandFieldHandler.get(item);
- if (handler == null) {
- handler = createTabCommandFieldHandler(this, item);
- Assert.isNotNull(handler);
- commandFieldHandler.put(item, handler);
- }
- return handler;
- }
-
- /**
- * Create the command input field handler for the given tab item.
- *
- * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>
- * @param item The associated tab item. Must not be <code>null</code>.
- *
- * @return The command input field handler. Must not be <code>null</code>.
- *
- * @since 4.1
- */
- protected TabCommandFieldHandler createTabCommandFieldHandler(TabFolderManager tabFolderManager, CTabItem item) {
- return new TabCommandFieldHandler(tabFolderManager, item);
- }
-
- /**
- * Dispose the command input field handler for the given tab item.
- *
- * @param item The tab item or <code>null</code>.
- */
- protected void disposeTabCommandFieldHandler(CTabItem item) {
- // Null items or disposed items cannot be matched
- if (item == null || item.isDisposed()) return;
-
- TabCommandFieldHandler handler = commandFieldHandler.remove(item);
- if (handler != null) handler.dispose();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
- */
- @Override
- public void addSelectionChangedListener(ISelectionChangedListener listener) {
- if (listener != null && !selectionChangedListeners.contains(listener)) selectionChangedListeners.add(listener);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
- */
- @Override
- public void removeSelectionChangedListener(ISelectionChangedListener listener) {
- if (listener != null) selectionChangedListeners.remove(listener);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
- */
- @Override
- public ISelection getSelection() {
- CTabItem activeTabItem = getActiveTabItem();
- return activeTabItem != null ? new StructuredSelection(activeTabItem) : new StructuredSelection();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
- */
- @Override
- public void setSelection(ISelection selection) {
- if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
- // The first selection element which is a CTabItem will become the active item
- Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
- while (iterator.hasNext()) {
- Object candidate = iterator.next();
- if (candidate instanceof CTabItem) { bringToTop((CTabItem)candidate); return; }
- }
- }
- // fire a changed event in any case
- fireSelectionChanged(selection);
- }
-
- /**
- * Fire the selection changed event to the registered listeners.
- */
- protected void fireSelectionChanged() {
- updateStatusLine();
- fireSelectionChanged(getSelection());
- }
-
- /**
- * Fire the selection changed event with the terminal text!
- * to the registered listeners.
- * see also TerminalControlSelectionListener- mouseUp
- *
- * @since 4.1
- */
- protected void fireTerminalSelectionChanged() {
- updateStatusLine();
- CTabItem item = getActiveTabItem();
- if (item != null && !item.isDisposed()) {
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- if (terminal != null && !terminal.isDisposed()) {
- fireSelectionChanged(new StructuredSelection(terminal.getSelection()));
- }
- }
- }
-
- /**
- * Fire the selection changed event to the registered listeners.
- */
- protected final void fireSelectionChanged(ISelection selection) {
- // Create the selection changed event
- SelectionChangedEvent event = new SelectionChangedEvent(TabFolderManager.this, selection);
-
- // First, invoke the registered listeners and let them do their job
- for (ISelectionChangedListener listener : selectionChangedListeners) {
- listener.selectionChanged(event);
- }
- }
-
- /**
- * Update the parent view status line.
- */
- public final void updateStatusLine() {
- String message = null;
- IStatusLineManager manager = parentView.getViewSite().getActionBars().getStatusLineManager();
-
- CTabItem item = getActiveTabItem();
- if (item != null && !item.isDisposed()) {
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- if (terminal != null && !terminal.isDisposed()) {
- StringBuilder buffer = new StringBuilder();
-
- buffer.append(state2msg(item, terminal.getState()));
- buffer.append(" - "); //$NON-NLS-1$
-
- String encoding = terminal.getEncoding();
- if (encoding == null || "ISO-8859-1".equals(encoding)) { //$NON-NLS-1$
- encoding = "Default (ISO-8859-1)"; //$NON-NLS-1$
- }
- buffer.append(NLS.bind(Messages.TabFolderManager_encoding, encoding));
-
- message = buffer.toString();
- }
- }
-
- manager.setMessage(message);
- }
-
- /**
- * Returns the string representation of the given terminal state.
- *
- * @param item The tab folder item. Must not be <code>null</code>.
- * @param state The terminal state. Must not be <code>null</code>.
- *
- * @return The string representation.
- */
- @SuppressWarnings("unchecked")
- protected String state2msg(CTabItem item, TerminalState state) {
- Assert.isNotNull(item);
- Assert.isNotNull(state);
-
- // Determine the terminal properties of the tab folder
- Map<String, Object> properties = (Map<String, Object>)item.getData("properties"); //$NON-NLS-1$
-
- // Get he current terminal state as string
- String stateStr = state.toString();
- // Lookup a matching text representation of the state
- String key = "TabFolderManager_state_" + stateStr.replaceAll("\\.", " ").trim().toLowerCase(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- String stateMsg = null;
- if (properties != null) stateMsg = properties.get(key) instanceof String ? (String) properties.get(key) : null;
- if (stateMsg == null) stateMsg = Messages.getString(key);
- if (stateMsg == null) stateMsg = stateStr;
-
- return stateMsg;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IMenuListener2;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionClearAll;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionCopy;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionSelectAll;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.actions.SelectEncodingAction;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.ui.IWorkbenchActionConstants;
-
-/**
- * Terminal tab folder menu handler.
- */
-public class TabFolderMenuHandler extends PlatformObject {
- // Reference to the parent terminals console view
- private final ITerminalsView parentView;
- // Reference to the tab folder context menu manager
- private MenuManager contextMenuManager;
- // Reference to the tab folder context menu
- private Menu contextMenu;
- // The list of actions available within the context menu
- private final List<AbstractTerminalAction> contextMenuActions = new ArrayList<AbstractTerminalAction>();
-
- // The list of invalid context menu contributions "startsWith" expressions
- /* default */ static final String[] INVALID_CONTRIBUTIONS_STARTS_WITH = {
- "org.eclipse.cdt", "org.eclipse.ui.edit" //$NON-NLS-1$ //$NON-NLS-2$
- };
-
- /**
- * Default menu listener implementation.
- */
- protected class MenuListener implements IMenuListener2 {
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.IMenuListener2#menuAboutToHide(org.eclipse.jface.action.IMenuManager)
- */
- @Override
- public void menuAboutToHide(IMenuManager manager) {
- // CQ:WIND00192293 and CQ:WIND194204 - don't update actions on menuAboutToHide
- // See also http://bugs.eclipse.org/296212
- // updateMenuItems(false);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager)
- */
- @Override
- public void menuAboutToShow(IMenuManager manager) {
- removeInvalidContributions(manager);
- updateMenuItems(true);
- }
-
- /**
- * Bug 392249: Remove contributions that appear in the context in Eclipse 4.x which are
- * not visible in Eclipse 3.8.x. Re-evaluate from time to time!
- *
- * @param manager The menu manager or <code>null</code>
- */
- private void removeInvalidContributions(IMenuManager manager) {
- if (manager == null) return;
-
- IContributionItem[] items = manager.getItems();
- for (IContributionItem item : items) {
- String id = item.getId();
- if (id != null) {
- for (String prefix : INVALID_CONTRIBUTIONS_STARTS_WITH) {
- if (id.startsWith(prefix)) {
- manager.remove(item);
- break;
- }
- }
- }
- }
- }
- }
-
- /**
- * Constructor.
- *
- * @param parentView The parent terminals console view. Must not be <code>null</code>.
- */
- public TabFolderMenuHandler(ITerminalsView parentView) {
- super();
- Assert.isNotNull(parentView);
- this.parentView = parentView;
- }
-
- /**
- * Returns the parent terminals console view.
- *
- * @return The parent terminals console view instance.
- */
- protected final ITerminalsView getParentView() {
- return parentView;
- }
-
- /**
- * Returns the tab folder associated with the parent view.
- *
- * @return The tab folder or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected final CTabFolder getTabFolder() {
- return (CTabFolder) getParentView().getAdapter(CTabFolder.class);
- }
-
- /**
- * Dispose the tab folder menu handler instance.
- */
- public void dispose() {
- // Dispose the context menu
- if (contextMenu != null) { contextMenu.dispose(); contextMenu = null; }
- // Dispose the context menu manager
- if (contextMenuManager != null) { contextMenuManager.dispose(); contextMenuManager = null; }
- // Clear all actions
- contextMenuActions.clear();
- }
-
- /**
- * Setup the context menu for the tab folder. The method will return
- * immediately if the menu handler had been initialized before.
- *
- * @param tabFolder The tab folder control. Must not be <code>null</code>.
- */
- public void initialize() {
- // Return immediately if the menu manager and menu got initialized already
- if (contextMenuManager != null && contextMenu != null) {
- return;
- }
-
- // Get the tab folder
- CTabFolder tabFolder = getTabFolder();
- if (tabFolder == null) {
- return;
- }
-
- // Create the menu manager if not done before
- contextMenuManager = new MenuManager("#PopupMenu"); //$NON-NLS-1$
-
- // Bug 392249: Register our menu listener after registering the context menu
- // for contributions. That way we can use our menu listener to get
- // rid of unwanted/misguided contributions. At least until this is
- // fixed in the Eclipse 4.x platform.
-
- // Create the context menu
- contextMenu = contextMenuManager.createContextMenu(tabFolder);
- // Temporarily set the menu on the tab folder to avoid the case
- // where the menu has a different parent shell than the control.
- // This can be the case if the tab folder is re-parented to the
- // "PartRenderingEngine's limbo".
- tabFolder.setMenu(contextMenu);
-
- // Create the context menu action instances
- doCreateContextMenuActions();
-
- // Fill the context menu
- doFillContextMenu(contextMenuManager);
-
- // Register to the view site to open the menu for contributions
- getParentView().getSite().registerContextMenu(contextMenuManager, getParentView().getSite().getSelectionProvider());
-
- // Create and associated the menu listener
- contextMenuManager.addMenuListener(new MenuListener());
- }
-
- /**
- * Adds the given action to the context menu actions list.
- *
- * @param action The action instance. Must not be <code>null</code>.
- */
- protected final void add(AbstractTerminalAction action) {
- Assert.isNotNull(action);
- contextMenuActions.add(action);
- }
-
- /**
- * Create the context menu actions.
- */
- @SuppressWarnings("cast")
- protected void doCreateContextMenuActions() {
- // Create and add the copy action
- add(new TerminalActionCopy() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the paste action
- add(new TerminalActionPaste() {
- @SuppressWarnings({ "unchecked" })
- @Override
- public void run() {
- // Determine if pasting to the active tab require backslash translation
- boolean needsTranslation = false;
-
- TabFolderManager manager = (TabFolderManager) getParentView().getAdapter(TabFolderManager.class);
- if (manager != null) {
- // If we have the active tab item, we can get the active terminal control
- CTabItem activeTabItem = manager.getActiveTabItem();
- if (activeTabItem != null) {
- Map<String, Object> properties = (Map<String, Object>)activeTabItem.getData("properties"); //$NON-NLS-1$
- if (properties != null && properties.containsKey(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE)) {
- Object value = properties.get(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE);
- needsTranslation = value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
- }
- }
- }
-
- if (needsTranslation) {
- ITerminalViewControl target = getTarget();
- if (target != null && target.getClipboard() != null && !target.getClipboard().isDisposed()) {
- String text = (String) target.getClipboard().getContents(TextTransfer.getInstance());
- if (text != null) {
- text = text.replace('\\', '/');
-
- Object[] data = new Object[] { text };
- Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
- target.getClipboard().setContents(data, types, DND.CLIPBOARD);
- }
- }
- }
-
- super.run();
- }
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the clear all action
- add(new TerminalActionClearAll() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste#updateAction(boolean)
- */
- @Override
- public void updateAction(boolean aboutToShow) {
- super.updateAction(aboutToShow);
- if (getTarget() != null && getTarget().getState() != TerminalState.CONNECTED) {
- setEnabled(false);
- }
- }
- });
-
- // Create and add the select all action
- add(new TerminalActionSelectAll() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the select encoding action
- add (new SelectEncodingAction((TabFolderManager) getParentView().getAdapter(TabFolderManager.class)) {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
- }
-
- /**
- * Returns the currently active terminal control.
- *
- * @return The currently active terminal control or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected ITerminalViewControl getActiveTerminalViewControl() {
- ITerminalViewControl terminal = null;
-
- // Get the active tab item from the tab folder manager
- TabFolderManager manager = (TabFolderManager) getParentView().getAdapter(TabFolderManager.class);
- if (manager != null) {
- // If we have the active tab item, we can get the active terminal control
- CTabItem activeTabItem = manager.getActiveTabItem();
- if (activeTabItem != null) {
- terminal = (ITerminalViewControl)activeTabItem.getData();
- }
- }
-
- return terminal;
- }
-
- /**
- * Fill in the context menu content within the given manager.
- *
- * @param manager The menu manager. Must not be <code>null</code>.
- */
- protected void doFillContextMenu(MenuManager manager) {
- Assert.isNotNull(manager);
-
- // Loop all actions and add them to the menu manager
- for (AbstractTerminalAction action : contextMenuActions) {
- manager.add(action);
- // Add a separator after the paste action
- if (action instanceof TerminalActionPaste) {
- manager.add(new Separator());
- }
- // Add a separator after the select all action
- if (action instanceof TerminalActionSelectAll) {
- manager.add(new Separator());
- }
- }
-
- // Menu contributions will end up here
- manager.add(new Separator());
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }
-
- /**
- * Update the context menu items on showing or hiding the context menu.
- *
- * @param aboutToShow <code>True</code> if the menu is about to show, <code>false</code> otherwise.
- */
- protected void updateMenuItems(boolean aboutToShow) {
- // Loop all actions and update the status
- for (AbstractTerminalAction action : contextMenuActions) {
- action.updateAction(aboutToShow);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Object getAdapter(Class adapter) {
- if (MenuManager.class.isAssignableFrom(adapter)) {
- return contextMenuManager;
- } else if (Menu.class.isAssignableFrom(adapter)) {
- if (contextMenu == null || contextMenu.isDisposed()) {
- contextMenu = contextMenuManager.createContextMenu(getTabFolder());
- }
- // Clear the menu from the tab folder now - see initialize()
- getTabFolder().setMenu(null);
- return contextMenu;
- }
-
- // Try the parent view
- Object adapted = getParentView().getAdapter(adapter);
- if (adapted != null) {
- return adapted;
- }
-
- return super.getAdapter(adapter);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-
-/**
- * Terminal tab folder default selection listener implementation.
- */
-public class TabFolderSelectionListener implements SelectionListener {
- private final TabFolderManager parentTabFolderManager;
-
- /**
- * Constructor.
- *
- * @param parentTabFolderManager The parent tab folder manager. Must not be <code>null</code>
- */
- public TabFolderSelectionListener(TabFolderManager parentTabFolderManager) {
- Assert.isNotNull(parentTabFolderManager);
- this.parentTabFolderManager = parentTabFolderManager;
- }
-
- /**
- * Returns the parent terminal console tab folder manager instance.
- *
- * @return The parent terminal console tab folder manager instance.
- */
- protected final TabFolderManager getParentTabFolderManager() {
- return parentTabFolderManager;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
- */
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- @Override
- public void widgetSelected(SelectionEvent e) {
- parentTabFolderManager.fireSelectionChanged();
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionClearAll;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionCopy;
-import org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.ui.actions.AbstractAction;
-import org.eclipse.tm.terminal.view.ui.actions.NewTerminalViewAction;
-import org.eclipse.tm.terminal.view.ui.actions.TabScrollLockAction;
-import org.eclipse.tm.terminal.view.ui.actions.ToggleCommandFieldAction;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IWorkbenchActionConstants;
-
-
-/**
- * Terminal tab folder toolbar handler.
- */
-public class TabFolderToolbarHandler extends PlatformObject {
- // Reference to the parent terminals console view
- private final ITerminalsView parentView;
- // Reference to the toolbar manager
- private IToolBarManager toolbarManager;
- // Reference to the selection listener
- private ToolbarSelectionChangedListener selectionChangedListener;
- // The list of actions available within the toolbar
- private final List<AbstractTerminalAction> toolbarActions = new ArrayList<AbstractTerminalAction>();
-
- /**
- * Default selection listener implementation.
- */
- protected class ToolbarSelectionChangedListener implements ISelectionChangedListener {
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
- */
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- boolean enable = event != null;
-
- // The VlmConsoleTabFolderManager is listening to the selection changes of the
- // TabFolder and fires selection changed events.
- if (enable && event.getSource() instanceof TabFolderManager) {
- enable = event.getSelection() instanceof StructuredSelection
- && !event.getSelection().isEmpty()
- && (((StructuredSelection)event.getSelection()).getFirstElement() instanceof CTabItem
- || ((StructuredSelection)event.getSelection()).getFirstElement() instanceof String);
- }
-
- updateToolbarItems(enable);
- }
- }
-
- /**
- * Constructor.
- *
- * @param parentView The parent terminals console view. Must not be <code>null</code>.
- */
- public TabFolderToolbarHandler(ITerminalsView parentView) {
- super();
- Assert.isNotNull(parentView);
- this.parentView = parentView;
- }
-
- /**
- * Returns the parent terminals console view.
- *
- * @return The terminals console view instance.
- */
- protected final ITerminalsView getParentView() {
- return parentView;
- }
-
- /**
- * Returns the tab folder associated with the parent view.
- *
- * @return The tab folder or <code>null</code>.
- */
- @SuppressWarnings("cast")
- protected final CTabFolder getTabFolder() {
- return (CTabFolder) getParentView().getAdapter(CTabFolder.class);
- }
-
- /**
- * Returns the currently active terminal control.
- *
- * @return The currently active terminal control or <code>null</code>.
- */
- @SuppressWarnings("cast")
- public ITerminalViewControl getActiveTerminalViewControl() {
- ITerminalViewControl terminal = null;
-
- // Get the active tab item from the tab folder manager
- TabFolderManager manager = (TabFolderManager) getParentView().getAdapter(TabFolderManager.class);
- if (manager != null) {
- // If we have the active tab item, we can get the active terminal control
- CTabItem activeTabItem = manager.getActiveTabItem();
- if (activeTabItem != null && !activeTabItem.isDisposed()) {
- terminal = (ITerminalViewControl)activeTabItem.getData();
- }
- }
-
- return terminal;
- }
-
- /**
- * Dispose the tab folder menu handler instance.
- */
- public void dispose() {
- // Dispose the selection changed listener
- if (selectionChangedListener != null) {
- getParentView().getViewSite().getSelectionProvider().removeSelectionChangedListener(selectionChangedListener);
- selectionChangedListener = null;
- }
-
- // Clear all actions
- toolbarActions.clear();
- }
-
- /**
- * Setup the context menu for the tab folder. The method will return
- * immediately if the toolbar handler had been initialized before.
- *
- * @param tabFolder The tab folder control. Must not be <code>null</code>.
- */
- public void initialize() {
- // Return immediately if the toolbar manager got initialized already
- if (toolbarManager != null) {
- return;
- }
-
- // Register ourself as selection listener to the tab folder
- selectionChangedListener = doCreateSelectionChangedListener();
- Assert.isNotNull(selectionChangedListener);
- getParentView().getViewSite().getSelectionProvider().addSelectionChangedListener(selectionChangedListener);
-
- // Get the parent view action bars
- IActionBars bars = getParentView().getViewSite().getActionBars();
-
- // From the action bars, get the toolbar manager
- toolbarManager = bars.getToolBarManager();
-
- // Create the toolbar action instances
- doCreateToolbarActions();
-
- // Fill the toolbar
- doFillToolbar(toolbarManager);
-
- // Update actions
- updateToolbarItems(false);
- }
-
- /**
- * Creates a new selection changed listener instance.
- *
- * @return The new selection changed listener instance.
- */
- protected ToolbarSelectionChangedListener doCreateSelectionChangedListener() {
- return new ToolbarSelectionChangedListener();
- }
-
- /**
- * Adds the given action to the toolbar actions list.
- *
- * @param action The action instance. Must not be <code>null</code>.
- */
- protected final void add(AbstractTerminalAction action) {
- Assert.isNotNull(action);
- toolbarActions.add(action);
- }
-
- /**
- * Removes the given action from the toolbar actions list.
- *
- * @param action The action instance. Must not be <code>null</code>.
- */
- protected final void remove(AbstractTerminalAction action) {
- Assert.isNotNull(action);
- toolbarActions.remove(action);
- }
-
- /**
- * Create the toolbar actions.
- */
- protected void doCreateToolbarActions() {
- // Create and add the paste action
- add(new TerminalActionPaste() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the copy action
- add(new TerminalActionCopy() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the scroll lock action
- add (new TabScrollLockAction() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the clear all action
- add(new TerminalActionClearAll() {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste#updateAction(boolean)
- */
- @Override
- public void updateAction(boolean aboutToShow) {
- super.updateAction(aboutToShow);
- if (getTarget() != null && getTarget().getState() != TerminalState.CONNECTED) {
- setEnabled(false);
- }
- }
- });
-
- // Create and add the toggle command input field action
- add (new ToggleCommandFieldAction(getParentView()) {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
-
- // Create and add the new terminal view action
- add (new NewTerminalViewAction(getParentView()) {
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
- */
- @Override
- protected ITerminalViewControl getTarget() {
- return getActiveTerminalViewControl();
- }
- });
- }
-
- /**
- * Fill in the context menu content within the given manager.
- *
- * @param manager The menu manager. Must not be <code>null</code>.
- */
- protected void doFillToolbar(IToolBarManager manager) {
- Assert.isNotNull(manager);
-
- // Note: For the toolbar, the actions are added from left to right!
- // So we start with the additions marker here which is the most
- // left contribution item.
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- manager.add(new Separator("anchor")); //$NON-NLS-1$
-
- // we want that at the end
- NewTerminalViewAction newTerminalAction = null;
-
- // Loop all actions and add them to the menu manager
- for (AbstractTerminalAction action : toolbarActions) {
- // Add a separator before the clear all action or if the action is a separator
- if (action instanceof TabScrollLockAction
- || (action instanceof AbstractAction && ((AbstractAction)action).isSeparator())) {
- manager.insertAfter("anchor", new Separator()); //$NON-NLS-1$
- }
- // skip new terminal view action for now
- if (action instanceof NewTerminalViewAction){
- newTerminalAction = (NewTerminalViewAction)action;
- continue;
- }
- // Add the action itself
- manager.insertAfter("anchor", action); //$NON-NLS-1$
- }
- // now add to the end
- if (newTerminalAction != null){
- manager.add(newTerminalAction);
- }
- }
-
- /**
- * Update the toolbar items.
- *
- * @param enabled <code>True</code> if the items shall be enabled, <code>false</code> otherwise.
- */
- protected void updateToolbarItems(boolean enabled) {
- // Determine the currently active terminal control
- ITerminalViewControl control = getActiveTerminalViewControl();
- // Loop all actions and update the status
- for (AbstractTerminalAction action : toolbarActions) {
- // If the terminal control is not available, the updateAction
- // method of certain actions enable the action (bugzilla #260372).
- // Workaround by forcing the action to get disabled with setEnabled.
- if (control == null && !(action instanceof NewTerminalViewAction)) {
- action.setEnabled(false);
- }
- else {
- action.updateAction(enabled);
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Object getAdapter(Class adapter) {
- if (IToolBarManager.class.isAssignableFrom(adapter)) {
- return toolbarManager;
- }
-
- // Try the toolbar actions
- for (AbstractTerminalAction action : toolbarActions) {
- if (adapter.isAssignableFrom(action.getClass())) {
- return action;
- }
- }
-
- // Try the parent view
- Object adapted = getParentView().getAdapter(adapter);
- if (adapted != null) {
- return adapted;
- }
-
- return super.getAdapter(adapter);
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.tabs;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.tm.internal.terminal.control.ITerminalListener2;
-import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-
-/**
- * Terminal tab default terminal listener implementation.
- */
-public class TabTerminalListener implements ITerminalListener2 {
- private static final String TAB_TERMINAL_LISTENER = "TabTerminalListener"; //$NON-NLS-1$
- /* default */ final TabFolderManager tabFolderManager;
- private CTabItem tabItem;
- private final String tabItemTitle;
-
- /**
- * Move a TabTerminalListener instance to another item (for DnD).
- *
- * @param fromItem item to detach the listener from
- * @param toItem item to attach listener to
- */
- static void move(CTabItem fromItem, CTabItem toItem) {
- TabTerminalListener listener = (TabTerminalListener) fromItem.getData(TAB_TERMINAL_LISTENER);
- if (listener != null) {
- listener.attachTo(toItem);
- }
- }
-
- /**
- * Constructor.
- *
- * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>.
- * @param tabItem The parent tab item. Must not be <code>null</code>.
- */
- public TabTerminalListener(TabFolderManager tabFolderManager, CTabItem tabItem) {
- super();
- Assert.isNotNull(tabFolderManager);
- Assert.isNotNull(tabItem);
- this.tabFolderManager = tabFolderManager;
- // Remember the original tab item title
- tabItemTitle = tabItem.getText();
-
- attachTo(tabItem);
- }
-
- private void attachTo(CTabItem item) {
- if (tabItem != null) tabItem.setData(TAB_TERMINAL_LISTENER, null);
- item.setData(TAB_TERMINAL_LISTENER, this);
- tabItem = item;
- }
-
- /**
- * Returns the associated parent tab item.
- *
- * @return The parent tab item.
- */
- protected final CTabItem getTabItem() {
- return tabItem;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.ITerminalListener#setState(org.eclipse.tm.internal.terminal.provisional.api.TerminalState)
- */
- @Override
- public void setState(final TerminalState state) {
- // The tab item must have been not yet disposed
- final CTabItem item = getTabItem();
- if (item == null || item.isDisposed()) return;
-
- // Run asynchronously in the display thread
- item.getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- // Update the tab item title
- String newTitle = getTerminalConsoleTabTitle(state);
- if (newTitle != null) item.setText(newTitle);
-
- // Turn off the command field (if necessary)
- TabCommandFieldHandler handler = tabFolderManager.getTabCommandFieldHandler(item);
- if (TerminalState.CLOSED.equals(state) && handler != null && handler.hasCommandInputField()) {
- handler.setCommandInputField(false);
- // Trigger a selection changed event to update the action enablements
- // and the status line
- ISelectionProvider provider = tabFolderManager.getParentView().getViewSite().getSelectionProvider();
- Assert.isNotNull(provider);
- provider.setSelection(provider.getSelection());
- } else {
- // Update the status line
- tabFolderManager.updateStatusLine();
- }
- }
- });
- }
-
- /**
- * Returns the title to set to the terminal console tab for the given state.
- * <p>
- * <b>Note:</b> This method is called from {@link #setState(TerminalState)} and
- * is expected to by called within the UI thread.
- *
- * @param state The terminal state. Must not be <code>null</code>.
- * @return The terminal console tab title to set or <code>null</code> to leave the title unchanged.
- */
- protected String getTerminalConsoleTabTitle(TerminalState state) {
- Assert.isNotNull(state);
- Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
-
- // The tab item must have been not yet disposed
- CTabItem item = getTabItem();
- if (item == null || item.isDisposed()) return null;
-
- // Get the current tab title
- String oldTitle = item.getText();
-
- // Construct the new title
- String newTitle = null;
-
- if (TerminalState.CLOSED.equals(state)) {
- newTitle = NLS.bind(Messages.TabTerminalListener_consoleClosed, tabItemTitle, tabFolderManager.state2msg(item, state));
- }
- else if (TerminalState.CONNECTING.equals(state)) {
- newTitle = NLS.bind(Messages.TabTerminalListener_consoleConnecting, tabItemTitle, tabFolderManager.state2msg(item, state));
- }
- else if (TerminalState.CONNECTED.equals(state)) {
- newTitle = tabItemTitle;
- }
-
- return newTitle != null && !newTitle.equals(oldTitle) ? newTitle : null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.internal.terminal.control.ITerminalListener#setTerminalTitle(java.lang.String)
- */
- @Override
- public void setTerminalTitle(String title) {
- }
-
- /**
- * @see org.eclipse.tm.internal.terminal.control.ITerminalListener2#setTerminalSelectionChanged()
- * @since 4.1
- */
- @Override
- public void setTerminalSelectionChanged() {
- tabFolderManager.fireTerminalSelectionChanged();
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.view;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.ViewPart;
-
-/**
- * Old terminals view handler implementation.
- * <p>
- * If invoked, the view implementation opens the new terminals view and
- * closes itself afterwards.
- */
-public class OldTerminalsViewHandler extends ViewPart {
-
- boolean fReplaced;
- IPartListener2 fPartlistener;
-
- /**
- * Constructor.
- */
- public OldTerminalsViewHandler() {
- super();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void createPartControl(Composite parent) {
- replaceWithTerminalsView();
- }
-
- protected void replaceWithTerminalsView() {
- if (fReplaced)
- return;
- IViewSite site = getViewSite();
- final IWorkbenchPage page = site.getPage();
-
- site.getShell().getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- if (fReplaced)
- return;
- if (!page.isPageZoomed() || page.getActivePart() instanceof TerminalsView) {
- fReplaced = true;
- // Show the new view
- try {
- page.showView(IUIConstants.ID, null, IWorkbenchPage.VIEW_CREATE);
- }
- catch (PartInitException e) { /* ignored on purpose */ }
-
- // Hide ourself in the current perspective
- page.hideView(OldTerminalsViewHandler.this);
- } else if (fPartlistener == null) {
- final IWorkbenchPart maximizedPart = page.getActivePart();
- page.addPartListener(fPartlistener = new IPartListener2() {
- @Override
- public void partVisible(IWorkbenchPartReference partRef) {
- if (partRef.getPart(false) == OldTerminalsViewHandler.this) {
- page.removePartListener(this);
- fPartlistener = null;
- replaceWithTerminalsView();
- }
- }
- @Override
- public void partOpened(IWorkbenchPartReference partRef) {
- }
- @Override
- public void partInputChanged(IWorkbenchPartReference partRef) {
- }
- @Override
- public void partHidden(IWorkbenchPartReference partRef) {
- }
- @Override
- public void partDeactivated(IWorkbenchPartReference partRef) {
- }
- @Override
- public void partClosed(IWorkbenchPartReference partRef) {
- if (partRef.getPart(false) == OldTerminalsViewHandler.this) {
- page.removePartListener(this);
- fPartlistener = null;
- } else if (partRef.getPart(false) == maximizedPart) {
- page.removePartListener(this);
- fPartlistener = null;
- replaceWithTerminalsView();
- }
- }
- @Override
- public void partBroughtToTop(IWorkbenchPartReference partRef) {
- }
- @Override
- public void partActivated(IWorkbenchPartReference partRef) {
- }
- });
- }
- }
- });
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
- */
- @Override
- public void setFocus() {
- // should not happen, but just in case - replace on focus
- replaceWithTerminalsView();
- }
-
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.view;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
-
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.expressions.IEvaluationContext;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.dnd.ByteArrayTransfer;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DragSource;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.dnd.DragSourceListener;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.DropTargetListener;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
-import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
-import org.eclipse.tm.terminal.view.ui.nls.Messages;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderMenuHandler;
-import org.eclipse.tm.terminal.view.ui.tabs.TabFolderToolbarHandler;
-import org.eclipse.tm.terminal.view.ui.view.showin.GitShowInContextHandler;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.ISources;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchPreferenceConstants;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.handlers.IHandlerService;
-import org.eclipse.ui.part.IShowInTarget;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.part.ShowInContext;
-import org.eclipse.ui.part.ViewPart;
-import org.osgi.framework.Bundle;
-
-/**
- * Terminal view.
- */
-public class TerminalsView extends ViewPart implements ITerminalsView, IShowInTarget {
-
- // Reference to the main page book control
- private PageBook pageBookControl;
- // Reference to the tab folder maintaining the consoles
- /* default */ CTabFolder tabFolderControl;
- // Reference to the tab folder manager
- /* default */ TabFolderManager tabFolderManager;
- // Reference to the tab folder menu handler
- private TabFolderMenuHandler tabFolderMenuHandler;
- // Reference to the tab folder toolbar handler
- private TabFolderToolbarHandler tabFolderToolbarHandler;
- // Reference to the empty page control (to be show if no console is open)
- private Control emptyPageControl;
- // The view's memento handler
- private final TerminalsViewMementoHandler mementoHandler = new TerminalsViewMementoHandler();
-
- /**
- * "dummy" transfer just to store the information needed for the DnD
- *
- */
- private static class TerminalTransfer extends ByteArrayTransfer {
- // The static terminal transfer type name. Unique per terminals view instance.
- private static final String TYPE_NAME = "terminal-transfer-format:" + UUID.randomUUID().toString(); //$NON-NLS-1$
- // Register the type name and remember the associated unique type id.
- private static final int TYPEID = registerType(TYPE_NAME);
-
- private CTabItem draggedFolderItem;
- private TabFolderManager draggedTabFolderManager;
-
- /*
- * Thread save singleton instance creation.
- */
- private static class LazyInstanceHolder {
- public static TerminalTransfer instance = new TerminalTransfer();
- }
-
- /**
- * Constructor.
- */
- TerminalTransfer() {
- }
-
- /**
- * Returns the singleton terminal transfer instance.
- * @return
- */
- public static TerminalTransfer getInstance() {
- return LazyInstanceHolder.instance;
- }
-
- /**
- * Sets the dragged folder item.
- *
- * @param tabFolderItem The dragged folder item or <code>null</code>.
- */
- public void setDraggedFolderItem(CTabItem tabFolderItem) {
- draggedFolderItem = tabFolderItem;
- }
-
- /**
- * Returns the dragged folder item.
- *
- * @return The dragged folder item or <code>null</code>.
- */
- public CTabItem getDraggedFolderItem() {
- return draggedFolderItem;
- }
-
- /**
- * Sets the tab folder manager the associated folder item is dragged from.
- *
- * @param tabFolderManager The tab folder manager or <code>null</code>.
- */
- public void setTabFolderManager(TabFolderManager tabFolderManager) {
- draggedTabFolderManager = tabFolderManager;
- }
-
- /**
- * Returns the tab folder manager the associated folder item is dragged from.
- *
- * @return The tab folder manager or <code>null</code>.
- */
- public TabFolderManager getTabFolderManager() {
- return draggedTabFolderManager;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
- */
- @Override
- protected int[] getTypeIds() {
- return new int[] { TYPEID };
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
- */
- @Override
- protected String[] getTypeNames() {
- return new String[] { TYPE_NAME };
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
- */
- @Override
- public void javaToNative(Object data, TransferData transferData) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
- */
- @Override
- public Object nativeToJava(TransferData transferData) {
- return null;
- }
- }
-
- /**
- * Constructor.
- */
- public TerminalsView() {
- super();
- }
-
- /**
- * Initialize the drag support.
- */
- private void addDragSupport() {
- // The event listener is registered as filter. It will receive events from all widgets.
- PlatformUI.getWorkbench().getDisplay().addFilter(SWT.DragDetect, new Listener() {
- /* (non-Javadoc)
- * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
- */
- @Override
- public void handleEvent(Event event) {
- // Only handle events where a CTabFolder is the source
- if (!(event.widget instanceof CTabFolder)) return;
- // TabFolderManager must be created
- if (tabFolderManager == null) return;
-
- // only for own tab folders
- if (event.widget != tabFolderControl) return;
-
- // Skip drag if DnD is still ongoing (bug 443787)
- if (tabFolderControl.getData(DND.DRAG_SOURCE_KEY) != null) return;
-
- final CTabFolder draggedFolder = (CTabFolder) event.widget;
-
- int operations = DND.DROP_MOVE | DND.DROP_DEFAULT;
- final DragSource dragSource = new DragSource(draggedFolder, operations);
-
- // Initialize the terminal transfer type data
- TerminalTransfer.getInstance().setDraggedFolderItem(tabFolderManager.getActiveTabItem());
- TerminalTransfer.getInstance().setTabFolderManager(tabFolderManager);
-
- Transfer[] transferTypes = new Transfer[] { TerminalTransfer.getInstance() };
- dragSource.setTransfer(transferTypes);
-
- // Add a drag source listener to cleanup after the drag operation finished
- dragSource.addDragListener(new DragSourceListener() {
- @Override
- public void dragStart(DragSourceEvent event) {
- }
-
- @Override
- public void dragSetData(DragSourceEvent event) {
- }
-
- @Override
- public void dragFinished(DragSourceEvent event) {
- // dispose this drag-source-listener by disposing its drag-source
- dragSource.dispose();
-
- // Inhibit the action of CTabFolder's default DragDetect-listeners,
- // fire a mouse-click event on the widget that was dragged.
- draggedFolder.notifyListeners(SWT.MouseUp, null);
- }
- });
- }
- });
- }
-
- /**
- * Initialize the drop support on the terminals page book control.
- */
- private void addDropSupport() {
- int operations = DND.DROP_MOVE | DND.DROP_DEFAULT;
- final DropTarget target = new DropTarget(pageBookControl, operations);
-
- Transfer[] transferTypes = new Transfer[] { TerminalTransfer.getInstance() };
- target.setTransfer(transferTypes);
-
- target.addDropListener(new DropTargetListener() {
- @Override
- public void dragEnter(DropTargetEvent event) {
- // only if the drop target is different then the drag source
- if (TerminalTransfer.getInstance().getTabFolderManager() == tabFolderManager) {
- event.detail = DND.DROP_NONE;
- }
- else {
- event.detail = DND.DROP_MOVE;
- }
- }
-
- @Override
- public void dragOver(DropTargetEvent event) {
- }
-
- @Override
- public void dragOperationChanged(DropTargetEvent event) {
- }
-
- @Override
- public void dragLeave(DropTargetEvent event) {
- }
-
- @Override
- public void dropAccept(DropTargetEvent event) {
- }
-
- @Override
- public void drop(DropTargetEvent event) {
- if (TerminalTransfer.getInstance().getDraggedFolderItem() != null && tabFolderManager != null) {
- CTabItem draggedItem = TerminalTransfer.getInstance().getDraggedFolderItem();
-
- CTabItem item = tabFolderManager.cloneTabItemAfterDrop(draggedItem);
- tabFolderManager.bringToTop(item);
- switchToTabFolderControl();
-
- // dispose tab item control
- final Control control = draggedItem.getControl();
- draggedItem.setControl(null);
- if (control != null) control.dispose();
-
- // need to remove the dispose listener first
- DisposeListener disposeListener = (DisposeListener) draggedItem.getData("disposeListener"); //$NON-NLS-1$
- draggedItem.removeDisposeListener(disposeListener);
- draggedItem.dispose();
-
- // make sure the "new" terminals view has the focus after dragging a terminal
- setFocus();
- }
- }
- });
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#dispose()
- */
- @Override
- public void dispose() {
- // Dispose the tab folder manager
- if (tabFolderManager != null) {
- tabFolderManager.dispose();
- tabFolderManager = null;
- }
- // Dispose the tab folder menu handler
- if (tabFolderMenuHandler != null) {
- tabFolderMenuHandler.dispose();
- tabFolderMenuHandler = null;
- }
- // Dispose the tab folder toolbar handler
- if (tabFolderToolbarHandler != null) {
- tabFolderToolbarHandler.dispose();
- tabFolderToolbarHandler = null;
- }
-
- super.dispose();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
- */
- @Override
- public void init(IViewSite site, IMemento memento) throws PartInitException {
- super.init(site, memento);
- restoreState(memento);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void createPartControl(Composite parent) {
- // Create the page book control
- pageBookControl = doCreatePageBookControl(parent);
- Assert.isNotNull(pageBookControl);
- // Configure the page book control
- doConfigurePageBookControl(pageBookControl);
-
- // Create the empty page control
- emptyPageControl = doCreateEmptyPageControl(pageBookControl);
- Assert.isNotNull(emptyPageControl);
- // Configure the empty page control
- doConfigureEmptyPageControl(emptyPageControl);
-
- // Create the tab folder control (empty)
- tabFolderControl = doCreateTabFolderControl(pageBookControl);
- Assert.isNotNull(tabFolderControl);
- // Configure the tab folder control
- doConfigureTabFolderControl(tabFolderControl);
-
- // Create the tab folder manager
- tabFolderManager = doCreateTabFolderManager(this);
- Assert.isNotNull(tabFolderManager);
- // Set the tab folder manager as the selection provider
- getSite().setSelectionProvider(tabFolderManager);
-
- // Setup the tab folder menu handler
- tabFolderMenuHandler = doCreateTabFolderMenuHandler(this);
- Assert.isNotNull(tabFolderMenuHandler);
- doConfigureTabFolderMenuHandler(tabFolderMenuHandler);
-
- // Setup the tab folder toolbar handler
- tabFolderToolbarHandler = doCreateTabFolderToolbarHandler(this);
- Assert.isNotNull(tabFolderToolbarHandler);
- doConfigureTabFolderToolbarHandler(tabFolderToolbarHandler);
-
- // Show the empty page control by default
- switchToEmptyPageControl();
-
- String secondaryId = ((IViewSite) getSite()).getSecondaryId();
- if (secondaryId != null) {
- String defaultTitle = getPartName();
- // set title
- setPartName(defaultTitle + " " + secondaryId); //$NON-NLS-1$
- }
-
- // Initialize DnD support
- addDragSupport();
- addDropSupport();
- }
-
- /**
- * Creates the {@link PageBook} instance.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- * @return The page book instance. Must never be <code>null</code>.
- */
- protected PageBook doCreatePageBookControl(Composite parent) {
- return new PageBook(parent, SWT.NONE);
- }
-
- /**
- * Configure the given page book control.
- *
- * @param pagebook The page book control. Must not be <code>null</code>.
- */
- protected void doConfigurePageBookControl(PageBook pagebook) {
- Assert.isNotNull(pagebook);
-
- if (getContextHelpId() != null) PlatformUI.getWorkbench().getHelpSystem().setHelp(pagebook, getContextHelpId());
- }
-
- /**
- * Returns the context help id associated with the terminals console view instance.
- * <p>
- * <b>Note:</b> The default implementation returns the view id as context help id.
- *
- * @return The context help id or <code>null</code> if none is associated.
- */
- @Override
- public String getContextHelpId() {
- return getViewSite().getId();
- }
-
- /**
- * Creates the empty page control instance.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- * @return The empty page control instance. Must never be <code>null</code>.
- */
- protected Control doCreateEmptyPageControl(Composite parent) {
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayout(new GridLayout());
- composite.setLayoutData(new GridData(GridData.FILL_BOTH));
- return composite;
- }
-
- /**
- * Configures the empty page control.
- *
- * @param control The empty page control. Must not be <code>null</code>.
- */
- protected void doConfigureEmptyPageControl(Control control) {
- Assert.isNotNull(control);
- }
-
- /**
- * Creates the tab folder control instance.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- * @return The tab folder control instance. Must never be <code>null</code>.
- */
- protected CTabFolder doCreateTabFolderControl(Composite parent) {
- return new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT | SWT.BORDER);
- }
-
- /**
- * Configures the tab folder control.
- *
- * @param tabFolder The tab folder control. Must not be <code>null</code>.
- */
- protected void doConfigureTabFolderControl(final CTabFolder tabFolder) {
- Assert.isNotNull(tabFolder);
-
- // Set the layout data
- tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- // Set the tab gradient coloring from the global preferences
- if (useGradientTabBackgroundColor()) {
- tabFolder.setSelectionBackground(new Color[] {
- JFaceResources.getColorRegistry().get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
- JFaceResources.getColorRegistry().get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_END") //$NON-NLS-1$
- }, new int[] { 100 }, true);
- }
- // Apply the tab folder selection foreground color
- tabFolder.setSelectionForeground(JFaceResources.getColorRegistry().get("org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR")); //$NON-NLS-1$
-
- // Set the tab style from the global preferences
- tabFolder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
-
- // Attach the mouse listener
- tabFolder.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseDown(MouseEvent e) {
- if (e.button == 2) {
- // middle mouse button click - close tab
- CTabItem item = tabFolder.getItem(new Point(e.x, e.y));
- if (item != null) item.dispose();
- }
- }
- });
- }
-
- /**
- * If <code>True</code> is returned, the inner tabs are colored with gradient coloring set in
- * the Eclipse workbench color settings.
- *
- * @return <code>True</code> to use gradient tab colors, <code>false</code> otherwise.
- */
- protected boolean useGradientTabBackgroundColor() {
- return false;
- }
-
- /**
- * Creates the tab folder manager.
- *
- * @param parentView The parent view instance. Must not be <code>null</code>.
- * @return The tab folder manager. Must never be <code>null</code>.
- */
- protected TabFolderManager doCreateTabFolderManager(ITerminalsView parentView) {
- Assert.isNotNull(parentView);
- return new TabFolderManager(parentView);
- }
-
- /**
- * Creates the tab folder menu handler.
- *
- * @param parentView The parent view instance. Must not be <code>null</code>.
- * @return The tab folder menu handler. Must never be <code>null</code>.
- */
- protected TabFolderMenuHandler doCreateTabFolderMenuHandler(ITerminalsView parentView) {
- Assert.isNotNull(parentView);
- return new TabFolderMenuHandler(parentView);
- }
-
- /**
- * Configure the tab folder menu handler
- *
- * @param menuHandler The tab folder menu handler. Must not be <code>null</code>.
- */
- protected void doConfigureTabFolderMenuHandler(TabFolderMenuHandler menuHandler) {
- Assert.isNotNull(menuHandler);
- menuHandler.initialize();
- }
-
- /**
- * Creates the tab folder toolbar handler.
- *
- * @param parentView The parent view instance. Must not be <code>null</code>.
- * @return The tab folder toolbar handler. Must never be <code>null</code>.
- */
- protected TabFolderToolbarHandler doCreateTabFolderToolbarHandler(ITerminalsView parentView) {
- Assert.isNotNull(parentView);
- return new TabFolderToolbarHandler(parentView);
- }
-
- /**
- * Configure the tab folder toolbar handler
- *
- * @param toolbarHandler The tab folder toolbar handler. Must not be <code>null</code>.
- */
- protected void doConfigureTabFolderToolbarHandler(TabFolderToolbarHandler toolbarHandler) {
- Assert.isNotNull(toolbarHandler);
- toolbarHandler.initialize();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
- */
- @Override
- public void setFocus() {
- if (pageBookControl != null) pageBookControl.setFocus();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView#switchToEmptyPageControl()
- */
- @Override
- public void switchToEmptyPageControl() {
- if (pageBookControl != null && !pageBookControl.isDisposed()
- && emptyPageControl != null && !emptyPageControl.isDisposed()) {
- pageBookControl.showPage(emptyPageControl);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView#switchToTabFolderControl()
- */
- @Override
- public void switchToTabFolderControl() {
- if (pageBookControl != null && !pageBookControl.isDisposed()
- && tabFolderControl != null && !tabFolderControl.isDisposed()) {
- pageBookControl.showPage(tabFolderControl);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Object getAdapter(Class adapter) {
- if (CTabFolder.class.isAssignableFrom(adapter)) {
- return tabFolderControl;
- }
- if (TabFolderManager.class.isAssignableFrom(adapter)) {
- return tabFolderManager;
- }
- if (TabFolderMenuHandler.class.isAssignableFrom(adapter)) {
- return tabFolderMenuHandler;
- }
- if (TabFolderToolbarHandler.class.isAssignableFrom(adapter)) {
- return tabFolderToolbarHandler;
- }
- if (TerminalsViewMementoHandler.class.isAssignableFrom(adapter)) {
- return mementoHandler;
- }
-
- return super.getAdapter(adapter);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
- */
- @Override
- public void saveState(IMemento memento) {
- super.saveState(memento);
- if (memento == null) return;
- mementoHandler.saveState(this, memento);
- }
-
- /**
- * Restore the view state from the given memento.
- *
- * @param memento The memento or <code>null</code>.
- */
- public void restoreState(IMemento memento) {
- if (memento == null) return;
- mementoHandler.restoreState(this, memento);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.IShowInTarget#show(org.eclipse.ui.part.ShowInContext)
- */
- @SuppressWarnings("cast")
- @Override
- public boolean show(ShowInContext context) {
- if (context != null) {
- // Get the selection from the context
- ISelection selection = context.getSelection();
-
- // If the selection is not set or empty, look at the input element of
- // the show in context.
- if (!(selection instanceof IStructuredSelection) || selection.isEmpty()) {
- Object input = context.getInput();
- // If coming from the EGit repository viewer, the input element is
- // org.eclipse.egit.ui.internal.history.HistoryPageInput
- if ("org.eclipse.egit.ui.internal.history.HistoryPageInput".equals(input.getClass().getName())) { //$NON-NLS-1$
- Bundle bundle = Platform.getBundle("org.eclipse.egit.ui"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- selection = GitShowInContextHandler.getSelection(input);
- }
- }
- }
-
- // The selection must contain elements that can be adapted to IResource, File or IPath
- if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
- boolean isValid = true;
-
- // Build a new structured selection with the adapted elements
- List<Object> elements = new ArrayList<Object>();
-
- Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
- while (iterator.hasNext() && isValid) {
- Object element = iterator.next();
- Object adapted = null;
-
- if (element instanceof File) {
- if (!elements.contains(element)) elements.add(element);
- continue;
- }
- adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(File.class) : null;
- if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, File.class);
- if (adapted == null) adapted = Platform.getAdapterManager().loadAdapter(element, File.class.getName());
- if (adapted != null) {
- if (!elements.contains(adapted)) elements.add(adapted);
- continue;
- }
-
- if (element instanceof IPath) {
- if (!elements.contains(element)) elements.add(element);
- continue;
- }
- adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(IPath.class) : null;
- if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, IPath.class);
- if (adapted == null) adapted = Platform.getAdapterManager().loadAdapter(element, IPath.class.getName());
- if (adapted != null) {
- if (!elements.contains(adapted)) elements.add(adapted);
- continue;
- }
-
- Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- if (element instanceof org.eclipse.core.resources.IResource) {
- if (!elements.contains(element)) elements.add(element);
- continue;
- }
-
- adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(org.eclipse.core.resources.IResource.class) : null;
- if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, org.eclipse.core.resources.IResource.class);
- if (adapted == null) adapted = Platform.getAdapterManager().loadAdapter(element, org.eclipse.core.resources.IResource.class.getName());
- }
- if (adapted != null) {
- if (!elements.contains(adapted)) elements.add(adapted);
- continue;
- }
-
- // The EGit repository view can also set a RepositoryTreeNode (and subclasses)
- // "org.eclipse.egit.ui.internal.repository.tree...."
- if (element.getClass().getName().startsWith("org.eclipse.egit.ui.internal.repository.tree")) { //$NON-NLS-1$
- bundle = Platform.getBundle("org.eclipse.egit.ui"); //$NON-NLS-1$
- if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
- adapted = GitShowInContextHandler.getPath(element);
- }
- }
- if (adapted != null) {
- if (!elements.contains(adapted)) elements.add(adapted);
- continue;
- }
-
- isValid = false;
- }
-
- // If the selection is valid, fire the command to open the local terminal
- if (isValid) {
- selection = new StructuredSelection(elements);
- ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
- Command command = service != null ? service.getCommand("org.eclipse.tm.terminal.connector.local.command.launch") : null; //$NON-NLS-1$
- if (command != null && command.isDefined() && command.isEnabled()) {
- try {
- ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
- Assert.isNotNull(pCmd);
- IHandlerService handlerSvc = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
- Assert.isNotNull(handlerSvc);
- IEvaluationContext ctx = handlerSvc.getCurrentState();
- ctx = new EvaluationContext(ctx, selection);
- ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
- handlerSvc.executeCommandInContext(pCmd, null, ctx);
- } catch (Exception e) {
- // If the platform is in debug mode, we print the exception to the log view
- if (Platform.inDebugMode()) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- Messages.AbstractTriggerCommandHandler_error_executionFailed, e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- }
- return true;
- }
- }
- }
- return false;
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.view;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
-import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
-import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
-import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Take care of the persisted state handling of the "Terminal" view.
- */
-public class TerminalsViewMementoHandler {
- // The list of items to save. See the workbench listener implementation
- // in o.e.tm.terminal.view.ui.activator.UIPlugin.
- private final List<CTabItem> saveables = new ArrayList<CTabItem>();
-
- /**
- * Sets the list of saveable items.
- *
- * @param saveables The list of saveable items. Must not be <code>null</code>.
- */
- public void setSaveables(List<CTabItem> saveables) {
- Assert.isNotNull(saveables);
- this.saveables.clear();
- this.saveables.addAll(saveables);
- }
-
- /**
- * Saves the view state in the given memento.
- *
- * @param view The terminals view. Must not be <code>null</code>.
- * @param memento The memento. Must not be <code>null</code>.
- */
- @SuppressWarnings("unchecked")
- public void saveState(TerminalsView view, IMemento memento) {
- Assert.isNotNull(view);
- Assert.isNotNull(memento);
-
- // Create a child element within the memento holding the
- // connection info of the open, non-terminated tab items
- memento = memento.createChild("terminalConnections"); //$NON-NLS-1$
- Assert.isNotNull(memento);
-
- // Write the view id and secondary id
- memento.putString("id", view.getViewSite().getId()); //$NON-NLS-1$
- memento.putString("secondaryId", view.getViewSite().getSecondaryId()); //$NON-NLS-1$
-
- // Loop the saveable items and store the connection data of each
- // item to the memento
- for (CTabItem item : saveables) {
- // Ignore disposed items
- if (item.isDisposed()) continue;
-
- // Get the original terminal properties associated with the tab item
- Map<String, Object> properties = (Map<String, Object>)item.getData("properties"); //$NON-NLS-1$
- if (properties == null) continue;
-
- // Get the terminal launcher delegate
- String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
- ILauncherDelegate delegate = delegateId != null ? LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false) : null;
- IMementoHandler mementoHandler = delegate != null ? (IMementoHandler)delegate.getAdapter(IMementoHandler.class) : null;
- if (mementoHandler != null) {
- // Create terminal connection child memento
- IMemento connectionMemento = memento.createChild("connection"); //$NON-NLS-1$
- Assert.isNotNull(connectionMemento);
- // Store the common attributes
- connectionMemento.putString(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegateId);
-
- String terminalConnectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
- if (terminalConnectorId != null) {
- connectionMemento.putString(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, terminalConnectorId);
- }
-
- if (properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW) instanceof Boolean) {
- connectionMemento.putBoolean(ITerminalsConnectorConstants.PROP_FORCE_NEW, ((Boolean)properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW)).booleanValue());
- }
-
- // Store the current encoding
- ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
- String encoding = terminal != null ? terminal.getEncoding() : null;
- if (encoding == null || "".equals(encoding)) encoding = (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING); //$NON-NLS-1$
- if (encoding != null && !"".equals(encoding)) { //$NON-NLS-1$
- connectionMemento.putString(ITerminalsConnectorConstants.PROP_ENCODING, encoding);
- }
-
- // Pass on to the memento handler
- mementoHandler.saveState(connectionMemento, properties);
- }
- }
- }
-
- /**
- * Restore the view state from the given memento.
- *
- * @param view The terminals view. Must not be <code>null</code>.
- * @param memento The memento. Must not be <code>null</code>.
- */
- protected void restoreState(final TerminalsView view, IMemento memento) {
- Assert.isNotNull(view);
- Assert.isNotNull(memento);
-
- // Get the "terminalConnections" memento
- memento = memento.getChild("terminalConnections"); //$NON-NLS-1$
- if (memento != null) {
- // Read view id and secondary id
- String id = memento.getString("id"); //$NON-NLS-1$
- String secondaryId = memento.getString("secondaryId"); //$NON-NLS-1$
- if ("null".equals(secondaryId)) secondaryId = null; //$NON-NLS-1$
-
- // Get all the "connection" memento's.
- IMemento[] connections = memento.getChildren("connection"); //$NON-NLS-1$
- for (IMemento connection : connections) {
- // Create the properties container that holds the terminal properties
- Map<String, Object> properties = new HashMap<String, Object>();
-
- // Set the view id attributes
- properties.put(ITerminalsConnectorConstants.PROP_ID, id);
- properties.put(ITerminalsConnectorConstants.PROP_SECONDARY_ID, secondaryId);
-
- // Restore the common attributes
- properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, connection.getString(ITerminalsConnectorConstants.PROP_DELEGATE_ID));
- properties.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, connection.getString(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID));
- if (connection.getBoolean(ITerminalsConnectorConstants.PROP_FORCE_NEW) != null) {
- properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, connection.getBoolean(ITerminalsConnectorConstants.PROP_FORCE_NEW));
- }
-
- // Restore the encoding
- if (connection.getString(ITerminalsConnectorConstants.PROP_ENCODING) != null) {
- properties.put(ITerminalsConnectorConstants.PROP_ENCODING, connection.getString(ITerminalsConnectorConstants.PROP_ENCODING));
- }
-
- // Get the terminal launcher delegate
- String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
- ILauncherDelegate delegate = delegateId != null ? LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false) : null;
- IMementoHandler mementoHandler = delegate != null ? (IMementoHandler)delegate.getAdapter(IMementoHandler.class) : null;
- if (mementoHandler != null) {
- // Pass on to the memento handler
- mementoHandler.restoreState(connection, properties);
- }
-
- // Restore the terminal connection
- if (delegate != null && !properties.isEmpty()) {
- delegate.execute(properties, null);
- }
- }
- }
- }
-
- /**
- * Executes the given runnable asynchronously in the display thread.
- *
- * @param runnable The runnable. Must not be <code>null</code>.
- */
- /* default */ void asyncExec(Runnable runnable) {
- Assert.isNotNull(runnable);
- if (PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getDisplay() != null && !PlatformUI.getWorkbench().getDisplay().isDisposed()) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
- }
- }
-}
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.terminal.view.ui.view.showin;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-
-/**
- * Git show in context handler implementation.
- */
-@SuppressWarnings("restriction")
-public class GitShowInContextHandler {
-
- /**
- * Converts the data from the input object into a selection.
- *
- * @param input The input element. Must not be <code>null</code>.
- * @return The selection or <code>null</code>.
- */
- public static ISelection getSelection(Object input) {
- Assert.isNotNull(input);
-
- List<Object> elements = new ArrayList<Object>();
-
- if (input instanceof org.eclipse.egit.ui.internal.history.HistoryPageInput) {
- org.eclipse.egit.ui.internal.history.HistoryPageInput inp = (org.eclipse.egit.ui.internal.history.HistoryPageInput) input;
-
- if (inp.isSingleFile()) {
- elements.add(inp.getSingleFile());
- } else {
- File[] fl = inp.getFileList();
- if (fl != null && fl.length > 0) {
- for (File f : fl) {
- if (f.canRead() && !elements.contains(f)) {
- elements.add(f);
- }
- }
- }
-
- IResource[] rl = inp.getItems();
- if (rl != null && rl.length > 0) {
- for (IResource r : rl) {
- if (r.isAccessible() && !elements.contains(r)) {
- elements.add(r);
- }
- }
- }
- }
- }
-
- return elements.isEmpty() ? null : new StructuredSelection(elements);
- }
-
- /**
- * Returns the path of the given element.
- *
- * @param element The element. Must not be <code>null</code>.
- * @return The path or <code>null</code>.
- */
- public static IPath getPath(Object element) {
- Assert.isNotNull(element);
-
- IPath path = null;
-
- if (element instanceof org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode) {
- path = ((org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode<?>)element).getPath();
- }
-
- return path;
- }
-}