nux-1.14.0
Vector3ValuatorDouble.cpp
00001 /*
00002  * Copyright 2010 Inalogic® Inc.
00003  *
00004  * This program is free software: you can redistribute it and/or modify it
00005  * under the terms of the GNU Lesser General Public License, as
00006  * published by the  Free Software Foundation; either version 2.1 or 3.0
00007  * of the License.
00008  *
00009  * This program is distributed in the hope that it will be useful, but
00010  * WITHOUT ANY WARRANTY; without even the implied warranties of
00011  * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
00012  * PURPOSE.  See the applicable version of the GNU Lesser General Public
00013  * License for more details.
00014  *
00015  * You should have received a copy of both the GNU Lesser General Public
00016  * License along with this program. If not, see <http://www.gnu.org/licenses/>
00017  *
00018  * Authored by: Jay Taoko <jaytaoko@inalogic.com>
00019  *
00020  */
00021 
00022 
00023 #include "Nux.h"
00024 #include "TimerProc.h"
00025 #include "WindowCompositor.h"
00026 #include "EditTextBox.h"
00027 #include "StaticTextBox.h"
00028 #include "Vector3Valuator.h"
00029 #include "HLayout.h"
00030 #include "Vector3ValuatorDouble.h"
00031 
00032 namespace nux
00033 {
00034 
00035   const Color SPINBOX_BUTTON_COLOR = Color (0xFF4D4D4D);
00036   const Color SPINBOX_BUTTON_MOUSEOVER_COLOR = Color (0xFF222222);
00037 
00038   Vector3DoubleValuator::Vector3DoubleValuator (double X, double Y, double Z, double Step, double MinValue, double MaxValue)
00039     :   m_DoubleValidator (MinValue, MaxValue)
00040   {
00041     m_Step = Step;
00042     m_X = X;
00043     m_Y = Y;
00044     m_Z = Z;
00045 
00046     m_hlayout   = new HLayout (NUX_TRACKER_LOCATION);
00047 //     m_XEdit     = new EditTextBox (TEXT (""), NUX_TRACKER_LOCATION);
00048 //     m_YEdit     = new EditTextBox (TEXT (""), NUX_TRACKER_LOCATION);
00049 //     m_ZEdit     = new EditTextBox (TEXT (""), NUX_TRACKER_LOCATION);
00050 
00051     m_DoubleValidator.SetDecimals (3);
00052     m_XEdit->SetValidator (&m_DoubleValidator);
00053     m_XEdit->SetSuffix (TEXT ("") );
00054     m_XEdit->SetPrefix (TEXT ("") );
00055     m_XEdit->SetText (m_DoubleValidator.ToString (m_X) );
00056 
00057     m_YEdit->SetValidator (&m_DoubleValidator);
00058     m_YEdit->SetSuffix (TEXT ("") );
00059     m_YEdit->SetPrefix (TEXT ("") );
00060     m_YEdit->SetText (m_DoubleValidator.ToString (m_Y) );
00061 
00062     m_ZEdit->SetValidator (&m_DoubleValidator);
00063     m_ZEdit->SetSuffix (TEXT ("") );
00064     m_ZEdit->SetPrefix (TEXT ("") );
00065     m_ZEdit->SetText (m_DoubleValidator.ToString (m_Z) );
00066 
00067     m_XEdit->SetMinimumSize (DEFAULT_WIDGET_WIDTH - 10, DEFAULT_WIDGET_HEIGHT);
00068     m_XEdit->SetGeometry (Geometry (0, 0, DEFAULT_WIDGET_WIDTH, DEFAULT_WIDGET_HEIGHT) );
00069     m_YEdit->SetMinimumSize (DEFAULT_WIDGET_WIDTH - 10, DEFAULT_WIDGET_HEIGHT);
00070     m_YEdit->SetGeometry (Geometry (0, 0, DEFAULT_WIDGET_WIDTH, DEFAULT_WIDGET_HEIGHT) );
00071     m_ZEdit->SetMinimumSize (DEFAULT_WIDGET_WIDTH - 10, DEFAULT_WIDGET_HEIGHT);
00072     m_ZEdit->SetGeometry (Geometry (0, 0, DEFAULT_WIDGET_WIDTH, DEFAULT_WIDGET_HEIGHT) );
00073 
00074     m_MouseControlledButton->SetMinimumSize (16 + 9, 10);
00075     m_MouseControlledButton->SetGeometry (Geometry (0, 0, 15, 10) );
00076 
00077     // Set the minimum size of this widget.
00078     // This is use by TextLineEditPropertyItem::GetItemBestHeight
00079     SetMinimumSize (DEFAULT_WIDGET_WIDTH, PRACTICAL_WIDGET_HEIGHT);
00080 
00081     m_XLabel = new StaticTextBox (TEXT (""), NUX_TRACKER_LOCATION);
00082     m_YLabel = new StaticTextBox (TEXT (""), NUX_TRACKER_LOCATION);
00083     m_ZLabel = new StaticTextBox (TEXT (""), NUX_TRACKER_LOCATION);
00084 
00085     m_XLabel->SetText (TEXT ("X") );
00086     m_YLabel->SetText (TEXT ("Y") );
00087     m_ZLabel->SetText (TEXT ("Z") );
00088     m_XLabel->SetMinimumWidth (12);
00089     m_YLabel->SetMinimumWidth (12);
00090     m_ZLabel->SetMinimumWidth (12);
00091     m_XLabel->SetTextColor (Color (0xFFCCCCCC) );
00092     m_YLabel->SetTextColor (Color (0xFFCCCCCC) );
00093     m_ZLabel->SetTextColor (Color (0xFFCCCCCC) );
00094 
00095     m_XLabel->SetFont (GetSysBoldFont() );
00096     m_YLabel->SetFont (GetSysBoldFont() );
00097     m_ZLabel->SetFont (GetSysBoldFont() );
00098 
00099 
00100     //SpaceLayout* spacex = new SpaceLayout;
00101     //spacex->SetMinimumWidth(4);
00102     //SpaceLayout* spacey = new SpaceLayout;
00103     //spacey->SetMinimumWidth(4);
00104 
00105     SpaceLayout *spacez = new SpaceLayout();
00106 
00107     spacez->SetMinimumWidth (4);
00108     m_hlayout->AddView (m_MouseControlledButton, 0);
00109     m_hlayout->AddView (m_XLabel, 0);
00110     //m_hlayout->AddLayout(spacex, 0);
00111     m_hlayout->AddView (m_XEdit, 1);
00112     m_hlayout->AddView (m_YLabel, 0);
00113     //m_hlayout->AddLayout(spacey, 0);
00114     m_hlayout->AddView (m_YEdit, 1);
00115     m_hlayout->AddView (m_ZLabel, 0);
00116     m_hlayout->AddView (m_ZEdit, 1);
00117     m_hlayout->AddLayout (spacez, 0);
00118     m_hlayout->SetHorizontalInternalMargin (4);
00119     SetCompositionLayout (m_hlayout);
00120   }
00121 
00122   Vector3DoubleValuator::~Vector3DoubleValuator()
00123   {
00124   }
00125 
00126   long Vector3DoubleValuator::ProcessEvent (IEvent &ievent, long TraverseInfo, long ProcessEventInfo)
00127   {
00128     long ret = TraverseInfo;
00129     ret = m_MouseControlledButton->OnEvent (ievent, ret, ProcessEventInfo);
00130     ret = m_XEdit->ProcessEvent (ievent, ret, ProcessEventInfo);
00131     ret = m_YEdit->ProcessEvent (ievent, ret, ProcessEventInfo);
00132     ret = m_ZEdit->ProcessEvent (ievent, ret, ProcessEventInfo);
00133     ret = PostProcessEvent2 (ievent, ret, ProcessEventInfo);
00134     return ret;
00135   }
00136 
00137   void Vector3DoubleValuator::Draw (GraphicsEngine &GfxContext, bool force_draw)
00138   {
00139     Geometry base = GetGeometry();
00140     GetPainter().PaintBackground (GfxContext, base);
00141 
00142 
00143     Geometry geo = m_MouseControlledButton->GetGeometry();
00144     geo.OffsetSize (5, 0);
00145 
00146     if (m_XEdit->IsMouseInside() ||
00147         m_YEdit->IsMouseInside() ||
00148         m_ZEdit->IsMouseInside() ||
00149         m_MouseControlledButton->IsMouseOwner() || m_MouseControlledButton->IsMouseInside() )
00150     {
00151 
00152       GetPainter().PushDrawShapeLayer (GfxContext, geo, eSHAPE_CORNER_ROUND4, SPINBOX_BUTTON_MOUSEOVER_COLOR, eCornerTopLeft | eCornerBottomLeft);
00153     }
00154     else
00155     {
00156       GetPainter().PushDrawShapeLayer (GfxContext, geo, eSHAPE_CORNER_ROUND4, SPINBOX_BUTTON_COLOR,
00157                                    eCornerTopLeft | eCornerBottomLeft);
00158     }
00159 
00160     geo = base;
00161     geo.OffsetSize (-m_MouseControlledButton->GetBaseWidth(), 0);
00162     geo.OffsetPosition (+m_MouseControlledButton->GetBaseWidth(), 0);
00163 
00164     GetPainter().PushDrawShapeLayer (GfxContext, geo, eSHAPE_CORNER_ROUND4, SPINBOX_BUTTON_COLOR,
00165                                  eCornerTopLeft | eCornerBottomLeft | eCornerTopRight | eCornerBottomRight);
00166 
00167     GeometryPositioning gp (eHACenter, eVACenter);
00168     Geometry GeoPo = ComputeGeometryPositioning (m_MouseControlledButton->GetGeometry(), GetTheme().GetImageGeometry (eVALUATORMOVE), gp);
00169 
00170     if (m_Mouse == 1)
00171     {
00172       if (m_MouseControlledButton->IsMouseInside() )
00173         GetPainter().PaintShape (GfxContext, GeoPo, Color (0xFFFFFFFF), eVALUATORHORIZONTALMOVE);
00174       else
00175         GetPainter().PaintShape (GfxContext, GeoPo, Color (0xFFFFFFFF), eVALUATORHORIZONTALMOVE);
00176     }
00177     else if (m_Mouse == 3)
00178     {
00179       if (m_MouseControlledButton->IsMouseInside() )
00180         GetPainter().PaintShape (GfxContext, GeoPo, Color (0xFFFFFFFF), eVALUATORVERTICALMOVE);
00181       else
00182         GetPainter().PaintShape (GfxContext, GeoPo, Color (0xFFFFFFFF), eVALUATORVERTICALMOVE);
00183     }
00184     else
00185     {
00186       if (m_MouseControlledButton->IsMouseInside() )
00187         GetPainter().PaintShape (GfxContext, GeoPo, Color (0xFFFFFFFF), eVALUATORMOVE);
00188       else
00189         GetPainter().PaintShape (GfxContext, GeoPo, Color (0xFFFFFFFF), eVALUATORMOVE);
00190     }
00191 
00192 
00193 
00194     geo = m_XEdit->GetGeometry();
00195     geo.OffsetPosition (-4, 0);
00196     geo.OffsetSize (+8, 0);
00197     GetPainter().PaintShapeCorner (GfxContext, geo, m_XEdit->GetTextBackgroundColor(), eSHAPE_CORNER_ROUND4,
00198                                eCornerTopLeft | eCornerBottomLeft | eCornerTopRight | eCornerBottomRight, false);
00199 
00200     geo = m_YEdit->GetGeometry();
00201     geo.OffsetPosition (-4, 0);
00202     geo.OffsetSize (+8, 0);
00203     GetPainter().PaintShapeCorner (GfxContext, geo, m_YEdit->GetTextBackgroundColor(), eSHAPE_CORNER_ROUND4,
00204                                eCornerTopLeft | eCornerBottomLeft | eCornerTopRight | eCornerBottomRight, false);
00205 
00206     geo = m_ZEdit->GetGeometry();
00207     geo.OffsetPosition (-4, 0);
00208     geo.OffsetSize (+8, 0);
00209     GetPainter().PaintShapeCorner (GfxContext, geo, m_ZEdit->GetTextBackgroundColor(), eSHAPE_CORNER_ROUND4,
00210                                eCornerTopLeft | eCornerBottomLeft | eCornerTopRight | eCornerBottomRight, false);
00211 
00212 //    GetPainter().PaintShape(GfxContext, m_XLabel->GetGeometry(), m_XEdit->GetTextBackgroundColor(), eVECTORXLABEL);
00213 //    GetPainter().PaintShape(GfxContext, m_YLabel->GetGeometry(), m_YEdit->GetTextBackgroundColor(), eVECTORYLABEL);
00214 //    GetPainter().PaintShape(GfxContext, m_ZLabel->GetGeometry(), m_ZEdit->GetTextBackgroundColor(), eVECTORZLABEL);
00215 
00216 
00217     m_XEdit->QueueDraw();
00218     m_YEdit->QueueDraw();
00219     m_ZEdit->QueueDraw();
00220     m_XLabel->QueueDraw();
00221     m_YLabel->QueueDraw();
00222     m_ZLabel->QueueDraw();
00223   }
00224 
00225   void Vector3DoubleValuator::DrawContent (GraphicsEngine &GfxContext, bool force_draw)
00226   {
00227     m_XEdit->ProcessDraw (GfxContext, force_draw);
00228     m_YEdit->ProcessDraw (GfxContext, force_draw);
00229     m_ZEdit->ProcessDraw (GfxContext, force_draw);
00230     m_XLabel->ProcessDraw (GfxContext, force_draw);
00231     m_YLabel->ProcessDraw (GfxContext, force_draw);
00232     m_ZLabel->ProcessDraw (GfxContext, force_draw);
00233   }
00234 
00235   void Vector3DoubleValuator::PostDraw (GraphicsEngine &GfxContext, bool force_draw)
00236   {
00237 
00238   }
00239 
00240   void Vector3DoubleValuator::SetValue (double x, double y, double z)
00241   {
00242     SetVectorX (x);
00243     SetVectorY (y);
00244     SetVectorZ (z);
00245   }
00246 
00247   void Vector3DoubleValuator::SetVectorX (double value)
00248   {
00249     m_X = m_DoubleValidator.GetClampedValue (value);
00250     m_XEdit->SetText (NString::Printf ("%.3f", m_X) );
00251     sigValueChanged.emit (this);
00252     sigValue.emit (m_X, m_Y, m_Z);
00253     QueueDraw();
00254   }
00255 
00256   void Vector3DoubleValuator::SetVectorY (double value)
00257   {
00258     m_Y = m_DoubleValidator.GetClampedValue (value);
00259     m_YEdit->SetText (NString::Printf ("%.3f", m_Y) );
00260     sigValueChanged.emit (this);
00261     sigValue.emit (m_X, m_Y, m_Z);
00262     QueueDraw();
00263   }
00264 
00265   void Vector3DoubleValuator::SetVectorZ (double value)
00266   {
00267     m_Z = m_DoubleValidator.GetClampedValue (value);
00268     m_ZEdit->SetText (NString::Printf ("%.3f", m_Z) );
00269     sigValueChanged.emit (this);
00270     sigValue.emit (m_X, m_Y, m_Z);
00271     QueueDraw();
00272   }
00273 
00274   double Vector3DoubleValuator::GetVectorX() const
00275   {
00276     return m_X;
00277   }
00278 
00279   double Vector3DoubleValuator::GetVectorY() const
00280   {
00281     return m_Y;
00282   }
00283 
00284   double Vector3DoubleValuator::GetVectorZ() const
00285   {
00286     return m_Z;
00287   }
00288 
00289   void Vector3DoubleValuator::SetStep (double i)
00290   {
00291     m_Step = i;
00292 
00293     if (m_Step <= 0)
00294       m_Step = 1;
00295 
00296     QueueDraw();
00297   }
00298 
00299   double Vector3DoubleValuator::GetStep() const
00300   {
00301     return m_Step;
00302   }
00303 
00304   double Vector3DoubleValuator::GetMinValue() const
00305   {
00306     return m_DoubleValidator.GetMinimum();
00307   }
00308 
00309   double Vector3DoubleValuator::GetMaxValue() const
00310   {
00311     return m_DoubleValidator.GetMaximum();
00312   }
00313 
00314   void Vector3DoubleValuator::SetRange (double MinValue, double Maxvalue)
00315   {
00316     m_DoubleValidator.SetMinimum (MinValue);
00317     m_DoubleValidator.SetMaximum (Maxvalue);
00318     m_X = m_DoubleValidator.GetClampedValue (m_X);
00319     m_Y = m_DoubleValidator.GetClampedValue (m_Y);
00320     m_Z = m_DoubleValidator.GetClampedValue (m_Z);
00321     sigValueChanged.emit (this);
00322     sigValue.emit (m_X, m_Y, m_Z);
00323     QueueDraw();
00324   }
00325 
00326   void Vector3DoubleValuator::ImplementIncrementX()
00327   {
00328     SetBaseX (m_X + m_Step);
00329 
00330     if (m_X < m_DoubleValidator.GetMaximum() )
00331     {
00332       QueueDraw();
00333     }
00334 
00335     sigValueChanged.emit (this);
00336     sigIncrement.emit (this);
00337     sigValue.emit (m_X, m_Y, m_Z);
00338   }
00339 
00340   void Vector3DoubleValuator::ImplementDecrementX()
00341   {
00342     SetBaseX (m_X - m_Step);
00343 
00344     if (m_X > m_DoubleValidator.GetMinimum() )
00345     {
00346       QueueDraw();
00347     }
00348 
00349     sigValueChanged.emit (this);
00350     sigDecrement.emit (this);
00351     sigValue.emit (m_X, m_Y, m_Z);
00352   }
00353 
00354   void Vector3DoubleValuator::ImplementIncrementY()
00355   {
00356     SetBaseY (m_Y + m_Step);
00357 
00358     if (m_Y < m_DoubleValidator.GetMaximum() )
00359     {
00360       QueueDraw();
00361     }
00362 
00363     sigValueChanged.emit (this);
00364     sigIncrement.emit (this);
00365     sigValue.emit (m_X, m_Y, m_Z);
00366   }
00367 
00368   void Vector3DoubleValuator::ImplementDecrementY()
00369   {
00370     SetVectorY (m_Y - m_Step);
00371 
00372     if (m_Y > m_DoubleValidator.GetMinimum() )
00373     {
00374       QueueDraw();
00375     }
00376 
00377     sigValueChanged.emit (this);
00378     sigDecrement.emit (this);
00379     sigValue.emit (m_X, m_Y, m_Z);
00380   }
00381 
00382   void Vector3DoubleValuator::ImplementIncrementZ()
00383   {
00384     SetVectorZ (m_Z + m_Step);
00385 
00386     if (m_Z < m_DoubleValidator.GetMaximum() )
00387     {
00388       QueueDraw();
00389     }
00390 
00391     sigValueChanged.emit (this);
00392     sigIncrement.emit (this);
00393     sigValue.emit (m_X, m_Y, m_Z);
00394   }
00395 
00396   void Vector3DoubleValuator::ImplementDecrementZ()
00397   {
00398     SetVectorZ (m_Z - m_Step);
00399 
00400     if (m_Z > m_DoubleValidator.GetMinimum() )
00401     {
00402       QueueDraw();
00403     }
00404 
00405     sigValueChanged.emit (this);
00406     sigDecrement.emit (this);
00407     sigValue.emit (m_X, m_Y, m_Z);
00408   }
00409 
00410   void Vector3DoubleValuator::ImplementValidateEntryX()
00411   {
00412     double ret = 0;
00413     ret = CharToDouble (m_XEdit->GetCleanText().GetTCharPtr() );
00414     {
00415       m_X = m_DoubleValidator.GetClampedValue (ret);
00416       m_XEdit->SetText (NString::Printf ("%.3f", m_X) );
00417       sigValueChanged.emit (this);
00418       sigValue.emit (m_X, m_Y, m_Z);
00419     }
00420 //     else
00421 //     {
00422 //         m_XEdit->SetText(NString::Printf("%.3f", m_X));
00423 //         sigValueChanged.emit(this);
00424 //         sigValue.emit(m_X, m_Y, m_Z);
00425 //     }
00426   }
00427 
00428   void Vector3DoubleValuator::ImplementValidateEntryY()
00429   {
00430     double ret = 0;
00431     ret = CharToDouble (m_YEdit->GetCleanText().GetTCharPtr() );
00432     {
00433       m_Y = m_DoubleValidator.GetClampedValue (ret);
00434       m_YEdit->SetText (NString::Printf ("%.3f", m_Y) );
00435       sigValueChanged.emit (this);
00436       sigValue.emit (m_X, m_Y, m_Z);
00437     }
00438 //     else
00439 //     {
00440 //         m_YEdit->SetText(NString::Printf("%.3f", m_Y));
00441 //         sigValueChanged.emit(this);
00442 //         sigValue.emit(m_X, m_Y, m_Z);
00443 //     }
00444   }
00445 
00446   void Vector3DoubleValuator::ImplementValidateEntryZ()
00447   {
00448     double ret = 0;
00449     ret = CharToDouble (m_ZEdit->GetCleanText().GetTCharPtr() );
00450     {
00451       m_Z = m_DoubleValidator.GetClampedValue (ret);
00452       m_ZEdit->SetText (NString::Printf ("%.3f", m_Z) );
00453       sigValueChanged.emit (this);
00454       sigValue.emit (m_X, m_Y, m_Z);
00455     }
00456 //     else
00457 //     {
00458 //         m_ZEdit->SetText(NString::Printf("%.3f", m_Z));
00459 //         sigValueChanged.emit(this);
00460 //         sigValue.emit(m_X, m_Y, m_Z);
00461 //     }
00462   }
00463 
00464 
00465 }
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends