I have been using Launchy for last 15 years since it was first released in 2005. I has been an awesome companion since then and saved me tons of time. Simple press Alt + Space and enter the name of the program you want execute and voila! It allowed skins and specifying directories to include in search and filter the folders based on extensions. Launchy had everything I could have asked. However, it doesn’t work with Windows 10 store apps and it was last updated in 2010 so there are no new updated or patches since then.
Recently, Microsoft released Power Toys as opensource tool on Github. One of the included tools is PowerToys Run. It has the same core functions plus more other added goodies such as “Open containing folder”, “Run as administrator”, and “Open path in console” which I fund quite useful. My only complaint with PowerToys Run is that it doesn’t allow customs paths and instead uses Windows Search Index.
SLogLib is a flexible logging library written in C++. It comes with three logging devices: console, file, and memory but often there is a need to show log directly on the user interface. I heavily use Qt for all projects requiring user interface, so I wrote a logging device for QWidget
. It is available in SLogLib
repository in the Contrib/QWidgetLogger
folder.
Here is how to use the QWidgetLogger:
QWidgetLogger* logger = new QWidgetLogger(new HtmlFormatter(), "WidgetLogger"); SLogLib::addLoggingDevice(logger);
Once above code is added, any of the SLOGLIB_LOG_MSG_*
logging macros will write to the QWidgetLogger
as well as any other loggers added to SLogLib. QWidgetLogger
internally uses SLogTextEdit
class derived from QTextEdit
. Instance of SLogTextEdit
used by QWidgetLogger
can be retrieved by QWidgetLogger::widget() function. This instance should be added to the UI to show the logging messages. QDockWidget
is a good choice to show logging widget with QMainWindow
.
SLogTextEdit
sets a monospace 10 point font and it can be changed using style sheet. The color and style of the messages logged can also be changed using the Formatter
. The HtmlFormatter
used in the example above define different colors for different types of logging messages using HTML codes.
In Qt, UI elements can only be updated from the main thread but the logging messages might come from any thread. So SLogTextEdit
checks if the message was posted from the main thread or some other worker thread. If the message was posted from a worker thread, SLogTextEdit
emits a signal to only of its own private slot and updates itself in the slot. In Qt slots always run in the context of the main thread. This method works well but signal and slot mechanism is slow and update to widget lags while logging too many messages in a short period of time.
Recently, I worked on a project which made heavy use of C++ threads. To use SLogLib in this project I added multi-threaded support in SLogLib with the help of c++ 11 std::mutex
and std::lock_guard
. Over the last few months multi-threaded support in SLogLib has been extensively tested and there are no known bugs.
All threading support is located in LoggingManager.cpp. The functions which modify internal state in LoggingManager are protected by std::mutex. There is a support for building call stack through the use of SLOGLIB_ADD_TO_CALLSTACK
macro. In the latest build, there is a separate callstack for each thread.
Checkout the latest commit from https://github.com/saurabhg17/SLogLib.