{"id":18794862,"url":"https://github.com/acerv/modular_framework","last_synced_at":"2025-12-29T22:30:15.176Z","repository":{"id":122919287,"uuid":"54777002","full_name":"acerv/modular_framework","owner":"acerv","description":"A modular framework using GLib","archived":false,"fork":false,"pushed_at":"2016-11-26T11:20:24.000Z","size":65,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-29T16:37:10.550Z","etag":null,"topics":["c","modularity-framework"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/acerv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-26T11:58:46.000Z","updated_at":"2016-03-26T12:03:17.000Z","dependencies_parsed_at":"2024-07-24T12:34:19.746Z","dependency_job_id":null,"html_url":"https://github.com/acerv/modular_framework","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acerv%2Fmodular_framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acerv%2Fmodular_framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acerv%2Fmodular_framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acerv%2Fmodular_framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acerv","download_url":"https://codeload.github.com/acerv/modular_framework/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239719186,"owners_count":19685903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","modularity-framework"],"created_at":"2024-11-07T21:31:21.498Z","updated_at":"2025-12-29T22:30:15.107Z","avatar_url":"https://github.com/acerv.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Introduction\n\n[![Build Status](https://travis-ci.org/acerv/modular_framework.svg?branch=master)](https://travis-ci.org/acerv/modular_framework)\n\nThis framework has been created to provide a generic system that can be used for desktop applications. \nThe system provides some tools as the following ones:\n* generic data handle\n* messages handling\n* configuration manager\n* localization handle\n* dynamic modules loader\n* ui library independent handler\n\n## Used libraries and dependences\nGLib is the only requirement. The code has been tested on Debian stable, but it should work in all GNU/Linux\ndistributions which provide GLib.\n\n## Code style\nThe code is massively using the Abstract-Data-Type encapsulation mechanism, to hide details of the framework\nimplementation. The type definition is using the \"Example\\_type\" string declaration, while the abstract type uses \"Example\".\n\n## Setup and Config\nThe framework is using two different configurations: setup and config, both with .ini format.\nThe setup is the user visible configuration and the config is the manufacter configuration of the application.\nThis system can be useful when the application needs to hide some configurations from the user, such as internal\nuneditable parameters for the correct framework functioning.\nNote that the engine will always initialize the system by fetching config first, then the setup.\n\n## User interface\nThe framework is providing a generic code interface that can be implemented by using the desired library (ie Qt, Gtk+).\nThe interfice code can be found inside the \"ui/\" path and it's used by the modules of the framework.\nThe user interface has the following components:\n* setup panel: the panel that contains all the setup controls fetched from the modules\n* config panel: the panel that contains all the config controls fetched from the modules\n* test panel: the panel that contains all the test controls fetched from the modules\n* base window: the main form\n\n## Module\nA module is a part of the framework that's loaded at run-time. It contains its own setup, config, panels of the user\ninterface, and it's defined inside the file module.h. The module can be splitted in the following 3 parts:\n  1. configuration: it contains config and setup of the module\n  2. logic: it contains the logic of the module, like algorithms\n  3. graphics: it contains the UI controls\n\nEvery module is loaded by the engine and it's initialized as following:\n  1. setup the module by calling the \"setup\" routine\n  2. load the configuration by calling the \"conf\\_load\\_config\" routine\n  3. load the setup by calling the \"conf\\_load\\_setup\" routine\n  4. initialize the module's logic by calling the \"login\\_run\" routine\n  5. initialize the module's UI by calling the \"graphic\\_run\" routine\n\nIn the logic initialization, it's possible to load algorithms according with the configuration or setup.\nIn the graphics initialization, it's possible to load controls into the config panel, setup panel, test panel and base\nwindow.\n\n## Library usage\nI'm not providing the UI implementation, but it's possible to find a super simple GTK+3 example in the \"examples/\" path. \nTo use the modular framework, it's possible to include the sources inside the project and to start implement the module.h interface.\nAn example of the engine initialization can be found in the tester.c source code.\n\n## Credits\nPart of the engine has been thought with Gianfranco Gallizia (aka. skyglobe) in the 2013-2014 and, initially, it was a C# implementation. \nI ported the source code into C using GLib to make it multi-platform.\n\nhttps://github.com/skyglobe\n\n## Links\n\nhttps://developer.gnome.org/glib/\n\nhttps://developer.gnome.org/glib/stable/glib-Dynamic-Loading-of-Modules.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facerv%2Fmodular_framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facerv%2Fmodular_framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facerv%2Fmodular_framework/lists"}