GUI library for DMD 2.090 or DMD 2.091

Adam D. Ruppe destructionator at gmail.com
Fri Apr 24 14:13:25 UTC 2020


On Friday, 24 April 2020 at 13:45:22 UTC, Phrozen wrote:
> I need something simple - a modal window with 3 buttons and a 
> two text boxes

This sounds easy with my minigui.d. My library doesn't have a lot 
of features, no fancy graphics, and layout can be a bit clunky... 
but check out this code:

Well first grab the library files from here:

https://github.com/adamdruppe/arsd

The three files you'll need are minigui.d, simpledisplay.d, and 
color.d. Just download them to your directory and compile all 
together with your file:

dmd yourfile.d minigui.d simpledisplay.d color.d

and it will make yourfile.exe. To get rid of the console, add 
`-L/subsystem:windows` to that build command. If making a 64 bit 
exe, you will need -m64 and -L/entry:mainCRTStartup as well. So 
the total thing can be:

dmd yourfile.d minigui.d simpledisplay.d color.d 
-L/subsystem:windows -L/entry:mainCRTStartup -m64

And that will create your stand-alone Windows exe that does not 
have a console, just the gui window.

Here's a screenshot:

http://arsdnet.net/calc.png

The library also works on Linux but it is quirky there since it 
is 100% DIY. It has no Mac support at all right now. But if all 
you need is basic building blocks on Windows, it should be OK.

Anyway, the code, I hope is is kinda self-explanatory or at least 
you can try poking around and see changes yourself. If not let me 
know and I'll write more here.

---
import arsd.minigui;

class CustomSpacer : Widget {
         this(Widget parent) { super(parent); }

         override int paddingLeft() { return 32; }
         override int paddingRight() { return 32; }
         override int paddingTop() { return 32; }
         override int paddingBottom() { return 32; }
}

void main() {
         auto window = new Window(400, 180, "My Calculator");

         auto spacer = new CustomSpacer(window);

         auto box1 = new LabeledLineEdit("Fahrenheit: ", spacer);
         auto box2 = new LabeledLineEdit("Celsius: ", spacer);

         new VerticalSpacer(spacer);

         auto layout = new class HorizontalLayout {
                 this() { super(spacer); }
                 override int maxHeight() { return 40; }
         };

         auto button1 = new Button("F to C", layout);
         auto button2 = new Button("C to F", layout);
         auto button3 = new Button("Close", layout);

         button1.addEventListener(EventType.triggered, delegate () 
{
                 import std.conv;
                 import std.format;
                 try {
                         auto f = to!float(box1.content);
                         auto c = (f - 32) / 1.8;

                         box2.content = format("%0.2f", c);
                 } catch(Exception e) {
                         messageBox("Exception", e.msg);
                 }
         });

         button2.addEventListener(EventType.triggered, delegate () 
{
                 import std.conv;
                 import std.format;
                 try {
                         auto c = to!float(box2.content);
                         auto f = c * 1.8 + 32;

                         box1.content = format("%0.2f", f);
                 } catch(Exception e) {
                         messageBox("Exception", e.msg);
                 }
         });

         button3.addEventListener(EventType.triggered, delegate() {
                 window.close();
         });


         window.loop();
}
---

I wrote some docs for the lib here but it is incomplete. 
http://dpldocs.info/experimental-docs/arsd.minigui.html


It is also possible to use my library with dub

https://code.dlang.org/packages/arsd-official

It is the "arsd-official:minigui" subpackage there. But I think 
it is easier to just download the file yourself and build it 
since it doesn't have a fancy build system.


More information about the Digitalmars-d-learn mailing list