diff --git a/README.md b/README.md index 76caa06..bf2a1e2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,23 @@ -# UQAC-POOA-pigeons +## Getting Started + +Bienvenue dans la question 1 du TP 2 du cours "8INF957 - Programmation orienté-objet avancée" + +## Arborescence du projet + +L'espace de travail dispose de plusieurs dossiers : + +- `src`: dossier contenant les fichiers sources (.java) repondant à la question 1 +- `lib`: dossier contenent les librairies utiles à l'execution du projet +- `bin`: dossier contenant les fichiers binaires issus de la compilation des sources +- `doc`: dossier contenant la documentation de l'application +- `livrables`: dossier contenant les livrables relatifs à la questions 1 + +## Execution + +Pour lancer notre application, executer simplement notre fichier ```question1.jar ``` présent dans le dossier ```livrables```, en double cliquant sur le fichier. + +# En ligne de commande + +Depuis le dossier livrables, executer la commande suivantes : +```java -jar question1.jar``` -Dépôt contenant la réponse à la question 1 du TP2 \ No newline at end of file diff --git a/doc/allclasses-index.html b/doc/allclasses-index.html new file mode 100644 index 0000000..254ee06 --- /dev/null +++ b/doc/allclasses-index.html @@ -0,0 +1,132 @@ + + + + + +All Classes + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class Summary
ClassDescription
App 
Bird +
Classe permettant de gérer un oiseau + + Implemente l'interface Runnable, ce qui permet d'executer les actions d'un + oiseau dans un thread.
+
Food +
Classe permettant de gérer une nourriture
+
Park +
Classe permettant de gérer un parc d'oiseaux + + Ce parc permet de gerer un parc contenant des oiseaux, vous pouvez nourrir + ces oiseaux en cliquant sur votre interface, vos oiseaux seront effrayer de + manière aléatoire.
+
Position +
Classe representant un position
+
UI +
Classe d'interface utilisateur de l'application
+
+
+
+ +
+
+ + diff --git a/doc/allpackages-index.html b/doc/allpackages-index.html new file mode 100644 index 0000000..26eb3dd --- /dev/null +++ b/doc/allpackages-index.html @@ -0,0 +1,95 @@ + + + + + +All Packages + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
+ + + + + + + + + + + + + + +
Package Summary
PackageDescription
pigeons 
+
+
+ +
+
+ + diff --git a/doc/constant-values.html b/doc/constant-values.html new file mode 100644 index 0000000..094092a --- /dev/null +++ b/doc/constant-values.html @@ -0,0 +1,81 @@ + + + + + +Constant Field Values + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+
+
+
+ +
+
+ + diff --git a/doc/deprecated-list.html b/doc/deprecated-list.html new file mode 100644 index 0000000..b86f88f --- /dev/null +++ b/doc/deprecated-list.html @@ -0,0 +1,79 @@ + + + + + +Deprecated List + + + + + + + + + + + + + + +
+ +
+
+
+

Deprecated API

+

Contents

+
+
+ +
+
+ + diff --git a/doc/element-list b/doc/element-list new file mode 100644 index 0000000..afe5248 --- /dev/null +++ b/doc/element-list @@ -0,0 +1 @@ +pigeons diff --git a/doc/help-doc.html b/doc/help-doc.html new file mode 100644 index 0000000..3a7468d --- /dev/null +++ b/doc/help-doc.html @@ -0,0 +1,175 @@ + + + + + +API Help + + + + + + + + + + + + + + +
+ +
+
+
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+

Package

+

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

+
    +
  • Interfaces
  • +
  • Classes
  • +
  • Enums
  • +
  • Exceptions
  • +
  • Errors
  • +
  • Annotation Types
  • +
+
+
+

Class or Interface

+

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

+
    +
  • Class Inheritance Diagram
  • +
  • Direct Subclasses
  • +
  • All Known Subinterfaces
  • +
  • All Known Implementing Classes
  • +
  • Class or Interface Declaration
  • +
  • Class or Interface Description
  • +
+
+
    +
  • Nested Class Summary
  • +
  • Field Summary
  • +
  • Property Summary
  • +
  • Constructor Summary
  • +
  • Method Summary
  • +
+
+
    +
  • Field Details
  • +
  • Property Details
  • +
  • Constructor Details
  • +
  • Method Details
  • +
+

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

+
+
+

Annotation Type

+

Each annotation type has its own separate page with the following sections:

+
    +
  • Annotation Type Declaration
  • +
  • Annotation Type Description
  • +
  • Required Element Summary
  • +
  • Optional Element Summary
  • +
  • Element Details
  • +
+
+
+

Enum

+

Each enum has its own separate page with the following sections:

+
    +
  • Enum Declaration
  • +
  • Enum Description
  • +
  • Enum Constant Summary
  • +
  • Enum Constant Details
  • +
+
+
+

Tree (Class Hierarchy)

+

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

+
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • +
  • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
  • +
+
+
+

Deprecated API

+

The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to shortcomings, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

+
+
+

Index

+

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

+
+
+

Serialized Form

+

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

+
+
+

Constant Field Values

+

The Constant Field Values page lists the static final fields and their values.

+
+
+

Search

+

You can search for definitions of modules, packages, types, fields, methods, system properties and other terms defined in the API, using some or all of the name, optionally using "camel-case" abbreviations. For example:

+
    +
  • j.l.obj will match "java.lang.Object"
  • +
  • InpStr will match "java.io.InputStream"
  • +
  • HM.cK will match "java.util.HashMap.containsKey(Object)"
  • +
+

Refer to the Javadoc Search Specification for a full description of search features.

+
+
+This help file applies to API documentation generated by the standard doclet.
+ +
+
+ + diff --git a/doc/index-all.html b/doc/index-all.html new file mode 100644 index 0000000..234729b --- /dev/null +++ b/doc/index-all.html @@ -0,0 +1,431 @@ + + + + + +Index + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D F G I M N P R S U V X Y 
All Classes|All Packages +

A

+
+
addBird(Bird) - Method in class pigeons.Park
+
+
Ajouter un oiseau dans le parc
+
+
addFood(Food) - Method in class pigeons.Park
+
+
Ajouter une nourriture dans le parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété.
+
+
App - Class in pigeons
+
 
+
App() - Constructor for class pigeons.App
+
 
+
+

B

+
+
Bird - Class in pigeons
+
+
Classe permettant de gérer un oiseau + + Implemente l'interface Runnable, ce qui permet d'executer les actions d'un + oiseau dans un thread.
+
+
Bird(int, int, Park) - Constructor for class pigeons.Bird
+
+
Constructeur de l'objet oiseau
+
+
Bird(Position, Park) - Constructor for class pigeons.Bird
+
+
Constructeur de l'objet oiseau
+
+
birds - Variable in class pigeons.Park
+
+
Oiseaux présent dans le parc
+
+
+

C

+
+
color - Variable in class pigeons.Food
+
+
Couleur de la nourriture + - Rouge si non consommable + - Jaune si consommable
+
+
COLOR - Static variable in class pigeons.Bird
+
+
Couleur d'un oiseau
+
+
+

D

+
+
distance(Position) - Method in class pigeons.Position
+
+
Calculer la distance entre 2 positions
+
+
draw() - Method in class pigeons.UI
+
+
Dessiner l'interface
+
+
+

F

+
+
findNearestFood() - Method in class pigeons.Bird
+
+
Detecte la nourriture la plus proche de l'oiseau
+
+
Food - Class in pigeons
+
+
Classe permettant de gérer une nourriture
+
+
Food(int, int) - Constructor for class pigeons.Food
+
+
Constructeur de l'objet representant une nourriture
+
+
Food(Position) - Constructor for class pigeons.Food
+
+
Constructeur de l'objet representant une nourriture
+
+
foods - Variable in class pigeons.Park
+
+
Nourritures présente dans le parc
+
+
freshTimeLeft - Variable in class pigeons.Food
+
+
Temps restant de fraicheur de la nourriture
+
+
frighten() - Method in class pigeons.Bird
+
+
Effraie l'oiseau, a pour but de le déplacer à une position aléatoire
+
+
frightenProbaility - Variable in class pigeons.Park
+
+
Probabilité d'effrayer les oiseaux, decroit à chaque actualisation du parc
+
+
+

G

+
+
getBirds() - Method in class pigeons.Park
+
+
Obtenir les oiseaux du parc
+
+
getColor() - Method in class pigeons.Food
+
+
Obtenir la couleur associé une nourriture
+
+
getFoods() - Method in class pigeons.Park
+
+
Obtenir la nourriture du parc + + Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
+
+
getFreshTimeLeft() - Method in class pigeons.Food
+
+
Obtenir le temps de fraicheur restant à une nourriture + + Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
+
+
getOnFood() - Method in class pigeons.Bird
+
 
+
getPark() - Method in class pigeons.Bird
+
+
Obtenir le parc dans lequel l'oiseau evolue
+
+
getPark() - Method in class pigeons.UI
+
+
Obtenir le park associé à l'intefrace graphique
+
+
getPosition() - Method in class pigeons.Bird
+
+
Obtenir la position de l'oiseau
+
+
getPosition() - Method in class pigeons.Food
+
+
Obtenir la position de la nourriture
+
+
getX() - Method in class pigeons.Position
+
+
Obtenir la position sur l'axe des abscisses
+
+
getY() - Method in class pigeons.Position
+
+
Obtenir la position sur l'axe des ordonées
+
+
+

I

+
+
isAlive - Variable in class pigeons.Bird
+
 
+
isAlive() - Method in class pigeons.Bird
+
 
+
isFresh - Variable in class pigeons.Food
+
+
Consommabilité de la nourriture
+
+
isFresh() - Method in class pigeons.Food
+
+
Obtenir la consommabité de la nourriture + + Cette fonction est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
+
+
+

M

+
+
main(String[]) - Static method in class pigeons.App
+
+
Fonction Main permettant de lancer l'application
+
+
mouseClicked(MouseEvent) - Method in class pigeons.Park
+
 
+
mouseEntered(MouseEvent) - Method in class pigeons.Park
+
 
+
mouseExited(MouseEvent) - Method in class pigeons.Park
+
 
+
mousePressed(MouseEvent) - Method in class pigeons.Park
+
 
+
mouseReleased(MouseEvent) - Method in class pigeons.Park
+
 
+
moveTo(int, int) - Method in class pigeons.Position
+
+
Déplacer la position
+
+
moveTo(Food) - Method in class pigeons.Bird
+
+
Deplacer l'oiseau vers une nourriture
+
+
moveTo(Position) - Method in class pigeons.Bird
+
+
Deplace un oiseau vers une position
+
+
moveTo(Position) - Method in class pigeons.Position
+
+
Déplacer la position
+
+
+

N

+
+
numWriter - Variable in class pigeons.Food
+
+
Nombre de thread travaillant en ecriture sur l'objet
+
+
numWriter - Variable in class pigeons.Park
+
+
Nombre de thread travaillant en ecriture sur l'objet
+
+
+

P

+
+
paintComponent(Graphics) - Method in class pigeons.Park
+
 
+
park - Variable in class pigeons.Bird
+
+
Parc de rattachement de l'oiseau
+
+
park - Variable in class pigeons.UI
+
+
Parc de l'application
+
+
Park - Class in pigeons
+
+
Classe permettant de gérer un parc d'oiseaux + + Ce parc permet de gerer un parc contenant des oiseaux, vous pouvez nourrir + ces oiseaux en cliquant sur votre interface, vos oiseaux seront effrayer de + manière aléatoire.
+
+
Park(int, int) - Constructor for class pigeons.Park
+
+
Constructeur de l'objet representant un parc
+
+
pigeons - package pigeons
+
 
+
position - Variable in class pigeons.Bird
+
+
Positiion de l'oiseau
+
+
position - Variable in class pigeons.Food
+
+
Position de la nourriture
+
+
Position - Class in pigeons
+
+
Classe representant un position
+
+
Position() - Constructor for class pigeons.Position
+
+
Constructeur de l'objet representant une position + + Position fixé à l'origine (0 ; 0)
+
+
Position(int, int) - Constructor for class pigeons.Position
+
+
Constructeur de l'objet representant une position
+
+
+

R

+
+
reduceFreshTimeLeft(long) - Method in class pigeons.Food
+
+
Reduit le temps de fraicheur de la nourriture.
+
+
REFRESH_TIME - Static variable in class pigeons.Bird
+
+
Temps de raffraichissement d'un oiseau (en ms)
+
+
refreshPark() - Method in class pigeons.Park
+
+
Rafraichir le parc, supprime les nourriture périmés depuis un certain temps, + réduit le temps de fraicheurs des nourritures et essaye d'effrayer les + oiseaux du park
+
+
removeBird(int) - Method in class pigeons.Park
+
 
+
removeFood(Food) - Method in class pigeons.Park
+
+
Supprimer une nourriture du parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété.
+
+
removeFoods(ArrayList<Food>) - Method in class pigeons.Park
+
+
Supprimer des nourriture présente sur le parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété.
+
+
run() - Method in class pigeons.Bird
+
 
+
+

S

+
+
setPark(Park) - Method in class pigeons.Bird
+
+
Définir un parc dans lequel l'oiseau evoluera
+
+
setPark(Park) - Method in class pigeons.UI
+
+
Définir un parc pour l'interface graphique
+
+
setX(int) - Method in class pigeons.Position
+
+
Définir une coordonée d'abscisse
+
+
setY(int) - Method in class pigeons.Position
+
+
Définir une coordonée d'ordonée
+
+
+

U

+
+
UI - Class in pigeons
+
+
Classe d'interface utilisateur de l'application
+
+
UI(Park) - Constructor for class pigeons.UI
+
+
Constructeur de l'interface graphique + + La taille de l'interface sera la même que celle du parc
+
+
+

V

+
+
VELOCITY - Static variable in class pigeons.Bird
+
+
Vitesse d'un oiseau
+
+
+

X

+
+
x - Variable in class pigeons.Position
+
+
Coordonnée sur l'axe des abscisses
+
+
+

Y

+
+
y - Variable in class pigeons.Position
+
+
Coodonnée sur l'axe des ordonées
+
+
+A B C D F G I M N P R S U V X Y 
All Classes|All Packages
+ +
+
+ + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..3b8fa49 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,26 @@ + + + + + +Generated Documentation (Untitled) + + + + + + + + + + +
+ +

pigeons/package-summary.html

+
+ + diff --git a/doc/jquery-ui.overrides.css b/doc/jquery-ui.overrides.css new file mode 100644 index 0000000..b16bbe4 --- /dev/null +++ b/doc/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/doc/member-search-index.js b/doc/member-search-index.js new file mode 100644 index 0000000..cfa1bee --- /dev/null +++ b/doc/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"pigeons","c":"Park","l":"addBird(Bird)","u":"addBird(pigeons.Bird)"},{"p":"pigeons","c":"Park","l":"addFood(Food)","u":"addFood(pigeons.Food)"},{"p":"pigeons","c":"App","l":"App()","u":"%3Cinit%3E()"},{"p":"pigeons","c":"Bird","l":"Bird(int, int, Park)","u":"%3Cinit%3E(int,int,pigeons.Park)"},{"p":"pigeons","c":"Bird","l":"Bird(Position, Park)","u":"%3Cinit%3E(pigeons.Position,pigeons.Park)"},{"p":"pigeons","c":"Park","l":"birds"},{"p":"pigeons","c":"Food","l":"color"},{"p":"pigeons","c":"Bird","l":"COLOR"},{"p":"pigeons","c":"Position","l":"distance(Position)","u":"distance(pigeons.Position)"},{"p":"pigeons","c":"UI","l":"draw()"},{"p":"pigeons","c":"Bird","l":"findNearestFood()"},{"p":"pigeons","c":"Food","l":"Food(int, int)","u":"%3Cinit%3E(int,int)"},{"p":"pigeons","c":"Food","l":"Food(Position)","u":"%3Cinit%3E(pigeons.Position)"},{"p":"pigeons","c":"Park","l":"foods"},{"p":"pigeons","c":"Food","l":"freshTimeLeft"},{"p":"pigeons","c":"Bird","l":"frighten()"},{"p":"pigeons","c":"Park","l":"frightenProbaility"},{"p":"pigeons","c":"Park","l":"getBirds()"},{"p":"pigeons","c":"Food","l":"getColor()"},{"p":"pigeons","c":"Park","l":"getFoods()"},{"p":"pigeons","c":"Food","l":"getFreshTimeLeft()"},{"p":"pigeons","c":"Bird","l":"getOnFood()"},{"p":"pigeons","c":"Bird","l":"getPark()"},{"p":"pigeons","c":"UI","l":"getPark()"},{"p":"pigeons","c":"Bird","l":"getPosition()"},{"p":"pigeons","c":"Food","l":"getPosition()"},{"p":"pigeons","c":"Position","l":"getX()"},{"p":"pigeons","c":"Position","l":"getY()"},{"p":"pigeons","c":"Bird","l":"isAlive"},{"p":"pigeons","c":"Bird","l":"isAlive()"},{"p":"pigeons","c":"Food","l":"isFresh"},{"p":"pigeons","c":"Food","l":"isFresh()"},{"p":"pigeons","c":"App","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"pigeons","c":"Park","l":"mouseClicked(MouseEvent)","u":"mouseClicked(java.awt.event.MouseEvent)"},{"p":"pigeons","c":"Park","l":"mouseEntered(MouseEvent)","u":"mouseEntered(java.awt.event.MouseEvent)"},{"p":"pigeons","c":"Park","l":"mouseExited(MouseEvent)","u":"mouseExited(java.awt.event.MouseEvent)"},{"p":"pigeons","c":"Park","l":"mousePressed(MouseEvent)","u":"mousePressed(java.awt.event.MouseEvent)"},{"p":"pigeons","c":"Park","l":"mouseReleased(MouseEvent)","u":"mouseReleased(java.awt.event.MouseEvent)"},{"p":"pigeons","c":"Bird","l":"moveTo(Food)","u":"moveTo(pigeons.Food)"},{"p":"pigeons","c":"Position","l":"moveTo(int, int)","u":"moveTo(int,int)"},{"p":"pigeons","c":"Bird","l":"moveTo(Position)","u":"moveTo(pigeons.Position)"},{"p":"pigeons","c":"Position","l":"moveTo(Position)","u":"moveTo(pigeons.Position)"},{"p":"pigeons","c":"Food","l":"numWriter"},{"p":"pigeons","c":"Park","l":"numWriter"},{"p":"pigeons","c":"Park","l":"paintComponent(Graphics)","u":"paintComponent(java.awt.Graphics)"},{"p":"pigeons","c":"Bird","l":"park"},{"p":"pigeons","c":"UI","l":"park"},{"p":"pigeons","c":"Park","l":"Park(int, int)","u":"%3Cinit%3E(int,int)"},{"p":"pigeons","c":"Bird","l":"position"},{"p":"pigeons","c":"Food","l":"position"},{"p":"pigeons","c":"Position","l":"Position()","u":"%3Cinit%3E()"},{"p":"pigeons","c":"Position","l":"Position(int, int)","u":"%3Cinit%3E(int,int)"},{"p":"pigeons","c":"Food","l":"reduceFreshTimeLeft(long)"},{"p":"pigeons","c":"Bird","l":"REFRESH_TIME"},{"p":"pigeons","c":"Park","l":"refreshPark()"},{"p":"pigeons","c":"Park","l":"removeBird(int)"},{"p":"pigeons","c":"Park","l":"removeFood(Food)","u":"removeFood(pigeons.Food)"},{"p":"pigeons","c":"Park","l":"removeFoods(ArrayList)","u":"removeFoods(java.util.ArrayList)"},{"p":"pigeons","c":"Bird","l":"run()"},{"p":"pigeons","c":"Bird","l":"setPark(Park)","u":"setPark(pigeons.Park)"},{"p":"pigeons","c":"UI","l":"setPark(Park)","u":"setPark(pigeons.Park)"},{"p":"pigeons","c":"Position","l":"setX(int)"},{"p":"pigeons","c":"Position","l":"setY(int)"},{"p":"pigeons","c":"UI","l":"UI(Park)","u":"%3Cinit%3E(pigeons.Park)"},{"p":"pigeons","c":"Bird","l":"VELOCITY"},{"p":"pigeons","c":"Position","l":"x"},{"p":"pigeons","c":"Position","l":"y"}];updateSearchResults(); \ No newline at end of file diff --git a/doc/module-search-index.js b/doc/module-search-index.js new file mode 100644 index 0000000..0d59754 --- /dev/null +++ b/doc/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/doc/overview-tree.html b/doc/overview-tree.html new file mode 100644 index 0000000..75a2910 --- /dev/null +++ b/doc/overview-tree.html @@ -0,0 +1,125 @@ + + + + + +Class Hierarchy + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • pigeons.App
    • +
    • pigeons.Bird (implements java.lang.Runnable)
    • +
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) +
        +
      • java.awt.Container +
          +
        • javax.swing.JComponent (implements java.io.Serializable) +
            +
          • javax.swing.JPanel (implements javax.accessibility.Accessible) +
              +
            • pigeons.Park (implements java.awt.event.MouseListener)
            • +
            +
          • +
          +
        • +
        • java.awt.Window (implements javax.accessibility.Accessible) +
            +
          • java.awt.Frame (implements java.awt.MenuContainer) +
              +
            • javax.swing.JFrame (implements javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants) +
                +
              • pigeons.UI
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    • pigeons.Food
    • +
    • pigeons.Position
    • +
    +
  • +
+
+
+ +
+
+ + diff --git a/doc/package-search-index.js b/doc/package-search-index.js new file mode 100644 index 0000000..616def4 --- /dev/null +++ b/doc/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"pigeons"}];updateSearchResults(); \ No newline at end of file diff --git a/doc/pigeons/App.html b/doc/pigeons/App.html new file mode 100644 index 0000000..6d62cbd --- /dev/null +++ b/doc/pigeons/App.html @@ -0,0 +1,226 @@ + + + + + +App + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package pigeons
+

