ResourceDialog.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "ResourceDialog.h"
  2. #include "../../../Initialisierung/Initialisierung.h"
  3. using namespace Editor;
  4. // Konstructor
  5. // tr: Ein Zeiger auf den zu verwendenden TextRenderer
  6. // typ: Beschreibt was der nutzer alles auswählen kann
  7. // daten: Ein Zeiger auf die Karte, welche alle möglichen resouren enthält
  8. // onClose: Eine Funktion die aufgerufen wird, sobald der Dialog geschlossen wird. Es wird der ausgewählte Pfad oder 0 übergeben.
  9. // screenSize: Die größe des Bildschirms zum positionieren des dialogs
  10. ResourceDialog::ResourceDialog( TextRenderer *tr, UIInit &uiFactory, ResourceDialogType typ, Editor::KarteDaten *daten, std::function< void( const char *path ) > onClose, Punkt screenSize )
  11. : Dialog( tr )
  12. {
  13. setTitel( "Resource Auswahl" );
  14. this->daten = daten;
  15. setSize( 400, 468 );
  16. setPosition( screenSize / 2 - getSize() / 2 );
  17. m2v = new M2DVorschau();
  18. m2v->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrScale | M2DVorschau::Style::Erlaubt );
  19. m2v->setSize( 390, 390 );
  20. m2v->setPosition( 5, 30 );
  21. bv = initBildZ( 5, 30, 390, 390, uiFactory, BildZ::Style::normal & ~Zeichnung::Style::Sichtbar, 0 );
  22. addMember( dynamic_cast<BildZ *>( bv->getThis() ) );
  23. addMember( dynamic_cast<M2DVorschau *>( m2v->getThis() ) );
  24. paths = initAuswahlBox( 5, 5, 390, 20, uiFactory, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} );
  25. if( ( typ | ALLOW_RESOURCES ) == typ )
  26. {
  27. int anz = daten->getResourceAnzahl();
  28. for( int i = 0; i < anz; i++ )
  29. {
  30. ResourceDaten *r = daten->getResource( i );
  31. if( r->path.hat( ".ltdb/" ) && ( typ | TEXTUR ) == typ )
  32. paths->addEintrag( r->path );
  33. if( r->path.hat( ".m2/" ) && ( typ | MODEL2D ) == typ )
  34. paths->addEintrag( r->path );
  35. }
  36. }
  37. if( ( typ | ALLOW_NEW_RESOURCES ) == typ )
  38. {
  39. daten->loadUnusedResourcePaths( [this, typ]( RCArray< Text > *unusedPaths )
  40. {
  41. for( auto p = unusedPaths->getIterator(); p; p++ )
  42. {
  43. if( p->hat( ".ltdb/" ) && ( typ | TEXTUR ) == typ )
  44. paths->addEintrag( p->getText() );
  45. if( p->hat( ".m2/" ) && ( typ | MODEL2D ) == typ )
  46. paths->addEintrag( p->getText() );
  47. }
  48. unusedPaths->release();
  49. } );
  50. }
  51. Text path = paths->zEintragText( 0 )->getText();
  52. if( path.hat( ".ltdb/" ) )
  53. {
  54. bv->setBild( this->daten->loadBildFromPath( path.getText() ) );
  55. bv->addStyle( Zeichnung::Style::Sichtbar );
  56. }
  57. else if( path.hat( ".m2/" ) )
  58. {
  59. m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
  60. m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
  61. m2v->zModel()->setFarbe( 0xFFFFFFFF );
  62. m2v->addStyle( Zeichnung::Style::Sichtbar );
  63. }
  64. else
  65. {
  66. m2v->removeStyle( Zeichnung::Style::Sichtbar );
  67. bv->removeStyle( Zeichnung::Style::Sichtbar );
  68. }
  69. paths->setEventAktion( [this]( void *p, AuswahlBox *a, int unused, int auswahl )
  70. {
  71. Text path = paths->zEintragText( paths->getAuswahl() )->getText();
  72. if( path.hat( ".ltdb/" ) )
  73. {
  74. m2v->removeStyle( Zeichnung::Style::Sichtbar );
  75. bv->setBild( this->daten->loadBildFromPath( path.getText() ) );
  76. bv->addStyle( Zeichnung::Style::Sichtbar );
  77. }
  78. else if( path.hat( ".m2/" ) )
  79. {
  80. bv->removeStyle( Zeichnung::Style::Sichtbar );
  81. m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
  82. m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
  83. m2v->zModel()->setFarbe( 0xFFFFFFFF );
  84. m2v->addStyle( Zeichnung::Style::Sichtbar );
  85. }
  86. else
  87. {
  88. m2v->removeStyle( Zeichnung::Style::Sichtbar );
  89. bv->removeStyle( Zeichnung::Style::Sichtbar );
  90. }
  91. } );
  92. Knopf *ok = initKnopf( 295, 425, 100, 20, uiFactory, Knopf::Style::Normal, "ok" );
  93. addMember( ok );
  94. ok->setMausEreignis( [this, onClose]( void *p, void *o, MausEreignis me )
  95. {
  96. if( me.id == ME_RLinks )
  97. {
  98. removeStyle( Fenster::Style::Sichtbar );
  99. onClose( paths->zEintragText( paths->getAuswahl() )->getText() );
  100. }
  101. return 1;
  102. } );
  103. Knopf *abbrechen = initKnopf( 5, 425, 100, 20, uiFactory, Knopf::Style::Normal, "abbrechen" );
  104. addMember( abbrechen );
  105. auto abbruchAction = [this, onClose]( void *p, void *o, MausEreignis me )
  106. {
  107. if( me.id == ME_RLinks )
  108. {
  109. removeStyle( Fenster::Style::Sichtbar );
  110. onClose( 0 );
  111. }
  112. return 1;
  113. };
  114. abbrechen->setMausEreignis( abbruchAction );
  115. setClosingMe( abbruchAction );
  116. bool *verl = &verlassen;
  117. addMember( dynamic_cast<AuswahlBox *>( paths->getThis() ) );
  118. if( !paths->getEintragAnzahl() )
  119. {
  120. removeStyle( Zeichnung::Style::Sichtbar );
  121. onClose( 0 );
  122. }
  123. }
  124. // Destruktor
  125. ResourceDialog::~ResourceDialog()
  126. {
  127. paths->release();
  128. m2v->release();
  129. bv->release();
  130. daten->release();
  131. }