]> Some of my projects - aniplayer-old.git/commitdiff
Add encryption settings, frameless & overlay mode and tray icon.
authorAPTX <marek321@gmail.com>
Fri, 6 Jan 2012 19:04:58 +0000 (20:04 +0100)
committerAPTX <marek321@gmail.com>
Fri, 6 Jan 2012 19:04:58 +0000 (20:04 +0100)
src/anidbconfigdialog.cpp
src/anidbconfigdialog.h
src/anidbconfigdialog.ui
src/aniplayer.cpp
src/aniplayer.qrc [new file with mode: 0644]
src/src.pro
src/videowidget.cpp
src/videowidget.h
src/videowindow.cpp
src/videowindow.h

index 806c41f035896b0cca4e102b26a35506be742ee2..bac4241d1af6246ac2060b3c7fa797cfa0d72742 100644 (file)
@@ -59,6 +59,26 @@ void AniDBConfigDialog::setPass(const QString &pass)
        m_ui->pass->setText(pass);
 }
 
+bool AniDBConfigDialog::encryption() const
+{
+       return m_ui->encryption->isChecked();
+}
+
+void AniDBConfigDialog::setEncryption(bool enabled)
+{
+       m_ui->encryption->setChecked(enabled);
+}
+
+QString AniDBConfigDialog::apiKey()
+{
+       return m_ui->apiKey->text();
+}
+
+void AniDBConfigDialog::setApiKey(const QString &apiKey)
+{
+       m_ui->apiKey->setText(apiKey);
+}
+
 int AniDBConfigDialog::automark() const
 {
        return m_ui->automark->value();
index 4e7d70f602d6899d59e4336a4142b38b3d282d5f..73a36bc4780753952ebbf0f1d416a9f5b3af29bd 100644 (file)
@@ -29,6 +29,12 @@ public:
        QString pass() const;
        void setPass(const QString &pass);
 
+       bool encryption() const;
+       void setEncryption(bool enabled);
+
+       QString apiKey();
+       void setApiKey(const QString &apiKey);
+
        int automark() const;
        void setAutomark(int percent);
 
index 9f7a599116c071ef7bb52d94cf909f5658d9f2ff..3cbae3a339cdac36e3f5dc6c22e146790a814c4b 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>280</width>
-    <height>348</height>
+    <width>302</width>
+    <height>407</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -19,7 +19,7 @@
      <property name="title">
       <string>AniDB Connection Settings</string>
      </property>
-     <layout class="QFormLayout" name="formLayout_2">
+     <layout class="QFormLayout" name="formLayout_4">
       <item row="0" column="0">
        <widget class="QLabel" name="lHost">
         <property name="text">
@@ -93,7 +93,7 @@
        <widget class="QLineEdit" name="user"/>
       </item>
       <item row="4" column="0">
-       <widget class="QLabel" name="pPass">
+       <widget class="QLabel" name="lPass">
         <property name="text">
          <string>Password:</string>
         </property>
      </layout>
     </widget>
    </item>
+   <item>
+    <widget class="QGroupBox" name="encryption">
+     <property name="title">
+      <string>Encryption</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <property name="checked">
+      <bool>false</bool>
+     </property>
+     <layout class="QFormLayout" name="formLayout_2">
+      <item row="0" column="0">
+       <widget class="QLabel" name="lApiKey">
+        <property name="text">
+         <string>API Key:</string>
+        </property>
+        <property name="buddy">
+         <cstring>apiKey</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="apiKey">
+        <property name="echoMode">
+         <enum>QLineEdit::Password</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <widget class="QGroupBox" name="groupBox_2">
      <property name="title">
   <tabstop>localPort</tabstop>
   <tabstop>user</tabstop>
   <tabstop>pass</tabstop>
-  <tabstop>groupBox_2</tabstop>
+  <tabstop>encryption</tabstop>
+  <tabstop>apiKey</tabstop>
   <tabstop>automark</tabstop>
   <tabstop>paths</tabstop>
   <tabstop>opSkip</tabstop>
    <slot>accept()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>266</x>
-     <y>338</y>
+     <x>292</x>
+     <y>397</y>
     </hint>
     <hint type="destinationlabel">
-     <x>157</x>
+     <x>426</x>
      <y>274</y>
     </hint>
    </hints>
    <slot>reject()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>270</x>
-     <y>338</y>
+     <x>292</x>
+     <y>397</y>
     </hint>
     <hint type="destinationlabel">
-     <x>279</x>
+     <x>548</x>
      <y>274</y>
     </hint>
    </hints>
index f7d18b31cbdce9fd11380dd3c2f666304ec965ca..f34ffd2fd56a61fad947eb6655ef519d1f48c693 100644 (file)
@@ -7,6 +7,8 @@
 
 #include <QDebug>
 
+#include <windows.h>
+
 AniPlayer::AniPlayer(int &argc, char *argv[]) : QtSingleApplication(argc, argv)
 {
        m_instance = this;
diff --git a/src/aniplayer.qrc b/src/aniplayer.qrc
new file mode 100644 (file)
index 0000000..4d8ed66
--- /dev/null
@@ -0,0 +1,3 @@
+<RCC>
+    <qresource prefix="/"/>
+</RCC>
index 6a61ef6f943b9e3993e55428c9c81b0c35ec524d..4ec033b964ec10654dd92a4d887a48a490f036ab 100644 (file)
@@ -40,7 +40,10 @@ HEADERS += menu.h \
 FORMS += menu.ui \
     anidbconfigdialog.ui \
        episodevotedialog.ui
-win32:RC_FILE += aniplayer.rc
+win32 {
+       RC_FILE += aniplayer.rc
+       LIBS += -luser32 -lgdi32
+}
 browserplugin { 
     # CONFIG += qaxserver
     include(../lib/browserplugin-solution/src/qtbrowserplugin.pri)
@@ -82,3 +85,7 @@ include(../lib/qtsingleapplication/src/qtsingleapplication.pri)
 OBJECTS_DIR = ../.tmp/obj
 MOC_DIR = ../.tmp/moc
 RCC_DIR = ../.tmp/rcc
+
+RESOURCES += \
+       ../resource/aniplayer.qrc
+
index 606ee36128ef3b19979908220d87786b2afc744d..009a83348b98a49ec5f9b0999f06b783c12ad716 100644 (file)
@@ -18,6 +18,31 @@ void VideoWidget::toggleFullScreen()
 
 void VideoWidget::mousePressEvent(QMouseEvent *event)
 {
+       if (!isFullScreen())
+       {
+               event->ignore();
+               return;
+       }
+       event->accept();
+}
+
+void VideoWidget::mouseMoveEvent(QMouseEvent *event)
+{
+       if (!isFullScreen())
+       {
+               event->ignore();
+               return;
+       }
+       event->accept();
+}
+
+void VideoWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+       if (!isFullScreen())
+       {
+               event->ignore();
+               return;
+       }
        if (event->button() == Qt::LeftButton)
                emit menuToggleRequested();
 #ifndef Q_WS_X11
@@ -27,7 +52,8 @@ void VideoWidget::mousePressEvent(QMouseEvent *event)
 #      endif
 #endif
        else
-               Phonon::VideoWidget::mousePressEvent(event);
+               return Phonon::VideoWidget::mouseReleaseEvent(event);
+       event->accept();
 }
 
 void VideoWidget::wheelEvent(QWheelEvent *event)
index d1e3ec1febb37031528803a87284cfeec1a2cb75..d1442966ec7d4a3b9d21c263e018a417c0a39e9e 100644 (file)
@@ -23,6 +23,8 @@ signals:
 
 protected:
        void mousePressEvent(QMouseEvent *event);
+       void mouseMoveEvent(QMouseEvent *event);
+       void mouseReleaseEvent(QMouseEvent *event);
        void wheelEvent(QWheelEvent *event);
        void closeEvent(QCloseEvent *event);
 };
index a86828d2f2c16b641b1d1eb5b0a2f3c3f4014c1b..81140599506cf69e4b13d857b8ee9a28ce24e47e 100644 (file)
@@ -12,6 +12,8 @@
 #include <QSettings>
 #include <QStyle>
 #include <QDesktopServices>
+#include <QSystemTrayIcon>
+#include <QMenu>
 #include <QPixmap>
 
 #include "menu.h"
 
 #include <QDebug>
 
+#ifdef Q_OS_WIN
+#      include <windows.h>
+#endif
+
 VideoWindow::VideoWindow(QWidget *parent) : QMainWindow(parent)
 #ifdef BROWSERPLUGIN_BUILD
        , QtNPBindable()
@@ -49,6 +55,8 @@ VideoWindow::VideoWindow(QWidget *parent) : QMainWindow(parent)
        m_automark = 0;
 #endif
 
+       tray = new QSystemTrayIcon(this);
+
        videoPlayer = new VideoPlayer(this, this);
 
 #ifdef GRAPHICS_VIEW_VIDEO
@@ -87,9 +95,13 @@ VideoWindow::VideoWindow(QWidget *parent) : QMainWindow(parent)
 #ifndef BROWSERPLUGIN_BUILD
        addAction("togglePinMenu", "Pin Menu",  QKeySequence(), true);
        addAction("toggleStayOnTop", "Stay on top", QKeySequence("T"), true);
+       addAction("toggleFrameless", "Frameless", QKeySequence("Y"), true);
+       addAction("toggleOverlay", "Overlay", QKeySequence("U"), true);
 
        m_actions["togglePinMenu"]->setChecked(true);
        m_actions["toggleStayOnTop"]->setChecked(false);
+       m_actions["toggleFrameless"]->setChecked(false);
+       m_actions["toggleOverlay"]->setChecked(false);
 #endif
 #ifndef NO_ANIDBUDPCLIENT
        addAction("markWatched", "Mark Watched", QKeySequence("CTRL+M"));
@@ -99,6 +111,10 @@ VideoWindow::VideoWindow(QWidget *parent) : QMainWindow(parent)
 
        menu = new Menu(this);
        menu->addActions(QWidget::actions());
+       tray->setContextMenu(new QMenu);
+       tray->contextMenu()->addActions(QWidget::actions());
+       tray->setIcon(QIcon(":/icon.png"));
+       tray->show();
 
 #ifdef GRAPHICS_VIEW_VIDEO
        videoSceneMenu = new Menu();
@@ -130,6 +146,8 @@ VideoWindow::VideoWindow(QWidget *parent) : QMainWindow(parent)
        connect(m_actions["togglePlay"], SIGNAL(triggered()), videoPlayer, SLOT(togglePlay()));
        connect(m_actions["togglePinMenu"], SIGNAL(toggled(bool)), this, SLOT(setPinMenu(bool)));
        connect(m_actions["toggleStayOnTop"], SIGNAL(toggled(bool)), this, SLOT(toggleStayOnTop()));
+       connect(m_actions["toggleFrameless"], SIGNAL(toggled(bool)), this, SLOT(toggleFrameless()));
+       connect(m_actions["toggleOverlay"], SIGNAL(toggled(bool)), this, SLOT(toggleOverlay()));
 #endif
        connect(m_actions["pause"], SIGNAL(triggered()), videoPlayer, SLOT(pause()));
        connect(m_actions["stop"], SIGNAL(triggered()), videoPlayer, SLOT(stop()));
@@ -169,7 +187,6 @@ VideoWindow::VideoWindow(QWidget *parent) : QMainWindow(parent)
        AniDBUdpClient::Client::instance()->setCompression(true);
        AniDBUdpClient::Client::instance()->setIdlePolicy(AniDBUdpClient::ImmediateLogoutIdlePolicy);
 #endif
-
 }
 
 VideoWindow::~VideoWindow()