Class App

+
+
java.lang.Object +
pigeons.App
+
+
+
+
public class App
+extends java.lang.Object
+
+
+
    + +
  • +
    +

    Constructor Summary

    +
    + + + + + + + + + + + + + + +
    Constructors
    ConstructorDescription
    App() 
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    + + + + + + + + + + + + + + + +
    Modifier and TypeMethodDescription
    static voidmain​(java.lang.String[] args) +
    Fonction Main permettant de lancer l'application
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      App

      +
      public App()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      main

      +
      public static void main​(java.lang.String[] args) + throws java.lang.Exception
      +
      Fonction Main permettant de lancer l'application
      +
      +
      Parameters:
      +
      args -
      +
      Throws:
      +
      java.lang.Exception
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+ +
+
+ + diff --git a/doc/pigeons/Bird.html b/doc/pigeons/Bird.html new file mode 100644 index 0000000..43c207b --- /dev/null +++ b/doc/pigeons/Bird.html @@ -0,0 +1,527 @@ + + + + + +Bird + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package pigeons
+

Class Bird

+
+
java.lang.Object +
pigeons.Bird
+
+
+
+
All Implemented Interfaces:
+
java.lang.Runnable
+
+
+
public class Bird
+extends java.lang.Object
+implements java.lang.Runnable
+
Classe permettant de gérer un oiseau + + Implemente l'interface Runnable, ce qui permet d'executer les actions d'un + oiseau dans un thread.
+
+
Since:
+
1.0
+
+
+
+
    + +
  • +
    +

    Field Summary

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fields
    Modifier and TypeFieldDescription
    static java.awt.ColorCOLOR +
    Couleur d'un oiseau
    +
    private booleanisAlive 
    private Parkpark +
    Parc de rattachement de l'oiseau
    +
    private Positionposition +
    Positiion de l'oiseau
    +
    static intREFRESH_TIME +
    Temps de raffraichissement d'un oiseau (en ms)
    +
    static intVELOCITY +
    Vitesse d'un oiseau
    +
    +
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    + + + + + + + + + + + + + + + + + + +
    Constructors
    ConstructorDescription
    Bird​(int x, +int y, +Park park) +
    Constructeur de l'objet oiseau
    +
    Bird​(Position position, +Park park) +
    Constructeur de l'objet oiseau
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Modifier and TypeMethodDescription
    FoodfindNearestFood() +
    Detecte la nourriture la plus proche de l'oiseau
    +
    voidfrighten() +
    Effraie l'oiseau, a pour but de le déplacer à une position aléatoire
    +
    FoodgetOnFood() 
    ParkgetPark() +
    Obtenir le parc dans lequel l'oiseau evolue
    +
    PositiongetPosition() +
    Obtenir la position de l'oiseau
    +
    booleanisAlive() 
    voidmoveTo​(Food food) +
    Deplacer l'oiseau vers une nourriture
    +
    voidmoveTo​(Position toMove) +
    Deplace un oiseau vers une position
    +
    voidrun() 
    voidsetPark​(Park park) +
    Définir un parc dans lequel l'oiseau evoluera
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      position

      +
      private Position position
      +
      Positiion de l'oiseau
      +
      +
    • +
    • +
      +

      park

      +
      private Park park
      +
      Parc de rattachement de l'oiseau
      +
      +
    • +
    • +
      +

      isAlive

      +
      private boolean isAlive
      +
      +
    • +
    • +
      +

      COLOR

      +
      public static java.awt.Color COLOR
      +
      Couleur d'un oiseau
      +
      +
    • +
    • +
      +

      REFRESH_TIME

      +
      public static int REFRESH_TIME
      +
      Temps de raffraichissement d'un oiseau (en ms)
      +
      +
    • +
    • +
      +

      VELOCITY

      +
      public static int VELOCITY
      +
      Vitesse d'un oiseau
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Bird

      +
      public Bird​(Position position, +Park park)
      +
      Constructeur de l'objet oiseau
      +
      +
      Parameters:
      +
      position - position de l'oiseau
      +
      park - parc de rattachement de l'oiseau
      +
      +
      +
    • +
    • +
      +

      Bird

      +
      public Bird​(int x, +int y, +Park park)
      +
      Constructeur de l'objet oiseau
      +
      +
      Parameters:
      +
      x - position sur l'axe des abscisses de l'oiseau
      +
      y - position sur l'axe des ordonnées de l'oiseau
      +
      park - parc de rattachement de l'oiseau
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      findNearestFood

      +
      public Food findNearestFood()
      +
      Detecte la nourriture la plus proche de l'oiseau
      +
      +
      Returns:
      +
      Food L'objet representant la nourriture la plus proche
      +
      +
      +
    • +
    • +
      +

      run

      +
      public void run()
      +
      +
      Specified by:
      +
      run in interface java.lang.Runnable
      +
      +
      +
    • +
    • +
      +

      moveTo

      +
      public void moveTo​(Position toMove)
      +
      Deplace un oiseau vers une position
      +
      +
      Parameters:
      +
      toMove - La position vers laquelle nous devous nous deplacer
      +
      +
      +
    • +
    • +
      +

      moveTo

      +
      public void moveTo​(Food food)
      +
      Deplacer l'oiseau vers une nourriture
      +
      +
      Parameters:
      +
      food - La nourriture vers laquelle l'oiseau doit se diriger
      +
      +
      +
    • +
    • +
      +

      frighten

      +
      public void frighten()
      +
      Effraie l'oiseau, a pour but de le déplacer à une position aléatoire
      +
      +
    • +
    • +
      +

      getOnFood

      +
      public Food getOnFood()
      +
      +
      Returns:
      +
      Food Renvoie la nourriture sur laquelle nous nous situons, ou null si nous sommes sur aucune nourriture
      +
      +
      +
    • +
    • +
      +

      getPark

      +
      public Park getPark()
      +
      Obtenir le parc dans lequel l'oiseau evolue
      +
      +
      Returns:
      +
      Le parc dans lequel l'oiseau évolue
      +
      +
      +
    • +
    • +
      +

      setPark

      +
      public void setPark​(Park park)
      +
      Définir un parc dans lequel l'oiseau evoluera
      +
      +
      Parameters:
      +
      park - Le parc dans lequel l'oiseu évoluera
      +
      +
      +
    • +
    • +
      +

      isAlive

      +
      public boolean isAlive()
      +
      +
      Returns:
      +
      boolean vrai si l'oiseau est en vie, faux sinon.
      +
      +
      +
    • +
    • +
      +

      getPosition

      +
      public Position getPosition()
      +
      Obtenir la position de l'oiseau
      +
      +
      Returns:
      +
      Position la position actuelle de l'oiseau
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+ +
+
+ + diff --git a/doc/pigeons/Food.html b/doc/pigeons/Food.html new file mode 100644 index 0000000..4340a21 --- /dev/null +++ b/doc/pigeons/Food.html @@ -0,0 +1,448 @@ + + + + + +Food + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package pigeons
+

Class Food

+
+
java.lang.Object +
pigeons.Food
+
+
+
+
public class Food
+extends java.lang.Object
+
Classe permettant de gérer une nourriture
+
+
Since:
+
1.0
+
+
+
+
    + +
  • +
    +

    Field Summary

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fields
    Modifier and TypeFieldDescription
    java.awt.Colorcolor +
    Couleur de la nourriture + - Rouge si non consommable + - Jaune si consommable
    +
    private longfreshTimeLeft +
    Temps restant de fraicheur de la nourriture
    +
    private booleanisFresh +
    Consommabilité de la nourriture
    +
    private java.util.concurrent.atomic.AtomicIntegernumWriter +
    Nombre de thread travaillant en ecriture sur l'objet
    +
    private Positionposition +
    Position de la nourriture
    +
    +
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    + + + + + + + + + + + + + + + + + + +
    Constructors
    ConstructorDescription
    Food​(int x, +int y) +
    Constructeur de l'objet representant une nourriture
    +
    Food​(Position position) +
    Constructeur de l'objet representant une nourriture
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Modifier and TypeMethodDescription
    java.awt.ColorgetColor() +
    Obtenir la couleur associé une nourriture
    +
    longgetFreshTimeLeft() +
    Obtenir le temps de fraicheur restant à une nourriture + + Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
    +
    PositiongetPosition() +
    Obtenir la position de la nourriture
    +
    booleanisFresh() +
    Obtenir la consommabité de la nourriture + + Cette fonction est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
    +
    voidreduceFreshTimeLeft​(long toReduce) +
    Reduit le temps de fraicheur de la nourriture.
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      position

      +
      private Position position
      +
      Position de la nourriture
      +
      +
    • +
    • +
      +

      isFresh

      +
      private boolean isFresh
      +
      Consommabilité de la nourriture
      +
      +
    • +
    • +
      +

      freshTimeLeft

      +
      private long freshTimeLeft
      +
      Temps restant de fraicheur de la nourriture
      +
      +
    • +
    • +
      +

      numWriter

      +
      private java.util.concurrent.atomic.AtomicInteger numWriter
      +
      Nombre de thread travaillant en ecriture sur l'objet
      +
      +
    • +
    • +
      +

      color

      +
      public java.awt.Color color
      +
      Couleur de la nourriture + - Rouge si non consommable + - Jaune si consommable
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Food

      +
      public Food​(Position position)
      +
      Constructeur de l'objet representant une nourriture
      +
      +
      Parameters:
      +
      position - Position de la nourriture
      +
      +
      +
    • +
    • +
      +

      Food

      +
      public Food​(int x, +int y)
      +
      Constructeur de l'objet representant une nourriture
      +
      +
      Parameters:
      +
      x - position sur l'axe des abscisses de la nourriture
      +
      y - postiion sur l'axe des ordonnées de la nourriture
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getPosition

      +
      public Position getPosition()
      +
      Obtenir la position de la nourriture
      +
      +
      Returns:
      +
      position de la nourriture
      +
      +
      +
    • +
    • +
      +

      reduceFreshTimeLeft

      +
      public void reduceFreshTimeLeft​(long toReduce)
      +
      Reduit le temps de fraicheur de la nourriture. + Si le temps restants de fraicheur, la nourriture est consideré comme non + consommable et la variable isFresh vaut desormais + true. Par ailleurs la couleur d'une nourriture devient rouge
      +
      +
      Parameters:
      +
      toReduce - Temps à retirer du temps restant de fraicheur
      +
      +
      +
    • +
    • +
      +

      getColor

      +
      public java.awt.Color getColor()
      +
      Obtenir la couleur associé une nourriture
      +
      +
      Returns:
      +
      La couleur associé à la nouritture, jaune si consommable, rouge sinon
      +
      +
      +
    • +
    • +
      +

      getFreshTimeLeft

      +
      public long getFreshTimeLeft()
      +
      Obtenir le temps de fraicheur restant à une nourriture + + Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
      +
      +
      Returns:
      +
      Temps de fraicheur restant à la nourriture
      +
      +
      +
    • +
    • +
      +

      isFresh

      +
      public boolean isFresh()
      +
      Obtenir la consommabité de la nourriture + + Cette fonction est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
      +
      +
      Returns:
      +
      boolean
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+ +
+
+ + diff --git a/doc/pigeons/Park.html b/doc/pigeons/Park.html new file mode 100644 index 0000000..4d48804 --- /dev/null +++ b/doc/pigeons/Park.html @@ -0,0 +1,623 @@ + + + + + +Park + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package pigeons
+

