Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > 2fcb262fce8df923d1c90b2e80f20b02 > files > 1473

pl-5.7.11-5.fc12.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<HTML>
<HEAD>
<TITLE>Programming in XPCE/Prolog: Section 4.1</TITLE><LINK REL=home HREF="index.html">
<LINK REL=contents HREF="Contents.html">
<LINK REL=index HREF="DocIndex.html">
<LINK REL=summary HREF="summary.html">
<LINK REL=previous HREF="controller.html">
<LINK REL=next HREF="sec-4.2.html">
<STYLE type="text/css">
/* Style sheet for SWI-Prolog latex2html
*/

dd.defbody
{ margin-bottom: 1em;
}

dt.pubdef
{ background-color: #c5e1ff;
}

pre.code
{ margin-left: 1.5em;
margin-right: 1.5em;
border: 1px dotted;
padding-top: 5px;
padding-left: 5px;
padding-bottom: 5px;
background-color: #f8f8f8;
}

div.navigate
{ text-align: center;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
}

div.title
{ text-align: center;
padding-bottom: 1em;
font-size: 200%;
font-weight: bold;
}

div.author
{ text-align: center;
font-style: italic;
}

div.abstract
{ margin-top: 2em;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
margin-left: 10%; margin-right:10%;
}

div.abstract-title
{ text-align: center;
padding: 5px;
font-size: 120%;
font-weight: bold;
}

div.toc-h1
{ font-size: 200%;
font-weight: bold;
}

div.toc-h2
{ font-size: 120%;
font-weight: bold;
margin-left: 2em;
}

div.toc-h3
{ font-size: 100%;
font-weight: bold;
margin-left: 4em;
}

div.toc-h4
{ font-size: 100%;
margin-left: 6em;
}

span.sec-nr
{ 
}

span.sec-title
{ 
}

span.pred-ext
{ font-weight: bold;
}

/* Footnotes */

sup.fn { color: blue; text-decoration: underline; }
span.fn-text: { display: none; }
sup.fn span {display: none;}
sup:hover span 
{ display: block !important;
position: absolute; top: auto; left: auto; width: 80%;
color: #000; background: white;
border: 2px solid;
padding: 5px; margin: 10px; z-index: 100;
font-size: smaller;
}
</STYLE>
</HEAD>
<BODY BGCOLOR="white">
<DIV class="navigate"><A class="nav" href="index.html"><IMG SRC="home.gif" BORDER=0 ALT="Home"></A>
<A class="nav" href="Contents.html"><IMG SRC="index.gif" BORDER=0 ALT="Contents"></A>
<A class="nav" href="DocIndex.html"><IMG SRC="yellow_pages.gif" BORDER=0 ALT="Index"></A>
<A class="nav" href="summary.html"><IMG SRC="info.gif" BORDER=0 ALT="Summary"></A>
<A class="nav" href="controller.html"><IMG SRC="prev.gif" BORDER=0 ALT="Previous"></A>
<A class="nav" href="sec-4.2.html"><IMG SRC="next.gif" BORDER=0 ALT="Next"></A>
</DIV>

<H2><A NAME="sec:4.1"><SPAN class="sec-nr">4.1</SPAN> <SPAN class="sec-title">An 
example</SPAN></A></H2>

<P>Before diving into the complexities we will illustrate normal usage 
through an example. The following Prolog predicate creates a dialog for 
entering information on an employee. The result, running on Windows-NT, 
is shown in <A class="fig" href="sec-4.1.html#fig:employee">figure 8</A>.

<PRE class="code">
ask_employee :-
        new(Dialog, dialog('Define employee')),
        send_list(Dialog, append, 
                  [ new(N1, text_item(first_name)),
                    new(N2, text_item(family_name)),
                    new(S,  new(S, menu(sex))),
                    new(A,  int_item(age, low := 18, high := 65)),
                    new(D,  menu(department, cycle)),
                    button(cancel, message(Dialog, destroy)),
                    button(enter, and(message(@prolog,
                                              assert_employee,
                                              N1?selection,
                                              N2?selection,
                                              S?selection,
                                              A?selection,
                                              D?selection),
                                      message(Dialog, destroy)))
                  ]),
        send_list(S, append, [male, female]),
        send_list(D, append, [research, development, marketing]),
        send(Dialog, default_button, enter),
        send(Dialog, open).

assert_employee(FirstName, FamilyName, Sex, Age, Depth) :-
        format('Adding ~w ~w ~w, age ~w, working at ~w~n',
               [ Sex, FirstName, FamilyName, Age, Depth]).</PRE>

<P>This example shows the layout capabilities of <A class="" href="summary.html#class:dialog">dialog</A> 
and its <A class="" href="summary.html#class:dialog_item">dialog_item</A> 
objects. Simply appending items will place items vertically and group 
buttons in rows. Labels are properly aligned. The <B>enter</B> button 
defines a call-back on the predicate <A NAME="idx:assertemployee5:118"></A><SPAN class="pred-ext">assert_employee/5</SPAN> 
using the values from the various controllers. <A class="sec" href="exeobjects.html">Section 
10.2</A> explains the use of <A class="" href="summary.html#class:message">message</A> 
objects in detail.

<P><A NAME="fig:employee"></A>
<CENTER>
<IMG SRC="employee.gif">
</CENTER>
<TABLE ALIGN=center WIDTH="75%"><TR><TD>
<B>Figure 8 : </B>Enter employee</TABLE>

<P></BODY></HTML>