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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * customwidgets.cpp: Custom widgets
  3.  ****************************************************************************
  4.  * Copyright (C) 2006 the VideoLAN team
  5.  * Copyright (C) 2004 Daniel Molkentin <molkentin@kde.org>
  6.  * $Id: 66583435b7eceb68577189ad187f895655407a45 $
  7.  *
  8.  * Authors: Clément Stenac <zorglub@videolan.org>
  9.  * The "ClickLineEdit" control is based on code by  Daniel Molkentin
  10.  * <molkentin@kde.org> for libkdepim
  11.  *
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2 of the License, or
  15.  * (at your option) any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  25.  *****************************************************************************/
  26. #ifdef HAVE_CONFIG_H
  27. # include "config.h"
  28. #endif
  29. #include "customwidgets.hpp"
  30. #include "qt4.hpp" /*needed for qtr and CONNECT, but not necessary */
  31. #include <QPainter>
  32. #include <QLineEdit>
  33. #include <QColorGroup>
  34. #include <QRect>
  35. #include <QKeyEvent>
  36. #include <QWheelEvent>
  37. #include <QToolButton>
  38. #include <QHBoxLayout>
  39. #include <vlc_intf_strings.h>
  40. #include <vlc_keys.h>
  41. ClickLineEdit::ClickLineEdit( const QString &msg, QWidget *parent) : QLineEdit( parent )
  42. {
  43.     mDrawClickMsg = true;
  44.     setClickMessage( msg );
  45. }
  46. void ClickLineEdit::setClickMessage( const QString &msg )
  47. {
  48.     mClickMessage = msg;
  49.     repaint();
  50. }
  51. void ClickLineEdit::setText( const QString &txt )
  52. {
  53.     mDrawClickMsg = txt.isEmpty();
  54.     repaint();
  55.     QLineEdit::setText( txt );
  56. }
  57. void ClickLineEdit::paintEvent( QPaintEvent *pe )
  58. {
  59.     QLineEdit::paintEvent( pe );
  60.     if ( mDrawClickMsg == true && !hasFocus() ) {
  61.         QPainter p( this );
  62.         QPen tmp = p.pen();
  63.         p.setPen( palette().color( QPalette::Disabled, QPalette::Text ) );
  64.         QRect cr = contentsRect();
  65.         // Add two pixel margin on the left side
  66.         cr.setLeft( cr.left() + 3 );
  67.         p.drawText( cr, Qt::AlignLeft | Qt::AlignVCenter, mClickMessage );
  68.         p.setPen( tmp );
  69.         p.end();
  70.     }
  71. }
  72. void ClickLineEdit::dropEvent( QDropEvent *ev )
  73. {
  74.     mDrawClickMsg = false;
  75.     QLineEdit::dropEvent( ev );
  76. }
  77. void ClickLineEdit::focusInEvent( QFocusEvent *ev )
  78. {
  79.     if ( mDrawClickMsg == true ) {
  80.         mDrawClickMsg = false;
  81.         repaint();
  82.     }
  83.     QLineEdit::focusInEvent( ev );
  84. }
  85. void ClickLineEdit::focusOutEvent( QFocusEvent *ev )
  86. {
  87.     if ( text().isEmpty() ) {
  88.         mDrawClickMsg = true;
  89.         repaint();
  90.     }
  91.     QLineEdit::focusOutEvent( ev );
  92. }
  93. SearchLineEdit::SearchLineEdit( QWidget *parent ) : QFrame( parent )
  94. {
  95.     setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
  96.     setLineWidth( 0 );
  97.     QHBoxLayout *frameLayout = new QHBoxLayout( this );
  98.     frameLayout->setMargin( 0 );
  99.     frameLayout->setSpacing( 0 );
  100.     QPalette palette;
  101.     QBrush brush( QColor(255, 255, 255, 255) );
  102.     brush.setStyle(Qt::SolidPattern);
  103.     palette.setBrush(QPalette::Active, QPalette::Window, brush); //Qt::white
  104.     setPalette(palette);
  105.     setAutoFillBackground(true);
  106.     searchLine = new  ClickLineEdit( qtr(I_PL_FILTER), 0 );
  107.     searchLine->setFrame( false );
  108.     searchLine->setMinimumWidth( 80 );
  109.     CONNECT( searchLine, textChanged( const QString& ),
  110.              this, updateText( const QString& ) );
  111.     frameLayout->addWidget( searchLine );
  112.     clearButton = new QToolButton;
  113.     clearButton->setAutoRaise( true );
  114.     clearButton->setMaximumWidth( 30 );
  115.     clearButton->setIcon( QIcon( ":/clear" ) );
  116.     clearButton->setToolTip( qtr( "Clear" ) );
  117.     clearButton->hide();
  118.     CONNECT( clearButton, clicked(), searchLine, clear() );
  119.     frameLayout->addWidget( clearButton );
  120. }
  121. void SearchLineEdit::updateText( const QString& text )
  122. {
  123.     clearButton->setVisible( !text.isEmpty() );
  124.     emit textChanged( text );
  125. }
  126. /***************************************************************************
  127.  * Hotkeys converters
  128.  ***************************************************************************/
  129. int qtKeyModifiersToVLC( QInputEvent* e )
  130. {
  131.     int i_keyModifiers = 0;
  132.     if( e->modifiers() & Qt::ShiftModifier ) i_keyModifiers |= KEY_MODIFIER_SHIFT;
  133.     if( e->modifiers() & Qt::AltModifier ) i_keyModifiers |= KEY_MODIFIER_ALT;
  134.     if( e->modifiers() & Qt::ControlModifier ) i_keyModifiers |= KEY_MODIFIER_CTRL;
  135.     if( e->modifiers() & Qt::MetaModifier ) i_keyModifiers |= KEY_MODIFIER_META;
  136.     return i_keyModifiers;
  137. }
  138. int qtEventToVLCKey( QKeyEvent *e )
  139. {
  140.     int i_vlck = 0;
  141.     /* Handle modifiers */
  142.     i_vlck |= qtKeyModifiersToVLC( e );
  143.     bool found = false;
  144.     /* Look for some special keys */
  145. #define HANDLE( qt, vk ) case Qt::qt : i_vlck |= vk; found = true;break
  146.     switch( e->key() )
  147.     {
  148.         HANDLE( Key_Left, KEY_LEFT );
  149.         HANDLE( Key_Right, KEY_RIGHT );
  150.         HANDLE( Key_Up, KEY_UP );
  151.         HANDLE( Key_Down, KEY_DOWN );
  152.         HANDLE( Key_Space, KEY_SPACE );
  153.         HANDLE( Key_Escape, KEY_ESC );
  154.         HANDLE( Key_Return, KEY_ENTER );
  155.         HANDLE( Key_Enter, KEY_ENTER );
  156.         HANDLE( Key_F1, KEY_F1 );
  157.         HANDLE( Key_F2, KEY_F2 );
  158.         HANDLE( Key_F3, KEY_F3 );
  159.         HANDLE( Key_F4, KEY_F4 );
  160.         HANDLE( Key_F5, KEY_F5 );
  161.         HANDLE( Key_F6, KEY_F6 );
  162.         HANDLE( Key_F7, KEY_F7 );
  163.         HANDLE( Key_F8, KEY_F8 );
  164.         HANDLE( Key_F9, KEY_F9 );
  165.         HANDLE( Key_F10, KEY_F10 );
  166.         HANDLE( Key_F11, KEY_F11 );
  167.         HANDLE( Key_F12, KEY_F12 );
  168.         HANDLE( Key_PageUp, KEY_PAGEUP );
  169.         HANDLE( Key_PageDown, KEY_PAGEDOWN );
  170.         HANDLE( Key_Home, KEY_HOME );
  171.         HANDLE( Key_End, KEY_END );
  172.         HANDLE( Key_Insert, KEY_INSERT );
  173.         HANDLE( Key_Delete, KEY_DELETE );
  174.         HANDLE( Key_VolumeDown, KEY_VOLUME_DOWN);
  175.         HANDLE( Key_VolumeUp, KEY_VOLUME_UP );
  176.         HANDLE( Key_VolumeMute, KEY_VOLUME_MUTE );
  177.         HANDLE( Key_MediaPlay, KEY_MEDIA_PLAY_PAUSE );
  178.         HANDLE( Key_MediaStop, KEY_MEDIA_STOP );
  179.         HANDLE( Key_MediaPrevious, KEY_MEDIA_PREV_TRACK );
  180.         HANDLE( Key_MediaNext, KEY_MEDIA_NEXT_TRACK );
  181.     }
  182.     if( !found )
  183.     {
  184.         /* Force lowercase */
  185.         if( e->key() >= Qt::Key_A && e->key() <= Qt::Key_Z )
  186.             i_vlck += e->key() + 32;
  187.         /* Rest of the ascii range */
  188.         else if( e->key() >= Qt::Key_Space && e->key() <= Qt::Key_AsciiTilde )
  189.             i_vlck += e->key();
  190.     }
  191.     return i_vlck;
  192. }
  193. int qtWheelEventToVLCKey( QWheelEvent *e )
  194. {
  195.     int i_vlck = 0;
  196.     /* Handle modifiers */
  197.     i_vlck |= qtKeyModifiersToVLC( e );
  198.     if ( e->delta() > 0 )
  199.         i_vlck |= KEY_MOUSEWHEELUP;
  200.     else
  201.         i_vlck |= KEY_MOUSEWHEELDOWN;
  202.     return i_vlck;
  203. }
  204. QString VLCKeyToString( int val )
  205. {
  206.     const char *base = KeyToString (val & ~KEY_MODIFIER);
  207.     QString r = "";
  208.     if( val & KEY_MODIFIER_CTRL )
  209.         r+= "Ctrl+";
  210.     if( val & KEY_MODIFIER_ALT )
  211.         r+= "Alt+";
  212.     if( val & KEY_MODIFIER_SHIFT )
  213.         r+= "Shift+";
  214.     return r + (base ? base : qtr( "Unset" ) );
  215. }