ProgressIndicatorRecipe::ProgressIndicatorRecipe(Container *parent) :
        CustomControl(parent)
{
    // The recipe Container.
    Container *recipeContainer = new Container();
    StackLayout *recipeLayout = new StackLayout();
    recipeLayout->setLeftPadding(20.0);
    recipeLayout->setRightPadding(20.0);
    recipeContainer->setLayout(recipeLayout);
    
    // The introduction text.
    TextArea *introText = new TextArea();
    introText->setText((const QString) "Drag the slider to change the ProgressIndicator");
    introText->setEditable(false);
    introText->textStyle()->setColor(Color::Gray);
    introText->textStyle()->setBase(SystemDefaults::TextStyles::bodyText());
    introText->setBottomMargin(100);
    
    mProgressIndicator = new ProgressIndicator();
    mProgressIndicator->setFromValue(0);
    mProgressIndicator->setToValue(100);
    connect(mProgressIndicator, SIGNAL(valueChanged(float)), this, SLOT(onValueChanged(float)));
    
    
    // Create a Slider and connect a slot to the signal for Slider value changing.
    Slider *slider = new Slider();
    slider->setTopMargin(100);
    slider->setFromValue(0);
    slider->setToValue(100);
    // Connect the Slider value directly to the value property of the ProgressIndicator.
    QObject::connect(slider, SIGNAL(valueChanging(float)), mProgressIndicator, SLOT(setValue(float)));
    
    // Create a Slider and connect a slot to the signal for Slider value changing.
    mButton = new Button();
    mButton->setText((const QString) "Pause");
    connect(mButton, SIGNAL(clicked()), this, SLOT(onClicked()));
    
    
    // Add the controls to the recipe Container and set it as root.
    recipeContainer->add(introText);
    recipeContainer->add(mProgressIndicator);
    recipeContainer->add(slider);
    recipeContainer->add(mButton);
 
    setRoot(recipeContainer);
}
Container *AnimationRecipe::setUpControllerContainer()
{
    // The Controller Container is the bottom part of the animation recipe.
    // It is where the descriptive text and a toggle button for triggering the
    // animations is kept.
    Container *controllerContainer = new Container();
    DockLayout *controllerLayout = new DockLayout();
    controllerLayout->setLeftPadding(30.0f);
    controllerContainer->setLayout(controllerLayout);
    controllerContainer->setBackground(Color::fromRGBA(0.84f, 0.84f, 0.84f));
    controllerContainer->setPreferredSize(768.0f, 360.0f);
    controllerContainer->setLayoutProperties(
            DockLayoutProperties::create().vertical(VerticalAlignment::Bottom));

    // A recipe text.
    Container *descriptionContainer = new Container();
    StackLayout *descriptionLayout = new StackLayout();
    descriptionLayout->setTopPadding(42.0f);
    descriptionContainer->setLayout(descriptionLayout);
    descriptionContainer->setLayoutProperties(
            DockLayoutProperties::create().vertical(VerticalAlignment::Top).horizontal(
                    HorizontalAlignment::Left));

    // A Label is used for the header and a text area for the descriptive text.
    Label *descriptionHeader = new Label();
    descriptionHeader->textStyle()->setBase(SystemDefaults::TextStyles::bigText());
    descriptionHeader->textStyle()->setColor(Color::Black);
    descriptionHeader->setText("Scrambled eggs");
    descriptionHeader->setBottomMargin(32.0f);

    // Three labels for describing how to scramble the eggs.
    Label *line1 = new Label();
    line1->textStyle()->setBase(SystemDefaults::TextStyles::bodyText()); 
    line1->setText("1. Take two eggs.");
    line1->textStyle()->setColor(Color::Black);

    Label *line2 = new Label();
    line2->textStyle()->setBase(SystemDefaults::TextStyles::bodyText()); 
    line2->setText("2. Scramble them.");
    line2->textStyle()->setColor(Color::Black);

    Label *line3 = new Label();
    line3->textStyle()->setBase(SystemDefaults::TextStyles::bodyText()); 
    line3->setText("3. Done.");
    line3->textStyle()->setColor(Color::Black);

    // Add the texts to the description Container.
    descriptionContainer->add(descriptionHeader);
    descriptionContainer->add(line1);
    descriptionContainer->add(line2);
    descriptionContainer->add(line3);

    // The Controller is a toggle Button and it has a descriptive Label.
    // They are stacked in a Container that is aligned to the bottom right corner.
    Container *toggleContainer = new Container();
    StackLayout *toggleLayout = new StackLayout();
    toggleLayout->setBottomPadding(45.0f);
    toggleLayout->setRightPadding(30.0f);
    toggleContainer->setLayout(toggleLayout);
    toggleContainer->setLayoutProperties(
            DockLayoutProperties::create().vertical(VerticalAlignment::Bottom).horizontal(
                    HorizontalAlignment::Right));

    // Set up of a Label with a descriptive text.
    Label *actionLabel = new Label();
    actionLabel->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Right));
    actionLabel->textStyle()->setBase(SystemDefaults::TextStyles::bodyText()); 
    actionLabel->setText("Super size");
    actionLabel->textStyle()->setColor(Color::Black);

    // Set up of a toggle Button and connect to its onChanged signal, its in
    // the slot function onToggleChanged were animations are triggered.
    ToggleButton *toggle = new ToggleButton();
    toggle->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Right));
    connect(toggle, SIGNAL(checkedChanged(bool)), this, SLOT(onToggleChanged(bool)));

    // Add the Label and the toggle Button to the toggle Container then add
    // that Container to the main controller Container.
    toggleContainer->add(toggle);
    toggleContainer->add(actionLabel);

    // Add the description and the toggle button Container.
    controllerContainer->add(descriptionContainer);
    controllerContainer->add(toggleContainer);

    return controllerContainer;
}
Пример #3
0
SelectionRecipe::SelectionRecipe(Container * parent) :
        CustomControl(parent)
{
    Container *recipeContainer = new Container();
    StackLayout *recipeLayout = new StackLayout();
    recipeLayout->setLeftPadding(80);
    recipeLayout->setRightPadding(80);
    recipeContainer->setLayout(recipeLayout);

    Container *checkBoxContainer = new Container();

    Label *typeLabel = new Label();
    typeLabel->setText("Olive Type");
    typeLabel->textStyle()->setBase(SystemDefaults::TextStyles::titleText());
    typeLabel->textStyle()->setFontWeight(FontWeight::Bold);
    typeLabel->setBottomMargin(0);

    checkBoxContainer->add(typeLabel);

    // Since we want the CheckBox Control to also have a colored box to represent the
    // selection of which olives should be in the mix a CustomControl is used, see SelectionCheckBox.cpp.
    SelectionCheckBox *limonCello = new SelectionCheckBox();
    limonCello->setOliveColor(QVariant::fromValue<Color>(Color::fromARGB(0xff808000)));
    limonCello->setTitle("Limoncello");
    limonCello->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Fill));

    SelectionCheckBox *greek = new SelectionCheckBox();
    greek->setOliveColor(QVariant::fromValue<Color>(Color::fromARGB(0xff698B22)));
    greek->setTitle("Greek");

    SelectionCheckBox *kalamata = new SelectionCheckBox();
    kalamata->setOliveColor(QVariant::fromValue<Color>(Color::fromARGB(0xff733D1A)));
    kalamata->setTitle("Kalamata");

    checkBoxContainer->add(limonCello);
    checkBoxContainer->add(greek);
    checkBoxContainer->add(kalamata);

    // The two menu selections are separated by a Divider.
    Divider *divider = new Divider();
    divider->setBottomMargin(60);

    Label *fillingLabel = new Label();
    fillingLabel->setText("Filling");
    fillingLabel->textStyle()->setBase(SystemDefaults::TextStyles::titleText());
    fillingLabel->textStyle()->setFontWeight(FontWeight::Bold);
    fillingLabel->setBottomMargin(9);

    // The RadioGroup is a Control that one use if only one option can
    // be selected at the time. RadioGroupOptions are added to the Control
    // and by listening for the onSelectedOptionChanged signal its possible
    // to keep track of what the current selection is.
    RadioGroup *radioGroup = new RadioGroup();
    radioGroup->setDividersVisible(false);

    Option *stoneOption = new Option();
    stoneOption->setText("Stone");

    Option *pimentoOption = new Option();
    pimentoOption->setText("Pimento");

    radioGroup->add(stoneOption);
    radioGroup->add(pimentoOption);

    // We listen for changes in selected options on the RadioGroup.
    connect(radioGroup, SIGNAL(selectedIndexChanged(int)), this, 
            SLOT(fillingSelectedOptionChanged(int)));

    // Add the controls.
    recipeContainer->add(checkBoxContainer);
    recipeContainer->add(divider);
    recipeContainer->add(fillingLabel);
    recipeContainer->add(radioGroup);

    setRoot(recipeContainer);
}
ActivityIndicatorRecipe::ActivityIndicatorRecipe(Container *parent) :
CustomControl(parent)
{
    // The recipe Container.
    Container *recipeContainer = new Container();
    StackLayout *recipeLayout = new StackLayout();
    recipeLayout->setLeftPadding(20.0);
    recipeLayout->setRightPadding(20.0);
    recipeContainer->setLayout(recipeLayout);
    
    // The introduction text.
    TextArea *introText = new TextArea();
    introText->setText((const QString) "This is a milk boiling simulator recepie");
    introText->setEditable(false);
    introText->textStyle()->setColor(Color::Gray);
    introText->textStyle()->setBase(SystemDefaults::TextStyles::bodyText());
    introText->setBottomMargin(100);
     
    Container* smashContainer = new Container();
    smashContainer->setLayout(new DockLayout());
    
    
    // This the big image that was taking during the night
    // it's at the same position as the day one, but further from the viewer.
    mUnbroken = ImageView::create("asset:///images/stockcurve/egg.png");
    
    // Center it using dock layout info.
    mUnbroken->setLayoutProperties( DockLayoutProperties::create()
                                   .horizontal(HorizontalAlignment::Center)
                                   .vertical(VerticalAlignment::Center));
    
    // Since this image is on top of the night one, we can hide the
    // night image with changing the opacity value of this image.
    mBroken = ImageView::create("asset:///images/stockcurve/broken_egg.png").opacity(0.0);
    
    // Center it using dock layout info.
    mBroken->setLayoutProperties( DockLayoutProperties::create()
                                 .horizontal(HorizontalAlignment::Center)
                                 .vertical(VerticalAlignment::Center));
    
    mActivityIndicator = new ActivityIndicator();
    mActivityIndicator->setPreferredSize(130, 130);
    
    smashContainer->add(mUnbroken);
    smashContainer->add(mActivityIndicator);
    smashContainer->add(mBroken);
     
    mButton = new Button();
    mButton->setTopMargin(100);
    mButton->setText((const QString) "start cooking");
    connect(mButton, SIGNAL(clicked()), this, SLOT(onClicked()));
    
    
    // Add the controls to the recipe Container and set it as root.
    recipeContainer->add(introText);
    recipeContainer->add(smashContainer);
    
    recipeContainer->add(mButton);
    
    setRoot(recipeContainer);
    
    
}
Пример #5
0
InputRecipe::InputRecipe(Container *parent) :
        CustomControl(parent)
{

    Container *recipeContainer = new Container();
    StackLayout *recipeLayout = new StackLayout();
    recipeContainer->setLayout(recipeLayout);
    recipeLayout->setLeftPadding(80);
    recipeLayout->setRightPadding(80);

    // Label used to display the entered text.
    mInputLabel = new Label();
    mInputLabel->setText((const QString) " ");
    mInputLabel->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Fill));
    mInputLabel->setBottomMargin(50.0);
    mInputLabel->textStyle()->setBase(SystemDefaults::TextStyles::bodyText());
    
    // A multi line text input.
    TextArea *textArea = new TextArea();
    textArea->setHintText("Enter text into multi-line TextArea");
    textArea->setMinHeight(120.0f);
    textArea->setMaxHeight(200.0f);
    textArea->setPreferredHeight(0);
    textArea->setBottomMargin(50.0);
    textArea->textStyle()->setBase(SystemDefaults::TextStyles::bodyText());
    textArea->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Fill));


    // Connect to the textChanged (to update text).
    connect(textArea, SIGNAL(textChanging(const QString &)), this,
            SLOT(onTextChanging(const QString &)));

    // A single line input field with a clear functionality.
    TextField *textField = new TextField();
    textField->setHintText("Enter text into a single line TextField");
    textField->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Fill));
    textField->setBottomMargin(50.0);

    // Connect to the textChanged (to update text).
    connect(textField, SIGNAL(textChanging(const QString &)), this,
            SLOT(onTextChanging(const QString &)));

    // A disabled text field.
    TextField *disabledTextField = new TextField();
    disabledTextField->setHintText("This is a disabled text field");
    disabledTextField->setEnabled(false);
    disabledTextField->setLayoutProperties(
            StackLayoutProperties::create().horizontal(HorizontalAlignment::Fill));
    disabledTextField->setBottomMargin(50.0);

    // Add the controls to the recipe Container and set it as the CustomControl root.
    recipeContainer->add(mInputLabel);
    recipeContainer->add(textField);
    recipeContainer->add(disabledTextField);
    recipeContainer->add(textArea);

    //recipeContainer->add(inputContainer);
    setRoot(recipeContainer);
}