1 #include "refinesearchwidget.h"
3 #include "searchparams.h"
8 RefineSearchWidget::RefineSearchWidget(QWidget *parent) :
13 void RefineSearchWidget::setup() {
14 static bool isSetup = false;
18 static const int spacing = 15;
19 setFont(FontUtils::medium());
21 QBoxLayout *layout = new QVBoxLayout(this);
22 layout->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
23 layout->setMargin(spacing*2);
24 layout->setSpacing(spacing);
26 QString paramName = "sortBy";
27 setupLabel(tr("Sort by"), layout, paramName);
28 QToolBar *sortBar = setupBar(paramName);
29 QActionGroup* sortGroup = new QActionGroup(this);
30 QStringList sortOptions = QStringList()
36 foreach (QString actionName, sortOptions) {
37 QAction *action = new QAction(actionName, sortBar);
38 action->setCheckable(true);
39 action->setFont(FontUtils::medium());
40 action->setProperty("paramValue", i);
41 sortGroup->addAction(action);
42 sortBar->addAction(action);
47 layout->addSpacing(spacing);
48 setupLabel(tr("Date"), layout, paramName);
49 QToolBar *timeBar = setupBar(paramName);
50 QActionGroup* timeGroup = new QActionGroup(this);
51 QStringList timeSpans = QStringList()
57 foreach (QString actionName, timeSpans) {
58 QAction *action = new QAction(actionName, timeBar);
59 action->setCheckable(true);
60 action->setFont(FontUtils::medium());
61 action->setProperty("paramValue", i);
62 timeGroup->addAction(action);
63 timeBar->addAction(action);
67 paramName = "duration";
68 layout->addSpacing(spacing);
69 setupLabel(tr("Duration"), layout, paramName);
70 QToolBar *lengthBar = setupBar(paramName);
71 QActionGroup* lengthGroup = new QActionGroup(this);
72 QStringList lengthOptions = QStringList()
77 QStringList tips = QStringList()
79 << tr("Less than 4 minutes")
80 << tr("Between 4 and 20 minutes")
81 << tr("Longer than 20 minutes");
83 foreach (QString actionName, lengthOptions) {
84 QAction *action = new QAction(actionName, timeBar);
85 action->setStatusTip(tips.at(i));
86 action->setCheckable(true);
87 action->setFont(FontUtils::medium());
88 action->setProperty("paramValue", i);
89 lengthGroup->addAction(action);
90 lengthBar->addAction(action);
94 paramName = "quality";
95 layout->addSpacing(spacing);
96 setupLabel(tr("Quality"), layout, paramName);
97 QToolBar *qualityBar = setupBar(paramName);
98 QActionGroup* qualityGroup = new QActionGroup(this);
99 QStringList qualityOptions = QStringList()
101 << tr("High Definition");
104 << tr("720p or higher");
106 foreach (QString actionName, qualityOptions) {
107 QAction *action = new QAction(actionName, timeBar);
108 action->setStatusTip(tips.at(i));
109 action->setCheckable(true);
110 action->setFont(FontUtils::medium());
111 action->setProperty("paramValue", i);
112 qualityGroup->addAction(action);
113 qualityBar->addAction(action);
117 layout->addSpacing(spacing);
118 QPushButton *doneButton = new QPushButton(tr("Done"), this);
119 doneButton->setDefault(true);
120 doneButton->setFont(FontUtils::medium());
121 doneButton->setProperty("custom", true);
122 doneButton->setProperty("important", true);
123 doneButton->setProperty("big", true);
124 connect(doneButton, SIGNAL(clicked()), SLOT(doneClicked()));
125 layout->addWidget(doneButton, 0, Qt::AlignLeft);
128 void RefineSearchWidget::setupLabel(QString text, QBoxLayout *layout, QString paramName) {
129 QBoxLayout* hLayout = new QHBoxLayout();
130 hLayout->setSpacing(8);
131 hLayout->setMargin(0);
132 hLayout->setAlignment(Qt::AlignVCenter);
134 QLabel *icon = new QLabel(this);
135 icon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
136 QString resource = paramName;
138 resource = Extra::resourceName(resource);
140 QPixmap pixmap = QPixmap(":/images/search-" + resource + ".png");
141 QPixmap translucentPixmap(pixmap.size());
142 translucentPixmap.fill(Qt::transparent);
144 painter.begin(&translucentPixmap);
145 painter.setOpacity(0.5);
146 painter.drawPixmap(0, 0, pixmap);
148 icon->setPixmap(translucentPixmap);
149 hLayout->addWidget(icon);
151 QLabel *label = new QLabel(text.toUpper(), this);
152 label->setFont(FontUtils::mediumBold());
153 label->setStyleSheet("color: rgba(0, 0, 0, 128);");
154 hLayout->addWidget(label);
156 icon->setMaximumHeight(label->height());
158 layout->addLayout(hLayout);
161 QToolBar* RefineSearchWidget::setupBar(QString paramName) {
162 QToolBar* bar = new QToolBar(this);
163 bar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
164 // bar->setProperty("segmented", true);
165 bar->setFont(FontUtils::medium());
166 bar->setProperty("paramName", paramName);
167 connect(bar, SIGNAL(actionTriggered(QAction*)),
168 SLOT(actionTriggered(QAction*)));
169 bars.insert(paramName, bar);
170 layout()->addWidget(bar);
174 void RefineSearchWidget::paintEvent(QPaintEvent * /*event*/) {
175 #if defined(APP_MAC) | defined(APP_WIN)
177 if (window()->isActiveWindow()) {
178 brush = QBrush(QColor(0xdd, 0xe4, 0xeb));
180 brush = palette().window();
182 QPainter painter(this);
183 painter.fillRect(0, 0, width(), height(), brush);
187 void RefineSearchWidget::actionTriggered(QAction *action) {
188 QToolBar *bar = static_cast<QToolBar *>(sender());
190 qDebug() << __PRETTY_FUNCTION__ << "Cannot get sender";
194 QString paramName = bar->property("paramName").toString();
195 QVariant paramValue = action->property("paramValue");
197 qDebug() << "param changed" << paramName << paramValue;
198 emit paramChanged(paramName, paramValue);
200 qDebug() << __PRETTY_FUNCTION__;
204 void RefineSearchWidget::setSearchParams(SearchParams *params) {
210 bar = bars.value("sortBy");
211 action = bar->actions().at(params->sortBy());
212 if (action) action->setChecked(true);
214 bar = bars.value("duration");
215 action = bar->actions().at(params->duration());
216 if (action) action->setChecked(true);
218 bar = bars.value("time");
219 action = bar->actions().at(params->time());
220 if (action) action->setChecked(true);
222 bar = bars.value("quality");
223 action = bar->actions().at(params->quality());
224 if (action) action->setChecked(true);
226 connect(this, SIGNAL(paramChanged(QString,QVariant)),
227 params, SLOT(setParam(QString,QVariant)),
228 Qt::UniqueConnection);
233 void RefineSearchWidget::doneClicked() {
234 if (dirty) emit searchRefined();