# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

================================================================================
=== Visual Library - the project locations                                   ===
================================================================================

In January NetBeans has moved to Mercurial.
The old project structure has been split into 3 places.

The EXAMPLES for Visual Library are located in "visual.examples" directory
in http://hg.netbeans.org/main/contrib repository - see online at:
    http://hg.netbeans.org/main/contrib/file/

The INTEGRATION example module is located in "visual.examples" directory
in http://hg.netbeans.org/main/contrib Mercurial repository - see online at:
    http://hg.netbeans.org/main/contrib/file/

The SOURCE CODE of the Visual Library is located in "api.visual" directory
in http://hg.netbeans.org/main repository - see online at:
    http://hg.netbeans.org/main/file/

The WEB PAGES of http://graph.netbeans.org/ are located in "graph/www" directory
in :pserver:anoncvs@cvs.netbeans.org (original CVS repository) - see online at:
    http://graph.netbeans.org/source/browse/graph/www/
