]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mBarRange.cxx
#3347 creaMaracasVisu Bug New Normal - ViewerMPR2D Reset back position when set...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / pPlotter / mBarRange.cxx
index b60fe46f6b1fd9087f3ac776082ccb81e113a657..42db92071198e13c6a40271af51cb959ae9c1972 100644 (file)
@@ -1,6 +1,35 @@
+/*# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Sant�)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
+
 //----------------------------------------------------------------------------
+#include <wx/brush.h>
+#include <wx/gdicmn.h>
+
 #include "mBarRange.h"
 
+//const wxEventType wxEVT_TSBAR = wxNewEventType();
 
 DEFINE_EVENT_TYPE(wxEVT_TSBAR)
 DEFINE_EVENT_TYPE(wxEVT_TSBAR_ACTUAL)
@@ -14,6 +43,7 @@ DEFINE_EVENT_TYPE(wxEVT_SELECTION_END)
 //----------------------------------------------------------------------------
 
 IMPLEMENT_CLASS(mBarRange, wxScrolledWindow)
+
 BEGIN_EVENT_TABLE(mBarRange, wxScrolledWindow)
        EVT_PAINT (mBarRange::OnPaint)
        EVT_SIZE  (mBarRange::OnSize)
@@ -27,6 +57,8 @@ BEGIN_EVENT_TABLE(mBarRange, wxScrolledWindow)
        EVT_LEFT_DOWN( mBarRange :: onLeftClicDown)
        EVT_LEFT_UP( mBarRange :: onLeftClickUp)
 
+       EVT_CHAR( mBarRange :: onKey )
+
        //how to catch the new event (our event)
        //EVT_COMMAND  (ID_MY_WINDOW, wxEVT_MY_EVENT, MyFrame::OnMyEvent)
 END_EVENT_TABLE()
@@ -36,26 +68,24 @@ END_EVENT_TABLE()
 //CONSTRUCTOR
 //----------------------------------------------------------------------------
 
+//wxDefaultSize
 mBarRange::mBarRange(wxWindow *parent, int w, int h)
-:wxScrolledWindow(parent,-1,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL)
+//EED-2019-10-25 :wxScrolledWindow(parent,-1,wxDefaultPosition, wxSize(60,60) ,wxTAB_TRAVERSAL)
+ :wxPanel(parent,-1,wxDefaultPosition, wxSize(60,60) ,wxTAB_TRAVERSAL)
 {
-       acceptedClick = true;
-       _bitmap_bar                     =       NULL;
+       acceptedClick           =       true;
+       _bitmap_bar                     =       NULL;
        SetWidth (w);
        SetHeight(h);
-       _initialPoint           =       0;
-       trianglesHalfWidth = 5;
-       
-       wxColour start_Colour;
-
+       _initialPoint           =       0;
+       trianglesHalfWidth      =       5;
        // Setting the default parts colors
-       start_Colour            =       wxColour(0,0,255);
+       start_Colour            =       wxColour(1,0,255,254);
        actual_Colour           =       wxColour(255,255,202);
        end_Colour                      =       wxColour(0,0,255);
        bar_Colour                      =       wxColour(255,0,255);
        backgroundColor     =   parent ->GetBackgroundColour();
        guideLineColor          =   wxColour(255,0,0);
-
        //actual is in _start and end
        //false means that it could be anywhere
        _moveActualWithBar      =       false;
@@ -63,16 +93,13 @@ mBarRange::mBarRange(wxWindow *parent, int w, int h)
        _selectionMoveId        =       -1;
        realX_vertical_line =   -1;
        activeState                     =       false;
-       _actual=0;
-       deviceEndMargin = 0;
-
+       _actual                         =       0;
+       deviceEndMargin         =       0;
        SetOrientation(true);
        setIfWithActualDrawed(true);
-
        b_popmenu.Append (cntID_CHANGE_COLOR, _("Change Color"), _("Changes the color of the selected part"));
        b_popmenu.Append (cntID_ENABLE_ACTUAL, _("Enable actual in range"), _("Enables/Disables the actual triangle to be or not in range"));
        b_popmenu.Append (cntID_MOVABLE_ACTUAL_BAR, _("Move actual-bar simultaneously"), _("Disables the actual triangle to move with the bar"));
-
        SetSize(w,h);
 }
 
@@ -82,7 +109,10 @@ mBarRange::mBarRange(wxWindow *parent, int w, int h)
 
 mBarRange::~mBarRange()
 {
+       DeletePendingEvents ();
+       RemoveEventHandler ( GetEventHandler() );       
 }
+
 //---------------------------------------------------------------------------
 //Draw bar: vertical or Horizontal
 //---------------------------------------------------------------------------
@@ -92,15 +122,12 @@ void mBarRange::DrawBar()
        if(_orientation)
        {
                SetWindowStyle(wxNO_FULL_REPAINT_ON_RESIZE);
-               _bitmap_bar             = new wxBitmap(_w+1280,_h+100);
+               _bitmap_bar                     = new wxBitmap(_w+1280,_h+100);
                //SIL//_bitmap_info     = new wxBitmap(_w+100+1280, _h+100);
-       }
-       //vertical
-       else
-       {
+       } else {
                SetWindowStyle(wxNO_FULL_REPAINT_ON_RESIZE);
-               _bitmap_bar = new wxBitmap(_h+deviceStart_y+100,_w+1280);
-               _bitmap_info = new wxBitmap(_h+deviceStart_y+100, _w+1280);
+               _bitmap_bar             = new wxBitmap(_h+deviceStart_y+100,_w+1280);
+               _bitmap_info            = new wxBitmap(_h+deviceStart_y+100, _w+1280);
        }
 }
 //----------------------------------------------------------------------------
@@ -116,7 +143,7 @@ bool mBarRange::GetInRangeProperty()
 //----------------------------------------------------------------------------
 void mBarRange::SetInRangeProperty(bool in)
 {
-       _in_rangeProperty=in;
+       _in_rangeProperty = in;
 }
 //----------------------------------------------------------------------------
 //the information about the actual triangle in range or not, true if is between start and end
@@ -151,6 +178,7 @@ int mBarRange::GetPixelStart()
 {
        return ((_start - _min)*(_w-deviceEndMargin))/(_max - _min);    
 }
+
 //----------------------------------------------------------------------------
 // param i: value in pixels
 //----------------------------------------------------------------------------
@@ -159,6 +187,7 @@ void mBarRange::SetPixelStart(int i)
        _start = _min+((i - deviceStart_x)*( _max - _min))/(_w-deviceEndMargin);
        
 }
+
 //----------------------------------------------------------------------------
 // _actual of the pixel rectangle
 //----------------------------------------------------------------------------
@@ -166,6 +195,7 @@ int mBarRange::GetPixelActual()
 {
        return ((_actual - _min)*(_w-deviceEndMargin))/(_max - _min);
 }
+
 //----------------------------------------------------------------------------
 // param i: value in pixels
 //----------------------------------------------------------------------------
@@ -173,6 +203,7 @@ void mBarRange::SetPixelActual(int i)
 {
        _actual = _min + (i-deviceStart_x)*(_max-_min)/(_w-deviceEndMargin);
 }
+
 //----------------------------------------------------------------------------
 // _end of the pixel rectangle
 //----------------------------------------------------------------------------
@@ -180,6 +211,7 @@ int mBarRange::GetPixelEnd()
 {
        return ((_end - _min)*(_w-deviceEndMargin))/(_max - _min);
 }
+
 //----------------------------------------------------------------------------
 // param i: value in pixels to be converted to real logical value
 //----------------------------------------------------------------------------
@@ -187,10 +219,10 @@ void mBarRange::SetPixelEnd(int i)
 {
        _end = _min + (i-deviceStart_x)*(_max-_min)/(_w-deviceEndMargin);
 }
+
 //----------------------------------------------------------------------------
 // Logical max of the triangle
 //----------------------------------------------------------------------------
-
 double mBarRange::GetMax()
 {
        return _max;
@@ -245,19 +277,39 @@ void mBarRange::SetHeight(int h)
 // Logical  Start of the rectangle
 //----------------------------------------------------------------------------
 
+int mBarRange::filtreValue(int value)
+{
+       if(value<_min)
+       {
+               value = _min;
+       } else if (value>_max) {
+               value = _max;
+       }
+       return value;
+}
+
+//----------------------------------------------------------------------------
 int mBarRange::GetStart()
 {
        return _start;
-
 }
 //----------------------------------------------------------------------------
 // param start: value real units
 //----------------------------------------------------------------------------
 void mBarRange::SetStart(int newstart)
 {
-       if(newstart<_min)
-               newstart = _min;
-       _start = newstart;
+       _start = filtreValue(newstart);
+
+       if (_start>_end) 
+       { 
+               _start=_end; 
+       }
+
+       if (_in_rangeProperty==true)
+       {
+               if (_start>_actual)   { _start=_actual; }
+       }
+
        RefreshForce(); 
 }
 //----------------------------------------------------------------------------
@@ -271,11 +323,17 @@ int mBarRange::GetEnd()
 //----------------------------------------------------------------------------
 // param end: value pixel units
 //----------------------------------------------------------------------------
-void mBarRange::SetEnd(int nwend)
+void mBarRange::SetEnd(int newend)
 {
-       if(nwend>_max)
-               _end = _max;
-       _end=nwend;
+       _end = filtreValue(newend);
+       if (_end<_start) { _end=_start; }
+       if (_in_rangeProperty==true)
+       {
+               if (_end<_actual)   
+               {
+                _end=_actual; 
+               } // _end
+       }
        RefreshForce(); 
 }
 //----------------------------------------------------------------------------
@@ -286,13 +344,14 @@ int mBarRange::GetActual()
        return _actual;
 }
 //----------------------------------------------------------------------------
-void mBarRange::SetActual(int actual)
+void mBarRange::SetActual(int newactual)
 {
-       if(actual<_min)
-               _actual = _min;
-       else if (actual>_max)
-               _actual = _max;
-       _actual=actual;
+       _actual = filtreValue(newactual);
+       if (_in_rangeProperty==true)
+       {
+               if (_actual<_start) { _actual=_start; }         
+               if (_actual>_end)   { _actual=_end; }
+       }
        RefreshForce();
 }
 
@@ -303,6 +362,7 @@ int mBarRange::GetTrianglesHalfWidth()
 {
        return trianglesHalfWidth;
 }
+
 //----------------------------------------------------------------------------
 void mBarRange::SetTrianglesHalfWidth(int nwTriHalfWidth)
 {
@@ -315,9 +375,7 @@ void mBarRange::OnSize( wxSizeEvent &WXUNUSED(event) )
        if(_orientation)
        {               
                SetWidth( rectTotal.GetWidth() - deviceEndMargin );                     
-       } 
-       else 
-       {
+       }       else    {
                SetWidth( rectTotal.GetHeight() - deviceEndMargin);                             
        }
        _selectionMoveId = -1;
@@ -328,19 +386,8 @@ void mBarRange::OnSize( wxSizeEvent &WXUNUSED(event) )
 
 void mBarRange::Refresh(bool eraseBackground, const wxRect* rect)
 {
-// EED Borrame
-//FILE *ff;
-//ff=fopen ("c:/temp/xxx.txt", "a+");
-//fprintf( ff , "mBarRange :: Refresh 01\n" );
-//fclose(ff);
-
-       wxScrolledWindow::Refresh(false);
-
-
-// EED Borrame
-//ff=fopen ("c:/temp/xx.txt", "a+");
-//fprintf( ff , "mBarRange :: Refresh 02\n" );
-//fclose(ff);
+//EED2019-10-25        wxScrolledWindow::Refresh(false);
+       wxPanel::Refresh(false);
 }
 
 
@@ -349,14 +396,8 @@ void mBarRange::Refresh(bool eraseBackground, const wxRect* rect)
 //----------------------------------------------------------------------------
 void mBarRange::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
-
-// EED Borrame
-//FILE *ff;
-//ff=fopen ("c:/temp/xx.txt", "a+");
-//fprintf( ff , "pColorBar :: OnPaint 01\n" );
-//fclose(ff);
-
-       if (_bitmap_bar!=NULL){
+       if (_bitmap_bar!=NULL)
+       {
                //repaint rectangle
                if(_orientation)
                {
@@ -388,82 +429,57 @@ void mBarRange::OnPaint( wxPaintEvent &WXUNUSED(event) )
 //                             dc.Blit(0,_w, _h+deviceStart_y+200, _w+deviceStart_x+200-deviceEndMargin, &temp_dc, deviceStart_y,_w+deviceStart_x);
 //                     }
 
-
                } 
-       } 
-
-// EED Borrame
-//ff=fopen ("c:/temp/xx.txt", "a+");
-//fprintf( ff , "pColorBar :: OnPaint 02\n" );
-//fclose(ff);
+       } // _bitmap_bar
+}
 
 
-}
 //----------------------------------------------------------------------------
 //Repaint the bar if it is horizontal
 //----------------------------------------------------------------------------
 void mBarRange::RefreshHorizontalView()
 {
-
-// EED Borrame
-//FILE *ff;
-//ff=fopen ("c:/temp/xxx.txt", "a+");
-//fprintf( ff , "mBarRange :: RefreshHorizontalView 01\n" );
-//fclose(ff);
-
        wxPoint points[3];
 
        //int largestNumberWidthInPixels = 15; // JPRx
-       int pxStart=GetPixelStart();
-       int pxEnd=GetPixelEnd();
-       int pxActual=GetPixelActual();
+       int pxStart             = GetPixelStart();
+       int pxEnd               = GetPixelEnd();
+       int pxActual    = GetPixelActual();
 
-       
-       int letterHeight = 9;
-       int barHeight = 2*letterHeight;
-       int tempHeight = _h-(6*letterHeight);
-       
+       int letterHeight= 9;
+       int barHeight   = 2*letterHeight;
+       int tempHeight  = _h-(6*letterHeight);  
        
        if (_visibleLables)
        {
-               barHeight = (tempHeight>0)  ? tempHeight : (int) _h/2;
+               barHeight       = (tempHeight>0)  ? tempHeight : (int) _h/2;
        }
        else
-               barHeight = _h; 
+               barHeight       = _h;   
 
        wxMemoryDC temp_dc;
        temp_dc.SelectObject( *_bitmap_bar );
 
-       
        // Background of this widget
-       
-       
        temp_dc.SetPen(wxPen( backgroundColor ));
        temp_dc.SetBrush(wxBrush( backgroundColor ,wxSOLID  ));
-       
        temp_dc.DrawRectangle(0,0,_w+2*trianglesHalfWidth,_h);
-       
-
        temp_dc.SetPen(wxPen( wxColour(167,165,191) ,1,wxSOLID  ));
        temp_dc.DrawLine(trianglesHalfWidth+2, 0, _w-deviceEndMargin, 0);
        temp_dc.DrawLine(trianglesHalfWidth+2, barHeight, (_w-deviceEndMargin-trianglesHalfWidth-2), barHeight);
        temp_dc.SetDeviceOrigin(trianglesHalfWidth+2,0);
 
-
        // Filling the bar
        temp_dc.SetBrush(wxBrush( wxColour(104,104,104),wxSOLID  ));
        temp_dc.SetPen(wxPen( wxColour(104,104,104),1,wxSOLID  ));
        temp_dc.DrawRectangle( pxStart , 0, pxEnd-pxStart, barHeight);
 
-
        //  The Bar
        if( _selectionMoveId==4 )
        {
                temp_dc.SetBrush(wxBrush( wxColour(128,255,0),wxSOLID  ));
                temp_dc.SetPen(wxPen(  wxColour(0,128,0),1,wxSOLID  ));
-       }
-       else
-       {
+       } else {
                temp_dc.SetBrush(wxBrush( bar_Colour,wxSOLID  ));
                temp_dc.SetPen(wxPen( wxColour(164,0,164),1,wxSOLID  ));
        }
@@ -490,9 +506,7 @@ void mBarRange::RefreshHorizontalView()
        {
                temp_dc.SetBrush(wxBrush( wxColour(128,255,0),wxSOLID  ));
                temp_dc.SetPen(wxPen(  wxColour(0,128,0),1,wxSOLID  ));
-       }
-       else
-       {
+       } else {
                temp_dc.SetBrush(wxBrush( start_Colour,wxSOLID  ));
                temp_dc.SetPen(wxPen( wxColour(0,51,204),1,wxSOLID  ));
        }
@@ -502,9 +516,7 @@ void mBarRange::RefreshHorizontalView()
        {
                temp_dc.SetBrush(wxBrush( wxColour(128,255,0),wxSOLID  ));
                temp_dc.SetPen(wxPen(  wxColour(0,128,0),1,wxSOLID  ));
-       }
-       else
-       {
+       } else {
                temp_dc.SetBrush(wxBrush( end_Colour,wxSOLID  ));
                temp_dc.SetPen(wxPen( wxColour(0,0,255),1,wxSOLID  ));
        }
@@ -525,9 +537,7 @@ void mBarRange::RefreshHorizontalView()
                {
                        temp_dc.SetBrush(wxBrush( wxColour(128,255,0),wxSOLID  ));
                        temp_dc.SetPen(wxPen(  wxColour(0,128,0),1,wxSOLID  ));
-               }
-               else
-               {
+               } else {
                        temp_dc.SetBrush(wxBrush( actual_Colour,wxSOLID  ));
                        temp_dc.SetPen(wxPen( wxColour(205,160,5),1,wxSOLID  ));
                }
@@ -557,7 +567,6 @@ void mBarRange::RefreshHorizontalView()
                temp_dc.SetFont(font);
                temp_dc.SetTextForeground(*wxBLACK);
 
-
                //the **MIN** value, always at the same y level that corresponds to barHeight+1
                wxString text_min;
 //             text_min<< GetMin();
@@ -608,11 +617,6 @@ void mBarRange::RefreshHorizontalView()
                        temp_dc.DrawText(text_actual, pxActual-(stringSize.GetWidth()/2),barHeight+letterHeight);                       
                }                       
        }
-
-// EED Borrame
-//ff=fopen ("c:/temp/xxx.txt", "a+");
-//fprintf( ff , "mBarRange :: RefreshHorizontalView 02\n" );
-//fclose(ff);
 }
 
 //----------------------------------------------------------------------------
@@ -621,12 +625,6 @@ void mBarRange::RefreshHorizontalView()
 
 void mBarRange::RefreshVerticalView()
 {
-
-// EED Borrame
-//FILE *ff;
-//ff=fopen ("c:/temp/xxx.txt", "a+");
-//fprintf( ff , "mBarRange :: RefreshVerticalView 01\n" );
-//fclose(ff);
        wxPoint points[3];
 
        int px1=GetPixelStart();
@@ -679,24 +677,24 @@ void mBarRange::RefreshVerticalView()
 
 
        // 2 Shadow Triangles: Start and End 
-       points[0].x=_h;
-       points[0].y=0;
-       points[1].x=0;
-       points[1].y=-trianglesHalfWidth-1;
-       points[2].x=0;
-       points[2].y=trianglesHalfWidth+2;
+       points[0].x     = _h;
+       points[0].y     = 0;
+       points[1].x     = 0;
+       points[1].y     = -trianglesHalfWidth-1;
+       points[2].x     = 0;
+       points[2].y     = trianglesHalfWidth+2;
        temp_dc.SetBrush(wxBrush( wxColour(104,104,104),wxSOLID  ));
        temp_dc.SetPen(wxPen( wxColour(104,104,104),1,wxSOLID  ));
        temp_dc.DrawPolygon(3,points,0,px1);
        temp_dc.DrawPolygon(3,points,0,px2);
 
        // 2 Triangles: Start and End 
-       points[0].x=_h;
-       points[0].y=0;
-       points[1].x=0;
-       points[1].y=-trianglesHalfWidth;
-       points[2].x=0;
-       points[2].y=trianglesHalfWidth;
+       points[0].x     = _h;
+       points[0].y     = 0;
+       points[1].x     = 0;
+       points[1].y     = -trianglesHalfWidth;
+       points[2].x     = 0;
+       points[2].y     = trianglesHalfWidth;
        //first triangle (start)
        if( _selectionMoveId==1 )
        {
@@ -820,15 +818,6 @@ void mBarRange::RefreshForce()
 //----------------------------------------------------------------------------
 void mBarRange::OnMouseMove(wxMouseEvent& event )
 {
-// EED Borrame
-//FILE *ff;
-//ff=fopen ("c:/temp/xxx.txt", "a+");
-//fprintf( ff , "mBarRange :: OnMouseMove 01\n" );
-//fclose(ff);
-
-       //int px1=GetPixelStart(); // JPRx
-       //int px2=GetPixelEnd(); // JPRx
-       //int px3=GetPixelActual(); // JPRx
        if (activeState)
        {
                wxPoint point = event.GetPosition();
@@ -850,9 +839,9 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                        if (barHeight <=_h)
                        {
                                bool in_StartTri = (clickedX>=GetPixelStart()-5+ deviceStart_x) && (clickedX<=GetPixelStart()+5+ deviceStart_x);
-                               bool in_EndTri = (clickedX>=GetPixelEnd()-5+ deviceStart_x) && (clickedX<=GetPixelEnd()+5+ deviceStart_x);
-                               bool in_actualT= withActualDrawed && (clickedX>=GetPixelActual()-5+ deviceStart_x) && (clickedX<=GetPixelActual()+5+ deviceStart_x);
-                               bool in_movingBar = (clickedX>GetPixelStart()+5+ deviceStart_x) && (clickedX<GetPixelEnd()-5+ deviceStart_x);
+                               bool in_EndTri   = (clickedX>=GetPixelEnd()-5+ deviceStart_x) && (clickedX<=GetPixelEnd()+5+ deviceStart_x);
+                               bool in_actualT  = withActualDrawed && (clickedX>=GetPixelActual()-5+ deviceStart_x) && (clickedX<=GetPixelActual()+5+ deviceStart_x);
+                               bool in_movingBar= (clickedX>GetPixelStart()+5+ deviceStart_x) && (clickedX<GetPixelEnd()-5+ deviceStart_x);
 
                                if( in_actualT )
                                        _selectionMoveId = 3;
@@ -863,9 +852,7 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                                else if( in_movingBar )
                                        _selectionMoveId = 4;
                        }
-               }
-               else
-               {
+               } else {
                        if(acceptedClick)
                        {
                                //is in start triagle
@@ -880,7 +867,7 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                                                //-------------------------------------------
                                                // Sending the event of start triangle moved
                                                //-------------------------------------------
-                                               createAndSendEvent( wxEVT_TSBAR_START );                                        
+                                               createAndSendEvent( wxEVT_TSBAR_START );
                                        }
                                        //start has to be less than actual
                                        else if (validPos_StartTri && _in_rangeProperty)
@@ -893,7 +880,7 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                                                        //-------------------------------------------
                                                        // Sending the event of start triangle moved
                                                        //-------------------------------------------
-                                                       createAndSendEvent( wxEVT_TSBAR_START );
+                                               createAndSendEvent( wxEVT_TSBAR_START );
                                                }
                                        }
                                } // _selectionMoveId == 1
@@ -939,7 +926,8 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                                                //-------------------------------------------
                                                //Sending the event of actual triangle moved
                                                //-------------------------------------------
-                                               createAndSendEvent( wxEVT_TSBAR_ACTUAL );                                       
+                                               createAndSendEvent( wxEVT_TSBAR_ACTUAL );       
+//                                             createAndSendEvent( 98765 );
                                        }
                                        else if( validPos_ActualTri && _in_rangeProperty )
                                        // the tringle in between start and end
@@ -996,6 +984,10 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                                                // Sending the event that the bar ahs being moved
                                                //-------------------------------------------
                                                createAndSendEvent( wxEVT_TSBAR_MOVED );
+                                               //EED
+                                               createAndSendEvent( wxEVT_TSBAR_ACTUAL );
+                                               createAndSendEvent( wxEVT_TSBAR_END );
+                                               createAndSendEvent( wxEVT_TSBAR_START );
                                        }
                                        //if actual has to be between start and end
                                        else if(_in_rangeProperty && ((next_start<=GetActual()) && (next_end>=GetActual()) && (next_end<=_max)&& (next_start>=_min)) )
@@ -1017,6 +1009,10 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                                                // Sending the event that the bar ahs being moved
                                                //-------------------------------------------
                                                createAndSendEvent( wxEVT_TSBAR_MOVED );
+                                               //EED
+                                               createAndSendEvent( wxEVT_TSBAR_ACTUAL );
+                                               createAndSendEvent( wxEVT_TSBAR_END );
+                                               createAndSendEvent( wxEVT_TSBAR_START );
                                        }
                                }                       
                        }
@@ -1033,13 +1029,9 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
                        }
                }                               
        }       
+}
 
-// EED Borrame
-//ff=fopen ("c:/temp/xxx.txt", "a+");
-//fprintf( ff , "  mBarRange :: OnMouseMove 02\n" );
-//fclose(ff);
 
-}
 /*
 * Sets the represented minimum and maximunm values
 * param minRealValue The minimum represented value (real value)
@@ -1047,10 +1039,10 @@ void mBarRange::OnMouseMove(wxMouseEvent& event )
 */
 void mBarRange :: setRepresentedValues ( double minRealValue, double maxRealValue)
 {
-       _min = minRealValue;
-       _max = maxRealValue;
-       _start=_min;
-       _end=_max;
+       _min    = minRealValue;
+       _max    = maxRealValue;
+       _start  =_min;
+       _end    =_max;
 }
 
 /*
@@ -1087,9 +1079,7 @@ void mBarRange :: setVisibleLabels ( bool setVisibleLB )
                                SetPixelStart(deviceStart_x);
                                SetPixelEnd(_w+deviceStart_x);
                                SetPixelActual(deviceStart_x);
-                       }
-                       else
-                       {
+                       } else {
                                SetPixelStart(deviceStart_x);
                                SetPixelEnd(_h+deviceStart_x);
                                SetPixelActual(deviceStart_x);
@@ -1123,10 +1113,10 @@ void mBarRange :: setVisibleLabels ( bool setVisibleLB )
 
                                if (getClickedX()<=_h)
                                {                                               
-                                       bool in_StartTri = (clickedX>=GetPixelStart()-5+ deviceStart_x) && (clickedX<=GetPixelStart()+5+ deviceStart_x);
-                                       bool in_EndTri = (clickedX>=GetPixelEnd()-5+ deviceStart_x) && (clickedX<=GetPixelEnd()+5+ deviceStart_x);
-                                       bool in_actualT= (clickedX>=GetPixelActual()-5+ deviceStart_x) && (clickedX<=GetPixelActual()+5+ deviceStart_x);
-                                       bool in_movingBar = (clickedX>GetPixelStart()+5+ deviceStart_x) && (clickedX<GetPixelEnd()-5+ deviceStart_x);
+                                       bool in_StartTri        = (clickedX>=GetPixelStart()-5+ deviceStart_x) && (clickedX<=GetPixelStart()+5+ deviceStart_x);
+                                       bool in_EndTri          = (clickedX>=GetPixelEnd()-5+ deviceStart_x) && (clickedX<=GetPixelEnd()+5+ deviceStart_x);
+                                       bool in_actualT         = (clickedX>=GetPixelActual()-5+ deviceStart_x) && (clickedX<=GetPixelActual()+5+ deviceStart_x);
+                                       bool in_movingBar       = (clickedX>GetPixelStart()+5+ deviceStart_x) && (clickedX<GetPixelEnd()-5+ deviceStart_x);
 
                                        if(in_StartTri)
                                                _selectionMoveId = 1;
@@ -1350,7 +1340,7 @@ void mBarRange :: setVisibleLabels ( bool setVisibleLB )
                return withActualDrawed;
        }
 
-       void mBarRange :: createAndSendEvent(WXTYPE theEventType)
+       void mBarRange::createAndSendEvent(WXTYPE theEventType)
        {
                wxCommandEvent cevent( theEventType, GetId() );
                cevent.SetEventObject( this );
@@ -1387,11 +1377,65 @@ void mBarRange :: setVisibleLabels ( bool setVisibleLB )
        void  mBarRange ::onLeftClicDown(wxMouseEvent& event )
        {
                acceptedClick = true;           
+               SetFocus();
        }
 
-       void  mBarRange ::onLeftClickUp(wxMouseEvent& event )
+       void  mBarRange::onLeftClickUp(wxMouseEvent& event )
        {       
                acceptedClick = false;
        }
 
+//EED 20 Juillet 2011
+       void  mBarRange::onKey(wxKeyEvent& event)
+       {
+               int step=0;
+               if ((event.GetKeyCode()==314) || (event.GetKeyCode()==317))
+               {
+                       step=-1;
+               }
+               
+               if ((event.GetKeyCode()==315) || (event.GetKeyCode()==316))
+               {
+                       step=1;
+               }
+               
+               if (step!=0)
+               {
+                       if (_selectionMoveId == 1) // start
+                       {
+                               SetStart(GetStart()+step);
+                               createAndSendEvent( wxEVT_TSBAR_START );
+                       }
+                       
+                       if (_selectionMoveId == 2) // end
+                       {
+                               SetEnd(GetEnd()+step);
+                               createAndSendEvent( wxEVT_TSBAR_END );
+                       }
+               
+                       if (_selectionMoveId == 3) // actual
+                       {
+                               SetActual(GetActual()+step);
+                               createAndSendEvent( wxEVT_TSBAR_ACTUAL );
+                       }
+               
+                       if (_selectionMoveId == 4) // bar
+                       {
+                               if (( GetStart()+step>=_min ) && ( GetEnd()+step<=_max ))
+                               {
+                                       SetStart(GetStart()+step);
+                                       SetEnd(GetEnd()+step);
+                                       if (_moveActualWithBar) 
+                                       { 
+                                               SetActual(GetActual()+step); 
+                                       }
+                                       createAndSendEvent( wxEVT_TSBAR_START );
+                                       createAndSendEvent( wxEVT_TSBAR_END );
+                                       createAndSendEvent( wxEVT_TSBAR_ACTUAL );
+                                       createAndSendEvent( wxEVT_TSBAR_MOVED );
+                               } // Start>_min  &&  End<_max
+                       }// _selectionMoveId == 4
+               } // step
+       }
+