qvlcframe.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:7k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * qvlcframe.hpp : A few helpers
  3.  *****************************************************************************
  4.  * Copyright (C) 2006-2007 the VideoLAN team
  5.  * $Id: 39d6e55207be700c51d1a6b9938cae0d33b31d37 $
  6.  *
  7.  * Authors: Clément Stenac <zorglub@videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifndef _QVLCFRAME_H_
  24. #define _QVLCFRAME_H_
  25. #include <QWidget>
  26. #include <QDialog>
  27. #include <QSpacerItem>
  28. #include <QHBoxLayout>
  29. #include <QApplication>
  30. #include <QMainWindow>
  31. #include <QPushButton>
  32. #include <QKeyEvent>
  33. #include <QDesktopWidget>
  34. #include <QSettings>
  35. #include "qt4.hpp"
  36. class QVLCTools
  37. {
  38.    public:
  39.        /*
  40.         use this function to save a widgets screen position
  41.         only for windows / dialogs which are floating, if a
  42.         window is docked into an other - don't all this function
  43.         or it may write garbage to position info!
  44.        */
  45.        static void saveWidgetPosition( QSettings *settings, QWidget *widget)
  46.        {
  47.          settings->setValue("geometry", widget->saveGeometry());
  48.        }
  49.        static void saveWidgetPosition( intf_thread_t *p_intf,
  50.                                        const QString& configName,
  51.                                        QWidget *widget)
  52.        {
  53.          getSettings()->beginGroup( configName );
  54.          QVLCTools::saveWidgetPosition(getSettings(), widget);
  55.          getSettings()->endGroup();
  56.        }
  57.        /*
  58.          use this method only for restoring window state of non docked
  59.          windows!
  60.        */
  61.        static bool restoreWidgetPosition(QSettings *settings,
  62.                                            QWidget *widget,
  63.                                            QSize defSize = QSize( 0, 0 ),
  64.                                            QPoint defPos = QPoint( 0, 0 ))
  65.        {
  66.           if(!widget->restoreGeometry(settings->value("geometry")
  67.                                       .toByteArray()))
  68.           {
  69.             widget->move(defPos);
  70.             widget->resize(defSize);
  71.             if(defPos.x() == 0 && defPos.y()==0)
  72.                centerWidgetOnScreen(widget);
  73.             return true;
  74.           }
  75.           return false;
  76.        }
  77.        static bool restoreWidgetPosition( intf_thread_t *p_intf,
  78.                                            const QString& configName,
  79.                                            QWidget *widget,
  80.                                            QSize defSize = QSize( 0, 0 ),
  81.                                            QPoint defPos = QPoint( 0, 0 ) )
  82.        {
  83.          getSettings()->beginGroup( configName );
  84.          bool defaultUsed = QVLCTools::restoreWidgetPosition( getSettings(),
  85.                                                                    widget,
  86.                                                                    defSize,
  87.                                                                    defPos);
  88.          getSettings()->endGroup();
  89.          return defaultUsed;
  90.        }
  91.       /*
  92.         call this method for a window or dialog to show it centred on
  93.         current screen
  94.       */
  95.       static void centerWidgetOnScreen(QWidget *widget)
  96.       {
  97.          QDesktopWidget * const desktop = QApplication::desktop();
  98.          QRect screenRect = desktop->availableGeometry(widget);
  99.          QPoint p1 = widget->frameGeometry().center();
  100.          widget->move ( screenRect.center() - p1 );
  101.       }
  102. };
  103. class QVLCFrame : public QWidget
  104. {
  105. public:
  106. #ifdef __APPLE__
  107.     QVLCFrame( intf_thread_t *_p_intf ) : QWidget( NULL, Qt::Window ), p_intf( _p_intf )
  108. #else
  109.     QVLCFrame( intf_thread_t *_p_intf ) : QWidget( NULL ), p_intf( _p_intf )
  110. #endif
  111.     {};
  112.     virtual ~QVLCFrame()   {};
  113.     void toggleVisible()
  114.     {
  115.         if( isVisible() ) hide();
  116.         else show();
  117.     }
  118. protected:
  119.     intf_thread_t *p_intf;
  120.     void readSettings( const QString& name,
  121.                        QSize defSize = QSize( 1, 1 ),
  122.                        QPoint defPos = QPoint( 0, 0 ) )
  123.     {
  124.         QVLCTools::restoreWidgetPosition(p_intf, name, this, defSize, defPos);
  125.     }
  126.     void writeSettings( const QString& name )
  127.     {
  128.         QVLCTools::saveWidgetPosition( p_intf, name, this);
  129.     }
  130.     virtual void cancel()
  131.     {
  132.         hide();
  133.     }
  134.     virtual void close()
  135.     {
  136.         hide();
  137.     }
  138.     virtual void keyPressEvent( QKeyEvent *keyEvent )
  139.     {
  140.         if( keyEvent->key() == Qt::Key_Escape )
  141.         {
  142.             this->cancel();
  143.         }
  144.         else if( keyEvent->key() == Qt::Key_Return
  145.               || keyEvent->key() == Qt::Key_Enter )
  146.         {
  147.              this->close();
  148.         }
  149.     }
  150. };
  151. class QVLCDialog : public QDialog
  152. {
  153. public:
  154.     QVLCDialog( QWidget* parent, intf_thread_t *_p_intf ) :
  155.                                     QDialog( parent ), p_intf( _p_intf )
  156.     {}
  157.     virtual ~QVLCDialog() {};
  158.     void toggleVisible()
  159.     {
  160.         if( isVisible() ) hide();
  161.         else show();
  162.     }
  163. protected:
  164.     intf_thread_t *p_intf;
  165.     virtual void cancel()
  166.     {
  167.         hide();
  168.     }
  169.     virtual void close()
  170.     {
  171.         hide();
  172.     }
  173.     virtual void keyPressEvent( QKeyEvent *keyEvent )
  174.     {
  175.         if( keyEvent->key() == Qt::Key_Escape )
  176.         {
  177.             this->cancel();
  178.         }
  179.         else if( keyEvent->key() == Qt::Key_Return
  180.               || keyEvent->key() == Qt::Key_Enter )
  181.         {
  182.             this->close();
  183.         }
  184.     }
  185. };
  186. class QVLCMW : public QMainWindow
  187. {
  188. public:
  189.     QVLCMW( intf_thread_t *_p_intf ) : QMainWindow( NULL ), p_intf( _p_intf )
  190.     {    }
  191.     virtual ~QVLCMW() {};
  192.     void toggleVisible()
  193.     {
  194.         if( isVisible() ) hide();
  195.         else show();
  196.     }
  197. protected:
  198.     intf_thread_t *p_intf;
  199.     QSize mainSize;
  200.     void readSettings( const QString& name, QSize defSize )
  201.     {
  202.         QVLCTools::restoreWidgetPosition( p_intf, name, this, defSize);
  203.     }
  204.     void readSettings( const QString& name )
  205.     {
  206.         QVLCTools::restoreWidgetPosition( p_intf, name, this);
  207.     }
  208.     void readSettings( QSettings *settings )
  209.     {
  210.         QVLCTools::restoreWidgetPosition(settings, this);
  211.     }
  212.     void readSettings( QSettings *settings, QSize defSize)
  213.     {
  214.         QVLCTools::restoreWidgetPosition(settings, this, defSize);
  215.     }
  216.     void writeSettings( const QString& name )
  217.     {
  218.         QVLCTools::saveWidgetPosition( p_intf, name, this);
  219.     }
  220.     void writeSettings(QSettings *settings )
  221.     {
  222.         QVLCTools::saveWidgetPosition(settings, this);
  223.     }
  224. };
  225. #endif