Xorg(1) Xorg(1) NAME Xorg - X11R7 X server SYNOPSIS Xorg [:display] [option ...] DESCRIPTION Xorg is a full featured X server that was originally designed for UNIX and UNIX-like operating systems running on Intel x86 hardware. It now runs on a wider range of hardware and OS platforms. This work was derived by the X.Org Foundation from the XFree86 Project's XFree86 4.4rc2 release. The XFree86 release was originally derived from X386 1.2 by Thomas Roell which was contributed to X11R5 by Snitily Graph‐ ics Consulting Service. PLATFORMS Xorg operates under a wide range of operating systems and hardware plat‐ forms. The Intel x86 (IA32) architecture is the most widely supported hardware platform. Other hardware platforms include Compaq Alpha, Intel IA64, AMD64, SPARC and PowerPC. The most widely supported operating sys‐ tems are the free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD, OpenBSD, and Solaris. Commercial UNIX operating systems such as UnixWare are also supported. Other supported operating systems include GNU Hurd. Mac OS X is supported with the Xquartz(1) X server. Win32/Cygwin is supported with the XWin(1) X server. NETWORK CONNECTIONS Xorg supports connections made using the following reliable byte-streams: Local On most platforms, the "Local" connection type is a UNIX-domain socket. On some System V platforms, the "local" connection types also include STREAMS pipes, named pipes, and some other mechanisms. TCPIP Xorg listens on port 6000+n, where n is the display number. This connection type can be disabled with the -nolisten option (see the Xserver(1) man page for details). ENVIRONMENT VARIABLES For operating systems that support local connections other than Unix Domain sockets (SVR3 and SVR4), there is a compiled-in list specifying the order in which local connections should be attempted. This list can be overridden by the XLOCAL environment variable described below. If the display name indicates a best-choice connection should be made (e.g. :0.0), each connection mechanism is tried until a connection succeeds or no more mechanisms are available. Note: for these OSs, the Unix Domain socket connection is treated differently from the other local connection types. To use it the connection must be made to unix:0.0. The XLOCAL environment variable should contain a list of one more more of the following: NAMED PTS SCO ISC which represent SVR4 Named Streams pipe, Old-style USL Streams pipe, SCO XSight Streams pipe, and ISC Streams pipe, respectively. You can select a single mechanism (e.g. XLOCAL=NAMED), or an ordered list (e.g. XLO‐ CAL="NAMED:PTS:SCO"). his variable overrides the compiled-in defaults. For SVR4 it is recommended that NAMED be the first preference connection. The default setting is PTS:NAMED:ISC:SCO. To globally override the compiled-in defaults, you should define (and export if using sh or ksh) XLOCAL globally. If you use startx(1) or xinit(1), the definition should be at the top of your .xinitrc file. If you use xdm(1), the definitions should be early on in the /usr/lib/X11/xdm/Xsession script. OPTIONS Xorg supports several mechanisms for supplying/obtaining configuration and run-time parameters: command line options, environment variables, the xorg.conf(5) configuration files, auto-detection, and fallback defaults. When the same information is supplied in more than one way, the highest precedence mechanism is used. The list of mechanisms is ordered from highest precedence to lowest. Note that not all parameters can be sup‐ plied via all methods. The available command line options and environ‐ ment variables (and some defaults) are described here and in the Xserver(1) manual page. Most configuration file parameters, with their defaults, are described in the xorg.conf(5) manual page. Driver and mod‐ ule specific configuration parameters are described in the relevant driver or module manual page. In addition to the normal server options described in the Xserver(1) man‐ ual page, Xorg accepts the following command line switches: vtXX XX specifies the Virtual Terminal device number which Xorg will use. Without this option, Xorg will pick the first available Virtual Terminal that it can locate. This option applies only to platforms that have virtual terminal support, such as Linux, BSD, OpenSolaris, SVR3, and SVR4. -allowMouseOpenFail Allow the server to start up even if the mouse device can't be opened or initialised. This is equivalent to the AllowMouseOpen‐ Fail xorg.conf(5) file option. -allowNonLocalXvidtune Make the VidMode extension available to remote clients. This allows the xvidtune client to connect from another host. This is equivalent to the AllowNonLocalXvidtune xorg.conf(5) file option. By default non-local connections are not allowed. -bgamma value Set the blue gamma correction. value must be between 0.1 and 10. The default is 1.0. Not all drivers support this. See also the -gamma, -rgamma, and -ggamma options. -bpp n No longer supported. Use -depth to set the color depth, and use -fbbpp if you really need to force a non-default framebuffer (hardware) pixel format. -config file Read the server configuration from file. This option will work for any file when the server is run as root (i.e, with real-uid 0), or for files relative to a directory in the config search path for all other users. -configdir directory Read the server configuration files from directory. This option will work for any directory when the server is run as root (i.e, with real-uid 0), or for directories relative to a directory in the config directory search path for all other users. -configure When this option is specified, the Xorg server loads all video driver modules, probes for available hardware, and writes out an initial xorg.conf(5) file based on what was detected. This option currently has some problems on some platforms, but in most cases it is a good way to bootstrap the configuration process. This option is only available when the server is run as root (i.e, with real-uid 0). -crt /dev/ttyXX SCO only. This is the same as the vt option, and is provided for compatibility with the native SCO X server. -depth n Sets the default color depth. Legal values are 1, 4, 8, 15, 16, and 24. Not all drivers support all values. -disableVidMode Disable the parts of the VidMode extension (used by the xvidtune client) that can be used to change the video modes. This is equivalent to the DisableVidModeExtension xorg.conf(5) file option. -fbbpp n Sets the number of framebuffer bits per pixel. You should only set this if you're sure it's necessary; normally the server can deduce the correct value from -depth above. Useful if you want to run a depth 24 configuration with a 24 bpp framebuffer rather than the (possibly default) 32 bpp framebuffer (or vice versa). Legal values are 1, 8, 16, 24, 32. Not all drivers support all values. -flipPixels Swap the default values for the black and white pixels. -gamma value Set the gamma correction. value must be between 0.1 and 10. The default is 1.0. This value is applied equally to the R, G and B values. Those values can be set independently with the -rgamma, -bgamma, and -ggamma options. Not all drivers support this. -ggamma value Set the green gamma correction. value must be between 0.1 and 10. The default is 1.0. Not all drivers support this. See also the -gamma, -rgamma, and -bgamma options. -ignoreABI The Xorg server checks the ABI revision levels of each module that it loads. It will normally refuse to load modules with ABI revisions that are newer than the server's. This is because such modules might use interfaces that the server does not have. When this option is specified, mismatches like this are downgraded from fatal errors to warnings. This option should be used with care. -isolateDevice bus-id Restrict device resets to the device at bus-id. The bus-id string has the form bustype:bus:device:function (e.g., ‘PCI:1:0:0’). At present, only isolation of PCI devices is sup‐ ported; i.e., this option is ignored if bustype is anything other than ‘PCI’. -keeptty Prevent the server from detaching its initial controlling termi‐ nal. This option is only useful when debugging the server. Not all platforms support (or can use) this option. -keyboard keyboard-name Use the xorg.conf(5) file InputDevice section called keyboard- name as the core keyboard. This option is ignored when the Lay‐ out section specifies a core keyboard. In the absence of both a Layout section and this option, the first relevant InputDevice section is used for the core keyboard. -layout layout-name Use the xorg.conf(5) file Layout section called layout-name. By default the first Layout section is used. -logfile filename Use the file called filename as the Xorg server log file. The default log file is /var/log/Xorg.n.log on most platforms, where n is the display number of the Xorg server. The default may be in a different directory on some platforms. This option is only available when the server is run as root (i.e, with real-uid 0). -logverbose [n] Sets the verbosity level for information printed to the Xorg server log file. If the n value isn't supplied, each occurrence of this option increments the log file verbosity level. When the n value is supplied, the log file verbosity level is set to that value. The default log file verbosity level is 3. -modulepath searchpath Set the module search path to searchpath. searchpath is a comma separated list of directories to search for Xorg server modules. This option is only available when the server is run as root (i.e, with real-uid 0). -nosilk Disable Silken Mouse support. -novtswitch Disable the automatic switching on X server reset and shutdown to the VT that was active when the server started, if supported by the OS. -pixmap24 Set the internal pixmap format for depth 24 pixmaps to 24 bits per pixel. The default is usually 32 bits per pixel. There is normally little reason to use this option. Some client applica‐ tions don't like this pixmap format, even though it is a per‐ fectly legal format. This is equivalent to the Pixmap xorg.conf(5) file option. -pixmap32 Set the internal pixmap format for depth 24 pixmaps to 32 bits per pixel. This is usually the default. This is equivalent to the Pixmap xorg.conf(5) file option. -pointer pointer-name Use the xorg.conf(5) file InputDevice section called pointer-name as the core pointer. This option is ignored when the Layout sec‐ tion specifies a core pointer. In the absence of both a Layout section and this option, the first relevant InputDevice section is used for the core pointer. -quiet Suppress most informational messages at startup. The verbosity level is set to zero. -rgamma value Set the red gamma correction. value must be between 0.1 and 10. The default is 1.0. Not all drivers support this. See also the -gamma, -bgamma, and -ggamma options. -sharevts Share virtual terminals with another X server, if supported by the OS. -screen screen-name Use the xorg.conf(5) file Screen section called screen-name. By default the screens referenced by the default Layout section are used, or the first Screen section when there are no Layout sec‐ tions. -showconfig This is the same as the -version option, and is included for com‐ patibility reasons. It may be removed in a future release, so the -version option should be used instead. -showDefaultModulePath Print out the default module path the server was compiled with. -showDefaultLibPath Print out the path libraries should be installed to. -showopts For each driver module installed, print out the list of options and their argument types. -weight nnn Set RGB weighting at 16 bpp. The default is 565. This applies only to those drivers which support 16 bpp. -verbose [n] Sets the verbosity level for information printed on stderr. If the n value isn't supplied, each occurrence of this option incre‐ ments the verbosity level. When the n value is supplied, the verbosity level is set to that value. The default verbosity level is 0. -version Print out the server version, patchlevel, release date, the oper‐ ating system/platform it was built on, and whether it includes module loader support. KEYBOARD The Xorg server is normally configured to recognize various special com‐ binations of key presses that instruct the server to perform some action, rather than just sending the key press event to a client application. These actions depend on the XKB keymap loaded by a particular keyboard device and may or may not be available on a given configuration. The following key combinations are commonly part of the default XKEYBOARD keymap. Ctrl+Alt+Backspace Immediately kills the server -- no questions asked. It can be disabled by setting the DontZap xorg.conf(5) file option to a TRUE value. It should be noted that zapping is triggered by the Termi‐ nate_Server action in the keyboard map. This action is not part of the default keymaps but can be enabled with the XKB option "terminate:ctrl_alt_bksp". Ctrl+Alt+Keypad-Plus Change video mode to next one specified in the configuration file. This can be disabled with the DontZoom xorg.conf(5) file option. Ctrl+Alt+Keypad-Minus Change video mode to previous one specified in the configuration file. This can be disabled with the DontZoom xorg.conf(5) file option. Ctrl+Alt+F1...F12 For systems with virtual terminal support, these keystroke combi‐ nations are used to switch to virtual terminals 1 through 12, respectively. This can be disabled with the DontVTSwitch xorg.conf(5) file option. CONFIGURATION Xorg typically uses a configuration file called xorg.conf and configura‐ tion files with the suffix .conf in a directory called xorg.conf.d for its initial setup. Refer to the xorg.conf(5) manual page for information about the format of this file. Xorg has a mechanism for automatically generating a built-in configura‐ tion at run-time when no xorg.conf file or xorg.conf.d files are present. The current version of this automatic configuration mechanism works in two ways. The first is via enhancements that have made many components of the xorg.conf file optional. This means that information that can be probed or reasonably deduced doesn't need to be specified explicitly, greatly reducing the amount of built-in configuration information that needs to be generated at run-time. The second is to have "safe" fallbacks for most configuration informa‐ tion. This maximises the likelihood that the Xorg server will start up in some usable configuration even when information about the specific hardware is not available. The automatic configuration support for Xorg is work in progress. It is currently aimed at the most popular hardware and software platforms sup‐ ported by Xorg. Enhancements are planned for future releases. FILES The Xorg server config files can be found in a range of locations. These are documented fully in the xorg.conf(5) manual page. The most commonly used locations are shown here. /etc/X11/xorg.conf Server configuration file. /etc/X11/xorg.conf-4 Server configuration file. /etc/xorg.conf Server configuration file. /usr/etc/xorg.conf Server configuration file. /usr/lib/X11/xorg.conf Server configuration file. /etc/X11/xorg.conf.d Server configuration directory. /etc/X11/xorg.conf.d-4 Server configuration directory. /etc/xorg.conf.d Server configuration directory. /usr/etc/xorg.conf.d Server configuration directory. /usr/lib/X11/xorg.conf.d Server configuration directory. /var/log/Xorg.n.log Server log file for display n. /usr/bin/∗ Client binaries. /usr/include/∗ Header files. /usr/lib/∗ Libraries. /usr/share/fonts/X11/∗ Fonts. /usr/share/X11/XErrorDB Client error message database. /usr/lib/X11/app-defaults/∗ Client resource specifications. /usr/share/man/man?/∗ Manual pages. /etc/Xn.hosts Initial access control list for display n. SEE ALSO X(7), Xserver(1), xdm(1), xinit(1), xorg.conf(5), xvidtune(1), xkeyboard- config (7), apm(4), ati(4), chips(4), cirrus(4), cyrix(4), fbdev(4), glide(4), glint(4), i128(4), i740(4), imstt(4), intel(4), mga(4), neo‐ magic(4), nsc(4), nv(4), openchrome (4), r128(4), rendition(4), s3virge(4), siliconmotion(4), sis(4), sunbw2(4), suncg14(4), suncg3(4), suncg6(4), sunffb(4), sunleo(4), suntcx(4), tdfx(4), tga(4), trident(4), tseng(4), v4l(4), vesa(4), vmware(4), Web site <http://www.x.org>. AUTHORS Xorg has many contributors world wide. The names of most of them can be found in the documentation, ChangeLog files in the source tree, and in the actual source code. Xorg was originally based on XFree86 4.4rc2. That was originally based on X386 1.2 by Thomas Roell, which was contributed to the then X Consor‐ tium's X11R5 distribution by SGCS. Xorg is released by the X.Org Foundation. The project that became XFree86 was originally founded in 1992 by David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat. XFree86 was later integrated in the then X Consortium's X11R6 release by a group of dedicated XFree86 developers, including the following: Stuart Anderson<EMAIL_ADDRESS>Doug Anson<EMAIL_ADDRESS>Gertjan Akkerman<EMAIL_ADDRESS>Mike Bernson<EMAIL_ADDRESS>Robin Cutshaw<EMAIL_ADDRESS>David Dawes<EMAIL_ADDRESS>Marc Evans<EMAIL_ADDRESS>Pascal Haible<EMAIL_ADDRESS>Matthieu Herrb<EMAIL_ADDRESS>Dirk Hohndel<EMAIL_ADDRESS>David Holland<EMAIL_ADDRESS>Alan Hourihane<EMAIL_ADDRESS>Jeffrey Hsu<EMAIL_ADDRESS>Glenn Lai<EMAIL_ADDRESS>Ted Lemon<EMAIL_ADDRESS>Rich Murphey<EMAIL_ADDRESS>Hans Nasten<EMAIL_ADDRESS>Mark Snitily<EMAIL_ADDRESS>Randy Terbush<EMAIL_ADDRESS>Jon Tombs<EMAIL_ADDRESS>Kees Verstoep<EMAIL_ADDRESS>Paul Vixie<EMAIL_ADDRESS>Mark Weaver<EMAIL_ADDRESS>David Wexelblat<EMAIL_ADDRESS>Philip Wheatley<EMAIL_ADDRESS>Thomas Wolfram<EMAIL_ADDRESS>Orest Zborowski<EMAIL_ADDRESS>Xorg source is available from the FTP server <ftp://ftp.x.org/>, and from the X.Org server <http://gitweb.freedesktop.org/>. Documentation and other information can be found from the X.Org web site <http://www.x.org/>. LEGAL Xorg is copyright software, provided under licenses that permit modifica‐ tion and redistribution in source and binary form without fee. Xorg is copyright by numerous authors and contributors from around the world. Licensing information can be found at <http://www.x.org>. Refer to the source code for specific copyright notices. XFree86(TM) is a trademark of The XFree86 Project, Inc. X11(TM) and X Window System(TM) are trademarks of The Open Group. X Version 11 xorg-server 1.12.4 Xorg(1)


Event Handling in jQuery
Keyboard Event Handling
keydown
0
which
0
keypress
0
which
0
keyup
0
which
0


Let me introduce myself, my name is Roman, I'm 22 years old.
I got a full higher education in Chernigov National Technological University, Mechanical Engineering department. At the University my favorite subjects were mathematics, physics, mechanical drawing, and computer science. At school I also liked these items.
I want to be software tester. I read book about testing: Roman Savin "Testing dot com", generally this book is about the testing theory, and cases of life testers, the book is written very interesting and humorous.
In this book I got understanding and knowledge of life cycle software, understanding of the goals and objectives of the testing process and the testing phases. Also I found understanding the life cycle of bugs, basic knowledge of the methods, models and types of testing. Also I read the book: Testing object-oriented software. A Practical Guide by John McGregor and David Cicse.
Web development also is interesting subject for me. I read book Prohorenyuka "set of web masters". I did on-line course on HTML and CSS. In my spare time I develop my website.
I am sociable, diligent, responsible, attentive to details, interested in new technologies and a fast learner.
I`m looking forward to meet new challenges, and get new experience in QA.
Here my CV - general information about my skills and experience.


|
Windmill Tutorial
Walking you through the testing goodness. |
Welcome to the Windmill Interactive Tutorial.The following should make you familiar enough with Windmill and its features that afterwards you should be able to start writing and running tests against your product. At anytime you are free to browse through the WindmillBook for more thorough explanations of Windmill features and more advanced functionality.As you walk through the steps, you may see feedback and if this doesn't do the trick please come visit us in #windmill on irc.freenode.org with questions! |
|
Step 1: Click the record button in the IDE, then:
Click Me! |
|
Step 2: With the recorder still turned on, enter some text in the following text field and submit it.
|


|
Understanding
the TreeModel
By Eric Armstrong, Tom
Santos, and Steve Wilson
In
Swing, many components can be used with objects that implement corresponding
models.
For example, Swing's JTree component can be used with an object
that implements the TreeModel interface. Similarly, a JTable can
be used with a TableModel, and a JList can be used with a ListModel.
But in each of these cases, a model interface is used mainly to
define accessor methods. It defines no operations to manipulate
the structure of the data -- no methods to insert or remove data
items, or to change the order of data in the model.
That makes implementing a model and using it with one of these
components somewhat different from using a more conventional MVC
(model-view-controller) architecture.
But that difference allows greater flexibility. It means you can
use JTree, JTable, or JList with an existing data structure without
having to make violent modifications to to that structure to make
it conform to the required interface.
This article focuses mainly on the relationship between JTree and
the TreeModel interface. But similar thinking applies to using a
JTable or a JList component.
The article comes with a downloadable sample program that shows
exactly how JTree and TreeModel can be used together in a program.
TreeModel Basics
If you have an existing tree-based data structure, you can use
it with a JTree without having to change your data model significantly.
This is important to remember. There are many possible representations
of tree structures, and there are many possible operations on them.
But JTree makes no assumptions about which operations are available,
so you are free to use an existing tree structure with a JTree --
including your operating system's directory tree! (For more information
on this topic, see the article in this issue titled "Creating
TreeTables in Swing.
The TreeModel Interface Defined
Although the JTree architecture defines a TreeModel
interface, it defines no operations that affect the structure of
the tree. Looking over the methods defined in the interface, you
can see a variety of accessor methods, one method for changing the
data associated with a node, and none at all for adding nodes, removing
them, or shifting their position in the tree.
Here is how Swing defines the TreeModel interface:
public Object getRoot();
public boolean isLeaf(Object node);
public int getChildCount(Object parent);
public Object getChild(Object parent, int index);
public int getIndexOfChild(Object parent, Object child);
public void valueForPathChanged(TreePath path, Object newValue);
void addTreeModelListener(TreeModelListener l);
void removeTreeModelListener(TreeModelListener l); |
Turning a Weakness into a Strength
At first glance, that seems weird. How can a "model"
leave out manipulation operations? But this apparent weakness quickly
turns into a strength. The problem with defining a tree model is
that there are many fully functional subsets of the possible operations
on a tree. For example, let's say you define a tree model, and that
you want to be able to add a sublist node either at the beginning
or end of a node's sublist. There are at several possible combinations
of methods that would achieve that goal. You could implement insert-first
and insert-last, or you could implement insert-first and move-to-last,
or you could implement append-to-end and move-to-first. Any of those
pairs would be sufficient to make sure you can insert a new node
either at the beginning or end of a list. The following table shows
these three possible combinations of operations:
| |
Operation #1 |
Operation #2 |
| 1 |
Insert as first sublist node |
Insert as last sublist node |
| 2 |
Insert as first sublist node |
Move node to end of its list |
| 3 |
Append as last sublist node |
Move node to beginning of its list |
Any two of these operations are sufficient to allow the client-developer
to get a node to the desired final positions. But which two should
the tree model define? This kind of question arises repeatedly in
the design of a tree object. Clearly, it would not be ideal for
the tree model to define every possible operation on a tree.
It would then be an onerous task for the developer to define a new
model object, because of the many methods that would have to be
defined.
But there is no "standard" subset of operations. The
state of the art at the moment is that every component library which
includes an MVC-based tree component defines a wildly different
subset of the possible operations. The typical result, if you have
an existing tree structure, is that you have to perpetrate extreme
violence on it to make it a suitable model for a given component
library.
Suppose, for example, that your structure implements "insert
as first sublist" and "move node to end." If the
component you plan to use defines its tree model using "insert
as last sublist node" and "move node to beginning,"
you have your work cut out for you. You not only have to define
the new methods required by the interface; you also have to redefine
the old ones, to make sure they generate the events required by
the view-component.
Like JList and JTable, JTree rushes to the rescue by the simple
expedient of not defining any structure manipulations on
the model. You are free to define any tree-structure operations
that make sense, and therefore are free to use any existing tree
object for the underlying data structure. The FileExplorer example
that follows uses the tree structure defined by the operating system's
directory hierarchy. The example shows you how to add listeners
on the JTree component to find events of interest, manipulate the
underlying data structure (in this case, the directory tree), and
then fire off the events that tell JTree that the structure has
changed.
Example: The FileExplorer
Browser
To help you examine the principles and programming techniques described
in this article, we've provided a sample program named FileExplorer.java,
which implements a simple directory browser called FileExplorer.
You can view the FileExplorer.java program as a series of
text files, or you can download the program in an executable version,
complete with all the source and class files that were used to compile
it.
To see the source code for the various files that make up the FileExplorer
sample program, follow these links:
You can also download a zipped file containing all the preceding
source files, a fileexplorer.jar file, and an executable
version of the program. To do that, follow this link:
FileExplorer.zip
When you excecute the FileExplorer.javaprogram, it displays
a FileExplorer browser has a left pane and a right pane, as shown
in the following illustration. The left pane contains a tree-structured
file hierarchy. It shows all files in a directory, as well as any
folders that the directory contains. When a folder is selected in
the left pane, the right pane shows a table of information about
the files in the directory.
NOTE: The FileExplorer is a demonstration application
that has been kept as simple as possible. To make a real utility
out of it, you would have to add many additional trimmings.
Implementing
the TreeModel interface
The first step in using JTree with an existing model is to implement
the swing.tree.TreeModel interface. You can add that
interface to an existing class, implement it on an adapter that
delegates to the existing tree structure (or subclasses that data
object), or use the interface on a "parallel" tree model
object that simply reports changes you make to the real tree. But,
however you slice it, you need to implement that interface.
NOTE: The FileExplorer uses the "parallel"
approach because that strategy lets you create an adapter that
bridges the tree model and the underlying data tree (in this case,
the directory structure) without having to modify any of the code
that works with the underlying data tree.
Creating a JTree object
After creating a model, you instantiate a JTree object that uses
the model by invoking the JTree(TreeModel) constructor.
Then you register event listeners with the JTree component to handle
the events you are interested in. When the program handles a user
event, it makes two calls: one to the underlying data structure
to make the change, and another to the TreeModel-adapter to report
the change. The TreeModel object then notifies the JTree of the
change.
|
The diagram on the right shows the steps needed to create
a JTree object. They work like this:
- The app registers mouse and keystroke listeners with the
JTree.
- The application receives events from the JTree and determines
the action to take.
- The application changes the underlying data model (in
this case, the file system).
- The application reports the change to the TreeModel adapter.
- The TreeModel adapter notifies its listeners (JTree) of
the change.
- JTree asks the TreeModel adapter for data to display.
- The adapter delegates the data request.
- The underlying data object (file system) passes back the
data.
- The adapter sends the data back to the JTree.
|
|
The remainder of this article describes these steps in detail,
showing how to use a JTree with an existing tree data structure.
In this case, the FileExplorer example included with the Swing class
library uses a JTree to display the directory tree managed by your
operating system.
NOTE: You get a cleaner design if the TreeModel adapter
does the work of changing the data. But this diagram serves to
illustrate the very important point that changing the data and
notifying the JTree of the component of the change are two very
distinct steps.
TreeModel requirements
There are two aspects of the TreeModel interface that you need
to pay attention to: the explicit requirements and the implicit
requirements. The explicit requirements are the methods defined
in the interface. You saw those in the previous section. The JTree
component uses those methods to access the model's data, to change
the data stored at a node, and to register a TreeModel listener
-- which defines the implicit requirements for the interface.
When the JTree component is created, it registers itself with the
model as a TreeModelListener . Implicitly, then, the
TreeModel is expected to perform the following notifications, as
defined in swing.event.TreeModelListener :
void treeNodesChanged(TreeModelEvent e);
void treeNodesInserted(TreeModelEvent e);
void treeNodesRemoved(TreeModelEvent e);
void treeStructureChanged(TreeModelEvent e); |
As you can see, the TreeModel is expected to generate events when
a nodes are changed, inserted, or removed, as well as when more
global structure changes occur. To encapsulate the event information,
the model needs to generate swing.event.TreeModelEvent
objects.
Using
AbstractTreeModel
To minimize the work you need to do, you can subclass swing.tree.AbstractTreeModel .
This class extends swing.tree.TreeModelSupport , which
handles the registration of tree model listeners and event notifications.
Since it also declares the TreeModel interface, leaving
you to implement the methods in that interface (except for the listener
registration methods, which are already handled by TreeModelSupport .)
The following class diagram shows these relationships. Since FileExplorer
also uses a JTable to display the files in a directory, the diagram
shows the parallel relationships that exist in the use of the JTable
component.
As this diagram illustrates, AbstractTreeModel inherits
concrete implementations of addTreeModelListener and
removeTreeModelListener from the TreeModelSupport
class, which takes care of the listener-registration methods required
by the TreeModel interface. The TreeModelSupport
class also provides the event-notification methods fireTreeNodesChanged ,
fireTreeNodesInserted , fireTreeNodesRemoved ,
and fireTreeStructureChanged .
That leaves the accessor methods to be implemented by the application-specific
model, FileSystemModel : getRoot , getChild ,
getChildCount , getIndexOfChild , and isLeaf .
If the tree is editable, the application-specific model must also
provide semantics for valueForPathChanged . Otherwise,
this method can be given a null-implementation.
NOTE: Because the TreeModelSupport class
is separate from AbstractTreeModel , you can either
subclass AbstractTreeModel to create an adapter,
or add the TreeModel interface on an existing class
and then delegate the registration and notification behaviors
to a TreeModelSupport object.
The FileExplorer class creates an instance of FileSystemModel ,
which it passes to an instance of FileSystemTreePanel .
The object-passing is shown in the diagram by the black dot, which
indicates that an object of the class FileSystemModel
is passed to the FileSystemTreePanel . The arrow at
the target end shows where the FileSystemTreePanel
keeps the passed object (in the model attribute). The
FileSystemTreePanel , in turn, creates a JTree
object, and passes its model object to the JTree
instance. As shown in the diagram, the type of the JTree 's
model object is TreeModel , which completes
the circle -- the FileSystemModel object is created
from a class that implements TreeModel , and is ultimately
stored in a variable defined with that type.
The tree view is on the left side of the FileExplorer
app. On the right side is the table of files and their properties,
which follows the same pattern: The FileExplorer class
creates an instance of DirectoryModel , which subclasses
AbstractTableModel . This TableModel object
is then passed to an instance of JTable .
Identifying Leaf Nodes
In a tree like this one, where some nodes (directory nodes) can
have children and other nodes (file nodes) cannot, isLeaf()
is implemented to distinguish the kinds of nodes. In this case,
the nodes are cast to type File , and isFile()
is returned to identify leaf nodes. Here is the code for isLeaf() :
public boolean isLeaf( Object node ) {
return ((File)node).isFile();
}
In a tree where any node can have children, however, isLeaf()
could simply return true .
Handling JTree Events
When a directory in the left pane is clicked, the app needs to
change the table of information displayed in the right pane. To
do that, registers a tree selection listener, like this:
fileTree.getTree().addTreeSelectionListener
( new TreeListener( directoryModel ) );
The DirectoryModel object is passed to the TreeListener for use
in the update process. Here is the code for the DirectoryModel class:
protected static class TreeListener implements TreeSelectionListener {
DirectoryModel model;
public TreeListener( DirectoryModel mdl ) {
model = mdl;
}
public void valueChanged( TreeSelectionEvent e ) {
if (e.getNewLeadSelectionPath() == null) return;
File fileSysEntity = (File)e.getPath().getLastPathComponent();
if ( fileSysEntity.isDirectory() ) {
model.setDirectory( fileSysEntity );
}
else {
model.setDirectory( null );
}
}
} |
This code identifies the File object that was selected
by the user. (The getPath() method returns a TreePath
object, which contains an array of Object s. The first
object in the array comes from the root of the tree. The last object
in the array is the selected item. The items between the root and
the selected item identify the path to the object, in the same way
that directory names identify a path to a file. (In this case, since
the tree represents the system file structure, the path objects
are directories.)
NOTE: The valueChanged() method reports changes
in the current selection. As a result, getNewLeadSelectionPath()
can return null whenever the currently selected item
has been deleted. A second event is then generated which identifies
the new selection after the delete takes place. Although the FileExplorer
app does not handle deletes, you should get in the habit of coding
if (e.getNewLeadSelectionPath() == null) return;
at the start of a valueChanged() method for TreeSelectionEvents.
The getLastPathComponent() method returns the last
object in the path, which is then cast to a File object.
If the File object is a directory, it is sent to the
DirectoryModel for display. Otherwise, the DirectoryModel
is messaged with null , which clears the display in
the right pane.
NOTE: When the user has changed the current selection,
but has not deleted a node, the TreeSelectionEvent contains the
difference in the selection. In other words, it contains old nodes
that are no longer selected as well as newly selected nodes.When
you are concerned with multiple-node selections, you can invoke
the TreeSelectionEvent method isAddedPath(TreePath) on
each of the items returned by its getPaths() method to
find out which were added and which were removed. Or you can use
the JTree getSelectionModel() method to obtain the object
which is maintaining the current selection list, and then use
its getSelectionPaths() method to get an array of selected
TreePaths. Simple apps which aren't concerned with multiple-node
selections (like FileExplorer) simply use the first selected node,
which is returned by the TreeSelection event getPath()
method.
Reporting Changes to the Model
The FileExplorer example does not currently make any
changes to the file system. Some useful extensions to it might allow
typing to on a filename to rename the file, or dragging a file to
a new location. After the changes are made to the underlying file
system, the JTree view needs to be notified. To do that you create
a TreeModelEvent object and then notify listeners,
passing the event object as data.
Once again, the easiest way to notify listeners is to use one of
the methods defined in the TreeModelSupport class,
fireTreeNodesChanged , fireTreeNodesInserted ,
fireTreeNodesRemoved , or fireTreeStructureChanged .
These methods invoke the appropriate method in each of the registered
listeners in order to notify them of the change, where the appropriate
method is one of the following:
void treeNodesChanged(TreeModelEvent e);
void treeNodesInserted(TreeModelEvent e);
void treeNodesRemoved(TreeModelEvent e);
void treeStructureChanged(TreeModelEvent e); |
The only thing left to understand is how to create a TreeModelEvent.
Depending on the type of notification you are making, you will use
one of the two types of TreeModelEvent constructors shown here:
public TreeModelEvent(Object source, Object[] path,
int[] childIndices, Object[] children)
public TreeModelEvent(Object source, TreePath path,
int[] childIndices, Object[] children)
---------------------------------------------------
public TreeModelEvent(Object source, Object[] path)
public TreeModelEvent(Object source, TreePath path) |
Note that there are essentially two kinds of constructors -- one
type specifies child nodes, the other doesn't. Within each type,
you have a choice of specifying either a TreePath or an array of
Objects to specify a target node. But the important distinction
is whether or not you specify children. The following list summarizes
the rules you need to know to create the right tree model event:
- When making a nodes-changed, nodes-inserted, or nodes-removed
notification you always specify children. So you use one
of the top two constructors.
- Only when you are making a structure-changed notification do
you use the simple constructor that does not specify children.
- In all cases, the path argument points to the parent
of the changes. If nodes were inserted, the path points to the
parent node under which the inserts took place. Similarly for
deletes or changes.
- Since children are specified as indexes under a single parent,
it follows that a single insert/delete/change notification only
covers one node's sublist. Changes to multiple lists require multiple
notifications.
- In order to notify a listener of multiple inserts and deletes,
or to identify changes at multiple levels in the tree, you use
treeStructureChanged() and use the simple, no-children
TreeModelEvent. In this case, the path argument specifies a node
in the tree that did not change, and which has all of the
other changes below it.
- When specifying changes, the indexes specify the list positions
which will be replaced with the specified children Objects, so
they become the new children of the parent node specified by path.
In this case, the order of the indexes is immaterial, but the
usual practice is to specify them from low to high.
- When specifying inserts, the indexes specify the list positions
in the final list, after the inserts have taken place.
The indexes must be specified from lowest to highest.
- When specifying deletes, the indexes specify the list positions
in the initial list, before the deletes have taken place.
Again, the indexes must be specified from lowest to highest.
(Tree model listeners like JTree process them from back to front,
so that one delete does not change the index position of another
deleted item.)
For more information on this subject, see the TreeModel
and TreeModelEvent
APIs. The API comments in these modules describe the process in
even greater detail.
Using
the Default Tree Model
Now that you have seen how to add a JTree view to an existing tree
structure, you may be interested in knowing how to use the default
tree model to create a new tree structure. The remainder of this
write-up discusses that process.
Unfortunately, although JTree creates a default tree model when
you use the null constructor JTree() , its not so easy
to add nodes to that model or manipulate it in other ways. To do
so, you first obtain the default model currently in use by coding:
DefaultTreeModel t = (DefaultTreeModel) myTree.getTreeModel();
The cast from the TreeModel returned by getTreeModel()
to a DefaultTreeModel succeeds as long as the JTree
was created with the null constructor or with any of the constructors
that specify an Object value, an array of Object s,
a TreeNode, or a Hashtable . Each of those
constructors creates an instance of DefaultTreeModel
wrapped around the specified object(s). The cast may fail, however,
if the JTree(TreeModel) constructor was used to create
a JTree with something other than the default tree
model..
Once you have a DefaultTreeModel object, you can use the following
TreeModel methods to access specific data values:
public Object getRoot();
public int getChildCount(Object parent);
public Object getChild(Object parent, int index);
public int getIndexOfChild(Object parent, Object child); |
All of these methods return data values, however. You want
to add new nodes and do other structure maipulations. There are
basically two kinds of things you might want to do. You might want
to add nodes to an otherwise static tree, building it one time in
order to display it, or you might want to do ongoing modifications
to the tree structure dynamically. Those two cases are discussed
below.
Adding Nodes to a Static Tree
Its fairly easy to create a static tree for JTree to display. To
do that, you create a tree structure using DefaultMutableTreeNode
objects and then pass the root of that tree to a JTree constructor.
Here is how the SwingSet demo program builds up a tree structure
by creating multiple DefaultMutableTreeNode object:s
and linking them together:
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Music");
DefaultMutableTreeNode category;
DefaultMutableTreeNode composer;
DefaultMutableTreeNode style;
DefaultMutableTreeNode album;
// Classical
category = new DefaultMutableTreeNode("Classical");
top.add(category);
// Beethoven
category.add(composer = new DefaultMutableTreeNode("Beethoven"));
composer.add(style = new DefaultMutableTreeNode("Concertos"));
style.add(new DefaultMutableTreeNode("No. 1 - C Major"));
...
composer.add(style = new DefaultMutableTreeNode("Quartets"));
style.add(new DefaultMutableTreeNode("Six String Quartets"));
...
JTree tree = new JTree(root); |
Note that object was needed for each level of the tree (category,
composer, and so on) so that nodes could be added to the list created
at that level. For example, the line
category.add(composer = new DefaultMutableTreeNode("Beethoven"));
adds a new composer object under the current category and the same
time maintains a reference to the composer object so that nodes
can be added under it. This is a good model to follow to
create and display a simple tree structure.
Dynamically Modifying a Tree
The add() method in the DefaultMutableTreeNode
class is good for appending items to the end of a list. This class
defines many other useful operations, including:
getParent() insert(node, index)
getNextSibling() removeFromParent()
getPreviousSibling() removeAllChildren()
getFirstChild() removeChild(index)
getChildAfter(node) removeChild(node) |
The get-methods in this list all return DefaultMutableTreeNode
objects. So once you have one, you're golden. The trick, though,
is to get the first DefaultMutableTreeNode . The answer
lies in knowing that a DefaultTreeModel created by
the zero-argument JTree() constructor is, in fact, composed
of DefaultMutableTreeNode objects.
You can get the root node from a DefaultTreeModel ,
t , using:
DefaultMutableTreeNode root =
(DefaultMutableTreeNode) t.getRoot();
Once again you must cast the result, since getRoot()
returns an Object (which happens to be stored in the
tree model as a TreeNode). But since that object is really a DefaultMutableTreeNode ,
the cast succeeds.
NOTE: The cast works as long as you are using a JTree
that was created with the DefaultTreeModel . If the
JTree was creating using the JTree(TreeModel)
constructor and some class that does not store DefaultMutableTreeNode
objects, the cast will fail.
However, when you make a change using a DefaultMutableTreeNode ,
you also need to inform the DefaultTreeModel that it
has changed! To that, you use the following DefaultTreeModel
methods:
reload()
nodesWereInserted()
nodesWereRemoved()
nodesChanged()
nodeStructureChanged() |
Since DefaultMutableTreeNode objects implement swing.tree.MutableTreeNode ,
you can avoid the two-step process of making changes and
notifying the model of them by using the following methods, which
make changes directly to the DefaultTreeModel :
public void insertNodeInto(MutableTreeNode newChild,
MutableTreeNode parent, int index){
public void removeNodeFromParent(MutableTreeNode node) {
To do anything interactive, you will need to intercept user events
and make changes directed by the user. To get the DefaultMutableTreeNode
associated with a given mouse click you will need to use the JTree
method getPathforLocation() or getClosestPathForLocation() ,
either of which returns a TreePath object. The TreePath
objects defined by the DefaultTreeModel consist of
an array of DefaultMutableTreeNode objects, where the
first object is the root, and the last is the target node. To get
the TreeNode object for the target node, you need code
like this:
TreePath p = JTree.getPathForLocation(x,y);
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) p.getLastPathComponent();
This code gets the tree path object for a pair of x,y coordinates.
It then gets the last element in that path and casts it to a DefaultMutableTreeNode ,
which you can then use for structure manipulations. Again, remember
to inform the model if you make changes directly from the node!
Summary
If you have an existing tree structure, it is easier to attach
a JTree view to it than it use to construct a JTree and use its
default tree model. When you are attaching to an existing tree structure,
you don't have to worry about TreeNode , MutableTreeNode ,
or DefaultMutableTreeNode objects. Instead, you can
ignore all that and concentrate on the data objects in your structure.
So it's easy to create a static tree, and it's easy to add a JTree
view to an existing tree. When you want to create a default tree
and manipulate it, however, the process can be tricky. So be careful.
|


The concept is simple. Use progressive enhancement techniques to allow the page to operate as a rich web application when JavaScript is available, render real markup on the page and keep the URL in sync with your content.
The first step is to render the markup to the page that is appropriate to the given the URL and it's parameters. This could be the full markup of the content that can or will be loaded into the page, or it could be a snapshot of the content. The key here is to have markup rendered in the page that is available for a search engine bot to index.
This works in conjunction with the need to keep the URL updated. This way should you request a page that you navigated to while working with the SPA, the markup for the specific page is rendered upon the first request.
Once the content is loaded on to the page, then you want to be able to take control of how content is loaded in the application. By taking control of the clicks you can stop the page from navigating to the selected page and instead make an Ajax request to get the partial page in order to render in the browser.
Once the content is loaded on to the page, then you want to be able to take control of how content is loaded in the application. By taking control of the clicks/taps you can stop the page from making a full request to the selected page and instead make an Ajax request to get the partial page in order to render in the browser.
Whether you are using the hash or history strategy to keep the URL updated, you must make some sort of change to the URL.
Once you have effectively "navigated" to a new page by getting the new markup and updating the URL, then you need to finalize the work by updating the page title and handling back and forward button actions to make sure the page is always in sync with the URL.


format
alpha: [[alpha]]
red: [[r]]
green: [[g]]
blue: [[b]]
hue: [[h]]
saturation: [[s]]
lightness: [[l]]
Result:


public static final class R.string
extends java.lang.Object
| Constructor and Description |
|---|
string() |
public static final int abc_action_bar_home_description
public static final int abc_action_bar_home_description_format
public static final int abc_action_bar_home_subtitle_description_format
public static final int abc_action_bar_up_description
public static final int abc_action_menu_overflow_description
public static final int abc_action_mode_done
public static final int abc_activity_chooser_view_see_all
public static final int abc_activitychooserview_choose_application
public static final int abc_capital_off
public static final int abc_capital_on
public static final int abc_font_family_body_1_material
public static final int abc_font_family_body_2_material
public static final int abc_font_family_button_material
public static final int abc_font_family_caption_material
public static final int abc_font_family_display_1_material
public static final int abc_font_family_display_2_material
public static final int abc_font_family_display_3_material
public static final int abc_font_family_display_4_material
public static final int abc_font_family_headline_material
public static final int abc_font_family_menu_material
public static final int abc_font_family_subhead_material
public static final int abc_font_family_title_material
public static final int abc_search_hint
public static final int abc_searchview_description_clear
public static final int abc_searchview_description_query
public static final int abc_searchview_description_search
public static final int abc_searchview_description_submit
public static final int abc_searchview_description_voice
public static final int abc_shareactionprovider_share_with
public static final int abc_shareactionprovider_share_with_application
public static final int abc_toolbar_collapse_description
public static final int accept
public static final int action_settings
public static final int add_button
public static final int app_name
public static final int appbar_scrolling_view_behavior
public static final int bid
public static final int bid_amount
public static final int bid_description
public static final int bid_title
public static final int bottom_sheet_behavior
public static final int cancel
public static final int cancel_action
public static final int cast_ad_label
public static final int cast_casting_to_device
public static final int cast_closed_captions
public static final int cast_closed_captions_unavailable
public static final int cast_connecting_to_device
public static final int cast_disconnect
public static final int cast_expanded_controller_ad_image_description
public static final int cast_expanded_controller_ad_in_progress
public static final int cast_expanded_controller_background_image
public static final int cast_expanded_controller_live_stream_indicator
public static final int cast_expanded_controller_loading
public static final int cast_expanded_controller_skip_ad_label
public static final int cast_forward
public static final int cast_forward_10
public static final int cast_forward_30
public static final int cast_intro_overlay_button_text
public static final int cast_invalid_stream_duration_text
public static final int cast_invalid_stream_position_text
public static final int cast_mute
public static final int cast_notification_connected_message
public static final int cast_notification_connecting_message
public static final int cast_notification_disconnect
public static final int cast_pause
public static final int cast_play
public static final int cast_rewind
public static final int cast_rewind_10
public static final int cast_rewind_30
public static final int cast_seek_bar
public static final int cast_skip_next
public static final int cast_skip_prev
public static final int cast_stop
public static final int cast_stop_live_stream
public static final int cast_tracks_chooser_dialog_audio
public static final int cast_tracks_chooser_dialog_cancel
public static final int cast_tracks_chooser_dialog_closed_captions
public static final int cast_tracks_chooser_dialog_default_track_name
public static final int cast_tracks_chooser_dialog_none
public static final int cast_tracks_chooser_dialog_ok
public static final int cast_tracks_chooser_dialog_subtitles
public static final int cast_unmute
public static final int character_counter_pattern
public static final int common_google_play_services_enable_button
public static final int common_google_play_services_enable_text
public static final int common_google_play_services_enable_title
public static final int common_google_play_services_install_button
public static final int common_google_play_services_install_text
public static final int common_google_play_services_install_title
public static final int common_google_play_services_notification_ticker
public static final int common_google_play_services_unknown_issue
public static final int common_google_play_services_unsupported_text
public static final int common_google_play_services_update_button
public static final int common_google_play_services_update_text
public static final int common_google_play_services_update_title
public static final int common_google_play_services_updating_text
public static final int common_google_play_services_wear_update_text
public static final int common_open_on_phone
public static final int common_signin_button_text
public static final int common_signin_button_text_long
public static final int create_account
public static final int create_account_title
public static final int decline
public static final int dummy_button
public static final int dummy_content
public static final int email
public static final int fcm_fallback_notification_channel_label
public static final int first_name
public static final int gcm_fallback_notification_channel_label
public static final int google_maps_key
public static final int last_name
public static final int mr_button_content_description
public static final int mr_cast_button_connected
public static final int mr_cast_button_connecting
public static final int mr_cast_button_disconnected
public static final int mr_chooser_searching
public static final int mr_chooser_title
public static final int mr_controller_album_art
public static final int mr_controller_casting_screen
public static final int mr_controller_close_description
public static final int mr_controller_collapse_group
public static final int mr_controller_disconnect
public static final int mr_controller_expand_group
public static final int mr_controller_no_info_available
public static final int mr_controller_no_media_selected
public static final int mr_controller_pause
public static final int mr_controller_play
public static final int mr_controller_stop
public static final int mr_controller_stop_casting
public static final int mr_controller_volume_slider
public static final int mr_system_route_name
public static final int mr_user_route_category_name
public static final int navigation_drawer_close
public static final int navigation_drawer_open
public static final int ok
public static final int password_toggle_content_description
public static final int path_password_eye
public static final int path_password_eye_mask_strike_through
public static final int path_password_eye_mask_visible
public static final int path_password_strike_through
public static final int phone_number
public static final int place_autocomplete_clear_button
public static final int place_autocomplete_search_hint
public static final int s1
public static final int s2
public static final int s3
public static final int s4
public static final int s5
public static final int s6
public static final int search
public static final int search_menu_title
public static final int signin_Button
public static final int signup_button
public static final int status_bar_notification_info_overflow
public static final int tagmanager_preview_dialog_button
public static final int tagmanager_preview_dialog_message
public static final int tagmanager_preview_dialog_title
public static final int task_image
public static final int taskstatus
public static final int title_activity_add_edit_real
public static final int title_activity_fullscreen_image
public static final int title_activity_list_requested_tasks
public static final int title_activity_map
public static final int username
public static final int wallet_buy_button_place_holder


| 1 | /* =========================================================== | |
| 2 | * JFreeChart : a free chart library for the Java(tm) platform | |
| 3 | * =========================================================== | |
| 4 | * | |
| 5 | * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors. | |
| 6 | * | |
| 7 | * Project Info: http://www.jfree.org/jfreechart/index.html | |
| 8 | * | |
| 9 | * This library is free software; you can redistribute it and/or modify it | |
| 10 | * under the terms of the GNU Lesser General Public License as published by | |
| 11 | * the Free Software Foundation; either version 2.1 of the License, or | |
| 12 | * (at your option) any later version. | |
| 13 | * | |
| 14 | * This library is distributed in the hope that it will be useful, but | |
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
| 16 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public | |
| 17 | * License for more details. | |
| 18 | * | |
| 19 | * You should have received a copy of the GNU Lesser General Public | |
| 20 | * License along with this library; if not, write to the Free Software | |
| 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, | |
| 22 | * USA. | |
| 23 | * | |
| 24 | * [Java is a trademark or registered trademark of Sun Microsystems, Inc. | |
| 25 | * in the United States and other countries.] | |
| 26 | * | |
| 27 | * ------------------- | |
| 28 | * MarkerAxisBand.java | |
| 29 | * ------------------- | |
| 30 | * (C) Copyright 2000-2008, by Object Refinery Limited. | |
| 31 | * | |
| 32 | * Original Author: David Gilbert (for Object Refinery Limited); | |
| 33 | * Contributor(s): -; | |
| 34 | * | |
| 35 | * Changes (from 03-Sep-2002) | |
| 36 | * -------------------------- | |
| 37 | * 03-Sep-2002 : Updated Javadoc comments (DG); | |
| 38 | * 01-Oct-2002 : Fixed errors reported by Checkstyle (DG); | |
| 39 | * 08-Nov-2002 : Moved to new package com.jrefinery.chart.axis (DG); | |
| 40 | * 26-Mar-2003 : Implemented Serializable (DG); | |
| 41 | * 13-May-2003 : Renamed HorizontalMarkerAxisBand --> MarkerAxisBand (DG); | |
| 42 | * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); | |
| 43 | * 21-Jan-2004 : Update for renamed method in ValueAxis (DG); | |
| 44 | * 07-Apr-2004 : Changed text bounds calculation (DG); | |
| 45 | * 20-Jun-2007 : Removed JCommon dependencies (DG); | |
| 46 | * | |
| 47 | */ | |
| 48 | ||
| 49 | package org.jfree.chart.axis; | |
| 50 | ||
| 51 | import java.awt.AlphaComposite; | |
| 52 | import java.awt.Color; | |
| 53 | import java.awt.Composite; | |
| 54 | import java.awt.Font; | |
| 55 | import java.awt.FontMetrics; | |
| 56 | import java.awt.Graphics2D; | |
| 57 | import java.awt.font.LineMetrics; | |
| 58 | import java.awt.geom.Rectangle2D; | |
| 59 | import java.io.Serializable; | |
| 60 | import java.util.Iterator; | |
| 61 | import java.util.List; | |
| 62 | ||
| 63 | import org.jfree.chart.plot.IntervalMarker; | |
| 64 | import org.jfree.chart.text.TextUtilities; | |
| 65 | import org.jfree.chart.util.ObjectUtilities; | |
| 66 | import org.jfree.chart.util.RectangleEdge; | |
| 67 | ||
| 68 | /** | |
| 69 | * A band that can be added to a number axis to display regions. | |
| 70 | */ | |
| 71 | public class MarkerAxisBand implements Serializable { | |
| 72 | ||
| 73 | /** For serialization. */ | |
| 74 | private static final long serialVersionUID = -1729482413886398919L; | |
| 75 | ||
| 76 | /** The axis that the band belongs to. */ | |
| 77 | private NumberAxis axis; | |
| 78 | ||
| 79 | /** The top outer gap. */ | |
| 80 | private double topOuterGap; | |
| 81 | ||
| 82 | /** The top inner gap. */ | |
| 83 | private double topInnerGap; | |
| 84 | ||
| 85 | /** The bottom outer gap. */ | |
| 86 | private double bottomOuterGap; | |
| 87 | ||
| 88 | /** The bottom inner gap. */ | |
| 89 | private double bottomInnerGap; | |
| 90 | ||
| 91 | /** The font. */ | |
| 92 | private Font font; | |
| 93 | ||
| 94 | /** Storage for the markers. */ | |
| 95 | private List markers; | |
| 96 | ||
| 97 | /** | |
| 98 | * Constructs a new axis band. | |
| 99 | * | |
| 100 | * @param axis the owner. | |
| 101 | * @param topOuterGap the top outer gap. | |
| 102 | * @param topInnerGap the top inner gap. | |
| 103 | * @param bottomOuterGap the bottom outer gap. | |
| 104 | * @param bottomInnerGap the bottom inner gap. | |
| 105 | * @param font the font. | |
| 106 | */ | |
| 107 | public MarkerAxisBand(NumberAxis axis, | |
| 108 | double topOuterGap, double topInnerGap, | |
| 109 | double bottomOuterGap, double bottomInnerGap, | |
| 110 | Font font) { | |
| 111 | this.axis = axis; | |
| 112 | this.topOuterGap = topOuterGap; | |
| 113 | this.topInnerGap = topInnerGap; | |
| 114 | this.bottomOuterGap = bottomOuterGap; | |
| 115 | this.bottomInnerGap = bottomInnerGap; | |
| 116 | this.font = font; | |
| 117 | this.markers = new java.util.ArrayList(); | |
| 118 | } | |
| 119 | ||
| 120 | /** | |
| 121 | * Adds a marker to the band. | |
| 122 | * | |
| 123 | * @param marker the marker. | |
| 124 | */ | |
| 125 | public void addMarker(IntervalMarker marker) { | |
| 126 | this.markers.add(marker); | |
| 127 | } | |
| 128 | ||
| 129 | /** | |
| 130 | * Returns the height of the band. | |
| 131 | * | |
| 132 | * @param g2 the graphics device. | |
| 133 | * | |
| 134 | * @return The height of the band. | |
| 135 | */ | |
| 136 | public double getHeight(Graphics2D g2) { | |
| 137 | ||
| 138 | double result = 0.0; | |
| 139 |
2
1. getHeight : changed conditional boundary → NO_COVERAGE 2. getHeight : negated conditional → NO_COVERAGE |
if (this.markers.size() > 0) { |
| 140 | LineMetrics metrics = this.font.getLineMetrics( | |
| 141 | "123g", g2.getFontRenderContext() | |
| 142 | ); | |
| 143 |
4
1. getHeight : Replaced double addition with subtraction → NO_COVERAGE 2. getHeight : Replaced double addition with subtraction → NO_COVERAGE 3. getHeight : Replaced double addition with subtraction → NO_COVERAGE 4. getHeight : Replaced double addition with subtraction → NO_COVERAGE |
result = this.topOuterGap + this.topInnerGap + metrics.getHeight() |
| 144 | + this.bottomInnerGap + this.bottomOuterGap; | |
| 145 | } | |
| 146 |
1
1. getHeight : replaced return of double value with -(x + 1) for org/jfree/chart/axis/MarkerAxisBand::getHeight → NO_COVERAGE |
return result; |
| 147 | ||
| 148 | } | |
| 149 | ||
| 150 | /** | |
| 151 | * A utility method that draws a string inside a rectangle. | |
| 152 | * | |
| 153 | * @param g2 the graphics device. | |
| 154 | * @param bounds the rectangle. | |
| 155 | * @param font the font. | |
| 156 | * @param text the text. | |
| 157 | */ | |
| 158 | private void drawStringInRect(Graphics2D g2, Rectangle2D bounds, Font font, | |
| 159 | String text) { | |
| 160 | ||
| 161 |
1
1. drawStringInRect : removed call to java/awt/Graphics2D::setFont → NO_COVERAGE |
g2.setFont(font); |
| 162 | FontMetrics fm = g2.getFontMetrics(font); | |
| 163 | Rectangle2D r = TextUtilities.getTextBounds(text, g2, fm); | |
| 164 | double x = bounds.getX(); | |
| 165 |
2
1. drawStringInRect : changed conditional boundary → NO_COVERAGE 2. drawStringInRect : negated conditional → NO_COVERAGE |
if (r.getWidth() < bounds.getWidth()) { |
| 166 |
3
1. drawStringInRect : Replaced double subtraction with addition → NO_COVERAGE 2. drawStringInRect : Replaced double division with multiplication → NO_COVERAGE 3. drawStringInRect : Replaced double addition with subtraction → NO_COVERAGE |
x = x + (bounds.getWidth() - r.getWidth()) / 2; |
| 167 | } | |
| 168 | LineMetrics metrics = font.getLineMetrics( | |
| 169 | text, g2.getFontRenderContext() | |
| 170 | ); | |
| 171 |
3
1. drawStringInRect : Replaced double subtraction with addition → NO_COVERAGE 2. drawStringInRect : Replaced double subtraction with addition → NO_COVERAGE 3. drawStringInRect : removed call to java/awt/Graphics2D::drawString → NO_COVERAGE |
g2.drawString( |
| 172 | text, (float) x, (float) (bounds.getMaxY() | |
| 173 | - this.bottomInnerGap - metrics.getDescent()) | |
| 174 | ); | |
| 175 | } | |
| 176 | ||
| 177 | /** | |
| 178 | * Draws the band. | |
| 179 | * | |
| 180 | * @param g2 the graphics device. | |
| 181 | * @param plotArea the plot area. | |
| 182 | * @param dataArea the data area. | |
| 183 | * @param x the x-coordinate. | |
| 184 | * @param y the y-coordinate. | |
| 185 | */ | |
| 186 | public void draw(Graphics2D g2, Rectangle2D plotArea, Rectangle2D dataArea, | |
| 187 | double x, double y) { | |
| 188 | ||
| 189 | double h = getHeight(g2); | |
| 190 | Iterator iterator = this.markers.iterator(); | |
| 191 |
1
1. draw : negated conditional → NO_COVERAGE |
while (iterator.hasNext()) { |
| 192 | IntervalMarker marker = (IntervalMarker) iterator.next(); | |
| 193 | double start = Math.max( | |
| 194 | marker.getStartValue(), this.axis.getRange().getLowerBound() | |
| 195 | ); | |
| 196 | double end = Math.min( | |
| 197 | marker.getEndValue(), this.axis.getRange().getUpperBound() | |
| 198 | ); | |
| 199 | double s = this.axis.valueToJava2D( | |
| 200 | start, dataArea, RectangleEdge.BOTTOM | |
| 201 | ); | |
| 202 | double e = this.axis.valueToJava2D( | |
| 203 | end, dataArea, RectangleEdge.BOTTOM | |
| 204 | ); | |
| 205 |
4
1. draw : Replaced double addition with subtraction → NO_COVERAGE 2. draw : Replaced double subtraction with addition → NO_COVERAGE 3. draw : Replaced double subtraction with addition → NO_COVERAGE 4. draw : Replaced double subtraction with addition → NO_COVERAGE |
Rectangle2D r = new Rectangle2D.Double( |
| 206 | s, y + this.topOuterGap, e - s, | |
| 207 | h - this.topOuterGap - this.bottomOuterGap | |
| 208 | ); | |
| 209 | ||
| 210 | Composite originalComposite = g2.getComposite(); | |
| 211 |
1
1. draw : removed call to java/awt/Graphics2D::setComposite → NO_COVERAGE |
g2.setComposite(AlphaComposite.getInstance( |
| 212 | AlphaComposite.SRC_OVER, marker.getAlpha()) | |
| 213 | ); | |
| 214 |
1
1. draw : removed call to java/awt/Graphics2D::setPaint → NO_COVERAGE |
g2.setPaint(marker.getPaint()); |
| 215 |
1
1. draw : removed call to java/awt/Graphics2D::fill → NO_COVERAGE |
g2.fill(r); |
| 216 |
1
1. draw : removed call to java/awt/Graphics2D::setPaint → NO_COVERAGE |
g2.setPaint(marker.getOutlinePaint()); |
| 217 |
1
1. draw : removed call to java/awt/Graphics2D::draw → NO_COVERAGE |
g2.draw(r); |
| 218 |
1
1. draw : removed call to java/awt/Graphics2D::setComposite → NO_COVERAGE |
g2.setComposite(originalComposite); |
| 219 | ||
| 220 |
1
1. draw : removed call to java/awt/Graphics2D::setPaint → NO_COVERAGE |
g2.setPaint(Color.black); |
| 221 |
1
1. draw : removed call to org/jfree/chart/axis/MarkerAxisBand::drawStringInRect → NO_COVERAGE |
drawStringInRect(g2, r, this.font, marker.getLabel()); |
| 222 | } | |
| 223 | ||
| 224 | } | |
| 225 | ||
| 226 | /** | |
| 227 | * Tests this axis for equality with another object. Note that the axis | |
| 228 | * that the band belongs to is ignored in the test. | |
| 229 | * | |
| 230 | * @param obj the object (null permitted). | |
| 231 | * | |
| 232 | * @return true or false. | |
| 233 | */ | |
| 234 | public boolean equals(Object obj) { | |
| 235 |
1
1. equals : negated conditional → KILLED |
if (obj == this) { |
| 236 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return true; |
| 237 | } | |
| 238 |
1
1. equals : negated conditional → KILLED |
if (!(obj instanceof MarkerAxisBand)) { |
| 239 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return false; |
| 240 | } | |
| 241 | MarkerAxisBand that = (MarkerAxisBand) obj; | |
| 242 |
1
1. equals : negated conditional → KILLED |
if (this.topOuterGap != that.topOuterGap) { |
| 243 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 244 | } | |
| 245 |
1
1. equals : negated conditional → KILLED |
if (this.topInnerGap != that.topInnerGap) { |
| 246 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 247 | } | |
| 248 |
1
1. equals : negated conditional → KILLED |
if (this.bottomInnerGap != that.bottomInnerGap) { |
| 249 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 250 | } | |
| 251 |
1
1. equals : negated conditional → KILLED |
if (this.bottomOuterGap != that.bottomOuterGap) { |
| 252 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 253 | } | |
| 254 |
1
1. equals : negated conditional → KILLED |
if (!ObjectUtilities.equal(this.font, that.font)) { |
| 255 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 256 | } | |
| 257 |
1
1. equals : negated conditional → KILLED |
if (!ObjectUtilities.equal(this.markers, that.markers)) { |
| 258 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return false; |
| 259 | } | |
| 260 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return true; |
| 261 | } | |
| 262 | ||
| 263 | /** | |
| 264 | * Returns a hash code for the object. | |
| 265 | * | |
| 266 | * @return A hash code. | |
| 267 | */ | |
| 268 | public int hashCode() { | |
| 269 | int result = 37; | |
| 270 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 19 * result + this.font.hashCode(); |
| 271 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 19 * result + this.markers.hashCode(); |
| 272 |
1
1. hashCode : replaced return of integer sized value with (x == 0 ? 1 : 0) → SURVIVED |
return result; |
| 273 | } | |
| 274 | ||
| 275 | } | |
Mutations | ||
| 139 |
1.1 2.2 |
|
| 143 |
1.1 2.2 3.3 4.4 |
|
| 146 |
1.1 |
|
| 161 |
1.1 |
|
| 165 |
1.1 2.2 |
|
| 166 |
1.1 2.2 3.3 |
|
| 171 |
1.1 2.2 3.3 |
|
| 191 |
1.1 |
|
| 205 |
1.1 2.2 3.3 4.4 |
|
| 211 |
1.1 |
|
| 214 |
1.1 |
|
| 215 |
1.1 |
|
| 216 |
1.1 |
|
| 217 |
1.1 |
|
| 218 |
1.1 |
|
| 220 |
1.1 |
|
| 221 |
1.1 |
|
| 235 |
1.1 |
|
| 236 |
1.1 |
|
| 238 |
1.1 |
|
| 239 |
1.1 |
|
| 242 |
1.1 |
|
| 243 |
1.1 |
|
| 245 |
1.1 |
|
| 246 |
1.1 |
|
| 248 |
1.1 |
|
| 249 |
1.1 |
|
| 251 |
1.1 |
|
| 252 |
1.1 |
|
| 254 |
1.1 |
|
| 255 |
1.1 |
|
| 257 |
1.1 |
|
| 258 |
1.1 |
|
| 260 |
1.1 |
|
| 270 |
1.1 2.2 |
|
| 271 |
1.1 2.2 |
|
| 272 |
1.1 |


Slider
Also try using the arrow keys, buttons, or clicking on the progress bar to move the slider.
initial value=10, min=0, max=100, pageIncrement=100, onChange event triggers input box value change immediately
Slider1 Value:
initial value=10, min=0, max=100, onChange event triggers input box value change when you mouse up or tab away
Slider2 Value:
Fancy HTML labels:
Standalone ruler example:
horizontal, with buttons, disabled (to show styling):


FAMILY RIDDLE
Scots nephew of £57.9m National Lottery winner Fred Higgins says uncle is blanking his plea to find his missing mum
by Kevin DuguidA LONG-LOST nephew of £58million lottery jackpot winner Fred Higgins claims his uncle is blanking his plea to find out what happened to his missing mum.
Ian Cooke’s Scots mother Alexandrina — Fred’s eldest sister — disappeared in 1964 when he was aged six and he was later told she had died.
But Ian, 61, uncovered evidence she might be alive during a probe into abuse he suffered as a child in a care home 50 years ago.
Fred, 69, of Laurencekirk, Aberdeenshire, who scooped the gigantic EuroMillions prize with wife Lesley, 59, last August, has so far not stepped in to help him.
Ian fears his uncle thinks he’s chasing a handout — but insists he only discovered his rich relative while looking into his family history.
He said: “I’m not a gold digger. I just want to know where my mum is. The truth is out there and they could help me.
“My search predates their win and I can prove it. I also have compensation from the abuse I suffered so I don’t need their money.
“My mum would be 83 — there’s a chance she could be alive so every second is important to me.”
Records reveal Alexandrina was born out of wedlock with the surname Ingram to parents Isaac Higgins and Alexandrina Ingram in June 1936. Her parents wed in Oldmeldrum, Aberdeenshire in 1937.
Her little brother Fred was born 14 years later in August 1950. And she has a further four younger Higgins siblings — Justin, Barbara Henry and John.
Alexandrina moved to England before marrying husband Colin in Worksop, Notts, in December 1956. Ian was born two years later.
But his mum fled the family home in 1964 and Ian claims he is aware she tried and failed to win custody of him two years later.
Then in 1969, lorry driver Colin died aged 36 and Ian went into care at Aston Hall home in Derbyshire. He says he was assaulted and illegally drugged three times.
When he joined the Navy in 1970 he was dealt another blow when the council told him his mother was dead.
But a public inquiry into abuse at the care home placed a question mark over whether that was true — and unexpectedly uncovered Ian’s link to multi-millionaire Fred.
Ian said: “As part of the inquiry my local MP John Mann requested my care records to find out why I had gone to Aston Hall.
“My discharge notes said both my parents were dead.
The pair realised Alexandrina had never officially been declared dead, as she was missing.
And the search into his background threw up an unexpected twist in April.
Ian continued: “John Mann set up a genealogy team, and they found out Fred Higgins was my uncle.
“He tried to get hold of Fred but I had been looking before he won the lottery.” Disabled abuse survivor Ian, who is happy to be identified, does not know why his lost family won’t speak to him.
He said: “I can’t understand why they aren’t interested in where their elder sister is. All I want to do is talk to one of the Higgins family — I’m not bothered which one. They have all blanked me.
“I have even offered to sign a disclaimer saying I don’t want any money. Camelot have refused to give me a number for them.
“Them winning the lottery is a nightmare for me. I just want to know my mum’s whereabouts or her grave so I can get closure.
Baron Mann wrote to Fred after making contact with Camelot in May. But he has not heard anything back from the lottery winner.
He said: “There’s no question on the authenticity of the case. My researchers looked at it in detail.
“There is a possibility that she [Alexandrina] is alive, and the more likely possibility that she might have had other children who would be alive. This pre-dates the announcement of them winning the lottery considerably.”
Baron Mann said he only discovered Ian was related to Fred in spring this year.
He said: “I was gobsmacked. It was me who put it together. I thought we’ve made the big breakthrough, now we have this remarkable problem to overcome.
“There’s no question about Mr Cooke’s motivations.
“I’ve written to Mr Higgins and asked if he has any photos, or if he has information that would help us. Someone will know something that might help us. It’s highly unlikely people know absolutely nothing.”
But the ex-Labour MP for Bassetlaw, who moved to the House of Lords last month, said he understands why Fred may be sceptical.
He said: “If I’d won that amount of money I would be dubious of someone saying ‘I’m your long lost relative from 60 years ago’.”
Baron Mann says there is no evidence Alexandrina is dead, despite documents showing the authorities thought she had passed away. One states Ian was taken into care in 1969 “when the one remaining parent had died”. A 1977 social services letter repeats the claim.
Baron Mann said: “He was led to believe his mother is dead. It’s clear it wasn’t true. She just couldn’t be found.”
We told in April how scammers are posing as Fred and Lesley Higgins to dupe victims by offering them a share of their jackpot.
The couple, who claimed their mega win in August 2018, said they were “horrified”. And in March we told how they planned to set up a charitable trust to help others.
A spokesman for the lotto winner said that the Higgins family did not want to comment. Nottinghamshire County Council was approached for a comment but did not reply.
DO you know Ian’s mum? Call us on 0141 420 5200 or email scoop@the-sun.co.uk.


Learn how to jungle efficiently and optimally: jungle routes, champion picks, win conditions and general tips. Great guide from a master tier player!.
Read MoreLaning phase will revolve around a few things. First, you should earn more gold by last-hitting using Parrrley. The gold advantage will help you get your power spike faster and help you upgrade your Cannon Barrage later on. You can also use Powder Keg to clear waves faster. The gold bonus also stacks up with The Keg if you last hit it suing Parrrley.
Read MoreThresh, given tanky runes and some AD damage is actually pretty strong early. His kit is already really good all you need to do is just make sure your team benefits from the items you get. For my Thresh build, It is crucial you get a Solari or a Frozen Heart.
Read More


Welcome to Meme Spam Trash Can's TTT2 server!
This is a work in progress, bear with us!
Rules
Usual TTT rules - don't RDM, don't ghost, don't ruin the fun
No racism/homophobia/transphobia, etc.
Don't mic spam
No NSFW sprays


Vote for your coin
Vote for your token to get listed in Atomic! Deposit AWC-BNB to the address below. Winners will be added every new release.
Vote for your token to get listed in Atomic! Deposit AWC-BNB to the address below. Winners will be added every new release.


Uses Frontier Bases Exporation and Robot Control, within a ROS(Robot Operating System) and C++ structure. Exporation is the act of moving through an environment, thus allowing building of a map of the environment which can be used for subsequent navigation.
This class, a3_help, uses the detection of frontiers, regions on the border between known free space ad unknown spafe. From any frontier, the robot can see into explore space and add the new observatons to it its map. By pursuing each frontier the robbot can build a map of every reachable location in its environment. This is done with ROS based OgMaps to represent the frontiers. A closed loop control stratery is used to move ther robot, using robot velocity and turn rate only.
Write a series of components using the ROS CBSE and object orientated paradims of C++ that will process data origiinating from a range of sensors on a simulated robot. Employ suitable nuumber of threads per component and data structures that enables time synchronisation and subsequently interrogation of data to allow simple actions of a robotic platform. Supply appropriate auto-generated documentation utilising inline source mark-up. Exploit unit test framework with test cases evaluating code.
Install ROS indigo, doxygen and ROS documention files in: http://wiki.ros.org/indigo/Installation/Ubuntu and http://wiki.ros.org/rosdoc_lite.
cd ~/catkin_ws rosdoc_lite src/a3_help.
rosrun a3_help sample
However ther other binary files this ROS package utilises, these are in: cd ~/catkin_ws; cd devel/lib/a3_help


Home
Add Auction
Create Auction
{{auction.title}}
Auction Title
Start Date
End Date
Description
Publish


Loading... (might take up to a few minutes for the first load)
GLOBAL CONFIG
Reset:
50
Enable/Disable mouseover popup:
20
Click:
Shift Click:
Regulator Panel
Regulator rank cutoff:
50
Gene Enrichment Panel
Please input your gene list: (comma/tab/space/newline delimited)
Expression Panel
Epigenomics Panel
Targets in node:
DataLink:
DataType:
bigWig
bigBed
bam
DataReference:
mm10
mm9
hg19
hg38
Proteomics Panel
Cell Types Panel
Path Function Panel
Style 1
Style 2
GO term rank cutoff:
5
Sankey TF rank cutoff:
10
Sankey miRNA rank cutoff:
5
Omnibus Panel
Manual
Manual
DOWNLOAD


Florida man arrested after woman's body found in trunk of his car, police say
by WFTS StaffST. PETERSBURG, Fla. — A man has been arrested in Florida after a woman's body was found in the trunk of his car, according to the St. Petersburg Police Department.
Police said detectives arrested Warren Brown, 57, for the murder of Sophie Solis at 7380 Organdy Dr. North on Saturday.
Friends concerned for her Solis' welfare reportedly found her body in the trunk of Brown's car in the driveway last week. She was found stabbed.
Police say Brown was arrested just days before on Nov. 9 for aggravated assault and domestic battery after he cut Solis with a knife. He bonded out of jail and she dropped the charges, according to police.
Detectives say they also found photos of the couple and bloody clothing in the trunk. When officers went inside the home, they say they found blood spatters on the ceiling of two rooms.
Later, Warren allegedly admitted to police that he stabbed Solis and placed her in the trunk of his car.
Police said the couple had a history of domestic violence issues.
This story was originally published by staff at WFTS.


| Old Projects | |||
| Team | Project | ||
|
Hasna, Laura Cosma, Anamaria |
Distributed scenegraph synchronization. Objects created in one scene graph should appear in the remote scences as well. The positions and orientations of the objects in the scengraphs should be synchronized as well. | ||
|
Nadas, Mihai Sabou, Ovidiu Ghita, Daniel |
Talking and gesticulating avatar. The avatar will present an object to the user through voice and gestures. The avatar's face will be animated to match the spoken words. The object presented by the avatar will be controlled by the user through an accelerometer. | ||
|
Larionescu, Andrei Vlad, Alexandra |
Bowling lane. The bowling ball should move with a speed proportional to the interaction with the throwing hand (virtual). The interaction between the ball and the pins should be realistical (use the ODE library for this) | ||
|
Cighi, Florin Maghear, Adrian Florin |
Distributed first-person shooter. Avatar exploring a virtual labirinth and shooting at each other. Collision detection with the labirinth walls and bullets will be performed. The simulation will run on at least two machines. | ||
|
Vleju, Boris Palermo, Mihai |
Interaction between a virtual human hand and a virtual ball. The hand and the ball will be locked in a virtual room. The ball will be placed initially on a virtual table and the task is to grab the ball and move it on a second virtual tabl ein the room. The ball should either deform accordingly when squeezed by the virtual hand or bounce of the floor if dropped. In the case of bouncing, the ball should also deform when touching the floor (simple scaling on one axis) | ||
|
Catana, Cristian Mates, Catalin |
Cars driving on un-even terrain. The application will generate a terrain surface automaticaly. The terrain will have hills and other smaller size deformations. Virtual cars will drive on this surface calculating automatically the altitude and orientation of the car. | ||
|
Popovici, Ciprian-Gabriel Rosa, Marius |
Cars driving on a F1-type circuit The cars will be controlled simultaneously and independently by multiple players. Collisions with other cars or circuit walls will be calculated and the cars will be positioned accordingly (use ODE for this). | ||
| Lototchi, Leon | Car driving on a track. The car wil lbe controlled by a game pad. The car movement will be controlled by changing the acceleration (implement physical laws). Upon colliding with obstacles on the track the car will react according to the laws of physics (use ODE or implement your own simpler approach). | ||
| Berciu, Radu | Virtual snooker. Interactions between balls should be calculated according to the laws of physics. The environment should look realistical. | ||
| Stanciu, Andreea | Virtual lottery. Several balls in in a large transparent sphere move under the effect of air flow.  The robots will be controlled independently by two users. The interactions between the robots will be controlled using the ODE library. | ||
|
Calugaru, Cristian Georgiu, Ioana |
Ping-pong game. The paddles will controleld independently by two different users. The ball will move and bounce off the paddles or the table or the net according to the laws of physics. The simulation will detect when the ball falls off the table. (Try ODE for this) | ||
| Crisan, Ana-Maria | Space Clash. A spaceship hovers around a planet (does not move away from it, only orbits it) and has to protect it from alien ships which come towards the planet. The ship will be destroyed if it comes in contact with an alien ship and the game will end when a predetermined number of alien ships have crashed into the planet. The spaceship is controlled by the user with the mouse and it is able to shoot at alien ship, which will be destroyed when they intercept a bullet. The user wins the game when all alien ships are destroyed (their number is decided when the game starts). | ||
| Jibotean, Sorin | Flight Simulator. Airplane flies over a terrain with buildings. The ground scrolls underneath the airplane to create the flying sensation. The airplane can shoot bullets. | ||
| Bologa, Bogdana | Labyrinth. Move a ball in a labyrinth with holes in the ground by titlting the ground surface. The game is over when the ball reaches the labyrinth exit or when it falls through a hole. | ||
|
Pascalau, Adina Fedorovici, Octavian Chirila, Andrei |
Count sheep 'till you sleep. Each sheep will run to the fence under the effect of a certain acceleration and will jump at a certain moment. If the sheep is too low it will bounce off the fence. The sheep should be enclosed with a round fence, and several sheep will run to the fence on vearious directions. Sheep colliding with each other will bounce. The sheep will have to make the approriate "sheep-sounds". The jumping and landing should also be accompanied by sounds. | ||
|
Plesa, Adrian Calin Rutas, Cristian |
Barber-shop. Avatar moving in a room, exploring different objects in the room and being able to get a haircut when approaching a chair. Upon approaching, the avatar will be automatically brought to the places of interest by moving it on a smooth path. | ||
|
Salanta, Denis Moldovan, Mihai |
Solar System. Abstract solar system throgh which the use can navigate with a space ship. The spaceship controlls will eb visible in the simulation window.  Planet explosion will be modeled realistically using particle fields. | ||
| Padurean, Gabriel | Shooting range. A long room with multiple targets and other obstacles. Using a gun the user must shoot the targets in the room. There will be collision detection between the bullets and the targets. There will be smoke comming from the gun after shooting. | ||
|
Guttman, Artur Lascu, Silviu |
Canon shooting at wall of bricks. The ball will bounce of the bricks and will move according to the laws of physics. If the ball bounces back and hits the cannon the game is over. The simulation will include 3D sounds. | ||
|
Varga, Dezso Vinitor, Csaba |
Penalty shoot out. A virtual player shoots a ball. The ball can miss the target, bounce off the bar or move the net. The net should move realistically. The ball should bounce according to the laws of physics. | ||
| Miron, Alina Dana | Virtual rain. Simulate rain drops falling in the wind. The direction and velocity of the wind will be controllable. | ||
|
Ciobanu, Alexandru Ardelean, Alexandra |
3D Arcade Volleyball. | ||
|
Abrudan, Alina Avram Mircea Daniel |
Virtual Volleyball. | ||
| Goron, Camelia | Exploring a labirinth. | ||
|
Rusu, Adrian Stetcu, Adrian Urda-Cimpean, Andrada |
Island walk. Avatar moving with realistic gait on an island surrounded by water. Interaction with the environment and with the water. | ||
| Trifoi, Daniel Liviu | Blocksters game. |


Key facts >Ebola virus disease (EVD), formerly known as Ebola haemorrhagic fever, is a severe, often fatal illness in humans. >The virus is transmitted to people from wild animals and spreads in the human population through human-to-human transmission. >The average EVD case fatality rate is around 50%. Case fatality rates have varied from 25% to 90% in past outbreaks. >The first EVD outbreaks occurred in remote villages in Central Africa, near tropical rainforests, but the most recent outbreak in west Africa has involved major urban as well as rural areas. >Community engagement is key to successfully controlling outbreaks. Good outbreak control relies on applying a package of interventions, namely case management, surveillance and contact tracing, a good laboratory service, safe burials and social mobilisation. >Early supportive care with rehydration, symptomatic treatment improves survival. There is as yet no licensed treatment proven to neutralise the virus but a range of blood, immunological and drug therapies are under development. >There are currently no licensed Ebola vaccines but 2 potential candidates are undergoing evaluation.
Background The Ebola virus causes an acute, serious illness which is often fatal if untreated. Ebola virus disease (EVD) first appeared in 1976 in 2 simultaneous outbreaks, one in Nzara, Sudan, and the other in Yambuku, Democratic Republic of Congo. The latter occurred in a village near the Ebola River, from which the disease takes its name.
The current outbreak in west Africa, (first cases notified in March 2014), is the largest and most complex Ebola outbreak since the Ebola virus was first discovered in 1976. There have been more cases and deaths in this outbreak than all others combined. It has also spread between countries starting in Guinea then spreading across land borders to Sierra Leone and Liberia, by air (1 traveller only) to Nigeria, and by land (1 traveller) to Senegal.
The most severely affected countries, Guinea, Sierra Leone and Liberia have very weak health systems, lacking human and infrastructural resources, having only recently emerged from long periods of conflict and instability. On August 8, the WHO Director-General declared this outbreak a Public Health Emergency of International Concern.
A separate, unrelated Ebola outbreak began in Boende, Equateur, an isolated part of the Democratic Republic of Congo. The virus family Filoviridae includes 3 genera: Cuevavirus, Marburgvirus, and Ebolavirus. There are 5 species that have been identified: Zaire, Bundibugyo, Sudan, Reston and Taļ Forest. The first 3, Bundibugyo ebolavirus, Zaire ebolavirus, and Sudan ebolavirus have been associated with large outbreaks in Africa. The virus causing the 2014 west African outbreak belongs to the Zaire species.
Transmission It is thought that fruit bats of the Pteropodidae family are natural Ebola virus hosts. Ebola is introduced into the human population through close contact with the blood, secretions, organs or other bodily fluids of infected animals such as chimpanzees, gorillas, fruit bats, monkeys, forest antelope and porcupines found ill or dead or in the rainforest. Ebola then spreads through human-to-human transmission via direct contact (through broken skin or mucous membranes) with the blood, secretions, organs or other bodily fluids of infected people, and with surfaces and materials (e.g. bedding, clothing) contaminated with these fluids. Health-care workers have frequently been infected while treating patients with suspected or confirmed EVD. This has occurred through close contact with patients when infection control precautions are not strictly practiced. Burial ceremonies in which mourners have direct contact with the body of the deceased person can also play a role in the transmission of Ebola. People remain infectious as long as their blood and body fluids, including semen and breast milk, contain the virus. Men who have recovered from the disease can still transmit the virus through their semen for up to 7 weeks after recovery from illness.
Symptoms of Ebola virus disease The incubation period, that is, the time interval from infection with the virus to onset of symptoms is 2 to 21 days. Humans are not infectious until they develop symptoms. First symptoms are the sudden onset of fever fatigue, muscle pain, headache and sore throat. This is followed by vomiting, diarrhoea, rash, symptoms of impaired kidney and liver function, and in some cases, both internal and external bleeding (e.g. oozing from the gums, blood in the stools). Laboratory findings include low white blood cell and platelet counts and elevated liver enzymes.
Diagnosis It can be difficult to distinguish EVD from other infectious diseases such as malaria, typhoid fever and eningitis. Confirmation that symptoms are caused by Ebola virus infection are made using the following investigations: >antibody-capture enzyme-linked immunosorbent assay (ELISA). >antigen-capture detection tests. >serum neutralization test. >reverse transcriptase polymerase chain reaction (RT-PCR) assay. >electron microscopy. >virus isolation by cell culture. Samples from patients are an extreme biohazard risk; laboratory testing on non-inactivated samples should be conducted under maximum biological containment conditions.
Treatment and vaccines Supportive care-rehydration with oral or intravenous fluids- and treatment of specific symptoms, improves survival. There is as yet no proven treatment available for EVD. However, a range of potential treatments including blood products, immune therapies and drug therapies are currently being evaluated. No licensed vaccines are available yet, but 2 potential vaccines are undergoing human safety testing.
Prevention and control Good outbreak control relies on applying a package of interventions, namely case management, surveillance and contact tracing, a good laboratory service, safe burials and social mobilisation. Community engagement is key to successfully controlling outbreaks. Raising awareness of risk factors for Ebola infection and protective measures that individuals can take is an effective way to reduce human transmission. Risk reduction messaging should focus on several factors:


Go to NodeJS web site and click the left button, the one that says LTS (Long-Term Support).
The package will be downloaded through the Mac OS download manager. Double-click on it.
Click "Next"
Check "I accept the terms in the License Agreement" and click "Next"
Select the Installation Locaiton and click "Next"
Click "Next"
It is very important to have "npm package manager" selected to be installed as all in "Add to PATH". This will be very useful later on.
Click "Install"
Click "Yes"
Click "Finish"
Go to the Command Prompt and type:
The output should be something like this:
Also test npm is installed because it's a key component. Type:
The output should be something like this:


Welcome to the source for everything you need to know about El Corazón Volume 48 (2016-2017)
Find Out MoreCheck out some of the brand new features we're bringing to the table.
Learn more
This year, we're bringing you all new features to make this book the best one yet. Find out how
Have any questions or concerns? Shoot us an e-mail and we'll get back to you as soon as possible!