Why does the derived class instance need to be duplicated with TkComposite

L

Lionel MAIAUX

Hello,

Is there any reason to duplicate the derived class instance when using
TkComposite ?

Examples :

1/ tk/sample/scrollframe : there are 3 frames instantiated for a
Tk::ScrollFrame object : self (derived from TkFrame), @frame (from
TkComposite) and@base (embedded frame)
Why can't we use self for the enbedded frame ?

2/ tk/sample/tktextframe.rb : there are 2 TkText instantiated for a
TkTextFrame object : self (derived from TkText) and @text.
Why this duplication ?

Thanks for your explanations and regards,
Lionel
 
H

Hidetoshi NAGAI

From: Lionel MAIAUX <[email protected]>
Subject: Why does the derived class instance need to be duplicated with TkComposite
Date: Sat, 2 Sep 2006 00:32:16 +0900
Message-ID: said:
Is there any reason to duplicate the derived class instance when using
TkComposite ?

TkComposite is used to create a Mega-widget class which is constructed
with some widgets on one frame (a base frame).
The module overrides "initialize" method.
The new "initialize" creates a new base frame (set it to @frame) and
call "initialize_composite" method (anticipates "initialize_composite"
constructs all part of the mega-widget).

Please imagine a mega-widget which is a text widget with some decoration.
Then, because your mega-widget should have properties of a text
widget, you will inherit TkText class for your mega-widget class.
However, TkComposite#initialize doesn't create a TkText widget.
You must construct a text widget and other widgets (to decorate the
text widget) on one base frame widget to treat it as one component
(You must do that in "initialize_composite" mehtod).

Now, all method calls about geometry management (pack, grid, and so
on) must be sent to the base frame, and all methods to control the
text must be sent to the text widget.
@epath and @path instance variables are used for this purpose.
@epath keeps the widget path of the base frame, and @path keeps the
widget path of the text widget.
Methods about geometry management refer @epath, and other methods
refer @path. That is the reason of why inherited methods can be sent
to the proper widget. And, I think, it will be an answer to your question.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top