Class Park

+
+
java.lang.Object +
java.awt.Component +
java.awt.Container +
javax.swing.JComponent +
javax.swing.JPanel +
pigeons.Park
+
+
+
+
+
+
+
+
All Implemented Interfaces:
+
java.awt.event.MouseListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible
+
+
+
public class Park
+extends javax.swing.JPanel
+implements java.awt.event.MouseListener
+
Classe permettant de gérer un parc d'oiseaux + + Ce parc permet de gerer un parc contenant des oiseaux, vous pouvez nourrir + ces oiseaux en cliquant sur votre interface, vos oiseaux seront effrayer de + manière aléatoire. Ce park peut + etre affiché à l'aide d'une JFrame.
+
+
Since:
+
1.0
+
See Also:
+
Serialized Form
+
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class javax.swing.JPanel

    +javax.swing.JPanel.AccessibleJPanel
    +
    +

    Nested classes/interfaces inherited from class javax.swing.JComponent

    +javax.swing.JComponent.AccessibleJComponent
    +
    +

    Nested classes/interfaces inherited from class java.awt.Container

    +java.awt.Container.AccessibleAWTContainer
    +
    +

    Nested classes/interfaces inherited from class java.awt.Component

    +java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fields
    Modifier and TypeFieldDescription
    private java.util.ArrayList<Bird>birds +
    Oiseaux présent dans le parc
    +
    private java.util.ArrayList<Food>foods +
    Nourritures présente dans le parc
    +
    private intfrightenProbaility +
    Probabilité d'effrayer les oiseaux, decroit à chaque actualisation du parc
    +
    private java.util.concurrent.atomic.AtomicIntegernumWriter +
    Nombre de thread travaillant en ecriture sur l'objet
    +
    +
    +
    +

    Fields inherited from class javax.swing.JComponent

    +listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
    +
    +

    Fields inherited from class java.awt.Component

    +accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
    +
    +

    Fields inherited from interface java.awt.image.ImageObserver

    +ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    + + + + + + + + + + + + + + +
    Constructors
    ConstructorDescription
    Park​(int width, +int height) +
    Constructeur de l'objet representant un parc
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Modifier and TypeMethodDescription
    voidaddBird​(Bird toAdd) +
    Ajouter un oiseau dans le parc
    +
    voidaddFood​(Food toAdd) +
    Ajouter une nourriture dans le parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété.
    +
    java.util.ArrayList<Bird>getBirds() +
    Obtenir les oiseaux du parc
    +
    java.util.ArrayList<Food>getFoods() +
    Obtenir la nourriture du parc + + Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
    +
    voidmouseClicked​(java.awt.event.MouseEvent e) 
    voidmouseEntered​(java.awt.event.MouseEvent e) 
    voidmouseExited​(java.awt.event.MouseEvent e) 
    voidmousePressed​(java.awt.event.MouseEvent e) 
    voidmouseReleased​(java.awt.event.MouseEvent e) 
    voidpaintComponent​(java.awt.Graphics g) 
    private voidrefreshPark() +
    Rafraichir le parc, supprime les nourriture périmés depuis un certain temps, + réduit le temps de fraicheurs des nourritures et essaye d'effrayer les + oiseaux du park
    +
    voidremoveBird​(int index) 
    voidremoveFood​(Food food) +
    Supprimer une nourriture du parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété.
    +
    voidremoveFoods​(java.util.ArrayList<Food> foods) +
    Supprimer des nourriture présente sur le parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété.
    +
    +
    +
    +
    +

    Methods inherited from class javax.swing.JPanel

    +getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
    +
    +

    Methods inherited from class javax.swing.JComponent

    +addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
    +
    +

    Methods inherited from class java.awt.Container

    +add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
    +
    +

    Methods inherited from class java.awt.Component

    +action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      birds

      +
      private java.util.ArrayList<Bird> birds
      +
      Oiseaux présent dans le parc
      +
      +
    • +
    • +
      +

      foods

      +
      private java.util.ArrayList<Food> foods
      +
      Nourritures présente dans le parc
      +
      +
    • +
    • +
      +

      frightenProbaility

      +
      private int frightenProbaility
      +
      Probabilité d'effrayer les oiseaux, decroit à chaque actualisation du parc
      +
      +
    • +
    • +
      +

      numWriter

      +
      private java.util.concurrent.atomic.AtomicInteger numWriter
      +
      Nombre de thread travaillant en ecriture sur l'objet
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Park

      +
      public Park​(int width, +int height)
      +
      Constructeur de l'objet representant un parc
      +
      +
      Parameters:
      +
      width - longueur du parc
      +
      height - hauteur du parc
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getBirds

      +
      public java.util.ArrayList<Bird> getBirds()
      +
      Obtenir les oiseaux du parc
      +
      +
      Returns:
      +
      la liste contenant les oiseaux du parcs
      +
      +
      +
    • +
    • +
      +

      getFoods

      +
      public java.util.ArrayList<Food> getFoods()
      +
      Obtenir la nourriture du parc + + Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + recuperer la propriété en étant sur que la variable n'est pas en cours de + modification
      +
      +
      Returns:
      +
      la liste contenant les nourritures du parc
      +
      +
      +
    • +
    • +
      +

      addFood

      +
      public void addFood​(Food toAdd)
      +
      Ajouter une nourriture dans le parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété. + L'ecriture est prioritaire sur la lecture.
      +
      +
      Parameters:
      +
      toAdd - nourriture a ajouter au parc
      +
      +
      +
    • +
    • +
      +

      addBird

      +
      public void addBird​(Bird toAdd)
      +
      Ajouter un oiseau dans le parc
      +
      +
      Parameters:
      +
      toAdd - Oiseau à ajouter au parc
      +
      +
      +
    • +
    • +
      +

      removeFoods

      +
      public void removeFoods​(java.util.ArrayList<Food> foods)
      +
      Supprimer des nourriture présente sur le parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété. + L'ecriture est prioritaire sur la lecture.
      +
      +
      Parameters:
      +
      foods - liste de nourriture à supprimer du parc
      +
      +
      +
    • +
    • +
      +

      removeFood

      +
      public void removeFood​(Food food)
      +
      Supprimer une nourriture du parc + + Cette méthode est executé avec un verrou ce qui permet de modifier la + propriété, tout en bloquant les lectures eventuelles de la propriété. + L'ecriture est prioritaire sur la lecture.
      +
      +
      Parameters:
      +
      food - nourriture à ajouter
      +
      +
      +
    • +
    • +
      +

      paintComponent

      +
      public void paintComponent​(java.awt.Graphics g)
      +
      +
      Overrides:
      +
      paintComponent in class javax.swing.JComponent
      +
      +
      +
    • +
    • +
      +

      mouseClicked

      +
      public void mouseClicked​(java.awt.event.MouseEvent e)
      +
      +
      Specified by:
      +
      mouseClicked in interface java.awt.event.MouseListener
      +
      +
      +
    • +
    • +
      +

      mousePressed

      +
      public void mousePressed​(java.awt.event.MouseEvent e)
      +
      +
      Specified by:
      +
      mousePressed in interface java.awt.event.MouseListener
      +
      +
      +
    • +
    • +
      +

      mouseReleased

      +
      public void mouseReleased​(java.awt.event.MouseEvent e)
      +
      +
      Specified by:
      +
      mouseReleased in interface java.awt.event.MouseListener
      +
      +
      +
    • +
    • +
      +

      mouseEntered

      +
      public void mouseEntered​(java.awt.event.MouseEvent e)
      +
      +
      Specified by:
      +
      mouseEntered in interface java.awt.event.MouseListener
      +
      +
      +
    • +
    • +
      +

      mouseExited

      +
      public void mouseExited​(java.awt.event.MouseEvent e)
      +
      +
      Specified by:
      +
      mouseExited in interface java.awt.event.MouseListener
      +
      +
      +
    • +
    • +
      +

      removeBird

      +
      public void removeBird​(int index)
      +
      +
      Parameters:
      +
      index - index de liste de l'oiseau à supprimer
      +
      +
      +
    • +
    • +
      +

      refreshPark

      +
      private void refreshPark()
      +
      Rafraichir le parc, supprime les nourriture périmés depuis un certain temps, + réduit le temps de fraicheurs des nourritures et essaye d'effrayer les + oiseaux du park
      +
      +
    • +
    +
    +
  • +
+
+ +
+ +
+
+ + diff --git a/doc/pigeons/Position.html b/doc/pigeons/Position.html new file mode 100644 index 0000000..e1ed65d --- /dev/null +++ b/doc/pigeons/Position.html @@ -0,0 +1,424 @@ + + + + + +Position + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package pigeons
+

Class Position

+
+
java.lang.Object +
pigeons.Position
+
+
+
+
public class Position
+extends java.lang.Object
+
Classe representant un position
+
+
Since:
+
1.0
+
+
+
+
    + +
  • +
    +

    Field Summary

    +
    + + + + + + + + + + + + + + + + + + + + + +
    Fields
    Modifier and TypeFieldDescription
    private intx +
    Coordonnée sur l'axe des abscisses
    +
    private inty +
    Coodonnée sur l'axe des ordonées
    +
    +
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    + + + + + + + + + + + + + + + + + + +
    Constructors
    ConstructorDescription
    Position() +
    Constructeur de l'objet representant une position + + Position fixé à l'origine (0 ; 0)
    +
    Position​(int x, +int y) +
    Constructeur de l'objet representant une position
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Modifier and TypeMethodDescription
    intdistance​(Position position) +
    Calculer la distance entre 2 positions
    +
    intgetX() +
    Obtenir la position sur l'axe des abscisses
    +
    intgetY() +
    Obtenir la position sur l'axe des ordonées
    +
    voidmoveTo​(int x, +int y) +
    Déplacer la position
    +
    voidmoveTo​(Position toMove) +
    Déplacer la position
    +
    voidsetX​(int x) +
    Définir une coordonée d'abscisse
    +
    voidsetY​(int y) +
    Définir une coordonée d'ordonée
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      x

      +
      private int x
      +
      Coordonnée sur l'axe des abscisses
      +
      +
    • +
    • +
      +

      y

      +
      private int y
      +
      Coodonnée sur l'axe des ordonées
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Position

      +
      public Position​(int x, +int y)
      +
      Constructeur de l'objet representant une position
      +
      +
      Parameters:
      +
      x - position sur l'abscisse
      +
      y - position sur l'ordonée
      +
      +
      +
    • +
    • +
      +

      Position

      +
      public Position()
      +
      Constructeur de l'objet representant une position + + Position fixé à l'origine (0 ; 0)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      distance

      +
      public int distance​(Position position)
      +
      Calculer la distance entre 2 positions
      +
      +
      Parameters:
      +
      position - postion distante
      +
      Returns:
      +
      distance entre les 2 points
      +
      +
      +
    • +
    • +
      +

      moveTo

      +
      public void moveTo​(int x, +int y)
      +
      Déplacer la position
      +
      +
      Parameters:
      +
      x - nouvelle position sur l'axe des abscisses
      +
      y - nouvelle position sur l'axe des abscisses
      +
      +
      +
    • +
    • +
      +

      moveTo

      +
      public void moveTo​(Position toMove)
      +
      Déplacer la position
      +
      +
      Parameters:
      +
      toMove - nouvelle position
      +
      +
      +
    • +
    • +
      +

      getX

      +
      public int getX()
      +
      Obtenir la position sur l'axe des abscisses
      +
      +
      Returns:
      +
      coordonnée sur l'abscisses
      +
      +
      +
    • +
    • +
      +

      setX

      +
      public void setX​(int x)
      +
      Définir une coordonée d'abscisse
      +
      +
      Parameters:
      +
      x - nouvelle coordonnée d'abscisse
      +
      +
      +
    • +
    • +
      +

      getY

      +
      public int getY()
      +
      Obtenir la position sur l'axe des ordonées
      +
      +
      Returns:
      +
      coordonnée sur l'ordonnée
      +
      +
      +
    • +
    • +
      +

      setY

      +
      public void setY​(int y)
      +
      Définir une coordonée d'ordonée
      +
      +
      Parameters:
      +
      y - nouvelle coordonnée d'ordonée
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+ +
+
+ + diff --git a/doc/pigeons/UI.html b/doc/pigeons/UI.html new file mode 100644 index 0000000..18af6b9 --- /dev/null +++ b/doc/pigeons/UI.html @@ -0,0 +1,383 @@ + + + + + +UI + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package pigeons
+

