# CheckButton (JavaScript)

Taryn Fox
jewelfox@fursona.net 2012
Une case qui peut être cochée ou décochée

# CaseAcocher

Cette application possède une CaseAcocher. Selon que la case soit cochée ou non dicte l'affichage ou non de quelque chose dans la barre de titre de la fenêtre.

Une CaseAcocher envoie le signal d'inversion « toggled » quand elle cochée ou décochée. Pendant qu'elle est cochée, la valeur de la propriété « active » est sur vrai et quand elle ne l'est pas, elle est sur faux.

# Bibliothèques à importer

#!/usr/bin/gjs

const Gio = imports.gi.Gio; const Gtk = imports.gi.Gtk; const Lang = imports.lang;

Ce sont les bibliothèques que nous devons importer pour faire fonctionner cette application. N'oubliez pas que la ligne qui informe GNOME que nous allons utiliser Gjs doit toujours se trouver au début.

# Création de la fenêtre de l'application

const CheckButtonExample = new Lang.Class({ Name: 'CheckButton Example',

// Create the application itself _init: function() { this.application = new Gtk.Application({ application_id: 'org.example.jscheckbutton', flags: Gio.ApplicationFlags.FLAGS_NONE });

// Connect 'activate' and 'startup' signals to the callback functions this.application.connect('activate', Lang.bind(this, this._onActivate)); this.application.connect('startup', Lang.bind(this, this._onStartup)); },

// Callback function for 'activate' signal presents window when active _onActivate: function() { this._window.present(); },

// Callback function for 'startup' signal builds the UI _onStartup: function() { this._buildUI (); },

Tout le code de cet exemple va dans la classe CheckButtonExample. Le code ci-dessus crée une Gtk.Application pour nos éléments graphiques et la fenêtre qui les contient.

// Build the application's UI _buildUI: function() {

// Create the application window this._window = new Gtk.ApplicationWindow({ application: this.application, window_position: Gtk.WindowPosition.CENTER, default_height: 100, default_width: 300, border_width: 10, title: "CheckButton Example"});

Mettons tout le code nécessaire à la création de l'interface utilisateur dans la fonction _buildUI. Créons maintenant une nouvelle Gtk.ApplicationWindow pour y mettre tous nos éléments graphiques.

# Création de la CaseAcocher

// Create the check button this._button = new Gtk.CheckButton ({label: "Show Title"}); this._window.add (this._button);

// Have the check button be checked by default this._button.set_active (true);

// Connect the button to a function that does something when it's toggled this._button.connect ("toggled", Lang.bind (this, this._toggledCB));

This code creates the checkbutton itself. The label next to the checkbutton is created by giving the checkbutton the "label" property and assigning a string value to it. Since this checkbutton toggles whether the window title is on or off, and the window title will be on to start with, we want the box to be checked by default. Whenever the user checks or unchecks the box, we call the _toggledCB function.

// Show the window and all child widgets this._window.show_all(); },

Ce code termine la création de l'interface utilisateur en indiquant à la fenêtre de s'afficher toute seule avec tous ses éléments graphiques enfants (il n'y a que la CaseAcocher dans cet exemple).

# Fonction prenant en charge l'inversion de la CaseAcocher

_toggledCB: function () {

// Make the window title appear or disappear when the checkbox is toggled if (this._button.get_active() == true) this._window.set_title ("CheckButton Example"); else this._window.set_title ("");

}

});

Quand la CaseAcocher est décochée, nous voulons que le titre de la fenêtre disparaisse. Quand elle est cochée, nous voulons qu'elle réapparaisse. Pour savoir quel est son état, il nous faut la tester. C'est l'instruction if ou else qui va appeler la méthode get_active() de la CaseAcocher et qui fera ce travail.

// Run the application let app = new CheckButtonExample (); app.application.run (ARGV);

Enfin, nous créons un nouvel exemple de la classe CheckButtonExample et démarrons l'application.

# Exemple complet du code

#!/usr/bin/gjs

const Gio = imports.gi.Gio; const Gtk = imports.gi.Gtk; const Lang = imports.lang;

const CheckButtonExample = new Lang.Class({ Name: 'CheckButton Example',

// Create the application itself _init: function() { this.application = new Gtk.Application({ application_id: 'org.example.jscheckbutton', flags: Gio.ApplicationFlags.FLAGS_NONE });

// Connect 'activate' and 'startup' signals to the callback functions this.application.connect('activate', Lang.bind(this, this._onActivate)); this.application.connect('startup', Lang.bind(this, this._onStartup)); },

// Callback function for 'activate' signal presents window when active _onActivate: function() { this._window.present(); },

// Callback function for 'startup' signal builds the UI _onStartup: function() { this._buildUI (); },

// Build the application's UI _buildUI: function() {

// Create the application window this._window = new Gtk.ApplicationWindow({ application: this.application, window_position: Gtk.WindowPosition.CENTER, default_height: 100, default_width: 300, border_width: 10, title: "CheckButton Example"});

// Create the check button this._button = new Gtk.CheckButton ({label: "Show Title"}); this._window.add (this._button);

// Have the check button be checked by default this._button.set_active (true);

// Connect the button to a function that does something when it's toggled this._button.connect ("toggled", Lang.bind (this, this._toggledCB));

// Show the window and all child widgets this._window.show_all(); },

_toggledCB: function () {

// Make the window title appear or disappear when the checkbox is toggled if (this._button.get_active() == true) this._window.set_title ("CheckButton Example"); else this._window.set_title ("");

}

});

// Run the application let app = new CheckButtonExample (); app.application.run (ARGV);

# Documentation approfondie

Gtk.Application

Gtk.ApplicationWindow

Gtk.CheckButton