+/*# ---------------------------------------------------------------------
+#
+# 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 "mBarRange.h"
+#include <wx/brush.h>
+#include <wx/gdicmn.h>
+#include "mBarRange.h"
//const wxEventType wxEVT_TSBAR = wxNewEventType();
DEFINE_EVENT_TYPE(wxEVT_TSBAR_MOVED)
DEFINE_EVENT_TYPE(wxEVT_SELECTION_END)
-
-
//----------------------------------------------------------------------------
//EVENT TABLE
//----------------------------------------------------------------------------
IMPLEMENT_CLASS(mBarRange, wxScrolledWindow)
+
BEGIN_EVENT_TABLE(mBarRange, wxScrolledWindow)
EVT_PAINT (mBarRange::OnPaint)
EVT_SIZE (mBarRange::OnSize)
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()
//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;
_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);
}
mBarRange::~mBarRange()
{
}
+
//---------------------------------------------------------------------------
//Draw bar: vertical or Horizontal
//---------------------------------------------------------------------------
{
return ((_start - _min)*(_w-deviceEndMargin))/(_max - _min);
}
+
//----------------------------------------------------------------------------
// param i: value in pixels
//----------------------------------------------------------------------------
_start = _min+((i - deviceStart_x)*( _max - _min))/(_w-deviceEndMargin);
}
+
//----------------------------------------------------------------------------
// _actual of the pixel rectangle
//----------------------------------------------------------------------------
{
return ((_actual - _min)*(_w-deviceEndMargin))/(_max - _min);
}
+
//----------------------------------------------------------------------------
// param i: value in pixels
//----------------------------------------------------------------------------
{
_actual = _min + (i-deviceStart_x)*(_max-_min)/(_w-deviceEndMargin);
}
+
//----------------------------------------------------------------------------
// _end of the pixel rectangle
//----------------------------------------------------------------------------
{
return ((_end - _min)*(_w-deviceEndMargin))/(_max - _min);
}
+
//----------------------------------------------------------------------------
// param i: value in pixels to be converted to real logical value
//----------------------------------------------------------------------------
{
_end = _min + (i-deviceStart_x)*(_max-_min)/(_w-deviceEndMargin);
}
+
//----------------------------------------------------------------------------
// Logical max of the triangle
//----------------------------------------------------------------------------
-
double mBarRange::GetMax()
{
return _max;
// 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();
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// 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();
}
//----------------------------------------------------------------------------
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();
}
{
return trianglesHalfWidth;
}
+
//----------------------------------------------------------------------------
void mBarRange::SetTrianglesHalfWidth(int nwTriHalfWidth)
{
if(_orientation)
{
SetWidth( rectTotal.GetWidth() - deviceEndMargin );
- }
- else
- {
+ } else {
SetWidth( rectTotal.GetHeight() - deviceEndMargin);
}
_selectionMoveId = -1;
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);
}
//----------------------------------------------------------------------------
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)
{
// 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 ));
}
{
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 ));
}
{
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 ));
}
{
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 ));
}
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();
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);
}
//----------------------------------------------------------------------------
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();
// 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 )
{
//----------------------------------------------------------------------------
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();
//-------------------------------------------
createAndSendEvent( wxEVT_TSBAR_ACTUAL );
// createAndSendEvent( 98765 );
-printf("EED mBarRange::OnMouseMove XXXXXXX \n");
-
}
else if( validPos_ActualTri && _in_rangeProperty )
// the tringle in between start and end
// 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)) )
// 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 );
}
}
}
}
}
}
+}
-// 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)
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
+ }
+