[scribus-dev] Tables GSoC - Weekly Report #6
Andreas Vox
andreas.vox at googlemail.com
Mon Jul 11 18:22:57 UTC 2011
Am 11.07.2011 um 18:19 schrieb Elvis Stansvik:
> 2011/7/11 Elvis Stansvik <elvstone at gmail.com>:
>> 2011/7/11 Andreas Vox <andreas.vox at googlemail.com>:
>>> Hi Elvis!
>>>
>>> Yes, listening to the StyleContext is the way to go.
>>> For listening to an Observable you can just derive from this class and
>>> implement ist changed() method:
>>>
>>> // in observabe.h:
>>>
>>> template<class OBSERVED>
>>> class SCRIBUS_API Observer {
>>> public:
>>> virtual void changed(OBSERVED) = 0;
>>> virtual ~Observer() {}
>>> };
>>>
>>> or you use
>>> bool Observable::connectObserver(QObject* o, const char* slot);
>>> bool Observable::disconnectObserver(QObject* o, const char* slot =
>>> 0);
>>>
>>> to connect an Observable to an QObject-observer; in that case deriving from
>>> QObject is enough.
>>> The Observable::update() method will notify both kinds of observers.
>>
>> Ah. Great. Thanks.
>
> ..and considering PageItem_Table is neither a QObject nor an Observer
> ATM the natural follow-up question is of course; which route do I
> take?
>
> I guess it probably makes sense to make it a QObject? I see that e.g.
> StoryText is a QObject and uses the Observable<->QObject approach for
> observing style changes.
>
Since PageItem already is a QObject and PageItem is (or should be) the superclass
of PageItem_Table, PageItem_Table should be a QObject, too.
> At the moment the PageItem_Table simply has setters/getters for its
> properties, these set/get the properties on the underlying locally
> stored style. There are no "reset" functions yet, but these will
> probably have to be written, so that properties can be reset to be
> inherited from the named style.
>
> The reason I say think making it a QObject makes sense is partly the
> new scripter, and partly the UI in the PP.
>
> The current "bare" setters/getters on PageItem_Table could then be
> declared as Qt properties with Q_PROPERTY. E.g.
>
> Q_PROPERTY(qreal leftBorder READ leftBorder WRITE setLeftBorder RESET
> resetLeftBorder NOTIFY changed)
>
> and then in addition to emitting PageItem_Table::changed() when one of
> the setters is called, the PageItem_Table would emit it if a table
> style changed (by observing them using the Observable<->QObject hookup
> mechanism).
>
> And the UI in the "Table" palette in the PP could then connect to
> PageItem_Table::changed() to know when to update its controls.
>
> And by making them proper Qt properties, perhaps it will not be
> necessary to make a separate wrapper class for the new scripter to
> work with?
>
> Does this make sense?
Yes, all PageItems should be proper QObjects to be scriptable.
/Andreas
More information about the scribus-dev
mailing list