MOTIF: Finger in Ze NoZe



Documents pareils
Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Le prototype de la fonction main()

3IS - Système d'exploitation linux - Programmation système

Introduction au langage C

Programmation système en C/C++

Cours Langage C/C++ Programmation modulaire

Programmation système de commandes en C

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Quelques éléments de compilation en C et makefiles

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

OS Réseaux et Programmation Système - C5

Programmation système I Les entrées/sorties

INFO-F-404 : Techniques avancées de systèmes d exploitation

Eclipse atelier Java

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Cours Programmation Système

Programmer en JAVA. par Tama

Cours 6 : Tubes anonymes et nommés

Environnements de développement (intégrés)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Fiche n 14 : Import / Export avec PlanningPME

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Module Retour Produit Guide d intégration et d utilisation Version 1.0

Publier dans la Base Documentaire

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Les tablettes et l'extranet Intermixt Mode d'emploi

Arguments d un programme

Qlik Sense Desktop. Qlik Sense Copyright QlikTech International AB. Tous droits réservés.

Ak Documentation

Télécom Nancy Année

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Chap III : Les tableaux

Testez votre installation. Créer un répertoire vide

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Derrière toi Une machine virtuelle!

Chapitre 10 : Logiciels

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

INFO-F-105 Language de programmation I Séance VI

Courriel Archiver Version 2: Sommaire. Archiver : Sommaire. Comment ça marche Support Technique Préférences. Recherche

Le langage C. Séance n 4

Traitement de données

2013 Pearson France Adobe Illustrator CC Adobe Press

Procédure d installation d AMESim 4.3.0

Manuel PRO G DIS / AHI

ÉCOLE POLYTECHNIQUE DE MONTRÉAL. Département de Génie Électrique. La technologie de TEXAS INSTRUMENTS DSP pour le cours Analyse des Signaux ELE2700

Installation et compilation de gnurbs sous Windows

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

Tutorial Ophcrack. I) Ophcrack en API. (ou comment utiliser Ophcrack pour recouvrir un mot de passe sous Windows XP et Windows Vista)

Importation de fichiers Eagle

L import : Mise à jour rapide de votre catalogue

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

TP 1 Prise en main de l environnement Unix

Préparation à l installation d Active Directory

Optimiser son utilisation du logiciel Sirius

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Notes de Cours - Programmation Pascal Ferraro

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

L ORDINATEUR FACILE D ACCÈS!

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Chaîne de production d un programme

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Java 7 Les fondamentaux du langage Java

Utilisation d objets : String et ArrayList

Créer des documents interactifs

Utiliser WebCamFirst

Comment mettre en page votre livre

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Projet De Stijl Plate-forme pour robots mobiles

Interfaces graphiques avec l API Swing

as Architecture des Systèmes d Information

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Java Licence Professionnelle CISII,

Construire des plug-ins pour SAS Management Console SAS 9.1

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

WINDOWS NT 2000: Travaux Pratiques. -Boîtier partage d'imprimante- Michel Cabaré Janvier 2002 ver 1.0

Lier Erlang avec d autres langages de programmation

Ref : Résolution problème d'accès aux supports de cours

Table des matières : 16 ASTUCES OUTLOOK

Comment se connecter au dossier partagé?

Cours 1: Java et les objets

Supprimer définitivement un fichier

Bureau Virtuel Lyon 2

Cours Java Native Interface

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

AFTEC SIO 2. Christophe BOUTHIER Page 1

Emmanuel CROMBEZ 30 mai 2015

A - Créer une Base de données au format dbase

La mémoire. Un ordinateur. L'octet. Le bit

Bases de programmation. Cours 5. Structurer les données

Algorithmique et Programmation, IMA

Création d'une interface graphique

Exercice sur les Dockers

«Manuel Pratique» Gestion budgétaire

Compression de Données - Algorithme de Huffman Document de Conception

Manuel d utilisation pour la plateforme BeExcellent MANUEL D UTILISATION POUR LA PLATEFORME BEEXCELLENT

Installation et prise en main

Manuel de l'utilisateur d'intego VirusBarrier Express et VirusBarrier Plus

Transcription:

