1 #include "sidebarwidget.h"
2 #include "refinesearchbutton.h"
3 #include "refinesearchwidget.h"
4 #include "sidebarheader.h"
10 QHash<QString, QAction*>* globalActions();
13 SidebarWidget::SidebarWidget(QWidget *parent) :
17 QBoxLayout *layout = new QVBoxLayout(this);
18 layout->setSpacing(0);
21 sidebarHeader = new SidebarHeader();
22 layout->addWidget(sidebarHeader);
24 // hidden message widget
25 messageLabel = new QLabel(this);
26 messageLabel->setMargin(10);
27 messageLabel->setBackgroundRole(QPalette::ToolTipBase);
28 messageLabel->setForegroundRole(QPalette::ToolTipText);
29 messageLabel->setAutoFillBackground(true);
30 messageLabel->setWordWrap(true);
31 messageLabel->setTextFormat(Qt::RichText);
32 messageLabel->setTextInteractionFlags(
33 Qt::LinksAccessibleByKeyboard |
34 Qt::LinksAccessibleByMouse);
35 connect(messageLabel, SIGNAL(linkActivated(QString)),
36 SIGNAL(suggestionAccepted(QString)));
38 layout->addWidget(messageLabel);
40 stackedWidget = new QStackedWidget(this);
41 layout->addWidget(stackedWidget);
46 void SidebarWidget::setup() {
47 static bool isSetup = false;
51 refineSearchButton = new RefineSearchButton(this);
52 refineSearchButton->setStatusTip(tr("Refine Search")
53 + " (" + QKeySequence(Qt::CTRL + Qt::Key_R).toString(QKeySequence::NativeText) + ")");
54 refineSearchButton->hide();
55 connect(refineSearchButton, SIGNAL(clicked()), SLOT(showRefineSearchWidget()));
57 refineSearchWidget = new RefineSearchWidget(this);
58 connect(refineSearchWidget, SIGNAL(done()), SLOT(hideRefineSearchWidget()));
59 stackedWidget->addWidget(refineSearchWidget);
61 setMouseTracking(true);
62 mouseTimer = new QTimer(this);
63 mouseTimer->setInterval(5000);
64 mouseTimer->setSingleShot(true);
65 connect(mouseTimer, SIGNAL(timeout()), refineSearchButton, SLOT(hide()));
68 void SidebarWidget::setPlaylist(QListView *playlist) {
69 this->playlist = playlist;
70 playlist->installEventFilter(this);
71 stackedWidget->addWidget(playlist);
74 void SidebarWidget::showPlaylist() {
76 stackedWidget->setCurrentWidget(playlist);
77 The::globalActions()->value("refine-search")->setChecked(false);
80 void SidebarWidget::showRefineSearchWidget() {
81 if (!refineSearchWidget->isEnabled()) return;
82 refineSearchWidget->setDirty(false);
83 stackedWidget->setCurrentWidget(refineSearchWidget);
84 refineSearchWidget->setFocus();
86 Extra::fadeInWidget(playlist, refineSearchWidget);
88 refineSearchButton->hide();
89 The::globalActions()->value("refine-search")->setChecked(true);
92 void SidebarWidget::hideRefineSearchWidget() {
93 stackedWidget->setCurrentWidget(playlist);
96 Extra::fadeInWidget(refineSearchWidget, playlist);
98 The::globalActions()->value("refine-search")->setChecked(false);
101 void SidebarWidget::toggleRefineSearch(bool show) {
102 if (show) showRefineSearchWidget();
103 else hideRefineSearchWidget();
106 void SidebarWidget::resizeEvent(QResizeEvent *event) {
107 QWidget::resizeEvent(event);
108 refineSearchButton->move(
109 playlist->viewport()->width() - refineSearchButton->minimumWidth(),
110 height() - refineSearchButton->minimumHeight());
113 void SidebarWidget::enterEvent(QEvent *) {
114 if (stackedWidget->currentWidget() != refineSearchWidget)
115 showRefineSearchButton();
118 void SidebarWidget::leaveEvent(QEvent *) {
119 refineSearchButton->hide();
122 void SidebarWidget::mouseMoveEvent(QMouseEvent *event) {
123 QWidget::mouseMoveEvent(event);
127 bool SidebarWidget::eventFilter(QObject *obj, QEvent *event) {
128 if (event->type() == QEvent::MouseMove) handleMouseMove();
129 return QWidget::eventFilter(obj, event);
132 void SidebarWidget::handleMouseMove() {
133 if (stackedWidget->currentWidget() != refineSearchWidget) {
134 showRefineSearchButton();
139 void SidebarWidget::showRefineSearchButton() {
140 if (!refineSearchWidget->isEnabled()) return;
141 refineSearchButton->move(
142 playlist->viewport()->width() - refineSearchButton->minimumWidth(),
143 height() - refineSearchButton->minimumHeight());
144 refineSearchButton->show();
147 void SidebarWidget::showSuggestions(const QStringList &suggestions) {
148 QString message = tr("Did you mean: %1");
150 QString suggestionLinks;
151 foreach (QString suggestion, suggestions) {
152 suggestionLinks += "<a href='" + suggestion + "'>" + suggestion + "</a> ";
154 message = message.arg(suggestionLinks);
159 "a { color: palette(text); text-decoration: none; font-weight: bold }"
163 html = html.arg(message);
164 messageLabel->setText(html);
165 messageLabel->show();
168 void SidebarWidget::hideSuggestions() {
169 messageLabel->hide();
170 messageLabel->clear();