U++ is a C++ cross-platform rapid application development framework focused on programmer's productivity. It includes a set of libraries (GUI, SQL, Network etc.), and integrated development environment (TheIDE).

Ultimate++

alt text

Ultimate++ is a C++ cross-platform rapid application development framework focused on programmers productivity. It includes a set of libraries (GUI, SQL, etc.), and an integrated development environment.

Rapid development is achieved by the smart and aggressive use of C++ rather than through fancy code generators. In this respect, U++ competes with popular scripting languages while preserving C/C++ runtime characteristics.

The U++ integrated development environment, TheIDE, introduces modular concepts to C++ programming. It features BLITZ-build technology to speedup C++ rebuilds up to 4 times, Visual designers for U++ libraries, a Topic++ system for documenting code and creating rich text resources for applications (like help and code documentation) and Assist++ - a powerful C++ code analyzer that provides features like code completion, navigation and transformation.

TheIDE can work with GCC, Clang, MinGW and Visual C++ and contains a full featured debugger. TheIDE can also be used to develop non-U++ applications.

U++ supports following platforms on the production level: Windows, macOS, GNU/Linux & FreeBSD.

What you can get with Ultimate++?

  • A very effective C++ library for cross-platform development in source form.
  • A good integrated development environment, designed for developing large C++ applications.

You can use both, or you can use whichever you need.

License

U++ uses BSD license.

Download

Main downloads:

Other downloads:

U++ Resources

More information about the framework, can be found on the official site. Don't forget to check our rich documentation.

Examples

GUI

Below is the code of trivial GUI application that displays "Hello World" string inside window:

#include <CtrlLib/CtrlLib.h>

class MyApp: public Upp::TopWindow {
public:
    MyApp()
    {
        Title("My application").Zoomable().Sizeable().SetRect(0, 0, 320, 200);
    }

    virtual void Paint(Upp::Draw& w) override
    {
        w.DrawRect(GetSize(), Upp::SWhite);
        w.DrawText(10, 10, "Hello, world!", Upp::Arial(30), Upp::Magenta);
    }
};

GUI_APP_MAIN
{
    MyApp().Run();
}

TheIDE

Standard part of U++ framework is integrated development environment, TheIDE.

TheIDE - U++ Integrated Developemnt Enviroment

Additional examples

See here: examples. Moreover, exactly the same examples can be found in the examples and references directories located in this repository.

If you would like to see more screenshots, click here.

Repository

Repository layout

The U++ repository is divided into several directories. The most important ones are:

  • examples - exemplary codes of complex applications
  • references - reference examples demonstrating individual features of U++
  • uppsrc - main sources of the framework
