Browse Source

Namensgebung der polygone in m2d dateien hinzugefügt

Kolja Strohm 6 years ago
parent
commit
ad7ce869a2

+ 55 - 7
KSGClient/NachLogin/Editor/Karte/Dateien/KEDModel2DEditor.cpp

@@ -102,6 +102,7 @@ VertexData *VertexData::release()
 // Konstruktor
 PolygonData::PolygonData( Polygon2D &pg )
 {
+    name = pg.name->getText();
     vd = new RCArray< VertexData >();
     sichtbar = 1;
     ref = 1;
@@ -170,7 +171,17 @@ void PolygonData::setSichtbar( bool s )
     sichtbar = s;
 }
 
+void PolygonData::setName( const char *name )
+{
+    this->name = name;
+}
+
 // constant
+const char *PolygonData::getName() const
+{
+    return name;
+}
+
 bool PolygonData::istSichtbar() const
 {
     return sichtbar;
@@ -189,6 +200,8 @@ int PolygonData::getVertexAnzahl() const
 void PolygonData::getM2( Polygon2D &pd, bool textur ) const
 {
     int anz = vd->getEintragAnzahl();
+    if( !pd.name )
+        pd.name = new Text( name );
     if( !pd.vertex )
         pd.vertex = new Array< Vertex >();
     if( !pd.tKordinaten )
@@ -262,9 +275,11 @@ Data::~Data()
 void Data::addPolygon()
 {
     Polygon2D p;
+    p.name = new Text();
     p.vertex = new Array< Vertex >();
     pd->add( new PolygonData( p ) );
     p.vertex->release();
+    p.name->release();
 }
 
 void Data::removePolygon( int num )
@@ -364,7 +379,7 @@ Model2DData *Data::getM2() const
     Array< Polygon2D > *polygons = new Array< Polygon2D >();
     for( int i = 0; i < anz; i++ )
     {
-        Polygon2D pd = { 0, 0 };
+        Polygon2D pd = { 0, 0, 0 };
         this->pd->z( i )->getM2( pd, rTextur );
         polygons->add( pd );
     }
@@ -410,6 +425,7 @@ EditorListe::EditorListe( Schrift *zSchrift )
     ram->setPosition( 720, 10 );
     scroll = new VScrollBar();
     schrift = zSchrift->getThis();
+    pName = initTextFeld( 0, 0, 80, 20, schrift, TextFeld::Style::TextFeld, "" );
     data = 0;
     ref = 1;
 }
@@ -417,6 +433,7 @@ EditorListe::EditorListe( Schrift *zSchrift )
 // Destruktor
 EditorListe::~EditorListe()
 {
+    pName->release();
     ram->release();
     scroll->release();
     if( data )
@@ -443,8 +460,10 @@ void EditorListe::doMausEreignis( MausEreignis &me )
         return;
     }
     scroll->doMausMessage( ram->getBreite() - 17, 1, 15, ram->getHeight() - 2, me );
+    if( data->getSelectedPolygon() >= 0 )
+        pName->doMausEreignis( me );
     rend |= scroll->getRend();
-    if( me.id == ME_RLinks )
+    if( me.id == ME_RLinks && !me.verarbeitet )
     {
         int pAnz = data->getPolygonAnzahl();
         int y = -scroll->getScroll();
@@ -503,8 +522,16 @@ void EditorListe::doMausEreignis( MausEreignis &me )
     me.my += ram->getY();
 }
 
+void EditorListe::doTastaturEreignis( TastaturEreignis &te )
+{
+    if( data && data->getSelectedPolygon() >= 0 )
+        pName->doTastaturEreignis( te );
+}
+
 bool EditorListe::tick( double zeit )
 {
+    if( data && data->getSelectedPolygon() >= 0 )
+        rend |= pName->tick( zeit );
     bool ret = rend;
     rend = 0;
     return ret;
@@ -525,11 +552,30 @@ void EditorListe::render( Bild &zRObj )
     for( int i = 0; i < pAnz; i++ )
     {
         if( data->getSelectedPolygon() == i )
+        {
+            pName->setPosition( 20, y );
+            pName->setText( data->zPolygon( data->getSelectedPolygon() )->getName() );
+            Data *tmpData = data;
+            pName->setNTastaturEreignis( [ tmpData  ]( void *p, void *o, TastaturEreignis te ) -> bool {
+                if( tmpData->getSelectedPolygon() >= 0 )
+                    tmpData->zPolygon( tmpData->getSelectedPolygon() )->setName( ( (TextFeld*)o )->zText()->getText() );
+                return 1;
+            } );
             zRObj.fillRegion( 0, y, 133, 20, 0xFF002000 );
-        name = "Polygon ";
-        name += i;
-        schrift->setDrawPosition( 20, y + 4 );
-        schrift->renderText( &name, zRObj, 0xFFFFFFFF );
+            pName->render( zRObj );
+        }
+        else
+        {
+            if( textLength( data->zPolygon( i )->getName() ) > 0 )
+                name = data->zPolygon( i )->getName();
+            else
+            {
+                name = "Polygon ";
+                name += i;
+            }
+            schrift->setDrawPosition( 20, y + 4 );
+            schrift->renderText( &name, zRObj, 0xFFFFFFFF );
+        }
         zRObj.drawLinie( Punkt( 115, y + 1 ), Punkt( 132, y + 18 ), 0xFFFF0000 );
         zRObj.drawLinie( Punkt( 132, y + 1 ), Punkt( 115, y + 18 ), 0xFFFF0000 );
         if( ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
@@ -1004,6 +1050,7 @@ void GUI::doTastaturEreignis( TastaturEreignis &te )
 {
     if( !sichtbar )
         return;
+    liste->doTastaturEreignis( te );
     editor->doTastaturEreignis( te );
 }
 
@@ -1026,7 +1073,8 @@ bool GUI::tick( double zeit )
                     data->setTextur( b );
                 err->release();
             }
-            importPfad->release();
+            if( importPfad )
+                importPfad->release();
         }
     }
     rend |= speichern->tick( zeit );

+ 5 - 0
KSGClient/NachLogin/Editor/Karte/Dateien/KEDModel2DEditor.h

@@ -45,6 +45,7 @@ namespace Model2DEditor
     {
     private:
         RCArray< VertexData > *vd;
+        Text name;
         bool sichtbar;
         int ref;
 
@@ -62,7 +63,9 @@ namespace Model2DEditor
         void select( Punkt p1, Punkt p2 );
         void deSelect();
         void setSichtbar( bool s );
+        void setName( const char *name );
         // constant
+        const char *getName() const;
         bool istSichtbar() const;
         VertexData *zVertex( int num ) const;
         int getVertexAnzahl() const;
@@ -120,6 +123,7 @@ namespace Model2DEditor
         Data *data;
         Array< bool > ausgeklappt;
         Schrift *schrift;
+        TextFeld *pName;
         int ref;
 
     public:
@@ -130,6 +134,7 @@ namespace Model2DEditor
         // nicht constant
         void setDataZ( Data *d );
         void doMausEreignis( MausEreignis &me ) override;
+        void doTastaturEreignis( TastaturEreignis &te ) override;
         bool tick( double zeit ) override;
         void render( Bild &zRObj ) override;
         // Reference Counting

+ 12 - 0
KSGClient/Netzwerk/Klients/EditorK.cpp

@@ -2430,6 +2430,14 @@ Model2DData *EditorKlient::deModelLaden( Text *zDatei, Text *zModel, FBalken *zF
                             Polygon2D p;
                             p.vertex = new Array< Vertex >();
                             p.tKordinaten = new Array< Punkt >();
+                            char nLän = 0;
+                            klient->getNachrichtEncrypted( &nLän, 1 );
+                            char *txt = new char[ nLän + 1 ];
+                            if( nLän )
+                                klient->getNachrichtEncrypted( txt, nLän );
+                            txt[ nLän ] = 0;
+                            p.name = new Text( txt );
+                            delete[] txt;
                             int anz2 = 0;
                             klient->getNachrichtEncrypted( (char*)&anz2, 4 );
                             for( int j = 0; j < anz2; j++ )
@@ -2591,6 +2599,10 @@ bool EditorKlient::deModelSpeichern( Text *zDatei, Text *zModel, Model2DData *zD
                         for( int i = 0; i < anz; i++ )
                         {
                             Polygon2D pol = zData->polygons->get( i );
+                            char nLän = pol.name->getLength();
+                            klient->sendeEncrypted( &nLän, 1 );
+                            if( nLän )
+                                klient->sendeEncrypted( pol.name->getText(), nLän );
                             int anz2 = pol.vertex->getEintragAnzahl();
                             klient->sendeEncrypted( (char*)&anz2, 4 );
                             for( int j = 0; j < anz2; j++ )