vlc | branch: master | Jean-Baptiste Kempf <[email protected]> | Tue Nov 30 22:18:12 2010 +0100| [ec8b3fefaf482527e8fa17d2e900b57f80ac8cd8] | committer: Jean-Baptiste Kempf
Mac: use a Native Search Line This is a good example of how to use Mac native widgets (NSView) inside QtVLC For some reason, this is broken on the main playlist, but it works great on the plugins dialog or the simple prefs/keys Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ec8b3fefaf482527e8fa17d2e900b57f80ac8cd8 --- configure.ac | 3 + modules/gui/qt4/Modules.am | 13 +++++- modules/gui/qt4/util/searchlineedit.cpp | 2 + modules/gui/qt4/util/searchlineedit.hpp | 22 ++++++++++ modules/gui/qt4/util/searchlineedit_mac.mm | 64 ++++++++++++++++++++++++++++ 5 files changed, 103 insertions(+), 1 deletions(-) diff --git a/configure.ac b/configure.ac index 097bc46..2f6daef 100644 --- a/configure.ac +++ b/configure.ac @@ -3786,6 +3786,9 @@ AS_IF([test "${enable_qt4}" != "no"], [ AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "mingwce"], [ VLC_ADD_LIBS([qt4],[-lole32]) ]) + AS_IF([test "${SYS}" = "darwin" ],[ + VLC_ADD_LDFLAGS([qt4], [-Wl,-framework,Cocoa]) + ]) AC_PATH_PROGS(MOC, [moc-qt4 moc], moc,`eval $PKG_CONFIG --variable=exec_prefix QtCore`/bin) AC_PATH_PROG(RCC, rcc, rcc,`eval $PKG_CONFIG --variable=exec_prefix QtCore`/bin) AC_PATH_PROGS(UIC, [uic-qt4 uic], uic,`eval $PKG_CONFIG --variable=exec_prefix QtCore`/bin) diff --git a/modules/gui/qt4/Modules.am b/modules/gui/qt4/Modules.am index fc7ba1e..4c3911e 100644 --- a/modules/gui/qt4/Modules.am +++ b/modules/gui/qt4/Modules.am @@ -12,7 +12,7 @@ AUTOMAKE_OPTIONS = subdir-objects MOSTLYCLEANFILES = $(UIH) -SUFFIXES = .ui .h .hpp .moc.cpp +SUFFIXES = .ui .h .hpp .moc.cpp .mm nodist_SOURCES_qt4 = \ main_interface.moc.cpp \ @@ -210,7 +210,11 @@ resources.cpp: vlc.qrc $(DEPS_res) $(AM_V_GEN)$(RCC) -name vlc -o $@ $< .hpp.moc.cpp: +if HAVE_DARWIN + $(moc_verbose)$(MOC) -DQ_WS_MAC $(DEFS) -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) `$(VLC_CONFIG) --cppflags plugin qt4` -o $@ $< +else $(moc_verbose)$(MOC) $(DEFS) -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) `$(VLC_CONFIG) --cppflags plugin qt4` -o $@ $< +endif .ui.h: $(AM_V_at)mkdir -p -- ui @@ -220,6 +224,9 @@ resources.cpp: vlc.qrc $(DEPS_res) $(AM_V_at)sed -e 's/Q_(\"_(\\\"\(.*\)\\\")"/Q_("\1"/' [email protected] >$@ $(AM_V_at)rm -f [email protected] +.mm.lo: + $(top_builddir)/libtool --verbose --mode=compile $(CXX) $(objcxxflags) -DQ_WS_MAC -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) `$(VLC_CONFIG) --cxxflags plugin qt4` -c $< -o $@ + SOURCES_qt4 = qt4.cpp \ menus.cpp \ main_interface.cpp \ @@ -280,6 +287,10 @@ SOURCES_qt4 = qt4.cpp \ util/qt_dirs.cpp \ util/pictureflow.cpp +if HAVE_DARWIN +SOURCES_qt4 += util/searchlineedit_mac.mm +endif + noinst_HEADERS = \ qt4.hpp \ menus.hpp \ diff --git a/modules/gui/qt4/util/searchlineedit.cpp b/modules/gui/qt4/util/searchlineedit.cpp index 68130b7..3017b7d 100644 --- a/modules/gui/qt4/util/searchlineedit.cpp +++ b/modules/gui/qt4/util/searchlineedit.cpp @@ -103,6 +103,7 @@ void ClickLineEdit::focusOutEvent( QFocusEvent *ev ) } #endif +#ifndef Q_WS_MAC SearchLineEdit::SearchLineEdit( QWidget *parent ) : QLineEdit( parent ) { clearButton = new QVLCFramelessButton( this ); @@ -198,3 +199,4 @@ void SearchLineEdit::searchEditingFinished() emit searchDelayedChanged( text() ); } +#endif diff --git a/modules/gui/qt4/util/searchlineedit.hpp b/modules/gui/qt4/util/searchlineedit.hpp index f149e06..436996b 100644 --- a/modules/gui/qt4/util/searchlineedit.hpp +++ b/modules/gui/qt4/util/searchlineedit.hpp @@ -69,6 +69,7 @@ private: }; #endif +#ifndef Q_WS_MAC class QVLCFramelessButton; class SearchLineEdit : public QLineEdit { @@ -95,6 +96,27 @@ private slots: signals: void searchDelayedChanged( const QString& ); }; +#else +#include <QMacCocoaViewContainer> + +class SearchLineEdit : public QMacCocoaViewContainer +{ + Q_OBJECT + +public: + SearchLineEdit(QWidget *parent = 0); + virtual ~SearchLineEdit() {} + + virtual QSize sizeHint() const { return QSize(150, 40); } + +public slots: + void clear() {} + +signals: + void searchDelayedChanged( const QString& ); + void textEdited( const QString& ); +}; +#endif #endif diff --git a/modules/gui/qt4/util/searchlineedit_mac.mm b/modules/gui/qt4/util/searchlineedit_mac.mm new file mode 100644 index 0000000..cb4feb6 --- /dev/null +++ b/modules/gui/qt4/util/searchlineedit_mac.mm @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation ([email protected]) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +****************************************************************************/ + +#include "util/searchlineedit.hpp" + +#ifdef Q_WS_MAC + +#include <Carbon/Carbon.h> + +//![0] +SearchLineEdit::SearchLineEdit(QWidget *parent) + : QMacCocoaViewContainer(0, parent) +{ + // Many Cocoa objects create temporary autorelease objects, + // so create a pool to catch them. + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + // Create the NSSearchField, set it on the QCocoaViewContainer. + NSSearchField *search = [[NSSearchField alloc] init]; + setCocoaView(search); + [[search cell] setPlaceholderString:@"Search..."]; + + // Use a Qt menu for the search field menu. + // NSMenu *nsMenu = searchMenu->macMenu(0); + // [[search cell] setSearchMenuTemplate:nsMenu]; + + // Release our reference, since our super class takes ownership and we + // don't need it anymore. + [search release]; + + // Clean up our pool as we no longer need it. + [pool release]; +} +//![0] + +#endif // Q_WS_MAC _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