Owner
Ultimate++
C++ cross-platform rapid application development framework
Ultimate++
Comments
  • Problem around SHGetFileInfoW() with FileSel in W10 when getting a shortcut icon

    Problem around SHGetFileInfoW() with FileSel in W10 when getting a shortcut icon

    In my computer, when opening with FileSel a folder with a shortcut, the program abruptly stops. When debugging, it seems that in FileSel.cpp, function FileIconMaker::Make(), the program crashes when calling SHGetFileInfoW() with a shortcut. To reproduce it, just run this:

    #include <CtrlLib/CtrlLib.h>
    
    using namespace Upp;
    
    GUI_APP_MAIN
    {
    	bool large = false;
    	bool exe = false;
    	SHFILEINFOW info;
    	SHGetFileInfoW(ToSystemCharsetW("x.lnk"), FILE_ATTRIBUTE_NORMAL,
    		               &info, sizeof(info),
    		               SHGFI_ICON|
    		               (large ? SHGFI_LARGEICON : SHGFI_SMALLICON)|
    		               (exe ? 0 : SHGFI_USEFILEATTRIBUTES));
    }
    

    Changing exe to true, it seems to work.

  • Eliminating warnings and making life easier for future generations

    Eliminating warnings and making life easier for future generations

    I noticed that the IDE hide the compilation commands and it's warnings from the user (I'm used to Codeblocks and Netbeans) so I exported a Makefile for the IDE and created a Netbeans project to build it.

    To the exported Makefile I added the following compiler options -Wall -pipe and noticed lots of warnings related to parentheses around boolean expressions and found this interesting one in uppsrc/ide/RepoSync.cpp:

    if(pass == action < 0 && action != DELETEC) {
    

    Also to suppress the warnings from GTK-3 headers I added this to uppsrc/CtrlCore/Gtk.h:

    #ifdef __GNUC__
    #pragma GCC diagnostic push 
    #pragma GCC diagnostic ignored "-Wparentheses"
    #endif
    #include <gtk/gtk.h>
    #include <gdk/gdkkeysyms.h>
    #ifdef __GNUC__
    #pragma GCC diagnostic pop
    #endif
    

    I'm trying to fix as much warnings I can and I'll add then here later.

  • Ultimate++ on Illumos/OpenIndiana

    Ultimate++ on Illumos/OpenIndiana

    I could compile Ultimate++ just fine with the system's gcc 7.5.0 but it failed at linking. Please note that the ld binary we should use is call gld, the ld in /usr/bin/ld is the old linker from Sun so it doesn't support the options Ultimate++ used. Please fix the makefile. C++ IDE is very lacked on this system. So having Ultimate++ and TheIDE worked on it is awesome.

  • no template named 'WithDlgLayout' in namespace 'Upp' in GUI tutorial Gui16

    no template named 'WithDlgLayout' in namespace 'Upp' in GUI tutorial Gui16

    In GUI Tutorial, section “16.2 Upp namespace agnostic implementation”, the given code compiles with following error:

    error: no template named 'WithDlgLayout' in namespace 'Upp'; did you mean simply 'WithDlgLayout'?

    I need to remove the "Upp::" before "WithDlgLayout" to:

    struct MyAppWindow : public WithDlgLayout<Upp::TopWindow> {
        MyAppWindow() {
            CtrlLayout(*this, "MyDialog");
        }
    };
    

    And, it seems that, by default, Layout Designer does not add "Upp::" before "InsetFrame()" in SetFrame(). I need to manually add "Upp::" before "InsetFrame()" in dlg.lay from:

    LAYOUT(DlgLayout, 208, 64)
    	ITEM(Upp::Label, dv___0, SetLabel(t_("Label")).LeftPosZ(8, 40).TopPosZ(8, 19))
    	ITEM(Upp::EditString, text, SetFrame(InsetFrame()).LeftPosZ(48, 92).TopPosZ(8, 19))
    	ITEM(Upp::Option, option, SetLabel(t_("Option")).LeftPosZ(8, 112).TopPosZ(36, 16))
    END_LAYOUT
    

    to

    LAYOUT(DlgLayout, 208, 64)
    	ITEM(Upp::Label, dv___0, SetLabel(t_("Label")).LeftPosZ(8, 40).TopPosZ(8, 19))
    	ITEM(Upp::EditString, text, SetFrame(Upp::InsetFrame()).LeftPosZ(48, 92).TopPosZ(8, 19))
    	ITEM(Upp::Option, option, SetLabel(t_("Option")).LeftPosZ(8, 112).TopPosZ(36, 16))
    END_LAYOUT
    
  • Can I use U++ for commercial software?

    Can I use U++ for commercial software?

    Hi,

    I'm working on a software with QT, however, I may make it proprietary and sell it. If I do that, I cannot use QT without buying a license, which now I cannot afford. So, my question is can I use U++ for commercial and proprietary software?

    Thanks.

  • Problem compiling TheIDE with Visual Studio 2019

    Problem compiling TheIDE with Visual Studio 2019

    C:\Desarrollo\upp\uppsrc\CtrlCore\Win32Wnd.cpp(492): error C2039: 'ImmAssociateContextEx': is not a member of '`global namespace''
    C:\Desarrollo\upp\uppsrc\CtrlCore\Win32Wnd.cpp(492): error C3861: 'ImmAssociateContextEx': identifier not found
    C:\Desarrollo\upp\uppsrc\CtrlCore\Win32Wnd.cpp(761): error C2039: 'ImmAssociateContextEx': is not a member of '`global namespace''
    C:\Desarrollo\upp\uppsrc\CtrlCore\Win32Wnd.cpp(761): error C2065: 'IACE_DEFAULT': undeclared identifier
    C:\Desarrollo\upp\uppsrc\CtrlCore\Win32Wnd.cpp(761): error C3861: 'ImmAssociateContextEx': identifier not found
    
  • Windows 7: ScriptFreeCache not found in GDI32.dll

    Windows 7: ScriptFreeCache not found in GDI32.dll

    theide.exe - Entry Point Not Found

    The procedure entry point ScriptFreeCache could not be located in the dynamic link linbrary GDI32.dll. This is likely due to the order of the linking of libraries: https://docs.microsoft.com/en-us/windows/win32/api/usp10/nf-usp10-scriptfreecache?redirectedfrom=MSDN On the page is this note: "Important Starting with Windows 8: To maintain the ability to run on Windows 7, a module that uses Uniscribe must specify Usp10.lib before gdi32.lib in its library list."

  • Failed to setup U++ on macOS 11.5.2

    Failed to setup U++ on macOS 11.5.2

    I spent whole day trying to figure out how to run at least one example, tried every possible search source, still failed. I feel very sad now.

    I'm using macOS 11.5.2. I can confirm that all required libraries are installed.

    Here is my journey:

    1. Download upp-macos-16056.tar.xz, unzip it, launch theide.

    2. Granted every privileges it requires.

    3. A popup shows asking me to download the source, click ok.

    4. I saw the system console showed up with git clone ..., after 30 minutes, still there, I checked target folder, seems nothing is downloaded.

    5. I closed system console. Open terminal and type git clone ... manually, it works well, so network and git works fine, it's not the issue.

    6. I tried again, still stuck at the git clone step.

    7. Cancel git clone, start theide directly. I can only see MyApps in Assemply list. 截屏2021-08-31 下午3 59 25

    8. I tried to use umk to compile a example by "./umk ./examples AddressBook CLANG -v ./adbook". Error message is "Missing package(s): CtrlLib Report".

    I thought it might be the nightly build's issue, so I went to sourceforge and downloaded the stable build.

    Lanuch theide, it stuck at svn ..., wait 30 minutes, nothing happened. Cancel, and lanuch theide, samething happened, I can only see MyApps in Assemply list. Ran "./umk ./examples AddressBook CLANG -v ./adboo", same error.

    I'm so exhausted now... How can I make it work?

  • README changes.

    README changes.

    README file does not list Clang in supported compilers list.

    This PR:

    • Adds "Clang" entry to supported compilers list.
    • Further smplifies the example GUI code.
  • error: no member named 'SetFont' in 'MyCtrl' in GUI Tutorial Gui21

    error: no member named 'SetFont' in 'MyCtrl' in GUI Tutorial Gui21

    In GUI Tutorial Gui21, when I right click to add "User class", the default widget properties are as follows:

    image

    If I set "SetFont()" and "SetInk()" in Gui21.lay like this:

    LAYOUT(Gui21Layout, 200, 100)
    	ITEM(MyCtrl, myctrl, SetFont(StdFont(11)).SetInk(Black).LeftPosZ(44, 112).VSizePosZ(32, 32))
    END_LAYOUT
    

    It compiles with error:

    error: no member named 'SetFont' in 'MyCtrl'
    

    I have to remove "SetFont()" and "SetInk()" in Gui21.lay to get it compiled. So what are they for of these widget properties?

  • forum problem

    forum problem

    Hello, I created an account on the forum the other day and wrote my first topic in the newbie section. My new topic didn't post, i thought maybe it needed manual approval, but after days my topic was never posted. The odd thing is, after i tried to login i found out that my account was deleted since i couldn't login nor my email was recognized when i tried to rest my password. Is the forum dead or did i do something wrong to trigger some antispam mechanism? Thank you.

  • Use dark window titlebar on Windows 10+ with dark themes

    Use dark window titlebar on Windows 10+ with dark themes

    This PR makes titlebar on Windows 10+ to match application dark mode.

    Here's "Button" example compiled before and after applying the patch:

    Compiled apps will also work on older systems that doesn't support attribute or even DWM itself.

  • ScrollBar rewritten.

    ScrollBar rewritten.

    CtrlLib/ScrollBar is modified to get rid of the prev, prev2, next, next3 Buttons. The corresponding portion of the ScrollBar are painted used the similar logic that original code used to paint the 3 parts of Slider&Thumb. The code that's changed mainly involve painting and mouse event. No interface is changed, so the revision is transparent to libary users.

    As a result of the revision. Now sizeof(ScrollBar)==sizeof(Button). Initial tests indicate that executable size also benefit from the revision.

  • Compile for macos/osx 10.14 Mojave

    Compile for macos/osx 10.14 Mojave

    Hi, i tried to compile the source for osx 10.14 - during compilation is an error message about openssl .
    I installed with brew [email protected] - do i need a different version?

  • Is there a chance Upp support wxwidgets like sizers?

    Is there a chance Upp support wxwidgets like sizers?

    Hello i was thinking is there a chance upp support wxwidgets like sizers? vertical and horizontal stack panels ... it's easier to work with and straightforward to figure out how the GUI will look like. i know there is something implemented similar, (SizePos, HSizePos, VSizePos). but i think wxwidgets sizers works easier. like you put a vertical container sizer, and just append the components to it without the need to figure out how it will look like.

  • Export Makefile doesn't check if folder exists and doesn't report error

    Export Makefile doesn't check if folder exists and doesn't report error

    While test Ultimatepp I tried to generate/export a Makefile for uppsrc/umk and found that it doesn't check if the output folder exists and or create it, also it fails because of that but doesn't report it (actually it says OK. (0:02.14)).

    A partial fix that shows an error message is shown bellow, it would be better to check if the folder doesn't exists and create it.

    @@ -397,11 +397,11 @@ void MakeBuild::SaveMakeFile(const String& fn, bool exporting)
     		<< "clean:\n"
     		<< "\tif [ \"$(UPPOUT)\" != \"\" -a \"$(UPPOUT)\" != \"/\" -a -d \"$(UPPOUT)\" ] ; then rm -fr \"$(UPPOUT)\" ; fi\n"
     	;
     
     	bool sv = ::SaveFile(fn, makefile);
    -	if(!exporting) {
    +	if(exporting) {
     		if(sv)
     			PutConsole(Format("%s(1): makefile generation complete", fn));
     		else
     			PutConsole(Format("%s: error writing makefile", fn));
     	}
    
Unity OnGUI(IMGUI) extensions for Rapid prototyping/development
Unity OnGUI(IMGUI) extensions for Rapid prototyping/development

RapidGUI Unity IMGUI extensions for Rapid prototyping/development. Installation Install via OpenUPM The package is available on the openupm registry.

Jun 16, 2022
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.

About wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls. wxWidgets allows y

Jun 15, 2022
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.

libui: a portable GUI library for C This README is being written. Status It has come to my attention that I have not been particularly clear about how

Jun 19, 2022
A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs.

webview for golang and c/c++ A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. The goal of the project is to

Jun 7, 2022
Cross platform C++ libraries

CopperSpice Introduction CopperSpice is a set of individual libraries which can be used to develop cross platform software applications in C++. It is

Jun 20, 2022
A single-header ANSI C immediate mode cross-platform GUI library
A single-header ANSI C immediate mode cross-platform GUI library

Nuklear This is a minimal-state, immediate-mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed a

Jun 20, 2022
A library for creating native cross-platform GUI apps

Yue A library for creating native cross-platform GUI apps. Getting started Documentations FAQ Development Examples Sample apps (with screenshots) Muba

Jun 17, 2022
A cross-platform GUI for jzIntv
A cross-platform GUI for jzIntv

jzIntvImGui Welcome to jzIntvImGui! It's an all-in-one powerful Dear ImGui interface which allows you to manage your collection of Intellivision games

May 8, 2022
Cross-platform GUI library

Harbour Nuklear backend This backend provides support for Nuklear. It works on on all supported platforms with an OpenGL backend, including iOS and An

Jan 19, 2022
FLTK - Fast Light Tool Kit - a cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11)

FLTK - Fast Light Tool Kit - a cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11)

