Mercurial > minori
comparison src/gui/pages/search.cc @ 273:f31305b9f60a
*: various code safety changes
this also makes the code build on Qt 5.7. I can't test it though
because I don't have it working... FAIL!
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Thu, 18 Apr 2024 16:53:17 -0400 |
parents | 862d0d8619f6 |
children | 657fda1b9cac |
comparison
equal
deleted
inserted
replaced
272:5437009cb10e | 273:f31305b9f60a |
---|---|
24 #include <sstream> | 24 #include <sstream> |
25 | 25 |
26 #include "anitomy/anitomy.h" | 26 #include "anitomy/anitomy.h" |
27 #include "pugixml.hpp" | 27 #include "pugixml.hpp" |
28 | 28 |
29 SearchPageSearchThread::SearchPageSearchThread(QObject* parent) : QThread(parent) { | |
30 } | |
31 | |
32 void SearchPageSearchThread::SetSearch(const std::string& search) { | |
33 search_ = search; | |
34 } | |
35 | |
36 void SearchPageSearchThread::run() { | |
37 emit GotResults(Services::Search(search_)); | |
38 } | |
39 | |
29 SearchPageListSortFilter::SearchPageListSortFilter(QObject* parent) : QSortFilterProxyModel(parent) { | 40 SearchPageListSortFilter::SearchPageListSortFilter(QObject* parent) : QSortFilterProxyModel(parent) { |
30 } | 41 } |
31 | 42 |
32 bool SearchPageListSortFilter::lessThan(const QModelIndex& l, const QModelIndex& r) const { | 43 bool SearchPageListSortFilter::lessThan(const QModelIndex& l, const QModelIndex& r) const { |
33 QVariant left = sourceModel()->data(l, sortRole()); | 44 QVariant left = sourceModel()->data(l, sortRole()); |
137 default: { | 148 default: { |
138 /* max horizontal size of 100, height size = size of current font */ | 149 /* max horizontal size of 100, height size = size of current font */ |
139 const QString d = data(index, Qt::DisplayRole).toString(); | 150 const QString d = data(index, Qt::DisplayRole).toString(); |
140 const QFontMetrics metric = QFontMetrics(QFont()); | 151 const QFontMetrics metric = QFontMetrics(QFont()); |
141 | 152 |
142 return QSize(std::max(metric.horizontalAdvance(d), 100), metric.height()); | 153 return QSize(std::max(metric.boundingRect(d).width(), 100), metric.height()); |
143 } | 154 } |
144 } | 155 } |
145 break; | 156 break; |
146 } | 157 } |
147 case Qt::TextAlignmentRole: return headerData(index.column(), Qt::Horizontal, Qt::TextAlignmentRole); | 158 case Qt::TextAlignmentRole: return headerData(index.column(), Qt::Horizontal, Qt::TextAlignmentRole); |
280 | 291 |
281 { | 292 { |
282 QLineEdit* line_edit = new QLineEdit("", toolbar); | 293 QLineEdit* line_edit = new QLineEdit("", toolbar); |
283 connect(line_edit, &QLineEdit::returnPressed, this, [this, line_edit] { | 294 connect(line_edit, &QLineEdit::returnPressed, this, [this, line_edit] { |
284 /* static thread here. */ | 295 /* static thread here. */ |
285 static QThread* thread = nullptr; | 296 if (thread_.isRunning()) |
286 | 297 thread_.exit(1); /* fail */ |
287 if (thread) | 298 |
288 return; | 299 thread_.SetSearch(Strings::ToUtf8String(line_edit->text())); |
289 | 300 |
290 thread = QThread::create([this, line_edit] { | 301 thread_.start(); |
291 model->ParseSearch(Services::Search(Strings::ToUtf8String(line_edit->text()))); | 302 }); |
292 }); | 303 connect(&thread_, &SearchPageSearchThread::GotResults, this, [this](const std::vector<int>& search) { |
293 | 304 model->ParseSearch(search); |
294 connect(thread, &QThread::finished, this, [] { | |
295 thread->deleteLater(); | |
296 thread = nullptr; | |
297 }); | |
298 | |
299 thread->start(); | |
300 }); | 305 }); |
301 toolbar->addWidget(line_edit); | 306 toolbar->addWidget(line_edit); |
302 } | 307 } |
303 | 308 |
304 layout->addWidget(toolbar); | 309 layout->addWidget(toolbar); |