home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / g / gina15.zip / demos / graph.C < prev    next >
C/C++ Source or Header  |  1992-02-27  |  9KB  |  249 lines

  1. /*  @(#)hello.C    1.20 7/30/91 */
  2. /*
  3.   This application shows its own class hierarchy.
  4. */
  5. #include <CC/math.h>
  6. #include <Gina/Gina.h>
  7.  
  8. #ifdef INCLUDE_SRC
  9. #include "Gina.C"
  10. #endif
  11.  
  12. //---------------------------------------------------------------------
  13. class ClassApplication : public GnApplication {
  14.   public:
  15.     GnDocument* create_document();
  16.     char * app_class () { return "Class" ; }
  17.     char * app_signature() { return "Class" ; }
  18.     char * app_file_type() { return ".Class" ; }
  19. };
  20.  
  21. class ClassDocument : public GnDocument {
  22.     GnGraphView *view;
  23.   public:
  24.     ClassDocument();
  25.     GnView *create_view();
  26.     void create_windows(int new_width, int new_height);
  27.     void CreateErichsGraph(caddr_t, caddr_t);
  28.     void CreateGraph(caddr_t, caddr_t);
  29.     void DeleteGraph(caddr_t, caddr_t){ view->DeleteGraph(); }
  30.     void CircleLayout(caddr_t, caddr_t)
  31.     { view->SelectLayout(new GnCircleLayout()); }
  32.     void ISILayout(caddr_t, caddr_t)
  33.     { view->SelectLayout(new GnISILayout()); }
  34.     void SquareLayout(caddr_t, caddr_t)
  35.     { view->SelectLayout(new GnLayout()); }
  36.     void VerticalLayout(caddr_t, caddr_t){ view->SelectDirection(eVertical); };
  37.     void HorizontalLayout(caddr_t, caddr_t){ view->SelectDirection(eHorizontal); };
  38.     Boolean write_to_stream( ostream &ofs );
  39.     Boolean read_from_stream ( istream &ifs );
  40.     void HDistance(XmScaleCallbackStruct *new_D)
  41.     {view->SetHorizontalDistance(new_D->value);};
  42.     void VDistance(XmScaleCallbackStruct *new_D)
  43.     {view->SetVerticalDistance(new_D->value);};
  44.  
  45.   private:
  46.     GnScale *vScale, *hScale;
  47. };
  48.  
  49. //---------------------------------------------------------------------
  50. GnDocument *ClassApplication ::
  51. create_document () { return new ClassDocument; }
  52.  
  53. //---------------------------------------------------------------------
  54. GnView *ClassDocument ::
  55. create_view () { return( view=new GnGraphView( this, 12)); }
  56.  
  57. ClassDocument::
  58. ClassDocument()
  59. {}
  60.  
  61. void ClassDocument ::
  62. create_windows (int new_width, int new_height)
  63. {
  64.     Gina_Debug_NL ("MandelbrotDocument :: create_windows");
  65.     main_shell = new GnDocumentShell( this, new_width, new_height );
  66.     main_shell->create( GnApplication::get()->get_application_shell(),
  67.                 "mainShell" );
  68.     main_shell->add_menu_command( "Graph", "Create the Class Graph",
  69.                   CALLBACK(ClassDocument,CreateGraph,this));
  70.     main_shell->add_menu_command( "Graph", "Create the Erichs Graph",
  71.                   CALLBACK(ClassDocument,CreateErichsGraph,this));
  72.     main_shell->add_menu_command( "Graph", "Delete the Graph",
  73.                   CALLBACK(ClassDocument,DeleteGraph,this));
  74.     main_shell->add_menu_command( "Layout", "Chose Circle Layout",
  75.                   CALLBACK(ClassDocument,CircleLayout,this));
  76.     main_shell->add_menu_command( "Layout", "Chose Square Layout",
  77.                   CALLBACK(ClassDocument,SquareLayout,this));
  78.     main_shell->add_menu_command( "Layout", "Chose ISI Layout",
  79.                   CALLBACK(ClassDocument,ISILayout,this));
  80.     main_shell->add_menu_command( "Layout", "Chose Vertical Layout",
  81.                   CALLBACK(ClassDocument,VerticalLayout,this));
  82.     main_shell->add_menu_command( "Layout", "Chose Horizontal Layout",
  83.                   CALLBACK(ClassDocument,HorizontalLayout,this));
  84.     main_shell->setR_allowShellResize(True);
  85.     main_shell->SetValues();
  86.     GnForm *form = new GnForm;
  87.     form->create(main_shell, "ClassForm");
  88.  
  89.     GnLabel *hLabel=new GnLabel;
  90.     hScale = new GnScale;
  91.     GnLabel *vLabel=new GnLabel;
  92.     vScale = new GnScale;
  93.  
  94.     vLabel->setR_topAttachment(XmATTACH_FORM);
  95.     vLabel->setR_leftAttachment(XmATTACH_FORM);
  96.     vLabel->create(form, "Vertical distance: ");
  97.  
  98.     vScale->setR_orientation(XmHORIZONTAL);
  99.     vScale->setR_showValue(TRUE);
  100.     vScale->setR_value(10);
  101.     vScale->setR_maximum(100);
  102.     vScale->setR_topAttachment(XmATTACH_FORM);
  103.     vScale->setR_leftAttachment(XmATTACH_WIDGET);
  104.     vScale->setR_leftWidget(vLabel);
  105.     vScale->setR_rightAttachment(XmATTACH_POSITION);
  106.     vScale->setR_rightPosition(50);
  107.     vScale->create(form, "vScale");
  108.     vScale->add_valueChangedCallback(CALLBACK(ClassDocument, VDistance,this));
  109.  
  110.     hLabel->setR_topAttachment(XmATTACH_FORM);
  111.     hLabel->setR_leftAttachment(XmATTACH_WIDGET);
  112.     hLabel->setR_leftWidget(vScale);
  113.     hLabel->create(form, "Horizontal distance: ");
  114.  
  115.     hScale->setR_orientation(XmHORIZONTAL);
  116.     hScale->setR_showValue(TRUE);
  117.     hScale->setR_value(10);
  118.     hScale->setR_maximum(100);
  119.     hScale->setR_topAttachment(XmATTACH_FORM);
  120.     hScale->setR_leftAttachment(XmATTACH_WIDGET);
  121.     hScale->setR_leftWidget(hLabel);
  122.     hScale->setR_rightAttachment(XmATTACH_FORM);
  123.     hScale->create(form, "hScale");
  124.     hScale->add_valueChangedCallback(CALLBACK(ClassDocument, HDistance,this));
  125.  
  126.     GnVariableScrolledWindow *scroller = new GnStaticScrolledWindow;
  127.     scroller->setR_topAttachment(XmATTACH_WIDGET);
  128.     scroller->setR_topWidget(vScale);
  129.     scroller->setR_leftAttachment(XmATTACH_FORM);
  130.     scroller->setR_rightAttachment(XmATTACH_FORM);
  131.     scroller->setR_bottomAttachment(XmATTACH_FORM);
  132.     scroller->setR_width( 1200 );
  133.     scroller->setR_height( 800 );
  134.     scroller->create(form, "scrolledWindow");
  135.  
  136.     main_view=view=new GnGraphView( this, 12 );
  137.     view->setR_width( 1200 );
  138.     view->setR_height( 800 );
  139.     view->setR_resizePolicy( XmRESIZE_NONE );
  140.     view->create(scroller, "mainView");
  141.  
  142.  
  143. }
  144.  
  145. void ClassDocument ::
  146. CreateGraph(caddr_t, caddr_t)
  147. {
  148.     Gina_Debug_NL ("GraphDocument :: CreateGraph");
  149.     GnClassListIterator *all_classes_it = GnClass::ClassListIterator();
  150.     GnClassInfoListIterator *one_class_it;
  151.     
  152.     for (all_classes_it->Start(); !all_classes_it->Off(); all_classes_it->Forth())
  153.     view->add(all_classes_it->Item(), False, True);
  154.     for (all_classes_it->Start(); !all_classes_it->Off(); all_classes_it->Forth())
  155.     for (one_class_it = all_classes_it->Item()->SubclassesIterator();
  156.          !one_class_it->Off(); one_class_it->Forth())
  157.             view->AddEdge(all_classes_it->Item(),
  158.                   one_class_it->Item()->TheClass());
  159.     view->DoLayout();
  160. }
  161.  
  162. void ClassDocument ::
  163. CreateErichsGraph(caddr_t, caddr_t)
  164. {
  165.     Gina_Debug_NL ("GraphDocument :: CreateErichsGraph");
  166.     GnPresentable *basic_mixin = view->add("Basic");
  167.     GnPresentable *word_mixin = view->add("Word");
  168.     GnPresentable *data_mixin = view->add("Data");
  169.     GnPresentable *date_mixin = view->add("Date");
  170.     GnPresentable *scoping_mixin = view->add("Scoping");
  171.     GnPresentable *graphic_mixin = view->add("Graphic");
  172.     GnPresentable *free_mixin = view->add("Free");
  173.     GnPresentable *document_mixin = view->add("Document");
  174.     GnPresentable *program_mixin = view->add("Program");
  175.     GnPresentable *electronic_mixin = view->add("Electronic");
  176.     GnPresentable *mail_mixin = view->add("Mail");
  177.     GnPresentable *business_mixin = view->add("Business");
  178.     GnPresentable *natural_mixin = view->add("Natural");
  179.     GnPresentable *sequel_mixin = view->add("Sequel");
  180.     GnPresentable *rpg_mixin = view->add("RPG");
  181.     GnPresentable *pascal_mixin = view->add("Pascal");
  182.     GnPresentable *budget_mixin = view->add("Budget");
  183.     GnPresentable *visicalc_mixin = view->add("VisiCalc");
  184.     GnPresentable *project_mixin = view->add("Project");
  185.  
  186.     view->AddEdge(basic_mixin, word_mixin);
  187.     view->AddEdge(basic_mixin, data_mixin);
  188.     view->AddEdge(basic_mixin, date_mixin);
  189.     view->AddEdge(basic_mixin, scoping_mixin);
  190.     view->AddEdge(basic_mixin, graphic_mixin);
  191.     view->AddEdge(word_mixin, free_mixin);
  192.     view->AddEdge(word_mixin, program_mixin);
  193.     view->AddEdge(word_mixin, electronic_mixin);
  194.     view->AddEdge(data_mixin, document_mixin);
  195.     view->AddEdge(data_mixin, program_mixin);
  196.     view->AddEdge(data_mixin, electronic_mixin);
  197.     view->AddEdge(date_mixin, document_mixin);
  198.     view->AddEdge(date_mixin, program_mixin);
  199.     view->AddEdge(date_mixin, electronic_mixin);
  200.     view->AddEdge(scoping_mixin, document_mixin);
  201.     view->AddEdge(scoping_mixin, program_mixin);
  202.     view->AddEdge(scoping_mixin, electronic_mixin);
  203.     view->AddEdge(graphic_mixin, electronic_mixin);
  204.     view->AddEdge(document_mixin, mail_mixin);
  205.     view->AddEdge(document_mixin, business_mixin);
  206.     view->AddEdge(document_mixin, natural_mixin);
  207.     view->AddEdge(program_mixin, sequel_mixin);
  208.     view->AddEdge(program_mixin, rpg_mixin);
  209.     view->AddEdge(program_mixin, pascal_mixin);
  210.     view->AddEdge(electronic_mixin, budget_mixin);
  211.     view->AddEdge(electronic_mixin, visicalc_mixin);
  212.     view->AddEdge(electronic_mixin, project_mixin);
  213.     view->AddEdge(free_mixin, document_mixin);
  214.     view->AddEdge(free_mixin, program_mixin);
  215.     
  216.     view->DoLayout();
  217. }
  218.  
  219. Boolean ClassDocument ::
  220. write_to_stream( ostream &ofs )
  221. {
  222.     return(TRUE);
  223. }
  224.  
  225. Boolean ClassDocument ::
  226. read_from_stream ( istream &ifs )
  227. {
  228.     return(TRUE);
  229. }
  230.  
  231. //---------------------------------------------------------------------
  232. //---------------------------------------------------------------------
  233. int main (unsigned int argc, char ** argv)
  234. {
  235.     ClassApplication Class;
  236. #ifdef GINA_DEBUG
  237.     Class.set_sync();
  238. #endif
  239.     Class.run( argc, argv );
  240. }
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.