Commit ec8b3fef authored by Jean-Baptiste Kempf's avatar 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: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 0734535d
...@@ -3786,6 +3786,9 @@ AS_IF([test "${enable_qt4}" != "no"], [ ...@@ -3786,6 +3786,9 @@ AS_IF([test "${enable_qt4}" != "no"], [
AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "mingwce"], [ AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "mingwce"], [
VLC_ADD_LIBS([qt4],[-lole32]) 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_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_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) AC_PATH_PROGS(UIC, [uic-qt4 uic], uic,`eval $PKG_CONFIG --variable=exec_prefix QtCore`/bin)
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
AUTOMAKE_OPTIONS = subdir-objects AUTOMAKE_OPTIONS = subdir-objects
MOSTLYCLEANFILES = $(UIH) MOSTLYCLEANFILES = $(UIH)
SUFFIXES = .ui .h .hpp .moc.cpp SUFFIXES = .ui .h .hpp .moc.cpp .mm
nodist_SOURCES_qt4 = \ nodist_SOURCES_qt4 = \
main_interface.moc.cpp \ main_interface.moc.cpp \
...@@ -210,7 +210,11 @@ resources.cpp: vlc.qrc $(DEPS_res) ...@@ -210,7 +210,11 @@ resources.cpp: vlc.qrc $(DEPS_res)
$(AM_V_GEN)$(RCC) -name vlc -o $@ $< $(AM_V_GEN)$(RCC) -name vlc -o $@ $<
.hpp.moc.cpp: .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 $@ $< $(moc_verbose)$(MOC) $(DEFS) -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) `$(VLC_CONFIG) --cppflags plugin qt4` -o $@ $<
endif
.ui.h: .ui.h:
$(AM_V_at)mkdir -p -- ui $(AM_V_at)mkdir -p -- ui
...@@ -220,6 +224,9 @@ resources.cpp: vlc.qrc $(DEPS_res) ...@@ -220,6 +224,9 @@ resources.cpp: vlc.qrc $(DEPS_res)
$(AM_V_at)sed -e 's/Q_(\"_(\\\"\(.*\)\\\")"/Q_("\1"/' $@.tmp >$@ $(AM_V_at)sed -e 's/Q_(\"_(\\\"\(.*\)\\\")"/Q_("\1"/' $@.tmp >$@
$(AM_V_at)rm -f $@.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 \ SOURCES_qt4 = qt4.cpp \
menus.cpp \ menus.cpp \
main_interface.cpp \ main_interface.cpp \
...@@ -280,6 +287,10 @@ SOURCES_qt4 = qt4.cpp \ ...@@ -280,6 +287,10 @@ SOURCES_qt4 = qt4.cpp \
util/qt_dirs.cpp \ util/qt_dirs.cpp \
util/pictureflow.cpp util/pictureflow.cpp
if HAVE_DARWIN
SOURCES_qt4 += util/searchlineedit_mac.mm
endif
noinst_HEADERS = \ noinst_HEADERS = \
qt4.hpp \ qt4.hpp \
menus.hpp \ menus.hpp \
......
...@@ -103,6 +103,7 @@ void ClickLineEdit::focusOutEvent( QFocusEvent *ev ) ...@@ -103,6 +103,7 @@ void ClickLineEdit::focusOutEvent( QFocusEvent *ev )
} }
#endif #endif
#ifndef Q_WS_MAC
SearchLineEdit::SearchLineEdit( QWidget *parent ) : QLineEdit( parent ) SearchLineEdit::SearchLineEdit( QWidget *parent ) : QLineEdit( parent )
{ {
clearButton = new QVLCFramelessButton( this ); clearButton = new QVLCFramelessButton( this );
...@@ -198,3 +199,4 @@ void SearchLineEdit::searchEditingFinished() ...@@ -198,3 +199,4 @@ void SearchLineEdit::searchEditingFinished()
emit searchDelayedChanged( text() ); emit searchDelayedChanged( text() );
} }
#endif
...@@ -69,6 +69,7 @@ private: ...@@ -69,6 +69,7 @@ private:
}; };
#endif #endif
#ifndef Q_WS_MAC
class QVLCFramelessButton; class QVLCFramelessButton;
class SearchLineEdit : public QLineEdit class SearchLineEdit : public QLineEdit
{ {
...@@ -95,6 +96,27 @@ private slots: ...@@ -95,6 +96,27 @@ private slots:
signals: signals:
void searchDelayedChanged( const QString& ); 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 #endif
/****************************************************************************
**
** 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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment