Commit f0c913c6 authored by Tomasz Włostowski's avatar Tomasz Włostowski
Browse files

common: added WX_STATUS_POPUP and WX_UNIT_BINDER widget classes

parent 1112681a
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -204,8 +204,8 @@ set( COMMON_SRCS
    wildcards_and_files_ext.cpp
    wildcards_and_files_ext.cpp
    worksheet.cpp
    worksheet.cpp
    wxwineda.cpp
    wxwineda.cpp
    wxunittext.cpp
    wx_unit_binder.cpp
    wx_unit_input.cpp
    wx_status_popup.cpp
    xnode.cpp
    xnode.cpp
    zoom.cpp
    zoom.cpp
    )
    )
+63 −0
Original line number Original line Diff line number Diff line
/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2014-2015 CERN
 * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

/**
 * Transient mouse following popup window implementation.
 */

#include <wx_status_popup.h>
#include <wxPcbStruct.h>

WX_STATUS_POPUP::WX_STATUS_POPUP ( PCB_EDIT_FRAME *parent ) : 
    wxPopupWindow ( parent )
{
    m_panel = new wxPanel( this, wxID_ANY );
    m_panel->SetBackgroundColour( *wxLIGHT_GREY );

    m_topSizer = new wxBoxSizer( wxVERTICAL );
    m_panel->SetSizer( m_topSizer );

}

void WX_STATUS_POPUP::updateSize()
{
    m_topSizer->Fit( m_panel );
    SetClientSize( m_panel->GetSize( ) );
}

WX_STATUS_POPUP::~WX_STATUS_POPUP()
{
}

void WX_STATUS_POPUP::Popup(wxWindow *focus)
{
    Show(true);
    Raise();
}

void WX_STATUS_POPUP::Move( const wxPoint& aWhere )
{
    SetPosition ( aWhere );
}
    
 No newline at end of file
+73 −0
Original line number Original line Diff line number Diff line
/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2014-2015 CERN
 * Author: Maciej Suminski <maciej.suminski@cern.ch>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

#include <wx/stattext.h>
#include <wx/sizer.h>
#include <wx/textctrl.h>
#include <limits>
#include <base_units.h>
#if wxCHECK_VERSION( 2, 9, 0 )
#include <wx/valnum.h>
#endif

#include <boost/optional.hpp>

#include "wx_unit_binder.h"

WX_UNIT_BINDER::WX_UNIT_BINDER( wxWindow* aParent, wxTextCtrl *aTextInput, wxStaticText *aUnitLabel, wxSpinButton *aSpinButton )
{
    // Use the currently selected units
    m_units = g_UserUnit;
    m_textCtrl = aTextInput;
    m_textCtrl->SetValue ( wxT("0") );
    m_unitLabel = aUnitLabel;
    m_unitLabel->SetLabel ( GetAbbreviatedUnitsLabel (m_units));
}


WX_UNIT_BINDER::~WX_UNIT_BINDER()
{
}

void WX_UNIT_BINDER::SetValue( int aValue )
{
    wxString s = StringFromValue( m_units, aValue, false );

    m_textCtrl->SetValue ( s );
    
    m_unitLabel->SetLabel ( GetAbbreviatedUnitsLabel (m_units));
}

int WX_UNIT_BINDER::GetValue() const
{
    wxString s = m_textCtrl->GetValue();

    return ValueFromString( m_units, s );
}

void WX_UNIT_BINDER::Enable ( bool aEnable )
{
    m_textCtrl->Enable ( aEnable );
    m_unitLabel->Enable ( aEnable );
}
+58 −0
Original line number Original line Diff line number Diff line
/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2014-2015 CERN
 * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

#ifndef __WX_STATUS_POPUP_H_
#define __WX_STATUS_POPUP_H_


#include <common.h>
#include <wx/popupwin.h>

class PCB_EDIT_FRAME;

/**
 * Class WX_STATUS_POPUP
 *
 * A tiny, headerless popup window used to display useful status (e.g. line length
 * tuning info) next to the mouse cursor.
 */

class WX_STATUS_POPUP: public wxPopupWindow
{
public:
    WX_STATUS_POPUP ( PCB_EDIT_FRAME *parent );
    virtual ~WX_STATUS_POPUP();

    virtual void Popup(wxWindow *focus = NULL);
    virtual void Move( const wxPoint &aWhere );

protected:

    void updateSize();

    wxPanel *m_panel;
    wxBoxSizer *m_topSizer;
};

#endif /* __WX_STATUS_POPUP_H_*/
+91 −0
Original line number Original line Diff line number Diff line
/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2014-2015 CERN
 * Author: Maciej Suminski <maciej.suminski@cern.ch>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

#ifndef __WX_UNIT_BINDER_H_
#define __WX_UNIT_BINDER_H_

#include <common.h>
#include <wx/spinbutt.h>

class wxTextCtrl;
class wxSpinButton;
class wxStaticText;

class WX_UNIT_BINDER
{
public:

    /**
     * Constructor.
     * @param aParent is the parent window.
     * @param aTextInput is the text input widget used to edit the given value.
     * @param aUnitLabel is the units label displayed next to the text field.
     * @param aSpinButton is an optional spin button (for adjusting the input value)
     */
    WX_UNIT_BINDER( wxWindow* aParent, wxTextCtrl *aTextInput, wxStaticText *aUnitLabel, wxSpinButton *aSpinButton = NULL );

    virtual ~WX_UNIT_BINDER();

    /**
     * Function SetValue
     * Sets new value (in Internal Units) for the text field, taking care of units conversion.
     * @param aValue is the new value.
     */
    virtual void SetValue( int aValue );

    /**
     * Function GetValue
     * Returns the current value in Internal Units.
     */
    virtual int GetValue() const;

    /**
     * Function Enable
     * Enables/diasables the binded widgets
     */
    void Enable ( bool aEnable );

protected:

    void onTextChanged ( wxEvent& aEvent );

    ///> Text input control.
    wxTextCtrl*   m_textCtrl;

    ///> Label showing currently used units.
    wxStaticText*   m_unitLabel;

    ///> Currently used units.
    EDA_UNITS_T     m_units;

    ///> Step size (added/subtracted difference if spin buttons are used).
    int m_step;
    int m_min;
    int m_max;

    ///> Default value (or non-specified)
    static const wxString DEFAULT_VALUE;
};

#endif /* __WX_UNIT_BINDER_H_ */