@@ -331,13 +348,17 @@ void VideoWindow::setPinMenu(bool pinned)
 
 void VideoWindow::toggleStayOnTop()
 {
-       setWindowFlags(windowFlags() ^ Qt::WindowStaysOnTopHint);
-#ifdef Q_WS_X11
-       bool menuVisible = menu->isVisible();
-       menu->setWindowFlags(menu->windowFlags() ^ Qt::WindowStaysOnTopHint);
-       menu->setVisible(menuVisible);
-#endif
-       show();
+       updateWindowFlags();
+}
+
+void VideoWindow::toggleFrameless()
+{
+       updateWindowFlags();
+}
+
+void VideoWindow::toggleOverlay()
+{
+       updateWindowFlags();
 }
 
 void VideoWindow::about()
@@ -437,6 +458,36 @@ void VideoWindow::tick(qint64 time)
 
 void VideoWindow::mousePressEvent(QMouseEvent *event)
 {
+       if (event->button() == Qt::LeftButton)
+       {
+               dragPosition = event->globalPos() - frameGeometry().topLeft();
+               dragged = true;
+               event->accept();
+       }
+}
+
+void VideoWindow::mouseMoveEvent(QMouseEvent *event)
+{
+       mouseMoved = true;
+       if (!dragged)
+               return;
+
+       if (event->buttons() & Qt::LeftButton)
+       {
+               move(event->globalPos() - dragPosition);
+               event->accept();
+       }
+}
+
+void VideoWindow::mouseReleaseEvent(QMouseEvent *event)
+{
+       dragged = false;
+       if (mouseMoved)
+       {
+               mouseMoved = false;
+               return;
+       }
+
        if (event->button() == Qt::LeftButton)
        {
                toggleMenu();
@@ -475,7 +526,7 @@ void VideoWindow::mousePressEvent(QMouseEvent *event)
        }
        else
        {
-               QMainWindow::mousePressEvent(event);
+               QMainWindow::mouseReleaseEvent(event);
        }
 }
 
