XtInitialize
. Το widget αυτό ανήκει στην κλάση
TopLevelShell
. Τα TopLevelShell
widgets χρησιμοποιούνται για την δημιουργία
των βασικών παραθύρων των προγραμμάτων, δηλαδή παραθύρων που θα εμφανιστούν
στην οθόνη σαν παιδιά του root window και θα πρέπει να συνεργαστούν με το
window manager. Διαθέτουν όλους μηχανισμούς εκείνους που χρειάζονται για την
λειτουργία τέτοιων παραθύρων. Επιπλέον τα widgets αυτά επιτρέπεται να έχουν
μόνο ένα παιδί. Για το λόγο αυτό δημιουργούμε πάντοτε κάποιο widget παιδί
του που να ανήκει στην κατηγορία των widgets που μπορούν να έχουν
περισσότερα από ένα παιδιά (container widget). Έτσι στη συνέχεια μπορούμε να
προσθέσουμε όσα άλλα widgets επιθυμούμε.
Για τη δημιουργία νέων widgets υπάρχει η συνάρτηση XtCreateWidget
:
Widget XtCreateWidget( String name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args );Η
XtCreateWidget
επιστρέφει την δομή Widget του widget που δημιουργείται.
Την δομή αυτή χρησιμοποιούμε στη συνέχεια για να απευθυνθούμε στο widget. Η
συνάρτηση παίρνει πέντε ορίσματα. Μια συμβολοσειρά με το όνομα του widget.
Το όνομα του φυλάσσεται στη resource database του εξυπηρετητή των X Windows.
Από εκεί έχουμε την δυνατοτητα να αλλάξουμε τα resources - χαρακτηριστικά
του widget, χρησιμοποιώντας το αρχείο .Xdefaults
ή απεύθείας το πρόγραμμα
xrdb
. Για παράδειγμα, αν το πρόγραμμα λέγεται myprog
και το widget λέγεται
mywidget
, με την παρακάτων γραμμή μπορούμε να αλλάξουμε το χρώμα του
widget:
myprog.mywidget.background : greenΤο δεύτερο όρισμα καθορίζει την κλάση του widget, δηλαδή με άλλα λόγια καθορίζει τι widget επιθυμούμε να δημιουργήσουμε. Οι τιμές του ορίσματος είναι προκαθορισμένες και ορίζονται στα αντίστοιχα include files στο directory του Widget Set. Στην περίπτωσή μας (Motif) είναι το
/usr/include/Xm
. Εξυπακούεται ότι είναι απαραίτητο όταν θέλουμε να
δημιουργήσουμε ένα τύπο widget στο πρόγραμμα να συμπεριλαμβάνουμε και το
include file του. Στον πίνακα που ακολουθεί αναγράφονται τα σημαντικότερα
widgets του Motif, η κλάση του καθενός (όπως πρέπει να συμπληρωθεί στο
δεύτερο όρισμα της XtCreateWidget
) και το include file του στο directory
/usr/include/Xm
:
Widget Widget Class Include File ________________________________________________________________________
Το τρίτο όρισμα είναι το widget γονέας του widget που δημιοργούμε. Εδώ
υπάρχει αντιστοιχία με τα παράθυρα στην Xlib. Το τέταρτο όρισμα είναι
κάποιες επιπλέον παράμετροι (resources) που δίνουμε σε κάθε widget
ξεχωριστά. Το τελευταίο όρισμα είναι το πλήθος των προηγουμένων παραμέτρων.
Οι παράμετροι αυτές δίνονται σε μία συγκεκριμένη μορφή χρησιμοποιώντας τη
δομή Arg (argument), η οποία ορίζεται ως εξής (στο include file
Intrinsic.h
):
typedef char *String; typedef long XtArgVal; typedef struct { String name; XtArgVal value; } Arg, *ArgList;