diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 7f4cfc39..7161f57e 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -176,7 +176,10 @@ void LibraryWindow::doLayout() //FOLDERS FILTER------------------------------------------------------------- //--------------------------------------------------------------------------- +#ifndef Q_OS_MAC + //in MacOSX the searchEdit is created using the toolbar wrapper searchEdit = new YACReaderSearchLineEdit(); +#endif //SIDEBAR-------------------------------------------------------------------- //--------------------------------------------------------------------------- @@ -825,7 +828,8 @@ void LibraryWindow::createToolBars() //Native toolbar search edit //libraryToolBar->addWidget(searchEdit); - libraryToolBar->addSearchEdit(); + searchEdit = libraryToolBar->addSearchEdit(); + //connect(libraryToolBar,SIGNAL(searchTextChanged(YACReader::SearchModifiers,QString)),this,SLOT(setSearchFilter(YACReader::SearchModifiers, QString))); //libraryToolBar->setMovable(false); diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index 00cfd6dc..8914ab3b 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -99,7 +99,11 @@ private: QSize slideSizeW; QSize slideSizeF; //search filter +#ifdef Q_OS_MAC + YACReaderMacOSXSearchLineEdit * searchEdit; +#else YACReaderSearchLineEdit * searchEdit; +#endif FolderItem * index; //index al que hay que hacer scroll despu�s de pulsar sobre un folder filtrado int column; QString previousFilter; diff --git a/custom_widgets/yacreader_macosx_toolbar.h b/custom_widgets/yacreader_macosx_toolbar.h index e3777ca1..de537b0a 100644 --- a/custom_widgets/yacreader_macosx_toolbar.h +++ b/custom_widgets/yacreader_macosx_toolbar.h @@ -4,6 +4,31 @@ #include #include +#include "yacreader_global.h" + +//Wrapper for NSTextField +class YACReaderMacOSXSearchLineEdit : public QObject +{ + Q_OBJECT +public: + YACReaderMacOSXSearchLineEdit(); + void * getNSTextField(); + +public slots: + QString text(); + void clear(); + void setDisabled(bool disabled); + void setEnabled(bool enabled); + +private: + void * nstextfield; + + +signals: + //convenience signal for YACReaderLibrary search edit + void filterChanged(YACReader::SearchModifiers, QString); +}; + class YACReaderMacOSXToolbar : public QMacToolBar { Q_OBJECT @@ -20,11 +45,10 @@ public: QMap actions; //convenience method for YACReaderLibrary search edit - void addSearchEdit(); + YACReaderMacOSXSearchLineEdit *addSearchEdit(); signals: - //convenience signal for YACReaderLibrary search edit - void searchTextChanged(QString); + public slots: protected: diff --git a/custom_widgets/yacreader_macosx_toolbar.mm b/custom_widgets/yacreader_macosx_toolbar.mm index fc10057b..7cb2a8c5 100644 --- a/custom_widgets/yacreader_macosx_toolbar.mm +++ b/custom_widgets/yacreader_macosx_toolbar.mm @@ -11,7 +11,7 @@ #import //---------------------------- - +//A custom items separator for NSToolbar @interface CustomSeparator : NSView @end @@ -28,6 +28,7 @@ @end //---------------------------- +//Toolbar delegate, needed for allow disabled/enabled items @interface MyToolbarDelegate : NSObject { @public @@ -39,6 +40,7 @@ - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar; //- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar; - (IBAction)itemClicked:(id)sender; +- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem; @end @@ -55,7 +57,6 @@ [array addObject : item->nativeToolBarItem().itemIdentifier]; } return array; - //return toolbarPrivate->getItemIdentifiers(toolbarPrivate->items, false); } - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar @@ -69,8 +70,9 @@ [array addObject : item->nativeToolBarItem().itemIdentifier]; } return array; - //return toolbarPrivate->getItemIdentifiers(toolbarPrivate->allowedItems, false); } + + /* - (NSArray *)toolbarSelectableItemIdentifiers: (NSToolbar *)toolbar { @@ -119,8 +121,6 @@ - (BOOL)validateToolbarItem:(NSToolbarItem *)theItem { - int i = -1; - QString identifier = QString::fromNSString(theItem.itemIdentifier); if(mytoolbar->actions.contains(identifier)) @@ -131,6 +131,24 @@ } @end +//---------------------------- +//detect changes in native text field +//TODO implement validation and auto completion +@interface MyTextFieldDelegate : NSObject +{ +@public + YACReaderMacOSXSearchLineEdit * mylineedit; +} +@end + +@implementation MyTextFieldDelegate + +- (void)controlTextDidChange:(NSNotification *)notification { + NSTextField *textField = [notification object]; + Q_EMIT mylineedit->filterChanged(YACReader::NoModifiers, QString::fromNSString([textField stringValue])); +} + +@end //---------------------------- YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QObject *parent) @@ -143,44 +161,19 @@ YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QObject *parent) delegate = [[MyToolbarDelegate alloc] init]; ((MyToolbarDelegate *)delegate)->mytoolbar = this; [nativeToolBar setDelegate:(MyToolbarDelegate *)delegate]; - //button testing - /*QPixmap p(100,100); - - QIcon icon(p); - QMacToolBarItem *toolBarItem = addItem(icon,"hola"); - NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); - - - [nativeItem setMaxSize:NSMakeSize(10,50)]; - [nativeItem setMinSize:NSMakeSize(10,50)];*/ - //toolBarItem->setStandardItem(QMacToolBarItem::FlexibleSpace); - //connect(toolButton, SIGNAL(activated()), this, SLOT(fooClicked())) - - //window->window()->winId(); // create window->windowhandle() - //attachToWindow(window->window()->windowHandle()); } void YACReaderMacOSXToolbar::addAction(QAction *action) { QMacToolBarItem *toolBarItem = addItem(action->icon(),action->text()); - connect(toolBarItem,SIGNAL(activated()),action, SIGNAL(triggered())); - - //TODO add support for enable/disable toolbaritems NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); - //[nativeItem setTarget:[[MyToolbarDelegate alloc] init]]; - - [nativeToolBar validateVisibleItems]; - actions.insert(QString::fromNSString(nativeItem.itemIdentifier),action); } void YACReaderMacOSXToolbar::addDropDownItem(const QList &actions, const QAction *defaultAction) { - foreach(QAction * action, actions) - { - - } + //TODO } void YACReaderMacOSXToolbar::addSpace(int size) @@ -194,8 +187,11 @@ void YACReaderMacOSXToolbar::addSpace(int size) //TODO this doesn't work [nativeItem setMaxSize:NSMakeSize(size,24)]; [nativeItem setMinSize:NSMakeSize(size,24)]; + + //if a fix isn't found probably it is better to use QMacToolBar:: } +//reimplemented for convenience void YACReaderMacOSXToolbar::addSeparator() { //QMacToolBar::addSeparator(); @@ -240,15 +236,54 @@ void YACReaderMacOSXToolbar::hide() [nativeToolBar setVisible:NO]; } -void YACReaderMacOSXToolbar::addSearchEdit() +YACReaderMacOSXSearchLineEdit * YACReaderMacOSXToolbar::addSearchEdit() { QMacToolBarItem *toolBarItem = addItem(QIcon(),""); NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); - static const NSRect searchEditFrameRect = { { 0.0, 0.0 }, { 150, 24.0 } }; + YACReaderMacOSXSearchLineEdit * searchEdit = new YACReaderMacOSXSearchLineEdit(); + [nativeItem setView:((NSTextField *)searchEdit->getNSTextField())]; + + return searchEdit; +} + + +YACReaderMacOSXSearchLineEdit::YACReaderMacOSXSearchLineEdit() + :QObject() +{ + static const NSRect searchEditFrameRect = { { 0.0, 0.0 }, { 165, 24.0 } }; NSTextField * searchEdit = [[NSTextField alloc] initWithFrame:searchEditFrameRect]; [searchEdit setBezelStyle:NSTextFieldRoundedBezel]; - [nativeItem setView:searchEdit]; + MyTextFieldDelegate * delegate = [[MyTextFieldDelegate alloc] init]; + delegate->mylineedit = this; + [searchEdit setDelegate:delegate]; + + nstextfield = searchEdit; +} + +void *YACReaderMacOSXSearchLineEdit::getNSTextField() +{ + return nstextfield; +} + +QString YACReaderMacOSXSearchLineEdit::text() +{ + return QString::fromNSString([((NSTextField *)nstextfield) stringValue]); +} + +void YACReaderMacOSXSearchLineEdit::clear() +{ + [((NSTextField *)nstextfield) setStringValue:@""]; +} + +void YACReaderMacOSXSearchLineEdit::setDisabled(bool disabled) +{ + [((NSTextField *)nstextfield) setEnabled:!disabled]; +} + +void YACReaderMacOSXSearchLineEdit::setEnabled(bool enabled) +{ + [((NSTextField *)nstextfield) setEnabled:enabled]; }