Basic OwnedArray Questions


#1

Hey,

i have 20 Labels (called for testing label1, label2… label20).
And i want to access these Labels by numbers.
As idea in a For-Loop, to write for every Label the name “MYLABEL”, instead of calling each label one by one in a line of code and set the name.

My idea is to do it in an OwnedArray of Labels. Could that work?
As i understood OwnedArrays, i can make an Array of Pointers, each Pointer points to a Specific label.

For example could i:
myOwnedArray[5].setName(“MYLABEL”);

and that would change the name of Label 6 to the given String?

That would be great.

Greetings,
Manuel


#2
OwnedArray<Label> labels;

for (auto i = 0; i < 20; ++i)
   labels.add(new Label({}, "Label Number " + String(i)));

for (auto * label: labels)
  addAndMakeVisible(label);

You can do things like this …

label[num]->setText("new label text", dontSendNotification);

Note that as OwnedArray is an array of pointers you need to use the -> operator not the . operator to access the methods.

Bear in mind the label constructor takes the label text as the second parameter:

Label (const String &componentName=String(), const String &labelText=String())

#3

Awesome!!!
Just needed such an example to understand the working of the OwnedArray. Documentation has no real Examples, and i am very new to c++ and Juce, so examples help me alot!!

thought i need to create first 20 Labels.
And then add pointers to each of them from the array.

Thanks, gonna get back here if i stuck on further operations!!

<3

Manuel


#4

Since OwnedArray::add() returns the added pointer, you can even reduce to one loop:

OwnedArray<Label> labels;

for (auto i = 0; i < 20; ++i)
    addAndMakeVisible (labels.add (new Label({}, "Label Number " + String(i))));

#5

Well I never notice that it did that.

Code here often looks like

for (auto i = 0; i < 20; ++i)
{
   auto newLabel = new Label({}, "Label Number " + String(i));
   addAndMakeVisible(newLabel);
   labels.add(newLabel);
}

#6

It just saves one variable. But your version is surely easier to understand. And I am pretty sure, the produced binary will be identical.
Plus your first example shows nicely the new way how to iterate a container…
Just posted it as a gimmick…


#7

I heard that the code goes faster if the source file has fewer characters.


#8

Only if you use counterclockwise twisted AC cables, that take account for the earth rotation in the northern hemisphere…


#9

That’s why we should use tabs instead :troll:


#10

You shouldn’t even jokingly say anything like that when newbies are around.


#11

Newbies don’t go away, they will always be around. Lighten up. :slight_smile: