Skip to content

Repository files navigation

AmigaOS.MUI.cpp.wrapper

AmigaOS/MorphOS/AROS MUI/Zune C++ Wrapper Classes is a modern C++17 library that provides wrapper classes for the Magic User Interface (MUI) on AmigaOS and MorphOS. These classes simplify interaction with the MUI API, enabling developers to use C++ idioms and abstractions to build robust and maintainable user interfaces. The library encapsulates MUI elements within object-oriented classes, improving code readability and reducing the need for low-level MUI calls, thus allowing developers to focus on higher-level design and functionality.

Not all MUI classes/attributes/methods are implemented! (work in progress)


Requirements for build

MorphOS compilation

Linux cross compilation for AmigaOS

Linux cross compilation for MorphOS

Linux cross compilation for AROS (Zune)

  • AmigaOS.cpp.wrapper (https://github.com/tdolphin-org/AmigaOS.cpp.wrapper) located in path ../AmigaOS.cpp.wrapper
  • AROS stable (ABIv11) sources (not the bleeding edge tree!)
  • AROS cross-compiler + hosted AROS built from the sources via scripts/rebuild.sh - see AROS Getting Started
  • System dependencies: sudo apt install gcc g++ make git flex bison gawk python3 python3-mako libx11-dev libpng-dev genisoimage cmake curl nasm autoconf automake libxext-dev liblzo2-dev libxxf86vm-dev libsdl1.2-dev byacc yasm xorriso mtools
  • AROS uses Zune, a MUI 3.x-compatible toolkit; the Zune headers are part of the AROS SDK (platform detection in code via __AROS__)
  • To make the AROS cross environment machine-independent (AROS has no fixed install location and x86_64-aros-g++ needs an explicit --sysroot), use the helper script from AmigaOS.cpp.wrapper to map your existing AROS build onto the conventional /opt/aros layout:
    sudo /bin/sh ../AmigaOS.cpp.wrapper/tools/install-aros-cross.sh /path/to/your/arosbuilds
    echo 'export PATH=/opt/aros/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
    
    Run it once (not before every make); AROS_SYSROOT in AmigaOS.cpp.wrapper's wrappers/Makefile defaults to /opt/aros/Development.

Build

AmigaOS3 m68k (Linux cross compilation)

$ make cross_aos_m68k

*AmigaOS3 m68k rebuild, parallel on 4 threads/cores (Linux cross compilation) *

$ make clean ; make cross_aos_m68k -j 4

MorphOS PowerPC compilation

$ make mos_ppc

MorphOS rebuild

$ make clean ; make mos_ppc

MorphOS PowerPC (Linux cross compilation)

$ make cross_mos_ppc

MorphOS PowerPC rebuild, parallel on 4 threads/cores (Linux cross compilation)

$ make clean ; make cross_mos_ppc -j 4

build structure in wrappers folder

obj -> morphos -> ppc -> *.o
-> amigaos -> m68k -> *.o
lib -> morphos -> ppc -> libMUIcpp.a
-> amigaos -> m68k -> libMUIcpp.a

Examples

basic example

All code in one file, see: Main.cpp

basic example window

advanced example

Code extended and divided in many files (Components), see: advanced

advanced example window


Implementation status

Column names descriptions

  • Wrapper 3.8 = status of wrapper implementation for MUI 3.8 if appicable
  • Wrapper AMUI5 = status of wrapper implementation of extra attributes and methods for AmigaOS MUI 5.0 if applicable
  • Wrapper MMUI5 = status of wrapper implementation of extra attributes and methods for MorphOS MUI 5.0 if applicable
  • Builder 3.8 = status of builder implementation for MUI 3.8 if appicable
  • Builder AMUI5 = status of builder implementation of extra attributes for AmigaOS MUI 5.0 if applicable
  • Builder MMUI5 = status of builder implementation of extra attributes for MorphOS MUI 5.0 if applicable

Version tags

  • 3.8 = MUI 3.8
  • AMUI5 = AmigaOS MUI 5.0
  • MMUI5 = MorphOS MUI 5.0
  • n/a = class/element is not available in that version (always apply to MUI 3.8 in this project)
MUI classC++ classWrapper 3.8Wrapper AMUI5Wrapper MMUI5Builder 3.8Builder AMUI5Builder MMUI5Source NotifierDest Notifier
MUIC_ApplicationMUI::ApplicationReadyReadyReadyReadyReadyReady-in progress
MUIC_AboutmuiMUI::AboutmuiReady--Ready----
MUIC_AreaMUI::AreaReadyReadyReadyReadyReadyReadyin progressin progress
MUIC_ArgstringMUI::Argstringn/aReadyReadyn/aReadyReady--
MUIC_BalanceMUI::BalanceReadyReadyReadyReadyReadyReadynot applicablenot applicable
MUIC_BitmapMUI::BitmapReadyReadyReadyReadyReadyReady--
MUIC_BodychunkMUI::BodychunkReady--Ready----
MUIC_BoopsiMUI::BoopsiReady--Ready----
MUIC_ColoradjustMUI::ColoradjustReady-ReadyReady-Ready--
MUIC_ColorfieldMUI::ColorfieldReady--Ready----
MUIC_CycleMUI::CycleReadyReadyReadyReady--ReadyReady
MUIC_DatamapMUI::Datamapn/aReadyReadyn/aReadyReady--
MUIC_DataspaceMUI::DataspaceReadyReadyReadyReady----
MUIC_DirlistMUI::DirlistReadyReadyReadyReadyReadyReady--
MUIC_DtpicMUI::DtpicReadyReadyReadyReadyReadyReady--
MUIC_FamilyMUI::FamilyReadyReadyReadyReady--in progressin progress
MUIC_FilepanelMUI::Filepaneln/aReadyReadyn/aReadyReady--
MUIC_FloattextMUI::FloattextReadyReadyReadyReadyReadyReady--
MUIC_FontdisplayMUI::Fontdisplayn/aReadyReadyn/aReadyReady--
MUIC_FontpanelMUI::Fontpaneln/aReadyReadyn/aReadyReady--
MUIC_GadgetMUI::GadgetReady--Ready--not applicablenot applicable
MUIC_GaugeMUI::GaugeReadyReadyReadyReadyReadyReady--
MUIC_GroupMUI::GroupReadyReadyReadyReadyReadyReadyin progressin progress
MUIC_ImageMUI::ImageReadyReadyReadyReadyReadyReady--
MUIC_KeyadjustMUI::Keyadjustn/aReadyReadyn/aReadyReady--
MUIC_KnobMUI::KnobReady--Ready----
MUIC_LevelmeterMUI::LevelmeterReady--Ready----
MUIC_ListMUI::ListReadyReadyReadyReadyReadyReadyin progressin progress
MUIC_ListviewMUI::ListviewReadyReadyReadyReadyReadyReady--
MUIC_MccprefsMUI::Mccprefsn/aReadyReadyn/aReadyReady--
MUIC_MenuMUI::MenuReadyReadyReadyReadyReadyReadyin progressin progress
MUIC_MenuitemMUI::MenuitemReadyReadyReadyReadyReadyReadyin progressin progress
MUIC_MenustripMUI::MenustripReadyReadyReadyReadyReadyReady--
MUIC_NotifyMUI::NotifyReadyReadyReadyReady--in progressin progress
MUIC_NumericbuttonMUI::NumericbuttonReady--Ready----
MUIC_NumericMUI::NumericReady--Ready----
MUIC_ObjectmapMUI::Objectmapn/aReadyReadyn/aReadyReady--
MUIC_PaletteMUI::PaletteReady--Ready----
MUIC_PanelMUI::Paneln/aReadyReadyn/aReadyReadynot applicablenot applicable
MUIC_PenadjustMUI::PenadjustReady--Ready----
MUIC_PendisplayMUI::PendisplayReady-ReadyReady-Readyin progressin progress
MUIC_PixmapMUI::Pixmapn/aReadyn/an/aReadyn/a--
MUIC_PopaslMUI::PopaslReady-ReadyReady-Ready--
MUIC_PoplistMUI::PoplistReady--Ready----
MUIC_PopobjectMUI::PopobjectReady-n/aReady-n/a--
MUIC_PoppenMUI::PoppenReady-n/aReady-n/anot applicablenot applicable
MUIC_PopscreenMUI::PopscreenReady--Ready----
MUIC_PopstringMUI::PopstringReady--Ready----
MUIC_ProcessMUI::Processn/aReadyReadyn/aReadyReadynot applicablenot applicable
MUIC_PropMUI::PropReadyReadyReadyReadyReadyReadyReadyReady
MUIC_RadioMUI::RadioReady--Ready----
MUIC_RectangleMUI::RectangleReady--Ready--not applicable-
MUIC_RegisterMUI::RegisterReadyReady-ReadyReadyReadynot applicableReady
MUIC_ScaleMUI::ScaleReady--Ready----
MUIC_ScreenmodepanelMUI::Screenmodepaneln/aReadyReadyn/aReadyReady--
MUIC_ScrmodelistMUI::ScrmodelistReady--Ready----
MUIC_ScrollbarMUI::ScrollbarReadyReady-ReadyReady---
MUIC_ScrollgroupMUI::ScrollgroupReadyReadyReadyReadyReadyReady--
MUIC_SelectgroupMUI::Selectgroupn/aReadyReadyn/aReadyReady--
MUIC_SemaphoreMUI::SemaphoreReady--Ready--not applicablenot applicable
MUIC_SlaveMUI::Slaven/aReadyReadyn/aReadyReadynot applicablenot applicable
MUIC_SliderMUI::SliderReady--Ready----
MUIC_StringMUI::StringReadyReadyReadyReadyReadyReadyin progressin progress
MUIC_TextdataMUI::Textdatan/aReadyn/an/aReadyn/a--
MUIC_TextMUI::TextReadyReadyReadyReadyReadyReady--
MUIC_TitleMUI::Titlen/aReadyReadyn/aReadyReady--
MUIC_VirtgroupMUI::VirtgroupReadyReadyReadyReadyReadyReady--
MUIC_VolumelistMUI::VolumelistReady--ReadyReadyReady--
MUIC_WindowMUI::WindowReadyReadyReadyReadyReadyReadyin progressin progress
......--------
MCC classC++ classWrapperBuilderSource NotifierDest Notifier
MUIC_BusyMUI::BusyReadyReady--
MUIC_NListMUI::NListin progressin progress--
MUIC_NListviewMUI::NListviewin progressReady--
MUIC_TextEditorMUI::TextEditorin progressin progress--
......----

Additional info

Method comments in Wrapper classes are mostly from MUI documentation.

About

AmigaOS/MorphOS/AROS MUI C++ wrapper classes

Topics

Resources

Stars

13 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages