Next: 3. Additional portability facilities Up: 2. The GNUstep Markup Previous: 2.8 Connector tag reference

# 2.9 Example

FIXME: this example should be replaced with a better one.

FIXME: add examples of advanced outlets.

    <?xml version="1.0"?>
    <!DOCTYPE gsmarkup>
    <gsmarkup>

    <objects>
     <!-- the main window -->
     <window title="Calculator" resizable="no" closable="no">

       <vbox>

         <textfield editable="no" id="TextField" />

         <hbox>
          <button title="1" target="#Controller" action="digit:" />
          <button title="2" target="#Controller" action="digit:" />
          <button title="3" target="#Controller" action="digit:" />
         </hbox>

         <hbox>
          <button title="4" target="#Controller" action="digit:" />
          <button title="5" target="#Controller" action="digit:" />
          <button title="6" target="#Controller" action="digit:" />
         </hbox>

         <hbox>
          <button title="7" target="#Controller" action="digit:" />
          <button title="8" target="#Controller" action="digit:" />
          <button title="9" target="#Controller" action="digit:" />
         </hbox>

         <hbox>
          <button title="+" target="#Controller" action="add:" />
          <button title="0" target="#Controller" action="digit:" />
          <button title="=" target="#Controller" action="total:" />
         </hbox>

       </vbox>

     </window>

     <!-- an object of a custom class, which is instantiated when the nib
          is loaded.  Key-value coding is used to set textField to #TextField.
          In other words, the textField attribute is equivalent to having a
          NSNibOutletConnector with source #Controller, target #TextField,
          and key textField -->
     <instance instanceOf="CalculatorController" id="Controller"
               textField="#TextField" />

    </objects>

    <!-- in this example, connectors are not actually needed (or better
         all connectors are embedded in the objects section) - but we add
         the connectors section as an example.  -->
    <connectors>

     <!-- an example of a standalone connector, needed to connect the Controller
          to the controller ivar (or setController: method) of the NSOwner (the
          object which loaded the nib).  This connector must be standalone
          because #NSOwner is not inside the nib.  (you can reference objects
          totally outside the nib in a connector, which are provided by the
          nameTable dictionary when the nib is loaded) -->
     <outlet source="#NSOwner" target="#Controller" key="controller" />

    </connectors>

    </gsmarkup>