Παρουσίαση της Motif Αναστάσιος Κρυσταλλίδης Α.Μ.: 776 Δημήτρης Μπαμπαλίκης Α.Μ.: 941 Επικοινωνία Ανθρώπου-Μηχανής
Εισαγωγή (1) Η motif αποτελεί ένα εργαλείο για την ανάπτυξη γραφικού περιβάλλοντος. Πρόκειται ουσιαστικά για μία βιβλιοθήκη από ρουτίνες που χρησιμοποιούνται για την ανάπτυξη GUI σε περιβάλλον X-Windows. Ο προγραμματισμός σε Motif χρησιμοποιεί γλώσσες χαμηλού επιπέδου και στηρίζεται σε κλάσεις αντικειμένων οι οποίες περιέχουν συναρτήσεις. Για τον προγραμματισμό σε Motif απαιτείται η γνώση της γλώσσας C καθώς και του λειτουργικού συστήματος UNIX.
Εισαγωγή (2) Δημιουργήθηκε το 1980, κατά την ακμή του λειτουργικού συστήματος UNIX,από την Open Software Foundation, η οποία έχει ενταχθεί στην The Open Group, και αποτέλεσε τον κύριο ανταγωνιστή του OPEN LOOK GUI. Αποτελεί πλέον τον θεμέλιο λίθο του Common Desktop Environment. Η Motif μπορεί να χαρακτηριστεί ως ένα επεκτάσιμο user interface toolkit, μία ευσταθής εφαρμογή για προγραμματισμό interface, ένας window manager. Τα παραπάνω αποτελούν τον πυρήνα της motif και τον λόγω που είναι τόσο αποδεκτή στο κοινό.
Εισαγωγή (3) Το Motif toolkit βασίζεται στο Χ11 Intrinsics, ένα εργαλείο που παρέχεται από το X-Window System. Χρησιμοποιεί ένα αντικειμενοστραφές μοντέλο για να δημιουργήσει μία ιεραρχία από γραφικά αντικείμενα, γνωστά ως widgets. Η λειτουργικότητα του Motif toolkit επεκτείνεται από τα windowless widgets που ονομάζονται gadgets.
Widgets και Gadgets Τα widget και τα gadgets που χρησιμοποιούνται στο Motif toolkit μπορούν να θεωρηθούν ολοκληρωμένα και αυτόνομα κομμάτια κώδικα που συνδυάζονται από τον χρήστη κατά την κατασκευή της εφαρμογής. Αυτό σημαίνει ότι είναι ανεξάρτητα από την κάθε εφαρμογή, δηλαδή “γνωρίζουν” πότε να ζωγραφίσουν τον εαυτό τους, πώς να αλλάξουν φωτισμό όταν ο χρήστης τα πατά κλπ. Παρέχονται στον χρήστη widgets και gadgets όπως τα labels, pushbuttons, menus κ.α.
Manager Widgets Τα manager widgets αποτελούν μία ειδική κατηγορία widgets. Είναι πιο σύνθετα από τα widgets και περιέχουν άλλα απλούστερα. Σκοπός τους είναι ο έλεγχος της διάταξης και του μεγέθους των widgets, και αποτελούν το μέσο για την υποστήριξή τους. Επίσης τα manager widgets αποτελούν απαραίτητη προϋπόθεση για την ύπαρξη των gadgets.
Βασικά Widgets (1) ArrowButton ArrowButton : Κατασκευή παραθύρου με βέλη προς όλες τις κατευθύνσεις. : Label : Κατασκευή παραθύρου που περιέχει κείμενο ή εικόνα.
Βασικά Widgets (2) DrawnButton : DrawnButton : Κατασκευή παραθύρου που περιέχει ένα εικονίδιο. : RadioButton/CheckBox : Κατασκευή παραθύρου που περιέχει επιλογές. Δίνεται η δυνατότητα για επιλογή ενός (RadopButton) ή περισσότερων (CheckBox) πεδίων
Βασικά Widgets (3) CascadeButton : CascadeButton : Κατασκευή παραθύρου που περιέχει μενού και δίνει την δυνατότητα επιλογής.
Βασικά Manager Widgets Frame : Το απλούστερο παράδειγμα manager widget. DrawingArea : Δημιουργεί ένα παράθυρο στο οποίο μπορούν να απεικονιστούν γραφικά.
Παραδείγματα Στις διαφάνειες που ακολουθούν παρουσιάζονται παραδείγματα χρήσης της Motif. Στο πρώτο παράδειγμα δημιουργούμε ένα κουμπί, το οποίο μόλις πατηθεί εμφανίζει την πρόταση "Hello Yourself!“. Στο δεύτερο παράδειγμα δημιουργούμε μια λίστα με χρώματα, από την οποία ο χρήστης επιλέγει. Το επιλεγμένο στοιχείο της λίστας τονίζεται με διαφορετικό χρώμα.
#include #include int main(argc, argv) int argc; char *argv[]; { Widget toplevel, button; XtAppContext app; void button_pushed(); XmString label;
XtSetLanguageProc (NULL, NULL, NULL); toplevel = XtVaAppInitialize (&app, "Hello", NULL, 0, &argc, argv, NULL, NULL); label = XmStringCreateLocalized ("Push here to say hello"); button = XtVaCreateManagedWidget ("pushme", xmPushButtonWidgetClass, toplevel, XmNlabelString, label, NULL);
XmStringFree (label); XtAddCallback (button, XmNactivateCallback, button_pushed, NULL); XtRealizeWidget (toplevel); XtAppMainLoop (app); }
void button_pushed(widget, client_data, call_data) Widget widget; XtPointer client_data; XtPointer call_data; { printf ("Hello Yourself!\n"); }
Η έξοδος του προγράμματος είναι ένα παράθυρο με ένα κουμπί με ετικέτα "Push here to say hello" που όταν πατηθεί εμφανίζεται στην οθόνη το μήνυμα "Hello Yourself! “ :
Παράδειγμα 2 #include #include main(argc, argv) int argc; char *argv[]; { Widget toplevel, main_w, list_w; XtAppContext app; Pixmap pixmap; XtSetLanguageProc (NULL, NULL, NULL);
toplevel = XtVaAppInitialize (&app, "Demos", NULL, 0, &argc, argv, NULL, NULL); main_w = XtVaCreateManagedWidget ("main_window", xmMainWindowWidgetClass, toplevel, NULL); list_w = XmCreateScrolledList (main_w, "main_list", NULL, 0);
XtVaSetValues (list_w, XtVaTypedArg, XmNitems, XmRString, "Red, Green, Blue, Orange, Maroon, Grey, Black, White", 53, XmNitemCount, 8, XmNvisibleItemCount, 5, NULL); XtManageChild (list_w); /* set the list_w as the "work area" of the main window */ XtVaSetValues (main_w, XmNworkWindow, XtParent (list_w), NULL); XtRealizeWidget (toplevel); XtAppMainLoop (app); }
Το αποτέλεσμα του παραπάνω προγράμματος είναι η δημιουργία μιας λίστας με χρώματα, όπως φαίνεται παρακάτω :
Παρατηρήσεις Κάθε πρόγραμμα ανάλογα με το τι κατασκευάζουμε πρέπει να χρησιμοποιεί τις ανάλογες βιβλιοθήκες.Στο παράδειγμα 1 κάνουμε Include το αρχείο Xm/PushB.h, το οποίο είναι το κατάλληλο για την δημιουργία του PushButton. Έχουμε 2 widgets, το toplevel και το button. Το toplevel ανήκει στην κλάση shell και είναι υπεύθυνο για την επικοινωνία της εφαρμογής με τον window manager του X-window και αρχικοποιείται με την εντολή XtVaAppInitialize.
Παρατηρήσεις (2) Το button ανήκει στην κλάση PushButton και αρχικοποιείται με την εντολή XtVaCreateManagedWidget. Με την εντολή XmStringCreateLocalized αναθέτουμε ένα «όνομα» στο κουμπί που δημιουργήσαμε, και το οποίο θα αναγράφεται πάνω σε αυτό. Η XtAddCallback αντιστοιχεί στο πάτημα του κουμπιού που δημιουργήσαμε, με το ποντίκι.
Παρατηρήσεις (3) Στο παράδειγμα 2 κάνουμε include δύο αρχεία. Τα Xm/MainW.h και Xm/List.h για την δημιουργία μιας λίστας. Έχουμε 3 widget, το toplevel,το main_w και το list_w. XtVaAppInitialize, XtVaCreateManagedWidget, XmCreateScrolledList. Οι 3 αυτές εντολές αρχικοποιούν τα 3 widget αντίστοιχα με τις κατάλληλες παραμέτρους.
Παρατηρήσεις (4) XtVaSetValues. Η συνάρτηση αυτή αρχικοποιεί την λίστα μας με τα περιεχόμενα που επιθυμούμε. Ακολουθούν παραδείγματα για τις δυνατότητες της motif, χωρίς τον κώδικα τους.
Συναρτήσεις XmStringCreateLocalized : Δημιουργία ενός string σε συγκεκριμένη θέση XmVaCreateSimpleRadioButton : Δημιουργία ενός RadioButton αντικειμένου XmVaCreateSimpleMenuBar : Δημιουργία ενός MenuBar σε ένα συγκεκριμένο αντικείμενο XmPushButton : Δημιουργία ενός αντικειμένου το οποίο ξεκινά μία λειτουργία όταν είναι πατημένο
Συναρτήσεις (2) XmChangeColor : Αλλαγή του χρώματος ενός αντικειμένου XmDisplay : Δημιουργία ενός αντικειμένου που αποθηκεύει μία συγκεκριμένη πληροφορία XmTextSetHighlight : Δημιουργία highlight κειμένου XmUninstallImage : Αφαιρεί μία εικόνα από την μνήμη
Παράθυρο επιλογής Ο χρήστης επιλέγει αν θέλει να δημιουργήσει ή να διαγράψει ένα αρχείο. Για το παράθυρο αυτό χρησιμοποιούνται τα εξής αρχεία : Xm/DialogS.h Xm/DialogS.h Xm/SelectioB.h Xm/SelectioB.h Xm/RowColumn.h Xm/RowColumn.h Xm/MessageB.h Xm/MessageB.h Xm/PushB.h Xm/PushB.h
Warnings Ο χρήστης έχει επιλέξει να διαγράψει κάποια αρχεία. Το σύστημα ζητεί επιβεβαίωση για αυτήν την ενέργεια μέσω του παρακάτω παραθύρου. Για το παράθυρο αυτό χρησιμοποιούνται τα εξής αρχεία : Xm/MessageB.h Xm/MessageB.h Xm/PushB.h Xm/PushB.h
Τέλος παρουσίασης Ευχαριστούμε για την προσοχή σας