A telecharger

Transcription

A telecharger
Le Bureau Graphique (1/2)
! Le bureau graphique (Desktop Environment) est censé
assurer l’interopérabilité entre applications. Le bureau
graphique doit assurer le lien entre tous clients
partageant votre display. En voici les principales
caractéristiques :
" look and feel uniforme : toutes les applications partagent une
même présentation des menus, icônes, barres de défilement.
" Drag and Drop : Les applications peuvent échanger données et
objets entre eux.
" Configuration interactive du bureau : Au lieu d’éditer des
fichiers de configuration avec une éditeur de texte, la
configuration du bureau (apparence, couleurs, etc…) se fait de
façon interactive, à la souris.
Le Bureau Graphique (2/2)
" Un système d’aide commun :
Les applications partagent le même mécanisme d’aide
(hotkeys, aide contextuelle).
" API spécifique :
Ensemble de bibliothèques facilitant le développement
d’utilitaires destinés au bureau graphique, permettant
d’exploiter pleinement les fonctionnalités du bureau graphique.
" Création de documents composites :
Un document peut contenir des objets créés/gérés par des
applications différentes.
" Gestion des sessions de travail :
Un mécanisme commun permet la sauvegarde et la
restauration des sessions de travail (sauvegarde de l’état de
chaque application ouverte dans la session), ainsi que le
basculement d’une session à l’autre.
1
CDE
! The Common Desktop Environment (CDE) is a
commercial graphical user interface for UNIX in its
various flavors (AIX, Digital UNIX, HP/UX, Solaris,
UnixWare, etc.). The desktop has been jointly
developed by Hewlett-Packard, IBM, Novell and Sun
Microsystems (COSE : Common Open Software
Environment, 1993). It has been adopted as a standard
operating environment by these companies and many
others in the UNIX workstation market.
! Released 1994-1995
! The CDE incorporates the dtwm window manager. This
is a Motif-compliant, virtual window manager.
CDE
2
KDE
! Kool Desktop Environment.
"KDE is a powerful graphical desktop environment for Unix workstations. It
combines ease of use, contemporary functionality and outstanding
graphical design with the technological superiority of the Unix operating
system."
! Rendre Linux accessible au plus grand nombre
! Début du projet oct. 1996, ver. 1.0 en Juillet 1998
! Window Manager (KWM).
GNOME
! GNU Network Object Model Environment.
"GNOME is a user-friendly desktop environment that enables users
to easily use and configure their computers. GNOME includes ... a
set of conventions that make it easy for applications to cooperate
and be consistent with each other."
! Début du projet en août 1997
! Théoriquement, s'accommode de divers WM, qui
doivent être 'gnome-compliant' (par ex.
Enligthenment, mais pas fvwm).
3
KDE vs GNOME
! KDE et GNOME se ressemble beaucoup du premier
coup d’œil.
! Inspirés de l’IHM de Microsoft Windows
! La présentation est similaire :
" Desktop (where data and applications can be placed)
" Panel (for starting applications and displaying status
information)
" File Manager for manipulating file objects
" Control Center for central configuration.
KDE
4
GNOME
Le panneau de commande (panel)
! Le panneau (panel) constitue la centrale de commande
de l'interface. Inspiré de la barre des tâches de MS
Windows. Possibilité de basculer entre bureau virtuels
! La distribution standard de GNOME inclut un grand
nombre d'applets (petites applications que l’on peut
demarrer depuis le panneau). Les applets
communiquent avec le panneau à l'aide de CORBA
5
Le gestionnaire de fichier (File Manager)
GNOME : Evolution de
Midnight Commander
(GMC - GNU Midnight
Commander).
KDE File Manager (KFM), inspiré
de Internet Explorer 4.0, intégrant
un client FTP et un navigateur
web, et la possibilité d'explorer
des fichiers compressés (tar, gz)
Remplacé par Konkeror
Le centre de contrôle
GNOME
Control Center
KDE Control Center
6
L’architecture de GNOME et KDE
! GNOME utilise la bibliothèque
orientée objet utilisée pour
développer GIMP (GTK+ :
GIMP Toolkit), dialoguant
avec la Xlib par l’intermédiaire
d’un wrapper (GDK)
De plus, une bibliothèque C
de bas niveau (Glib) est
nécessaire.
! KDE se base sur une
bibliothèque spécifique (Qt,
externe au projet KDE) pour la
création/gestion des widgets
GTK+
! Interfaçable avec 16 langages informatiques (C/C++,
pascal, perl, python, …)
! Licence GPL
! Supporte les modèles Drag & Drop de Motif
! Utilisation conjointe de OpenGL et GTK+
! Documentation laissant a désirer
! Portabilité limité des applications développés avec
GTK+ vers Windows.
7
Qt
! Très modulaire, permettant une réutilisation facile des
composants développés
! Multi-plateforme, y compris portage vers Windows
! Utilisation conjointe de OpenGL
! Bonne documentation en ligne
! Problème de licence (d’ou le développement de
GNOME) :
QPL (Qt Public License) : Licence de la bibliothèque Qt
de la société Troll Technologies, incompatible avec la
GPL. Les sources modifiés ne peuvent être redistribués
que sous forme de correctifs.
! 3 langages : C/C++, perl, python
Qt
! Qt is a C++ toolkit for multiplatform GUI application
development. In addition to the C++ class library, Qt
includes tools to make writing applications fast and
straightforward. Qt's multiplatform capabilities and
internationalization support ensure that Qt applications
reach the widest possible market.
! The Qt C++ toolkit has been at the heart of commercial
applications since 1995 (Adobe, IBM, Motorola, NASA,
and Volvo, + smaller companies and organizations).
! Qt's classes are fully featured to reduce developer
workload, and provide consistent interfaces to speed
learning. Qt is, and always has been, fully
object-oriented.
! http:/ /www.trolltech.com/.
8
La communication inter-client
! Exemple : copy-paste d’une zone de texte, ou insertion
d’un graphisme dans une feuille de tableur.
! X11 propose :
" ICCCM (Inter-Client Communication Conventions Manual)
Sélection à la souris, presse-papier (clipboard) et cut-buffers
(espace mémoire gérés par le serveur X servant de passerelle
entre applications). Texte seulement.
" Drag and Drop Protocols
• Feedback nécessaire
• L’application cible doit pouvoir choisir un format de prédilection
MotifDND (devenu trop complexe) et XDND
" Session management
Serveur spécial, indiquant au client de sauvegarder leur état.
Les clients doivent communiquer au session manager des
information permettant leur restauration.
Autres communications inter-client
! Pipes
" Limités, unidirectionnels, bas
niveau, connaissance nécessaire
du format de l’échange
! Sockets
" Utilisation du réseau. Bas niveau,
bidirectionnel, connaissance
nécessaire du format de l’échange
! RPC (Remote Procedure Calls)
" Initialement développé par SUN
pour NFS. Appel de procédures
distante. Déclaration préalable des
prototypes et des types de
données.
9
CORBA comme communication
! CORBA (Common Object
Request Broker Architecture)
est un mécanisme de type
IPC basée sur une
méthodologie objet.
! The most important
component is the ORB
(Object Request Broker),
which is responsible for all
communications for identifying
and locating objects, data
transmission and for clients
calling the object
implementations
Desktops & CORBA
! CORBA presents a simple and a elegant solution to
interprocess communications. For example, the
GNOME panel uses CORBA to communicate with
panel applets. In addition, some games also use
CORBA as communication protocol to play in a network
environment.
! In version 2 of KDE the usage of CORBA has been
discarded for efficiency reasons. The replacement for
CORBA is called DCOP (Desktop COmmunications
Protocol) and is based on X11's ICE.
10
Exemple de code KDE (Qt)
/********************* khello.h *********************/
#include <kapp.h>
#include <ktmainwindow.h>
class KHello : public KTMainWindow
{
Q_OBJECT
public:
KHello (void);
public slots:
void slotHello();
void slotClose();
};
/********************* khello.cc *********************/
#include "khello.moc"
#include <kmsgbox.h>
#include <qpushbutton.h>
KHello::KHello (void)
{
QPushButton *hello;
QPushButton *close;
hello = new QPushButton( "Hello", this );
hello->setGeometry(10,30,85,30);
hello->show();
connect(hello, SIGNAL(clicked()), this, SLOT(slotHello()));
close = new QPushButton( "Close", this );
close-> settGeometry(10,30,85,30);
close->show();
connect(close, SIGNAL(clicked()), this, SLOT(slotClose()));
}
Exemple de code KDE (Qt)
void KHello::slotHello()
{
KMsgBox::message (this, "Important", "Hello KDE!!!");
}
void KHello::slotClose()
{
kapp->quit();
}
/*********************
#include "khello.h"
main.cc
*********************/
int main (int argc, char **argv)
{
KApplication *app;
KHello
*hello;
app=new KApplication (argc, argv, "Hello KDE");
KHello hello;
hello.setGeometry(100,100,200,100);
app->setMainWidget( hello );
hello.show();
app->exec();
}
11
Exemple de code GNOME (GTK+)
#include <gnome.h>
static void buttonHello(GtkWidget *button)
{
GtkWidget *msg;
msg= gnome_message_box_new ("Hello GNOME!!!", GNOME_MESSAGE_BOX_GENERIC,NULL);
gtk_widget_show(msg);
}
int main(int
{
GtkWidget
GtkWidget
GtkWidget
GtkWidget
argc, char **argv)
*app;
*hello;
*close;
*hbox;
gnome_init ("GNOME example", "1.0", argc, argv);
app = gnome_app_new ("GNOME example","Hello GNOME");
/* When the program is closed */
gtk_signal_connect (GTK_OBJECT (app),"delete_event",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
hbox = gtk_hbox_new (FALSE,5);
gnome_app_set_contents (GNOME_APP (app), hbox);
hello = gtk_button_new_with_label("Hello");
gtk_box_pack_start (GTK_BOX(hbox), hello, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (hello), "clicked",
GTK_SIGNAL_FUNC (buttonHello),NULL);
close = gtk_button_new_with_label("Close");
gtk_box_pack_start (GTK_BOX(hbox), close, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (close), "clicked",
GTK_SIGNAL_FUNC (gtk_main_quit),NULL);
gtk_widget_show_all(app);
/* GTK main loop */
gtk_main ();
return 0;
}
Programmer des IHM actuellement
" Applications légères, hors environnement internet
• VB, VBA, Python
" Applications légères, web
• VB, Java / Javascript, Macromedia Flash
" Applications moyennes
• C/C++ et MFC, Pascal avec générateur d'interface, Python avec
générateur d'interface (pyGTK+, pyQt, Tkinter)
" Application lourdes
• C / C++ / C# / DOT NET
• RAD / Advanced Rapid Application Development (ARAD)
– WinDev / WebDev
– Clarion for Windows (softvelocity)
12
Event-routine binding: Motif, Tcl/Tk, ...
! Pour des applications conséquentes, il n’est plus
possible de gérer explicitement la boucle de messages.
! De plus, une application est composé de plus en plus
d’éléments IHM, et une boucle de messages doit traiter
tous les messages de tous les éléments…
! MOTIF et Tcl/Tk sont des bibliothèques utilisant X11.
La boucle de gestion des messages fait partie de la
bibliothèque, et devient invisible pour l’application.
" Utilisation de table de pointeurs sur fonction en interne,
associant un pointeur sur fonction pour chaque objet / action
(``Event Binding'‘)
" Cette table est modifiable. En général, une table par
« window »
Tcl / Tk
! Tcl (Tool Command Language, prononcez "tickeul") est
un langage interprété, disponible gratuitement (y
compris si besoin les sources C) et qui fonctionne sous
de très nombreux systèmes d'exploitation : Linux©,
Unix© bien sûr, mais aussi Windows 95/98, NT,
Mac/Os…
! Tk (Toolkit, prononcez "tikey") est l'extension de Tcl
pour la gestion graphique.
! Tcl et Tk ont été conçus vers 1988 par John K.
Ousterhout, de l'université de Berkeley et qui après
avoir travaillé chez Sun a créé sa startup : Scriptics est
devenu ensuite Adjuba Solutions avant d'être racheté
en octobre 2000 par Interwoven.
13
Tcl / Tk
! Tcl est un script interprété par la commande tclsh, il peut être vu
comme une extension du shell unix sh. Ce script peut être lancé
soit en mode interactif:
>tclsh
% set a 1
! soit en mode autonome en lui donnant un fichier d'entrée:
>tclsh -f monfichier.tcl
! Le premier cas sera utilisé pour le développement d'une
application, alors que le deuxième cas permettra d'utiliser un
programme tcl comme un programme à part entière.
! Tk est une surcouche de Tcl, et est aussi un script interprété, mais
par l'interpréteur wish (Widget shell) qui inclue tclsh. Wish permet
la création d'objets graphiques (fenêtres, boutons, menus,
canvas...), nommés widgets, ainsi que leur gestion, destruction, ...
Tcl / Tk
wm title . "Vive Tcl/Tk !"
label .texte -relief groove text "Hello World !" -width
30
button .ok -text "OK" command {exit}
pack .texte .ok -side top
14
Tk
! La structure hiérarchique des widgets est reflétée dans
la façon utilisée par Tk pour nommer l'enchaînement
des widgets, le point servant de séparateur et ayant
donc un sens de filiation.
Par exemple,
.w.frame.button1
.w.frame.button2
.w.frame.canvas
.w.label
Pourquoi Tcl/Tk ?
! Tcl/Tk permet très simplement de construire des
interfaces graphiques. Sa facilité d'utilisation réduit
largement le temps de développement de l'interface
graphique d'un logiciel.
! De plus, Tcl est suffisamment puissant pour développer
une application de petite taille.
! Pour des applications de moyenne et grande taille,
Tcl/Tk permet une interface simple avec le langage C
(portage ADA, Java, Lisp, Perl ….)
! La portabilité de Tcl/Tk permet de passer d'une plateforme de développement à une autre (Mac, PC, station
unix) sans aucune modification du programme!
15