MOTIF: Finger in Ze NoZe Alors que pour les mini-projets de deuxième année, beaucoup doivent ou souhaitent utiliser les librairies motif, je vais essayer de faciliter la découverte de cette librairie X en présentant brièvement Xmt: X Motif Tools, et en décrivant une application toute simple mais assez bluffante, vu la taille de son code source. Motif en est à sa version 2.0, et tous ceux qui ont fait l expérience de la toolkit Motif savent comme cette librairie est puissante, mais également frustrante. Au début, il y avait le problème des bugs, mais ceux-ci tendent à disparaître. la XToolkit de X11R4 et R5 est maintenant assez fiable et les widgets motif 1.2.2 (dernière version dispo à l EERIE) ont été nettement améliorés par rapport à ceux de la version 1.0. Motif reste cependant assez énervant. En fait, motif n a pas été conçu dans l optique de la facilité d utilisation par les programmeurs. La XToolkit a été réalisée d après le mot d ordre du X Consortium mechanism, not policy pour être une architecture standard, et motif n est censé qu apporter un niveau de base aux fonctionnalités de l interface utilisateur: des boutons, ascenseurs,... Maintenant, toute application graphique possède un menu -sauf peutêtre les "mandelbrots" des premières années- or Motif n a pas de widget menu à proprement parler. Pour l aide en ligne c est pareil: aucun widget n existe. Quant au type XmString, c est la cata complète: impossible de changer de 18 police ou de graisse, difficile d intégrer des retour chariots dans une chaîne,... et XmString n offre pourtant aucun véritable avantage sur le bête tableau de char. Il ne faut cependant pas exagérer, Motif apporte quand même un avantage certain par rapport au X pur, ne serait ce que pour le widget bouton: essayez de faire un joli bouton ombré avec du texte dedans et qui bouge quand on appuie dessus! en motif ça prend une ligne. Tout cela pris en compte, un certain David Flanagan s est dit que ce serait pas mal de partir de motif pour faire un truc vraiment sympa. D où Xmt : X motif tools (j ai pas dit que sympa se disait tools en anglais, tools ce serait plutôt outils). Xmt c est donc quelques widgets en plus pour là où ça faisait mal: XmtLayout pour le positionnement des widgets (XmForm, l équivalent motif pur, fait vraiment pitié à côté), XmtChooser: des ensembles de boutons tout prêts, des widgets pour l aide contextuelle, d autres pour faire attendre l utilisateur final, des lignes de commande etc... Xmt c est aussi plus de 260 fonctions et des convertisseurs pour faciliter le développement. Enfin Xmt permet un design rapide de l interface. le programme UIL -user interface language- existait déjà pour cela, Xmt avec son système de ressources "application default" va encore plus loin: plus clair plus puissant et plus compact (un fichier UIL pouvait faire plusieurs milliers de lignes pour

une application assez simple, avec Xmt, ça peut se réduire à quelques centaines). Xmt 2.0 est installé à l eerie dans /usr/ local/tool/xmt. On a une seule license, mais le reste est considéré comme shareware. Xmt marche avec motif et X11R5. je l ai compilé avec motif 1.2.2 sur sun, il faudra le refaire sur HP si le besoin s en ressent. Pour les chemins regarder dans le Makefile. De la doc sur xmt se trouve dans ~xmt/ 2.0.0/cat (man en format texte) et ~xmt/ 2.0.0/examples Divers programmes se trouvent dans ~xmt/2.0.0/clients notamment mockup: un interprêteur de ressources pour tester avant de compiler (essayer mockup demo), et divers scripts sed pour valider ou convertir des fichier.ad en.h ou des bitmaps.xpm ou.xbm en.ad. Voici donc le source commenté d une application bidon "exemple" montrant le principe général. Vous allez voir, c est vraiment bluffant. Un snapshot de l'écran est reproduit ci-dessous. L'application se compose d'un menu et d'une fenêtre. Le menu est "tear off",: on peut le détacher. L'option Open est une boîte motif toute prête et la fonction "callback" qui lui est associée renvoie le chemin complet du fichier choisi. Pour mettre en évidence la communication possible dans les deux sens, j'ai utilisé cette chaîne de caractères pour changer le texte dans la fenêtre principale. Le menu de boutons libellés 1, 2 et 3 active un callback très simple qui imprime par un bête printf la valeur sélectionnée dans la xterm appellante. Je pense l avoir assez commenté, mais n hésitez pas à me poser des questions. François "^J" Nguyen Biblio: Motif Tools D. I. Flanagan, ORA OSF/Motif Programmer's reference, PrenticeHall Sources: L'exemple se trouve, source et exécutable dans ~nguyen/projet/exemple. 19

