6 #include <QGraphicsDropShadowEffect>
12 #include <QPushButton>
14 #include <QStackedWidget>
16 #include <QToolButton>
20 #include "ui_overlaymessages.h"
36 using namespace swift::misc::aviation;
37 using namespace swift::misc::network;
38 using namespace swift::misc::simulation;
40 using namespace swift::core::context;
43 using namespace swift::gui::settings;
60 ui->tvp_StatusMessages->setResizeMode(CStatusMessageView::ResizingAlways);
61 ui->tvp_StatusMessages->setForceColumnsToMaxSize(
63 ui->tvp_StatusMessages->menuAddItems(CStatusMessageView::MenuSave);
64 ui->fr_Confirmation->setVisible(
false);
66 ui->comp_OverlayTextMessage->showSettings(
false);
67 ui->comp_OverlayTextMessage->showTextMessageEntry(
true);
68 ui->comp_OverlayTextMessage->setAsUsedInOverlayMode();
69 ui->comp_OverlayTextMessage->activate(
false,
false);
70 ui->comp_OverlayTextMessage->removeAllMessagesTab();
71 ui->comp_OverlayTextMessage->setAtcButtonsRowsColumns(2, 3,
true);
72 ui->comp_OverlayTextMessage->setAtcButtonsBackgroundUpdates(
false);
79 void COverlayMessages::init(
int w,
int h)
91 ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified);
96 void COverlayMessages::setHeader(
const QString &header)
98 ui->lbl_Header->setText(m_header.
isEmpty() ? header : m_header);
101 void COverlayMessages::onStyleSheetsChanged()
106 void COverlayMessages::onOkClicked()
109 if (m_okLambda) { m_okLambda(); }
113 void COverlayMessages::onCancelClicked()
119 bool COverlayMessages::useSmall()
const {
return (m_forceSmall || this->
width() < 400 || this->
height() < 300); }
121 bool COverlayMessages::displayTextMessage(
const CTextMessage &textMessage)
const
125 if (s.
popup(textMessage)) {
return true; }
127 return s.
popup(textMessage, ownAircraft);
131 std::chrono::milliseconds timeout)
133 if (messages.
isEmpty()) {
return; }
140 if (!myself) {
return; }
141 myself->showOverlayMessages(messages,
true, timeout);
147 if (appendOldMessages && !ui->tvp_StatusMessages->isEmpty())
149 newMsgs.
push_back(ui->tvp_StatusMessages->container());
153 ui->tvp_StatusMessages->adjustOrderColumn(newMsgs);
154 ui->tvp_StatusMessages->rowsResizeModeBasedOnThreshold(newMsgs.
size());
155 ui->tvp_StatusMessages->updateContainerMaybeAsync(newMsgs);
162 bool appendOldMessages, std::chrono::milliseconds timeout)
164 if (messages.
isEmpty()) {
return; }
171 std::chrono::milliseconds timeout)
173 if (messages.
isEmpty()) {
return; }
181 ui->tvp_StatusMessages->sortByPropertyIndex(propertyIndex, order);
186 ui->tvp_StatusMessages->setSorting(propertyIndex, order);
191 if (message.
isEmpty()) {
return; }
198 if (!myself) {
return; }
199 myself->showOverlayMessage(message, timeout);
204 if (this->useSmall())
207 ui->form_StatusMessageSmall->setValue(message);
212 ui->form_StatusMessage->setValue(message);
219 if (textMessage.
isEmpty()) {
return; }
220 if (!this->displayTextMessage(textMessage)) {
return; }
228 if (!myself) {
return; }
229 myself->showOverlayTextMessage(textMessage, timeout);
235 const bool activatedText = ui->comp_OverlayTextMessage->isActivated();
242 ui->comp_OverlayTextMessage->showCorrespondingTabForFrequency(textMessage.
getFrequency());
252 ui->te_TmText->setText(textMessage.
getMessage());
254 ui->wi_TmSupervisor->setStyleSheet(
"background-color: red;");
263 ui->comp_OverlayTextMessage->setTab(tab);
264 ui->comp_OverlayTextMessage->updateAtcStationsButtons();
265 ui->comp_OverlayTextMessage->showTextMessageEntry(
true);
268 ui->comp_OverlayTextMessage->focusTextEntry();
274 ui->comp_OverlayTextMessage->showCorrespondingTab(callsign);
289 if (!myself) {
return; }
290 myself->showOverlayImage(image, timeout);
296 QSize sizeAvailable = ui->fr_StatusMessagesComponentsInner->size();
297 if (sizeAvailable.
width() < 300)
300 sizeAvailable = this->
size() * 0.9;
303 ui->lbl_Image->setText(
"");
307 ui->lbl_Image->setPixmap(e);
329 else { Q_ASSERT_X(
false, Q_FUNC_INFO,
"Unsupported type"); }
334 if (message.
isEmpty()) {
return; }
341 if (htmlMessage.
isEmpty()) {
return; }
349 if (!myself) {
return; }
350 myself->showHTMLMessage(htmlMessage, timeout);
357 ui->te_HTMLMessage->setReadOnly(
true);
358 ui->te_HTMLMessage->setText(htmlMessage);
363 std::chrono::milliseconds timeout)
365 if (progress >= 0 && max >= 0)
367 static const QString m(
"%1 of %2 from '%3'");
372 static const QString m(
"%1 from '%2'");
379 if (message.
isEmpty()) {
return; }
383 const int p = qMax(qMin(percentage, 100), 0);
385 ui->pb_ProgressBar->setValue(p);
386 ui->lbl_ProgressBar->setText(message);
389 if (p >= 100) { this->
close(); }
390 else { this->
display(timeout); }
395 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessages);
396 this->setHeader(
"Messages");
401 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessage);
402 this->setHeader(
"Message");
407 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessageSmall);
408 this->setHeader(
"Message");
413 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_HTMLMessage);
414 this->setHeader(
"Message");
419 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_ProgressBar);
420 this->setHeader(
"Progress bar");
425 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_TextMessage);
426 this->setHeader(
"Text message");
431 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_OverlayTextMessage);
432 this->setHeader(
"Text message");
437 ui->comp_OverlayTextMessage->activate(activate, activate);
444 ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_Image);
445 this->setHeader(
"Image");
450 if (message.
isEmpty()) { ui->fr_Confirmation->setVisible(
false); }
453 ui->fr_Confirmation->setVisible(
true);
454 ui->lbl_Confirmation->setText(message);
467 if (!myself) {
return; }
469 defaultButton, timeout);
476 m_awaitingConfirmation =
true;
477 m_okLambda = okLambda;
487 ui->pb_Cancel->setDefault(
false);
488 ui->pb_Cancel->setAutoDefault(
false);
489 ui->pb_Ok->setDefault(
true);
490 ui->pb_Ok->setAutoDefault(
true);
491 ui->pb_Ok->setFocus();
495 ui->pb_Ok->setDefault(
false);
496 ui->pb_Ok->setAutoDefault(
false);
497 ui->pb_Cancel->setDefault(
true);
498 ui->pb_Cancel->setAutoDefault(
true);
499 ui->pb_Cancel->setFocus();
510 ui->form_StatusMessage->setReducedInfo(reduced);
511 ui->form_StatusMessageSmall->setReducedInfo(reduced);
537 ui->fr_Confirmation->setVisible(
false);
540 m_awaitingConfirmation =
false;
541 m_okLambda =
nullptr;
543 if (!m_pendingMessageCalls.
isEmpty())
545 std::function<void()> f = m_pendingMessageCalls.
constFirst();
549 if (!myself) {
return; }
558 using namespace std::chrono_literals;
562 if (timeout > 250ms) { m_autoCloseTimer.start(timeout); }
563 else { m_autoCloseTimer.stop(); }
const context::IContextOwnAircraft * getIContextOwnAircraft() const
Direct access to contexts if a CCoreFacade has been initialized.
bool isShuttingDown() const
Is application shutting down?
virtual swift::misc::simulation::CSimulatedAircraft getOwnAircraft() const =0
Get own aircraft.
void styleSheetsChanged()
Style sheet changed.
Display status messages (nested in the parent widget)
void setDefaultConfirmationButton(int button=QMessageBox::Cancel)
Set the default confirmation button.
void setModeToProgressBar()
Progress bar.
void setModeToOverlayTextMessage()
Inline text message.
void sortOverlayMessages(const swift::misc::CPropertyIndex &propertyIndex, Qt::SortOrder order=Qt::AscendingOrder)
Sort of overlay messages.
void showOverlayMessagesOrSingleMessage(const swift::misc::CStatusMessageList &messages, bool appendOldMessages=false, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show multiple messages or a single message.
void showProgressBar(int percentage, const QString &message, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Progress bar.
void setModeToMessage()
Single Message mode.
void setModeToHTMLMessage()
HTML message mode.
void activateTextMessages(bool activate)
Active send/receive of text messages.
virtual void keyPressEvent(QKeyEvent *event)
bool isTextMessagesActivated() const
Are text messages.
void display(std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show message.
void showOverlayVariant(const swift::misc::CVariant &variant, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Display one of the supported types.
void showDownloadProgress(int progress, qint64 current, qint64 max, const QUrl &url, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Download progress.
void setOverlayMessagesSorting(const swift::misc::CPropertyIndex &propertyIndex, Qt::SortOrder order=Qt::AscendingOrder)
Set sorting of overlay messages.
void clearOverlayMessages()
Clear the overlay messages.
virtual ~COverlayMessages()
Destructor.
void close()
Close button clicked.
void showOverlayTextMessage(const swift::misc::network::CTextMessage &textMessage, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Info message, based on text message.
void showOverlayMessages(const swift::misc::CStatusMessageList &messages, bool appendOldMessages=false, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show multiple messages.
void showOverlayMessage(const swift::misc::CStatusMessage &message, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show single message.
void setModeToTextMessage()
Single text message mode.
void showOverlayMessagesOrHTMLMessage(const swift::misc::CStatusMessageList &messages, bool appendOldMessages=false, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show multiple messages or a single message (HTML)
void showOverlayInlineTextMessage(components::TextMessageTab tab)
Inline text message.
void setReducedInfo(bool reduced)
Display reduced information.
void showOverlayMessagesWithConfirmation(const swift::misc::CStatusMessageList &messages, bool appendOldMessages, const QString &confirmationMessage, std::function< void()> okLambda, QMessageBox::StandardButton defaultButton=QMessageBox::Cancel, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show multiple messages with confirmation bar.
void setModeToImage()
Display image.
void showHTMLMessage(const swift::misc::CStatusMessage &message, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
HTML message.
void setConfirmationMessage(const QString &message)
Set the message and show the confirmation frame.
void setModeToMessageSmall()
Single Message mode.
void confirmationCompleted()
Confirmation completed.
void showOverlayImage(const swift::misc::CPixmap &image, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Image.
void setModeToMessages()
Messages mode.
bool hasPendingConfirmation() const
Is awaiting a conformation.
void addShadow(QColor color=Qt::gray)
Add a shadow.
bool popup(const swift::misc::network::CTextMessage &textMessage) const
Popup the given message? Quick check without frequency checks.
bool isEmpty() const
Message empty.
Pixmap which can be transferred via DBus.
QPixmap toPixmap() const
Corresponding pixmap.
size_type size() const
Returns number of elements in the sequence.
void push_back(const T &value)
Appends an element at the end of the sequence.
reference front()
Access the first element.
bool isEmpty() const
Synonym for empty.
Streamable status message, e.g.
QString toHtml(bool withIcon, bool withColors) const
To HTML.
Status messages, e.g. from Core -> GUI.
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
T value() const
Return the value converted to the type T.
bool canConvert(int typeId) const
True if this variant can be converted to the type with the given metatype ID.
QString getFormattedUtcTimestampHms() const
As hh:mm:ss.
Value object encapsulating information of a callsign.
const QString & asString() const
Get callsign (normalized)
Value object encapsulating information of a text message.
bool isPrivateMessage() const
Is private message?
bool isEmpty() const
Empty message.
const QString & getMessage() const
Get message.
const aviation::CCallsign & getSenderCallsign() const
Get callsign (from)
const aviation::CCallsign & getRecipientCallsign() const
Get callsign (to)
const physical_quantities::CFrequency & getFrequency() const
Get frequency.
bool isSupervisorMessage() const
Supervisor message?
Comprehensive information of an aircraft.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
High level reusable GUI components.
Models to be used with views, mainly QTableView.
Views, mainly QTableView.
Free functions in swift::misc.
virtual bool event(QEvent *e) override
void setColor(const QColor &color)
const T & constFirst() const const
bool isEmpty() const const
void push_back(QList< T >::parameter_type value)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * parent() const const
void setObjectName(QAnyStringView name)
bool isNull() const const
QPixmap scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const const
QString arg(Args &&... args) const const
bool isEmpty() const const
QString toString(QUrl::FormattingOptions options) const const