1 
2 #include "conversionoptionsmanager.h"
3 #include "core/conversionoptions.h"
4 #include "pluginloader.h"
5 
ConversionOptionsManager(PluginLoader * _pluginLoader,QObject * parent)6 ConversionOptionsManager::ConversionOptionsManager( PluginLoader *_pluginLoader, QObject *parent )
7     : QObject( parent ),
8     pluginLoader( _pluginLoader )
9 {
10     idCounter = 0;
11 }
12 
~ConversionOptionsManager()13 ConversionOptionsManager::~ConversionOptionsManager()
14 {
15     foreach( const ConversionOptionsElement& element, elements.values() )
16     {
17         delete element.conversionOptions;
18     }
19     elements.clear();
20 }
21 
addConversionOptions(ConversionOptions * conversionOptions)22 int ConversionOptionsManager::addConversionOptions( ConversionOptions *conversionOptions )
23 {
24     if( !conversionOptions )
25     {
26         // FIXME error message, null pointer for conversion options
27         return -1;
28     }
29 
30     foreach( const ConversionOptionsElement& element, elements )
31     {
32         if( element.conversionOptions->pluginName == conversionOptions->pluginName )
33         {
34             if( element.conversionOptions->equals(conversionOptions) ) // NOTE equals gets reimplemented by the plugins
35             {
36                 elements[element.id].references++;
37                 return element.id;
38             }
39         }
40     }
41 
42     ConversionOptionsElement element;
43     element.id = idCounter++;
44     element.conversionOptions = conversionOptions;
45     element.references = 1;
46     elements.insert( element.id, element );
47     return element.id;
48 }
49 
increaseReferences(int id)50 int ConversionOptionsManager::increaseReferences( int id )
51 {
52     if( elements.contains(id) )
53     {
54         elements[id].references++;
55         return id;
56     }
57 
58     return -1;
59 }
60 
getConversionOptions(int id) const61 const ConversionOptions *ConversionOptionsManager::getConversionOptions( int id ) const
62 {
63     if( elements.contains(id) )
64     {
65         return elements[id].conversionOptions;
66     }
67 
68     return 0;
69 }
70 
removeConversionOptions(int id)71 void ConversionOptionsManager::removeConversionOptions( int id )
72 {
73     if( elements.contains(id) )
74     {
75         elements[id].references--;
76 
77         if( elements.value(id).references <= 0 )
78         {
79             delete elements.value(id).conversionOptions;
80             elements.remove(id);
81         }
82     }
83 }
84 
updateConversionOptions(int id,ConversionOptions * conversionOptions)85 int ConversionOptionsManager::updateConversionOptions( int id, ConversionOptions *conversionOptions )
86 {
87     removeConversionOptions( id );
88     return addConversionOptions( conversionOptions );
89 }
90 
getAllIds() const91 QList<int> ConversionOptionsManager::getAllIds() const
92 {
93     return elements.keys();
94 }
95