Class UI

+
+
java.lang.Object +
java.awt.Component +
java.awt.Container +
java.awt.Window +
java.awt.Frame +
javax.swing.JFrame +
pigeons.UI
+
+
+
+
+
+
+
+
+
All Implemented Interfaces:
+
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants
+
+
+
public class UI
+extends javax.swing.JFrame
+
Classe d'interface utilisateur de l'application
+
+
Since:
+
1.0
+
See Also:
+
Serialized Form
+
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class javax.swing.JFrame

    +javax.swing.JFrame.AccessibleJFrame
    +
    +

    Nested classes/interfaces inherited from class java.awt.Frame

    +java.awt.Frame.AccessibleAWTFrame
    +
    +

    Nested classes/interfaces inherited from class java.awt.Window

    +java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type
    +
    +

    Nested classes/interfaces inherited from class java.awt.Container

    +java.awt.Container.AccessibleAWTContainer
    +
    +

    Nested classes/interfaces inherited from class java.awt.Component

    +java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    + + + + + + + + + + + + + + + + +
    Fields
    Modifier and TypeFieldDescription
    private Parkpark +
    Parc de l'application
    +
    +
    +
    +

    Fields inherited from class javax.swing.JFrame

    +accessibleContext, rootPane, rootPaneCheckingEnabled
    +
    +

    Fields inherited from class java.awt.Frame

    +CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
    +
    +

    Fields inherited from class java.awt.Component

    +BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
    +
    +

    Fields inherited from interface java.awt.image.ImageObserver

    +ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
    +
    +

    Fields inherited from interface javax.swing.WindowConstants

    +DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    + + + + + + + + + + + + + + +
    Constructors
    ConstructorDescription
    UI​(Park park) +
    Constructeur de l'interface graphique + + La taille de l'interface sera la même que celle du parc
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Modifier and TypeMethodDescription
    voiddraw() +
    Dessiner l'interface
    +
    ParkgetPark() +
    Obtenir le park associé à l'intefrace graphique
    +
    voidsetPark​(Park park) +
    Définir un parc pour l'interface graphique
    +
    +
    +
    +
    +

    Methods inherited from class javax.swing.JFrame

    +addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
    +
    +

    Methods inherited from class java.awt.Frame

    +addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setBackground, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
    +
    +

    Methods inherited from class java.awt.Window

    +addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFront
    +
    +

    Methods inherited from class java.awt.Container

    +add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTree
    +
    +

    Methods inherited from class java.awt.Component

    +action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +

    Methods inherited from interface java.awt.MenuContainer

    +getFont, postEvent
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      park

      +
      private Park park
      +
      Parc de l'application
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UI

      +
      public UI​(Park park)
      +
      Constructeur de l'interface graphique + + La taille de l'interface sera la même que celle du parc
      +
      +
      Parameters:
      +
      park - le parc attaché à cette interface
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getPark

      +
      public Park getPark()
      +
      Obtenir le park associé à l'intefrace graphique
      +
      +
      Returns:
      +
      parc de l'application
      +
      +
      +
    • +
    • +
      +

      setPark

      +
      public void setPark​(Park park)
      +
      Définir un parc pour l'interface graphique
      +
      +
      Parameters:
      +
      park - parc de l'application
      +
      +
      +
    • +
    • +
      +

      draw

      +
      public void draw()
      +
      Dessiner l'interface
      +
      +
    • +
    +
    +
  • +
+
+ +
+ +
+
+ + diff --git a/doc/pigeons/package-summary.html b/doc/pigeons/package-summary.html new file mode 100644 index 0000000..3040342 --- /dev/null +++ b/doc/pigeons/package-summary.html @@ -0,0 +1,138 @@ + + + + + +pigeons + + + + + + + + + + + + + + +
+ +
+
+
+

Package pigeons

+
+
+
    +
  • +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary
    ClassDescription
    App 
    Bird +
    Classe permettant de gérer un oiseau + + Implemente l'interface Runnable, ce qui permet d'executer les actions d'un + oiseau dans un thread.
    +
    Food +
    Classe permettant de gérer une nourriture
    +
    Park +
    Classe permettant de gérer un parc d'oiseaux + + Ce parc permet de gerer un parc contenant des oiseaux, vous pouvez nourrir + ces oiseaux en cliquant sur votre interface, vos oiseaux seront effrayer de + manière aléatoire.
    +
    Position +
    Classe representant un position
    +
    UI +
    Classe d'interface utilisateur de l'application
    +
    +
    +
  • +
+
+
+ +
+
+ + diff --git a/doc/pigeons/package-tree.html b/doc/pigeons/package-tree.html new file mode 100644 index 0000000..8fd2f2c --- /dev/null +++ b/doc/pigeons/package-tree.html @@ -0,0 +1,121 @@ + + + + + +pigeons Class Hierarchy + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package pigeons

+
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • pigeons.App
    • +
    • pigeons.Bird (implements java.lang.Runnable)
    • +
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) +
        +
      • java.awt.Container +
          +
        • javax.swing.JComponent (implements java.io.Serializable) +
            +
          • javax.swing.JPanel (implements javax.accessibility.Accessible) +
              +
            • pigeons.Park (implements java.awt.event.MouseListener)
            • +
            +
          • +
          +
        • +
        • java.awt.Window (implements javax.accessibility.Accessible) +
            +
          • java.awt.Frame (implements java.awt.MenuContainer) +
              +
            • javax.swing.JFrame (implements javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants) +
                +
              • pigeons.UI
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    • pigeons.Food
    • +
    • pigeons.Position
    • +
    +
  • +
