Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > by-pkgid > 87f956008f5479527bcce97ec30dbca7 > files > 250

fityk-debug-0.8.6-3mdv2009.1.i586.rpm

// Purpose: FancyRealCtrl (numeric wxTextCtrl + wxSlider + "lock" button)
// Copyright: (c) 2007 Marcin Wojdyr 
// Licence: wxWidgets licence 
// $Id: fancyrc.h 418 2008-04-10 14:41:43Z wojdyr $

#ifndef FITYK__WX_FANCYRC__H__
#define FITYK__WX_FANCYRC__H__

#include <wx/tooltip.h>
#include <math.h>

#include "callback.h"

class SideBar;
class ValueChangingWidget;

class FancyRealCtrl : public wxPanel
{
public:
    FancyRealCtrl(wxWindow* parent, wxWindowID id, 
                  double value, wxString const& tip, bool locked_,
                  V1Callback<FancyRealCtrl const*> const& changing_value_cb,
                  V1Callback<FancyRealCtrl const*> const& changed_value_cb,
                  V1Callback<FancyRealCtrl const*> const& toggled_lock_cb);

    /// calls changing_value_callback
    void AddValue(double term);
    void ChangeValue(double factor) { AddValue(fabs(initial_value)*factor); }
    /// calls changed_value_callback
    void OnStopChanging();

    double GetValue() const;
    wxString GetValueStr() const { return tc->GetValue(); }
    /// changes only value in text-ctrl
    void SetTemporaryValue(double value); 
    void SetValue(double v) { SetTemporaryValue(v); initial_value = v; }


    void SetTip(wxString const& tt) { tc->SetToolTip(tt); }
    wxString GetTip() const { return tc->GetToolTip()->GetTip(); }

    void ToggleLock(); 
    bool IsLocked() const { return locked; }

    /// redirects OnKeyDown events from lock button and slider
    void ConnectToOnKeyDown(wxObjectEventFunction function, 
                              wxEvtHandler* sink);

private:
    double initial_value;
    bool locked;
    wxTextCtrl *tc;
    wxBitmapButton *lock_btn;
    ValueChangingWidget *vch; 

    //callbacks
    V1Callback<FancyRealCtrl const*> changing_value_callback;
    V1Callback<FancyRealCtrl const*> changed_value_callback;
    V1Callback<FancyRealCtrl const*> toggled_lock_callback;

    wxBitmap GetLockBitmap() const;
    void OnLockButton(wxCommandEvent&) 
                                { ToggleLock(); toggled_lock_callback(this); }
    void OnTextEnter(wxCommandEvent &) { OnStopChanging(); }
    void OnMouseWheel(wxMouseEvent &event);
    void OnKeyDown(wxKeyEvent &event);
};

#endif