AccountWidget::AccountWidget( QWidget* parent ) : QWidget( parent ) { QHBoxLayout *mainLayout = new QHBoxLayout( this ); TomahawkUtils::unmarginLayout( mainLayout ); setLayout( mainLayout ); setContentsMargins( 8, 8, 8, 8 ); m_imageLabel = new QLabel( this ); mainLayout->addWidget( m_imageLabel ); mainLayout->setSpacing( 4 ); QGridLayout* vLayout = new QGridLayout( this ); vLayout->setMargin( 3 ); vLayout->setSpacing( 3 ); mainLayout->addLayout( vLayout ); QFrame* idContainer = new QFrame( this ); idContainer->setAttribute( Qt::WA_TranslucentBackground, false ); vLayout->addWidget( idContainer, 0, 0 ); QHBoxLayout* idContLayout = new QHBoxLayout( idContainer ); idContainer->setLayout( idContLayout ); idContainer->setContentsMargins( 0, 0, 0, 0 ); idContLayout->setMargin( 2 ); m_idLabel = new ElidedLabel( idContainer ); m_idLabel->setElideMode( Qt::ElideRight ); m_idLabel->setContentsMargins( 3, 0, 3, 0 ); m_idLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_idLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); idContLayout->addWidget( m_idLabel ); m_spinnerWidget = new QWidget( idContainer ); QSize spinnerSize = 16 > m_spinnerWidget->logicalDpiX() * .2 ? QSize( 16, 16 ) : QSize( m_spinnerWidget->logicalDpiX() * .15, m_spinnerWidget->logicalDpiX() * .15 ); m_spinnerWidget->setFixedSize( spinnerSize ); idContLayout->addWidget( m_spinnerWidget ); m_spinnerWidget->setContentsMargins( 0, 0, 0, 0 ); m_spinner = new AnimatedSpinner( m_spinnerWidget->size(), m_spinnerWidget ); idContainer->setStyleSheet( QString( "QFrame {" "border: 1px solid #e9e9e9;" "border-radius: %1px;" "background: #e9e9e9;" "}" ).arg( idContainer->sizeHint().height() / 2 + 1 ) ); m_statusToggle = new SlideSwitchButton( this ); m_statusToggle->setContentsMargins( 0, 0, 0, 0 ); m_statusToggle->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_statusToggle->setFixedSize( m_statusToggle->sizeHint() ); QHBoxLayout *statusToggleLayout = new QHBoxLayout( this ); vLayout->addLayout( statusToggleLayout, 0, 1, 1, 1 ); statusToggleLayout->addStretch(); statusToggleLayout->addWidget( m_statusToggle ); //vLayout->addWidget( m_statusToggle, 0, 1 ); m_inviteContainer = new UnstyledFrame( this ); vLayout->addWidget( m_inviteContainer, 1, 0 ); m_inviteContainer->setFrameColor( QColor( 0x8c, 0x8c, 0x8c ) ); //from ProxyStyle m_inviteContainer->setFixedWidth( m_inviteContainer->logicalDpiX() * 2 ); m_inviteContainer->setContentsMargins( 1, 1, 1, 2 ); m_inviteContainer->setAttribute( Qt::WA_TranslucentBackground, false ); m_inviteContainer->setStyleSheet( "background: white" ); QHBoxLayout* containerLayout = new QHBoxLayout( m_inviteContainer ); m_inviteContainer->setLayout( containerLayout ); TomahawkUtils::unmarginLayout( containerLayout ); containerLayout->setContentsMargins( 1, 1, 0, 0 ); m_addAccountIcon = new QLabel( m_inviteContainer ); m_addAccountIcon->setContentsMargins( 1, 0, 0, 0 ); m_addAccountIcon->setPixmap( QIcon( RESPATH "images/add-contact.png" ).pixmap( 16 ) ); m_addAccountIcon->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ); m_addAccountIcon->setAlignment( Qt::AlignCenter ); containerLayout->addWidget( m_addAccountIcon ); m_inviteEdit = new QLineEdit( m_inviteContainer ); m_inviteEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); containerLayout->addWidget( m_inviteEdit ); m_inviteEdit->setFrame( false ); idContainer->setFixedWidth( m_inviteContainer->width() ); m_inviteButton = new QPushButton( this ); m_inviteButton->setFixedWidth( m_inviteButton->logicalDpiX() * 0.8 ); m_inviteButton->setText( tr( "Invite" ) ); vLayout->addWidget( m_inviteButton, 1, 1 ); setInviteWidgetsEnabled( false ); }
void AccountWidget::clearInviteWidgets() { setInviteWidgetsEnabled( m_statusToggle->backChecked() ); m_inviteEdit->clear(); }
AccountWidget::AccountWidget( QWidget* parent ) : QWidget( parent ) , TomahawkUtils::DpiScaler( this ) { QHBoxLayout *mainLayout = new QHBoxLayout(); TomahawkUtils::unmarginLayout( mainLayout ); setLayout( mainLayout ); setContentsMargins( 0, scaledY( 8 ), 0, scaledY( 8 ) ); m_imageLabel = new QLabel( this ); mainLayout->addWidget( m_imageLabel ); mainLayout->setSpacing( scaledX( 4 ) ); QGridLayout* vLayout = new QGridLayout(); vLayout->setSpacing( 8 ); mainLayout->addLayout( vLayout ); QFrame* idContainer = new QFrame( this ); idContainer->setAttribute( Qt::WA_TranslucentBackground, false ); vLayout->addWidget( idContainer, 0, 0 ); QHBoxLayout* idContLayout = new QHBoxLayout(); idContainer->setLayout( idContLayout ); idContainer->setContentsMargins( 0, 0, 0, 0 ); idContLayout->setMargin( 2 ); m_idLabel = new ElidedLabel( idContainer ); m_idLabel->setElideMode( Qt::ElideRight ); m_idLabel->setContentsMargins( 3, 0, 3, 0 ); m_idLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_idLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); idContLayout->addWidget( m_idLabel ); m_spinnerWidget = new QWidget( idContainer ); QSize spinnerSize = 16 > TomahawkUtils::defaultFontHeight() ? QSize( 16, 16 ) : QSize( TomahawkUtils::defaultFontHeight(), TomahawkUtils::defaultFontHeight() ); m_spinnerWidget->setFixedSize( spinnerSize ); idContLayout->addWidget( m_spinnerWidget ); m_spinnerWidget->setContentsMargins( 0, 1, 0, 0 ); m_spinner = new AnimatedSpinner( m_spinnerWidget->size() - QSize( 2, 2 ), m_spinnerWidget ); idContainer->setStyleSheet( QString( "QFrame {" "border: 1px solid #e9e9e9;" "border-radius: %1px;" "background: #e9e9e9;" "}" ).arg( idContainer->sizeHint().height() / 2 + 1 ) ); idContainer->setMinimumHeight( spinnerSize.height() + 6 /*margins*/ ); m_statusToggle = new SlideSwitchButton( this ); m_statusToggle->setContentsMargins( 0, 0, 0, 0 ); m_statusToggle->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_statusToggle->setFixedSize( m_statusToggle->sizeHint() ); QHBoxLayout *statusToggleLayout = new QHBoxLayout(); vLayout->addLayout( statusToggleLayout, 0, 1, 1, 1 ); statusToggleLayout->addStretch(); statusToggleLayout->addWidget( m_statusToggle ); m_inviteContainer = new QFrame( this ); m_inviteContainer->setObjectName( "inviteContainer" ); vLayout->addWidget( m_inviteContainer, 1, 0 ); m_inviteContainer->setStyleSheet( QString( "QWidget { background: white; } QFrame#%1 { border: 1px solid %2; }" ).arg( m_inviteContainer->objectName() ).arg( TomahawkStyle::BORDER_LINE.name() ) ); m_inviteContainer->setMinimumWidth( m_inviteContainer->logicalDpiX() * 2 ); m_inviteContainer->setContentsMargins( 1, 1, 1, 2 ); m_inviteContainer->setAttribute( Qt::WA_TranslucentBackground, false ); QHBoxLayout* containerLayout = new QHBoxLayout(); m_inviteContainer->setLayout( containerLayout ); TomahawkUtils::unmarginLayout( containerLayout ); containerLayout->setContentsMargins( 1, 1, 0, 0 ); m_addAccountIcon = new QLabel( m_inviteContainer ); m_addAccountIcon->setContentsMargins( 1, 0, 0, 0 ); m_addAccountIcon->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::AddContact, TomahawkUtils::Original, QSize( 16, 16 ) ) ); m_addAccountIcon->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ); m_addAccountIcon->setAlignment( Qt::AlignCenter ); containerLayout->addWidget( m_addAccountIcon ); m_inviteEdit = new QLineEdit( m_inviteContainer ); m_inviteEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); containerLayout->addWidget( m_inviteEdit ); m_inviteEdit->setFrame( false ); m_inviteButton = new QPushButton( this ); m_inviteButton->setMinimumWidth( m_inviteButton->logicalDpiX() * 0.8 ); m_inviteButton->setText( AccountWidget::tr( "Invite" ) ); m_inviteButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred ); vLayout->addWidget( m_inviteButton, 1, 1 ); vLayout->setColumnStretch( 0, 1 ); #ifdef Q_OS_MAC layout()->setContentsMargins( 0, 0, 0, 0 ); #endif setInviteWidgetsEnabled( false ); }
void AccountWidget::update( const QPersistentModelIndex& idx, int accountIdx ) { Tomahawk::Accounts::Account* account = idx.data( Tomahawk::Accounts::AccountModel::ChildrenOfFactoryRole ) .value< QList< Tomahawk::Accounts::Account* > >().at( accountIdx ); if ( account ) { const QPixmap& pixmap = account->icon(); QSize pixmapSize( 32, 32 ); m_imageLabel->setPixmap( pixmap.scaled( pixmapSize, Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); m_imageLabel->setFixedSize( pixmapSize ); QFontMetrics fm = m_idLabel->fontMetrics(); m_idLabel->setText( account->accountFriendlyName() ); m_idLabel->setToolTip( "<b>" + account->accountServiceName() + "</b><br>" + account->accountFriendlyName() ); //we already know it's a factory because of the FactoryProxy Tomahawk::Accounts::AccountFactory* fac = qobject_cast< Tomahawk::Accounts::AccountFactory* >( idx.data( Tomahawk::Accounts::AccountModel::AccountData ) .value< QObject* >() ); if ( fac->factoryId() == "twitteraccount" ) { m_inviteContainer->setVisible( false ); m_inviteButton->setVisible( false ); } switch ( account->connectionState() ) { case Tomahawk::Accounts::Account::Connected: if ( account->enabled() ) m_statusToggle->setChecked( true ); else qDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Connected but Disabled!"; m_spinner->fadeOut(); m_statusToggle->setBackChecked( true ); setInviteWidgetsEnabled( true ); break; case Tomahawk::Accounts::Account::Connecting: if ( !account->enabled() ) qDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Connecting but Disabled!"; m_spinner->fadeIn(); m_statusToggle->setBackChecked( false ); setInviteWidgetsEnabled( false ); break; case Tomahawk::Accounts::Account::Disconnected: if ( !account->enabled() ) m_statusToggle->setChecked( false ); else qDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Disconnected but Enabled!"; m_spinner->fadeOut(); m_statusToggle->setBackChecked( false ); setInviteWidgetsEnabled( false ); break; case Tomahawk::Accounts::Account::Disconnecting: if ( account->enabled() ) qDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Disconnecting but Enabled!"; m_spinner->fadeIn(); m_statusToggle->setBackChecked( true ); setInviteWidgetsEnabled( false ); } } }
void AccountWidget::update( const QPersistentModelIndex& idx, int accountIdx ) { Tomahawk::Accounts::Account* account = idx.data( Tomahawk::Accounts::AccountModel::ChildrenOfFactoryRole ) .value< QList< Tomahawk::Accounts::Account* > >().at( accountIdx ); if ( account ) { const QPixmap& pixmap = account->icon(); QSize pixmapSize( scaled( 32, 32 ) ); m_imageLabel->setPixmap( pixmap.scaled( pixmapSize, Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); m_imageLabel->setFixedSize( pixmapSize ); QFontMetrics fm = m_idLabel->fontMetrics(); m_idLabel->setText( account->accountFriendlyName() ); m_idLabel->setToolTip( "<b>" + account->accountServiceName() + "</b><br>" + account->accountFriendlyName() ); switch ( account->connectionState() ) { case Tomahawk::Accounts::Account::Connected: { if ( account->enabled() ) m_statusToggle->setChecked( true ); else tDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Connected but Disabled!"; m_spinner->fadeOut(); m_statusToggle->setBackChecked( true ); setInviteWidgetsEnabled( true ); break; } case Tomahawk::Accounts::Account::Connecting: { if ( !account->enabled() ) tDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Connecting but Disabled!"; m_spinner->fadeIn(); m_statusToggle->setBackChecked( false ); setInviteWidgetsEnabled( false ); break; } case Tomahawk::Accounts::Account::Disconnected: { if ( !account->enabled() ) m_statusToggle->setChecked( false ); else tDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Disconnected but Enabled!"; m_spinner->fadeOut(); m_statusToggle->setBackChecked( false ); setInviteWidgetsEnabled( false ); break; } case Tomahawk::Accounts::Account::Disconnecting: { if ( account->enabled() ) tDebug() << "AccountWidget warning:" << account->accountFriendlyName() << "is Disconnecting but Enabled!"; m_spinner->fadeIn(); m_statusToggle->setBackChecked( true ); setInviteWidgetsEnabled( false ); } } if ( !account->enabled() && account->connectionState() == Tomahawk::Accounts::Account::Disconnected ) { m_spinner->fadeOut(); m_statusToggle->setBackChecked( false ); m_statusToggle->setChecked( false ); setInviteWidgetsEnabled( false ); } else if ( account->enabled() && account->connectionState() == Tomahawk::Accounts::Account::Connected ) { m_spinner->fadeOut(); m_statusToggle->setBackChecked( true ); m_statusToggle->setChecked( true ); setInviteWidgetsEnabled( true ); } } }