1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-18 23:09:42 +01:00

Add an Install From File and Remove Account option

This commit is contained in:
Leo Franchi 2012-02-13 18:03:30 -05:00
parent 8ceb537860
commit 3687ebdc6b
7 changed files with 97 additions and 15 deletions

View File

@ -172,6 +172,8 @@ AccountDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option,
// Draw individual accounts and add account button for factories
m_cachedButtonRects[ index ] = QRect();
bool canDelete = index.data( AccountModel::CanDeleteRole ) .toBool();
if ( rowType == Tomahawk::Accounts::AccountModel::TopLevelFactory )
{
const QList< Account* > accts = index.data( AccountModel::ChildrenOfFactoryRole ).value< QList< Tomahawk::Accounts::Account* > >();
@ -224,6 +226,29 @@ AccountDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option,
}
}
else if ( canDelete )
{
const QString btnText = tr( "Remove Account" );
const int btnWidth = installMetrics.width( btnText ) + 2*PADDING;
QRect btnRect;
if ( hasConfigWrench )
btnRect = QRect( opt.rect.right() - PADDING - btnWidth, opt.rect.bottom() - installMetrics.height() - 3*PADDING, btnWidth, installMetrics.height() + 2*PADDING );
else
btnRect = QRect( opt.rect.right() - PADDING - btnWidth, center - ( installMetrics.height() + 4 ) / 2, btnWidth, installMetrics.height() + 2*PADDING );
leftEdge = btnRect.left();
m_cachedButtonRects[ index ] = btnRect;
painter->save();
painter->setPen( opt.palette.color( QPalette::Active, QPalette::AlternateBase ) );
drawRoundedButton( painter, btnRect, true );
painter->setFont( installFont );
painter->drawText( btnRect, Qt::AlignCenter, btnText );
painter->restore();
}
// Draw the title and description
// title
@ -431,7 +456,7 @@ AccountDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QS
else if ( m_cachedButtonRects.contains( index ) && m_cachedButtonRects[ index ].contains( me->pos() ) )
{
// Install/create/etc button for this row
model->setData( index, true, AccountModel::AddAccountButtonRole );
model->setData( index, true, AccountModel::CustomButtonRole );
}
}
@ -475,7 +500,7 @@ AccountDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QS
void
AccountDelegate::drawRoundedButton( QPainter* painter, const QRect& btnRect ) const
AccountDelegate::drawRoundedButton( QPainter* painter, const QRect& btnRect, bool red ) const
{
QPainterPath btnPath;
const int radius = 3;
@ -490,8 +515,16 @@ AccountDelegate::drawRoundedButton( QPainter* painter, const QRect& btnRect ) co
btnPath.lineTo( btnRect.left(), btnCenter );
QLinearGradient g;
g.setColorAt( 0, QColor(54, 127, 211) );
g.setColorAt( 0.5, QColor(43, 104, 182) );
if ( !red )
{
g.setColorAt( 0, QColor(54, 127, 211) );
g.setColorAt( 0.5, QColor(43, 104, 182) );
}
else
{
g.setColorAt( 0, QColor(206, 63, 63) );
g.setColorAt( 0.5, QColor(170, 52, 52) );
}
//painter->setPen( bg.darker() );
painter->fillPath( btnPath, g );
//painter->drawPath( btnPath );
@ -505,8 +538,16 @@ AccountDelegate::drawRoundedButton( QPainter* painter, const QRect& btnRect ) co
btnPath.lineTo( btnRect.right(), btnCenter );
btnPath.lineTo( btnRect.left(), btnCenter );
g.setColorAt( 0, QColor(34, 85, 159) );
g.setColorAt( 0.5, QColor(35, 79, 147) );
if ( !red )
{
g.setColorAt( 0, QColor(34, 85, 159) );
g.setColorAt( 0.5, QColor(35, 79, 147) );
}
else
{
g.setColorAt( 0, QColor(150, 50, 50) );
g.setColorAt( 0.5, QColor(130, 40, 40) );
}
painter->fillPath( btnPath, g );
}

View File

@ -47,7 +47,7 @@ signals:
void openConfig( Tomahawk::Accounts::AccountFactory* );
private:
void drawRoundedButton( QPainter* painter, const QRect& buttonRect ) const;
void drawRoundedButton( QPainter* painter, const QRect& buttonRect, bool red = false ) const;
// Returns new left edge
int drawStatus( QPainter* painter, const QPointF& rightTopEdge, Account* acct, bool drawText = false ) const;
void drawCheckBox( QStyleOptionViewItemV4& opt, QPainter* p, const QWidget* w ) const;

View File

