PowerToys/doc/devdocs
yuyoyuppe f385e46927
Devdocs reorganisation (#913)
* docs: split usage and dev docs

* # This is a combination of 2 commits.
# This is the 1st commit message:

docs: split usage and dev docs

# The commit message #2 will be skipped:

# fixup add docs

* docs: add runner documentation and move hooks documentation to devdocs

* docs: add stubs for modules technical description

* docs: add paragraph about event thread-safety

* docs: add 'Current modules' section header
2019-12-12 12:25:19 +03:00
..
modules Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
common.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
readme.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
runner.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
settings-web.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
settings.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
shared-hooks.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00
style.md Devdocs reorganisation (#913) 2019-12-12 12:25:19 +03:00

Code Organization

Rules

  • Follow the pattern of what you already see in the code
  • Try to package new ideas/components into libraries that have nicely defined interfaces
  • Package new ideas into classes or refactor existing ideas into a class as you extend

Code Overview

General project organization:

The doc folder

Documentation for the project, including a coding guide and design docs.

The installer folder

Contains the source code of the PowerToys installer.

The src folder

Contains the source code of the PowerToys runner and of all of the PowerToys modules. This is where the most of the magic happens.

The tools folder

Various tools used by PowerToys. Includes the Visual Studio 2019 project template for new PowerToys.

Implementation details

Runner

The PowerToys Runner contains the project for the PowerToys.exe executable. It's responsible for:

  • Loading the individual PowerToys modules.
  • Passing registered events to the PowerToys.
  • Showing a system tray icon to manage the PowerToys.
  • Bridging between the PowerToys modules and the Settings editor.

Image of the tray icon

Interface

Definition of the interface used by the runner to manage the PowerToys. All PowerToys must implement this interface.

Common

The common lib, as the name suggests, contains code shared by multiple PowerToys components and modules, e.g. json parsing and IPC primitives.

Settings

WebView project for editing the PowerToys settings.

The html portion of the project that is shown in the WebView is contained in settings-html. Instructions on how build a new version and update this project are in the Web project for the Settings UI.

While developing, it's possible to connect the WebView to the development server running in localhost by setting the _DEBUG_WITH_LOCALHOST flag to 1 and following the instructions near it in ./main.cpp.

Settings-web

This project generates the web UI shown in the PowerToys Settings. It's a ReactJS project created using UI Fabric.

Current modules

FancyZones

The FancyZones PowerToy that allows users to create custom zones on the screen, to which the windows will snap when moved.

PowerRename

PowerRename is a Windows Shell Context Menu Extension for advanced bulk renaming using simple search and replace or more powerful regular expression matching.

Shortcut Guide

The Windows Shortcut Guide, displayed when the WinKey is held for some time.

obsolete example_powertoy

An example PowerToy, that demonstrates how to create new ones. Please note, that this is going to become a Visual Studio project template soon.

This PowerToy serves as a sample to show how to implement the PowerToys interface when creating a PowerToy. It also showcases the currently implemented settings.

Options

This module has a setting to serve as an example for each of the currently implemented settings property:

  • BoolToggle property
  • IntSpinner property
  • String property
  • ColorPicker property
  • CustomAction property

Image of the Options