diff --git a/c/CtrlCheckLinks.rb b/c/CtrlCheckLinks.rb index 52d37b5..040c03f 100644 --- a/c/CtrlCheckLinks.rb +++ b/c/CtrlCheckLinks.rb @@ -1,22 +1,23 @@ +# Controleur de la vérification de la validité des liens ainsi que les vues correspondantes class CtrlCheckLinks - def saisie - liste_dir = "../fichier/".liste_rep - #Va checher les fichiers et arborecenses dans le dossier fichier (Méthode dans ReadFolder) - Gtk.init - @v1 = Vue1.new(liste_dir, self) - @v1.getWindow.show_all + #Controleur de la saisie pour vérification de lien + def saisie(type) + @v1 = Vue1.new(self, 'Saisie nom fichier', type) #creation vue principal + @v1.getWindow.show_all # affichage Gtk.main - return @urls end - - def recupUrls(str) + #Controleur recuperation et verification de liens dans 1 fichiers + def recupUrls(str) f = ReadFile.new(str) @urls = f.getUrls self.vueResult(self.verifLiens(@urls), str) + s = CtrlHistoLink.new #on enregistre dans l'histo le verif du lien + s.sauv(str, @urls) + return @urls end - - def recupUrlsDoss(str) + #Controleur recuperation et verification de liens dans 1 dossier + def recupUrlsDoss(str) d = Dir.open(str) liste_exclus = [".", ".."] liste_dir = d.sort - liste_exclus @@ -24,18 +25,18 @@ class CtrlCheckLinks if (File.ftype(str + "/" + fichier) == "file") self.recupUrls(str + "/" + fichier) end - } + } end - - def destructionFen + #Controleur permettant de detruire la vue principal + def destructionFen @v1.getWindow.destroy Gtk.main_quit end - - def verifLiens(urls) - resultats = "" - urls.each { |n| - p = Net::Ping::HTTP.new n , 80 + #Controleur de verification de liens + def verifLiens(urls) + resultats = "" + urls.each { |n| # pour chaque urls on realise un ping -> mise des resultats en chaine de caractere + p = Net::Ping::HTTP.new n , 80, 5 if p.ping? resultats += "#{n} est vivant\n" else @@ -43,16 +44,13 @@ class CtrlCheckLinks end } return resultats + end - - def vueResult(resultats, nom) + #Controleur permettant d'afficher la vue secondaire d'affichage de resultat + def vueResult(resultats, nom) v = VueResult.new(resultats, nom) v.getWindow.show_all Gtk.main end - - - - end \ No newline at end of file diff --git a/c/CtrlHistoLink.rb b/c/CtrlHistoLink.rb new file mode 100644 index 0000000..4c79215 --- /dev/null +++ b/c/CtrlHistoLink.rb @@ -0,0 +1,30 @@ +#Classe permettant de g"rer l'historique de fichier traité +class CtrlHistoLink + #Saisie pour vérification de lien stocké en historique + def saisie + @v = VueHisto.new(self,"Historique") #creation vue + @v.getWindow.show_all # affichage + Gtk.main + return @urls + end + #Sauvegarde les liens dans un fichier pour historique + def sauv(fileName, urls) + fileName = File.basename(fileName) + f = File.new("../sauv/#{fileName}", "w+") + f.write(urls) + f.close + end + + #Permet de rejouer les liens d'un fichier + def rejouer(fileName) + r = CtrlCheckLinks.new + @urls = r.recupUrls(fileName) + end + + #Controleur permettant de detruire la vue historique + def destructionFen + @v.getWindow.destroy + Gtk.main_quit + end + +end \ No newline at end of file diff --git a/c/Main.rb b/c/Main.rb index 2dc20fe..3d9374d 100755 --- a/c/Main.rb +++ b/c/Main.rb @@ -6,15 +6,50 @@ require 'net/ping' #lib netwotk #include require './CtrlCheckLinks' +require './CtrlHistoLink' require '../m/ReadFile' -require '../m/ReadFolder' require '../v/Vue1' require '../v/VueResult' +require '../v/VueMenu' +require '../v/VueHisto' - c = CtrlCheckLinks.new - urls = c.saisie -while urls!=nil - c = CtrlCheckLinks.new - urls = c.saisie +#Classe principal du controleur main +class Main + # Controleur du menu de départ + def menu + + @v = VueMenu.new(self,"Menu") + @v.getWindow.show_all # affichage + Gtk.main + end + + # Controleur historique + def histo + c = CtrlHistoLink.new + urls = c.saisie + end + + # Controleur vérification d'un fichier + def newVerifFile + c = CtrlCheckLinks.new + urls = c.saisie(1) + end + + # Controleur vérification d'un dossier + def newVerifDossier + c = CtrlCheckLinks.new + urls = c.saisie(0) + end + + # Controleur permettant de detruire la vue menu + def destructionMenu + @v.getWindow.destroy + Gtk.main_quit + end + end + +c = Main.new +c.menu + print "Termine\n" \ No newline at end of file diff --git a/fichier/haut.html b/fichier/haut.html index 9296841..35290c4 100644 --- a/fichier/haut.html +++ b/fichier/haut.html @@ -13,9 +13,9 @@
diff --git a/groupe3.html b/groupe3.html deleted file mode 100644 index 3a408bb..0000000 --- a/groupe3.html +++ /dev/null @@ -1,1860 +0,0 @@ - - - - - - -Etude de cas 2013-2014 (Agile) - - - - - -
-
-
-
- - - -
-Warning - -