@ -207,6 +207,10 @@ AccountModel::data( const QModelIndex& index, int role ) const
else
return UniqueFactory;
}
else if ( role == CanDeleteRole )
{
return node->type == AccountModelNode::ManualResolverType;
}
Account* acct = 0;
if ( node->type == AccountModelNode::ManualResolverType )
@ -349,12 +353,23 @@ AccountModel::setData( const QModelIndex& index, const QVariant& value, int role
}
// The install/create/remove/etc button was clicked. Handle it properly depending on this item
if ( role == AddAccountButtonRole )
if ( role == CustomButtonRole )
{
Q_ASSERT( node->type == AccountModelNode::FactoryType );
// Make a new account of this factory type
emit createAccount( node->factory );
return true;
if ( node->type == AccountModelNode::FactoryType )
{
// Make a new account of this factory type
emit createAccount( node->factory );
return true;
}
else if ( node->type == AccountModelNode::ManualResolverType )
{
Q_ASSERT( node->resolverAccount );
AccountManager::instance()->removeAccount( node->resolverAccount );
return true;
}
Q_ASSERT( false ); // Should not be here, only the above two types should have this button
return false;
}

View File

@ -58,9 +58,10 @@ public:
AccountData = Qt::UserRole + 28, // raw plugin
CanRateRole = Qt::UserRole + 32,
AccountTypeRole = Qt::UserRole + 33,
CanDeleteRole = Qt::UserRole + 34,
CheckboxClickedRole = Qt::UserRole + 29, // the checkbox for this row was toggled
AddAccountButtonRole = Qt::UserRole + 30, // the add account button
CustomButtonRole = Qt::UserRole + 30, // the add account or remove account button
// Used by factories
ChildrenOfFactoryRole = Qt::UserRole + 31

View File

@ -20,6 +20,7 @@
#define RESOLVERACCOUNT_H
#include "accounts/Account.h"
#include "dllmacro.h"
namespace Tomahawk {
@ -27,7 +28,7 @@ class ExternalResolverGui;
namespace Accounts {
class ResolverAccountFactory : public AccountFactory
class DLLEXPORT ResolverAccountFactory : public AccountFactory
{
Q_OBJECT
public:
@ -51,7 +52,7 @@ public:
*
* Contains the resolver* that is it wrapping
*/
class ResolverAccount : public Account
class DLLEXPORT ResolverAccount : public Account
{
Q_OBJECT
public:

View File

@ -53,6 +53,7 @@
#include "accounts/Account.h"
#include "accounts/AccountManager.h"
#include <accounts/AccountModelFilterProxy.h>
#include <accounts/ResolverAccount.h>
#include "utils/logger.h"
#include "AccountFactoryWrapper.h"
@ -119,7 +120,9 @@ SettingsDialog::SettingsDialog( QWidget *parent )
ui->accountsView->setModel( m_accountProxy );
connect( ui->installFromFileBtn, SIGNAL( clicked( bool ) ), this, SLOT( installFromFile() ) );
connect( m_accountModel, SIGNAL( createAccount( Tomahawk::Accounts::AccountFactory* ) ), this, SLOT( createAccountFromFactory( Tomahawk::Accounts::AccountFactory* ) ) );
connect( AccountManager::instance(), SIGNAL( added( Tomahawk::Accounts::Account* ) ), ui->accountsView, SLOT( scrollToBottom() ) );
ui->accountsFilterCombo->addItem( tr( "All" ), Accounts::NoType );
ui->accountsFilterCombo->addItem( accountTypeToString( SipType ), SipType );
@ -606,6 +609,25 @@ SettingsDialog::handleAccountAdded( Account* account, bool added )
}
void
SettingsDialog::installFromFile()
{
const QString resolver = QFileDialog::getOpenFileName( this, tr( "Install resolver from file" ), TomahawkSettings::instance()->scriptDefaultPath() );
if( !resolver.isEmpty() )
{
Account* acct = ResolverAccountFactory::createFromPath( resolver, false );
AccountManager::instance()->addAccount( acct );
TomahawkSettings::instance()->addAccount( acct->accountId() );
AccountManager::instance()->enableAccount( acct );
QFileInfo resolverAbsoluteFilePath( resolver );
TomahawkSettings::instance()->setScriptDefaultPath( resolverAbsoluteFilePath.absolutePath() );
}
}
void
SettingsDialog::requiresRestart()
{

View File

@ -99,6 +99,8 @@ private slots:
void accountConfigDelete();
void accountCreateConfigClosed( int value );
void installFromFile();
void updateScanOptionsView();
void changePage( QListWidgetItem*, QListWidgetItem* );