]> git.sesse.net Git - vlc/commitdiff
Mac: use a Native Search Line
authorJean-Baptiste Kempf <jb@videolan.org>
Tue, 30 Nov 2010 21:18:12 +0000 (22:18 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Wed, 1 Dec 2010 01:10:09 +0000 (02:10 +0100)
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@videolan.org>
configure.ac
modules/gui/qt4/Modules.am
modules/gui/qt4/util/searchlineedit.cpp
modules/gui/qt4/util/searchlineedit.hpp
modules/gui/qt4/util/searchlineedit_mac.mm [new file with mode: 0644]

index 097bc465cb927110a2bb105040d843389227073c..2f6daef2ce8cd62a36f8f290abae0b2677f2f0a4 100644 (file)
@@ -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)
index fc7ba1e519cb09589783046d9cea36fc126bfd67..4c3911e5db0d1845e7b52c0861eae7a1f622f899 100644 (file)
@@ -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 \
index 68130b7cefbcdad5d6cbd2f67b408cec8d3f0d31..3017b7de28cab3c3acb13d012dd9ddc4bab18a11 100644 (file)
@@ -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
index f149e06111828c81c0f76492e946c682a9fe8cc4..436996b7a129228aa06190efeb1c94c03d821c6e 100644 (file)
@@ -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 (file)
index 0000000..cb4feb6
--- /dev/null
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@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@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