@@ -596,6 +647,8 @@ void VideoWindow::anidbSettings()
        dialog.setLocalPort(AniDBUdpClient::Client::instance()->localPort());
        dialog.setUser(AniDBUdpClient::Client::instance()->user());
        dialog.setPass(AniDBUdpClient::Client::instance()->pass());
+       dialog.setEncryption(AniDBUdpClient::Client::instance()->encryptionEnabled());
+       dialog.setApiKey(AniDBUdpClient::Client::instance()->apiKey());
        dialog.setAutomark(m_automark);
        dialog.setPaths(m_automarkPaths);
        dialog.setOpSkip(m_opSkip);
@@ -612,6 +665,8 @@ void VideoWindow::anidbSettings()
        AniDBUdpClient::Client::instance()->setLocalPort(dialog.localPort());
        AniDBUdpClient::Client::instance()->setUser(dialog.user());
        AniDBUdpClient::Client::instance()->setPass(dialog.pass());
+       AniDBUdpClient::Client::instance()->setEncryptionEnabled(dialog.encryption());
+       AniDBUdpClient::Client::instance()->setApiKey(dialog.apiKey());
        m_automark = dialog.automark();
        m_automarkPaths = dialog.paths();
        m_opSkip = dialog.opSkip();
@@ -695,6 +750,7 @@ void VideoWindow::saveSettings()
        settings.beginGroup("videoWindow");
                settings.setValue("geometry", saveGeometry());
                settings.setValue("stayOnTop", m_actions["toggleStayOnTop"]->isChecked());
