#pragma once #include "lts_widgets_export.h" #include "lts_message_dialog.h" #include #include namespace Ui { class LtsDialogButtonBox; } namespace LtsWidgets { enum class DialogButton { ReadOnly, Ok, Apply, Close, Yes, No, Remove, Hide, Add, Help, Edit, Save, Load, Show, Import, Export, CenterMap, ZoomMapTo, Library, Print, #ifdef LTS_DEBUG _debug_, #endif }; class LTSWIDGETS_EXPORT LtsDialogButtonBox : public QWidget { Q_OBJECT public: explicit LtsDialogButtonBox(QWidget *parent); ~LtsDialogButtonBox(); template void connectButton(DialogButton button, const typename QtPrivate::FunctionPointer::Object *receiver, Func2 slot, Qt::ConnectionType type = Qt::AutoConnection) { { switch (button) { #ifdef LTS_DEBUG case DialogButton::_debug_: #endif case DialogButton::Close: case DialogButton::Ok: case DialogButton::ReadOnly: case DialogButton::Apply: case DialogButton::Help: { LtsMessageDialog::showMessage(this, QStringLiteral("Bitte den fuer das Plugin verantwortlichen kontaktieren:
" "m_buttonBox nicht mit Ok, Apply, Help, _debug_ oder Close verbinden
" "Note: Bitte nur m_buttonBox verwenden, keine LtsDialogButtonBox selber erstellen" "Ok & Apply werden automatisch zur virtual Methode 'apply()' im LtsDialog weitergeleitet.
" "Close schließt einfach den Dialog - im Destruktor oder in 'aboutToClose()' ist der 'Close Code' gut aufgehoben.
" "
" "FIXEN !!!!!"), QStringLiteral("--- STOP --- !!! FIXEN !!! ---")); break; } default: break; } } QPushButton *theSender = getButton(button); if (!theSender) return; switch (button) { case DialogButton::Remove: { connect(this, &LtsDialogButtonBox::signalRemoveClicked, receiver, slot, type); connect(theSender, &QPushButton::clicked, this, &LtsDialogButtonBox::slotRemoveClicked); break; } case DialogButton::Export: case DialogButton::Import: { if (m_isTablet) { theSender->setVisible(false); return; } Q_FALLTHROUGH(); } default: connect(theSender, &QPushButton::clicked, receiver, slot, type); break; } setButtonsVisible(theSender); } template bool connectLibraryButton(const typename QtPrivate::FunctionPointer::Object *receiver, Func1 slotLoad, Func2 slotSave, Qt::ConnectionType type = Qt::AutoConnection) { QPushButton *theSender = getButton(DialogButton::Library); if (!theSender) return false; if (m_isTablet) { theSender->setVisible(false); return true; } setButtonsVisible(theSender); type = static_cast(type | Qt::UniqueConnection); return (connect(this, &LtsDialogButtonBox::signalLibraryLoadClicked, receiver, slotLoad, type) && connect(this, &LtsDialogButtonBox::signalLibrarySaveClicked, receiver, slotSave, type)); } void setText(DialogButton button, const QString &text); void setToolTip(DialogButton button, const QString &text); void setIcon(DialogButton button, const QIcon &icon); void setMenu(DialogButton button, QMenu *menu); void setButtonEnabled(DialogButton button, bool enabled = true); bool isButtonEnabled(DialogButton button) const; void setButtonVisible(DialogButton button, bool visible = true); bool isButtonVisible(DialogButton button) const; QPushButton *getButton(DialogButton button) const; void _setVisibilityForAll(bool visible); signals: void signalRemoveClicked(); void signalHelpClicked(); void signalLibraryLoadClicked(); void signalLibrarySaveClicked(); private slots: void slotRemoveClicked(); private: const bool m_isTablet; void setButtonsVisible(QPushButton *pb); Ui::LtsDialogButtonBox *m_ui; }; }