exemple.ad (les ressources)!couleurs *Foreground: navy *Background: gray!polices *FontList:*-helvetica-medium-r-*-*-*-140-*=R,\ *-helvetica-bold-r-*-*-*-140-*=b!description du widget exemple exemple.title: exemple - Copyright \251 1995 exemple.mwmmenu: \ "dummy" f.separator\n\ "Pass Keys" _K Meta<Key>K f.pass_keys\n\ "Refresh" _R Meta<Key>R f.refresh_win exemple.xmtchildren: XmtLayout layout;\ XmDialogShell FileSelSh; *layout.xmtchildren: XmtMenu menubar; XmtLayout workarea; *layout.layout: Fixed 12mm High menubar 600pt % 1.5in workarea *layout.marginwidth:2 *layout.marginheight:2 *menubar.height : 30 *menubar.items: Tearoff "_File" -> file ; *menubar*file.items: \ "_Open..." [Meta+O] XtManageChild(*fileSel);\ "E_xit" [Ctrl-C] exit(0); *FileSelSh.xmtChildren : unmanaged XmFileSelectionBox filesel; *filesel.activatecallback:getfileselectionvalue();xtunmanagechild(*filesel); *filesel.dirmask : *.c *filesel.okcallback : GetFileSelectionValue();\ XtUnmanageChild(*fileSel); *filesel.cancelcallback :XtUnmanageChild(*fileSel); *workarea.xmtchildren : XmLabel Label ; XmtChooser Chooser; *workarea.layoutframetype : XmtLayoutFrameBox *workarea.layout : 28mm Wide Fixed Chooser Label *workarea.orientation : XmHORIZONTAL *Label.labelString : bonjour *Chooser.chooserType: Option *Chooser.layoutCaption: @fb exemple @fr *Chooser.strings: "zero", "un", "deux" *Chooser.layoutCaptionPosition: Top *Chooser.valueChangedCallback : SetChooserValue(); 20

#include <Xmt/Xmt.h> #include <Xmt/Layout.h> #include <Xmt/Converters.h> #include <Xmt/Procedures.h> #include <Xmt/Dialogs.h> #include <Xmt/Chooser.h> #include <Xmt/WorkingBox.h> #include <Xm/FileSB.h> exemple.c /* Motif 1.2.2 a ete compile avec R6, on n a que R5, pour eviter * des warnings de compilation on declare cette fonction */ char* _Xsetlocale (){printf("appel Xsetlocale\n"); /* les ressources (du fichier exemple.ad) */ static char *fallback[] = { #include "exemple.h" (char*) NULL ; Widget toplevel; /* -------------------------------- */ /* ---------- Les CallBacks ------------- */ /* ------------------------------- */ static void SetChooserValue ( Widget w, XtPointer client_data, XtPointer call_data ) { XmtChooserCallbackStruct *data; data = (XmtChooserCallbackStruct*) client_data; printf(«%i\n», (data->item)); return; static void GetFileSelectionValue(Widget w, XtPointer client_data, XtPointer call_data ) { Arg args; XmFileSelectionBoxCallbackStruct *data= (XmFileSelectionBoxCallbackStruct*) client_data; XtSetArg(args, XmNlabelString, data->value); XtSetValues (XmtNameToWidget(toplevel, "*Label"), &args, 1); return; /*---------------------------------main-------------------------------*/ /*----------installe les ressources et lance la main loop-------------*/ void main(int argc, char **argv) { XtAppContext app; int i; /*initialise l application ( et lecture fallbacks ) */ toplevel = XtAppInitialize (&app, "exemple", NULL, 0, &argc, argv, fallback, NULL, 0); 21

XmtRegisterAll(); /*enregistrement nom des callbacks */ XmtVaRegisterCallbackProcedures( «SetChooserValue», SetChooserValue,XmtRCallbackData, «GetFileSelectionValue», GetFileSelectionValue,XmtRCallbackData, NULL); /* enregistre les convertisseurs */ /* gere la hierarchie de widgets a parit de toplevel */ XmtCreateChildren(toplevel); XtRealizeWidget(toplevel); /*main loop */ XtAppMainLoop(app); Makefile CC= gcc AD2C= /usr/local/tool/xmt/clients/ad2c LIBS = -L/usr/local/tool/X11R5/lib -L/usr/local/prod/motif/1.2.2/lib -L/ usr/local/lib/xmt -lxmt -lxm -lxt -lx11 -lxext -lm INCLUDES=-I/usr/local/tool/X11R5/include -I/usr/local/prod/motif/1.2.2/ include -I/usr/local/include all : exemple exemple.h : exemple.ad ${AD2C exemple.ad > exemple.h exemple : exemple.o ${CC -o exemple exemple.o ${LIBS exemple.o : exemple.c exemple.h ${CC -c exemple.c ${INCLUDES clean : rm -f *.o exemple 22