[Gtk-sharp-list] Stuck in gtk-demo port from c to c#

Yves Kurz yves@magnific.ch
Tue, 30 Sep 2003 14:08:58 +0200

On Mon, 2003-09-29 at 11:20, Daniel Kornhauser wrote:
> Hi guys:

Hi Daniel and all... 

> I'm stuck in my  gtk-demo port from c to c#, I'm sending as attachment what I 
> have done. I did not wanted to bother you with my small problems, but now  they have 
> accumulated to become a big problem.

I started too to port gtk-demo to c#. My intention was to learn
something about gtk#. But like you I'm somewhere in the middle of the
porting effort.

> I have waisted lots of time trying to figure some of these things, sorry if they are
> obvious but I'm newbie and I'm stuck. I haven't done any advances in a week thus 
> it's time to confess my sins :-). Keep in mind I'm a newbie while you read my code ...
> I'll first present my coding conventions, and then go program by program talking
> about where I got stuck.
> One of the first remarks is that every program is independent, because I decided
> to code the main of the gtk-demo program until the end, since it looks the hardest
> and I didn't want to be stuck from the beginning. Thus they all make their
> window from scratch. For naming them I used the save convention that Duncan used
> with test: that is each program is called, the name of the c program, prefixed 
> with demo.

Started like you, every program is independent (same reason).
> e.g. buttonbox.c --> DemoButtonBoxcs
> I used long names for everything, usually I make an instance of a widget the 
> same name except I start it by a small caps.
> I took some liberties to write scrolledWindow instead of sw, I just think that 
> in examples you should be as explicit as possible ...
> Keep in mind, I still have to clean up, port the comments in ALL the sources.
> I just copied and pasted the c comments.
> If I'm infringing in any way and I wasn't explicit that I wasn't just porting 
> please let me know. I hope that just stating it in the comments is enough to 
> recognize the real authors.
> I avoided porting the error handling, because I'm lazy ...
> When I'm stuck in a program I just put a stuck comment //STUCK
Ok, i will write what I did till now.

> Appwindow.c: Stuck at the beginning 5%
> =====================================
> Didn't find any ItemFactory examples :-(
0% not started.

> DemoButtonBox.cs: Finished 100%
> ===============================
> Allmost exactly the same example.
> Couldn't find a equivalent for gtk_main() thus I used Application.Init()
> I used the prefix Gtk, in window because of ambiguous reference (Gtk.Window or Gdk.Window) 
> I used the prefix Gtk, with the casting of buttons because of bug in mcs compiler
> 		Gtk.ButtonBox bbox = null;
> 		if (horizontal == true){
> 			bbox =  new Gtk.HButtonBox();
> 		}
> 		else {
> 			bbox =  new Gtk.VButtonBox(); 
> 		}

> DemoChangeDisplay.c: Skipped i*(100%)
> =====================================
> My card only supports one display :-(
0% had no interest in it.

> DemoColorSelection.cs: Almost finished 95%
> ==========================================
> I could not write ExposeEventCallback.
> How the hell can I translate gdk_draw_rectangle !!!
> I initialized color to Gtk.Color.Zero couldn't find NULL equivalent in c-sharp.
99% haven't used ExposeEventHandler, but it works anyway. (see comments
in code)

> DemoDialog.cs: Allmost finished 99%
> ===================================
> I Couldn't find a good equivalent to gtk_dialog_new_with_butttons, thus I
> used MessageDialog. 
> Check how to handle response type. Can we make the button to have the binding to
> the cancel signal automagicly like in  gtk_dialog_new_with_butttons or should we
> just use the if ?
> Remark -> This is me just thinking aloud :  
> Wonder what is the best programming style when making several widgets like a label ?
> Declare a static label, for the class and use it for all the labels, or declare an 
> automatic label in each scope where it's needed and use it.
> I decided to declare a label in each scope since I consider it cleaner programming
> and I don't think it imposes a great penalty in memory ...
> Then again I don't have the slightest idea of how I compiler runs, but I
> have a Master in Computer Science... figure that out :-p
99% don't know if I did it like I should but it works.

> DemoDrawingArea.cs: just interface done, no callbacks implemented 50%
> =======================================================================
> I'm lost handling colors, events, drawingareas, you name it, I don't know it
> :-(
> One day, when I grow up, I'll understand pointers ... 
>                                           (Shit!!! I allready have gray hairs)

> Images.cs just interface done, no callbacks implemented 70%
> ============================================================
> I got timed out in the use of the timeout >:-G
60% progressive image loading is not finished and demo crashes as when
you click twice on the button.

> ItemFactory.cs: Nothing done, stuck at the beginning. -3.14%
> ============================================================
> OUCH, it really hurts when you can't get past the third line of code

> DemoMenus.cs: Finished 100%
> ==========================
> Copied Menus from Duncan and just did some modifications in order
> to match exactly to the example.
99% wrote it without copying so I'm not sure if it's done right

> DemoPanes.cs:  just interface done, no callbacks implemented 80%
> =================================================================
> Guess what ?
> I Got stuck in the callbacks, :-)
> My question is plain and simple :
> If I have two widgets that call the same callback, how can I find out 
> the name of the widget that invoked the callback ???
5% started and stopped (went to holidays:)

> PixBufs.cs: Skipped  (Planck's constant)
> =======================================
> Didn't even have to try to know I would get stuck right at the begining.
> Pixbuf isn't a trivial widget.
98% works like it should but there is some code in the original demo
which doesn't work by me in gtk# (see comment in code line 116)
> SizeGroups.cs : Finished 100%
> =============================
> I Love to use cp. 
> Allready implemented by Duncan :-)


> DemoStockrowser.cs:  just starting doing the interface 1%
> ===================
> I'm sure somewhere somebody know how to say :  
>   store = gtk_list_store_new (2, STOCK_ITEM_INFO_TYPE, G_TYPE_STRING);
> in c#
> I simply didn't find in monodoc that the StockItem Structure had an
> Info member :-(
> Stuck doing ListStore how de hell do they work ?!?!?!

> TextWidget.cs : just starting doing the interface 5%
> ====================================================
> stuck implementing create_tags :
>   gtk_text_buffer_create_tag (buffer, "heading",
> 			      "weight", PANGO_WEIGHT_BOLD,
> 			      "size", 15 * PANGO_SCALE,
> 			      NULL);
> TextBuffer.CreateTag should exist but it doesn't :-(

> DemoEditableCells Stuck in the callbacks 70%
> ============================================
> I definitely don't understand how ListStore's work, I should look
> at an example. Wait a minute I'm actually TRYING to code the example !
> Bummer
> :-(

> DemoListStore Skipped
> =====================
> According to the previous corollary I just skipped this example.

> DemoTreeStore, stuck in the begining 20%
> ========================================
> Lesson learned, I'm not capable of doing a linked list with struct in c#
> If somebody ever knows how to implement a linked list that looks like this
> struct ListNode
> {
>         string        component;
>         int             indentation;
>         ListNode     Link;
> };
> and can avoid a cycle error, please tell me !
> Anyway I did it with a class and it worked fine ...
> But as always I got stuck, couldn't figure how to use TreeStore in a 
> Callback.

> DemoMain.cs 5%
> ==============
> Should I use reflection to get the properties out of the examples, or should
> I do it by hand like in this examples ?


That's it.. here is my code: http://www.magnific.ch/gtkdemo.tar.gz (at
least as long my internet connections is alive).. 

Hope it will help you bit