Cette étude de cas donne lieu à une évaluation. Appliquez-vous!

-
-
-
-
-
-
-

1. Contexte

-
-
-

1.1. Organisation

-

Ce projet Agile d’ACSI est prévu pour durer 4 semaines, à raison de 3h par semaine -de séances en TD avec machines.

-

Le déroulement des 4 semaines est approximativement le suivant :

-
-
-graphviz/agile.dot.png -
-
Figure 1. Déroulement du projet agile sur 4 semaines
-
-
-
-

1.2. Environnement logiciel

-
-
-Identification -
-
-

-Vous pouvez en profiter pour changer de groupe par rapport au 1er projet. -

-
-
-Gestion de projet -
-
-

-Chaque groupe continuera à utiliser le gestionnaire de projet Redmine : http://algec.iut-blagnac.fr/redmine/. -De nouveaux projets vous seront affectés au 1er TD de la semaine 50. -Dans ces nouveaux projets, le plug-in "Scrum" sera activé pour vous permettre de mettre en oeuvre -les principes ailes vus en cours avec M. Inglebert. -

-
-
-Gestion de version -
-
-

-Chaque groupe est libre d’utiliser un dépôt qui lui est propre, mais il devra -être accessible par l’enseignant. Pour ceux qui n’ont pas de dépôt l’enseignant -vous en fournira un. En faire la demande via Redmine. Vous pouvez utiliser le même -dépôt que le 1er projet mais en ayant un répertoire différent. -

-
-
-Outils de modélisation -
-
-

-Les outils de modélisation sont libres, mais devront être utilisés (plantuml, starUML, etc.). -Pour chaque étape demandées il vous faudra remettre vos diagrammes en respectant une nomenclature -bien précise. -

-
-
-
- - - -
-Warning - -

Le respect de la nomenclature des fichiers à remettre est indispensable. Faites des tests et -vérifiez. Ces fichiers seront récupérés par des scripts…

-
-
-
-
-

1.3. Divers

-

Quelques règles et informations concernant le sujet :

-
    -
  • -

    -Chaque groupe de TD de 2ème année traite un sujet différent. -

    -
  • -
  • -

    -Dans un même groupe, vous pouvez vous aider entre équipes! -

    -
  • -
  • -

    -Les commentaires sur vos modèles intermédiaires seront donnés à chaque groupe au fur et à mesure. -

    -
  • -
-
-
-
-
-

2. Exposé du CCU pour le projet du Groupe3

-
-

Vous devez réaliser un logiciel pour le client John Doe, appelé CURLING (Check if my URL LINks are Good).

-

-images/curling.png -

-
-

2.1. Objectifs et contexte

-

John Doe écrit de nombreux documents et supports de cours qui incluent des références à des documents -web (URLs). Il n’a pas le temps de vérifier systématiquement si ces URLs sont toujours valides (si le -document web est toujours accessible). Ils vous embauche pour lui réaliser une moulinette qui réalise -cette vérification pour lui.

-
-
-

2.2. Besoins élémentaires

-

A minima, l’application demandera à John Doe le nom d’un fichier (texte) et fournit en retour -la liste des URLs défectueuses. John Doe a découvert dans une revue le paradigme MVC et vous demande -de l’appliquer.

-

Dans l’idéal, l’application maintiendra une liste de documents avec des informations du type : dernière -fois que le fichier a été vérifié, type (e.g., .html, .txt, .docx.), nome (e.g., /Users/JohnDoe/docs/test.txt).

-
-
-

2.3. Besoins optionnels

-

On pourra imaginer qu’au lieu de fournir un nom de fichier, John Doe fournit un répertoire -(et que l’application CURLING vérifie toutes les URLs de tous les fichiers texte de ce répertoire).

-

On pourra aussi imaginer que John Doe puisse sélectionner un fichier, ou un type de fichier dans une liste -de documents (déjà checkés par exemple).

-
-
-

2.4. Exemples et cas de test

-

Voici un exemple de fichier que John Doe veut pouvoir vérifier: definition.txt.

-
-
-

2.5. Glossaire

-
-
-MVC -
-
-

- Model View Controler -

-
-
-URL -
-
-

- Universal Ressource Locator -

-
-
-
-
-
-
-
-

3. Planning

-
-

Le principe du projet ACSI est que vous ne devriez pas à avoir à travailler (trop) en plus -des 2 séances de TD hebdomadaires. -Vous allez travailler par groupe de 3 ou 4.

-
- - - -
-Tip - -

Dans cette version "Agile" du projet, "déposer" régulièrement vos productions -est obligatoire car intégré à la démarche itérative.

-
-
-

Calendrier prévisionnel des "sprints"

-
    -
  • -

    -Semaine 50 (9 au 13 décembre 2013) - Sprint 0 -

    -
      -
    • -

      -Choix de l’infrastructure finale (langage de programmation, bases, etc.) -

      -
    • -
    • -

      -Analyse des besoins du client (backlog de produit) -

      -
    • -
    • -

      -Découpage en tâches des premières stories -

      -
    • -
    • -

      -Appropriation du plug-in Scrum de Redmine -

      -
    • -
    • -

      -Validation par le product owner (le client, votre prof bien aimé) -

      -
    • -
    -
  • -
  • -

    -Semaine 51 (16 au 20 décembre 2013) - Sprint 1 -

    -
      -
    • -

      -Choix des fonctionnalités à traiter dans le sprint -

      -
    • -
    • -

      -Découpage en tâches et affectation aux membres du groupe -

      -
    • -
    • -

      -Réalisation des tâches (test, code, et documentation) -

      -
    • -
    • -

      -Bilan avec le client (montrer l’appli au client + rétrospective équipe) -

      -
    • -
    -
  • -
-
- - - -
-Warning - -

Ce sprint important sera en "séances libres", votre client bien aimé étant absent -toute la semaine. Bilan client vendredi.

-
-
-
    -
  • -

    -Semaine 2 (6 au 10 janvier 2014) - Sprint 2 (étapes idem) -

    -
  • -
  • -

    -Semaine 3 (13 au 17 janvier 2014) - Sprint 3 (étapes idem) -

    -
  • -
  • -

    -Fin de la 2ème séance de TD de la semaine 3 (13 au 17 janvier 2014) : -

    -
      -
    • -

      -Démo de l’application au client -

      -
    • -
    • -

      -Code java/ruby documenté (commentaires styles javadoc/rdoc) sur votre dépot -

      -
    • -
    • -

      -Captures d'écran réelles (dans les documents redmine) -

      -
    • -
    • -

      -Rapport = Wiki de votre projet (redmine) -

      -
    • -
    -
  • -
-
-
-
-
-

4. Dossier final à remettre

-
-

Seul le Wiki servira de "dossier final". L’ensemble des activités -(sprint, tâches, etc.) tracées dans Redmine fera aussi partie du -"dossier". Vous n’avez rien à rédiger de particulier sur ces aspects -de gestion de projet, mais vous avez à sérieusement renseigner chaque activité -de chaque membre à chaque TD.

-
-
-
-

5. Evaluation et critères

-
-

L'évaluation portera principalement sur les critères suivants :

- - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 1. Critères
Critère Type de critère Poids approximatif

WiKi

Clarté, pertinence

10%

Respect des sprints et principes agiles

Correction, pertinence

20%

Diagramme des UC

Correction, pertinence

5%

