21 #include "qgssettings.h" 
   24 #include <QHBoxLayout> 
   25 #include <QFileDialog> 
   27 #include <QToolButton> 
   30 #include <QMessageBox> 
   35   , mMessageBar( messageBar )
 
   42   return mValue.isEmpty() || mValue.isNull() ? QVariant( QVariant::ByteArray ) : mValue;
 
   54     mSetAction->setEnabled( enabled );
 
   56     mClearAction->setEnabled( enabled && !mValue.isEmpty() );
 
   61   QWidget *container = 
new QWidget( parent );
 
   62   QHBoxLayout *layout = 
new QHBoxLayout();
 
   63   container->setLayout( layout );
 
   64   layout->setContentsMargins( 0, 0, 0, 0 );
 
   66   QLabel *label = 
new QLabel();
 
   67   layout->addWidget( label, 1 );
 
   69   QToolButton *button = 
new QToolButton();
 
   70   button->setText( QChar( 0x2026 ) );
 
   71   layout->addWidget( button, 0 );
 
   73   container->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum );
 
   79   mLabel = editor->findChild<QLabel *>();
 
   80   mButton = editor->findChild<QToolButton *>();
 
   84     QFont f = mLabel->font();
 
   91     mButton->setPopupMode( QToolButton::InstantPopup );
 
   93     mSetAction = 
new QAction( tr( 
"Embed File…" ), mButton );
 
   94     connect( mSetAction, &QAction::triggered, 
this, &QgsBinaryWidgetWrapper::setContent );
 
   95     mClearAction = 
new QAction( tr( 
"Clear Contents…" ), mButton );
 
   96     connect( mClearAction, &QAction::triggered, 
this, &QgsBinaryWidgetWrapper::clear );
 
   97     mSaveAction = 
new QAction( tr( 
"Save Contents to File…" ), mButton );
 
   98     connect( mSaveAction, &QAction::triggered, 
this, &QgsBinaryWidgetWrapper::saveContent );
 
   99     QMenu *menu = 
new QMenu( mButton );
 
  100     menu->addAction( mSetAction );
 
  101     menu->addAction( mClearAction );
 
  102     menu->addSeparator();
 
  103     menu->addAction( mSaveAction );
 
  104     mButton->setMenu( menu );
 
  110   return mLabel && mButton;
 
  113 void QgsBinaryWidgetWrapper::updateValues( 
const QVariant &value, 
const QVariantList & )
 
  115   mValue = 
value.isValid() && !
value.isNull() && 
value.canConvert< QByteArray >() ? 
value.toByteArray() : QByteArray();
 
  116   if ( mValue.length() == 0 )
 
  117     mValue = QByteArray();
 
  121     if ( !mValue.isEmpty() )
 
  131     mSaveAction->setEnabled( !mValue.isEmpty() );
 
  133     mClearAction->setEnabled( !mValue.isEmpty() );
 
  136 void QgsBinaryWidgetWrapper::saveContent()
 
  144     file = QFileDialog::getSaveFileName( 
nullptr,
 
  145                                          tr( 
"Save Contents to File" ),
 
  147                                          tr( 
"All files" ) + 
" (*.*)" );
 
  149   if ( file.isEmpty() )
 
  154   QFileInfo fi( file );
 
  155   s.setValue( QStringLiteral( 
"/UI/lastBinaryDir" ), fi.absolutePath() );
 
  157   QFile fileOut( file );
 
  158   fileOut.open( QIODevice::WriteOnly );
 
  159   fileOut.write( mValue );
 
  163     mMessageBar->
pushSuccess( QString(), tr( 
"Saved content to <a href=\"%1\">%2</a>" ).arg(
 
  164                                 QUrl::fromLocalFile( file ).toString(), QDir::toNativeSeparators( file ) ) );
 
  167 void QgsBinaryWidgetWrapper::setContent()
 
  175     file = QFileDialog::getOpenFileName( 
nullptr,
 
  178                                          tr( 
"All files" ) + 
" (*.*)" );
 
  181   QFileInfo fi( file );
 
  182   if ( file.isEmpty() || !fi.exists() )
 
  187   s.setValue( QStringLiteral( 
"/UI/lastBinaryDir" ), fi.absolutePath() );
 
  189   QFile fileSource( file );
 
  190   if ( !fileSource.open( QIODevice::ReadOnly ) )
 
  195   updateValues( fileSource.readAll() );
 
  199 void QgsBinaryWidgetWrapper::clear()
 
  203     if ( QMessageBox::question( 
nullptr, tr( 
"Clear Contents" ), tr( 
"Are you sure you want the clear this field's content?" ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
 
  207   updateValues( QByteArray() );
 
  211 QString QgsBinaryWidgetWrapper::defaultPath()
 
  213   return QgsSettings().value( QStringLiteral( 
"/UI/lastBinaryDir" ), QDir::homePath() ).toString();
 
static QString nullRepresentation()
This string is used to represent the value NULL throughout QGIS.
static QString representFileSize(qint64 bytes)
Returns the human size from bytes.
Trick to keep a widget focused and avoid QT crashes.
A bar for displaying non-blocking messages to the user.
void pushSuccess(const QString &title, const QString &message)
Pushes a success message with default timeout to the message bar.
Represents a vector layer which manages a vector based data sets.