Docs tweaks (#960)
Change header levels Add Github workflow Add reference to coding style Minor tweaks Fix links Add border to images Scale images
@ -47,11 +47,11 @@ When terminating, the runner will:
|
|||||||
- unload the DLL.
|
- unload the DLL.
|
||||||
|
|
||||||
|
|
||||||
## Method definition
|
# Method definition
|
||||||
|
|
||||||
This section contains a more detailed description of each of the interface methods.
|
This section contains a more detailed description of each of the interface methods.
|
||||||
|
|
||||||
### powertoy_create_func
|
## powertoy_create_func
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
typedef PowertoyModuleIface* (__cdecl *powertoy_create_func)()
|
typedef PowertoyModuleIface* (__cdecl *powertoy_create_func)()
|
||||||
@ -79,7 +79,7 @@ ExamplePowertoy::ExamplePowertoy() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### get_name
|
## get_name
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual const wchar_t* get_name()
|
virtual const wchar_t* get_name()
|
||||||
@ -94,7 +94,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### get_events
|
## get_events
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual const wchar_t** get_events()
|
virtual const wchar_t** get_events()
|
||||||
@ -117,7 +117,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### get_config
|
## get_config
|
||||||
|
|
||||||
```
|
```
|
||||||
virtual bool get_config(wchar_t* buffer, int *buffer_size)
|
virtual bool get_config(wchar_t* buffer, int *buffer_size)
|
||||||
@ -167,7 +167,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### set_config
|
## set_config
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual void set_config(const wchar_t* config)
|
virtual void set_config(const wchar_t* config)
|
||||||
@ -200,7 +200,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### call_custom_action
|
## call_custom_action
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual void call_custom_action(const wchar_t* action)
|
virtual void call_custom_action(const wchar_t* action)
|
||||||
@ -234,7 +234,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### enable
|
## enable
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual void enable()
|
virtual void enable()
|
||||||
@ -250,7 +250,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### disable
|
## disable
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual void disable()
|
virtual void disable()
|
||||||
@ -266,7 +266,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### is_enabled
|
## is_enabled
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual bool is_enabled() = 0;
|
virtual bool is_enabled() = 0;
|
||||||
@ -281,7 +281,7 @@ Sample code from [`the example PowerToy`](/src/modules/example_powertoy/dllmain.
|
|||||||
return m_enabled;
|
return m_enabled;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### signal_event
|
## signal_event
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual intptr_t signal_event(const wchar_t* name, intptr_t data) = 0;
|
virtual intptr_t signal_event(const wchar_t* name, intptr_t data) = 0;
|
||||||
@ -331,7 +331,7 @@ Module will be informed when action is taken on any item created on request of t
|
|||||||
Runner invokes this API when action is taken on item created on request from the module.
|
Runner invokes this API when action is taken on item created on request from the module.
|
||||||
Item name is passed as an argument, so that module can distinguish between different menu items.
|
Item name is passed as an argument, so that module can distinguish between different menu items.
|
||||||
|
|
||||||
### destroy
|
## destroy
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
virtual void destroy()
|
virtual void destroy()
|
||||||
|
@ -1,17 +1,28 @@
|
|||||||
# Code Organization
|
# Dev Documentation
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
- **Follow the pattern of what you already see in the code**
|
- **Follow the pattern of what you already see in the code.**
|
||||||
- Try to package new ideas/components into libraries that have nicely defined interfaces
|
- [Coding style](style.md).
|
||||||
- Package new ideas into classes or refactor existing ideas into a class as you extend
|
- 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.
|
||||||
|
- Whean adding new classes/methos/changing existing code: add new unit tests or update the existing tests.
|
||||||
|
|
||||||
## Code Overview
|
## Github Workflow
|
||||||
|
|
||||||
|
- Follow the PR template, in particular make sure there is open issue for the new PR.
|
||||||
|
- When the PR is approved, let the owner of the PR merge it.
|
||||||
|
- Use the `Squash and merge` option to merge a PR, if you don't want to squash it because there are logically different commits, use `Rebase and merge`.
|
||||||
|
- We don't close issues automatically when referenced in a PR, so after the OR is merged:
|
||||||
|
- mark the issue(s) fixed by the PR with the `resolved` label.
|
||||||
|
- don't close the issue if it's a bug in the current release since users tend to not search for closed issues, we will close the resolved issues when a new released is published.
|
||||||
|
|
||||||
|
## Repository Overview
|
||||||
|
|
||||||
General project organization:
|
General project organization:
|
||||||
|
|
||||||
#### The [`doc`](/doc) folder
|
#### The [`doc`](/doc) folder
|
||||||
Documentation for the project, including a [coding guide](/doc/coding) and [design docs](/doc/specs).
|
Documentation for the project.
|
||||||
|
|
||||||
#### The [`installer`](/installer) folder
|
#### The [`installer`](/installer) folder
|
||||||
Contains the source code of the PowerToys installer.
|
Contains the source code of the PowerToys installer.
|
||||||
@ -24,7 +35,7 @@ Various tools used by PowerToys. Includes the Visual Studio 2019 project templat
|
|||||||
|
|
||||||
# Implementation details
|
# Implementation details
|
||||||
|
|
||||||
### [`Runner`](/doc/devdocs/runner.md)
|
### [`Runner`](runner.md)
|
||||||
The PowerToys Runner contains the project for the PowerToys.exe executable.
|
The PowerToys Runner contains the project for the PowerToys.exe executable.
|
||||||
It's responsible for:
|
It's responsible for:
|
||||||
- Loading the individual PowerToys modules.
|
- Loading the individual PowerToys modules.
|
||||||
@ -34,14 +45,14 @@ It's responsible for:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### [`Interface`](/doc/devdocs/modules/interface.md)
|
### [`Interface`](modules/interface.md)
|
||||||
Definition of the interface used by the [`runner`](/src/runner) to manage the PowerToys. All PowerToys must implement this interface.
|
Definition of the interface used by the [`runner`](/src/runner) to manage the PowerToys. All PowerToys must implement this interface.
|
||||||
|
|
||||||
### [`Common`](/doc/devdocs/common.md)
|
### [`Common`](common.md)
|
||||||
The common lib, as the name suggests, contains code shared by multiple PowerToys components and modules, e.g. [json parsing](/src/common/json.h) and [IPC primitives](/src/common/two_way_pipe_message_ipc.h).
|
The common lib, as the name suggests, contains code shared by multiple PowerToys components and modules, e.g. [json parsing](/src/common/json.h) and [IPC primitives](/src/common/two_way_pipe_message_ipc.h).
|
||||||
|
|
||||||
|
|
||||||
### [`Settings`](/doc/devdocs/settings.md)
|
### [`Settings`](settings.md)
|
||||||
WebView project for editing the PowerToys 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`](/src/settings/settings-heml).
|
The html portion of the project that is shown in the WebView is contained in [`settings-html`](/src/settings/settings-heml).
|
||||||
@ -49,21 +60,21 @@ Instructions on how build a new version and update this project are in the [Web
|
|||||||
|
|
||||||
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`.
|
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`](/doc/devdocs/settings-web.md)
|
### [`Settings-web`](settings-web.md)
|
||||||
This project generates the web UI shown in the [PowerToys Settings](/src/editor).
|
This project generates the web UI shown in the [PowerToys Settings](/src/editor).
|
||||||
It's a `ReactJS` project created using [UI Fabric](https://developer.microsoft.com/en-us/fabric#/).
|
It's a `ReactJS` project created using [UI Fabric](https://developer.microsoft.com/en-us/fabric#/).
|
||||||
|
|
||||||
## Current modules
|
## Current modules
|
||||||
### [`FancyZones`](/doc/devdocs/modules/fancyzones.md)
|
### [`FancyZones`](modules/fancyzones.md)
|
||||||
The FancyZones PowerToy that allows users to create custom zones on the screen, to which the windows will snap when moved.
|
The FancyZones PowerToy that allows users to create custom zones on the screen, to which the windows will snap when moved.
|
||||||
|
|
||||||
### [`PowerRename`](/doc/devdocs/modules/powerrename.md)
|
### [`PowerRename`](modules/powerrename.md)
|
||||||
PowerRename is a Windows Shell Context Menu Extension for advanced bulk renaming using simple search and replace or more powerful regular expression matching.
|
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`](/doc/devdocs/modules/shortcut_guide.md)
|
### [`Shortcut Guide`](modules/shortcut_guide.md)
|
||||||
The Windows Shortcut Guide, displayed when the WinKey is held for some time.
|
The Windows Shortcut Guide, displayed when the WinKey is held for some time.
|
||||||
|
|
||||||
### _obsolete_ [`example_powertoy`](/doc/devdocs/modules/example_powertoy.md)
|
### _obsolete_ [`example_powertoy`](modules/example_powertoy.md)
|
||||||
An example PowerToy, that demonstrates how to create new ones. Please note, that this is going to become a Visual Studio project template soon.
|
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](/src/modules/interface/) when creating a PowerToy. It also showcases the currently implemented settings.
|
This PowerToy serves as a sample to show how to implement the [PowerToys interface](/src/modules/interface/) when creating a PowerToy. It also showcases the currently implemented settings.
|
||||||
|
@ -78,10 +78,13 @@ void ExamplePowertoy::set_config(const wchar_t* config)
|
|||||||
## Detailed reference
|
## Detailed reference
|
||||||
For a detailed reference of how the settings are implemented in the runner and in the settings editor, consult [this detailed guide](settings-reference.md).
|
For a detailed reference of how the settings are implemented in the runner and in the settings editor, consult [this detailed guide](settings-reference.md).
|
||||||
|
|
||||||
## Available settings elements
|
# Available settings elements
|
||||||
|
|
||||||
|
## Bool toggle
|
||||||
|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/bool_toggle.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
### Bool toggle
|
|
||||||

|
|
||||||
```c++
|
```c++
|
||||||
settings.add_bool_toogle(name, description, value)
|
settings.add_bool_toogle(name, description, value)
|
||||||
```
|
```
|
||||||
@ -95,8 +98,11 @@ The toggle value is stored as bool:
|
|||||||
std::optional<bool> bool_value = settings.get_bool_value(L"bool_name");
|
std::optional<bool> bool_value = settings.get_bool_value(L"bool_name");
|
||||||
```
|
```
|
||||||
|
|
||||||
### Int Spinner
|
## Int Spinner
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/int_spinner.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
settings.add_int_spinner(name, description, value, min, max, step)
|
settings.add_int_spinner(name, description, value, min, max, step)
|
||||||
```
|
```
|
||||||
@ -112,8 +118,11 @@ The spinner value is stored as int:
|
|||||||
std::optional<int> int_value = settings.get_int_value(L"int_spinner_name");
|
std::optional<int> int_value = settings.get_int_value(L"int_spinner_name");
|
||||||
```
|
```
|
||||||
|
|
||||||
### String
|
## String
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/string.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
settings.add_string(name, description, value)
|
settings.add_string(name, description, value)
|
||||||
```
|
```
|
||||||
@ -127,8 +136,11 @@ The input value is stored as `std::wstring`:
|
|||||||
std::optional<std::wstring> string_value = settings.get_string_value(L"string_name");
|
std::optional<std::wstring> string_value = settings.get_string_value(L"string_name");
|
||||||
```
|
```
|
||||||
|
|
||||||
### Multiline string
|
## Multiline string
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/multiline.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
settings.add_multiline_string(name, description, value)
|
settings.add_multiline_string(name, description, value)
|
||||||
```
|
```
|
||||||
@ -142,8 +154,11 @@ The input value is stored as string:
|
|||||||
std::optional<std::wstring> value = settings.get_string_value(L"multiline_name");
|
std::optional<std::wstring> value = settings.get_string_value(L"multiline_name");
|
||||||
```
|
```
|
||||||
|
|
||||||
### Color picker
|
## Color picker
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/color_picker.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
settings.add_color_picker(name, description, value)
|
settings.add_color_picker(name, description, value)
|
||||||
```
|
```
|
||||||
@ -158,8 +173,11 @@ The color picker value is stored as `std::wstring` as `#RRGGBB`:
|
|||||||
std::optional<std::wstring> value = settings.get_string_value(L"colorpicker_name");
|
std::optional<std::wstring> value = settings.get_string_value(L"colorpicker_name");
|
||||||
```
|
```
|
||||||
|
|
||||||
### Hotkey
|
## Hotkey
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/hotkey.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
settings.add_hotkey(name, description, hotkey)
|
settings.add_hotkey(name, description, hotkey)
|
||||||
```
|
```
|
||||||
@ -188,8 +206,11 @@ if (value) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Choice group
|
## Choice group
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/choice_group.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
add_choice_group(name, description, value, vector<pair<wstring, UINT>> keys_and_texts)
|
add_choice_group(name, description, value, vector<pair<wstring, UINT>> keys_and_texts)
|
||||||
```
|
```
|
||||||
@ -205,10 +226,16 @@ The chosen button value is stored as a string with the key of the button selecte
|
|||||||
std::optional<std::wstring> value = settings.get_string_value(L"choice_group_name");
|
std::optional<std::wstring> value = settings.get_string_value(L"choice_group_name");
|
||||||
```
|
```
|
||||||
|
|
||||||
### Dropdown
|
## Dropdown
|
||||||

|
<table>
|
||||||
|
<tr><td align="center">
|
||||||
|
<img src="../images/settings/dropdown_1.png" width="80%">
|
||||||
|
</td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<img src="../images/settings/dropdown_2.png" width="80%">
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||

|
|
||||||
```c++
|
```c++
|
||||||
add_dropdown(name, description, value, vector<pair<wstring, UINT>> keys_and_texts)
|
add_dropdown(name, description, value, vector<pair<wstring, UINT>> keys_and_texts)
|
||||||
```
|
```
|
||||||
@ -223,8 +250,11 @@ The chosen value is stored as a string with the key of the option selected by th
|
|||||||
```c++
|
```c++
|
||||||
std::optional<std::wstring> value = settings.get_string_value(L"dropdown_name");
|
std::optional<std::wstring> value = settings.get_string_value(L"dropdown_name");
|
||||||
```
|
```
|
||||||
### Custom action
|
## Custom action
|
||||||

|
<table><tr><td align="center">
|
||||||
|
<img src="../images/settings/custom_action.png" width="80%">
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
add_custom_action(name, description, button_text, ext_description)
|
add_custom_action(name, description, button_text, ext_description)
|
||||||
```
|
```
|
||||||
@ -245,13 +275,13 @@ void ExamplePowertoy::call_custom_action(const wchar_t* action) override
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## File organization
|
# File organization
|
||||||
|
|
||||||
#### [main.cpp](/src/settings/main.cpp)
|
### [main.cpp](/src/settings/main.cpp)
|
||||||
Contains the main executable code, initializing and managing the Window containing the WebView and communication with the main PowerToys executable.
|
Contains the main executable code, initializing and managing the Window containing the WebView and communication with the main PowerToys executable.
|
||||||
|
|
||||||
#### [StreamURIResolverFromFile.cpp](/src/settings/StreamURIResolverFromFile.cpp)
|
### [StreamURIResolverFromFile.cpp](/src/settings/StreamURIResolverFromFile.cpp)
|
||||||
Defines a class implementing `IUriToStreamResolver`. Allows the WebView to navigate to filesystem files in this Win32 project.
|
Defines a class implementing `IUriToStreamResolver`. Allows the WebView to navigate to filesystem files in this Win32 project.
|
||||||
|
|
||||||
#### [settings-html/](/src/settings/settings-html/)
|
### [settings-html/](/src/settings/settings-html/)
|
||||||
Contains the assets file from building the [Web project for the Settings UI](/src/settings./settings-web). It will be loaded by the WebView.
|
Contains the assets file from building the [Web project for the Settings UI](/src/settings./settings-web). It will be loaded by the WebView.
|
||||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |