sexta-feira, 29 de abril de 2011

Sliders

Introdução
    Sliders são controles que nós podemos manipular movendo para frente e para trás (horizontal) ou para cima e para baixo (vertical) alterando seu valor. Em wxWidgets um slider é representado pela classe wxSlider. Podemos obter o valor de um wxSlider através do método GetValue() que nos retorna um número inteiro e definir seu valor através do método SetValue(int valor). No construtor da classe podemos definir seu valor inicial, valor mínimo, valor máximo, tamanho, orientação, etc. Para uma referência completa dos métodos da classe wxSlider visite: http://docs.wxwidgets.org/stable/wx_wxslider.html

Exemplo
    Como exemplo vamos nos basear no post sobre caixas de texto onde fizemos um programa para cálculo do volume do cilindro, mas ao invés de fornecer o raio e a altura através de caixas de texto vamos fornecer estes valores através de sliders (um para o raio e outro para altura). À medida que movemos os sliders os valores de raio e altura são alterados e o volume é calculado sendo mostrado através de um wxStaticText.



Código:

#include <wx/wx.h>

class Slider : public wxFrame
{
    private:
        wxSlider *sliderRaio;
        wxSlider *sliderAltura;
        wxStaticText *txtVolume;
        wxGridSizer *grid;
        double raio, altura, volume;

    public:
        Slider(const wxString &titulo);
        double Volume(double raio, double altura);
        void OnSlide(wxScrollEvent &evt);

};

const int ID_SL_RAIO = 1000;
const int ID_SL_ALTURA = 1001;


#include "slider.h"

Slider::Slider(const wxString &titulo) :
wxFrame(NULL, -1, titulo, wxDefaultPosition, wxSize(240,240))
{
   wxPanel *painel = new wxPanel(this, -1);
   grid = new wxFlexGridSizer(2,3,5,5);
   //criamos um slider com valor inicial = 0, valor minimo = 0, valor maximo = //100, 200 px de tamanho, orientado verticalmente e mostrando o valor //selecionado
   sliderRaio = new wxSlider(painel, ID_SL_RAIO, 0, 0, 100, wxDefaultPosition, wxSize(-1,200), wxSL_VERTICAL | wxSL_LABELS);
   //conectamos o metodo OnSlide ao evento do slider
   //ao movimentar o slide este metodo e chamado
   Connect(ID_SL_RAIO, wxEVT_COMMAND_SLIDER_UPDATED, wxScrollEventHandler(Slider::OnSlide));
   //criamos um slider com valor inicial = 0, valor minimo = 0, valor maximo = //100, 200 px de tamanho, orientado verticalmente e mostrando o valor //selecionado
   sliderAltura = new wxSlider(painel, ID_SL_ALTURA, 0, 0, 100, wxDefaultPosition, wxSize(-1,200), wxSL_VERTICAL | wxSL_LABELS);
   //conectamos o metodo OnSlide ao evento do slider
   //ao movimentar o slide este metodo e chamado
   Connect(ID_SL_ALTURA, wxEVT_COMMAND_SLIDER_UPDATED, wxScrollEventHandler(Slider::OnSlide));
   txtVolume = new wxStaticText(painel, -1, wxT("0"));
   grid->Add(new wxStaticText(painel, -1, wxT("Raio")), 1, wxLEFT, 20);
   grid->Add(new wxStaticText(painel, -1, wxT("Altura")), 1, wxLEFT, 20);
   grid->Add(new wxStaticText(painel, -1, wxT("Volume")), 1, wxLEFT, 38);
   grid->Add(sliderRaio, 1, wxLEFT, 22);
   grid->Add(sliderAltura, 1, wxLEFT, 24);
   grid->Add(txtVolume, 1, wxTOP | wxLEFT, 48);
   painel->SetSizer(grid);
   Centre();
}

double Slider::Volume(double raio, double altura)
{
    this->raio = raio;
    this->altura = altura;
    volume = 3.14 * (this->raio*this->raio) * altura;
    return volume;
}

void Slider::OnSlide(wxScrollEvent &evt)
{
   //o metodo GetValue retorna o valor do slider
   double v = Volume(sliderRaio->GetValue(), sliderAltura->GetValue());
   txtVolume->SetLabel(wxString() << v);
}


#include "slider.h"

class MinhaApp : public wxApp
{
    public:
       virtual bool OnInit();
};

#include "main.h"

IMPLEMENT_APP(MinhaApp)

bool MinhaApp::OnInit()
{
    Slider *slider = new Slider(wxT("Slider com wxWidgets"));
    slider->Show(true);
    return true;
}

Nenhum comentário:

Postar um comentário