Changeset 2230 in Sophya for trunk/SophyaPI


Ignore:
Timestamp:
Oct 25, 2002, 12:41:39 AM (23 years ago)
Author:
ansari
Message:

Corrections diverses liees a PIDrawer::DeactivateControlWindow() - Reza 25/10/2002

Location:
trunk/SophyaPI/PI
Files:
6 edited

Legend:

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

    r1827 r2230  
    434434    (*it).drw->Detach(this, id); mDrwList.erase(it);
    435435    if (id == mActDrwId) {
    436       if (NbDrawers() > 0) mActDrwId = (*mDrwList.end()).id;
     436      if (NbDrawers() > 0) mActDrwId = (*(mDrwList.end()-1)).id;
    437437      else mActDrwId = -1;
    438438    }
  • trunk/SophyaPI/PI/pidrawer.cc

    r2164 r2230  
    3838{
    3939  mFgDeleteOnDetach = false;
     40  mFgRefreshOnDelete = false;
    4041  mBWdg = NULL;
    4142  mGrUC = NULL;
     
    6566  // Desactivation totale de la fenetre de controle specialise
    6667  // ---> parametre d'appel PIBaseWdgGen* wdg=NULL
    67   DeactivateControlWindow(NULL);
     68  // DeactivateControlWindow(NULL);
     69  // Il semble qu'a ce niveau d'appel du desctructeur,
     70  // la table des fonctions virtuelles soit alterees et
     71  // la fonction virtuelle DeactivateControlWindow() pointe sur celle
     72  // de base - DeactivateControlWindow(NULL) doit donc etre appele
     73  // ds le destructeur de la classe derivee
     74  //                    Reza - Octobre 2002
     75
     76  // Mise a jour eventuelle de la fenetre PIDrwTools
     77  bool ckdeact = (PIDrwTools::GetActiveDrawer() == this) ? true : false;
    6878
    6979  list<DrwBWId>::iterator it;
    7080  mDndfg = true;
    71   for(it = mBWdgList.begin(); it != mBWdgList.end(); it++)
    72          (*it).wdg->RemoveDrawer((*it).id);
     81  for(it = mBWdgList.begin(); it != mBWdgList.end(); it++) {
     82    (*it).wdg->RemoveDrawer((*it).id);
     83    if (mFgRefreshOnDelete) (*it).wdg->Refresh();
     84  }
    7385  if (mGrUC)  delete mGrUC;
     86  if (ckdeact) PIDrwTools::UpdateActiveDrawer();
    7487}
    7588
     
    277290  // base-widget duquel on se detache
    278291  DeactivateControlWindow(wdg);
     292 
     293  // Mise a jour eventuelle de la fenetre PIDrwTools
     294  bool ckdeact = (PIDrwTools::GetActiveDrawer() == this) ? true : false;
    279295
    280296  list<DrwBWId>::iterator it;
     
    282298     if ( ((*it).id == id) && ((*it).wdg == wdg) ) { mBWdgList.erase(it);  break; }
    283299  if (mFgDeleteOnDetach && (mBWdgList.size() == 0))  delete this;
     300
     301  if (ckdeact) PIDrwTools::UpdateActiveDrawer();
    284302  return;
    285303}
     
    306324PIDrawer::DeactivateControlWindow(PIBaseWdgGen* wdg)
    307325{
    308   // Par defaut, il n'y a pas de fenetre de controle specialise
    309   // Donc, on ne fait rien
     326  // La mise a jour eventuelle de PIDrwTools se fait
     327  // directement lors de Detach() ou delete
     328  // La methode par defaut ne fait donc rien
    310329}
    311330
  • trunk/SophyaPI/PI/pidrawer.h

    r2184 r2230  
    1717  virtual           ~PIDrawer();
    1818
     19  // if true -> PIDrawer deleted when detached from last BaseWdg
    1920  inline  void       SetAutoDeleteOnDetach(bool fg)
    2021                       { mFgDeleteOnDetach = fg; }
     22  // if true -> PIBaseWdg()->Refresh() when PIDrawer is deleted
     23  inline  void       SetAutoRefreshOnDelete(bool fg)
     24                       { mFgRefreshOnDelete = fg; }
    2125
    2226  virtual void       SetLimits(double xmin, double xmax, double ymin, double ymax,
     
    102106  bool mFgDeleteOnDetach;         // si true -> delete drawer on detach
    103107                                  // from last BaseWdg
    104 
     108  bool mFgRefreshOnDelete;        // si true -> On rafraichit le BaseWdg
     109                                  // lors du delete ou Detach
     110         
    105111  double xMin, xMax, yMin, yMax;  // Valeurs en unites user
    106112  int xW0, yW0, xWd, yWd;        // Origine/largeur ds la fenetre de trace
  • trunk/SophyaPI/PI/pidrwtools.cc

    r2138 r2230  
    8989return(mCurBW);
    9090}
     91
     92/* --Methode-- */
     93PIDrawer* PIDrwTools::GetActiveDrawer()
     94{
     95if ((cwdrwt == NULL) || (mCurBW == NULL) || (cwdrwt->mNDr < 0) ) 
     96  return(NULL);
     97else return(mCurBW->GetDrawer(cwdrwt->mNDr));
     98}
     99
     100/* --Methode-- */
     101void PIDrwTools::UpdateActiveDrawer()
     102{
     103  if (cwdrwt && cwdrwt->IsVisible()) 
     104    cwdrwt->UpdateControlsFromDrawer(-9);
     105}
     106
    91107
    92108/* --Methode-- */
  • trunk/SophyaPI/PI/pidrwtools.h

    r1921 r2230  
    2424  virtual void  Show();
    2525
    26   static PIDrwTools* curlutw;
    2726  static void ShowPIDrwTools();
    2827  static void ShowPIDrwTools(PIBaseWdgGen* cbw);
     
    3029  static void SetCurrentBaseWdg(PIBaseWdgGen* cbw);
    3130  static PIBaseWdgGen* GetCurrentBaseWdg();
     31  static PIDrawer* GetActiveDrawer();
     32  static void UpdateActiveDrawer();
    3233
    3334protected:
  • trunk/SophyaPI/PI/piversion.h

    r2138 r2230  
    22#define PIVERSION_H_SEEN
    33
    4 #define PI_VERSIONNUMBER  3.80
     4#define PI_VERSIONNUMBER  3.83
    55
    66#endif
Note: See TracChangeset for help on using the changeset viewer.