X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FpPlotter%2FmBarRange.cxx;h=8f62478e089105f4a839b4358359454d25d8b302;hb=255f774ce4100c0b84e6b5efa5c64d0db77f8a61;hp=325eade90cb0b2dda61ec171c15314da92dd85ac;hpb=059d790d40c29a646fa02dfd30ee5b604aaba6ad;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mBarRange.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mBarRange.cxx index 325eade..8f62478 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mBarRange.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mBarRange.cxx @@ -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 +#include + #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,23 @@ END_EVENT_TABLE() //CONSTRUCTOR //---------------------------------------------------------------------------- +//wxDefaultSize mBarRange::mBarRange(wxWindow *parent, int w, int h) -:wxScrolledWindow(parent,-1,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL) +:wxScrolledWindow(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 +92,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); } @@ -83,6 +109,7 @@ mBarRange::mBarRange(wxWindow *parent, int w, int h) mBarRange::~mBarRange() { } + //--------------------------------------------------------------------------- //Draw bar: vertical or Horizontal //--------------------------------------------------------------------------- @@ -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,7 @@ 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); } @@ -349,14 +395,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 +428,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 +505,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 +515,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 +536,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 +566,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 +616,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 +624,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 +676,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 +817,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(); @@ -880,7 +868,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 +881,7 @@ void mBarRange::OnMouseMove(wxMouseEvent& event ) //------------------------------------------- // Sending the event of start triangle moved //------------------------------------------- - createAndSendEvent( wxEVT_TSBAR_START ); + createAndSendEvent( wxEVT_TSBAR_START ); } } } // _selectionMoveId == 1 @@ -940,7 +928,7 @@ void mBarRange::OnMouseMove(wxMouseEvent& event ) //Sending the event of actual triangle moved //------------------------------------------- createAndSendEvent( wxEVT_TSBAR_ACTUAL ); -printf("EED mBarRange::OnMouseMove \n"); +// createAndSendEvent( 98765 ); } else if( validPos_ActualTri && _in_rangeProperty ) // the tringle in between start and end @@ -997,6 +985,10 @@ printf("EED mBarRange::OnMouseMove \n"); // 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)) ) @@ -1018,6 +1010,10 @@ printf("EED mBarRange::OnMouseMove \n"); // 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 ); } } } @@ -1034,13 +1030,9 @@ printf("EED mBarRange::OnMouseMove \n"); } } } +} -// 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) @@ -1351,7 +1343,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 ); @@ -1388,11 +1380,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 + } +