AmazonStore::AmazonStore( AmazonServiceFactory* parent, const char *name ) : ServiceBase( name, parent, false ) { DEBUG_BLOCK setObjectName( name ); m_polished = false; m_isNavigation = false; setShortDescription( i18n( "Access the Amazon MP3 Store directly from Amarok" ) ); setIcon( KIcon( "view-services-amazon-amarok" ) ); // used in info applet setLongDescription( i18n( "This plugin allows searching and purchasing songs and albums from the Amazon MP3 store. Amarok gets a share of the profits made by this service." ) ); setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_amazon.png" ) ); m_metaFactory = new AmazonMetaFactory( "amazon", this ); m_collection = new Collections::AmazonCollection( this, "amazon", "MP3 Music Store" ); polish(); setPlayableTracks( true ); m_serviceready = true; m_lastSearch = QString(); // add the collection, exclude it from global queries CollectionManager::instance()->addUnmanagedCollection( m_collection, CollectionManager::CollectionDisabled ); connect( m_searchWidget, SIGNAL( filterChanged( const QString ) ), this, SLOT( newSearchRequest( const QString ) ) ); emit( ready() ); newSearchRequest( QLatin1String( "" ) ); // to get some default content }
void AMControlWaitActionInfo::updateDescriptionText() { QString d; switch(matchType_) { case AMControlWaitActionInfo::MatchEqual: d = QString("Waiting for %1 to become equal to %2.").arg(controlInfo_.name()).arg(controlInfo_.value()); break; case AMControlWaitActionInfo::MatchGreaterThan: d = QString("Waiting for %1 to become greater than %2.").arg(controlInfo_.name()).arg(controlInfo_.value()); break; case AMControlWaitActionInfo::MatchLessThan: d = QString("Waiting for %1 to become less than %2.").arg(controlInfo_.name()).arg(controlInfo_.value()); break; case AMControlWaitActionInfo::MatchWithinTolerance: d = QString("Waiting for %1 to move within tolerance (%2) of %3.") .arg(controlInfo_.name()) .arg(controlInfo_.tolerance()) .arg(controlInfo_.value()); break; case AMControlWaitActionInfo::MatchInvalid: d = QString("This control wait is invalid."); break; } setShortDescription(d); setLongDescription(d); }
AMTimeoutActionInfo::AMTimeoutActionInfo(double waitTime, const QString &instruction, QObject *parent) : AMWaitActionInfo(waitTime, parent) { instruction_ = instruction; setShortDescription(typeDescription()); setLongDescription(typeDescription()); }
AMAxisFinishedActionInfo::AMAxisFinishedActionInfo(const QString &axisName, QObject *parent) : AMActionInfo3("Finish Axis", "Finish Axis", ":/system-run.png", parent) { axisName_ = axisName; setShortDescription("Finish Axis"); setLongDescription("Finish Axis"); }
AMDetectorCleanupActionInfo::AMDetectorCleanupActionInfo(const AMDetectorInfo &detectorInfo, QObject *parent) : AMActionInfo3("Detector Cleanup", "Detector Cleanup", ":/system-run.png", parent) { detectorInfo_.setValuesFrom(detectorInfo); QString description = QString("Cleanup %1").arg(detectorInfo_.description()); setShortDescription(description); setLongDescription(description); }
AMDetectorSetDarkCurrentValidStateActionInfo::AMDetectorSetDarkCurrentValidStateActionInfo(bool newState, const AMDetectorInfo &detectorInfo, QObject *parent) : AMActionInfo3(QString(), QString(), QString(), parent) { darkCurrentState_ = newState; detectorInfo_.setValuesFrom(detectorInfo); setShortDescription(typeDescription()); setLongDescription(typeDescription()); }
ServiceBrowser::ServiceBrowser( const QString& name, QWidget* parent ) : BrowserCategoryList( name, parent, true ) , m_usingContextView( false ) { debug() << "ServiceBrowser starting..."; setLongDescription( i18n( "The Internet browser lets you browse online sources of content that integrates directly into Amarok. Amarok ships with a number of these sources, but many more can be added using scripts." ) ); setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_internet.png" ) ); }
int Product::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; #ifndef QT_NO_PROPERTIES if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QString*>(_v) = id(); break; case 1: *reinterpret_cast< QString*>(_v) = description(); break; case 2: *reinterpret_cast< QString*>(_v) = longdescription(); break; case 3: *reinterpret_cast< QString*>(_v) = longtext(); break; case 4: *reinterpret_cast< QString*>(_v) = image1(); break; case 5: *reinterpret_cast< QString*>(_v) = image2(); break; case 6: *reinterpret_cast< QString*>(_v) = image3(); break; case 7: *reinterpret_cast< QString*>(_v) = catid(); break; case 8: *reinterpret_cast< QString*>(_v) = subcatid(); break; } _id -= 9; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setId(*reinterpret_cast< QString*>(_v)); break; case 1: setDescription(*reinterpret_cast< QString*>(_v)); break; case 2: setLongDescription(*reinterpret_cast< QString*>(_v)); break; case 3: setLongText(*reinterpret_cast< QString*>(_v)); break; case 4: setImage1(*reinterpret_cast< QString*>(_v)); break; case 5: setImage2(*reinterpret_cast< QString*>(_v)); break; case 6: setImage2(*reinterpret_cast< QString*>(_v)); break; case 7: setCatId(*reinterpret_cast< QString*>(_v)); break; case 8: setSubCatId(*reinterpret_cast< QString*>(_v)); break; } _id -= 9; } else if (_c == QMetaObject::ResetProperty) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 9; } else if (_c == QMetaObject::RegisterPropertyMetaType) { if (_id < 9) *reinterpret_cast<int*>(_a[0]) = -1; _id -= 9; } #endif // QT_NO_PROPERTIES return _id; }
void AMSamplePlateMoveActionInfo::updateDescriptionText(){ QString description; if(samplePlateId_ == -1) description = samplePlateName(); else if(samplePositionIndex_ == -1) description = QString("%1 on plate %2").arg(samplePositionName()).arg(samplePlateName()); else description = QString("Moving to %1 on plate %2").arg(samplePositionName()).arg(samplePlateName()); setShortDescription(description); setLongDescription(description); }
void REIXSSampleMoveActionInfo::updateDescriptions() { // Working off a stored sample plate? if(samplePlateId_ > 0) { AMSamplePlate plate; if(!plate.loadFromDb(AMDatabase::database("user"), samplePlateId_) || sampleIndex_ >= plate.count() || sampleIndex_ < 0) { setShortDescription("Sample Move to [Invalid Sample Plate]"); setLongDescription("Sample Move to [Invalid Sample Plate]"); return; } // AMControlInfoList positions = plate.at(sampleIndex_).position(); QString sampleName = AMSample::sampleNameForId(plate.database(), plate.at(sampleIndex_).sampleId()); QString shortDesc = QString("Move to sample '%1' on plate '%2'.").arg(sampleName).arg(plate.name()); // Problem with appending the positions: currently we don't update the description when that sample is re-marked, so this position string could be misleading in that situation. Just leave it out. // QStringList posString; // for(int i=0, cc=positions.count(); i<cc; ++i) { // const AMControlInfo& pos = positions.at(i); // posString << QString("%1: %2 %3 ").arg(pos.contextKnownDescription()).arg(pos.value()).arg(pos.units()); // } // shortDesc.append(" (").append(posString.join(QString())).append(")"); setShortDescription(shortDesc); setLongDescription(shortDesc); } // working off a fixed position. else { QString shortDesc = QString("Sample Move: X: %1 mm Y: %2 mm Z: %3 mm Theta: %4 deg") .arg(x_) .arg(y_) .arg(z_) .arg(theta_); setShortDescription(shortDesc); setLongDescription(shortDesc); } }
MagnatuneStore::MagnatuneStore( MagnatuneServiceFactory* parent, const char *name ) : ServiceBase( name, parent ) , m_downloadHandler( 0 ) , m_redownloadHandler( 0 ) , m_needUpdateWidget( 0 ) , m_downloadInProgress( 0 ) , m_currentAlbum( 0 ) , m_streamType( MagnatuneMetaFactory::OGG ) , m_magnatuneTimestamp( 0 ) , m_registry( 0 ) , m_signupInfoWidget( 0 ) { setObjectName(name); DEBUG_BLOCK //initTopPanel( ); setShortDescription( i18n( "\"Fair trade\" online music store" ) ); setIcon( KIcon( "view-services-magnatune-amarok" ) ); // xgettext: no-c-format setLongDescription( i18n( "Magnatune.com is a different kind of record company with the motto \"We are not evil!\" 50% of every purchase goes directly to the artist and if you purchase an album through Amarok, the Amarok project receives a 10% commission. Magnatune.com also offers \"all you can eat\" memberships that lets you download as much of their music as you like." ) ); setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_magnatune.png" ) ); //initBottomPanel(); // m_currentlySelectedItem = 0; m_polished = false; //polish( ); //FIXME not happening when shown for some reason //do this stuff now to make us function properly as a track provider on startup. The expensive stuff will //not happen untill the model is added to the view anyway. MagnatuneMetaFactory * metaFactory = new MagnatuneMetaFactory( "magnatune", this ); MagnatuneConfig config; if ( config.isMember() ) { setMembership( config.membershipType(), config.username(), config.password() ); metaFactory->setMembershipInfo( config.membershipPrefix(), m_username, m_password ); } setStreamType( config.streamType() ); metaFactory->setStreamType( m_streamType ); m_registry = new ServiceSqlRegistry( metaFactory ); m_collection = new Collections::MagnatuneSqlCollection( "magnatune", "Magnatune.com", metaFactory, m_registry ); CollectionManager::instance()->addUnmanagedCollection( m_collection, CollectionManager::CollectionDisabled ); setServiceReady( true ); }
AMScanActionInfo::AMScanActionInfo(AMScanConfiguration *config, const QString &iconFileName, QObject *parent) : AMActionInfo3(config->userScanName(), config->description(), iconFileName, parent) { config_ = config; scanID_ = -1; connect(config_, SIGNAL(expectedDurationChanged(double)), this, SLOT(setExpectedDuration(double))); connect(config_, SIGNAL(configurationChanged()), this, SLOT(onConfigChanged())); setExpectedDuration(config_->expectedDuration()); if(!config_->detailedDescription().isEmpty()) { setShortDescription(config_->userScanName()%"\n"%config_->description()); setLongDescription(config_->detailedDescription()); } }
AmpacheService::AmpacheService( AmpacheServiceFactory* parent, const QString & name, const QString &url, const QString &username, const QString &password ) : ServiceBase( name, parent ) , m_infoParser( 0 ) , m_collection( 0 ) , m_ampacheLogin(new AmpacheAccountLogin(url, username, password, this)) { DEBUG_BLOCK connect(m_ampacheLogin, SIGNAL(loginSuccessful()), this, SLOT(onLoginSuccessful())); setShortDescription( i18n( "Amarok frontend for your Ampache server" ) ); setIcon( KIcon( "view-services-ampache-amarok" ) ); setLongDescription( i18n( "Use Amarok as a seamless frontend to your Ampache server. This lets you browse and play all the Ampache contents from within Amarok." ) ); setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_ampache.png" ) ); #ifdef HAVE_LIBLASTFM m_infoParser = new LastfmInfoParser(); #endif }
FileBrowser::FileBrowser( const char *name, QWidget *parent ) : BrowserCategory( name, parent ) , d( new FileBrowser::Private( this ) ) { setLongDescription( i18n( "The file browser lets you browse files anywhere on your system, " \ "regardless of whether these files are part of your local collection. " \ "You can then add these files to the playlist as well as perform basic "\ "file operations." ) ); setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_files.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) setBackgroundImage( imagePath() ); QTimer::singleShot( 0, this, SLOT(initView()) ); }
AMScanActionInfo::AMScanActionInfo(const AMScanActionInfo &other) : AMActionInfo3(other) { config_ = other.config_ ? other.config_->createCopy() : 0; scanID_ = -1; connect(config_, SIGNAL(expectedDurationChanged(double)), this, SLOT(setExpectedDuration(double))); connect(config_, SIGNAL(configurationChanged()), this, SLOT(onConfigChanged())); setExpectedDuration(config_->expectedDuration()); if(!config_->detailedDescription().isEmpty()) { QString scanName = config_->userScanName(); if(scanName.isEmpty()) scanName = other.shortDescription(); setShortDescription(scanName); setLongDescription(config_->detailedDescription()); } }
PlaylistBrowserNS::DynamicCategory::DynamicCategory( QWidget* parent ) : BrowserCategory( "dynamic category", parent ) { setPrettyName( i18n( "Dynamic Playlists" ) ); setShortDescription( i18n( "Dynamically updating parameter based playlists" ) ); setIcon( KIcon( "dynamic-amarok" ) ); setLongDescription( i18n( "With a dynamic playlist, Amarok becomes your own personal dj, automatically selecting tracks for you, based on a number of parameters that you select." ) ); setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_dynamic_playlists.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) setBackgroundImage( imagePath() ); bool enabled = AmarokConfig::dynamicMode(); setContentsMargins( 0, 0, 0, 0 ); KHBox* controls2Layout = new KHBox( this ); QLabel *label; label = new QLabel( i18n( "Previous:" ), controls2Layout ); label->setAlignment( Qt::AlignRight | Qt::AlignVCenter ); m_previous = new QSpinBox( controls2Layout ); m_previous->setMinimum( 0 ); m_previous->setToolTip( i18n( "Number of previous tracks to remain in the playlist." ) ); m_previous->setValue( AmarokConfig::previousTracks() ); QObject::connect( m_previous, SIGNAL(valueChanged(int)), this, SLOT(setPreviousTracks(int)) ); label = new QLabel( i18n( "Upcoming:" ), controls2Layout ); // label->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ); label->setAlignment( Qt::AlignRight | Qt::AlignVCenter ); m_upcoming = new QSpinBox( controls2Layout ); m_upcoming->setMinimum( 1 ); m_upcoming->setToolTip( i18n( "Number of upcoming tracks to add to the playlist." ) ); m_upcoming->setValue( AmarokConfig::upcomingTracks() ); QObject::connect( m_upcoming, SIGNAL(valueChanged(int)), this, SLOT(setUpcomingTracks(int)) ); QObject::connect( (const QObject*)Amarok::actionCollection()->action( "playlist_clear" ), SIGNAL(triggered(bool)), this, SLOT(playlistCleared()) ); QObject::connect( (const QObject*)Amarok::actionCollection()->action( "disable_dynamic" ), SIGNAL(triggered(bool)), this, SLOT(playlistCleared()), Qt::DirectConnection ); // -- the tool bar KHBox* presetLayout = new KHBox( this ); KToolBar* presetToolbar = new KToolBar( presetLayout ); presetToolbar->setIconSize( QSize( 22, 22 ) ); presetToolbar->setToolButtonStyle( Qt::ToolButtonIconOnly ); presetToolbar->setMovable( false ); presetToolbar->setFloatable( false ); presetToolbar->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); m_onOffButton = new QToolButton( presetToolbar ); m_onOffButton->setText( i18nc( "Turn dynamic mode on", "On") ); m_onOffButton->setCheckable( true ); m_onOffButton->setIcon( KIcon( "dynamic-amarok" ) ); m_onOffButton->setToolTip( i18n( "Turn dynamic mode on." ) ); presetToolbar->addWidget( m_onOffButton ); m_duplicateButton = new QToolButton( presetToolbar ); m_duplicateButton->setText( i18n("Duplicates") ); m_duplicateButton->setCheckable( true ); m_duplicateButton->setChecked( allowDuplicates() ); m_duplicateButton->setIcon( KIcon( "edit-copy" ) ); m_duplicateButton->setToolTip( i18n( "Allow duplicate songs in result" ) ); presetToolbar->addWidget( m_duplicateButton ); m_addButton = new QToolButton( presetToolbar ); m_addButton->setText( i18n("New") ); m_addButton->setIcon( KIcon( "document-new" ) ); m_addButton->setToolTip( i18n( "New playlist" ) ); presetToolbar->addWidget( m_addButton ); m_editButton = new QToolButton( presetToolbar ); m_editButton->setText( i18n("Edit") ); m_editButton->setIcon( KIcon( "document-properties-amarok" ) ); m_editButton->setToolTip( i18n( "Edit the selected playlist or bias" ) ); presetToolbar->addWidget( m_editButton ); m_deleteButton = new QToolButton( presetToolbar ); m_deleteButton->setText( i18n("Delete") ); m_deleteButton->setEnabled( false ); m_deleteButton->setIcon( KIcon( "edit-delete" ) ); m_deleteButton->setToolTip( i18n( "Delete the selected playlist or bias") ); presetToolbar->addWidget( m_deleteButton ); m_repopulateButton = new QPushButton( presetLayout ); m_repopulateButton->setText( i18n("Repopulate") ); m_repopulateButton->setToolTip( i18n("Replace the upcoming tracks with fresh ones.") ); m_repopulateButton->setIcon( KIcon( "view-refresh-amarok" ) ); m_repopulateButton->setEnabled( enabled ); // m_repopulateButton->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) ); QObject::connect( m_repopulateButton, SIGNAL(clicked(bool)), The::playlistActions(), SLOT(repopulateDynamicPlaylist()) ); // -- the tree view m_tree = new DynamicView( this ); connect( m_tree->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectionChanged()) ); connect( m_onOffButton, SIGNAL(toggled(bool)), The::playlistActions(), SLOT(enableDynamicMode(bool)) ); connect( m_duplicateButton, SIGNAL(toggled(bool)), this, SLOT(setAllowDuplicates(bool)) ); connect( m_addButton, SIGNAL(clicked(bool)), m_tree, SLOT(addPlaylist()) ); connect( m_editButton, SIGNAL(clicked(bool)), m_tree, SLOT(editSelected()) ); connect( m_deleteButton, SIGNAL(clicked(bool)), m_tree, SLOT(removeSelected()) ); navigatorChanged(); selectionChanged(); connect( The::playlistActions(), SIGNAL(navigatorChanged()), this, SLOT(navigatorChanged()) ); }
void REIXSXASScanActionInfo::onConfigurationChanged() { QString description = XASConfig()->description(); setShortDescription(description); setLongDescription(description); }
PlaylistBrowserNS::APGCategory::APGCategory( QWidget* ) : BrowserCategory ( "APG", 0 ) { m_qualityFactor = AmarokConfig::qualityFactorAPG(); setPrettyName( i18n( "Automated Playlist Generator" ) ); setShortDescription( i18n("Create playlists by specifying criteria") ); setIcon( KIcon( "playlist-generator" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) setBackgroundImage( imagePath() ); setLongDescription( i18n("Create playlists by specifying criteria") ); setContentsMargins( 0, 0, 0, 0 ); APG::PresetModel* presetmodel = APG::PresetModel::instance(); connect( presetmodel, SIGNAL(lock(bool)), this, SLOT(setDisabled(bool)) ); /* Create the toolbar -- Qt's Designer doesn't let us put a toolbar * anywhere except in a MainWindow, so we've got to create it by hand here. */ QToolBar* toolBar_Actions = new QToolBar( this ); toolBar_Actions->setMovable( false ); toolBar_Actions->setFloatable( false ); toolBar_Actions->setIconSize( QSize( 22, 22 ) ); toolBar_Actions->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); QAction* a; a = toolBar_Actions->addAction( KIcon( "list-add-amarok" ), i18n("Add new preset") ); connect( a, SIGNAL(triggered(bool)), presetmodel, SLOT(addNew()) ); a = toolBar_Actions->addAction( KIcon( "document-properties-amarok" ), i18n("Edit selected preset") ); a->setEnabled( false ); connect( a, SIGNAL(triggered(bool)), presetmodel, SLOT(edit()) ); connect( this, SIGNAL(validIndexSelected(bool)), a, SLOT(setEnabled(bool)) ); a = toolBar_Actions->addAction( KIcon( "list-remove-amarok" ), i18n("Delete selected preset") ); a->setEnabled( false ); connect( a, SIGNAL(triggered(bool)), presetmodel, SLOT(removeActive()) ); connect( this, SIGNAL(validIndexSelected(bool)), a, SLOT(setEnabled(bool)) ); a = toolBar_Actions->addAction( KIcon( "document-import-amarok" ), i18n("Import a new preset") ); a->setEnabled( true ); connect( a, SIGNAL(triggered(bool)), presetmodel, SLOT(import()) ); a = toolBar_Actions->addAction( KIcon( "document-export-amarok" ), i18n("Export the selected preset") ); a->setEnabled( false ); connect( a, SIGNAL(triggered(bool)), presetmodel, SLOT(exportActive()) ); connect( this, SIGNAL(validIndexSelected(bool)), a, SLOT(setEnabled(bool)) ); toolBar_Actions->addSeparator(); a = toolBar_Actions->addAction( KIcon( "go-next-amarok" ), i18n("Run APG with selected preset") ); a->setEnabled( false ); connect( a, SIGNAL(triggered(bool)), this, SLOT(runGenerator()) ); connect( this, SIGNAL(validIndexSelected(bool)), a, SLOT(setEnabled(bool)) ); /* Create the preset list view */ QLabel* label_Title = new QLabel( i18n("APG Presets"), this ); label_Title->setAlignment( Qt::AlignCenter ); Amarok::PrettyTreeView* listView = new Amarok::PrettyTreeView( this ); listView->setHeaderHidden( true ); listView->setRootIsDecorated( false ); listView->setModel( presetmodel ); listView->setSelectionMode( QAbstractItemView::SingleSelection ); listView->setFrameShape( QFrame::NoFrame ); listView->setAutoFillBackground( false ); connect( listView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(activeChanged(QModelIndex)) ); connect( listView, SIGNAL(doubleClicked(QModelIndex)), presetmodel, SLOT(editPreset(QModelIndex)) ); // Speed/Quality tradeoff slider QLabel* label_Tradeoff = new QLabel( i18n("Generator Optimization"), this ); label_Tradeoff->setAlignment( Qt::AlignCenter ); QFrame* qual_Frame = new QFrame( this ); QLabel* label_Speed = new QLabel( i18n("Speed"), qual_Frame ); QSlider* qual_Slider = new QSlider( Qt::Horizontal, qual_Frame ); qual_Slider->setRange( 0, APG::ConstraintSolver::QUALITY_RANGE ); qual_Slider->setValue( m_qualityFactor ); connect( qual_Slider, SIGNAL(sliderMoved(int)), this, SLOT (setQualityFactor(int)) ); QLabel* label_Quality = new QLabel( i18n("Accuracy"), qual_Frame ); QLayout* qf_Layout = new QHBoxLayout( qual_Frame ); qf_Layout->addWidget( label_Speed ); qf_Layout->addWidget( qual_Slider ); qf_Layout->addWidget( label_Quality ); qual_Frame->setLayout( qf_Layout ); QMetaObject::connectSlotsByName( this ); }
void AMNumberChangeActionInfo::updateDescriptionText(){ QString description = QString("Changing number at index %1 to %2").arg(indexToChange_).arg(newNumber_); setShortDescription(description); setLongDescription(description); }
void AMScanActionInfo::onConfigChanged() { setShortDescription(config_->userScanName()%"\n"%config_->description()); setLongDescription(config_->detailedDescription()); }