PHP-GTK Client for Gemini Protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yggverse b3635c77bc implement multi-table struct model 4 months ago
bin init bin directory 5 months ago
po delegate specific database operations to widgets, use SQLiteCpp wrapper 4 months ago
src implement multi-table struct model 4 months ago
.gitignore init sqlite database library 5 months ago
LICENSE initial commit 5 months ago
Makefile delegate specific database operations to widgets, use SQLiteCpp wrapper 4 months ago
README.md update readme 4 months ago

README.md

Yoda - Browser for Gemini protocol

C++ / GTK 4 implementation, see also PHP-GTK3 experimental branch

[!IMPORTANT] Project in development!

Build

Linux

apt install git\
            libglib2.0-dev\
            libglibmm-2.68-dev\
            libgtkmm-4.0-dev\
            libpangomm-2.48-dev\
            libsqlite3-dev
  • git clone https://github.com/YGGverse/Yoda.git
  • cd Yoda
  • git checkout CPP-GTK4
  • make

Update

  • git pull
  • make clean
  • make

Localization

Official

Personal

  • apt install intltool
  • cd po
  • intltool-update --pot

Development

Introduction

Project structure and codebase in development, it promise to grow. This section would help with understand what is going on, before you start to work with code.

src/app

Currently, main application sources located at src/app folder, written by following principles:

  • Every file implement (extend) one of GTK 4 Widgets, according to the functional subject (e.g. class Browser : public Gtk::ApplicationWindow)
  • src/app does not contain other class types like models or libraries (another folders and namespaces at src root are reserved for these needs)
  • Namespaces match filesystem path, where directory namespaces are lowercase
  • Every file work with it own, 1th level child only, to prevent massive logic levels keeping in mind
  • All classes (but window) never work with parents (including their dependencies) but may receive system data types as the arguments in constructors
  • To access any children features, deeper or higher than 1th level of current class, use delegation methods (actions, getters and setters)
  • One file - one class. If the file requires additional (GTK) component, this component should be placed at similar folder with same name as parent filename. So we have simple hierarchy navigation logic - from app to window, from window to it container, etc.
  • At this moment, all constants named with uppercase, const everything that not mutable
  • #include application .hpp files in .cpp. For system libraries, use headers only. Do not place system dependencies in .cpp
  • App interact SQLite database, where table name match related class namespace, it may contain optional feature postfix (separated with double line)
  • Database table fields must contain only members of their class (e.g. private and public variable values) and may include primary keys to their parent class (tables) according to the namespace hierarchy

Environment

pkg-config --cflags --libs gio-2.0\
                           glibmm-2.68\
                           gtkmm-4.0\
                           pangomm-2.48\
                           sqlite3

Contribution

  • cd Yoda
  • git checkout CPP-GTK4
  • git pull
  • git checkout -b 'contribution-name'

Documentation

Components

  • GTK - free and open-source cross-platform widget toolkit
    • gtkmm - official C++ interface for GTK
  • SQLite - profile database