+               settings.setValue("frameless", m_actions["toggleFrameless"]->isChecked());
        settings.endGroup();
        settings.beginGroup("menu");
                settings.setValue("geometry", menu->saveGeometry());
@@ -708,6 +764,8 @@ void VideoWindow::saveSettings()
                settings.setValue("localPort", AniDBUdpClient::Client::instance()->localPort());
                settings.setValue("user", AniDBUdpClient::Client::instance()->user());
                settings.setValue("pass", AniDBUdpClient::Client::instance()->pass());
+               settings.setValue("encryption", AniDBUdpClient::Client::instance()->encryptionEnabled());
+               settings.setValue("apiKey", AniDBUdpClient::Client::instance()->apiKey());
                settings.setValue("automark", m_automark);
                settings.setValue("paths", m_automarkPaths);
        settings.endGroup();
@@ -730,6 +788,7 @@ void VideoWindow::loadSettings()
        settings.beginGroup("videoWindow");
                restoreGeometry(settings.value("geometry", saveGeometry()).toByteArray());
                m_actions["toggleStayOnTop"]->setChecked(settings.value("stayOnTop", false).toBool());
+               m_actions["toggleFrameless"]->setChecked(settings.value("frameless", false).toBool());
        settings.endGroup();
        settings.beginGroup("menu");
                menu->restoreState(settings.value("state", menu->saveState()).toByteArray());
@@ -743,6 +802,8 @@ void VideoWindow::loadSettings()
                AniDBUdpClient::Client::instance()->setLocalPort(settings.value("localPort", 9001).toInt());
                AniDBUdpClient::Client::instance()->setUser(settings.value("user").toString());
                AniDBUdpClient::Client::instance()->setPass(settings.value("pass").toString());
