Re: ROOT Enhancement Request

From: Valery Fine (fine@mail.cern.ch)
Date: Wed Aug 20 1997 - 15:43:04 MEST


Dear Reiner Rohlfs
On 20 Aug 97 at 13:24, you  wrote:


> Is it possible to disable and enable buttons?
> At a graphical user interface I would like to show the 
> user which buttons she/he can use at every moment.
> 
> By the way, how can my application program be noticed that
> the user has pressed the middle mouse button at a pad and
> has changed the current pad.
> 
  The ROOT main event loop works with the pointers to the objects of 
TObject class only.

  Whatever the mouse event is reported ROOT finds the 
pointer to the appropriated object and calls its 
TObject::ExecuteEvent method
(see: http://root.cern.ch/root/html/TPad.html#TPad:ExecuteEvent ).

  To supply your own function one may overload this method as 
follows:

  class TMyPadClass : public TPad {
  public:
    void ExecuteEvent(Int_t event, Int_t px, Int_t py)
    {     // Put here your our actions

      TPad::ExecuteEvent(event, px, py);  // Call "standard" one if any 
    }   
  }


  See as well http://root.cern.ch/root/html/TPad.html. It says:

 " ...
  When the mouse is moved on the Pad, The member function DistancetoPrimitive  
is called for all the elements in the pad. DistancetoPrimitive returns  the 
distance in pixels to this object.  when the object is within the distance 
window, the member function  ExecuteEvent is called for this object.  in 
ExecuteEvent, move, changes can be performed on the object.  For examples of 
DistancetoPrimitive and ExecuteEvent functions,  see classes 

        TLine::DistancetoPrimitive, TLine::ExecuteEvent              
        TBox::DistancetoPrimitive,  TBox::ExecuteEvent              
        TH1::DistancetoPrimitive,   TH1::ExecuteEvent  

   ... "

  The further examples can be find with our "Search Engine" 
(see http://root.cern.ch/root/Search.phtml ). Just supply "ExecuteEvent" as 
a key to seach for.

  All available events are defined with "Buttons.h" header file as follows:

//Z,+PATCH,//ROOT/INCLUDE.
//Z,+KEEP,Buttons,T=C++..
//*CMZ :  1.01/05 06/06/97  14.39.11  by  Fons Rademakers
//*CMZ :  1.00/03 14/03/97  17.57.47  by  Fons Rademakers
//*-- Author :    Rene Brun   08/12/95

#ifndef ROOT_Buttons
#define ROOT_Buttons

// Copyright (C) 1995 CodeCERN. All rights reserved.

enum EEventType {
   kNoEvent       =  0,
   kButton1Down   =  1, kButton2Down   =  2, kButton3Down   =  3, kKeyDown  =  4,
   kButton1Up     = 11, kButton2Up     = 12, kButton3Up     = 13, kKeyUp    = 14,
   kButton1Motion = 21, kButton2Motion = 22, kButton3Motion = 23, kKeyPress = 24,
   kButton1Locate = 41, kButton2Locate = 42, kButton3Locate = 43,
   kMouseMotion   = 51
};

enum EEditMode {
   kPolyLine  = 1,  kSPolyLine = 2,  kPolyGone  = 3,
   kSPolyGone = 4,  kBox       = 5,  kDelete    = 6,
   kPad       = 7,  kText      = 8,  kEditor    = 9,
   kExit      = 10, kPave      = 11, kPaveLabel = 12,
   kPaveText  = 13, kPavesText = 14, kEllipse   = 15,
   kArc       = 16, kLine      = 17, kArrow     = 18,
   kGraph     = 19, kMarker    = 20, kPolyMarker= 21,
   kPolyLine3D= 22, kWbox      = 23, kGaxis     = 24,
   kF1        = 25, kF2        = 26, kF3        = 27,
   kDiamond   = 28, kPolyMarker3D = 29
};
 

> I would like to enable and disable buttons depending on
> which pad is the current pad.
> 

   Might I advice you ? Would you mind to regard the way when one 
should not wait our enhancement and go ahead OO-way. I mean it 
should be relatively easy to derive your own class from our TPad and 
provide a new functionality you want. If it is NOT easy it will be a 
reason for "Bug report" or "Enhancement Request".  From another hand 
if it will be easy and useful we can incorporate your method for the 
"common" TPad to make it available for whole "Free Software" 
community.

  I believe Rene will supply you a good advice for this particular 
case (namely he will write some new code for you, myself work for 
another project now), but I think it would be more useful for ROOT, 
ROOT's users to let ROOT team implementing most general things. If 
our users will provide us some pieces of code they found useful to be 
included in ROOT this will be a great enhancement of ROOT.

  I'd like to highlight that I has expressed my own personal opinion
only but the ROOT team position on this issue..

  With my best regards,
                                   Valery



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:26:20 MET