This .next() vs .next thing is bothering more than it should.

OK, the principle is that we should use a property if it just returns a more or less static value, and a function if it does something to the object.

cursor.next() is legit, because it changes the the internal state of the cursor (ie, moves it on to the next whatever.

measure.next is actually static, it is a pointer to the next measure, and calling it does not change the internals.

BUT: cursor.segment() is currently implemented as a function, but it doesn't change anything, just returns the currently selected segment.

Using Q_PROPERTY gives more control over what it is exposed as, so I can return wrapped elements without changing the internal name of the functions.

Using Q_INVOKABLE means I'm stuck with the actual name of the function, meaning I have to export a different function name if the existing one does not do what I want.

Then there is the way we've changed the namespace for Q_ENUM, but that is another issue.

I'm probably overthinking it, but a few guiding principles now may make life easier for all the the future.

Robbie


On 11/10/2017 3:37 PM, David Bolton wrote:
Robbie,

Speaking to question 5, I appreciate what you are doing. Plugins are a great way for people to jump into making MuseScore better who have trouble with C++. Plugins also allow development without having to rebuild the whole source code which lowers lots of barriers. Plugins are great for anyone that wants to develop a small feature that is unique. Sometimes there are features that you want only for a specific project.

David



On 10/10/2017 8:41 PM, Robbie Matthews wrote:

I've been working steadily on the 3.0 plugins, and have reached a point where I'd like some feedback.

Discussion to date: https://musescore.org/en/node/255081

PR to date: https://github.com/musescore/MuseScore/pull/3303

Among other things, I posed the question, do we prefer functions or read only properties?

Specifically, should it be *measure.next* or *measure.next()* ?

jojo-schmidt expressed a preference for functions if they do something, and properties if they don't.

I have a slight preference for that approach myself, so started exposing the .next as a Q_INVOKABLEĀ  (ie, .next()) rather than a read only property.

Score represents a problem, in that a) Score is a QObject, so is exposed directly, as distinct from most other elements, which are wrappered.

Score::firstMeasure() is already used internally, and I can't just Q_INVOKE it because it returns an unwrapped Element*

So it is currently exposed as a read only property, which breaks the pattern I'm trying to estabish.

Question 1: Was the decision to keep Score a QObject critical to development?

Question 2: Should I in any case create a ScoreW to wrap Score and register that with QML? (Starting to think so...)

Question 3: Do others have any strong opinions on .next vs .next() ?

Question 4: Is there anything actually documenting what the various properties do? (for get and set)?

Question 5: Am I wasting my time?

Any input appreciated.

Robbie




_______________________________________________
Mscore-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mscore-developer



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mscore-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mscore-developer


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mscore-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mscore-developer

Reply via email to