+               AniDBUdpClient::Client::instance()->setEncryptionEnabled(settings.value("encryption").toBool());
+               AniDBUdpClient::Client::instance()->setApiKey(settings.value("apiKey").toString());
                m_automark = settings.value("automark", 0).toInt();
                m_automarkPaths = settings.value("paths", QStringList()).toStringList();
        settings.endGroup();
@@ -777,6 +838,41 @@ void VideoWindow::updateCursor()
 #endif
 }
 
+void VideoWindow::updateWindowFlags()
+{
+       if (m_actions["toggleStayOnTop"]->isChecked())
+               setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
+       else
+               setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint);
+
+#ifdef Q_WS_X11
+       bool menuVisible = menu->isVisible();
+       menu->setWindowFlags(menu->windowFlags() ^ Qt::WindowStaysOnTopHint);
+       menu->setVisible(menuVisible);
+#endif
+
+       if (m_actions["toggleFrameless"]->isChecked())
+               setWindowFlags((windowFlags() & (Qt::Window | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)) | Qt::FramelessWindowHint);
+       else
+               setWindowFlags((windowFlags() & (Qt::Window | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)) & ~Qt::FramelessWindowHint);
+
+
+#ifdef Q_OS_WIN
+       if (m_actions["toggleOverlay"]->isChecked())
+       {
+               setWindowOpacity(.5);
+               SetWindowLongPtr(winId(), GWL_EXSTYLE, GetWindowLongPtr(winId(), GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TRANSPARENT);
+       }
+       else
+       {
+               setWindowOpacity(1);
+               SetWindowLongPtr(winId(), GWL_EXSTYLE, GetWindowLongPtr(winId(), GWL_EXSTYLE) & ~WS_EX_TRANSPARENT);
+       }
+#endif
+
+       show();
+}
+
 #ifdef BROWSERPLUGIN_BUILD
 bool VideoWindow::readData(QIODevice *source, const QString &format)
 {
index 25ca4c14a1f50c9a0b54fbcae0a40a578ffa5195..5d00f46141aa0100b9bb678d5187a57574889ca5 100644 (file)
@@ -33,6 +33,7 @@
 #      include <AniDBUdpClient/File>
 #endif
 
+class QSystemTrayIcon;
 class VideoPlayer;
 class VideoWidget;
 class Menu;
@@ -77,16 +78,19 @@ public slots:
        void resizeToVideo();
        void setPinMenu(bool pinned);
        void toggleStayOnTop();
-
+       void toggleFrameless();
+       void toggleOverlay();
        void about();
 
 protected:
 
-       virtual void mousePressEvent(QMouseEvent *event);
+       void mousePressEvent(QMouseEvent *event);
+       void mouseMoveEvent(QMouseEvent *event);
+       void mouseReleaseEvent(QMouseEvent *event);
 
-       virtual void moveEvent(QMoveEvent *event);
-       virtual void resizeEvent(QResizeEvent *event);
-       virtual void wheelEvent(QWheelEvent *event);
+       void moveEvent(QMoveEvent *event);
+       void resizeEvent(QResizeEvent *event);
+       void wheelEvent(QWheelEvent *event);
 
        void updateMenuPosition();
 
@@ -119,6 +123,8 @@ private:
        void updateWindowTitle(const QFileInfo &file = QFileInfo());
        void updateCursor();
 
+       void updateWindowFlags();
+
        Menu *menu;
 #ifdef GRAPHICS_VIEW_VIDEO
        Menu *videoSceneMenu;
@@ -141,6 +147,9 @@ private:
        bool destroyed;
        bool windowMoving;
        bool menuMoving;
+       bool mouseMoved;
+       QPoint dragPosition;
+       bool dragged;
 #ifdef Q_WS_X11
        bool menuVisible;
 #endif
@@ -158,11 +167,12 @@ private:
 
        DirectoryPlaylist *playlist;
 
+       QSystemTrayIcon *tray;
 
 #ifdef BROWSERPLUGIN_BUILD
        virtual bool readData( QIODevice *source, const QString &format);
        bool m_endBrowserStreamRead;
-#endif
+#endif 
 };
 
 #endif // VIDEOWINDOW_H