<!-- ******************************************************** -->
<!--  Docbook Version:  For Toolkit Developers Guide          -->
<!-- ******************************************************** -->

<!-- ******************* Section (Level#1) ****************** -->
<sect1 id="sect.DsgnFuncIntrCm">
<title>
Intercoms
</title>

<!-- ******************* Section (Level#2) ****************** -->
<sect2 id="sect.DsgnFuncIntrCm.DsgPhlsp">
<title>
Design Philosophy
</title>

<para>
The intercoms category implements an expandable command interpreter which 
is the key mechanism in Geant4 for realizing customizable and 
state-dependent user interactions with all categories without being 
perturbed by the dependencies among classes.  The capturing of commands is 
handled by a C++ abstract class <emphasis role="italic">G4UIsession</emphasis>.  
Various concrete  implementations of the command capturer are contained in 
the [user] interfaces category.  Taking into account the rapid evolution 
of graphical user interface (GUI) technology and consequent dependence on 
external facilities, plural and extensible GUIs are offered.
</para>

<para>
Programmers need only know how to register the commands and parameters 
appropriate to their problem domain;  no knowledge of GUI programming is 
required to allow an application to use them through one of the available 
GUIs.
</para>

<para>
The intercoms category also provides the virtual base classes

<itemizedlist spacing="compact">
  <listitem><para>
    G4VVisManager,
  </para></listitem>
  <listitem><para>
    G4VGraphicsScene, and
  </para></listitem>
  <listitem><para>
    G4VGlobalFastSimulationManager.
  </para></listitem>
</itemizedlist>
</para>

</sect2>

<!-- ******************* Section (Level#2) ****************** -->
<sect2 id="sect.DsgnFuncIntrCm.ClassDsg">
<title>
Class Design
</title>

<para>
<itemizedlist spacing="compact">
  <listitem><para>
    <emphasis role="bold">G4UISession</emphasis> -
  </para></listitem>
  <listitem><para>
    <emphasis role="bold">G4UIBatch</emphasis> -
  </para></listitem>
  <listitem><para>
    <emphasis role="bold">G4UICommand</emphasis> -
  </para></listitem>
  <listitem><para>
    <emphasis role="bold">G4UIparameter</emphasis> -
  </para></listitem>
  <listitem><para>
    <emphasis role="bold">G4UImessenger</emphasis> -
  </para></listitem>
</itemizedlist>
</para>

<para>
The object-oriented design of the 'user interface' related classes
is shown in the class diagram <xref linkend="fig.DsgnFuncIntrCm_1" />. 
The diagram is described in the Booch notation. 

<figure id="fig.DsgnFuncIntrCm_1">
<title>
Overview of intercom classes
</title>
<mediaobject>
  <imageobject role="fo">
    <imagedata fileref="./AllResources/OOAnalysisDesign/UserInterface/classDgmUserInterface.jpg" 
               format="JPG" contentwidth="10.0cm" align="center" />
  </imageobject>
  <imageobject role="html">
    <imagedata fileref="./AllResources/OOAnalysisDesign/UserInterface/classDgmUserInterface.jpg" 
               format="JPG" contentwidth="120%" align="center" />
  </imageobject>
</mediaobject>
</figure>
</para>

</sect2>

<!-- ******* Bridgehead ******* -->
<bridgehead role="revisionHistory" renderas='sect4'>
[Status of this chapter]
</bridgehead>

<para>
<simplelist type="var">
  <member>
    27.06.05 design philosophy (from Geant4 general paper) and class design 
    sections added by D.H. Wright
  </member>
  <member>
    Dec. 2006 Conversion from latex to Docbook verson by K. Amako
  </member>
</simplelist>
</para>


</sect1>
