All Projects → gammasoft71 → xtd

gammasoft71 / xtd

Licence: MIT license
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.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
CSS
56736 projects
c
50402 projects - #5 most used programming language
Objective-C++
1391 projects
shell
77523 projects

Projects that are alternatives of or similar to xtd

Wxwidgets
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.
Stars: ✭ 3,994 (+1144.24%)
Mutual labels:  portable, desktop, gui-framework, cross-platform-desktop
Cefpython
Python bindings for the Chromium Embedded Framework (CEF)
Stars: ✭ 2,498 (+678.19%)
Mutual labels:  gui-toolkit, cross-platform-gui, gui-framework
Lcui
A small C library for building user interfaces with C, XML and CSS.
Stars: ✭ 3,573 (+1013.08%)
Mutual labels:  gui-toolkit, cross-platform-gui, gui-framework
Phoenix
wxPython's Project Phoenix. A new implementation of wxPython, better, stronger, faster than he was before.
Stars: ✭ 1,698 (+428.97%)
Mutual labels:  gui-toolkit, gui-framework
Azul
Azul is a library for creating graphical user interfaces in Rust and C. It mixes paradigms from functional, reactive and data-oriented programming with an API suitable for developing cross-platform desktop applications. The two core principles of Azul is to not render objects that aren't visible and to use composition of DOM trees over inheritance.
Stars: ✭ 4,937 (+1438.01%)
Mutual labels:  desktop, gui-framework
webgui
Web Technologies based Crossplatform GUI Framework with Dark theme
Stars: ✭ 81 (-74.77%)
Mutual labels:  gui-toolkit, gui-framework
Seldom
WebUI automation testing framework based on Selenium
Stars: ✭ 422 (+31.46%)
Mutual labels:  test-framework, unittest
hello-libui
Hello World application using libui from maven repository
Stars: ✭ 17 (-94.7%)
Mutual labels:  portable, desktop
Desktopdeployr
A framework for deploying self-contained R-based applications to the desktop
Stars: ✭ 282 (-12.15%)
Mutual labels:  portable, desktop
Alephnote
Lightweight note taking client for Simplenote or Standard Notes (or simply local storage)
Stars: ✭ 149 (-53.58%)
Mutual labels:  portable, desktop
Simple
The Simple Intelligent and Modular Programming Language and Environment
Stars: ✭ 120 (-62.62%)
Mutual labels:  portable, desktop
Messenger For Desktop
This is not an official Facebook product, and is not affiliated with, or sponsored or endorsed by, Facebook.
Stars: ✭ 2,180 (+579.13%)
Mutual labels:  portable, desktop
haxe
Qt binding for Haxe | Showcase example for https://github.com/therecipe/qt
Stars: ✭ 21 (-93.46%)
Mutual labels:  desktop, cross-platform-gui
Nimoy
A testing and specification framework for Python 3
Stars: ✭ 76 (-76.32%)
Mutual labels:  test-framework, unittest
Bash unit
bash unit testing enterprise edition framework for professionals
Stars: ✭ 419 (+30.53%)
Mutual labels:  test-framework, unittest
Libagar
Cross-Platform GUI Toolkit (stable)
Stars: ✭ 212 (-33.96%)
Mutual labels:  toolkit, portable
specdris
A test framework for Idris
Stars: ✭ 55 (-82.87%)
Mutual labels:  test-framework, unittest
Testfx
MSTest V2 framework and adapter
Stars: ✭ 391 (+21.81%)
Mutual labels:  test-framework, unittest
Kotlin Libui
Kotlin/Native interop to libui: a portable GUI library
Stars: ✭ 512 (+59.5%)
Mutual labels:  portable, desktop
ezored
C++ Multiplatform Toolkit Template
Stars: ✭ 111 (-65.42%)
Mutual labels:  toolkit, desktop

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 wiki web discord Download xtd

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;
  • xtd is designed to manage GUI controls and dialogs in pure native mode or with CSS styles.
  • written in efficient, modern C++17 / C++20 with RAII programming idiom;
  • and highly portable and available on many different platforms;

xtd is composed of several libraries

architecture_logo

These libraries are grouped by theme :

  • system : The xtd.core library is modern C++17/20 libraries of classes, interfaces, and value types that provide access to system functionality. It is the foundation on which c++ applications, components, and controls are built.
  • drawing : The xtd.drawing library contains types that support basic GDI+ graphics functionality. Child namespaces support advanced two-dimensional and vector graphics functionality, advanced imaging functionality, and print-related and typographical services. A child namespace also contains types that extend design-time user-interface logic and drawing.
  • forms : The xtd.forms library contains classes for creating Windows-based applications that take full advantage of the rich user interface features available in the Microsoft Windows, Apple macOS and linux base operating system.
  • tunit : The xtd.tunit library is a unit-testing framework for modern C++17/20. Initially ported from Microsoft.VisualStudio.TestTools.Cpp.

Links

For more information about xtd see :

Getting Started

  • Installation provides download, install and uninstall documentation.
  • Guides provides xtd guides and tutorials.
  • Examples provides some examples.

Development status

Current release status

GitHub milestone GitHub milestone

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.

Continuous Integration build status

At each commit, a build and unit tests are performed for the following configurations :

Operating system Debug Release
Windows (x64) Windows (x64) Debug Windows (x64) Release
Windows (x86) Windows (x86) Debug Windows (x86) Release
macOS macOS Debug macOS Release
Ubuntu Ubuntu Debug Ubuntu Release
iOS (**) Coming soon... Coming soon...
Android (**) Coming soon... Coming soon...

(**) xtd.core and xtd.tunit only.

Issues status

As xtd is managed by a Kanban project, the number of open issues can be quite large. The table below gives a clearer view on the number of open bugs/questions and enhancements.

Issues Open Closed
Bugs / Questions from users GitHub issue custom search in repo GitHub issue custom search in repo
xtd 0.2.0 - Enhancements / Developments GitHub issue custom search in repo GitHub issue custom search in repo
xtd 0.3.0 - Enhancements / Developments GitHub issue custom search in repo GitHub issue custom search in repo
xtd 0.4.0 - Enhancements / Developments GitHub issue custom search in repo GitHub issue custom search in repo
xtd 1.0.0 - Enhancements / Developments GitHub issue custom search in repo GitHub issue custom search in repo

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

Screenshot

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

Screenshot

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.

Beginners

The following project aims to simplify and guide the way beginners make their first contribution. If you are looking to make your first contribution, check out the project below.

First Contributions

Now you are ready to make your first contribution to xtd.

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)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].