Diagramme des Classes Métier

Correction, pertinence

5%

SNI

Correction, pertinence

10%

Diagramme de Séquence Système (2 UC au moins)

Correction, pertinence

5%

Diagramme de Séquence « normal » (au moins 1 UC)

Correction, pertinence

10%

Cohérence inter-modèles (SNI/UC/DC, UC/DSS/DS/DCP)

Correction, pertinence

5%

Respect des nomenclatures, dépots SVN, Wiki, etc~

Correction, pertinence

10%

Code exécutable, documentation et tests

Correction, documentation

20%

-
- - - -
-Tip - -

Vous pouvez insérer une section "auto-évaluation" dans votre rapport, qui reprend cette grille et -vous permet de vous auto-évaluer.

-
-
-
-
-
-

6. Annexes

-
-
-

6.1. Acronymes

-
-
-DC -
-
-

-Diagramme de Classe -

-
-
-DS -
-
-

-Diagramme de Séquence -

-
-
-DSS -
-
-

-Diagramme de Séquence Système -

-
-
-MVC -
-
-

-Model View Controler -

-
-
-SNI -
-
-

-Schéma de Navigation d'Interface -

-
-
-UC -
-
-

-Diagramme des Cas Utilisateurs -

-
-
-
-
-

Pour l’instant ce document est libre d’utilisation et géré par la Licence Creative Commons. - - -Licence Creative Commons - - -licence Creative Commons Paternité - Partage à l'Identique 3.0 non transposé.

-
-
-
-
-
- - - - - \ No newline at end of file diff --git a/m/ReadFile.rb b/m/ReadFile.rb index 3605bae..e6af677 100644 --- a/m/ReadFile.rb +++ b/m/ReadFile.rb @@ -1,16 +1,18 @@ +#Classe permettant l'acces et la recuperation des données dans les fichiers class ReadFile - def initialize(pFic) + #Ouverture d'un fichier en lecture + def initialize(pFic) @fic = File.open(pFic, "r") end - - def getALL #revoit tout le contenu d'un fichier sous forme d'une chaine de caractere + #Revoit tout le contenu d'un fichier sous forme d'une chaine de caractere + def getALL all = @fic.read return all end - - def getUrls #sort les URLs d'un fichier + #Sort les URLs d'un fichier + def getUrls txt = self.getALL - url = txt.scan(/http[^\s]*/) + url = URI::extract(txt, /http(s)?/) return url end end diff --git a/m/ReadFolder.rb b/m/ReadFolder.rb deleted file mode 100644 index 8ac7640..0000000 --- a/m/ReadFolder.rb +++ /dev/null @@ -1,33 +0,0 @@ -class String #ajout de la méthode à la classe String - def liste_rep(espacement = "") - #initialisation - i=0 - fich_dir = [""] - all_dir = "" - liste_exclus = [".", ".."] - d = Dir.open(self) - - #sort les fichiers sans . et .. qui nous interresse pas - liste_dir = d.sort - liste_exclus - - liste_dir.each { |fichier| #pour chaque fichier touvé - case File.ftype(self+fichier) - when "directory" #si on trouve un dossier on l'ajoute et on cherche son contenu avec un apelle recursif - fich_dir[i] = "#{espacement} + #{fichier}/ \n" - espacement += " " - fich_dir[i+1] = (self + fichier + "/").liste_rep(espacement) - espacement = espacement[0, espacement.length-4] - i+=2 - when "file" # si c'est un fichier on l'ajoute simplement - fich_dir[i] = "#{espacement} - #{fichier} \n" - i+=1 - end - - } - - fich_dir.each { |n| - all_dir += n - } - return all_dir; #return l'arboressence des fichiers sous forme d'une chaine de caractere - end -end \ No newline at end of file diff --git a/sauv/aa b/sauv/aa new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/sauv/aa @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/sauv/ff b/sauv/ff new file mode 100644 index 0000000..7adf731 --- /dev/null +++ b/sauv/ff @@ -0,0 +1 @@ +["https://www.google.fr", "http://www.ndqjkdjqdkjz.com", "http://www.a.com"] \ No newline at end of file diff --git a/v/Vue1.rb b/v/Vue1.rb index 510923c..673609a 100644 --- a/v/Vue1.rb +++ b/v/Vue1.rb @@ -1,33 +1,28 @@ - +# Classe creation de la vue de sélection de fichier ou dossier class Vue1 - def initialize(liste_dir, ctrl) + # Creation de la vue + def initialize(ctrl, title, type) @ctrl = ctrl #fenenetre generale @window = Gtk::Window.new - @window.set_title('Saisie nom fichier') + @window.set_title(title) #declaration des differents widgets vb = Gtk::VBox.new(true, 6) - top = Gtk::HBox.new(false, 6) bot = Gtk::HBox.new(false, 6) - ###Partie supérieur fenetre### - - #Creation du label de l'arbo - dir = Gtk::Label.new(liste_dir) - top.pack_start(dir, false, true, 6) - vb.pack_start(top) - ############################## - - - ###Partie Inferieur fenetre### - #creation label pour la saisie - lab = Gtk::Label.new('Chemin') + lab = Gtk::Label.new('Chemin :') bot.pack_start(lab, false, true, 6) #creation champ de saisie - @nom = Gtk::Entry.new + #@nom = Gtk::Entry.new + if (type == 1) + @nom = Gtk::FileChooserButton.new("choisir un fichier", Gtk::FileChooser::ACTION_OPEN) + else + @nom = Gtk::FileChooserButton.new("choisir un dossier ", Gtk::FileChooser::ACTION_SELECT_FOLDER) + end + @nom.set_current_folder("../fichier") bot.pack_start(@nom, true, true) #creation bouton de validation @@ -43,25 +38,27 @@ class Vue1 self.listenerDestroy end - def getWindow + def getWindow #:nodoc:# return @window end - def getEntry + def getEntry #:nodoc:# return @chaine end - def listenerDestroy # Listener fermeture fenetre - @window.signal_connect('delete_event') { - @ctrl.destructionFen + # Listener fermeture fenetre + def listenerDestroy + @window.signal_connect('destroy') { + @ctrl.destructionFen } end - - def listenerBouton #listener appuie validation + + #Listener appuie bouton validation + def listenerBouton @chaine = " " @b.signal_connect('clicked'){ - @chaine = @nom.text.to_s - if (@chaine =="") + @chaine = @nom.filename + if (@chaine =="") #gestion saisie vide m = Gtk::MessageDialog.new(Gtk::Window.new, Gtk::Dialog::DESTROY_WITH_PARENT, Gtk::MessageDialog::ERROR, Gtk::MessageDialog::BUTTONS_CLOSE, @@ -69,16 +66,12 @@ class Vue1 m.run m.destroy else - @chaine = "../fichier/" + @chaine - if(File.directory?(@chaine)) - + if(File.directory?(@chaine)) #si c'est un dossier utilisation du controleur adéquat @ctrl.recupUrlsDoss(@chaine) - - else - if(File.exist?(@chaine)) + if(File.exist?(@chaine)) #si c'est un fichier existant utilisation du controleur adéquat @ctrl.recupUrls(@chaine) - else + else #gestion saisie invalide d = Gtk::MessageDialog.new(Gtk::Window.new, Gtk::Dialog::DESTROY_WITH_PARENT, Gtk::MessageDialog::ERROR, Gtk::MessageDialog::BUTTONS_CLOSE, diff --git a/v/VueHisto.rb b/v/VueHisto.rb new file mode 100644 index 0000000..aec9486 --- /dev/null +++ b/v/VueHisto.rb @@ -0,0 +1,78 @@ +# Classe creation de la vue permettant d'aceder a l'historique +class VueHisto + # Creation de la vue + def initialize(ctrl, title) + @ctrl = ctrl + #fenenetre generale + @window = Gtk::Window.new + @window.set_title(title) + + #declaration des differents widgets + vb = Gtk::VBox.new(true, 6) + bot = Gtk::HBox.new(false, 6) + + #creation label pour la saisie + lab = Gtk::Label.new('Chemin du fichier a rejouer :') + bot.pack_start(lab, false, true, 6) + + #creation champ de saisie + @nom = Gtk::FileChooserButton.new("choisir un fichier", Gtk::FileChooser::ACTION_OPEN) + @nom.set_current_folder("../sauv") + bot.pack_start(@nom, true, true) + + #creation bouton de validation + @b = Gtk::Button.new('OK') + bot.pack_start(@b) + vb.pack_start(bot) + ############################## + + @window.add(vb) + + # Abbonement fenetre au Listener + self.listenerBouton + self.listenerDestroy + end + + def getWindow #:nodoc:# + return @window + end + + def getEntry #:nodoc:# + return @chaine + end + + # Listener fermeture fenetre + def listenerDestroy + @window.signal_connect('destroy') { + @ctrl.destructionFen + } + end + + #Listener appuie bouton validation + def listenerBouton + @chaine = " " + @b.signal_connect('clicked'){ + @chaine = @nom.filename + if (@chaine =="") #gestion saisie vide + m = Gtk::MessageDialog.new(Gtk::Window.new, Gtk::Dialog::DESTROY_WITH_PARENT, + Gtk::MessageDialog::ERROR, + Gtk::MessageDialog::BUTTONS_CLOSE, + "Erreur : Veuillez saisir un fichier !") + m.run + m.destroy + else + if(File.exist?(@chaine)) #si c'est un fichier existant utilisation du controleur adéquat + @ctrl.rejouer(@chaine) + else #gestion saisie invalide + d = Gtk::MessageDialog.new(Gtk::Window.new, Gtk::Dialog::DESTROY_WITH_PARENT, + Gtk::MessageDialog::ERROR, + Gtk::MessageDialog::BUTTONS_CLOSE, + "Erreur : Fichier inexistant !") + d.run + d.destroy + end + + end + } + end +end diff --git a/v/VueMenu.rb b/v/VueMenu.rb new file mode 100644 index 0000000..179c0b8 --- /dev/null +++ b/v/VueMenu.rb @@ -0,0 +1,66 @@ +#Classe creation vue du menu +class VueMenu + # Creation de la vue + def initialize(ctrl, title) + @ctrl = ctrl + #fenenetre generale + @window = Gtk::Window.new + @window.set_title(title) + + #declaration des differents widgets + vb = Gtk::VBox.new(true, 6) + top = Gtk::HBox.new(false, 6) + + + + #creation boutons + @newFile = Gtk::Button.new('Nouveau test fichier') + @newDoss = Gtk::Button.new('Nouveau test dossier') + @histo = Gtk::Button.new('Histo') + + top.pack_start(@newFile) + top.pack_start(@newDoss) + top.pack_start(@histo) + vb.pack_start(top) + ############################## + + @window.add(vb) + + # Abbonement fenetre au Listener + self.listenerBoutonNewFile + self.listenerBoutonNewDossier + self.listenerBoutonHisto + self.listenerDestroy + end + + def getWindow #:nodoc:# + return @window + end + #Listener appuie bouton nouvelle vérification de 1 fichier + def listenerBoutonNewFile + @newFile.signal_connect('clicked'){ + @ctrl.newVerifFile + } + end + #Listener appuie bouton validation nouvelle vérification de 1 dossier + def listenerBoutonNewDossier + @newDoss.signal_connect('clicked'){ + @ctrl.newVerifDossier + } + end + #Listener appuie bouton validation pour rejouer un fichier dans de l'historique + def listenerBoutonHisto + @histo.signal_connect('clicke d'){ + @ctrl.histo + } + end + # Listener fermeture fenetre Menu + def listenerDestroy + @window.signal_connect('destroy') { + @ctrl.destructionMenu + } + end + + + +end \ No newline at end of file diff --git a/v/VueResult.rb b/v/VueResult.rb index 2ab75a0..41dd848 100644 --- a/v/VueResult.rb +++ b/v/VueResult.rb @@ -1,11 +1,16 @@ + # Classe creation de la vue des resultats class VueResult + # Creation de la vue def initialize(liste_result, nom) + #fenenetre generale @window = Gtk::Window.new @window.set_title(nom) + #declaration des differents widgets vb = Gtk::VBox.new(true, 6) vh = Gtk::HBox.new(false, 6) + #creation label resultat if(liste_result != "") res = Gtk::Label.new(liste_result) else @@ -14,18 +19,20 @@ vh.pack_start(res, false, true, 6) vb.pack_start(vh) + # Abbonement fenetre au Listener @window.add(vb) self.listenerDestroy end - def getWindow + def getWindow #:nodoc:# return @window end - def listenerDestroy + # Listener fermeture Resultat + def listenerDestroy @window.signal_connect('destroy') { - @window.destroy - Gtk.main_quit + @window.destroy + Gtk.main_quit } end end