Free open-source modern C++17 / C++20 framework to create console, forms (GUI like WinForms) and unit test applications on Microsoft Windows, Apple macOS and Linux.

Overview

xtd

Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applications on Windows, macOS, Linux, iOS and android (*).

logo

(*) See portability for more information.

License Language Reference Guide Download xtd

Continuous Integration build status

TEMPORARILY DISABLED.

We are actively looking for a solution.

Features

  • Free and open-source (MIT License);
  • a collection of native C++ classes libraries, to complete std;
  • API close to the .net API with a modern C++ approach and full integration with the std standard;
  • written in efficient, modern C++17 / C++20 with RAII programming idiom;
  • and highly portable and available on many different platforms;

For more information see

Examples

The classic first application 'Hello World'.

Console (CLI)

hello_world_console.cpp

#include <xtd/xtd>

using namespace xtd;

int main() {
  console::background_color(console_color::blue);
  console::foreground_color(console_color::white);
  console::write_line("Hello, World!");
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(hello_world_console)
find_package(xtd REQUIRED)
add_sources(hello_world_console.cpp)
target_type(CONSOLE_APPLICATION)

Build and run

Open "Command Prompt" or "Terminal". Navigate to the folder that contains the project and type the following:

xtdc run

Output

Hello, World!

Forms (GUI like WinForms)

hello_world_forms.cpp

#include <xtd/xtd>

using namespace xtd::forms;

class main_form : public form {
public:
  main_form() {
    text("Hello world (message_box)");

    button1.location({10, 10});
    button1.parent(*this);
    button1.text("&Click me");
    button1.click += [] {
      message_box::show("Hello, World!");
    };
  }
  
private:
  button button1;
};

int main() {
  application::run(main_form());
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(hello_world_forms)
find_package(xtd REQUIRED)
add_sources(hello_world_forms.cpp)
target_type(GUI_APPLICATION)

Build and run

Open "Command Prompt" or "Terminal". Navigate to the folder that contains the project and type the following:

xtdc run

Output

Windows

Screenshot

Screenshot

macOS

Screenshot

Screenshot

Linux Gnome

Screenshot

Screenshot

tunit (Unit tests like Microsoft Unit Testing Framework)

hello_world_test.cpp

#include <xtd/xtd>
#include <string>

using namespace std;
using namespace xtd::tunit;

namespace unit_tests {
  class test_class_(hello_world_test) {
  public:
    void test_method_(create_string_from_literal) {
      string s = "Hello, World!";
      valid::are_equal(13, s.size());
      assert::are_equal("Hello, World!", s);
    }
    
    void test_method_(create_string_from_chars) {
      string s = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
      valid::are_equal(13, s.size());
      string_assert::starts_with("Hello,", s);
      string_assert::ends_with(" World!", s);
    }
  };
}

int main() {
  return console_unit_test().run();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(hello_world_test)
find_package(xtd REQUIRED)
add_sources(hello_world_test.cpp)
target_type(TEST_APPLICATION)

Build and run

Open "Command Prompt" or "Terminal". Navigate to the folder that contains the project and type the following:

xtdc run

Output

Start 2 tests from 1 test case
Run tests:
  SUCCEED hello_world_test.create_string_from_literal (0 ms total)
  SUCCEED hello_world_test.create_string_from_chars (0 ms total)

Test results:
  SUCCEED 2 tests.
End 2 tests from 1 test case ran. (0 ms total)

Getting Started

  • Installation provides download and install documentation.
  • Portability provides information about C++, libraries dependency, Operating System supported, Compilers and Development Environment tools.
  • Tutorials provides xtd tutorials.
  • Examples provides some examples.

Development status

This project is an open source project. The developers who participate do so on their own time. It is therefore difficult to fix realese dates.

But you can follow the evolution of the development. We keep the status up to date.

Contributing

The authors file lists contributors together with contact information. If you make a contribution, please add yourself to the list.

Your contributions are welcome.

  • First read Code of conduct and the design guidelines to make sure your contribution follows the rules.
  • Fork the project and use a pull request for adding your contribution.
  • If you face any problems feel free to open an issue at the issues tracker, If you feel like there is a missing feature, please raise a ticket on Github. Pull request are also welcome.

Your feedback is important for the evolution of the project.

Gallery

minesweeper

minesweeper (on Windows)


game_of_life

game_of_life (on macOS)


calculator

calculator (on Ubuntu)


stopwatch

stopwatch (on Windows)


xtdc-gui

xtdc-gui - Create a new project (on macOS)


painting

painting (on Ubuntu)

Issues
  • [BUG] Problems of installing xtd in Arch linux and distributions that are based on it

    [BUG] Problems of installing xtd in Arch linux and distributions that are based on it

    The bug I have a problems with installing this framework in Arch linux and also the distributions that are based on it, i tried to install it on Manjaro and it fails, and now in Arch linux and it fails also.

    Expected behaviour I can use the xtd in Arch linux without any problems

    Desktop:

    • OS: Arch linux
    • Version: 1/02/2022
    • kernel : 5.16.4
    • xtd version: latest version
    bug Fixed 
    opened by Mamograg17 9
  • [QUESTION] Cmake Error install(error installing..)

    [QUESTION] Cmake Error install(error installing..)

    hi...i download it from sourceForge and ... but when i start file install(from cmd and with adminstor)i got Error Cmake and other error.... i have git,Vs Studio,Cmake(version 3.23.0-rc3(laset version)) and other reqiued for this. i really need this lib pls help me in fixing! ScreenShot: Capture list error in TXT file: Error install.txt

    Operation System: Windows 10 Home (ver 2004(AND LASSET UPDATE)) Viusal Studio Ver 2022 Community Cmake version 3.23.0-rc3(laset version) Help me!

    question 
    opened by mortzaLootTool 7
  • [BUG] When resizing xtdc-gui, the graphics get messed up

    [BUG] When resizing xtdc-gui, the graphics get messed up

    Describe the bug When resizing xtdc-gui, the graphics get messed up.

    To Reproduce Steps to reproduce the behavior:

    1. Resize form to minimum
    2. Resize form to the original size
    3. Do the operation several times
    4. Controls are misaligned

    Expected behaviour The controls must be aligned correctly.

    Screenshots image

    Desktop (please complete the following information):

    • OS: all OS
    • Version: any
    • xtd version: development version

    Additional context The error comes from wxWidgets, depending on the frequency of calls to GetClientSize and SetClientSize applying the difference between the previous size and the new size, it makes more and more errors when updating the sizes:

    • the width becomes bigger and bigger
    • the height becomes smaller and smaller

    POC :

    class MainFrame : public wxFrame {
    public:
      MainFrame() : wxFrame {nullptr, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize} {
        SetClientSize(300, 300);
        panelLeft->SetBackgroundColour({255, 0, 0});
        Show();
        parent_size_ = panel->GetClientSize();
        SetTitle(wxString::Format("diff = {%d, %d}", panel->GetSize().GetWidth() - panelLeft->GetSize().GetWidth(), panel->GetSize().GetHeight() - panelLeft->GetSize().GetHeight()));
    
        panel->Bind(wxEVT_SIZE, [&](wxSizeEvent& e) {
          auto diff = panel->GetClientSize() - parent_size_;
          panelLeft->SetSize(panelLeft->GetSize() + diff);
          parent_size_ = panel->GetSize();
          SetTitle(wxString::Format("diff = {%d, %d}", panel->GetSize().GetWidth() - panelLeft->GetSize().GetWidth(), panel->GetSize().GetHeight() - panelLeft->GetSize().GetHeight()));
        });
      }
      
    private:
      wxSize parent_size_ ;
      wxPanel* panel = new wxPanel(this, wxID_ANY);
      wxPanel* panelLeft = new wxPanel(panel, wxID_ANY, {50, 50}, {150, 150});
    };
    

    Workaround No workaround

    bug Fixed 
    opened by gammasoft71 4
  • [BUG] xtd-gui doesn't launch on Linux

    [BUG] xtd-gui doesn't launch on Linux

    Describe the bug The program crashes with SIGTRAP and:

    (xtdc-gui:15502): Gtk-ERROR **: 18:38:12.366: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
    

    To Reproduce Steps to reproduce the behavior:

    1. Install on linux (opensuse in my case)
    2. Try to launch the gui via terminal (to see the error message)

    Expected behaviour Gui should show up

    Desktop (please complete the following information):

    • OS: Linux, OpenSuSE
    • Version: Tumbleweed
    • xtd version: master (4d412ab046f51da2e5baf782f9f2f5bb23c49840)
    invalid 
    opened by niansa 4
  • little more adjustments

    little more adjustments

    opened by BaderEddineOuaich 4
  • [QUESTION] Why does the hello world example not running ?

    [QUESTION] Why does the hello world example not running ?

    i tried to build hello world app from the examples in the examples folder,

    #include <xtd/xtd>
    
    using namespace xtd::forms;
    
    class main_form : public form {
    public:
      main_form() {
        text("Hello world (message_box)");
        button1.location({10, 10});
        button1.parent(*this);
        button1.text("&Click me");
        button1.click += [] {
          message_box::show("Hello, World!");
        };
      }
      
    private:
      button button1;
    };
    
    int main() {
      application::run(main_form());
    }
    
    

    this code is from github, but when i run xtdc run i get :

    [ 33%] Linking CXX executable gui_app1
    /usr/bin/ld: CMakeFiles/gui_app1.dir/properties/startup.cpp.o: in function `main':
    startup.cpp:(.text+0x20): multiple definition of `main'; CMakeFiles/gui_app1.dir/src/form1.cpp.o:form1.cpp:(.text+0x0): first defined here
    /usr/bin/ld: CMakeFiles/gui_app1.dir/properties/startup.cpp.o: in function `main':
    startup.cpp:(.text+0x3c): undefined reference to `gui_app1::form1::main()'
    collect2: error: ld returned 1 exit status
    make[2]: *** [gui_app1/CMakeFiles/gui_app1.dir/build.make:125: gui_app1/gui_app1] Error 1
    make[1]: *** [CMakeFiles/Makefile2:152: gui_app1/CMakeFiles/gui_app1.dir/all] Error 2
    make: *** [Makefile:146: all] Error 2
    Build error! Run project aborted.
    
    

    is this a problem with the code or the framework.

    question Fixed 
    opened by Mamograg17 3
  • [ENHANCEMENT] Set default location of .xtdc-gui to ~/.config/xtdc-gui

    [ENHANCEMENT] Set default location of .xtdc-gui to ~/.config/xtdc-gui

    Would it be possible to set the default location of the .xtdc-gui config file to $HOME/.config/xtdc-gui? One of the problems I face is that my home directory ends up with a ton of different hidden folders at top-level, and it'd be really nice if xtd didn't fall prey to that issue.

    I wanted to ask now, because this is something that would be more difficult to change later on.

    enhancement Fixed 
    opened by codeinred 3
  • [BUG] Error when building src/xtd/forms/loading_indicator.cpp: reference to `'link'` is abmiguous

    [BUG] Error when building src/xtd/forms/loading_indicator.cpp: reference to `'link'` is abmiguous

    Describe the bug When running the install script, it encounters a compiler error when building src/xtd/forms/loading_indicator.cpp. The error states that a reference to link is ambiguous, with the two candidates being class xtd::forms::link, and extern int link in unistd.h.

    I've attached the full output below.

    To Reproduce

    • I cloned xtd master.
    • I installed gtk3 and gtk3mm for my system
    • I went into the xtd directory, and ran ./install

    It downloaded and build wxwidgets and the other dependencies without issues, however there was an error 82% of the way through the build process when building src/xtd/forms/loading_indicator.cpp

    Screenshots

    Click to see screenshots

    image image

    Desktop (please complete the following information):

    • OS: Manjaro Linux (a distribution of arch)

      NB: I made sure to install gtk3 and gtk3mm before building xtd. I made sure they worked, and I was able to compile and run a gtk3 GUI program to test the installation.

      I have CMake 3.21 installed on the system.

    • Version: Linux version 5.10.68-1-MANJARO ([email protected]) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 2.36.1) #1 SMP PREEMPT Wed Sep 22 12:29:47 UTC 2021

    • xtd version. 0.1.0, xtd on master branch, commit 12a62a62e

    Additional context

    Click to see CMake Environment Info
    -- The C compiler identification is GNU 11.1.0
    -- The CXX compiler identification is GNU 11.1.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /usr/bin/cc - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/c++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0") 
    -- Checking for module 'gtk+-3.0'
    --   Found gtk+-3.0, version 3.24.30
    -- Found wxWidgets: -L/usr/local/lib;-pthread;/usr/local/lib/libwx_gtk3u_xrc-3.1.a;/usr/local/lib/libwx_gtk3u_core-3.1.a;/usr/local/lib/libwx_baseu-3.1.a;gtk-3;gdk-3;z;pangocairo-1.0;pango-1.0;harfbuzz;atk-1.0;cairo-gobject;cairo;gdk_pixbuf-2.0;gio-2.0;gobject-2.0;glib-2.0;libSM.so;libICE.so;libX11.so;libXext.so;libXtst.so;-lwx_baseu-3.1;libjpeg.so;libpng.so;libz.so;libtiff.so;libSDL2main.a;libSDL2.so;gtk-3;gdk-3;z;pangocairo-1.0;pango-1.0;harfbuzz;atk-1.0;cairo-gobject;cairo;gdk_pixbuf-2.0;gio-2.0;gobject-2.0;glib-2.0;libSM.so;libICE.so;libX11.so;libXext.so;libXtst.so;libz.so;-lwxregexu-3.1;secret-1;gio-2.0;gobject-2.0;glib-2.0;libc.so;-lpthread;dl (found version "3.1.5") 
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/alecto/.local/sources/xtd/build/Release
    
    Click to see Compiler Error
    [ 82%] Building CXX object src/xtd.forms/CMakeFiles/xtd.forms.dir/src/xtd/forms/loading_indicator.cpp.o
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:17:1: error: reference to ‘link’ is ambiguous
       17 | link& link::description(const xtd::ustring& value) {
          | ^~~~
    In file included from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:27:11: note: candidates are: ‘class xtd::forms::link’
       27 |     class link : public object {
          |           ^~~~
    In file included from /usr/include/c++/11.1.0/bits/atomic_wait.h:44,
                     from /usr/include/c++/11.1.0/bits/atomic_base.h:41,
                     from /usr/include/c++/11.1.0/bits/shared_ptr_atomic.h:33,
                     from /usr/include/c++/11.1.0/memory:78,
                     from /home/alecto/.local/sources/xtd/src/xtd.core/include/xtd/object.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /usr/include/unistd.h:801:12: note:                 ‘int link(const char*, const char*)’
      801 | extern int link (const char *__from, const char *__to)
          |            ^~~~
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:26:1: error: reference to ‘link’ is ambiguous
       26 | link& link::enabled(bool value) {
          | ^~~~
    In file included from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:27:11: note: candidates are: ‘class xtd::forms::link’
       27 |     class link : public object {
          |           ^~~~
    In file included from /usr/include/c++/11.1.0/bits/atomic_wait.h:44,
                     from /usr/include/c++/11.1.0/bits/atomic_base.h:41,
                     from /usr/include/c++/11.1.0/bits/shared_ptr_atomic.h:33,
                     from /usr/include/c++/11.1.0/memory:78,
                     from /home/alecto/.local/sources/xtd/src/xtd.core/include/xtd/object.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /usr/include/unistd.h:801:12: note:                 ‘int link(const char*, const char*)’
      801 | extern int link (const char *__from, const char *__to)
          |            ^~~~
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:35:1: error: reference to ‘link’ is ambiguous
       35 | link& length(size_t value);
          | ^~~~
    In file included from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:27:11: note: candidates are: ‘class xtd::forms::link’
       27 |     class link : public object {
          |           ^~~~
    In file included from /usr/include/c++/11.1.0/bits/atomic_wait.h:44,
                     from /usr/include/c++/11.1.0/bits/atomic_base.h:41,
                     from /usr/include/c++/11.1.0/bits/shared_ptr_atomic.h:33,
                     from /usr/include/c++/11.1.0/memory:78,
                     from /home/alecto/.local/sources/xtd/src/xtd.core/include/xtd/object.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /usr/include/unistd.h:801:12: note:                 ‘int link(const char*, const char*)’
      801 | extern int link (const char *__from, const char *__to)
          |            ^~~~
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:41:1: error: reference to ‘link’ is ambiguous
       41 | link& link::link_data(std::any value) {
          | ^~~~
    In file included from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:27:11: note: candidates are: ‘class xtd::forms::link’
       27 |     class link : public object {
          |           ^~~~
    In file included from /usr/include/c++/11.1.0/bits/atomic_wait.h:44,
                     from /usr/include/c++/11.1.0/bits/atomic_base.h:41,
                     from /usr/include/c++/11.1.0/bits/shared_ptr_atomic.h:33,
                     from /usr/include/c++/11.1.0/memory:78,
                     from /home/alecto/.local/sources/xtd/src/xtd.core/include/xtd/object.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /usr/include/unistd.h:801:12: note:                 ‘int link(const char*, const char*)’
      801 | extern int link (const char *__from, const char *__to)
          |            ^~~~
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:50:1: error: reference to ‘link’ is ambiguous
       50 | link& link::name(const xtd::ustring& value) {
          | ^~~~
    In file included from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:27:11: note: candidates are: ‘class xtd::forms::link’
       27 |     class link : public object {
          |           ^~~~
    In file included from /usr/include/c++/11.1.0/bits/atomic_wait.h:44,
                     from /usr/include/c++/11.1.0/bits/atomic_base.h:41,
                     from /usr/include/c++/11.1.0/bits/shared_ptr_atomic.h:33,
                     from /usr/include/c++/11.1.0/memory:78,
                     from /home/alecto/.local/sources/xtd/src/xtd.core/include/xtd/object.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /usr/include/unistd.h:801:12: note:                 ‘int link(const char*, const char*)’
      801 | extern int link (const char *__from, const char *__to)
          |            ^~~~
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:59:1: error: reference to ‘link’ is ambiguous
       59 | link& link::start(size_t value) {
          | ^~~~
    In file included from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:27:11: note: candidates are: ‘class xtd::forms::link’
       27 |     class link : public object {
          |           ^~~~
    In file included from /usr/include/c++/11.1.0/bits/atomic_wait.h:44,
                     from /usr/include/c++/11.1.0/bits/atomic_base.h:41,
                     from /usr/include/c++/11.1.0/bits/shared_ptr_atomic.h:33,
                     from /usr/include/c++/11.1.0/memory:78,
                     from /home/alecto/.local/sources/xtd/src/xtd.core/include/xtd/object.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/../../../include/xtd/forms/link.h:7,
                     from /home/alecto/.local/sources/xtd/src/xtd.forms/src/xtd/forms/link.cpp:1:
    /usr/include/unistd.h:801:12: note:                 ‘int link(const char*, const char*)’
      801 | extern int link (const char *__from, const char *__to)
          |            ^~~~
    
    bug Fixed 
    opened by codeinred 3
  • Fix typos and grammar for the entire project

    Fix typos and grammar for the entire project

    Good evening! I made an attempt to fix all project's grammar and typos in comments, function names, and variables..., its a lot of changes but i went through them one by one. I compiled xtd in my windows machine after the changes and it compiles just fine, although it will be cool if someone else revised the changes. Thank you and have a great day!

    opened by BaderEddineOuaich 3
  • [BUG] cannot delete recent projects in xtdc-gui

    [BUG] cannot delete recent projects in xtdc-gui

    Describe the bug When selecting a recent project in xtdc-gui and pressing the DEL key, it does not delete the item from the list.

    To Reproduce Steps to reproduce the behavior:

    1. Launch xtdc-gui
    2. Go to Open recent list and choose a project
    3. Press DEL keyboard key
    4. Nothing will happen

    Expected behaviour Expected the recent project item to be deleted from recent projects list.

    Screenshots pl I made a new project to test key_down and key_code's value when pressing the DEL key, it looks like it reports the wrong key_code value of F16: image

    Desktop (please complete the following information):

    • OS: Windows x64
    • Version: 10
    • xtd version: 0.2.0

    Additional context When debugging xtdc-gui in Visual Studio, the key_event_args.key_code() value was F16 0x0000007F instead of DEL 0x0000002E (as shown in the screenshots above), which prevent the function delete_from_open_recent_projects from being called.

    bug Fixed 
    opened by BaderEddineOuaich 2
  • [BUG] xtdc-gui crashes with projects with space in name

    [BUG] xtdc-gui crashes with projects with space in name

    Describe the bug When i create a new project using xtdc-gui with a project name that has a space for example "hello world", it crashes, but it works fine when using no spaces in names like "hello_world"

    To Reproduce Steps to reproduce the behavior:

    1. Launch xtdc-gui
    2. Create new project
    3. Give the project a name with a space in between for example "hello world"
    4. xtdc-gui will crash

    Expected behaviour Expected the project to be created successfully without any problems with names with space in between, or xtdc-gui to show you a warning message dialog to warn you not to use project names with that format.

    Screenshots image

    Desktop (please complete the following information):

    • OS: Windows x64
    • Version: 10
    • xtd version: 0.2.0

    Additional context

    Windows generated crash report

    Faulting application name: xtdc-gui.exe, version: 1.0.0.0, time stamp: 0x6179b157
    Faulting module name: xtdc-gui.exe, version: 1.0.0.0, time stamp: 0x6179b157
    Exception code: 0xc0000005
    Fault offset: 0x00000000001e2096
    Faulting process id: 0x17b4
    Faulting application start time: 0x01d7ce5adbcf92c0
    Faulting application path: C:\Program Files (x86)\xtd\bin\xtdc-gui.exe
    Faulting module path: C:\Program Files (x86)\xtd\bin\xtdc-gui.exe
    Report Id: a0e57ee8-826f-4d74-ae97-8f90b48ce40d
    Faulting package full name: 
    Faulting package-relative application ID: 
    
    Version=1
    EventType=APPCRASH
    EventTime=132801604303755265
    ReportType=2
    Consent=1
    UploadTime=132801604306802417
    ReportStatus=268435456
    ReportIdentifier=e48bfb09-767d-4812-9f2e-161b3b59514d
    IntegratorReportIdentifier=0d13a137-b987-4f8e-ad16-12502fee0c54
    Wow64Host=34404
    NsAppName=xtdc-gui.exe
    OriginalFilename=xtdc-gui.exe
    AppSessionGuid=00003570-0001-007c-503d-e5f05aced701
    TargetAppId=W:0006e99646db45e2426f4244b728e1bb2b1d00000000!00003733cdef35d05481656dc06be464496802beeb8e!xtdc-gui.exe
    TargetAppVer=2021//10//27:20:06:47!0!xtdc-gui.exe
    BootId=4294967295
    TargetAsId=1011
    UserImpactVector=808452912
    IsFatal=1
    EtwNonCollectReason=1
    Response.BucketId=2ac861693c778dfc96f4b90526697b89
    Response.BucketTable=4
    Response.LegacyBucketId=1654150394922236809
    Response.type=4
    Sig[0].Name=Application Name
    Sig[0].Value=xtdc-gui.exe
    Sig[1].Name=Application Version
    Sig[1].Value=1.0.0.0
    Sig[2].Name=Application Timestamp
    Sig[2].Value=6179b157
    Sig[3].Name=Fault Module Name
    Sig[3].Value=xtdc-gui.exe
    Sig[4].Name=Fault Module Version
    Sig[4].Value=1.0.0.0
    Sig[5].Name=Fault Module Timestamp
    Sig[5].Value=6179b157
    Sig[6].Name=Exception Code
    Sig[6].Value=c0000005
    Sig[7].Name=Exception Offset
    Sig[7].Value=00000000001e2096
    DynamicSig[1].Name=OS Version
    DynamicSig[1].Value=10.0.19043.2.0.0.256.48
    DynamicSig[2].Name=Locale ID
    DynamicSig[2].Value=1033
    DynamicSig[22].Name=Additional Information 1
    DynamicSig[22].Value=cb89
    DynamicSig[23].Name=Additional Information 2
    DynamicSig[23].Value=cb89c4bdd76f148f9800a33f8af54f7f
    DynamicSig[24].Name=Additional Information 3
    DynamicSig[24].Value=ca59
    DynamicSig[25].Name=Additional Information 4
    DynamicSig[25].Value=ca59aa6569a13932fbcac25751daf62a
    UI[2]=C:\Program Files (x86)\xtd\bin\xtdc-gui.exe
    LoadedModule[0]=C:\Program Files (x86)\xtd\bin\xtdc-gui.exe
    LoadedModule[1]=C:\Windows\SYSTEM32\ntdll.dll
    LoadedModule[2]=C:\Windows\System32\KERNEL32.DLL
    LoadedModule[3]=C:\Windows\System32\KERNELBASE.dll
    LoadedModule[4]=C:\Windows\System32\SHLWAPI.dll
    LoadedModule[5]=C:\Windows\System32\msvcrt.dll
    LoadedModule[6]=C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.1110_none_60b5254171f9507e\COMCTL32.dll
    LoadedModule[7]=C:\Windows\System32\RPCRT4.dll
    LoadedModule[8]=C:\Windows\SYSTEM32\UxTheme.dll
    LoadedModule[9]=C:\Windows\SYSTEM32\OLEACC.dll
    LoadedModule[10]=C:\Windows\System32\GDI32.dll
    LoadedModule[11]=C:\Windows\System32\USER32.dll
    LoadedModule[12]=C:\Windows\System32\ucrtbase.dll
    LoadedModule[13]=C:\Windows\System32\win32u.dll
    LoadedModule[14]=C:\Windows\System32\combase.dll
    LoadedModule[15]=C:\Windows\System32\gdi32full.dll
    LoadedModule[16]=C:\Windows\System32\SHELL32.dll
    LoadedModule[17]=C:\Windows\System32\msvcp_win.dll
    LoadedModule[18]=C:\Windows\SYSTEM32\VERSION.dll
    LoadedModule[19]=C:\Windows\System32\ole32.dll
    LoadedModule[20]=C:\Windows\System32\COMDLG32.dll
    LoadedModule[21]=C:\Windows\SYSTEM32\WINSPOOL.DRV
    LoadedModule[22]=C:\Windows\System32\shcore.dll
    LoadedModule[23]=C:\Windows\System32\ADVAPI32.dll
    LoadedModule[24]=C:\Windows\System32\sechost.dll
    LoadedModule[25]=C:\Windows\SYSTEM32\MSIMG32.dll
    LoadedModule[26]=C:\Windows\SYSTEM32\VCRUNTIME140D.dll
    LoadedModule[27]=C:\Windows\SYSTEM32\MSVCP140D.dll
    LoadedModule[28]=C:\Windows\SYSTEM32\VCRUNTIME140_1D.dll
    LoadedModule[29]=C:\Windows\SYSTEM32\ucrtbased.dll
    LoadedModule[30]=C:\Windows\System32\IMM32.DLL
    LoadedModule[31]=C:\Windows\SYSTEM32\kernel.appcore.dll
    LoadedModule[32]=C:\Windows\System32\bcryptPrimitives.dll
    LoadedModule[33]=C:\Windows\SYSTEM32\CRYPTBASE.DLL
    LoadedModule[34]=C:\Windows\System32\MSCTF.dll
    LoadedModule[35]=C:\Windows\System32\OLEAUT32.dll
    LoadedModule[36]=C:\Windows\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.1288_none_91a663c8cc864906\gdiplus.dll
    LoadedModule[37]=C:\Windows\SYSTEM32\TextShaping.dll
    LoadedModule[38]=C:\Windows\SYSTEM32\textinputframework.dll
    LoadedModule[39]=C:\Windows\System32\CoreMessaging.dll
    LoadedModule[40]=C:\Windows\System32\CoreUIComponents.dll
    LoadedModule[41]=C:\Windows\System32\WS2_32.dll
    LoadedModule[42]=C:\Windows\SYSTEM32\ntmarta.dll
    LoadedModule[43]=C:\Windows\SYSTEM32\wintypes.dll
    LoadedModule[44]=C:\Windows\SYSTEM32\DUser.dll
    LoadedModule[45]=C:\Windows\SYSTEM32\atlthunk.dll
    State[0].Key=Transport.DoneStage1
    State[0].Value=1
    OsInfo[0].Key=vermaj
    OsInfo[0].Value=10
    OsInfo[1].Key=vermin
    OsInfo[1].Value=0
    OsInfo[2].Key=verbld
    OsInfo[2].Value=19043
    OsInfo[3].Key=ubr
    OsInfo[3].Value=1288
    OsInfo[4].Key=versp
    OsInfo[4].Value=0
    OsInfo[5].Key=arch
    OsInfo[5].Value=9
    OsInfo[6].Key=lcid
    OsInfo[6].Value=1033
    OsInfo[7].Key=geoid
    OsInfo[7].Value=244
    OsInfo[8].Key=sku
    OsInfo[8].Value=48
    OsInfo[9].Key=domain
    OsInfo[9].Value=0
    OsInfo[10].Key=prodsuite
    OsInfo[10].Value=256
    OsInfo[11].Key=ntprodtype
    OsInfo[11].Value=1
    OsInfo[12].Key=platid
    OsInfo[12].Value=10
    OsInfo[13].Key=sr
    OsInfo[13].Value=0
    OsInfo[14].Key=tmsi
    OsInfo[14].Value=221333281
    OsInfo[15].Key=osinsty
    OsInfo[15].Value=2
    OsInfo[16].Key=iever
    OsInfo[16].Value=11.789.19041.0-11.0.1000
    OsInfo[17].Key=portos
    OsInfo[17].Value=0
    OsInfo[18].Key=ram
    OsInfo[18].Value=8082
    OsInfo[19].Key=svolsz
    OsInfo[19].Value=118
    OsInfo[20].Key=wimbt
    OsInfo[20].Value=0
    OsInfo[21].Key=blddt
    OsInfo[21].Value=191206
    OsInfo[22].Key=bldtm
    OsInfo[22].Value=1406
    OsInfo[23].Key=bldbrch
    OsInfo[23].Value=vb_release
    OsInfo[24].Key=bldchk
    OsInfo[24].Value=0
    OsInfo[25].Key=wpvermaj
    OsInfo[25].Value=0
    OsInfo[26].Key=wpvermin
    OsInfo[26].Value=0
    OsInfo[27].Key=wpbuildmaj
    OsInfo[27].Value=0
    OsInfo[28].Key=wpbuildmin
    OsInfo[28].Value=0
    OsInfo[29].Key=osver
    OsInfo[29].Value=10.0.19041.1288.amd64fre.vb_release.191206-1406
    OsInfo[30].Key=buildflightid
    OsInfo[31].Key=edition
    OsInfo[31].Value=Professional
    OsInfo[32].Key=ring
    OsInfo[32].Value=Retail
    OsInfo[33].Key=expid
    OsInfo[34].Key=fconid
    OsInfo[35].Key=containerid
    OsInfo[36].Key=containertype
    OsInfo[37].Key=edu
    OsInfo[37].Value=0
    FriendlyEventName=Stopped working
    ConsentKey=APPCRASH
    AppName=xtdc-gui.exe
    AppPath=C:\Program Files (x86)\xtd\bin\xtdc-gui.exe
    NsPartner=windows
    NsGroup=windows8
    ApplicationIdentity=C2F338FB50363581B8BD2537AB432134
    MetadataHash=389531664
    

    bug Fixed 
    opened by BaderEddineOuaich 2
  • [ENHANCEMENT] xtd.forms - xtd::forms::message_notifier

    [ENHANCEMENT] xtd.forms - xtd::forms::message_notifier

    xtd.forms - xtd::forms::message_notifier

    Library

    xtd.forms

    Enhancement

    xtd::forms::message_notifier

    Description

    message_notifier is a small, nonblocking notification pop-up. A message_notifier is shown to users with readable message content at the bottom or top of the screen or at a specific target and disappears automatically after a few seconds (time-out). The control has various built-in options for customizing visual elements, durations, and dismissing toasts.

    • [ ] xtd::forms::message_notifier component

    First draft

    Unfortunately, the different OS don't manage the notifications in the same way. So, we should have as for the dialog box xtd::forms::about_dialog manage the two styles of dialog:

    • xtd::forms::dialog_style::standard (notification managed by xtd)
    • xtd::forms::dialog_style::system (notification system).

    Notification system :

    Use wxNotificationMessage whenever possible. But typically, on macOS it doesn't work (Maybe for a user right ?). And if the wxWidgets component doesn't match maybe call the native version for each OS (as I did for xtd::forms::message_box which was not implemented correctly in macOS and Windows).

    Standard notification :

    Implement our own xtd::forms::form (no border, no title and no controls). Add an image, a message and the possibility of 1, 2 or more buttons. Add an xtd::forms::timer for automatic closing.

    Common

    • Add asynchronous button events (like xtd::forms::show_sheet) which allows to know which button has been clicked.
    • Add a close event.
    • add properties for the message_notifier

    API

    Globally the API will be close to xtd::forms::message_dialog and xtd::forms::message_box with the possibility to have custom buttons and a timer to close the notification automatically.

    enhancement In progress 
    opened by gammasoft71 2
  • [ENHANCEMENT] xtd.forms - web_browser_renderer

    [ENHANCEMENT] xtd.forms - web_browser_renderer

    xtd.forms - web_browser_renderer

    Library

    xtd.forms

    Enhancement

    web_browser_renderer

    Description

    Provides xtd::forms:: web_browser renderer methods.

    • [ ] xtd::forms::web_browser_renderer
    enhancement 
    opened by gammasoft71 0
  • [ENHANCEMENT] xtd.forms - web_browser

    [ENHANCEMENT] xtd.forms - web_browser

    xtd.forms - web_browser

    Library

    xtd.forms

    Enhancement

    web_browser

    Description

    Enables the user to navigate Web pages inside your form.

    • [ ] xtd::forms:: web_browser control
    enhancement 
    opened by gammasoft71 0
  • [ENHANCEMENT] xtd.forms - status_strip_renderer

    [ENHANCEMENT] xtd.forms - status_strip_renderer

    xtd.forms - status_strip_renderer

    Library

    xtd.forms

    Enhancement

    status_strip_renderer

    Description

    Provides xtd::forms:: status_strip renderer methods.

    • [ ] xtd::forms::status_strip_renderer
    enhancement 
    opened by gammasoft71 0
  • [ENHANCEMENT] xtd.forms - status_strip

    [ENHANCEMENT] xtd.forms - status_strip

    xtd.forms - status_strip

    Library

    xtd.forms

    Enhancement

    status_strip

    Description

    Represents a Windows status bar control.

    • [ ] xtd::forms::status_strip control
    enhancement 
    opened by gammasoft71 0
  • [ENHANCEMENT] xtd.forms - menu_strip_renderer

    [ENHANCEMENT] xtd.forms - menu_strip_renderer

    xtd.forms - menu_strip_renderer

    Library

    xtd.forms

    Enhancement

    menu_strip_renderer

    Description

    Provides xtd::forms:: menu_strip renderer methods.

    • [ ] xtd::forms::menu_strip_renderer renderer
    enhancement 
    opened by gammasoft71 0
Releases(v0.1.0-beta)
Owner
Gammasoft
Aims to make c++ fun again.
Gammasoft
The new Windows Terminal and the original Windows console host, all in the same place!

The new Windows Terminal and the original Windows console host, all in the same place!

Microsoft 83.8k Jun 27, 2022
FastReport.Cloud console tool for Linux and perhaps some other OSes

FastReport Cloud console shell This is a simple console shell to FastReport Cloud service. Prerequests GNU packages for build shell: curl-development

Aleksey Mandrykin 2 Feb 10, 2022
This repository contains the source code of the project(StereoCraft) that we have developed for the Mixed Reality Hackathon organized by Microsoft using StereoKit SDK

StereoCraft - A block-building like experience built using StereoKit This repository contains the source code of the project that we have developed fo

G Bhanuteja 2 Dec 23, 2021
A CLI for extracting libraries from Apple's dyld shared cache file

dyld-shared-cache-extractor As of macOS Big Sur, instead of shipping the system libraries with macOS, Apple ships a generated cache of all built in dy

Keith Smiley 171 Jun 23, 2022
Microsoft Visual TrueType(VTT) command line compile tool.

Project Microsoft Visual TrueType(VTT) is a professional-level tool for graphically instructing TrueType and OpenType fonts. For details on the tool v

Microsoft 34 May 19, 2022
EAMain provides a multi-platform entry point used for platforms that don't support console output, return codes and command-line arguments.

EAMain provides a multi-platform entry point used for platforms that don't support console output, return codes and command-line arguments.

Electronic Arts 30 May 17, 2022
Run commands with hidden console.

Minimal run This is a tiny C program for running Windows commands with a hidden console. It's suitable for use in Windows shortcuts, i.e. lnk files. I

Tavis Ormandy 21 May 30, 2022
cpp-progressbar is a small console program I wrote in c++. 3 themes are available

cpp-progressbar cpp-progressbar is a small console program I wrote in c++. 3 themes are available (this program only works on linux) Instalation Downl

Zielino 3 Jun 17, 2022
A C++ console tool to tracker baby actions.

BabyTracker This is a C++ console tool to tracker baby actions. Currently it supports adding Sleep Sessions Breast Feed Sessions Bottle Feed Sessions

YuchenPersonal 1 Oct 17, 2021
crypted admin shell: SSH-like strong crypto remote admin shell for Linux, BSD, Android, Solaris and OSX

crypted admin shell: SSH-like strong crypto remote admin shell for Linux, BSD, Android, Solaris and OSX

Sebastian 128 Jun 15, 2022
Modern C++ Undo / Redo framework

History Hello Developers! I present to you History, a modern C++ (C++17) Undo / Redo framework. My goal was to create a non-intrusive, compact and int

null 16 Jun 3, 2022
Rizin - UNIX-like reverse engineering framework and command-line toolset.

Rizin - UNIX-like reverse engineering framework and command-line toolset.

Rizin Organization 1.4k Jun 26, 2022
util-linux is a random collection of Linux utilities

util-linux is a random collection of Linux utilities

Karel Zak 1.8k Jun 27, 2022
Fire for C++: Create fully functional CLIs using function signatures

Fire for C++ Fire for C++, inspired by python-fire, is a single header library that creates a command line interface from a function signature. Here's

Kristjan Kongas 434 Jun 10, 2022
A simple command line application in order to create new Code workspaces.

mkcws Summary A simple command line application in order to create new Code workspaces. License This project's license is GPL 2. The whole license tex

Kevin Matthes 0 Apr 1, 2022
Simple command line tools to create/extract X4 .cat+.dat files

x4cat Simple command line tools to to create/extract X4 .cat+.dat files x4encat Usage: x4encat <archive name> Looks for a directory named <archive nam

Alexander Sago 1 Oct 31, 2021
A command-line tool to generate Linux manual pages from C source code.

mangen A command-line tool to generate Linux manual pages from C source code. Description mangen is, as said above, a program to generate Linux manual

null 2 Nov 15, 2021
Small header only C++ library for writing multiplatform terminal applications

Terminal Terminal is small header only library for writing terminal applications. It works on Linux, macOS and Windows (in the native cmd.exe console)

Jupyter Xeus 208 Jun 30, 2022
Library for creating terminal applications with text-based widgets

Library for creating terminal applications with text-based widgets FINAL CUT is a C++ class library and widget toolkit with full mouse support for cre

Markus Gans 642 Jun 23, 2022