Linux & DMD & GtkD

Antonio Corbi antonio at ggmail.com
Sat Feb 16 19:11:03 UTC 2019


On Saturday, 16 February 2019 at 16:28:09 UTC, Ron Tarrant wrote:
> On Saturday, 16 February 2019 at 14:29:56 UTC, Russel Winder 
> wrote:
>
>> Pass, sorry.
>
> Thanks for the replies, guys...
>
> I quoted the above line because it's just about the only thing 
> I understood. Let me explain...
>
> It's been almost 20 years since I used Linux and my notes are 
> long gone. A ton of things have changed. Like, for instance, it 
> found all my hardware this time, without me getting involved. 
> But also the software installation managers and lots of other 
> things are completely unrecognizable. On top of that, my brain 
> has (unfortunately) been molded into the Windows/Microsoft way 
> of thinking.
>
> I guess what I'm hoping for is a step-by-step, 
> full-on-hand-holding, large-print with pictures tutorial for 
> how to get GtkD and (I guess) dub working. I know the stuff you 
> wrote is probably helpful, but I'm not well-enough versed in 
> Linux or any flavour of UNIX ATM to understand it, pick which 
> option I should use, and to put these commands in proper order.
>
> So far, as I said, dmd is working. Up until now, I've avoided 
> dub because, with so many code examples (more than 70 at 
> present) dub would bring in a lot of file/directory clutter.
>
> But you're saying that dub will make it easier to keep up with 
> future changes/updates in all the various bits and bobs, so if 
> that means I finally have to do dub, perhaps someone could 
> point me at a good tutorial for that?
>
> Sorry if I sound ungrateful or cranky, but I have a lot on my 
> plate ATM and I'm getting frustrated.

Hi Ron,

For one-file programs, dub usage is very easy.

Placing a minimal comment-header between /+ +/ symbol comments, 
gets your job done like in this example ( I think the gtkd code 
is from one of your examples in the blog):

/+
  dub.sdl:
  --------
  name       "gtkhello"
  dflags     "-dip25" "-dip1000"
  dependency "gtk-d:gtkd" version="~>3.8.0"
  +/

/*
   dub run --single gtkhello.d
   dub build --single gtkhello.d.
   dub gtkhello.d <arguments to hello>.
*/


module gtkhello;

import std.stdio;
import gtk.MainWindow;
import gtk.Main;
import gtk.Widget;
import gtk.Layout;
import gtk.Button;
import gdk.Event;

void main(string[] args)
{
   Main.init(args);
   TestRigWindow myTestRig = new TestRigWindow("Test Rig");
   myTestRig.showAll();
   Main.run();

} // main()


class TestRigWindow : MainWindow
{
   this(string title)
   {
     // window
     super(title);
     addOnDestroy(delegate void(Widget w) { quitApp(); } );

     auto myButton = new MyButt("Button Name");
     auto myOtherButton = new MyOtherButt("Other Button Name");

     // layout
     auto myLayout = new MyLayout(myButton, myOtherButton);
     add(myLayout);

   } // this() CONSTRUCTOR


   void quitApp()
   {
     writeln("Bye.");
     Main.quit();

   } // quitApp()

} // class myAppWindow


class MyLayout : Layout
{
   this(MyButt myButton, MyOtherButt otherButton)
   {
     super(null, null);
     put(myButton, 10, 20);
     put(otherButton, 10, 60);

   } // this()

} // class MyLayout


class MyButt : Button
{
   this(string labelText)
   {
     super(labelText);
     addOnButtonRelease(&doSomething);

   } // this()


   bool doSomething(Event e, Widget w)
   {
     writeln("Something was done.");

     return(true);

   } // doSomething()

} // class MyButt


class MyOtherButt : Button
{
   this(string labelText)
   {
     super(labelText);
     string message = "Something other than that was done.";
     addOnClicked(delegate void(_) { doSomething(message); } );

   } // this()


   void doSomething(string messageText)
   {
     writeln(messageText);

   } // doSomething()

}
---

Antonio



More information about the Digitalmars-d-learn mailing list