Changeset 2776 in Sophya


Ignore:
Timestamp:
May 27, 2005, 5:08:16 PM (20 years ago)
Author:
ansari
Message:

Tentative de correction d'appel au mauvais FinishCreate() - Reza 27/5/2005

Location:
trunk/SophyaPI/PI
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PI/pibwdgx.cc

    r2615 r2776  
    2929PIBaseWdgX::PIBaseWdgX(PIContainerGen *par, const char *nom,
    3030                       int sx, int sy, int px, int py)
    31 : PIBaseWdgGen(par, nom, sx, sy, px, py)
     31  : PIBaseWdgGen(par, nom, sx, sy, px, py) , bwx_finishDone(false)
    3232
    3333{
     
    3636Init();
    3737mWGrC = NULL; // PIGraphic (Contexte graphique) associe a la fenetre
    38 finishDone = false;     // FinishCreate() pas encore appele
    3938
    4039CreateXtWdg(nom, piXtBaseWidgetClass, NULL, sx, sy, px, py);
     
    5049mPtrS = PI_CrossPointer;
    5150SelPointerShape();
    52 // PIGraphic (Contexte graphique) associe a la fenetre
     51// ----------------------------------------------------------------------------
     52// Reza: Fev/Mai 2005 - On doit s'assurer que le bon FinishCreate() est appele
     53// (table de fonction virtuelle mise a jour par les constructeurs successifs
     54// dans les classes heritieres
     55// et on gere le PIGraphic (Contexte graphique) associe a la fenetre
    5356// Si pas cree par FinishCreate()
    54 if (!mWGrC) mWGrC = new PIGraphicX(this);   
     57if (finishDone) FinishCreate();
     58else mWGrC = new PIGraphicX(this);   
     59
    5560SetBackgroundColor();
    5661SetForegroundColor();
     
    7580{
    7681// appele par la fenetre mere, apres XtRealize()
    77 if (finishDone) {
    78   fprintf(stderr, "BUG/PIBaseWdgX::FinishCreate() multiple call \n");
    79   return;
    80   }
     82// Doit pouvoir etre appele de multiple fois
     83if (bwx_finishDone) return;
    8184PIWdgX::FinishCreate();
    8285
     
    101104if (!mWGrC) mWGrC = new PIGraphicX(this);   
    102105mWGrC->TerminateInit();
     106bwx_finishDone = true;
    103107}
    104108
  • trunk/SophyaPI/PI/pibwdgx.h

    r1034 r2776  
    5252  void               Init();
    5353  PIPointer mPtrS;
     54// pour s'assurer que le bon FinishCreate() est appele - pb lie aux tables de fonctions
     55// virtuelles des classes qui sont remplies au fur et a mesure des constructeurs
     56  bool               bwx_finishDone;
    5457};
    5558
  • trunk/SophyaPI/PI/picontainergen.cc

    r2652 r2776  
    4646//      Création d'un objet "PIContainer" dans le conteneur parent "par", de
    4747//      taille "sx,sy", se trouvant à la position "px,py" avec le nom "nom".
    48 //      Tous les widgets fils sont détruits (delete) par le destructeur
    49 //      (voir "SetAutoDelChilds()").
    50 //      Par défaut, le conteneur créé est visible (actif).
     48//      Peut controler la destruction des widgets fils (voir "SetAutoDelChilds()").
     49//      Le conteneur créé n'est pas visible (actif) par défaut. Il faut
     50//      appeler "Show()".
    5151// long kind()
    5252//      Renvoie le type de la classe de l'objet ("=PIContainerGen::ClassId") pour cette classe.
     
    142142void PIContainerGen::Show()
    143143{
     144Manage();
    144145stvis = true;
    145 Manage();
    146 return;
     146FinishCreate();
    147147}
    148148
     
    200200void PIContainerGen::FinishCreate()
    201201{
     202if (!stvis) return;
    202203if (stfcr)  return;
    203204PIWdg::FinishCreate();   
    204 int k;
    205 for(k=0; k<NbChilds(); k++)  GetChild(k)->FinishCreate();
     205for(int k=0; k<NbChilds(); k++)  GetChild(k)->FinishCreate();
    206206stfcr = true;
    207207}
  • trunk/SophyaPI/PI/picontainerx.cc

    r2652 r2776  
    3333// Pour gerer le probleme de l'appel a FinishCreate()
    3434// lorsque celui du parent est deja appele
    35 if (finishDone)  {
    36   //DBG  cout << " PIContainerX::PIContainerX/DBG - finishDone - Nom= " << nom << endl;
    37   Manage();
    38   stfcr = true;
    39   }
     35if (finishDone)  FinishCreate();
    4036}
    4137
     
    5955// *************** Reza - Fev 2005 ***************
    6056// Probleme lie a la table des fonctions virtuelles - voir ci-dessus
    61 if (finishDone)  {
    62   //DBG  cout << " PIContainerX::PIContainerX_Special/DBG - finishDone - Nom= " << nom << endl;
    63   Manage();
    64   stfcr = true;
    65   }
     57if (finishDone)  FinishCreate();
    6658}
    6759
  • trunk/SophyaPI/PI/piimage.cc

    r2652 r2776  
    99#include <stdlib.h>
    1010#include <stdio.h>
     11#include <iostream>
    1112#include <string.h>
    1213#include <ctype.h>
     
    16191620  piimg->SetGloVWin(gimv, false);
    16201621  piimg->SetCMapWin(cmapv, false);
    1621    
    16221622}
    16231623
     
    16251625PIImageNavigator::~PIImageNavigator()
    16261626{
     1627  if (piimg) delete piimg;
     1628  if (zoom)  delete zoom;
     1629  if (gimv)  delete gimv;
     1630  if (cmapv) delete cmapv;
    16271631}
    16281632
  • trunk/SophyaPI/PI/pioptmenux.cc

    r2615 r2776  
    6363mMen->SetMsgParent(this);
    6464Manage();
     65if (finishDone) FinishCreate();
    6566}
    6667
  • trunk/SophyaPI/PI/piwdgx.cc

    r2615 r2776  
    223223{
    224224// appele par la fenetre mere, apres XtRealize()
    225 if (finishDone) {
    226   fprintf(stderr, "BUG/PIWdgX::FinishCreate() multiple call \n");
    227   return;
    228   }
     225// Doit pouvoir etre appele plusieurs fois
    229226finishDone = true;
    230227return;
Note: See TracChangeset for help on using the changeset viewer.