Programm.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #include "Programm.h"
  2. #include <Punkt.h>
  3. #include <Rahmen.h>
  4. // Inhalt der Programm Klasse aus Programm.h
  5. // Konstruktor
  6. Programm::Programm( Bildschirm *b, Schrift *s )
  7. : ReferenceCounter()
  8. {
  9. bildschirm = b;
  10. schrift = s;
  11. Punkt bg = b->getBackBufferSize();
  12. kFenster = new Fenster();
  13. kFenster->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::VScroll );
  14. kFenster->setRFarbe( 0xFFFFFFFF );
  15. kFenster->setRBreite( 1 );
  16. kFenster->setPosition( bg.x - 200, 0 );
  17. kFenster->setSize( 200, bg.y );
  18. kFenster->setVSBMax( 0 );
  19. bildschirm->addMember( kFenster );
  20. mFenster = new Fenster();
  21. mFenster->setStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar );
  22. mFenster->setSize( bg.x - 200, bg.y );
  23. bildschirm->addMember( mFenster );
  24. auswahlRahmen = new LRahmen();
  25. auswahlRahmen->setPosition( 0, -30 );
  26. auswahlRahmen->setSize( 182, 30 );
  27. auswahlRahmen->setRamenBreite( 1 );
  28. auswahlRahmen->setFarbe( 0xFFFFFFFF );
  29. kFenster->addMember( auswahlRahmen );
  30. sichtbar = -1;
  31. name = new RCArray< Text >();
  32. knopf = new RCArray< Knopf >();
  33. abschnitte = new RCArray< Abschnitt >();
  34. abschnittAnzahl = 0;
  35. }
  36. // Destruktor
  37. Programm::~Programm()
  38. {
  39. bildschirm->removeMember( kFenster );
  40. bildschirm->removeMember( mFenster );
  41. name->release();
  42. knopf->release();
  43. abschnitte->release();
  44. bildschirm->release();
  45. schrift->release();
  46. }
  47. // nicht constant
  48. bool Programm::addAbschnitt( const char *name, Abschnitt *abschnitt )
  49. {
  50. bool hat = 0;
  51. for( int i = 0; i < abschnittAnzahl; i++ )
  52. {
  53. if( this->name->z( i )->istGleich( name ) )
  54. {
  55. hat = 1;
  56. break;
  57. }
  58. }
  59. if( hat )
  60. {
  61. abschnitt->release();
  62. return 0;
  63. }
  64. Knopf *k = new Knopf();
  65. k->setStyle( Knopf::Style::Normal );
  66. k->setSize( 150, 20 );
  67. k->setPosition( 16, abschnittAnzahl * 30 + 5 );
  68. k->setSchriftZ( dynamic_cast<Schrift *>( schrift->getThis() ) );
  69. k->setText( name );
  70. k->setMausEreignisParameter( this );
  71. k->setMausEreignis( programmAbschnittME );
  72. kFenster->addMember( dynamic_cast<Zeichnung *>( k->getThis() ) );
  73. this->name->add( new Text( name ), abschnittAnzahl );
  74. knopf->add( k, abschnittAnzahl );
  75. abschnitte->add( abschnitt, abschnittAnzahl );
  76. abschnittAnzahl++;
  77. abschnitt->setFenster( dynamic_cast<Fenster *>( mFenster->getThis() ) );
  78. if( sichtbar < 0 )
  79. {
  80. sichtbar = 0;
  81. auswahlRahmen->setPosition( 0, 0 );
  82. abschnitt->setSichtbar( 1 );
  83. }
  84. kFenster->setVSBMax( abschnittAnzahl * 30 );
  85. return 1;
  86. }
  87. bool Programm::removeAbschnitt( const char *name )
  88. {
  89. for( int i = 0; i < abschnittAnzahl; i++ )
  90. {
  91. if( this->name->z( i )->istGleich( name ) )
  92. {
  93. if( sichtbar == i )
  94. abschnitte->z( i )->setSichtbar( 0 );
  95. this->name->remove( i );
  96. kFenster->removeMember( knopf->z( i ) );
  97. knopf->remove( i );
  98. abschnitte->remove( i );
  99. abschnittAnzahl--;
  100. if( sichtbar >= abschnittAnzahl )
  101. sichtbar = abschnittAnzahl - 1;
  102. if( sichtbar > i )
  103. sichtbar--;
  104. if( sichtbar >= 0 && !abschnitte->z( sichtbar )->istSichtbar() )
  105. abschnitte->z( i )->setSichtbar( 1 );
  106. auswahlRahmen->setPosition( auswahlRahmen->getX(), sichtbar * 30 );
  107. kFenster->setVSBMax( abschnittAnzahl * 30 );
  108. return 1;
  109. }
  110. }
  111. return 0;
  112. }
  113. bool Programm::renameAbschnitt( const char *name, const char *newName )
  114. {
  115. for( int i = 0; i < abschnittAnzahl; i++ )
  116. {
  117. if( this->name->z( i )->istGleich( name ) )
  118. {
  119. this->name->z( i )->setText( newName );
  120. knopf->z( i )->setText( newName );
  121. return 1;
  122. }
  123. }
  124. return 0;
  125. }
  126. bool Programm::abschnittAuswählen( const char *name )
  127. {
  128. for( int i = 0; i < abschnittAnzahl; i++ )
  129. {
  130. if( this->name->z( i )->istGleich( name ) )
  131. {
  132. if( sichtbar == i )
  133. break;
  134. abschnitte->z( sichtbar )->setSichtbar( 0 );
  135. sichtbar = i;
  136. abschnitte->z( i )->setSichtbar( 1 );
  137. auswahlRahmen->setPosition( auswahlRahmen->getX(), sichtbar * 30 );
  138. return 1;
  139. }
  140. }
  141. return 0;
  142. }
  143. bool Programm::abschnittMausEreignis( void *obj, MausEreignis me )
  144. {
  145. if( me.id == ME_RLinks )
  146. abschnittAuswählen( ( (Knopf *)obj )->zText()->getText() );
  147. return 1;
  148. }
  149. // constant
  150. Text *Programm::getSichtbarAbschnittName() const
  151. {
  152. if( sichtbar >= abschnittAnzahl )
  153. return 0;
  154. return name->get( sichtbar );
  155. }
  156. Text *Programm::zSichtbarAbschnittName() const
  157. {
  158. if( sichtbar >= abschnittAnzahl )
  159. return 0;
  160. return name->z( sichtbar );
  161. }
  162. // Ereignis
  163. bool programmAbschnittME( void *p, void *obj, MausEreignis me )
  164. {
  165. if( p )
  166. return ( (Programm *)p )->abschnittMausEreignis( obj, me );
  167. return 0;
  168. }