Files
2026-11-11 17:18:15 +00:00

125 lines
2.9 KiB
C++

#include "window.h"
#include "interface/interface.h"
#include "plugindialog.h"
Window::Window()
{
createActions();
createTrayIcon();
loadPlugins();
setIcon();
trayIcon->show();
}
void Window::loadPlugins()
{
QString pluginPath = "";
#ifdef DEVMODE
pluginPath = QCoreApplication::applicationDirPath() + "/plugins";
#else
pluginPath = "/usr/lib/ttk/plugins";
#endif
pluginsDir = QDir(pluginPath);
const auto entryList = pluginsDir.entryList(QDir::Files);
for (const QString &fileName : entryList) {
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = loader.instance();
if (plugin) {
populateMenu(plugin);
pluginFileNames += fileName;
}
}
addtrayactions();
}
void Window::changePlugin()
{
auto action = qobject_cast<QAction *>(sender());
if (!action)
return;
auto iPlugin = qobject_cast<Interface *>(action->parent());
if (!iPlugin)
return;
QWidget* output = new QWidget();
output = iPlugin->pcontent();
output->show();
}
void Window::populateMenu(QObject *plugin)
{
auto iPlugin = qobject_cast<Interface *>(plugin);
if (iPlugin)
addToMenu(plugin, iPlugin->pname(), trayIconMenu, &Window::changePlugin);
}
void Window::addToMenu(QObject *plugin, const QString &text,
QMenu *menu, Member member)
{
auto action = new QAction(text, plugin);
connect(action, &QAction::triggered, this, member);
menu->addAction(action);
}
void Window::setIcon()
{
QIcon icon = QIcon(":/images/smile.png");
setWindowIcon(icon);
trayIcon->setIcon(icon);
trayIcon->setToolTip("TTK");
}
void Window::createActions()
{
quitAction = new QAction(tr("&Quit"), this);
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
aboutAct = new QAction(tr("&About"), this);
connect(aboutAct, &QAction::triggered, this, &Window::about);
aboutQtAct = new QAction(tr("About &Qt"), this);
connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt);
aboutPluginsAct = new QAction(tr("About &Plugins"), this);
connect(aboutPluginsAct, &QAction::triggered, this, &Window::aboutPlugins);
}
void Window::about()
{
QMessageBox::about(this, tr("About TTK"),
tr("This is a wierd handy thing."));
}
void Window::aboutPlugins()
{
PluginDialog dialog(pluginsDir.path(), pluginFileNames, this);
dialog.exec();
}
void Window::addtrayactions()
{
trayIconMenu->addSeparator();
trayIconMenu->addAction(aboutAct);
trayIconMenu->addAction(aboutQtAct);
trayIconMenu->addAction(aboutPluginsAct);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);
}
void Window::createTrayIcon()
{
trayIconMenu = new QMenu(this);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
}