tob

Michal Moskal malekith w pld.org.pl
Śro, 28 Lut 2001, 12:14:37 CET


Ehlo,

Zaczynam widzieć. Tj. ten cały toolkit. Przejrzałem na oczy
gdy zobaczyłem gob'a. (dzięki Tomku za hint). Mamy 2 albo i
więcej pieczeni na jednym ogniu. 1. mimo wszystko jest to C,
można używać normalnego, dobrze przetestowanego kompilatora,
2. jest fajnie obiektowe (tak jak *my* chcemy, żeby było,
a nie tak jak chciał Strostruop :), 3. po co sobie ułatwiać
życie jak można utrudniać: napisanie toolkitu to taki moderate
challange, ale napisanie toolkitu i obiektowego rozszerzenia
C to jest już challange :))) Super! I love this game! To jest
po prostu piękne, napisać kawałek preprocesora, i odpadają
te wszystkie chore problemy z self->super.super.super.next
:) Piszę to w domu, zaraz się zabieram do kodowania :) Nic,
nie tracę już czasu :)

Aha, jeszcze jedno, zestawiłem różne podejścia do
problemu textmode Ui, głownie moje, bo są one raczej
mało znane (zaryzykowałbym twierdzenie, że tylko
mi :), dorzuciłem jeszcze tvision, port na linuxa,
nie pamiętam gdzie to znalazłem... Efekt jest @
ftp://ftp.pld.org.pl/people/malekith/ttk-tries.tar.bz2
(jak się jeszcze nie rsynceło, to
ftp://aleph-0.dhs.org/people/malekith/ttk-tries.tar.bz2).
ok 400k (tvision jest spore). [ to dopiero po 14... wyklad ]

Hmm.. wyszło na to że nic nie zakodowałem... Ale za to zrobiłem
taki opis jak to będzie wyglądać. Załaczam go. Proszę o pytania
i uwagi. Przed lakturą attachmentu można pobieżnie zapoznać się
z man gob, ale to nie powinno być konieczne. Ten attachment to
fragment kodu to tob, w komentarzach jest co się pojawi w C.
Napisanie czegoś takiego w wersji podstawowej to kwestia 3-7
h. Więc jutro może coś commitne, chociaż jak widzę tę listę
z programowania... :<

Co do kodu: sądzicie że osobne pliki w tob-h i tob-c są
potrzebne? Co prawda to takie obiektowe... ale nie wiem
czy konieczne.

-- 
                        Michał Moskal <malekith w pld.org.pl>

DOS: n., A small annoying boot virus that causes random
     spontaneous system crashes, usually just before saving
     a massive project.  Easily cured by UNIX.  See also
     MS-DOS, IBM-DOS, DR-DOS.
	-- David Vicker's .plan

Semtex Mossad KGB Kennedy Mossad FBI NSA nuclear 
Waco, Texas Qaddafi Semtex Soviet  Delta Force South Africa 
Legion of Doom Honduras quiche Serbian Delta Force quiche 
--
-------------- następna część ---------
class TtkObject {
	char *name;
	void destroy()
	{
	}
};

class TtkWidget : TtkObject {
	TtkWidget *next;
	TtkWidget *prev;
	TtkWidget *active;
	TtkWidget *children;
	TtkWidget *parent;

	void draw()
	{
		TtkWidget *p;

		for (p = self->children; p; p = p->next)
			@p->draw();
		/* @p->draw() >>> (p)->klass->draw((p)) */
	}

	bool is_active()
	{
		return self->parent == NULL ||
		       @parent->is_active_widget(self);
	}
/* >> 
 * static bool ttk_widget_is_active(TtkWidget *self)
 * {
 * 	return self->parent == NULL ||
 *	       (parent)->klass->is_active_widget((parent), self);
 * }
 */

	bool is_active_widget(TtkWidget *p)
	{
		return @self->is_active() && p == self->active;
	}
/* >>
 * static bool ttk_widget_is_active_widget(TtkWidget *self, TtkWidget *p)
 * {
 *	return (self)->klass->is_active_widget((self)) && p == self->active;
 * }
 */
};

/* >>
 * typedef struct _TtkWidget TtkWidget;
 * struct TtkWidgetKlass {
 *	// internal:
 *	TtkObject *super;
 *	// Object:
 *	void (*destroy)(TtkObject *self);
 *	// TtkWidget:
 *	void (*draw)(TtkWidget *self);
 *	bool (*is_active_widget)(TtkWidget *self,TtkWidget *p);
 *	bool (*is_active)(TtkWidget *self);
 * };
 * struct _TtkWidget {
 *	// internal:
 *	struct TtkWidgetKlass klass;
 *	// TtkObject:
 *	char *name;
 *	// TtkWidget:
 *	TtkWidget *next;
 *	TtkWidget *prev;
 *	TtkWidget *active;
 *	TtkWidget *children;
 *	TtkWidget *parent;
 * };
 *
 * // automagicly generated, ttk_object_klass() similar, but
 * // actually allocates size bytes for data structure
 * TtkWidgetKlass *ttk_widget_klass(int size)
 * {
 *	static TtkWidgetKlass *cache = 0;
 *	TtkWidgetKlass *klass;
 *	if (size == 0 && cache)
 *		return cache;
 *	klass = ttk_object_klass(size ? size : sizeof(TtkWidgetKlass));
 *	klass->super = ttk_object_klass(0);
 *	klass->draw = ttk_widget_draw;
 *	...
 *	overide klass->destroy and so on if needed
 *	if (size == 0)
 *		cache = klass;
 *	return klass;
 * }
 *
 * // ditto
 * TtkWidget *ttk_widget_new()
 * {
 *	TtkWidget *r;
 *	r = malloc(sizeof(*r));
 *	memset(r,0,sizeof(*r));
 *	r->klass = ttk_widget_klass(0);
 *	return r;
 * }
 */


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