Skip to content

Commit

Permalink
docs: add doxygen docs
Browse files Browse the repository at this point in the history
  • Loading branch information
ReenigneArcher committed Jul 31, 2024
1 parent 9c4801d commit 23b4850
Show file tree
Hide file tree
Showing 15 changed files with 403 additions and 35 deletions.
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[submodule "third-party/doxygen-awesome-css"]
path = third-party/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css.git
branch = main
[submodule "third-party/googletest"]
path = third-party/googletest
url = https://github.com/google/googletest.git
Expand Down
32 changes: 32 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

version: 2

build:
os: ubuntu-24.04
tools:
python: "miniconda-latest"
commands:
# because we are overriding the build commands, we need to setup the environment ourselves
- cat docs/environment.yml
- conda env create --quiet --name ${READTHEDOCS_VERSION} --file docs/environment.yml
- mkdir -p ${READTHEDOCS_OUTPUT}
- |
wget "https://raw.githubusercontent.com/LizardByte/.github/master/branding/logos/favicon.ico" \
-O ${READTHEDOCS_OUTPUT}lizardbyte.ico
- |
wget "https://raw.githubusercontent.com/LizardByte/.github/master/branding/logos/logo-128x128.png" \
-O ${READTHEDOCS_OUTPUT}lizardbyte.png
- cd docs && doxygen Doxyfile

# using conda, we can get newer doxygen and graphviz than ubuntu provide
# https://github.com/readthedocs/readthedocs.org/issues/8151#issuecomment-890359661
conda:
environment: docs/environment.yml

submodules:
include: all
recursive: true
24 changes: 19 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
#
# Project configuration
#
cmake_minimum_required(VERSION 3.13 FATAL_ERROR) # target_link_directories

project(tray
LANGUAGES C
DESCRIPTION "A cross-platform system tray library")
project(tray VERSION 0.0.0
DESCRIPTION "A cross-platform system tray library"
HOMEPAGE_URL "https://app.lizardbyte.dev"
LANGUAGES C)

set(PROJECT_LICENSE "MIT")

Expand All @@ -11,11 +14,22 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
endif()

# Add our custom CMake modules to the global path
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

# options
#
# Project optional configuration
#
option(BUILD_DOCS "Build documentation" ON)
option(BUILD_TESTS "Build tests" ON)

#
# Documentation
#
if(BUILD_DOCS)
add_subdirectory(docs)
endif()

# Generate 'compile_commands.json' for clang_complete
set(CMAKE_COLOR_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
Expand Down
74 changes: 50 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,70 @@
# Cross-platform Linux/macOS/Windows Tray
# Overview

[![codecov](https://img.shields.io/codecov/c/gh/LizardByte/tray?token=HSX66JNEOL&style=for-the-badge&logo=codecov&label=codecov)](https://codecov.io/gh/LizardByte/tray)
[![GitHub Workflow Status (CI)](https://img.shields.io/github/actions/workflow/status/lizardbyte/tray/ci.yml.svg?branch=master&label=CI%20build&logo=github&style=for-the-badge)](https://github.com/LizardByte/tray/actions/workflows/ci.yml?query=branch%3Amaster)
[![Codecov](https://img.shields.io/codecov/c/gh/LizardByte/tray?token=HSX66JNEOL&style=for-the-badge&logo=codecov&label=codecov)](https://codecov.io/gh/LizardByte/tray)
[![GitHub stars](https://img.shields.io/github/stars/lizardbyte/tray.svg?logo=github&style=for-the-badge)](https://github.com/LizardByte/tray)

<img src="docs/images/screenshot_macosx.png">
## About

<img src="docs/images/screenshot_windows.png">
Cross-platform, super tiny C99 implementation of a system tray icon with a popup menu and notifications.

<img src="docs/images/screenshot_linux.png">
The code is C++ friendly and will compile fine in C++98 and up. This is a fork of
[dmikushin/tray](https://github.com/dmikushin/tray) and is intended to add additional features required for our own
[Sunshine](https://github.com/LizardByte/Sunshine) project.

Cross-platform, super tiny C99 implementation of a system tray icon with a popup menu.
This fork adds the following features:

Works well on:
- system tray notifications
- support for both linux appindicator versions
- unit tests
- code coverage
- refactored code, e.g. moved source code into the `src` directory
- doxygen documentation, and readthedocs configuration

## Screenshots

<div class="tabbed">

- <b class="tab-title">Linux</b>![linux](docs/images/screenshot_linux.png)
- <b class="tab-title">macOS</b>![macOS](docs/images/screenshot_macos.png)
- <b class="tab-title">Windows</b>![windows](docs/images/screenshot_windows.png)

</div>

## Supported platforms

* Linux/Gtk (libayatana-appindicator3 or libappindicator3)
* Windows XP or newer (shellapi.h)
* MacOS (Cocoa/AppKit)

The code is C++ friendly and will compile fine in C++98 and up.
## Prerequisites

* CMake
* [Ninja](https://ninja-build.org/), in order to have the same build commands on all platforms

This fork is intended to bring together the [original work of Serge Zaitsev](https://github.com/zserge/tray) and the most interesting forks and PRs of respectable contributors:
### Linux Dependencies

* [Only process messages coming from the tray window on Windows](https://github.com/zserge/tray/pull/18)
* [Become C++-friendly](https://github.com/zserge/tray/pull/16)
* [Fix all menu items have a check box](https://github.com/zserge/tray/pull/11)
* [Add support for tooltip](https://github.com/zserge/tray/pull/11)
* Darwin implementation translated from C to Objective C adapted from [@trevex fork](https://github.com/trevex/tray)
<div class="tabbed">

## Prerequisites
- <b class="tab-title">Arch</b>
```bash
sudo pacman -S libayatana-appindicator
```

* CMake
* [Ninja](https://ninja-build.org/), in order to have the same build commands on all platforms
* AppIndicator on Linux:
- <b class="tab-title">Debian/Ubuntu</b>
```bash
sudo apt install libappindicator3-dev
```

```
sudo apt install libappindicator3-dev
```
- <b class="tab-title">Fedora</b>
```bash
sudo dnf install libappindicator-gtk3-devel
```
</div>

## Building

```
```bash
mkdir build
cd build
cmake -G Ninja ..
Expand All @@ -49,7 +75,7 @@ ninja

Execute the `tray_example` application:

```
```bash
./tray_example
```

Expand Down Expand Up @@ -91,4 +117,4 @@ array must have text field set to NULL.
## License
This software is distributed under [MIT license](http://www.opensource.org/licenses/mit-license.php),
so feel free to integrate it in your commercial products.
so feel free to integrate it in your commercial products.
41 changes: 41 additions & 0 deletions docs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# find doxygen and graphviz
find_package(Doxygen
REQUIRED dot)

# define variables based on whether we are building on readthedocs
if(DEFINED ENV{READTHEDOCS})
set(DOXYGEN_BUILD_DIR_CMAKE $ENV{READTHEDOCS_OUTPUT})
set(DOXYGEN_PROJECT_VERSION $ENV{READTHEDOCS_VERSION})
else()
set(DOXYGEN_BUILD_DIR_CMAKE "${CMAKE_CURRENT_BINARY_DIR}/build")
set(DOXYGEN_PROJECT_VERSION ${PROJECT_VERSION})
endif()
message(STATUS "DOXYGEN_BUILD_DIR_CMAKE: ${DOXYGEN_BUILD_DIR_CMAKE}")

# download icon and logo
file(DOWNLOAD
"https://raw.githubusercontent.com/LizardByte/.github/master/branding/logos/favicon.ico"
"${DOXYGEN_BUILD_DIR_CMAKE}/lizardbyte.ico"
)
file(DOWNLOAD
"https://raw.githubusercontent.com/LizardByte/.github/master/branding/logos/logo-128x128.png"
"${DOXYGEN_BUILD_DIR_CMAKE}/lizardbyte.png"
)

# create build directories, as doxygen fails to create it in some cases?
file(MAKE_DIRECTORY "${DOXYGEN_BUILD_DIR_CMAKE}/html")

# convert to relative path, so doxygen doesn't get confused on Windows
file(RELATIVE_PATH DOXYGEN_BUILD_DIR_RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${DOXYGEN_BUILD_DIR_CMAKE}")
message(STATUS "DOXYGEN_BUILD_DIR_RELATIVE: ${DOXYGEN_BUILD_DIR_RELATIVE}")

# build docs
add_custom_target(docs ALL
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Building Doxygen documentation"
COMMAND ${CMAKE_COMMAND} -E env
READTHEDOCS_OUTPUT=${DOXYGEN_BUILD_DIR_RELATIVE}
READTHEDOCS_VERSION=${DOXYGEN_PROJECT_VERSION}
${DOXYGEN_EXECUTABLE} Doxyfile
VERBATIM
)
111 changes: 111 additions & 0 deletions docs/Doxyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#
# Note:
#
# Use doxygen to compare the used configuration file with the template
# configuration file:
# doxygen -x [configFile]
# Use doxygen to compare the used configuration file with the template
# configuration file without replacing the environment variables or CMake type
# replacement variables:
# doxygen -x_noenv [configFile]

# must be first
DOXYFILE_ENCODING = UTF-8

# project metadata
DOCSET_BUNDLE_ID = dev.lizardbyte.tray
DOCSET_PUBLISHER_ID = dev.lizardbyte.tray.documentation
DOCSET_PUBLISHER_NAME = LizardByte
PROJECT_BRIEF = "Cross-platform, super tiny C99 implementation of a system tray icon with a popup menu and notifications."
PROJECT_ICON = $(READTHEDOCS_OUTPUT)/lizardbyte.ico
PROJECT_LOGO = $(READTHEDOCS_OUTPUT)/lizardbyte.png
PROJECT_NAME = tray

# project specific settings
DOT_GRAPH_MAX_NODES = 50
IMAGE_PATH = ../docs/images
INCLUDE_PATH =
PREDEFINED = DOXYGEN
PREDEFINED += __APPLE__
PREDEFINED += linux
PREDEFINED += __linux
PREDEFINED += __linux__
PREDEFINED += __MACH__
PREDEFINED += _WIN32

# TODO: Enable this when we have complete documentation
WARN_IF_UNDOCUMENTED = NO

# files and directories to process
INPUT = ../README.md \
../src

#
# Common LizardByte settings
#

# doxygen-awesome-css
HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5
HTML_COPY_CLIPBOARD = NO # required for Doxygen >= 1.10.0
HTML_EXTRA_FILES = ../third-party/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js
HTML_EXTRA_FILES += ../third-party/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js
HTML_EXTRA_FILES += ../third-party/doxygen-awesome-css/doxygen-awesome-paragraph-link.js
HTML_EXTRA_FILES += ../third-party/doxygen-awesome-css/doxygen-awesome-interactive-toc.js
HTML_EXTRA_STYLESHEET = ../third-party/doxygen-awesome-css/doxygen-awesome.css
HTML_HEADER = header.html

# custom aliases
ALIASES = ""
ALIASES += "examples=^^**Examples**^^@code{.cpp}"
ALIASES += "examples_end=@endcode^^"
ALIASES += "rst=^^\verbatim embed:rst:leading-asterisk^^"
ALIASES += "rst_end=\endverbatim"

# general settings
CASE_SENSE_NAMES = YES
CREATE_SUBDIRS = NO
DISABLE_INDEX = NO
DOCBOOK_OUTPUT = docbook
DOT_IMAGE_FORMAT = svg
DOT_NUM_THREADS = 1
EXTRACT_ALL = NO
FULL_SIDEBAR = NO
GENERATE_HTML = YES
GENERATE_LATEX = NO
GENERATE_TREEVIEW = YES
GENERATE_XML = NO
HAVE_DOT = YES
HTML_OUTPUT = html
INTERACTIVE_SVG = YES
LATEX_OUTPUT = latex
MACRO_EXPANSION = YES
MAN_OUTPUT = man
MARKDOWN_ID_STYLE = GITHUB
MARKDOWN_SUPPORT = YES
NUM_PROC_THREADS = 1
PROJECT_NUMBER = $(READTHEDOCS_VERSION)
OUTPUT_DIRECTORY = $(READTHEDOCS_OUTPUT)
RECURSIVE = YES
RTF_OUTPUT = rtf
SORT_BRIEF_DOCS = YES
STRIP_FROM_INC_PATH = ../
STRIP_FROM_PATH = ../
WARN_AS_ERROR = FAIL_ON_WARNINGS
WARN_IF_DOC_ERROR = YES
WARN_IF_INCOMPLETE_DOC = YES
WARN_IF_UNDOC_ENUM_VAL = YES
WARN_NO_PARAMDOC = YES
WARNINGS = YES
XML_OUTPUT = xml
8 changes: 8 additions & 0 deletions docs/environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
name: RTD
channels:
- conda-forge
- defaults
dependencies:
- doxygen=1.10.0
- graphviz=11.0.0
Loading

0 comments on commit 23b4850

Please sign in to comment.