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