ResourceDialog.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. for( auto p : *unusedPaths )
  41. {
  42. if( p->hat( ".ltdb/" ) && (typ | TEXTUR) == typ )
  43. paths->addEintrag( p->getText() );
  44. if( p->hat( ".m2/" ) && (typ | MODEL2D) == typ )
  45. paths->addEintrag( p->getText() );
  46. }
  47. unusedPaths->release();
  48. } );
  49. }
  50. Text path = paths->zEintragText( 0 )->getText();
  51. if( path.hat( ".ltdb/" ) )
  52. {
  53. bv->setBild( this->daten->loadBildFromPath( path.getText() ) );
  54. bv->addStyle( Zeichnung::Style::Sichtbar );
  55. }
  56. else if( path.hat( ".m2/" ) )
  57. {
  58. m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
  59. m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
  60. m2v->zModel()->setFarbe( 0xFFFFFFFF );
  61. m2v->addStyle( Zeichnung::Style::Sichtbar );
  62. }
  63. else
  64. {
  65. m2v->removeStyle( Zeichnung::Style::Sichtbar );
  66. bv->removeStyle( Zeichnung::Style::Sichtbar );
  67. }
  68. paths->setEventAktion( [this]( void* p, AuswahlBox* a, int unused, int auswahl ) {
  69. Text path = paths->zEintragText( paths->getAuswahl() )->getText();
  70. if( path.hat( ".ltdb/" ) )
  71. {
  72. m2v->removeStyle( Zeichnung::Style::Sichtbar );
  73. bv->setBild( this->daten->loadBildFromPath( path.getText() ) );
  74. bv->addStyle( Zeichnung::Style::Sichtbar );
  75. }
  76. else if( path.hat( ".m2/" ) )
  77. {
  78. bv->removeStyle( Zeichnung::Style::Sichtbar );
  79. m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
  80. m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
  81. m2v->zModel()->setFarbe( 0xFFFFFFFF );
  82. m2v->addStyle( Zeichnung::Style::Sichtbar );
  83. }
  84. else
  85. {
  86. m2v->removeStyle( Zeichnung::Style::Sichtbar );
  87. bv->removeStyle( Zeichnung::Style::Sichtbar );
  88. }
  89. } );
  90. Knopf* ok = initKnopf( 295, 425, 100, 20, uiFactory, Knopf::Style::Normal, "ok" );
  91. addMember( ok );
  92. ok->setMausEreignis( [this, onClose]( void* p, void* o, MausEreignis me ) {
  93. if( me.id == ME_RLinks )
  94. {
  95. removeStyle( Fenster::Style::Sichtbar );
  96. onClose( paths->zEintragText( paths->getAuswahl() )->getText() );
  97. }
  98. return 1;
  99. } );
  100. Knopf* abbrechen = initKnopf( 5, 425, 100, 20, uiFactory, Knopf::Style::Normal, "abbrechen" );
  101. addMember( abbrechen );
  102. auto abbruchAction = [this, onClose]( void* p, void* o, MausEreignis me ) {
  103. if( me.id == ME_RLinks )
  104. {
  105. removeStyle( Fenster::Style::Sichtbar );
  106. onClose( 0 );
  107. }
  108. return 1;
  109. };
  110. abbrechen->setMausEreignis( abbruchAction );
  111. setClosingMe( abbruchAction );
  112. bool* verl = &verlassen;
  113. addMember( dynamic_cast<AuswahlBox*>(paths->getThis()) );
  114. if( !paths->getEintragAnzahl() )
  115. {
  116. removeStyle( Zeichnung::Style::Sichtbar );
  117. onClose( 0 );
  118. }
  119. }
  120. // Destruktor
  121. ResourceDialog::~ResourceDialog()
  122. {
  123. paths->release();
  124. m2v->release();
  125. bv->release();
  126. daten->release();
  127. }