[vlc-commits] commit: Mac: use a Native Search Line (Jean-Baptiste Kempf )

git at videolan.org git at videolan.org
Wed Dec 1 02:12:24 CET 2010


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | 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 <jb at videolan.org>

> 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"/' $@.tmp >$@
 	$(AM_V_at)rm -f $@.tmp
 
+.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 (qt-info at nokia.com)
+**
+** 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 qt-info at nokia.com.
+**
+****************************************************************************/
+
+#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



More information about the vlc-commits mailing list