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.
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
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).
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
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
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
! 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 L architecture de GNOME et KDE 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.
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 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/. Qt
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.
! 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 CORBA comme communication 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.
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(); } /********************* main.cc *********************/ #include "khello.h" 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(); }
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 argc, char **argv) { GtkWidget *app; GtkWidget *hello; GtkWidget *close; GtkWidget *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)
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.
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
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!