Jun 22, 2022
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI

ImGui Goodies This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI. Currently, th

Jun 22, 2022
Neutralinojs is a lightweight and portable desktop application development framework
Neutralinojs is a lightweight and portable desktop application development framework

Neutralinojs is a lightweight and portable desktop application development framework. It lets you develop lightweight cross-platform desktop applications using JavaScript, HTML and CSS.

Jun 21, 2022
This is a complet GUI between a Raspberry device with a Slave microcontroller to set camera data acquisition
This is a complet GUI between a Raspberry device with a Slave microcontroller to set camera data acquisition

#PYDOME Python Lib for Domes features control, this package allows users to build, evaluate and make tasks based on Raspberry OS Table of Contents Ins

Nov 2, 2021
GWork is a skinnable, embeddable GUI library with an extensive control set

GWork is a skinnable, embeddable GUI library with an extensive control set. Control rendering is abstracted, and can be implemented by any application wishing to use the library. Gwork (pronounced "gw-orc") is a fork of the GUI library GWEN. It was forked to fix issues with GWEN and add new features.

May 29, 2022
An integrated information center created with dear ImGui using modern C++ design / coding style.

ImGui info-center Introduction An integrated notification and information center created with dear ImGui. Interfaces and variables are designed under

Apr 22, 2022
Cross-platform malware development library for anti-analysis techniques

The Anti-Analysis Menagerie Cross-platform malware development library for anti-analysis techniques. Design Goals Provide a rich and convenient interf

Jun 23, 2022
DeskGap is a framework for building cross-platform desktop apps with web technologies (JavaScript, HTML and CSS).
DeskGap is a framework for building cross-platform desktop apps with web technologies (JavaScript, HTML and CSS).

A cross-platform desktop app framework based on Node.js and the system webview

Jun 13, 2022
Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS.
Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS.

?? Available Translations: ???? ???? ???? ???? ???? ???? ???? ???? . View these docs in other languages at electron/i18n. The Electron framework lets

Jun 18, 2022
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.
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.

xtd Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applicat

Jun 22, 2022