+
+
+ +
+
+ + diff --git a/doc/resources/glass.png b/doc/resources/glass.png new file mode 100644 index 0000000..a7f591f Binary files /dev/null and b/doc/resources/glass.png differ diff --git a/doc/resources/x.png b/doc/resources/x.png new file mode 100644 index 0000000..30548a7 Binary files /dev/null and b/doc/resources/x.png differ diff --git a/doc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png b/doc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..34abd18 Binary files /dev/null and b/doc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/doc/script-dir/images/ui-bg_glass_65_dadada_1x400.png b/doc/script-dir/images/ui-bg_glass_65_dadada_1x400.png new file mode 100644 index 0000000..f058a93 Binary files /dev/null and b/doc/script-dir/images/ui-bg_glass_65_dadada_1x400.png differ diff --git a/doc/script-dir/images/ui-bg_glass_75_dadada_1x400.png b/doc/script-dir/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..2ce04c1 Binary files /dev/null and b/doc/script-dir/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/doc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png b/doc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..a90afb8 Binary files /dev/null and b/doc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/doc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png b/doc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..dbe091f Binary files /dev/null and b/doc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/doc/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/doc/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..5dc3593 Binary files /dev/null and b/doc/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/doc/script-dir/images/ui-icons_222222_256x240.png b/doc/script-dir/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..e723e17 Binary files /dev/null and b/doc/script-dir/images/ui-icons_222222_256x240.png differ diff --git a/doc/script-dir/images/ui-icons_2e83ff_256x240.png b/doc/script-dir/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..1f5f497 Binary files /dev/null and b/doc/script-dir/images/ui-icons_2e83ff_256x240.png differ diff --git a/doc/script-dir/images/ui-icons_454545_256x240.png b/doc/script-dir/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..618f5b0 Binary files /dev/null and b/doc/script-dir/images/ui-icons_454545_256x240.png differ diff --git a/doc/script-dir/images/ui-icons_888888_256x240.png b/doc/script-dir/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..ee5e33f Binary files /dev/null and b/doc/script-dir/images/ui-icons_888888_256x240.png differ diff --git a/doc/script-dir/images/ui-icons_cd0a0a_256x240.png b/doc/script-dir/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..7e8ebc1 Binary files /dev/null and b/doc/script-dir/images/ui-icons_cd0a0a_256x240.png differ diff --git a/doc/script-dir/jquery-3.5.1.min.js b/doc/script-dir/jquery-3.5.1.min.js new file mode 100644 index 0000000..b061403 --- /dev/null +++ b/doc/script-dir/jquery-3.5.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(s in o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void 0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,s){var n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=i.call(arguments,1),l=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):l=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"
    ",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=l.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=l.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
      ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
      ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
      ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
      ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
      ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete}); \ No newline at end of file diff --git a/doc/script-dir/jquery-ui.structure.min.css b/doc/script-dir/jquery-ui.structure.min.css new file mode 100644 index 0000000..e880892 --- /dev/null +++ b/doc/script-dir/jquery-ui.structure.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.12.1 - 2018-12-06 +* http://jqueryui.com +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0} \ No newline at end of file diff --git a/doc/script.js b/doc/script.js new file mode 100644 index 0000000..370ade9 --- /dev/null +++ b/doc/script.js @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + var firstRow = document.getElementById(Object.keys(data)[0]); + var table = firstRow.closest('table'); + for (var value in tabs) { + var tab = document.getElementById(tabs[value][0]); + if (value == type) { + tab.className = activeTableTab; + tab.innerHTML = tabs[value][1]; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + table.setAttribute('aria-labelledby', tabs[value][0]); + } + else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + tab.setAttribute('onclick', "show("+ value + ")"); + tab.innerHTML = tabs[value][1]; + } + } +} + +function switchTab(e) { + if (e.keyCode == 37 || e.keyCode == 38) { + $("[aria-selected=true]").prev().click().focus(); + e.preventDefault(); + } + if (e.keyCode == 39 || e.keyCode == 40) { + $("[aria-selected=true]").next().click().focus(); + e.preventDefault(); + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} diff --git a/doc/search.js b/doc/search.js new file mode 100644 index 0000000..75b18f1 --- /dev/null +++ b/doc/search.js @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var noResult = {l: "No results found"}; +var loading = {l: "Loading search index..."}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var searchPattern = ""; +var RANKING_THRESHOLD = 2; +var NO_MATCH = 0xffff; +var MAX_RESULTS_PER_CATEGORY = 500; +var UNNAMED = ""; +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(item, matcher) { + var escapedItem = escapeHtml(item); + return escapedItem.replace(matcher, highlight); +} +function getURLPrefix(ui) { + var urlPrefix=""; + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if (ui.item.category === catTypes || ui.item.category === catMembers) { + if (ui.item.m) { + urlPrefix = ui.item.m + slash; + } else { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p === item.l) { + urlPrefix = item.m + slash; + } + }); + } + return urlPrefix; + } + return urlPrefix; +} +function makeCamelCaseRegex(term) { + var pattern = ""; + var isWordToken = false; + term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { + if (index > 0) { + // whitespace between identifiers is significant + pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; + } + var tokens = w.split(/(?=[A-Z,.()<>[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + if (s === "") { + continue; + } + pattern += $.ui.autocomplete.escapeRegex(s); + isWordToken = /\w$/.test(s); + if (isWordToken) { + pattern += "([a-z0-9_$<>\\[\\]]*?)"; + } + } + }); + return pattern; +} +function createMatcher(pattern, flags) { + var isCamelCase = /[A-Z]/.test(pattern); + return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown paste', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this; + var currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.category && item.category !== currentCategory) { + ul.append("
    • " + item.category + "
    • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "result-item"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "result-item"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + var matcher = createMatcher(escapeHtml(searchPattern), "g"); + if (item.category === catModules) { + label = getHighlightedText(item.l, matcher); + } else if (item.category === catPackages) { + label = getHighlightedText(item.l, matcher); + } else if (item.category === catTypes) { + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.l, matcher) + : getHighlightedText(item.l, matcher); + } else if (item.category === catMembers) { + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher) + : getHighlightedText(item.c + "." + item.l, matcher); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l, matcher); + } else { + label = item.l; + } + var li = $("
    • ").appendTo(ul); + var div = $("
      ").appendTo(li); + if (item.category === catSearchTags) { + if (item.d) { + div.html(label + " (" + item.h + ")
      " + + item.d + "
      "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + if (item.m) { + div.html(item.m + "/" + label); + } else { + div.html(label); + } + } + return li; + } +}); +function rankMatch(match, category) { + if (!match) { + return NO_MATCH; + } + var index = match.index; + var input = match.input; + var leftBoundaryMatch = 2; + var periferalMatch = 0; + var delta = 0; + // make sure match is anchored on a left word boundary + if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index - 1] || "_" === input[index]) { + leftBoundaryMatch = 0; + } else if (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input)) { + leftBoundaryMatch = 1; + } + var matchEnd = index + match[0].length; + var leftParen = input.indexOf("("); + // exclude peripheral matches + if (category !== catModules && category !== catSearchTags) { + var endOfName = leftParen > -1 ? leftParen : input.length; + var delim = category === catPackages ? "/" : "."; + if (leftParen > -1 && leftParen < index) { + periferalMatch += 2; + } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { + periferalMatch += 2; + } + } + for (var i = 1; i < match.length; i++) { + // lower ranking if parts of the name are missing + if (match[i]) + delta += match[i].length; + } + if (category === catTypes) { + // lower ranking if a type name contains unmatched camel-case parts + if (/[A-Z]/.test(input.substring(matchEnd))) + delta += 5; + if (/[A-Z]/.test(input.substring(0, index))) + delta += 5; + } + return leftBoundaryMatch + periferalMatch + (delta / 200); + +} +function doSearch(request, response) { + var result = []; + var newResults = []; + + searchPattern = makeCamelCaseRegex(request.term); + if (searchPattern === "") { + return this.close(); + } + var camelCaseMatcher = createMatcher(searchPattern, ""); + var boundaryMatcher = createMatcher("\\b" + searchPattern, ""); + + function concatResults(a1, a2) { + a2.sort(function(e1, e2) { + return e1.ranking - e2.ranking; + }); + a1 = a1.concat(a2.map(function(e) { return e.item; })); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + var ranking = rankMatch(boundaryMatcher.exec(item.l), catModules); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ ranking: ranking, item: item }); + } + return newResults.length < MAX_RESULTS_PER_CATEGORY; + }); + result = concatResults(result, newResults); + } + if (packageSearchIndex) { + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + var name = (item.m && request.term.indexOf("/") > -1) + ? (item.m + "/" + item.l) + : item.l; + var ranking = rankMatch(boundaryMatcher.exec(name), catPackages); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ ranking: ranking, item: item }); + } + return newResults.length < MAX_RESULTS_PER_CATEGORY; + }); + result = concatResults(result, newResults); + } + if (typeSearchIndex) { + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var name = request.term.indexOf(".") > -1 + ? item.p + "." + item.l + : item.l; + var ranking = rankMatch(camelCaseMatcher.exec(name), catTypes); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ ranking: ranking, item: item }); + } + return newResults.length < MAX_RESULTS_PER_CATEGORY; + }); + result = concatResults(result, newResults); + } + if (memberSearchIndex) { + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var name = request.term.indexOf(".") > -1 + ? item.p + "." + item.c + "." + item.l + : item.l; + var ranking = rankMatch(camelCaseMatcher.exec(name), catMembers); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ ranking: ranking, item: item }); + } + return newResults.length < MAX_RESULTS_PER_CATEGORY; + }); + result = concatResults(result, newResults); + } + if (tagSearchIndex) { + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + var ranking = rankMatch(boundaryMatcher.exec(item.l), catSearchTags); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ ranking: ranking, item: item }); + } + return newResults.length < MAX_RESULTS_PER_CATEGORY; + }); + result = concatResults(result, newResults); + } + if (!indexFilesLoaded()) { + updateSearchResults = function() { + doSearch(request, response); + } + result.unshift(loading); + } else { + updateSearchResults = function() {}; + } + response(result); +} +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 300, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.category) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + url += "module-summary.html"; + } else if (ui.item.category === catPackages) { + if (ui.item.u) { + url = ui.item.u; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.u) { + url = ui.item.u; + } else if (ui.item.p === UNNAMED) { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === UNNAMED) { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.u) { + url += ui.item.u; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search").focus(); + } + } + }); +}); diff --git a/doc/serialized-form.html b/doc/serialized-form.html new file mode 100644 index 0000000..60a7813 --- /dev/null +++ b/doc/serialized-form.html @@ -0,0 +1,140 @@ + + + + + +Serialized Form + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Serialized Form

      +
      +
        +
      • +
        +

        Package pigeons

        +
          +
        • +
          +

          Class pigeons.Park extends javax.swing.JPanel implements Serializable

          +
            +
          • +
            +

            Serialized Fields

            +
              +
            • +
              birds
              +
              java.util.ArrayList<Bird> birds
              +
              Oiseaux présent dans le parc
              +
            • +
            • +
              foods
              +
              java.util.ArrayList<Food> foods
              +
              Nourritures présente dans le parc
              +
            • +
            • +
              frightenProbaility
              +
              int frightenProbaility
              +
              Probabilité d'effrayer les oiseaux, decroit à chaque actualisation du parc
              +
            • +
            • +
              numWriter
              +
              java.util.concurrent.atomic.AtomicInteger numWriter
              +
              Nombre de thread travaillant en ecriture sur l'objet
              +
            • +
            +
            +
          • +
          +
          +
        • +
        • +
          +

          Class pigeons.UI extends javax.swing.JFrame implements Serializable

          +
            +
          • +
            +

            Serialized Fields

            +
              +
            • +
              park
              +
              Park park
              +
              Parc de l'application
              +
            • +
            +
            +
          • +
          +
          +
        • +
        +
        +
      • +
      +
      + +
      +
      + + diff --git a/doc/stylesheet.css b/doc/stylesheet.css new file mode 100644 index 0000000..0aa4b2a --- /dev/null +++ b/doc/stylesheet.css @@ -0,0 +1,792 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size: 14px; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.about-language { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legal-copy { + margin-left:.5em; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +@media screen { + .flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + .flex-header { + flex: 0 0 auto; + } + .flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottom-nav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.sub-nav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.sub-nav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list { + padding-top:5px; +} +ul.nav-list, ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0 0 0 0; + padding:5px 6px; + clear:none; +} +.nav-list-search label { + position:relative; + right:-16px; +} +ul.sub-nav-list li { + list-style:none; + float:left; + padding-top:10px; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited, .bottom-nav a:link, .bottom-nav a:active, .bottom-nav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover, .bottom-nav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.nav-bar-cell1-rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header and footer. + */ +.title { + color:#2c4557; + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +dl.notes > dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overview-summary table, .member-summary table, .type-summary table, .use-summary table, .constants-summary table, .deprecated-summary table, +.requires-summary table, .packages-summary table, .provides-summary table, .uses-summary table, .system-properties-summary table { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overview-summary table, .member-summary table, .requires-summary table, .packages-summary table, +.provides-summary table, .uses-summary table, .system-properties-summary table { + padding:0px; +} +.overview-summary caption, .member-summary caption, .type-summary caption, +.use-summary caption, .constants-summary caption, .deprecated-summary caption, +.requires-summary caption, .packages-summary caption, .provides-summary caption, +.uses-summary caption, .system-properties-summary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.constants-summary caption a:link, .constants-summary caption a:visited, +.use-summary caption a:link, .use-summary caption a:visited { + color:#1f389c; +} +.overview-summary caption a:link, .member-summary caption a:link, .type-summary caption a:link, +.deprecated-summary caption a:link, +.requires-summary caption a:link, .packages-summary caption a:link, .provides-summary caption a:link, +.uses-summary caption a:link, +.overview-summary caption a:hover, .member-summary caption a:hover, .type-summary caption a:hover, +.use-summary caption a:hover, .constants-summary caption a:hover, .deprecated-summary caption a:hover, +.requires-summary caption a:hover, .packages-summary caption a:hover, .provides-summary caption a:hover, +.uses-summary caption a:hover, +.overview-summary caption a:active, .member-summary caption a:active, .type-summary caption a:active, +.use-summary caption a:active, .constants-summary caption a:active, .deprecated-summary caption a:active, +.requires-summary caption a:active, .packages-summary caption a:active, .provides-summary caption a:active, +.uses-summary caption a:active, +.overview-summary caption a:visited, .member-summary caption a:visited, .type-summary caption a:visited, +.deprecated-summary caption a:visited, +.requires-summary caption a:visited, .packages-summary caption a:visited, .provides-summary caption a:visited, +.uses-summary caption a:visited { + color:#FFFFFF; +} +.overview-summary caption span, .member-summary caption span, .type-summary caption span, +.use-summary caption span, .constants-summary caption span, .deprecated-summary caption span, +.requires-summary caption span, .packages-summary caption span, .provides-summary caption span, +.uses-summary caption span, .system-properties-summary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} + +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; +} +div.table-tabs > button.active-table-tab { + background: #F8981D; + color: #253441; +} +div.table-tabs > button.table-tab { + background: #4D7A97; + color: #FFFFFF; +} + +.row-color th, +.alt-color th { + font-weight:normal; +} +.overview-summary td, .member-summary td, .type-summary td, +.use-summary td, .constants-summary td, .deprecated-summary td, +.requires-summary td, .packages-summary td, .provides-summary td, +.uses-summary td, .system-properties-summary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.col-first, th.col-second, th.col-last, th.col-constructor-name, th.col-deprecated-item-name, .use-summary th, +.constants-summary th, .packages-summary th, td.col-first, td.col-second, td.col-last, .use-summary td, +.constants-summary td, .system-properties-summary th { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.col-first, th.col-second, th.col-last, th.col-constructor-name, th.col-deprecated-item-name, .constants-summary th, +.packages-summary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.col-first, th.col-first { + font-size:13px; +} +td.col-second, th.col-second, td.col-last, th.col-constructor-name, th.col-deprecated-item-name, th.col-last { + font-size:13px; +} +.constants-summary th, .packages-summary th { + font-size:13px; +} +.provides-summary th.col-first, .provides-summary th.col-last, .provides-summary td.col-first, +.provides-summary td.col-last { + white-space:normal; + font-size:13px; +} +.overview-summary td.col-first, .overview-summary th.col-first, +.requires-summary td.col-first, .requires-summary th.col-first, +.packages-summary td.col-first, .packages-summary td.col-second, .packages-summary th.col-first, .packages-summary th, +.uses-summary td.col-first, .uses-summary th.col-first, +.provides-summary td.col-first, .provides-summary th.col-first, +.member-summary td.col-first, .member-summary th.col-first, +.member-summary td.col-second, .member-summary th.col-second, .member-summary th.col-constructor-name, +.type-summary td.col-first, .type-summary th.col-first { + vertical-align:top; +} +.packages-summary th.col-last, .packages-summary td.col-last { + white-space:normal; +} +td.col-first a:link, td.col-first a:visited, +td.col-second a:link, td.col-second a:visited, +th.col-first a:link, th.col-first a:visited, +th.col-second a:link, th.col-second a:visited, +th.col-constructor-name a:link, th.col-constructor-name a:visited, +th.col-deprecated-item-name a:link, th.col-deprecated-item-name a:visited, +.constant-values-container td a:link, .constant-values-container td a:visited, +.all-classes-container td a:link, .all-classes-container td a:visited, +.all-packages-container td a:link, .all-packages-container td a:visited { + font-weight:bold; +} +.table-sub-heading-color { + background-color:#EEEEFF; +} +.alt-color, .alt-color th { + background-color:#FFFFFF; +} +.row-color, .row-color th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecated-content { + margin:0; + padding:10px 0; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.col-last div { + padding-top:0px; +} +td.col-last a { + padding-bottom:3px; +} +div.member-signature { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + margin:14px 0; + white-space: pre-wrap; +} +div.member-signature span.annotations { + white-space: pre-wrap; +} +div.member-signature span.type-parameters-long, +div.member-signature span.parameters, +div.member-signature span.exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +div.member-signature span.type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:0 10px 5px 0; + color:#474747; +} +.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .interface-name { + font-style:italic; +} +.deprecation-block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment, div.block div.block span.emphasized-phrase, +div.block div.block span.interface-name { + font-style:normal; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.result-item { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.result-highlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; + width:400px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:16px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:yellow; +} +.module-graph span { + display:none; + position:absolute; +} +.module-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0px 20px 5px 10px; + border: 1px solid #ededed; + background-color: #f8f8f8; +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/tag-search-index.js b/doc/tag-search-index.js new file mode 100644 index 0000000..0367dae --- /dev/null +++ b/doc/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/doc/type-search-index.js b/doc/type-search-index.js new file mode 100644 index 0000000..01c1ec1 --- /dev/null +++ b/doc/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes","u":"allclasses-index.html"},{"p":"pigeons","l":"App"},{"p":"pigeons","l":"Bird"},{"p":"pigeons","l":"Food"},{"p":"pigeons","l":"Park"},{"p":"pigeons","l":"Position"},{"p":"pigeons","l":"UI"}];updateSearchResults(); \ No newline at end of file diff --git a/src/pigeons/App.java b/src/pigeons/App.java new file mode 100644 index 0000000..4d0f2dd --- /dev/null +++ b/src/pigeons/App.java @@ -0,0 +1,26 @@ +package pigeons; +public class App { + /** + * Fonction Main permettant de lancer l'application + * + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + Park park = new Park(500, 500); + + new Bird(12, 123, park); + new Bird(102, 235, park); + new Bird(321, 421, park); + new Bird(126, 231, park); + new Bird(411, 34, park); + new Bird(245, 333, park); + + UI ui = new UI(park); + + while (true) { + ui.draw(); + Thread.sleep(1); + } + } +} diff --git a/src/pigeons/Bird.java b/src/pigeons/Bird.java new file mode 100644 index 0000000..a3bbde5 --- /dev/null +++ b/src/pigeons/Bird.java @@ -0,0 +1,184 @@ +package pigeons; +import java.awt.Color; + +/** + * Classe permettant de gérer un oiseau + * + * Implemente l'interface Runnable, ce qui permet d'executer les actions d'un + * oiseau dans un thread. + * + * @author Valentin THEDON + * @author Nathan AMSELLEM + * + * @version %I%, %G% + * @since 1.0 + */ + +public class Bird implements Runnable { + + /** + * Positiion de l'oiseau + */ + private Position position; + + /** + * Parc de rattachement de l'oiseau + */ + private Park park; + private boolean isAlive = true; + + /** + * Couleur d'un oiseau + */ + public static Color COLOR = Color.BLACK; + /** + * Temps de raffraichissement d'un oiseau (en ms) + */ + public static int REFRESH_TIME = 20; + /** + * Vitesse d'un oiseau + */ + public static int VELOCITY = 10; + + /** + * Constructeur de l'objet oiseau + * + * @param position position de l'oiseau + * @param park parc de rattachement de l'oiseau + */ + public Bird(Position position, Park park) { + this.position = position; + this.park = park; + this.park.addBird(this); + } + + /** + * Constructeur de l'objet oiseau + * + * @param x position sur l'axe des abscisses de l'oiseau + * @param y position sur l'axe des ordonnées de l'oiseau + * @param park parc de rattachement de l'oiseau + */ + public Bird(int x, int y, Park park) { + this(new Position(x, y), park); + } + + /** + * Detecte la nourriture la plus proche de l'oiseau + * + * @return Food L'objet representant la nourriture la plus proche + */ + public Food findNearestFood() { + Food nearestFood = null; + int minDistance = Integer.MAX_VALUE; + for (Food f : park.getFoods()) { + if (this.position.distance(f.getPosition()) < minDistance && f.isFresh()) { + nearestFood = f; + minDistance = this.position.distance(f.getPosition()); + } + } + return nearestFood; + } + + @Override + public void run() { + while (isAlive) { + Food nearestFood = findNearestFood(); + if (nearestFood != null) { + this.moveTo(nearestFood); + Food onFood = this.getOnFood(); + if (onFood != null && onFood.isFresh()) { + this.park.removeFood(onFood); + } + } + try { + Thread.sleep(REFRESH_TIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + /** + * Deplace un oiseau vers une position + * + * @param toMove La position vers laquelle nous devous nous deplacer + */ + public void moveTo(Position toMove) { + if (this.position.distance(toMove) <= ((VELOCITY * REFRESH_TIME * 0.01))) { + this.position.moveTo(toMove.getX(), toMove.getY()); + } else { + float x = this.position.getX() + + ((VELOCITY * REFRESH_TIME * 0.01f) + * ((toMove.getX() - this.position.getX()) / (float) this.position.distance(toMove))); + float y = this.position.getY() + + (((VELOCITY * REFRESH_TIME * 0.01f)) + * ((toMove.getY() - this.position.getY()) / (float) this.position.distance(toMove))); + this.position.moveTo(Math.round(x), Math.round(y)); + } + } + + /** + * Deplacer l'oiseau vers une nourriture + * + * @param food La nourriture vers laquelle l'oiseau doit se diriger + */ + public void moveTo(Food food) { + this.moveTo(food.getPosition()); + } + + /** + * Effraie l'oiseau, a pour but de le déplacer à une position aléatoire + */ + public void frighten() { + this.position.moveTo(Math.round((float) Math.random() * park.getWidth()), + Math.round((float) Math.random() * park.getHeight())); + ; + } + + /** + * @return Food Renvoie la nourriture sur laquelle nous nous situons, ou null si nous sommes sur aucune nourriture + */ + public Food getOnFood() { + for (Food f : park.getFoods()) { + if (this.position.distance(f.getPosition()) == 0) + return f; + } + return null; + } + + /** + * Obtenir le parc dans lequel l'oiseau evolue + * + * @return Le parc dans lequel l'oiseau évolue + */ + public Park getPark() { + return park; + } + + /** + * Définir un parc dans lequel l'oiseau evoluera + * + * @param park Le parc dans lequel l'oiseu évoluera + */ + public void setPark(Park park) { + this.park = park; + } + + /** + * + * @return boolean vrai si l'oiseau est en vie, faux sinon. + */ + public boolean isAlive() { + return this.isAlive; + } + + /** + * Obtenir la position de l'oiseau + * + * @return Position la position actuelle de l'oiseau + */ + public Position getPosition() { + return this.position; + } +} diff --git a/src/pigeons/Food.java b/src/pigeons/Food.java new file mode 100644 index 0000000..4b135ff --- /dev/null +++ b/src/pigeons/Food.java @@ -0,0 +1,140 @@ +package pigeons; + +import java.awt.Color; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Classe permettant de gérer une nourriture + * + * @author Valentin THEDON + * @author Nathan AMSELLEM + * + * @version %I%, %G% + * @since 1.0 + */ +public class Food { + + /** + * Position de la nourriture + */ + private Position position; + /** + * Consommabilité de la nourriture + */ + private boolean isFresh; + /** + * Temps restant de fraicheur de la nourriture + */ + private long freshTimeLeft = 2000; + /** + * Nombre de thread travaillant en ecriture sur l'objet + */ + private AtomicInteger numWriter = new AtomicInteger(); + + /** + * Couleur de la nourriture + * - Rouge si non consommable + * - Jaune si consommable + */ + public Color color; + + /** + * Constructeur de l'objet representant une nourriture + * + * @param position Position de la nourriture + */ + public Food(Position position) { + this.position = position; + + this.isFresh = true; + this.color = Color.YELLOW; + } + + /** + * Constructeur de l'objet representant une nourriture + * + * @param x position sur l'axe des abscisses de la nourriture + * @param y postiion sur l'axe des ordonnées de la nourriture + */ + public Food(int x, int y) { + this(new Position(x, y)); + } + + /** + * Obtenir la position de la nourriture + * + * @return position de la nourriture + */ + public Position getPosition() { + return position; + } + + /** + * Reduit le temps de fraicheur de la nourriture. + * Si le temps restants de fraicheur, la nourriture est consideré comme non + * consommable et la variable {@link Food#isFresh} vaut desormais + * true. Par ailleurs la couleur d'une nourriture devient rouge + * + * @param toReduce Temps à retirer du temps restant de fraicheur + */ + public synchronized void reduceFreshTimeLeft(long toReduce) { + this.numWriter.incrementAndGet(); + this.freshTimeLeft -= toReduce; + if (this.freshTimeLeft < 0) { + this.isFresh = false; + this.color = Color.RED; + } + this.numWriter.decrementAndGet(); + notifyAll(); + } + + /** + * Obtenir la couleur associé une nourriture + * + * @return La couleur associé à la nouritture, jaune si consommable, rouge sinon + */ + public Color getColor() { + return color; + } + + /** + * Obtenir le temps de fraicheur restant à une nourriture + * + * Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + * recuperer la propriété en étant sur que la variable n'est pas en cours de + * modification + * + * @return Temps de fraicheur restant à la nourriture + */ + public synchronized long getFreshTimeLeft() { + while (numWriter.get() != 0) + try { + wait(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return freshTimeLeft; + } + + /** + * Obtenir la consommabité de la nourriture + * + * Cette fonction est executé avec un verrou ce qui permet aux oiseaux de + * recuperer la propriété en étant sur que la variable n'est pas en cours de + * modification + * + * @return boolean + * + */ + public synchronized boolean isFresh() { + while (numWriter.get() != 0) + try { + wait(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return isFresh; + } +} diff --git a/src/pigeons/Park.java b/src/pigeons/Park.java new file mode 100644 index 0000000..f9c444b --- /dev/null +++ b/src/pigeons/Park.java @@ -0,0 +1,246 @@ +package pigeons; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.swing.JPanel; + +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.Color; +import java.awt.Graphics; + +/** + * Classe permettant de gérer un parc d'oiseaux + * + * Ce parc permet de gerer un parc contenant des oiseaux, vous pouvez nourrir + * ces oiseaux en cliquant sur votre interface, vos oiseaux seront effrayer de + * manière aléatoire. Ce park peut + * etre affiché à l'aide d'une JFrame. + * + * @author Valentin THEDON + * @author Nathan AMSELLEM + * + * @version %I%, %G% + * @since 1.0 + */ +public class Park extends JPanel implements MouseListener { + + /** + * Oiseaux présent dans le parc + */ + private ArrayList birds; + /** + * Nourritures présente dans le parc + */ + private ArrayList foods; + + /** + * Probabilité d'effrayer les oiseaux, decroit à chaque actualisation du parc + */ + private int frightenProbaility = 20000; + + /** + * Nombre de thread travaillant en ecriture sur l'objet + */ + private AtomicInteger numWriter = new AtomicInteger(); + + /** + * Constructeur de l'objet representant un parc + * + * @param width longueur du parc + * @param height hauteur du parc + */ + public Park(int width, int height) { + super(); + super.setSize(width, height); + + this.addMouseListener(this); + + this.birds = new ArrayList(); + this.foods = new ArrayList(); + } + + /** + * Obtenir les oiseaux du parc + * + * @return la liste contenant les oiseaux du parcs + */ + public ArrayList getBirds() { + return birds; + } + + /** + * Obtenir la nourriture du parc + * + * Cette méthode est executé avec un verrou ce qui permet aux oiseaux de + * recuperer la propriété en étant sur que la variable n'est pas en cours de + * modification + * + * @return la liste contenant les nourritures du parc + */ + public synchronized ArrayList getFoods() { + + try { + while (numWriter.get() != 0) { + wait(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + return foods; + } + + /** + * Ajouter une nourriture dans le parc + * + * Cette méthode est executé avec un verrou ce qui permet de modifier la + * propriété, tout en bloquant les lectures eventuelles de la propriété. + * L'ecriture est prioritaire sur la lecture. + * + * @param toAdd nourriture a ajouter au parc + */ + public synchronized void addFood(Food toAdd) { + numWriter.incrementAndGet(); + this.foods.add(toAdd); + numWriter.decrementAndGet(); + notifyAll(); + } + + /** + * Ajouter un oiseau dans le parc + * + * @param toAdd Oiseau à ajouter au parc + */ + public void addBird(Bird toAdd) { + this.birds.add(toAdd); + Thread t = new Thread(toAdd); + t.start(); + } + + /** + * Supprimer des nourriture présente sur le parc + * + * Cette méthode est executé avec un verrou ce qui permet de modifier la + * propriété, tout en bloquant les lectures eventuelles de la propriété. + * L'ecriture est prioritaire sur la lecture. + * + * @param foods liste de nourriture à supprimer du parc + */ + public synchronized void removeFoods(ArrayList foods) { + numWriter.incrementAndGet(); + this.foods.removeAll(foods); + numWriter.decrementAndGet(); + notifyAll(); + + } + + /** + * Supprimer une nourriture du parc + * + * Cette méthode est executé avec un verrou ce qui permet de modifier la + * propriété, tout en bloquant les lectures eventuelles de la propriété. + * L'ecriture est prioritaire sur la lecture. + * + * @param food nourriture à ajouter + */ + public synchronized void removeFood(Food food) { + numWriter.incrementAndGet(); + this.foods.remove(food); + numWriter.decrementAndGet(); + notifyAll(); + + } + + @Override + public void paintComponent(Graphics g) { + refreshPark(); + g.setColor(Color.WHITE); + g.fillRect(0, 0, this.getWidth(), this.getHeight()); + for (Bird b : birds) { + if (b.isAlive()) { + g.setColor(Bird.COLOR); + g.fillRect(b.getPosition().getX(), b.getPosition().getY(), 15, 15); + } + } + + synchronized (foods) { + try { + while (numWriter.get() != 0) { + wait(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + for (Food f : foods) { + g.setColor(f.getColor()); + g.fillOval(f.getPosition().getX(), f.getPosition().getY(), 5, 5); + } + } + } + + @Override + public void mouseClicked(MouseEvent e) { + Food f = new Food(e.getX(), e.getY()); + this.addFood(f); + for (Bird b : birds) { + synchronized (b) { + b.notify(); + } + } + } + + @Override + public void mousePressed(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseReleased(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO Auto-generated method stub + + } + + /** + * @param index index de liste de l'oiseau à supprimer + */ + public void removeBird(int index) { + this.birds.remove(index); + } + + /** + * Rafraichir le parc, supprime les nourriture périmés depuis un certain temps, + * réduit le temps de fraicheurs des nourritures et essaye d'effrayer les + * oiseaux du park + */ + private void refreshPark() { + ArrayList foodToRemove = new ArrayList(); + for (Food f : foods) { + f.reduceFreshTimeLeft(1); + if (f.getFreshTimeLeft() <= -5000) { + foodToRemove.add(f); + } + } + this.removeFoods(foodToRemove); + + if (Math.floor(Math.random() * (--frightenProbaility)) == 0) { + for (Bird b : birds) { + b.frighten(); + this.frightenProbaility = 20000; + } + } + + } +} diff --git a/src/pigeons/Position.java b/src/pigeons/Position.java new file mode 100644 index 0000000..e0837bc --- /dev/null +++ b/src/pigeons/Position.java @@ -0,0 +1,109 @@ +package pigeons; + +/** + * Classe representant un position + * + * @author Valentin THEDON + * @author Nathan AMSELLEM + * + * @version %I%, %G% + * @since 1.0 + */ +public class Position { + + /** + * Coordonnée sur l'axe des abscisses + */ + private int x; + /** + * Coodonnée sur l'axe des ordonées + */ + private int y; + + /** + * Constructeur de l'objet representant une position + * + * @param x position sur l'abscisse + * @param y position sur l'ordonée + */ + public Position(int x, int y) { + this.x = x; + this.y = y; + } + + /** + * Constructeur de l'objet representant une position + * + * Position fixé à l'origine (0 ; 0) + */ + public Position() { + this(0, 0); + } + + /** + * Calculer la distance entre 2 positions + * + * @param position postion distante + * @return distance entre les 2 points + */ + public int distance(Position position) { + return (int) Math.sqrt(Math.pow(Math.abs(this.x - position.x), 2) + Math.pow(Math.abs(this.y - position.y), 2)); + } + + /** + * Déplacer la position + * + * @param x nouvelle position sur l'axe des abscisses + * @param y nouvelle position sur l'axe des abscisses + */ + public void moveTo(int x, int y) { + this.x = x; + this.y = y; + } + + /** + * Déplacer la position + * + * @param toMove nouvelle position + */ + public void moveTo(Position toMove) { + this.moveTo(toMove.getX(), toMove.getY()); + } + + /** + * Obtenir la position sur l'axe des abscisses + * + * @return coordonnée sur l'abscisses + */ + public int getX() { + return this.x; + } + + /** + * Définir une coordonée d'abscisse + * + * @param x nouvelle coordonnée d'abscisse + */ + public void setX(int x) { + this.x = x; + } + + /** + * Obtenir la position sur l'axe des ordonées + * + * @return coordonnée sur l'ordonnée + */ + public int getY() { + return this.y; + } + + /** + * Définir une coordonée d'ordonée + * + * @param y nouvelle coordonnée d'ordonée + */ + public void setY(int y) { + this.y = y; + } + +} diff --git a/src/pigeons/UI.java b/src/pigeons/UI.java new file mode 100644 index 0000000..2607997 --- /dev/null +++ b/src/pigeons/UI.java @@ -0,0 +1,65 @@ +package pigeons; +import javax.swing.JFrame; + +/** + * Classe d'interface utilisateur de l'application + * + * @author Valentin THEDON + * @author Nathan AMSELLEM + * + * @version %I%, %G% + * @since 1.0 + */ +public class UI extends JFrame { + + /** + * Parc de l'application + */ + private Park park; + + /** + * Constructeur de l'interface graphique + * + * La taille de l'interface sera la même que celle du parc + * + * @param park le parc attaché à cette interface + */ + public UI(Park park) { + super(); + this.park = park; + this.setSize(park.getSize()); + + this.setVisible(true); + this.setLocationRelativeTo(null); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setTitle("Pigeons"); + + this.setContentPane(park); + } + + /** + * Obtenir le park associé à l'intefrace graphique + * + * @return parc de l'application + */ + public Park getPark() { + return park; + } + + /** + * Définir un parc pour l'interface graphique + * + * @param park parc de l'application + */ + public void setPark(Park park) { + this.park = park; + } + + /** + * Dessiner l'interface + */ + public void draw() { + this.park.repaint(); + } + +}