Twin toolKit -- propozycja klas

Paweł Kołodziej pawelk w pld.org.pl
Wto, 27 Lut 2001, 23:13:45 CET


Witam.
Korzystjąc z chwili wolnego czasu w autobusie wymyśliłem sobie takie oto
klasy do toolkitu (chyba jednak bedziemy musieli go napisać).

Oto plik .h. Mam nadzieje że jest wystraczająco czytelny. Dopóki nie
będzie generowania zdazenia "REDRAW" przez twin'a będziemy musieli robić
draw() wszystkich obiektów po obsłużeniu każdego zdażenia. Ale narazie nie
jest to wielki problem. Na razie jest potrzebna m.in. jakaś klasa do
zdażeń (TKevent poniżej jest aby być -- raczej do niczego poważnijszego
sie nie nada). Nie mam dużego doświadczenia w UI, więc jeśli poniższe to
herezja, to prosze nie bić, tylko napisać co jest źle (będe otwarty na
argumenty w przeciwieństwie do pewnej osoby... ). Jest to w c++, zaraz
zciągne tutorial do objective-C i zobacze z czym to sie je (jeśli wiecie o
istnieniu jakiś programów w objectiv-c to dajcie znać -- jeśli nikt sie
nie zgłośi to chyba nie ma sensu sie pakować w jedną wielką niewiadomą, i
zostać przy niedoskonałym, ale sprawdzonym c++)

motto: KISS

/** nie bardzo mam idee, jak to fajnie zrobic */
class TKevent{
	public:
		int type;
		void *data;
};

class TKdrawable{
	protected:
	int x,y;    /*< position relative to parent object */
	int width,height;
	TKdrawable *parent; 
	TKdrawable *childrens; /*< may be NULL terminated array, but better 
				solutions is dynamic list */		
	TKdrawable *focused; /* pointer to children object which is (or one of 
	                        its children) actualy focused */

	void setParent(Tdrawable *p);

	public:
	TKdrawable(int x=0,y=0);
	virtual void addChildren(Tdrawable *chld,int x,int y); /*< I'm not
						     shure if it have
						     to be virtual -- but why
						     not ? */
	virtual void draw(); /*< redraw object and call childrens draw methods*/
	/** handle event, if can't handle it by itself or resend it to proper
	 * children.
	 * \return TRUE: event handled by object itself or one of its children
	 * \return FALSE: event havent been handled */
	virtual bool handleEvent(Tevent &event);
	/* send event to the parent which have no parents (main one), and then
	 * it should call handleEvent of proper object */
	void sendEvent(Tevent event);
	virtual ~TKdrawable(); /*< delete all childrens */
};

class TKwindow : TKdrawable{
	protected:
	twindow window; /*< from libTw */

	public:
	TKwindow(twidget parent,int width, int height);
	/** all other methods are from TKdrawable, and it should be enought */
};

class TKwidget : Tdrawable{
	public:
	TKwidget();
	/** All widgets has to have it's own draw() like:
	 * draw(){
	 * 	Tdraw::draw()  -- draw all childrens;
	 * 	draw itself content
	 * }
	 * handleEvent should also use TKdrawable::handleEvent to resend event
	 * to childrens if it can not handle it by itself
	 */
}
	
class TKmain {
	public:
		TKmain();
		TKwindow * addWindow(int width,height);
		run(); /*< recive and handle events in almost infinitive loop */
}
	

PS. komentaże w powyższym są w formacie łykanym przez doxygen -- bardzo
fajne narzedzie do generowania dokumentacji z komentazy w kodzie.

-- 
Paweł Kołodziej 
pawelk w pld.org.pl 
,,O ile nam wiadomo, komputer nigdy nie popełnił niewykrytego błędu.''
                                                 -- Weisert
		



Więcej informacji o liście dyskusyjnej pld-installer