diff --git a/ChannelListWidget.cpp b/ChannelListWidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3d5b15610e301a2b1db5451b2f3c6abf1dc1435e --- /dev/null +++ b/ChannelListWidget.cpp @@ -0,0 +1,56 @@ +#include "ChannelListWidget.h" +#include <QMouseEvent> + +ChannelListWidget::ChannelListWidget() + : QTreeWidget() +{ + m_parent = new QWidget; + m_parent->setAttribute(Qt::WA_TranslucentBackground); + m_parent->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); + m_parent->setGeometry(320, 200, 1, 1); + + setHeaderHidden(true); + setExpandsOnDoubleClick(false); + setStyleSheet("padding:2px;border-radius:5px;border-style:solid;border-width:1px;border-color:rgb(100,100,100); background-color:rgba(50,50,50,150); color:rgb(255,255,255);"); + setParent(m_parent); + + resize(200, 400); + m_parent->adjustSize(); + m_parent->show(); + +} + +ChannelListWidget::~ChannelListWidget() +{ + //m_parent->deleteLater(); +} + +void ChannelListWidget::mousePressEvent(QMouseEvent * event) +{ + if (event->button() == Qt::LeftButton) + isMouseDown = true; + + QTreeWidget::mousePressEvent(event); +} + +void ChannelListWidget::mouseReleaseEvent(QMouseEvent * event) +{ + isMouseDown = false; + + QTreeWidget::mouseReleaseEvent(event); +} + +void ChannelListWidget::mouseMoveEvent(QMouseEvent * event) +{ + if (isMouseDown) + m_parent->move(event->globalPos()); + + QTreeWidget::mouseMoveEvent(event); +} + +void ChannelListWidget::resizeEvent(QResizeEvent * event) +{ + m_parent->adjustSize(); + + QTreeWidget::resizeEvent(event); +} \ No newline at end of file diff --git a/ChannelListWidget.h b/ChannelListWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..917058b5ae0b1e1f1c032f72170569f011622ca5 --- /dev/null +++ b/ChannelListWidget.h @@ -0,0 +1,26 @@ +#pragma once +#include <QWidget> +#include <QPoint> +#include <QTreeWidget> + +class ChannelListWidget : public QTreeWidget +{ + Q_OBJECT + +public: + explicit ChannelListWidget(); + ~ChannelListWidget(); + +protected: + virtual void mousePressEvent(QMouseEvent * event) Q_DECL_OVERRIDE; + virtual void mouseReleaseEvent(QMouseEvent * event) Q_DECL_OVERRIDE; + virtual void mouseMoveEvent(QMouseEvent * event) Q_DECL_OVERRIDE; + virtual void resizeEvent(QResizeEvent * event) Q_DECL_OVERRIDE; + +private: + bool isMouseDown = false; + QWidget *m_parent; + +public: + +}; diff --git a/Release/x64/qtTsOverlay_x64.dll b/Release/x64/qtTsOverlay_x64.dll index a46615c2faec9589e2e7d38f8100446e77da56f2..d7412f107431bc6c853d129accaa7c3ff2fab33c 100644 Binary files a/Release/x64/qtTsOverlay_x64.dll and b/Release/x64/qtTsOverlay_x64.dll differ diff --git a/Release/x64/qtTsOverlay_x64.exp b/Release/x64/qtTsOverlay_x64.exp index 31b386b95f748c030acc5b6f317af6286a527878..b186815c951c8029e0a54413840f8b53233adfe9 100644 Binary files a/Release/x64/qtTsOverlay_x64.exp and b/Release/x64/qtTsOverlay_x64.exp differ diff --git a/Release/x64/qtTsOverlay_x64.lib b/Release/x64/qtTsOverlay_x64.lib index 4e9a53fbdd9b2de6169ccfb0415ba531104326dd..40083ea0e4480aeef37a0e0d330c796a5ee04fa0 100644 Binary files a/Release/x64/qtTsOverlay_x64.lib and b/Release/x64/qtTsOverlay_x64.lib differ diff --git a/overlaycontroller.cpp b/overlaycontroller.cpp index bfebac1a9ac3678200d40f83981dd5a7cad84e50..687a83d476d64d72acfe8f711af0f44068481966 100644 --- a/overlaycontroller.cpp +++ b/overlaycontroller.cpp @@ -6,6 +6,7 @@ #include <qdebug.h> #include "teamspeak\public_errors.h" + //#ifndef _DEBUG //#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //#endif @@ -41,13 +42,7 @@ OverlayController::OverlayController(const struct TS3Functions funcs, quint64 se m_SCHID = serverConnectionHandlerID; - m_treeWidget = new QWidget; - m_tree = new QTreeWidget(m_treeWidget); - m_tree->setHeaderHidden(true); - m_tree->setExpandsOnDoubleClick(false); - m_treeWidget->setAttribute(Qt::WA_TranslucentBackground); - m_treeWidget->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Tool); - + m_tree = new ChannelListWidget; } OverlayController::~OverlayController() @@ -61,7 +56,7 @@ OverlayController::~OverlayController() m_msgLines.clear(); delete m_debugWindow; - delete m_treeWidget; + delete m_tree; } void OverlayController::deleteChatLine(QWidget * line) @@ -210,7 +205,7 @@ void OverlayController::reset() void OverlayController::updateChannelList() { - if (m_treeWidget->isVisible()) + if (m_tree->isVisible()) displayChannelList(); } @@ -298,6 +293,5 @@ void OverlayController::displayChannelList() m_tree->expandAll(); connect(m_tree, &QTreeWidget::itemDoubleClicked, this, &OverlayController::treeItemClicked); m_tree->adjustSize(); - m_treeWidget->adjustSize(); - m_treeWidget->show(); + m_tree->show(); } diff --git a/overlaycontroller.h b/overlaycontroller.h index c73dacaba471f28502d3e512fc17e510f7efc55e..68ba71ead35d5f54082087f76529b74db1e45f91 100644 --- a/overlaycontroller.h +++ b/overlaycontroller.h @@ -7,7 +7,7 @@ #include <QWidget> #include <QVector> #include <QLabel> -#include <QTreeWidget> +#include "ChannelListWidget.h" #define MAXLINES 5 @@ -34,8 +34,7 @@ private: QLabel* m_debugWindow; QVector<QWidget*> m_speakers; QVector<QWidget*> m_msgLines; - QTreeWidget* m_tree; - QWidget* m_treeWidget; + ChannelListWidget* m_tree; private: void deleteChatLine(QWidget* line); diff --git a/plugin.cpp b/plugin.cpp index b07c7913c876dde9d32b1409cfda13702b67c842..6552b348fad3beac606675874228c99b859aaab3 100644 --- a/plugin.cpp +++ b/plugin.cpp @@ -102,8 +102,22 @@ QString channelID2Name(uint64 serverConnectionHandlerID, uint64 channelID) return name; } -OverlayController* getController(uint64 serverConnectionHandlerID) +OverlayController* getController(uint64 serverConnectionHandlerID = 0) { + if (serverConnectionHandlerID == 0) + { + OverlayController* ret = NULL; + for (auto &it : g_serverList.keys()) + { + int tmp; + + if (ts3Functions.getClientSelfVariableAsInt(it, CLIENT_IS_MUTED, &tmp) != ERROR_ok) + if (tmp == 0) + ret = g_serverList.find(it).value(); + } + return ret; + } + auto tmp = g_serverList.find(serverConnectionHandlerID); if (tmp == g_serverList.end()) @@ -309,9 +323,7 @@ void ts3plugin_initHotkeys(struct PluginHotkey*** hotkeys) { * The keyword will be later passed to ts3plugin_onHotkeyEvent to identify which hotkey was triggered. * The description is shown in the clients hotkey dialog. */ BEGIN_CREATE_HOTKEYS(3); /* Create 3 hotkeys. Size must be correct for allocating memory. */ - CREATE_HOTKEY("keyword_1", "Test hotkey 1"); - CREATE_HOTKEY("keyword_2", "Test hotkey 2"); - CREATE_HOTKEY("keyword_3", "Test hotkey 3"); + CREATE_HOTKEY("Channellist", "Displays a simple channellist of the server"); END_CREATE_HOTKEYS; /* The client will call ts3plugin_freeMemory to release all allocated memory */ @@ -400,13 +412,6 @@ void ts3plugin_onClientMoveEvent(uint64 serverConnectionHandlerID, anyID clientI { getController(serverConnectionHandlerID)->addChatLine(QString("%1 <font size=\"-5\">connected to</font> %2").arg(ClientName).arg(newChannel)); } - else if (!ClientName.isEmpty() && !oldChannel.isEmpty() && newChannel.isEmpty()) - { - if(oldChannelID == getCurrentChannel(serverConnectionHandlerID)) - getController(serverConnectionHandlerID)->addChatLine(QString("<font color=\"#00FFFF\">%1 <font size=\"-5\">disconnected from</font> %2</font>").arg(ClientName).arg(oldChannel)); - else - getController(serverConnectionHandlerID)->addChatLine(QString("%1 <font size=\"-5\">disconnected from</font> %2").arg(ClientName).arg(oldChannel)); - } } @@ -767,7 +772,9 @@ void ts3plugin_onMenuItemEvent(uint64 serverConnectionHandlerID, enum PluginMenu /* This function is called if a plugin hotkey was pressed. Omit if hotkeys are unused. */ void ts3plugin_onHotkeyEvent(const char* keyword) { printf("PLUGIN: Hotkey event: %s\n", keyword); - /* Identify the hotkey by keyword ("keyword_1", "keyword_2" or "keyword_3" in this example) and handle here... */ + + if (QString(keyword) == "Channellist") + getController()->debugPrint("WUHU"); } /* Called when recording a hotkey has finished after calling ts3Functions.requestHotkeyInputDialog */