Aller au contenu

Programmation GTK2 en Pascal/GtkColorSelectionDialog

Un livre de Wikilivres.
Programmation GTK2 en Pascal

Le contrôle GtkFileSelection est une boîte de dialogue qui permet de demander à l'utilisateur de sélectionner un fichier particulier. Ce contrôle ne s'occupe de la récupération du nom du fichier.

Hiérarchie
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkContainer
              └─GtkBin
                  └─GtkWindow
                      └─GtkDialog
                          └─GtkColorSelectionDialog

Utilisation de base

[modifier | modifier le wikicode]

La fonction de création est simple :

function gtk_color_selection_dialog_new(title : Pgchar) : PGtkWidget;

Le paramètre title est le titre de votre boîte de dialogue : vous pouvez ainsi l'appeler suivant vos besoins « Choisir la couleur de fond de fenêtre...», etc.

Puisque ce nouveau contrôle dérive directement du contrôle GtkDialog, il nous suffit d'utiliser la fonction :

function gtk_dialog_run(dialog : PGtkDialog) : gint;

La valeur de retour est importante pour savoir si l'utilisateur a sélectionné une couleur ou pas.

Récupération de la couleur

[modifier | modifier le wikicode]

La fenêtre de dialogue contient un contrôle de type GtkColorSelection qui se nomme colorsel. On va utiliser la fonction de ce dernier :

procedure gtk_color_selection_get_current_color(colorsel : PGtkColorSelection; color : PGdkColor);

Initialisation de la couleur

[modifier | modifier le wikicode]

Une couleur peut être donnée à la boîte de dialogue avant son affichage. Cela se fait avec la fonction :

procedure gtk_color_selection_set_current_color(colorsel : PGtkColorSelection; color : PGdkColor);

Programme exemple

[modifier | modifier le wikicode]

Nous allons créer une fenêtre avec un bouton nous permettant d'ouvrir une GtkColorSelectionDialog. Une fois la couleur sélectionnée, nous afficherons sur la console les différentes composantes de cette couleur. Ceci pour faire simple, on aurait pu repeindre le fond de la fenêtre par exemple, mais on aurait été un peu hors sujet...

Voici le fichier gtk049.pas :

program gtk049;

uses glib2, gtk2, gdk2, sysutils;

procedure gtk_toolbar_insert(toolbar : PGtkToolbar; item : PGtkToolItem; pos : gint); cdecl;
  external gtklib name 'gtk_toolbar_insert';

procedure OnClickBtn(APWidget : PGtkwidget; AData : pgpointer); cdecl;
var
  pSelectionCouleur : PGtkwidget;
  Couleur : TGdkColor;
begin
  // Création de la fenêtre de sélection
  pSelectionCouleur := gtk_color_selection_dialog_new('Couleur de la fenêtre...');
  // On limite les actions à cette fenêtre
  gtk_window_set_modal(GTK_WINDOW(pSelectionCouleur), TRUE);

  // Affichage fenêtre
  case gtk_dialog_run(GTK_DIALOG(pSelectionCouleur)) of
    GTK_RESPONSE_OK : begin
      // Récuperation du chemin
      gtk_color_selection_get_current_color(
        GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(pSelectionCouleur)^.colorsel),
        @Couleur);
      Writeln(Format('Rouge:%d, Vert:%d, Bleu:%d',
                     [Couleur.red, Couleur.green, Couleur.blue]));
    end;
  end;
  gtk_widget_destroy(pSelectionCouleur);
end;

var
  pFenetre     : PGtkWidget;
  pVBox        : PGtkWidget;
  pBarreOutils : PGtkWidget;
  pBouton      : PGtkToolItem;

begin
  gtk_init(@argc, @argv);
  pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200);
  gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk049 : Sélection de couleur');
  gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', G_CALLBACK(@gtk_main_quit), NULL);

  // Création de la GtkVBox
  pVBox := gtk_vbox_new(FALSE, 5);
  gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);

  // Création de la barre d'outils
  pBarreOutils := gtk_toolbar_new;
  gtk_box_pack_start(GTK_BOX(pVBox), pBarreOutils, FALSE, FALSE, 0);

  // Création du bouton couleur
  pBouton := gtk_tool_button_new(NULL, 'Couleur...');
  gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBouton, -1);
  gtk_signal_connect(pGTKOBJECT(pBouton), 'clicked', G_CALLBACK(@OnClickBtn), pFenetre);

  gtk_widget_show_all(pFenetre);
  gtk_main;
end.

Voila ce que donne l'exécution du programme gtk049 :

La fenêtre principale s'affiche et on clique sur le bouton « Couleur », voilà la fenêtre de dialogue qui s'ouvre :


Sélections : GtkFileSelection ~ GtkColorSelectionDialog