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: qvlcframe.hpp 16283 2006-08-17 18:16:09Z zorglub $
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
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.
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.
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 *****************************************************************************/
30 #include "customwidgets.hpp"
34 #include <QColorGroup>
37 #include <QWheelEvent>
41 ClickLineEdit::ClickLineEdit( const QString &msg, QWidget *parent) : QLineEdit( parent )
44 setClickMessage( msg );
47 void ClickLineEdit::setClickMessage( const QString &msg )
54 void ClickLineEdit::setText( const QString &txt )
56 mDrawClickMsg = txt.isEmpty();
58 QLineEdit::setText( txt );
61 void ClickLineEdit::paintEvent( QPaintEvent *pe )
64 QLineEdit::paintEvent( pe );
65 if ( mDrawClickMsg == true && !hasFocus() ) {
67 p.setPen( palette().color( QPalette::Disabled, QPalette::Text ) );
68 QRect cr = contentsRect();
69 // Add two pixel margin on the left side
70 cr.setLeft( cr.left() + 3 );
71 p.drawText( cr, Qt::AlignLeft | Qt::AlignVCenter, mClickMessage );
76 void ClickLineEdit::dropEvent( QDropEvent *ev )
78 mDrawClickMsg = false;
79 QLineEdit::dropEvent( ev );
82 void ClickLineEdit::focusInEvent( QFocusEvent *ev )
84 if ( mDrawClickMsg == true ) {
85 mDrawClickMsg = false;
88 QLineEdit::focusInEvent( ev );
91 void ClickLineEdit::focusOutEvent( QFocusEvent *ev )
93 if ( text().isEmpty() ) {
97 QLineEdit::focusOutEvent( ev );
100 /***************************************************************************
102 ***************************************************************************/
103 int qtKeyModifiersToVLC( QInputEvent* e )
105 int i_keyModifiers = 0;
106 if( e->modifiers() & Qt::ShiftModifier ) i_keyModifiers |= KEY_MODIFIER_SHIFT;
107 if( e->modifiers() & Qt::AltModifier ) i_keyModifiers |= KEY_MODIFIER_ALT;
108 if( e->modifiers() & Qt::ControlModifier ) i_keyModifiers |= KEY_MODIFIER_CTRL;
109 if( e->modifiers() & Qt::MetaModifier ) i_keyModifiers |= KEY_MODIFIER_META;
110 return i_keyModifiers;
113 int qtEventToVLCKey( QKeyEvent *e )
116 /* Handle modifiers */
117 i_vlck |= qtKeyModifiersToVLC( e );
120 /* Look for some special keys */
121 #define HANDLE( qt, vk ) case Qt::qt : i_vlck |= vk; found = true;break
124 HANDLE( Key_Left, KEY_LEFT );
125 HANDLE( Key_Right, KEY_RIGHT );
126 HANDLE( Key_Up, KEY_UP );
127 HANDLE( Key_Down, KEY_DOWN );
128 HANDLE( Key_Space, KEY_SPACE );
129 HANDLE( Key_Escape, KEY_ESC );
130 HANDLE( Key_Enter, KEY_ENTER );
131 HANDLE( Key_F1, KEY_F1 );
132 HANDLE( Key_F2, KEY_F2 );
133 HANDLE( Key_F3, KEY_F3 );
134 HANDLE( Key_F4, KEY_F4 );
135 HANDLE( Key_F5, KEY_F5 );
136 HANDLE( Key_F6, KEY_F6 );
137 HANDLE( Key_F7, KEY_F7 );
138 HANDLE( Key_F8, KEY_F8 );
139 HANDLE( Key_F9, KEY_F9 );
140 HANDLE( Key_F10, KEY_F10 );
141 HANDLE( Key_F11, KEY_F11 );
142 HANDLE( Key_F12, KEY_F12 );
143 HANDLE( Key_PageUp, KEY_PAGEUP );
144 HANDLE( Key_PageDown, KEY_PAGEDOWN );
145 HANDLE( Key_Home, KEY_HOME );
146 HANDLE( Key_End, KEY_END );
147 HANDLE( Key_Insert, KEY_INSERT );
148 HANDLE( Key_Delete, KEY_DELETE );
149 HANDLE( Key_VolumeDown, KEY_VOLUME_DOWN);
150 HANDLE( Key_VolumeUp, KEY_VOLUME_UP );
151 HANDLE( Key_VolumeMute, KEY_VOLUME_MUTE );
152 HANDLE( Key_MediaPlay, KEY_MEDIA_PLAY_PAUSE );
153 HANDLE( Key_MediaStop, KEY_MEDIA_STOP );
154 HANDLE( Key_MediaPrevious, KEY_MEDIA_PREV_TRACK );
155 HANDLE( Key_MediaNext, KEY_MEDIA_NEXT_TRACK );
160 /* Force lowercase */
161 if( e->key() >= Qt::Key_A && e->key() <= Qt::Key_Z )
162 i_vlck += e->key() + 32;
163 /* Rest of the ascii range */
164 else if( e->key() >= Qt::Key_Space && e->key() <= Qt::Key_AsciiTilde )
170 int qtWheelEventToVLCKey( QWheelEvent *e )
173 /* Handle modifiers */
174 i_vlck |= qtKeyModifiersToVLC( e );
175 if ( e->delta() > 0 )
176 i_vlck |= KEY_MOUSEWHEELUP;
178 i_vlck |= KEY_MOUSEWHEELDOWN;
182 QString VLCKeyToString( int val )
185 if( val & KEY_MODIFIER_CTRL )
187 if( val & KEY_MODIFIER_ALT )
189 if( val & KEY_MODIFIER_SHIFT )
192 unsigned int i_keys = sizeof(vlc_keys)/sizeof(key_descriptor_t);
193 for( unsigned int i = 0; i< i_keys; i++ )
195 if( vlc_keys[i].i_key_code == (val& ~KEY_MODIFIER) )
197 r+= vlc_keys[i].psz_key_string;