Changeset 235


Ignore:
Timestamp:
Aug 4, 2010, 6:47:03 PM (11 years ago)
Author:
Joachim Langenbach
Message:
  • Added Genre to Medium (closes #93)
  • Added English translation files (Not edited right now)
  • updatets
    • perl script to update all language files
  • MediumGiftWidget?
    • Buttons are enabled and disabled now
  • Searchplugins, ConnectMediaSearch?, ConnectMediaTypes?
    • Attributes and Categories can be translated now
    • Under supported Attributes, only this attributes should be listed, which are not handled by Medium itself
  • Amazon
    • adapt changes to SearchPlugin?
    • uses Medium API now, where it inserts standard stuff
  • DemoShop?
  • Medium, Book, CD, MediaModel?, BooksModel?, CDsModel, TracksModel?
    • New Attribute management
    • Works so far, but HidingColums? is not working, but the reason seems to be the same as refs #51
Location:
branches/release-0.3.0-rc1
Files:
9 added
1 deleted
45 edited
1 moved

Legend:

Unmodified
Added
Removed
  • branches/release-0.3.0-rc1/CMakeLists.txt

    r231 r235  
    6767
    6868# internatalization
    69 OPTION(L10N_EN "Build with english language" ON)
     69OPTION(L10N_ALL "Build with all languages" ON)
     70OPTION(L10N_EN "Build with english language" OFF)
    7071OPTION(L10N_DE "Build with german language" OFF)
     72IF(L10N_ALL)
     73        SET(L10N_EN ON)
     74        SET(L10N_DE ON)
     75ENDIF(L10N_ALL)
     76
    7177
    7278SET(TARGET_VERSION_MAJOR 0 )
    7379SET(TARGET_VERSION_MINOR 2 )
    7480SET(${PROJECT_NAME}_PATCH_LEVEL   9 )
     81SET(${PROJECT_NAME}_RELEASE_CANDIDATE 1 )
    7582SET(${PROJECT_NAME}_SOVERSION ${TARGET_VERSION_MAJOR})
    7683SET(${PROJECT_NAME}_VERSION
    77     "${TARGET_VERSION_MAJOR}.${TARGET_VERSION_MINOR}.${${PROJECT_NAME}_PATCH_LEVEL}" )
     84    "${TARGET_VERSION_MAJOR}.${TARGET_VERSION_MINOR}.${${PROJECT_NAME}_PATCH_LEVEL}-rc${${PROJECT_NAME}_RELEASE_CANDIDATE}" )
    7885
    7986
  • branches/release-0.3.0-rc1/src/MediaDBLib/CMakeLists.txt

    r227 r235  
    77        SET(mediadblib_TS ${mediadblib_TS} lang/mediadblib_de.ts)
    88ENDIF(L10N_DE)
     9IF(L10N_EN)
     10        SET(mediadblib_TS ${mediadblib_TS} lang/mediadblib_en.ts)
     11ENDIF(L10N_EN)
    912
    1013SET(mediadblib_UI
     
    2730        dbbackup.ui
    2831        mediumminwidget.ui
     32        progressstatuswidget.ui
    2933)                       
    3034
     
    112116        minmodel.cpp
    113117        delegatemin.cpp
     118        progressstatuswidget.cpp
     119        querythread.cpp
     120        queryworker.cpp
    114121)                     
    115122       
  • branches/release-0.3.0-rc1/src/MediaDBLib/connectmediasearch.cpp

    r233 r235  
    7676  mediaPluginNameLabel->setText(medium->name());
    7777  mediaGroup = medium->group();
    78         QStringList items = medium->supportedAttributes();
    79         items.sort();
    80   mediaPluginAttrsView->addItems(items);
    81         numMediaModelAttrs = items.size();
     78        mediaMap = medium->supportedAttrs();
     79        QStringList translations = medium->supportedAttributesTrans();
     80        translations.sort();
     81  mediaPluginAttrsView->addItems(translations);
     82        numMediaModelAttrs = mediaMap.size();
    8283 
    8384  searchPluginNameLabel->setText(searchPlugin->name());
    8485  searchGroup = searchPlugin->settingsGroup();
    85         items = searchPlugin->supportedAttributes();
     86        searchMap = searchPlugin->supportedAttributes();
     87        QStringList     items = searchMap.values();
    8688        items.sort();
    8789  searchPluginAttrsView->addItems(items);
     
    9597                connectionsView->setSortingEnabled(false);
    9698                for(int i = 0; i < mediaAttrs.size(); i++){
    97                         QList<QListWidgetItem*> itemsMediaAttrs = mediaPluginAttrsView->findItems(mediaAttrs[i], Qt::MatchExactly);
    98                         QList<QListWidgetItem*> itemsSearchAttrs = searchPluginAttrsView->findItems(searchAttrs[i], Qt::MatchExactly);
     99                        QList<QListWidgetItem*> itemsMediaAttrs = mediaPluginAttrsView->findItems(medium->attrs(mediaAttrs[i]).translation,
     100                                                                                                                                                                                                                                                                                                                                Qt::MatchExactly);
     101                        QList<QListWidgetItem*> itemsSearchAttrs = searchPluginAttrsView->findItems(searchMap.value(searchAttrs[i]),
     102                                                                                                                                                                                                                                                                                                                                        Qt::MatchExactly);
    99103                        if((itemsMediaAttrs.size() > 0) && (itemsSearchAttrs.size() > 0)){
    100104                                delete itemsMediaAttrs[0];
     
    102106                                int row = connectionsView->rowCount();
    103107                                connectionsView->insertRow(row);
    104                                 connectionsView->setItem(row, 0, new QTableWidgetItem(mediaAttrs[i]));
    105                                 connectionsView->setItem(row, 1, new QTableWidgetItem(searchAttrs[i]));
     108                                connectionsView->setItem(row, 0, new QTableWidgetItem(medium->attrs(mediaAttrs[i]).translation));
     109                                connectionsView->setItem(row, 1, new QTableWidgetItem(searchMap.value(searchAttrs[i])));
    106110                        }
    107111                }
     
    123127    if(!item)
    124128      return false;
    125     localMediaAttrs << item->text();
     129                foreach(ColKeyTrans keyItem, mediaMap){
     130                        if(keyItem.translation == item->text())
     131                                localMediaAttrs << keyItem.key;
     132                }
    126133   
    127134    item = connectionsView->item(i, 1);
    128135    if(!item)
    129136      return false;
    130     localSearchAttrs << item->text();
     137    localSearchAttrs << searchMap.key(item->text());
    131138  }
    132139 
     
    232239        }
    233240        for(int i = 0; i < searchAttrs.size(); i++){
    234                 if(searchPlugin->supportedAttributes().indexOf(searchAttrs[i]) == -1)
     241                if(searchPlugin->supportedAttributes().keys().indexOf(searchAttrs[i]) == -1)
    235242                        result = false;
    236243        }
  • branches/release-0.3.0-rc1/src/MediaDBLib/connectmediasearch.h

    r211 r235  
    2525#include "settingswidget.h"
    2626#include "ui_connectmediasearch.h"
     27#include "medium.h"
    2728
    28 class Medium;
    2929class SearchPlugin;
    3030
     
    5656                bool canceled, saved;
    5757                int numMediaModelAttrs, numSearchPluginAttrs;
     58                QMap<QString, QString> searchMap;
     59                QList<ColKeyTrans> mediaMap;
    5860};
    5961
  • branches/release-0.3.0-rc1/src/MediaDBLib/delegateforeignkey.cpp

    r201 r235  
    2020#include "delegateforeignkey.h"
    2121
     22#include "msqldatabase.h"
     23
     24#include <QTimer>
    2225#include <QComboBox>
     26#include <QLineEdit>
     27#include <QCompleter>
    2328#include <QSettings>
    2429#include <QAbstractItemView>
    2530#include <QSqlRecord>
    2631#include <QStyleOptionViewItemV2>
     32#include <QSqlQueryModel>
     33#include <QSqlQuery>
    2734
    2835DelegateForeignKey::DelegateForeignKey(QString table, QString matchColumn, QString resultColumn, QWidget *parent)
    2936  : QStyledItemDelegate(parent)
    3037{
     38        maxComboItems = 25;
     39        maxCompleteItems = 99999;
     40       
     41        resultModel = 0;
    3142        model = 0;
    3243        QAbstractItemView *view = qobject_cast<QAbstractItemView*>(parent);
     
    3445                model = view->model();
    3546        }
    36  
     47        timer = new QTimer(this); 
    3748  resTable = table;
    3849  matchCol = matchColumn;
    3950  resCol = resultColumn;
     51       
     52//      connect(this, SIGNAL(addPair(QString,uint)), this, SLOT(doAddPair(QString,uint)));
    4053
    4154  reloadForeignKeys();
     
    4457void DelegateForeignKey::reloadForeignKeys()
    4558{
    46         QSqlQueryModel *resultModel = new QSqlQueryModel();
    47   QSqlDatabase db = QSqlDatabase::database();
     59        if(!resultModel)
     60                resultModel = new QSqlQueryModel();
     61       
     62  MSqlDatabase db = MSqlDatabase::database();
    4863  bool closeDB = !db.isOpen();
    4964        if(closeDB)
     
    5267    resultModel->setQuery
    5368    (
    54       QString("SELECT %1, %2 FROM %3")
     69      QString("SELECT %1, %2 FROM %3 ORDER BY %2 LIMIT %4")
    5570      .arg(matchCol)
    5671      .arg(resCol)
    5772      .arg(resTable)
     73                        .arg(maxCompleteItems)
    5874    );
    5975    if(closeDB)
    6076      db.close();
    6177  }
    62   for(int i = 0; i < resultModel->rowCount(); i++){
    63     mapInOut.insert
    64     (
    65       resultModel->record(i).value(matchCol).toUInt(),
    66       resultModel->record(i).value(resCol).toString()
    67     );
    68   }
    69   delete resultModel;
     78  if(resultModel->rowCount() >= maxCompleteItems){
     79                useComboBox = false;
     80                useCompleter = false;
     81                useExtendedCompleter = true;
     82        }
     83        else{
     84                if(resultModel->rowCount() > maxComboItems){
     85                        useComboBox = false;
     86                        useCompleter = true;
     87                        useExtendedCompleter = false;
     88                }
     89                if(resultModel->rowCount() < maxComboItems){
     90                        useComboBox = true;
     91                        useCompleter = false;
     92                        useExtendedCompleter = false;
     93                }
     94                for(int i = 0; i < resultModel->rowCount(); i++){
     95                        mapOutIn.insert
     96                        (
     97                                resultModel->record(i).value(resCol).toString(),
     98                                resultModel->record(i).value(matchCol).toUInt()
     99                        );
     100                }
     101        }
    70102}
    71103
     
    102134  QTextOption textOptions;
    103135  textOptions.setAlignment(Qt::AlignCenter);
    104   painter->drawText(option.rect, mapInOut.value(data, QString()), textOptions);
     136  painter->drawText(option.rect, mapOutIn.key(data, QString()), textOptions);
    105137}
    106138
     
    114146//   if(mapInOut.value(data, QString()).isEmpty())
    115147//     return QStyledItemDelegate::createEditor(parent, option, index);
     148  if(useComboBox){
     149                QComboBox *editor = new QComboBox(parent);
     150                editor->addItems(mapOutIn.uniqueKeys());
     151                connect(editor, SIGNAL(currentIndexChanged(int)), this, SLOT(commitAndCloseEditor()));
     152                return editor;
     153        }
     154        else if(useCompleter){
     155                QLineEdit *editor = new QLineEdit(parent);
     156                QCompleter *completer = new QCompleter(mapOutIn.uniqueKeys(), editor);
     157                editor->setCompleter(completer);
     158                connect(editor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
     159                return editor;
     160        }
     161        else{
     162                QLineEdit *editor = new QLineEdit(parent);
     163                connect(editor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
     164                connect(editor, SIGNAL(textChanged(QString)), this, SLOT(updateCompleter()));
     165                return editor;
     166        }
     167}
     168
     169void DelegateForeignKey::setEditorData(QWidget *editor, const QModelIndex &index) const{
     170  // used to initialize the data of the editor
     171  // this is mainly used to get the editor showing the current data of the model
     172  unsigned int data = index.data().toUInt();
     173  if(mapOutIn.key(data, QString()).isEmpty())
     174    return QStyledItemDelegate::setEditorData(editor, index);
    116175 
    117   QComboBox *editor = new QComboBox(parent);
    118   editor->addItems(mapInOut.values());
    119   connect(editor, SIGNAL(currentIndexChanged(int)), this, SLOT(commitAndCloseEditor()));
    120   return editor;
     176  QComboBox *box = qobject_cast<QComboBox *>(editor);
     177        if(box){   
     178                if(!box->findText(mapOutIn.key(data)))
     179                        return QStyledItemDelegate::setEditorData(editor, index);
     180                box->setCurrentIndex(box->findText(mapOutIn.key(data)));
     181        }
     182        else {
     183                QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
     184                if(!edit){
     185                        return QStyledItemDelegate::setEditorData(editor, index);
     186                }
     187                edit->setText(mapOutIn.key(data));
     188        }
     189}
     190
     191void DelegateForeignKey::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
     192  if(!index.data().canConvert(QVariant::String))
     193    return QStyledItemDelegate::setModelData(editor, model, index);
     194 
     195  QComboBox *box = qobject_cast<QComboBox *>(editor);
     196        if(box){
     197                model->setData(index, mapOutIn.value(box->currentText()));
     198        }
     199        else{
     200                QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
     201                if(!edit){
     202                        return QStyledItemDelegate::setModelData(editor, model, index);
     203                }
     204               
     205                QCompleter *completer = edit->completer();
     206                if(!completer){
     207                        return QStyledItemDelegate::setModelData(editor, model, index);
     208                }
     209               
     210                if(mapOutIn.value(edit->text(), 0) != 0){
     211                        model->setData(index, mapOutIn.value(edit->text()));
     212                        return;
     213                }
     214               
     215//              QModelIndex complIndex = completer->currentIndex();
     216//              if(complIndex.isValid()){
     217// //                   emit addPair(resultModel->data(complIndex).toString(), resultModel->record(complIndex.row()).value(matchCol).toUInt());
     218// //                   mapOutIn.insert(resultModel->data(complIndex).toString(), resultModel->record(complIndex.row()).value(matchCol).toUInt());
     219//                     
     220//                      model->setData(index, mapOutIn.value(edit->text()));
     221//              }
     222        }
    121223}
    122224
     
    127229  QComboBox *editor = qobject_cast<QComboBox *>(sender());
    128230  if(editor){
    129     emit commitData(editor);
    130     emit closeEditor(editor);
     231                emit commitData(editor);
     232//     emit closeEditor(editor);
     233                timer->singleShot(1000, this, SLOT(doCloseEditor()));
    131234  }
    132235}
    133236
    134 void DelegateForeignKey::setEditorData(QWidget *editor, const QModelIndex &index) const{
    135   // used to initialize the data of the editor
    136   // this is mainly used to get the editor showing the current data of the model
    137   unsigned int data = index.data().toUInt();
    138   if(mapInOut.value(data, QString()).isEmpty())
    139     return QStyledItemDelegate::setEditorData(editor, index);
    140  
    141   QComboBox *box = qobject_cast<QComboBox *>(editor);
    142   if(!box)
    143     return QStyledItemDelegate::setEditorData(editor, index);
    144    
    145   if(!box->findText(mapInOut.value(data)))
    146     return QStyledItemDelegate::setEditorData(editor, index);
    147  
    148   box->setCurrentIndex(box->findText(mapInOut.value(data)));
    149 }
    150 
    151 void DelegateForeignKey::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
    152   if(!index.data().canConvert(QVariant::String))
    153     return QStyledItemDelegate::setModelData(editor, model, index);
    154  
    155   QComboBox *box = qobject_cast<QComboBox *>(editor);
    156   if(!box)
    157     return QStyledItemDelegate::setModelData(editor, model, index);
    158    
    159   model->setData(index, mapInOut.key(box->currentText()));
     237void DelegateForeignKey::doCloseEditor()
     238{
     239        QComboBox *editor = qobject_cast<QComboBox *>(sender());
     240  if(editor)
     241                emit closeEditor(editor);
     242}
     243
     244void DelegateForeignKey::updateCompleter()
     245{
     246        QLineEdit *editor = qobject_cast<QLineEdit*>(sender());
     247        if(!editor)
     248                return;
     249       
     250        QCompleter *completer = editor->completer();
     251        if(!completer){
     252                completer = new QCompleter(editor);
     253                editor->setCompleter(completer);
     254        }
     255       
     256        QSqlQuery query;
     257        query.prepare(QString("SELECT %1, %2 FROM %3 WHERE %2 LIKE ?% ORDER BY %2 LIMIT %4")
     258                                                                .arg(matchCol)
     259                                                                .arg(resCol)
     260                                                                .arg(resTable)
     261                                                                .arg(maxCompleteItems));
     262        query.addBindValue(editor->text());
     263        resultModel->setQuery(query);
     264        completer->setModel(resultModel);
     265        completer->setModelSorting(QCompleter::CaseInsensitivelySortedModel);
     266        completer->setCompletionColumn(resultModel->record().indexOf(resCol));
    160267}
    161268
  • branches/release-0.3.0-rc1/src/MediaDBLib/delegateforeignkey.h

    r201 r235  
    2424
    2525#include <QStyledItemDelegate>
     26
    2627#include <QPainter>
    27 #include <QSqlQueryModel>
     28
     29class QSqlQueryModel;
     30class QTimer;
    2831
    2932/**
    3033  * displays the data of a foreignkey
     34        * if there are more than maxComboItems, it switches to QLineEdit with autocompletion
     35        * if there are more than maxCompleteItems, it loads the completer after 3 inserted characters to reduce load
     36        * @todo last one is not useable right now
    3137  */
    3238
     
    3642    /**
    3743      * @param table the table where the foreignkey points to
    38       * @param matchColumn the column which is the same in showed table and foreignkey table (at table "table")
     44      * @param matchColumn the column which is the same in showed table and foreignkey table (at table @p table)
    3945      * @param resultColumn the column at the foreignkey table which holds the content to be displayed
    4046      */
     
    4248                void reloadForeignKeys();
    4349
     50                /**
     51                        * @todo must be really improved to use QCompleter with only part of the table (useExtendedCompleter)
     52                        */
    4453    void paint(QPainter *painter, const QStyleOptionViewItem &option,
    4554            const QModelIndex &index) const;
     
    5463  private slots:
    5564    void commitAndCloseEditor();
     65                void doCloseEditor();
     66                /**
     67                        * @todo must be really improved
     68                        */
     69                void updateCompleter();
     70//              void doAddPair(QString key, unsigned int value);
    5671
    5772  private:
    58     QMap<unsigned int, QString> mapInOut;
     73                /**
     74                        * the QString, int order is needed,
     75                        * because the entries should be ordered after the string's
     76                        */
     77    QMap<QString, unsigned int> mapOutIn;
    5978    QString resTable, matchCol, resCol;
    6079    QAbstractItemModel *model;
     80                QSqlQueryModel *resultModel;
     81                int maxComboItems, maxCompleteItems;
     82                bool useComboBox, useCompleter, useExtendedCompleter;
     83                QTimer *timer;
     84               
     85        signals:
     86//              void addPair(QString key, unsigned int value);
    6187};
    6288
  • branches/release-0.3.0-rc1/src/MediaDBLib/mediamodel.cpp

    r234 r235  
    257257  if ( lastLoad.wish || lastLoad.projects || lastLoad.gifts )
    258258    searchExternal = false;
    259 
     259        lastLoad.searchExternal = searchExternal;
    260260       
    261261                // check which table should be searched
     
    399399{
    400400        // set selection mode
    401         view->setSelectionBehavior(QAbstractItemView::SelectRows);
    402         view->setSelectionMode(QAbstractItemView::ExtendedSelection);
     401//      view->setSelectionBehavior(QAbstractItemView::SelectRows);
     402//      view->setSelectionMode(QAbstractItemView::ExtendedSelection);
    403403       
    404404        // add delegates
    405         addItemDelegates(view);
     405//      addItemDelegates(view);
    406406       
    407407        // hide and resize columns
     
    438438    return;
    439439
     440        // first show all columns (may be there were another model in before us
     441        for(int i = 0; i < columnCount(); i++)
     442                view->showColumn(i);
     443       
    440444  // hide columns
    441         qDebug() << "hideAndResize";
    442   for ( int i = 0; i < hideColumns.size(); i++ ) {
     445        for ( int i = 0; i < hideColumns.size(); i++ ) {
    443446                qDebug() << "hide column: "+ QString::number(hideColumns[i]);
    444447    view->hideColumn( hideColumns[i]);
     
    659662{
    660663        thread->disconnect(this, SLOT(searchSearchPlugins(bool)));
     664        if(!lastLoad.searchExternal)
     665                return;
    661666        if ( (rowCount() == 0) || (!lastStepResult) || (lastUserId == -2)) {
    662667                // evaluating search oder
     
    744749  if ( medium ){
    745750    headerList = medium->supportedAttributesTrans();
    746                 hideColumns << medium->attrs ( "description" ).column;
    747                 hideColumns << medium->attrs ( "min" ).column;
     751                QStringList hideKeys;
     752                hideKeys << "description" << "min" << "listPrice" << "listPriceCurrency";
     753                foreach(QString key, hideKeys){
     754                        ColKeyTrans item = medium->attrs(key);
     755                        if(item.column > -1)
     756                                hideColumns << item.column;
     757                }
    748758                biggestColumn = medium->attrs ( "title" ).column;
    749                 hideColumns << medium->attrs ( "listprice" ).column;
    750                 hideColumns << medium->attrs ( "listPriceCurrency" ).column;
    751759                delete medium;
    752760        }
  • branches/release-0.3.0-rc1/src/MediaDBLib/mediamodel.h

    r234 r235  
    5252        bool gifts;
    5353        bool userNotNeeded;
     54        bool searchExternal;
    5455        unsigned int actualUserId;
    5556};
  • branches/release-0.3.0-rc1/src/MediaDBLib/mediaplugin.h

    r211 r235  
    3131class MediaModel;
    3232class SearchDetailsWidget;
     33class QueryThread;
    3334
    3435class QIcon;
     
    5051    virtual QIcon icon() = 0;
    5152    virtual QString description() = 0;
    52     virtual MediaModel *newModel( QString materialType ) = 0;
     53    virtual MediaModel *newModel( QString materialType, QueryThread *thread = 0 ) = 0;
    5354    virtual SearchDetailsWidget *searchWidget( QString materialType ) = 0;
    5455    virtual bool store() = 0;
     
    111112
    112113Q_DECLARE_INTERFACE ( MediaPlugin,
    113                       "MediaDB.MediaPlugin/0.3.1" );
     114                      "MediaDB.MediaPlugin/0.3.2" );
    114115
    115116#endif // MEDIAPLUGIN_H
  • branches/release-0.3.0-rc1/src/MediaDBLib/medium.cpp

    r233 r235  
    4747#include <QTextTable>
    4848#include <QTextCursor>
     49
     50#include <QDebug>
    4951
    5052QString Medium::exportFormatToString( Medium::ExportFormat format)
     
    503505}
    504506
     507bool Medium::setValue ( QString attribute, QVariant value )
     508{
     509        if(attribute == "source"){
     510                return false;
     511        }
     512       
     513        if(attribute == "type"){
     514                setType(value.toUInt());
     515                return true;
     516        }
     517       
     518        if(attribute == "manufacturer"){
     519                setManufacturer ( value.toUInt() );
     520                return true;
     521        }
     522
     523        if(attribute == "genre"){
     524                setGenre( value.toUInt() );
     525                return true;
     526        }
     527
     528        if(attribute == "title"){
     529                setTitle ( value.toString() );
     530                return true;
     531        }
     532
     533        if(attribute == "persons"){
     534                QStringList person = value.toStringList();
     535                if ( person.size() != 3 )
     536                        return false;
     537                if ( person[0].isEmpty() )
     538                        return false;
     539                MaterialPersonsModel *model = materialPersons();
     540                if ( !model )
     541                        return false;
     542
     543                bool check = false;
     544                unsigned int role = person[2].toUInt ( &check );
     545                // it's a id
     546                if ( check ) {
     547                        model->addPerson ( person[0], person[1], role );
     548                        return true;
     549                }
     550                model->addPerson ( person[0], person[1], person[2] );
     551                return true;
     552        }
     553
     554  if(attribute == "min"){
     555                if(value.canConvert(QVariant::StringList)){
     556                        if(value.toStringList().size() < 1){
     557                                return false;
     558                        }
     559                        else if(value.toStringList().size() == 2){
     560                                if(value.toStringList()[0].isEmpty())
     561                                        return false;
     562                                setMIN(value.toStringList()[0], value.toStringList()[1]);
     563                                return true;
     564                        }
     565                        else{
     566                                if(value.toStringList()[0].isEmpty())
     567                                        return false;
     568                                setMIN(value.toStringList()[0]);
     569                                return true;
     570                        }
     571                }
     572                if(value.toString().isEmpty())
     573                        return false;
     574                setMIN ( value.toString() );
     575                return true;
     576        }
     577
     578        if(attribute == "listPrice"){
     579                setListPrice ( value.toDouble() );
     580                return true;
     581        }
     582
     583        if(attribute == "listPriceCurrency"){
     584                setListPriceCurrency ( value.toUInt() );
     585                return true;
     586        }
     587
     588        if(attribute == "description"){
     589                setDescription(value.toString());
     590                return true;
     591        }
     592
     593        if(attribute == "user"){
     594                setUser ( value.toUInt() );
     595                return true;
     596        }
     597        return false;
     598}
     599
    505600bool Medium::setValue ( int attributeIndex, QVariant value )
    506601{
    507   if ( ( attributeIndex < 0 ) || ( supportedAttributes().size() <= attributeIndex ) )
    508     return false;
    509 
    510         QStringList person;
    511   MaterialPersonsModel *model;
    512   bool check = false;
    513   unsigned int role = 0;
    514   switch ( attributeIndex ) {
    515 
    516     case 0:
    517       return false;
    518 
    519     case 1:
    520       setType ( value.toUInt() );
    521       break;
    522 
    523     case 2:
    524       setManufacturer ( value.toUInt() );
    525       break;
    526 
    527     case 3:
    528       setTitle ( value.toString() );
    529       break;
    530 
    531                 case 4:
    532                         person = value.toStringList();
    533       if ( person.size() != 3 )
    534         return false;
    535       if ( person[0].isEmpty() )
    536         return false;
    537 
    538       model = materialPersons();
    539       if ( !model )
    540         return false;
    541 
    542       role = person[2].toUInt ( &check );
    543       // it's a id
    544       if ( check ) {
    545         model->addPerson ( person[0], person[1], role );
    546         break;
    547       }
    548       model->addPerson ( person[0], person[1], person[2] );
    549                         break;
    550 
    551     case 5:
    552                         if(value.canConvert(QVariant::StringList)){
    553                                 if(value.toStringList().size() < 1){
    554                                         return false;
    555                                 }
    556                                 else if(value.toStringList().size() == 2){
    557                                         if(value.toStringList()[0].isEmpty())
    558                                                 return false;
    559                                         setMIN(value.toStringList()[0], value.toStringList()[1]);
    560                                         break;
    561                                 }
    562                                 else{
    563                                         if(value.toStringList()[0].isEmpty())
    564                                                 return false;
    565                                         setMIN(value.toStringList()[0]);
    566                                         break;
    567                                 }
    568                         }
    569                         if(value.toString().isEmpty())
    570                                 return false;
    571       setMIN ( value.toString() );
    572       break;
    573 
    574     case 6:
    575       setListPrice ( value.toDouble() );
    576       break;
    577 
    578     case 7:
    579       setListPriceCurrency ( value.toUInt() );
    580       break;
    581 
    582     case 8:
    583       setUser ( value.toUInt() );
    584       break;
    585   }
    586 
    587   return true;
    588 }
    589 
    590 bool Medium::setValue ( QString attribute, QVariant value )
    591 {
    592         return setValue ( supportedAttributes().indexOf ( attribute ), value );
     602        foreach(ColKeyTrans item, supportedAttrs()){
     603                if(item.column == attributeIndex)
     604                        return setValue(item.key, value);
     605        }
     606        return false;
     607}
     608
     609QVariant Medium::value ( QString attribute, int role )
     610{
     611        if(attribute ==  "type")
     612      return type();
     613
     614        if(attribute ==  "manufacturer")
     615      return manufacturerName();
     616
     617        if(attribute ==  "genre")
     618                        return genreName();
     619                       
     620        if(attribute ==  "title")
     621      return title();
     622
     623        if(attribute ==  "persons")
     624                        return materialPersonsCombined();
     625                       
     626        if(attribute ==  "min")
     627      return minsCombined();
     628
     629        if(attribute ==  "listPrice")
     630      return listPrice();
     631
     632        if(attribute ==  "listPriceCurrency")
     633      return listPriceCurrency();
     634
     635        if(attribute ==  "description")
     636                        return description();
     637                       
     638        if(attribute ==  "user")
     639      return user();
     640
     641  return QVariant();
    593642}
    594643
     
    596645{
    597646        if ( role == Qt::DecorationRole ) {
    598     if ( attributeIndex == 0 )
     647    if ( attributeIndex == attrs("source").column )
    599648      return sourceIcon();
    600649
     
    609658  }
    610659       
    611   switch ( attributeIndex ) {
    612     case 1:
    613       return type();
    614 
    615     case 2:
    616       return manufacturerName();
    617 
    618     case 3:
    619       return title();
    620 
    621                 case 4:
    622                         return materialPersonsCombined();
    623                        
    624     case 5:
    625       return minsCombined();
    626 
    627     case 6:
    628       return listPrice();
    629 
    630     case 7:
    631       return listPriceCurrency();
    632 
    633     case 8:
    634       return user();
    635   }
    636 
    637   return QVariant();
    638 }
    639 
    640 QVariant Medium::value ( QString attribute, int role )
    641 {
    642   return value ( supportedAttributes().indexOf ( attribute ), role );
     660        foreach(ColKeyTrans item, supportedAttrs()){
     661                if(item.column == attributeIndex)
     662                        return value(item.key, role);
     663        }
     664        return false;
    643665}
    644666
    645667QStringList Medium::supportedAttributes()
    646668{
    647   QStringList attrs;
    648   attrs << tr ( "Source" ) << tr ( "Type" );
    649   attrs << tr ( "Manufacturer" ) << tr ( "Title" ) << tr ( "Persons" );
    650   attrs << tr ( "MIN" ) << tr ( "List Price" );
    651   attrs << tr ( "Currency" ) << tr ( "Owner" );
     669        QStringList result;
     670        foreach(ColKeyTrans item, supportedAttrs()){
     671                result << item.key;
     672        }
     673        return result;
     674}
     675
     676QStringList Medium::supportedAttributesTrans()
     677{
     678        QStringList result;
     679        foreach(ColKeyTrans item, supportedAttrs()){
     680                result << item.translation;
     681        }
     682        return result;
     683}
     684
     685QList<ColKeyTrans> Medium::supportedAttrs()
     686{
     687        QList<ColKeyTrans> attrs;
     688        attrs << ColKeyTrans(0, "source", tr ( "Source" ));
     689        attrs << ColKeyTrans(1, "type", tr ( "Type" ));
     690        attrs << ColKeyTrans(2, "manufacturer", tr ( "Manufacturer" ));
     691        attrs << ColKeyTrans(3, "genre", tr ( "Genre" ));
     692        attrs << ColKeyTrans(4, "title", tr("Title"));
     693        attrs << ColKeyTrans(5, "persons", tr ( "Persons" ));
     694  attrs << ColKeyTrans(6, "min", tr ( "MIN" ));
     695        attrs << ColKeyTrans(7, "listPrice", tr ( "List Price" ));
     696  attrs << ColKeyTrans(8, "listPriceCurrency", tr ( "Currency" ));
     697        attrs << ColKeyTrans(9, "description", tr ( "Description" ));
     698        attrs << ColKeyTrans(10, "owner", tr ( "Owner" ));
     699
    652700  return attrs;
     701}
     702
     703ColKeyTrans Medium::attrs(QString key, int newCol)
     704{
     705        QList<ColKeyTrans> items;
     706        if(newCol > -1){
     707                items = Medium::supportedAttrs();
     708        }
     709        else{
     710                items = supportedAttrs();
     711        }
     712               
     713        foreach(ColKeyTrans item, items){
     714                if(item.key == key){
     715                        if(newCol > -1)
     716                                item.column = newCol;
     717                        return item;
     718                }
     719        }
     720        return ColKeyTrans();
    653721}
    654722
     
    12281296}
    12291297
     1298void Medium::setMaterialPerson(QString name, QString givenName, QString role)
     1299{
     1300        materialPersons()->addPerson(name, givenName, role);
     1301}
     1302
     1303void Medium::setMaterialPerson(QString name, QString givenName, unsigned int role)
     1304{
     1305        materialPersons()->addPerson(name, givenName, role);
     1306}
     1307
    12301308void Medium::setMaterialPersons(MaterialPersonsModel* personModel)
    12311309{
     
    13341412        return !operator==(med);
    13351413}
    1336 
    13371414
    13381415void Medium::imageDownloaded()
  • branches/release-0.3.0-rc1/src/MediaDBLib/medium.h

    r233 r235  
    4242class QTextTable;
    4343
     44class ColKeyTrans {
     45        public:
     46                ColKeyTrans(int col = -1, QString key = QString(), QString trans = QString()){
     47                        column = col;
     48                        this->key = key;
     49                        translation = trans;
     50                }
     51                int column;
     52                QString key;
     53                QString translation;
     54};
     55               
    4456/**
    4557        * This is the base of all items in models which handle medias
     
    98110                        * @attention if you want to set MINs, you can either give only a min and the type will be gassed,
    99111                        * @attention or you can give a QStringList: min, type
     112                        * in the subclass function, only special attributes, which Medium does not support, must be handled
     113                        * to handle standard stuff, call return Medium::setValue(QString, QVariant) at the end
    100114        */
    101     virtual bool setValue ( int attributeIndex, QVariant value );
    102     bool setValue ( QString attribute, QVariant value );
    103     virtual QVariant value ( int attributeIndex, int role );
    104     QVariant value ( QString attribute, int role );
    105     /**
    106         * a list with supported attributes
     115                virtual bool setValue ( QString attribute, QVariant value );
     116    bool setValue ( int attributeIndex, QVariant value );
     117                virtual QVariant value ( QString attribute, int role );
     118    QVariant value ( int attributeIndex, int role );
     119    /**
     120        * a list with supported attributes (not translated)
    107121        */
    108     virtual QStringList supportedAttributes();
     122    QStringList supportedAttributes();
     123                QStringList supportedAttributesTrans();
     124                /**
     125                        * a list of supported attributes (not translated, translated)
     126                        */
     127                virtual QList<ColKeyTrans> supportedAttrs();
     128                /**
     129                        * this function returns the ColKeyTrans belonging to attribut @p key.
     130                        * It can be used to insert translations of this class into the
     131                        * supportedAttrs list of a subclass by
     132                        * attrsSubclass << Medium::attrs(key, newCol);
     133                        * @return if key not an empty ColKeyTrans is returned
     134                        * @note if newCol is greator -1 the base class implementation is used!
     135                        */
     136                ColKeyTrans attrs(QString key, int newCol = -1);
     137
    109138
    110139    virtual MDialog* editWidget();
     
    198227   
    199228    // handle material persons
     229                void setMaterialPerson(QString name, QString givenName, QString role);
     230                void setMaterialPerson(QString name, QString givenName, unsigned int role);
    200231                void setMaterialPersons(MaterialPersonsModel *personModel);
    201232    MaterialPersonsModel *materialPersons() const;
  • branches/release-0.3.0-rc1/src/MediaDBLib/mediumgiftwidget.cpp

    r214 r235  
    310310                presenteesModel->addPerson(person);
    311311        }
     312        userSelected(QModelIndex());
     313        presenteeSelected(QModelIndex());
    312314}
    313315
     
    331333                userModel->addPerson(person);
    332334        }
     335        userSelected(QModelIndex());
     336        presenteeSelected(QModelIndex());
    333337}
    334338
     
    400404}
    401405
     406void MediumGiftWidget::userSelected ( QModelIndex index )
     407{
     408        userIndex = index;
     409       
     410        addPresenteeButton->setEnabled( false );
     411        if(userIndex.isValid())
     412                addPresenteeButton->setEnabled(true);
     413}
     414
     415void MediumGiftWidget::presenteeSelected ( QModelIndex index )
     416{
     417        presenteesIndex = index;
     418       
     419        removePresenteeButton->setEnabled( false );
     420        if(presenteesIndex.isValid())
     421                removePresenteeButton->setEnabled(true);
     422}
     423
    402424void MediumGiftWidget::init()
    403425{
     
    410432        connect(removePresenteeButton, SIGNAL(clicked()), this, SLOT(removePresentees()));
    411433        connect(presenteesView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(presenteeContextMenu(QPoint)));
     434        connect(presenteesView, SIGNAL(clicked(QModelIndex)), this, SLOT(presenteeSelected(QModelIndex)));
     435        connect(usersView, SIGNAL(clicked(QModelIndex)), this, SLOT(userSelected(QModelIndex)));
    412436        presenteesView->setContextMenuPolicy(Qt::CustomContextMenu);
    413437        connect(giftOnlyEdit, SIGNAL(stateChanged(int)), this, SLOT(setGiftOnly()));
     
    432456       
    433457        setEnabled(false);
     458        userSelected(QModelIndex());
     459        presenteeSelected(QModelIndex());
    434460}
    435461
  • branches/release-0.3.0-rc1/src/MediaDBLib/mediumgiftwidget.h

    r201 r235  
    4848                void giftGiven();
    4949                void giftNotGiven();
     50                void userSelected(QModelIndex index);
     51                void presenteeSelected(QModelIndex index);
    5052       
    5153        private:
     
    5456                Medium *medium;
    5557                PersonsModel *userModel, *presenteesModel;
     58                QModelIndex userIndex, presenteesIndex;
    5659                QList<Person*> givenGift;
    5760};
  • branches/release-0.3.0-rc1/src/MediaDBLib/minmodel.h

    r227 r235  
    5858                MINModel *copyModel();
    5959                QString combineMINs();
     60                MediumMIN * min(QString minType);
    6061                QStringList mins(QString minType);
    6162               
  • branches/release-0.3.0-rc1/src/MediaDBLib/searchplugin.h

    r211 r235  
    5555    virtual QIcon icon() = 0;
    5656    virtual QString description() = 0;
    57     virtual QStringList supportedAttributes() = 0;
     57                /**
     58                        * a list of supported attributes (key, translation)
     59                        * This list should contain only special attributes, not supported by Medium.
     60                        */
     61    virtual QMap<QString, QString> supportedAttributes() = 0;
    5862    /**
    59         * A list of supported Categories which can be searched.
     63        * A list of supported Categories which can be searched (key, translation).
    6064        * The categories should represent different material types.
    6165        * @see Amazon
    6266        */
    63     virtual QStringList supportedCategories() = 0;
     67    virtual QMap<QString, QString> supportedCategories() = 0;
    6468    virtual SettingsWidget *settingsWidget() = 0;
    6569    virtual SetupWizardObject *wizardObject() = 0;
     
    120124
    121125Q_DECLARE_INTERFACE ( SearchPlugin,
    122                       "MediaDB.SearchPlugin/0.3.3" );
     126                      "MediaDB.SearchPlugin/0.3.4" );
    123127
    124128#endif // SEARCHPLUGIN_H
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/CMakeLists.txt

    r220 r235  
    66        SET(books_TS ${books_TS} lang/books_de.ts)
    77ENDIF(L10N_DE)
     8IF(L10N_EN)
     9        SET(books_TS ${books_TS} lang/books_en.ts)
     10ENDIF(L10N_EN)
    811
    912SET(books_QRC
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/book.cpp

    r233 r235  
    3131#include <QTextTable>
    3232#include <QTextCursor>
     33
     34#include <QDebug>
    3335
    3436Book::Book ( Medium *newParent ) : Medium ( newParent )
     
    238240}
    239241
    240 bool Book::setValue ( int attributeIndex, QVariant value )
    241 {
    242   if ( ( attributeIndex < 0 ) || ( supportedAttributes().size() <= attributeIndex ) )
    243     return false;
    244 
    245   QStringList person;
    246   MaterialPersonsModel *model;
    247   bool check = false;
    248   unsigned int role = 0;
    249   switch ( attributeIndex ) {
    250     case 1:
    251       return Medium::setValue(Medium::supportedAttributes().indexOf(tr("Title")), value);
    252                        
    253     case 2:
    254                         return Medium::setValue(Medium::supportedAttributes().indexOf(tr("Persons")), value);
    255 
    256     case 3:
    257       setEdition ( value.toUInt() );
    258       return true;
    259 
    260     case 4:
    261       return Medium::setValue(Medium::supportedAttributes().indexOf(tr("Manufacturer")), value);
    262                        
    263                 case 5:
    264                         setGenre ( value.toString() );
    265                         return true;
    266 
    267     case 6:
    268       setPublicationPlace ( value.toString() );
    269       return true;
    270 
    271     case 7:
    272       setPublicationDate ( value.toDate() );
    273       return true;
    274 
    275     case 8:
    276       return Medium::setValue(Medium::supportedAttributes().indexOf(tr("MIN")), value);
    277 
    278     case 9:
    279       setPages ( value.toUInt() );
    280       return true;
    281 
    282     case 10:
    283       setDescription ( value.toString() );
    284       return true;
    285 
    286     case 11:
    287       setUser ( value.toUInt() );
    288       return true;
    289                        
    290                 case 12:
    291                         setListPrice( value.toDouble() );
    292                         return true;
     242bool Book::setValue ( QString attribute, QVariant value )
     243{
     244        if(attribute == "publisher"){
     245                setManufacturer(value.toUInt());
     246        }
     247        if(attribute == "edition"){
     248                setEdition(value.toUInt());
     249                return true;
     250        }
     251       
     252        if(attribute =="pubPlace"){
     253                setPublicationPlace(value.toString());
     254                return true;
     255        }
     256       
     257        if(attribute == "pubDate"){
     258                setPublicationDate(value.toDate());
     259                return true;
     260        }
     261
     262        if(attribute == "pages"){
     263                setPages(value.toUInt());
     264                return true;
     265        }
     266  return Medium::setValue(attribute, value);
     267}
     268
     269QVariant Book::value ( QString attribute, int role )
     270{
     271        if ( role == Qt::DisplayRole ){
     272                if(attribute == "publisher")
     273                        return manufacturerName();
    293274               
    294                 case 13:
    295                         bool check;
    296                         unsigned int curId = value.toUInt(&check);
    297                         if(check){
    298                                 setListPriceCurrency(curId);
    299                         }
    300                         else{
    301                                 setListPriceCurrency(value.toString());
    302                         }
    303                         return true;
    304   }
    305 
    306   return false;
    307 }
    308 
    309 QVariant Book::value ( int attributeIndex, int role )
    310 {
    311         // formatting should be the same for al medias,
    312         // unless there are good reasons to do it in another way
    313         if ( role != Qt::DisplayRole )
    314     return Medium::value(attributeIndex, role);
    315  
    316   switch ( attributeIndex ) {
    317 
    318     case 0:
    319       return sourceIcon();
    320 
    321     case 1:
    322       return title();
    323 
    324     case 2:
    325                         return materialPersonsCombined();
    326 
    327     case 3:
    328       return edition();
    329 
    330     case 4:
    331       return manufacturerName();
    332                        
    333                 case 5:
    334                         return genreName();
    335 
    336     case 6:
    337       return publicationPlace();
    338 
    339     case 7:
    340       return publicationDate();
    341 
    342     case 8:
    343       return minsCombined();
    344 
    345     case 9:
    346       return pages();
    347 
    348     case 10:
    349       return description();
    350 
    351     case 11:
    352       return user();
    353                        
    354                 case 12:
    355                         return listPrice();
    356                        
    357                 case 13:
    358                         return listPriceCurrency();
    359   }
    360 
    361   return QVariant();
    362 }
    363 
    364 QStringList Book::supportedAttributes()
    365 {
    366   QStringList attrs;
    367   attrs << tr ( "Source" ) << tr ( "Title" );
    368   attrs << tr ( "Author" ) << tr ( "Edition" );
    369   attrs << tr ( "Publisher" ) << tr ( "Genre" ) << tr ( "Pub. Place" );
    370   attrs << tr ( "Pub. Date" ) << tr ( "MIN" );
    371   attrs << tr ( "Pages" ) << tr ( "Description" ) << tr ( "Owner" );
    372         attrs << tr ( "List price" ) << tr ( "List price currency" );
    373   return attrs;
     275                if(attribute == "edition")
     276                        return edition();
     277               
     278                if(attribute == "pubPlace")
     279                        return publicationPlace();
     280               
     281                if(attribute == "pubDate")
     282                        return publicationDate();
     283               
     284                if(attribute == "pages")
     285                        return pages();
     286        }
     287  return Medium::value(attribute, role);
    374288}
    375289
     
    429343  QStringList values;
    430344  if ( titleOnly ) {
    431     values << tr ( "Title" );
    432     values << tr ( "Authors" );
    433     values << tr ( "Edition" );
    434     values << tr ( "Publisher" );
    435     values << tr ( "EAN" );
    436     values << tr ( "Pages" );
     345    values << attrs ( "title" ).translation;
     346    values << attrs ( "persons" ).translation;
     347    values << attrs ( "edition" ).translation;
     348    values << attrs ( "publisher" ).translation;
     349    values << attrs ( "min" ).translation;
     350    values << attrs ( "pages" ).translation;
    437351    values << tr ( "Wish" );
    438352  } else {
    439353    values << title();
    440     MaterialPersonsModel *model = materialPersons();
    441     if ( model ) {
    442       QStringList authors;
    443       for ( int i = 0; i < model->rowCount(); i++ ) {
    444         authors.append
    445         (
    446           QString ( "%1, %2" )
    447           .arg ( model->data ( model->index ( i, 0 ) ).toString() )
    448           .arg ( model->data ( model->index ( i, 1 ) ).toString().left ( 1 ) )
    449         );
    450       }
    451       values << authors.join ( tr ( " and " ) );
    452     }
     354    values << materialPersonsCombined();
    453355    values << QString::number ( edition() );
    454356    values << manufacturerName();
     
    485387}
    486388
     389
     390QList<ColKeyTrans> Book::supportedAttrs()
     391{
     392  QList<ColKeyTrans> result;
     393  result << Medium::attrs("source", 0);
     394        result << Medium::attrs("title", 1);
     395        result << Medium::attrs("persons", 2);
     396        result << ColKeyTrans(3, "edition", tr ( "Edition" ));
     397  result << ColKeyTrans(4, "publisher", tr ( "Publisher" ));
     398        result << Medium::attrs("genre", 5);
     399        result << ColKeyTrans(6, "pubPlace", tr ( "Pub. Place" ));
     400  result << ColKeyTrans(7, "pubDate",  tr ( "Pub. Date" ));
     401        result << Medium::attrs("min", 8);
     402  result << ColKeyTrans(9, "pages",  tr ( "Pages" ));
     403        result << Medium::attrs("listPrice", 10);
     404        result << Medium::attrs("listPriceCurrency", 11);
     405        result << Medium::attrs("description", 12);
     406        result << Medium::attrs("owner", 13);
     407  return result;
     408}
     409
    487410#include "book.moc"
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/book.h

    r212 r235  
    3535    bool select ( unsigned int searchId, unsigned int userId = 0 );
    3636    bool store(bool addOwner = false, bool startTransaction = true);
    37     bool setValue ( int attributeIndex, QVariant value );
    38     QVariant value ( int attributeIndex, int role );
    39     QStringList supportedAttributes();
     37    bool setValue ( QString attribute, QVariant value );
     38    QVariant value ( QString attribute, int role );
    4039    MDialog *editWidget();
    4140
     
    5049                bool exportMedium(QTextTable *table, Medium::ExportFormat format, bool titleOnly = false);
    5150
     51        protected:
     52                QList<ColKeyTrans> supportedAttrs();
     53               
    5254  private:
    5355    unsigned int myPages;
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/books.cpp

    r201 r235  
    7272}
    7373
    74 MediaModel *Books::newModel ( QString materialType )
     74MediaModel *Books::newModel ( QString materialType, QueryThread *thread )
    7575{
    7676        if(materialType != tr ( "Book" ))
    7777                return 0;
    78   BooksModel *model = new BooksModel ( this );
     78  BooksModel *model = new BooksModel ( thread, this );
    7979  return model;
    8080}
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/books.h

    r211 r235  
    4343    QIcon icon();
    4444    QString description();
    45     MediaModel *newModel( QString materialType );
     45    MediaModel *newModel( QString materialType, QueryThread *thread );
    4646    SearchDetailsWidget *searchWidget( QString materialType );
    4747    bool store();
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/booksmodel.cpp

    r227 r235  
    3030#include <QStringList>
    3131
    32 BooksModel::BooksModel ( QObject* parent ) : MediaModel ( parent )
     32BooksModel::BooksModel ( QueryThread *queryThread, QObject* parent ) : MediaModel ( parent )
    3333{
    34         setupModel();
    35         hideColumns << headerList.indexOf ( tr( "List price" ) );
    36         hideColumns << headerList.indexOf ( tr( "MIN" ) );
    37         hideColumns << headerList.indexOf ( tr( "List price currency" ) );
     34        setupModel(queryThread);
    3835}
    3936
    4037MediaModel *BooksModel::createNewModel()
    4138{
    42   return new BooksModel();
     39  return new BooksModel(0);
    4340}
    4441
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/booksmodel.h

    r201 r235  
    3030
    3131  public:
    32     BooksModel ( QObject *parent = 0 );
     32    BooksModel ( QueryThread *queryThread, QObject *parent = 0 );
    3333//     ~BooksModel();
    3434
  • branches/release-0.3.0-rc1/src/MediaPlugins/Books/isbnvalidatorplugin/CMakeLists.txt

    r224 r235  
    66
    77IF(L10N_DE)
    8         SET(validator_TS ${validator_TS} lang/isbnvalidator_de.ts)
     8        SET(validator_TS ${validator_TS} lang/isbnvalidatorplugin_de.ts)
    99ENDIF(L10N_DE)
     10IF(L10N_EN)
     11        SET(validator_TS ${validator_TS} lang/isbnvalidatorplugin_en.ts)
     12ENDIF(L10N_EN)
    1013
    1114SET(validator_CPP
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/CMakeLists.txt

    r195 r235  
    66        SET(cds_TS ${cds_TS} lang/cds_de.ts)
    77ENDIF(L10N_DE)
     8IF(L10N_EN)
     9        SET(cds_TS ${cds_TS} lang/cds_en.ts)
     10ENDIF(L10N_EN)
    811
    912SET(cds_QRC
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/cd.cpp

    r233 r235  
    4242       
    4343  myDiscs = 0;
    44   myTracks = new TracksModel ( this );
     44  myTracks = new TracksModel ( 0, this );
    4545        connect(myTracks, SIGNAL(error(QString)), this, SLOT(errorByPass(QString)));
    4646        connect(myTracks, SIGNAL(warning(QString)), this, SLOT(warningByPass(QString)));
     
    285285}
    286286
    287 bool CD::setValue ( int attributeIndex, QVariant value )
    288 {
    289   if ( ( attributeIndex < 0 ) || ( supportedAttributes().size() <= attributeIndex ) )
    290     return false;
    291 
    292         QStringList items;
    293         MaterialPersonsModel *model = 0;
    294         MaterialPerson *person = 0;
    295         TracksModel *trackModel = 0;;
    296         Track *track = 0;
    297         bool check = false;
    298         unsigned int role = 0;
    299         switch(attributeIndex){
    300                 case 0:
    301                         return false;
     287bool CD::setValue ( QString attribute, QVariant value )
     288{
     289 
     290        if(attribute == "label"){
    302291               
    303                 case 1:
    304                         return Medium::setValue(Medium::supportedAttributes().indexOf(tr("Title")), value);
    305                        
    306                 case 2:
    307                         return Medium::setValue(Medium::supportedAttributes().indexOf(tr("Persons")), value);
    308                        
    309                 case 3:
    310                         return Medium::setValue(Medium::supportedAttributes().indexOf(tr("Manufacturer")), value);
    311                        
    312                 case 4:
    313                         setPublicationDate(value.toDate());
    314                         return true;
    315                        
    316                 case 5:
    317                         setDiscs(value.toUInt());
    318                         return true;
    319                        
    320                 case 6:
    321                         return Medium::setValue(Medium::supportedAttributes().indexOf(tr("MIN")), value);
    322                        
    323                 case 7:
    324                         setDescription(value.toString());
    325                         return true;
    326                        
    327                 case 9:
    328                         items = value.toStringList();
    329                         if(items.size() != 4)
    330                                 return false;
    331                         if(items[2].isEmpty())
    332                                 return false;
    333                        
    334                         trackModel = tracks();
    335                         if(!trackModel)
    336                                 return false;
    337 
    338                         track = qobject_cast<Track*>(trackModel->addEmptyMedium());
    339                         if(!track)
    340                                 return false;
    341                         track->setAlbumMode(true);
    342                         track->setDisc(items[0].toUInt());
    343                         track->setTrackNumber(items[1].toUInt());
    344                         track->setTitle(items[2]);
    345                         track->setLength(QTime::fromString(items[3], "hh:mm:ss"));
    346                        
    347                         // set default artist and label
    348                         track->setManufacturer(manufacturer(), false);
    349                         track->setManufacturer(manufacturerName(), false);
    350                         model = materialPersons();
    351                         if(model){
    352                                 if(model->rowCount() == 1){
    353                                         person = qobject_cast<MaterialPerson*>(model->personFromIndex(model->index(0,0)));
    354                                         if(person){
    355                                                 if((!person->name().contains(tr("Various"))) && (!person->givenName().contains(tr("Various")))){
    356                                                         model = track->materialPersons();
    357                                                         if(model){
    358                                                                 model->addPerson(person);
    359                                                         }
     292                return true;
     293        }
     294       
     295        if(attribute == "pubDate"){
     296                setPublicationDate(value.toDate());
     297                return true;
     298        }
     299
     300        if(attribute == "discs"){
     301                setDiscs(value.toUInt());
     302                return true;
     303        }
     304       
     305        if(attribute == "track"){
     306                TracksModel *trackModel = 0;;
     307                Track *track = 0;
     308                QStringList items = value.toStringList();
     309                if(items.size() != 4)
     310                        return false;
     311                if(items[2].isEmpty())
     312                        return false;
     313               
     314                trackModel = tracks();
     315                if(!trackModel)
     316                        return false;
     317
     318                track = qobject_cast<Track*>(trackModel->addEmptyMedium());
     319                if(!track)
     320                        return false;
     321                track->setAlbumMode(true);
     322                track->setDisc(items[0].toUInt());
     323                track->setTrackNumber(items[1].toUInt());
     324                track->setTitle(items[2]);
     325                track->setLength(QTime::fromString(items[3], "hh:mm:ss"));
     326               
     327                // set default artist and label
     328                track->setManufacturer(manufacturer(), false);
     329                track->setManufacturer(manufacturerName(), false);
     330                MaterialPersonsModel *model = materialPersons();
     331                if(model){
     332                        if(model->rowCount() == 1){
     333                                MaterialPerson *person = qobject_cast<MaterialPerson*>(model->personFromIndex(model->index(0,0)));
     334                                if(person){
     335                                        if((!person->name().contains(tr("Various"))) && (!person->givenName().contains(tr("Various")))){
     336                                                model = track->materialPersons();
     337                                                if(model){
     338                                                        model->addPerson(person);
    360339                                                }
    361340                                        }
    362341                                }
    363342                        }
    364                         return true;
    365                        
    366                 case 10:
    367                         setListPrice( value.toDouble() );
    368                         return true;
    369                
    370                 case 11:
    371                         bool check;
    372                         unsigned int curId = value.toUInt(&check);
    373                         if(check){
    374                                 setListPriceCurrency(curId);
    375                         }
    376                         else{
    377                                 setListPriceCurrency(value.toString());
    378                         }
    379                         return true;
    380         }
    381        
    382         return false;
    383 }
    384 
    385 QVariant CD::value ( int attributeIndex, int role )
     343                }
     344                return true;
     345        }
     346       
     347       
     348        return Medium::setValue(attribute, value);
     349}
     350
     351QVariant CD::value ( QString attribute, int role )
    386352{
    387353        // formatting should be the same for al medias,
    388354        // unless there are good reasons to do it in another way
    389355        if ( role != Qt::DisplayRole )
    390     return Medium::value(attributeIndex, role);
     356    return Medium::value(attribute, role);
    391357 
    392   switch ( attributeIndex ) {
    393 
    394                 case 1:
    395       return title();
    396 
    397     case 2:
    398       return materialPersonsCombined();
    399 
    400     case 3:
    401       return manufacturerName();
    402 
    403     case 4:
    404       return publicationDate().toString(tr("MM/yyyy"));
    405 
    406     case 5:
    407       return discs();
    408 
    409     case 6:
    410       return minsCombined();
    411 
    412     case 7:
    413                         description();
    414                        
    415                 case 8:
    416       return user();
    417                        
    418                 case 10:
    419                         return listPrice();
    420                        
    421                 case 11:
    422                         return listPriceCurrency();
    423   }
    424 
    425   return QVariant();
    426 }
    427 
    428 QStringList CD::supportedAttributes()
    429 {
    430   QStringList attrs;
    431   attrs << tr ( "Source" ) << tr ( "Title" );
    432   attrs << tr ( "Artist" ) << tr ( "Label" );
    433   attrs << tr ( "Pub. Date" ) << tr ( "Discs" );
    434   attrs << tr ( "MIN" ) << tr ("Description") << tr ( "Owner" )  << tr( "Track" );
    435         attrs << tr ( "List price" ) << tr ( "List price currency" );
    436   return attrs;
     358        if(attribute == "label")
     359                return manufacturerName();
     360       
     361        if(attribute == "pubDate")
     362                return publicationDate();
     363       
     364        if(attribute == "discs")
     365                return discs();
     366       
     367  return Medium::value(attribute, role);
    437368}
    438369
     
    471402        QStringList values;
    472403        if(titleOnly){
    473                 values << tr("Title");
    474                 values << tr("Artist");
    475                 values << tr("Discs");
    476                 values << tr("Label");
    477                 values << tr("EAN");
     404                values << attrs ( "title" ).translation;
     405                values << attrs ( "persons" ).translation;
     406                values << attrs ( "discs" ).translation;
     407                values << attrs ( "label" ).translation;
     408                values << attrs ( "min" ).translation;
    478409                values << tr("Wish");
    479410        }
     
    546477}
    547478
     479QList<ColKeyTrans> CD::supportedAttrs()
     480{
     481  QList<ColKeyTrans> attrs;
     482  attrs << Medium::attrs("source", 0);
     483        attrs << Medium::attrs("title", 1);
     484  attrs << Medium::attrs("persons", 2);
     485        attrs << ColKeyTrans(3, "label", tr ( "Label" ));
     486  attrs << ColKeyTrans(4, "pubDate", tr ( "Pub. Date" ));
     487        attrs << ColKeyTrans(5, "discs", tr ( "Discs" ));
     488  attrs << Medium::attrs("min", 6);
     489        attrs << ColKeyTrans(7, "track", tr( "Track" ));
     490        attrs << Medium::attrs("listPrice", 8);
     491        attrs << Medium::attrs("listPriceCurrency", 9);
     492        attrs << Medium::attrs("description", 10);
     493        attrs << Medium::attrs("owner", 11);
     494  return attrs;
     495}
     496
    548497bool CD::storeTracks(bool newCD)
    549498{
     
    711660{
    712661        if(!myTracks)
    713                 myTracks = new TracksModel(this);
     662                myTracks = new TracksModel(0, this);
    714663       
    715664        if(id() < 1)
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/cd.h

    r212 r235  
    4646                        * @attention QStringList cd, track, title, length (may be empty, format: hh:mm:ss)
    4747                        */
    48     bool setValue ( int attributeIndex, QVariant value );
    49     QVariant value ( int attributeIndex, int role );
    50     QStringList supportedAttributes();
     48    bool setValue ( QString attribute, QVariant value );
     49    QVariant value ( QString attribute, int role );
    5150    MDialog *editWidget();
    5251
     
    6261    bool removeTrack(QModelIndex index);
    6362
     63        protected:
     64                QList<ColKeyTrans> supportedAttrs();
     65               
    6466  private:
    6567                /**
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/cds.cpp

    r201 r235  
    7373}
    7474
    75 MediaModel *CDs::newModel ( QString materialType )
     75MediaModel *CDs::newModel ( QString materialType, QueryThread *thread )
    7676{
    7777        MediaModel *model = 0;
    7878        if(materialType == tr ( "Audio CD" ))
    79                 model = new CDsModel ( this );
     79                model = new CDsModel ( thread, this );
    8080        if(materialType == tr ( "Track" ))
    81                 model = new TracksModel ( this );
     81                model = new TracksModel ( thread, this );
    8282  return model;
    8383}
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/cds.h

    r211 r235  
    4444    QIcon icon();
    4545    QString description();
    46     MediaModel *newModel( QString materialType );
     46    MediaModel *newModel( QString materialType, QueryThread* thread );
    4747    SearchDetailsWidget *searchWidget( QString materialType );
    4848    bool store();
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/cdsmodel.cpp

    r227 r235  
    2323#include "delegateforeignkey.h"
    2424#include "delegateuser.h"
     25#include "cds.h"
    2526
    2627#include <QAbstractItemView>
     
    2930#include <QSqlQuery>
    3031
    31 #include <QDebug>
    32 #include "cds.h"
    33 
    34 CDsModel::CDsModel ( QObject* parent ) : MediaModel ( parent )
     32CDsModel::CDsModel ( QueryThread *queryThread, QObject* parent ) : MediaModel ( parent )
    3533{
    36         setupModel();
    37         hideColumns << headerList.indexOf ( tr( "Track" ) );
    38         hideColumns << headerList.indexOf ( tr( "MIN" ) );
    39         hideColumns << headerList.indexOf ( tr( "List price" ) );
    40         hideColumns << headerList.indexOf ( tr( "List price currency" ) );
     34        setupModel(queryThread);
     35        CD *item = new CD();
     36        hideColumns << item->attrs ( "track" ).column;
     37        delete item;
    4138}
    4239
    4340MediaModel* CDsModel::createNewModel()
    4441{
    45     return new CDsModel();
     42    return new CDsModel(0);
    4643}
    4744
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/cdsmodel.h

    r201 r235  
    3030
    3131  public:
    32     CDsModel ( QObject *parent = 0 );
     32    CDsModel ( QueryThread *queryThread, QObject *parent = 0 );
    3333               
    3434                MediaModel *createNewModel();
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/track.cpp

    r212 r235  
    245245}
    246246
    247 bool Track::setValue ( int attributeIndex, QVariant value )
     247bool Track::setValue ( QString attribute, QVariant value )
    248248{
    249249  if(!albumMode)
    250                 return false;
     250                return Medium::setValue(attribute, value);
    251251       
    252252        bool result = false;
    253         switch(attributeIndex){
    254                 case 0:
    255                         setDisc(value.toUInt(&result));
    256                         return result;
    257                 case 1:
    258                         setTrackNumber(value.toUInt(&result));
    259                         return result;
    260         }
    261        
    262         QStringList person;
    263         MaterialPersonsModel *model;
    264         bool check = false;
    265         unsigned int role = 0;
    266         switch(attributeIndex){
    267                 case 2:
    268                         person = value.toStringList();
    269                         if(person.size() != 3)
    270                                 return false;
    271                         if(person[0].isEmpty())
    272                                 return false;
    273                        
    274                         model = materialPersons();
    275                         if(!model)
    276                                 return false;
    277 
    278                         role = person[2].toUInt(&check);
    279                         // it's a id
    280                         if(check){
    281                                 model->addPerson(person[0], person[1], role);
    282                                 return true;
    283                         }
    284                         model->addPerson(person[0], person[1], person[2]);
    285                         return true;
    286         }
    287         return false;
    288 }
    289 
    290 QVariant Track::value ( int attributeIndex, int role )
    291 {
    292         if(albumMode){
    293                 if ( role == Qt::DecorationRole )
    294                         return QVariant();
    295                
    296                 if ( role != Qt::DisplayRole )
    297                         return Medium::value(attributeIndex, role);
    298                
    299                 switch ( attributeIndex ) {
    300 
    301                         case 0:
    302                                 return disc();
    303 
    304                         case 1:
    305                                 return trackNumber();
    306                                
    307                         case 2:
    308                                 return materialPersonsCombined();
    309 
    310                         case 3:
    311                                 return title();
    312                                
    313                         case 4:
    314                                 return length().toString("HH:mm:ss");
    315 
    316                 }
    317                 return QVariant();
    318         }
    319        
    320         // formatting should be the same for al medias,
    321         // unless there are good reasons to do it in another way
    322         if ( role != Qt::DisplayRole ) {
    323     return Medium::value(attributeIndex, role);
    324   }
    325  
    326   switch ( attributeIndex ) {
    327 
    328     case 1:
    329       return title();
    330 
    331     case 2:
    332                         return materialPersonsCombined();
    333 
    334                 case 3:
    335       return length().toString("HH:mm:ss");
    336                        
    337     case 4:
    338       return user();
    339   }
    340 
    341   return QVariant();
    342 }
    343 
    344 QStringList Track::supportedAttributes()
    345 {
    346   QStringList attrs;
    347         if(albumMode){
    348                 attrs << tr ( "Disc" ) << tr ( "Nr" );
    349                 attrs << tr ( "Artist" ) << tr ( "Title" );
    350                 attrs << tr ( "Length" );
    351         }
    352         else{
    353                 attrs << tr ( "Source" ) << tr ( "Title" );
    354                 attrs << tr ( "Artist" ) << tr ( "Length" );
    355                 attrs << tr ( "Owner" );
    356         }
    357   return attrs;
     253        if(attribute == "disc"){
     254                setDisc(value.toUInt(&result));
     255                return result;
     256        }
     257        if(attribute == "nr"){
     258                setTrackNumber(value.toUInt(&result));
     259                return result;
     260        }
     261        if(attribute == "length"){
     262                setLength(value.toTime());
     263                return true;
     264        }
     265        return Medium::setValue(attribute, value);
     266}
     267
     268QVariant Track::value ( QString attribute, int role )
     269{
     270        if ( role != Qt::DisplayRole )
     271                return Medium::value(attribute, role);
     272       
     273        if(attribute == "disc")
     274                return disc();
     275        if(attribute == "nr")
     276                return trackNumber();
     277        if(attribute == "length")
     278                return length().toString("HH:mm:ss");
     279  return Medium::value(attribute, role);
    358280}
    359281
     
    382304        QStringList values;
    383305        if(titleOnly){
    384                 values << tr("Title");
    385                 values << tr("Artist");
    386                 values << tr("Length");
     306                values << attrs ( "title" ).translation;
     307                values << attrs ( "persons" ).translation;
     308                values << attrs ( "length" ).translation;
    387309                values << tr("Wish");
    388310        }
     
    531453}
    532454
     455QList<ColKeyTrans> Track::supportedAttrs()
     456{
     457  QList<ColKeyTrans> attrs;
     458        if(albumMode){
     459                attrs << ColKeyTrans(0, "disc", tr ( "Disc" ));
     460                attrs << ColKeyTrans(1, "nr", tr ( "Nr" ));
     461                attrs << Medium::attrs("persons", 2);
     462                attrs << Medium::attrs("title", 3);
     463                attrs << ColKeyTrans(4, "length", tr ( "Length" ));
     464        }
     465        else{
     466                attrs << Medium::attrs("source", 0);
     467                attrs << Medium::attrs("title", 1);
     468                attrs << Medium::attrs("persons", 2);
     469                attrs << ColKeyTrans(3, "length", tr ( "Length" ));
     470                attrs << Medium::attrs("owner", 4);
     471        }
     472  return attrs;
     473}
     474
    533475#include "track.moc"
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/track.h

    r212 r235  
    3939    bool select ( unsigned int searchId, unsigned int userId = 0 );
    4040    bool store(bool addOwner = false, bool startTransaction = true);
    41                 bool setValue ( int attributeIndex, QVariant value );
    42     QVariant value ( int attributeIndex, int role );
    43     QStringList supportedAttributes();
     41                bool setValue ( QString attribute, QVariant value );
     42    QVariant value ( QString attribute, int role );
    4443    MDialog *editWidget();
    4544
     
    6261                unsigned int trackNumber();
    6362               
     63        protected:
     64                QList<ColKeyTrans> supportedAttrs();
     65               
    6466  private:
    6567    QTime myLength;
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/tracksmodel.cpp

    r201 r235  
    2828#include <QSqlQuery>
    2929
    30 TracksModel::TracksModel ( QObject* parent ) : MediaModel ( parent )
     30TracksModel::TracksModel ( QueryThread *queryThread, QObject* parent ) : MediaModel ( parent )
    3131{
    32         setupModel();
     32        setupModel(queryThread);
    3333}
    3434
    3535MediaModel* TracksModel::createNewModel()
    3636{
    37         TracksModel *model = new TracksModel();
     37        TracksModel *model = new TracksModel(0);
    3838//      if(albumMode)
    3939//              model->setAlbumMode(true);
  • branches/release-0.3.0-rc1/src/MediaPlugins/CDs/tracksmodel.h

    r201 r235  
    3030
    3131  public:
    32     TracksModel ( QObject *parent = 0 );
     32    TracksModel ( QueryThread *queryThread, QObject *parent = 0 );
    3333
    3434                MediaModel *createNewModel();
  • branches/release-0.3.0-rc1/src/SearchPlugins/Amazon/CMakeLists.txt

    r195 r235  
    99        SET(amazon_TS ${amazon_TS} lang/amazon_de.ts)
    1010ENDIF(L10N_DE)
     11IF(L10N_EN)
     12        SET(amazon_TS ${amazon_TS} lang/amazon_en.ts)
     13ENDIF(L10N_EN)
    1114
    1215SET(amazon_QRC
  • branches/release-0.3.0-rc1/src/SearchPlugins/Amazon/amazon.cpp

    r233 r235  
    3131#include "connectmaterialtypedialog.h"
    3232#include "purchase.h"
     33#include "progressstatuswidget.h"
    3334
    3435#include <QtPlugin>
     
    3839#include <QDomDocument>
    3940#include <QDomNode>
    40 #include <QProgressDialog>
    4141#include <QApplication>
    4242#include <QDockWidget>
     
    107107}
    108108
    109 QStringList Amazon::supportedAttributes()
    110 {
    111   QStringList attrs;
    112   // related person "names"
    113   attrs << tr ( "Author" ) << tr ( "Editor" ) << tr ( "Actor" ) << tr ( "Artist" ) << tr ( "Producer" ) << tr ( "Director" );
    114   attrs << tr ( "Publisher" ) << tr ( "Studio" ) << tr ( "Label" );
    115   // titles
    116   attrs << tr ( "Title" );
    117   // common attributes
    118   attrs << tr ( "MIN" ) << tr ( "Image" ) << tr ( "Description" ) << tr ( "Price" ) << tr ( "Currency" );
     109QMap<QString, QString> Amazon::supportedAttributes()
     110{
     111  QMap<QString, QString> attrs;
    119112  // Book specials
    120   attrs << tr ( "Edition" ) << tr ( "Pages" ) << tr ( "Publication Date" ) << tr ( "Publication Place" );
     113  attrs.insert("edition", tr ( "Edition" ));
     114        attrs.insert("pages", tr ( "Pages" ));
     115        attrs.insert("pubDate", tr ( "Publication Date" ));
     116        attrs.insert("pubPlace", tr ( "Publication Place" ));
    121117  // music specials
    122   attrs << tr ( "Number Of Discs" ) << tr ( "Track" );
     118  attrs.insert("discs", tr ( "Number Of Discs" ));
     119        attrs.insert("track", tr ( "Track" ));
    123120  // video specials
    124121  return attrs;
    125122}
    126123
    127 QStringList Amazon::supportedCategories()
    128 {
    129   QStringList cats;
    130   cats << "Books" << "Music" << "Music Tracks" << "Video" << "Software" << "Magazines";
     124QMap<QString, QString> Amazon::supportedCategories()
     125{
     126  QMap<QString, QString> cats;
     127        cats.insert("Books", tr("Books"));
     128        cats.insert("Music", tr("Music"));
     129        cats.insert("Music Tracks", tr("Music Tracks"));
     130        cats.insert("Video", tr("Video"));
     131        cats.insert("Software", tr("Software"));
     132        cats.insert("Magazines", tr("Magazines"));
    131133  return cats;
    132134}
     
    480482
    481483  // convert Data into a qdomdocument
    482 
    483   if ( progDia )
    484     progDia->setLabelText ( tr ( "Parsing page" ) );
    485484
    486485  QApplication::processEvents();
     
    516515  msg = tr ( "Checking wether request was valid" );
    517516
    518   if ( progDia )
    519     progDia->setLabelText ( msg );
    520 
    521517  emit logMsg ( msg );
    522518
     
    543539  // Check how many results on how much pages in what time are found
    544540  msg = tr ( "Calculating the amount of results" );
    545 
    546   if ( progDia )
    547     progDia->setLabelText ( msg );
    548541
    549542  emit logMsg ( msg );
     
    636629    }
    637630  }
    638 
    639   if ( progDia )
    640     progDia->setLabelText ( msg );
    641631
    642632  emit logMsg ( msg );
     
    766756
    767757  // prepare progress dialog
    768 
    769758  if ( progDia )
    770759    delete progDia;
    771760
    772   progDia = new QProgressDialog ( tr ( "Fetching Amazon Results" ), tr ( "Abort" ), 0, 0 );
    773 
    774   progDia->setWindowModality ( Qt::WindowModal );
    775 
    776   progDia->setWindowTitle ( tr ( "Fetching Amazon Results" ) );
    777 
    778   progDia->setWindowModality ( Qt::WindowModal );
     761  progDia = new ProgressStatusWidget();
     762        emit showStatusWidget(progDia);
     763        progDia->setLabel(tr("Amazon: "));
    779764
    780765  return true;
     
    862847      }
    863848
    864       medium->setValue ( mapAttributes.value ( tr ( "Description" ) ), biggestString );
     849      medium->setDescription ( biggestString );
    865850    }
    866851
     
    895880  while ( !child.isNull() ) {
    896881    if ( child.tagName() == "Title" ) {
    897       medium->setValue ( mapAttributes.value ( tr ( "Title" ) ), child.text() );
     882      medium->setTitle( child.text() );
    898883    }
    899884
     
    903888      person << child.text().left ( child.text().lastIndexOf ( " " ) );
    904889      person << tr ( "Author" );
    905       medium->setValue ( mapAttributes.value ( tr ( "Author" ) ),  person );
     890      medium->setMaterialPerson ( person[0], person[1], person[2] );
    906891    }
    907892
     
    912897        person << child.text().left ( child.text().lastIndexOf ( " " ) );
    913898        person << tr ( "Editor" );
    914         medium->setValue ( mapAttributes.value ( tr ( "Author" ) ),  person );
     899        medium->setMaterialPerson(person[0], person[1], person[2]);
    915900      }
    916901    }
     
    921906      person << child.text().left ( child.text().lastIndexOf ( " " ) );
    922907      person << tr ( "Actor" );
    923       medium->setValue ( mapAttributes.value ( tr ( "Actor" ) ), person );
     908      medium->setMaterialPerson(person[0], person[1], person[2]);
    924909    }
    925910
     
    929914      person << child.text().left ( child.text().lastIndexOf ( " " ) );
    930915      person << tr ( "Artist" );
    931       medium->setValue ( mapAttributes.value ( tr ( "Artist" ) ), person );
     916      medium->setMaterialPerson(person[0], person[1], person[2]);
    932917    }
    933918
     
    937922      person << child.text().left ( child.text().lastIndexOf ( " " ) );
    938923      person << tr ( "Director" );
    939       medium->setValue ( mapAttributes.value ( tr ( "Director" ) ), person );
     924      medium->setMaterialPerson(person[0], person[1], person[2]);
    940925    }
    941926
     
    944929
    945930      if ( reg.indexIn ( child.text() ) > -1 )
    946         medium->setValue ( mapAttributes.value ( tr ( "Edition" ) ), reg.cap ( 1 ) );
     931        medium->setValue ( mapAttributes.value ( "edition" ), reg.cap ( 1 ) );
    947932    }
    948933
    949934    if ( child.tagName() == "Publisher" ) {
    950       medium->setValue ( mapAttributes.value ( tr ( "Publisher" ) ), child.text() );
     935      medium->setManufacturer ( child.text() );
    951936    }
    952937
    953938    if ( child.tagName() == "Label" ) {
    954       medium->setValue ( mapAttributes.value ( tr ( "Label" ) ), child.text() );
     939      medium->setManufacturer ( child.text() );
    955940    }
    956941
    957942    if ( child.tagName() == "PublicationDate" ) {
    958       medium->setValue ( mapAttributes.value ( tr ( "Publication Date" ) ), extractDate ( child.text() ) );
     943      medium->setValue ( mapAttributes.value ( "pubDate" ), extractDate ( child.text() ) );
    959944    }
    960945
    961946    if ( child.tagName() == "ReleaseDate" ) {
    962       medium->setValue ( mapAttributes.value ( tr ( "Publication Date" ) ), extractDate ( child.text() ) );
     947      medium->setValue ( mapAttributes.value ( "pubDate" ), extractDate ( child.text() ) );
    963948    }
    964949
    965950    if ( child.tagName() == "TheatricalReleaseDate" ) {
    966       medium->setValue ( mapAttributes.value ( tr ( "Publication Date" ) ), extractDate ( child.text() ) );
     951      medium->setValue ( mapAttributes.value ( "pubDate" ), extractDate ( child.text() ) );
    967952    }
    968953
     
    974959                        QStringList tmp;
    975960                        tmp << child.text() << "EAN";
    976       medium->setValue ( mapAttributes.value ( tr ( "MIN" ) ), tmp );
     961      medium->setMIN ( child.text(), "EAN" );
    977962    }
    978963
    979964    if ( child.tagName() == "ISBN" ) {
    980                         QStringList tmp;
    981                         tmp << child.text() << "ISBN-10";
    982       medium->setValue ( mapAttributes.value ( tr ( "MIN" ) ), tmp );
     965                        medium->setMIN ( child.text(), "ISBN-10" );
    983966    }
    984967
    985968    if ( child.tagName() == "NumberOfPages" ) {
    986       medium->setValue ( mapAttributes.value ( tr ( "Pages" ) ), child.text() );
     969      medium->setValue ( mapAttributes.value ( "pages" ), child.text() );
    987970    }
    988971
     
    992975
    993976    if ( child.tagName() == "NumberOfDiscs" ) {
    994       medium->setValue ( mapAttributes.value ( tr ( "Number Of Disks" ) ), child.text() );
     977      medium->setValue ( mapAttributes.value ( "discs" ), child.text() );
    995978    }
    996979
     
    999982      QString text = tmp.text();
    1000983      text.insert(text.length() -2, ",");
    1001       medium->setValue ( mapAttributes.value ( tr ( "Price" ) ), text );
     984      medium->setListPrice ( text.toDouble() );
    1002985      tmp = child.firstChildElement("CurrencyCode");
    1003       medium->setValue ( mapAttributes.value ( tr ( "Currency" ) ), tmp.text() );
     986      medium->setListPriceCurrency ( tmp.text() );
    1004987    }
    1005988    child = child.nextSiblingElement();
     
    10271010      // unkown length
    10281011      tracks << "";
    1029       medium->setValue ( mapAttributes.value ( tr ( "Track" ) ), tracks );
     1012      medium->setValue ( mapAttributes.value ( "track" ), tracks );
    10301013      track = track.nextSiblingElement();
    10311014    }
     
    11651148  mapAttrs->setPlugins ( medium, this );
    11661149
    1167   if ( !mapAttrs->exec() )
    1168     return false;
     1150        // the result is only for special data important
     1151        // therefore we continue even on false
     1152  mapAttrs->exec();
    11691153
    11701154  delete mapAttrs;
  • branches/release-0.3.0-rc1/src/SearchPlugins/Amazon/amazon.h

    r211 r235  
    2929class Medium;
    3030class ItemSearch;
     31class ProgressStatusWidget;
    3132
    3233class QNetworkAccessManager;
    33 class QProgressDialog;
    3434class QTextEdit;
    3535
     
    6565    QIcon icon();
    6666    QString description();
    67     QStringList supportedAttributes();
    68     QStringList supportedCategories();
     67    QMap<QString, QString> supportedAttributes();
     68    QMap<QString, QString> supportedCategories();
    6969    SettingsWidget *settingsWidget();
    7070    SetupWizardObject *wizardObject();
     
    127127      * supplied by search();
    128128      */
    129     QMultiMap<QString, QString> mapAttributes;
     129    QMap<QString, QString> mapAttributes;
    130130    MediaModel *model;
    131131    Medium *offerMedium;
     
    135135    QNetworkAccessManager *http;
    136136    QNetworkReply *reply;
    137     QProgressDialog *progDia;
     137    ProgressStatusWidget *progDia;
    138138    QDockWidget *logWindow;
    139139    QTextEdit *logWidget;
  • branches/release-0.3.0-rc1/src/SearchPlugins/Amazon/connectmaterialtype.cpp

    r211 r235  
    5555                        .arg(name())
    5656        );
    57         typeEdit->addItems(searchPlugin->supportedCategories());
     57        mapTypes = searchPlugin->supportedCategories();
     58        typeEdit->addItems(mapTypes.values());
    5859       
    5960        QSettings settings;
    6061        settings.beginGroup(searchPlugin->settingsGroup());
    6162        QString stored = settings.value(modelGroup, QString()).toString();
    62         typeEdit->setCurrentIndex(typeEdit->findText(stored));
     63        typeEdit->setCurrentIndex(typeEdit->findText(mapTypes.value(stored)));
    6364        settings.endGroup();
    6465}
     
    9293        settings.beginGroup(searchPlugin->settingsGroup());
    9394        QString stored = settings.value(modelGroup, QString()).toString();
    94         if(typeEdit->findText(stored) > -1)
     95        if(typeEdit->findText(mapTypes.value(stored)) > -1)
    9596                result = true;
    96         typeEdit->setCurrentIndex(typeEdit->findText(stored));
     97        typeEdit->setCurrentIndex(typeEdit->findText(mapTypes.value(stored)));
    9798        settings.endGroup();
    9899       
     
    113114        QSettings settings;
    114115        settings.beginGroup(searchPlugin->settingsGroup());
    115         settings.setValue(modelGroup, typeEdit->currentText());
     116        settings.setValue(modelGroup, mapTypes.key(typeEdit->currentText()));
    116117        settings.endGroup();
    117118
  • branches/release-0.3.0-rc1/src/SearchPlugins/Amazon/connectmaterialtype.h

    r211 r235  
    4848                QString modelGroup, modelName;
    4949                SearchPlugin *searchPlugin;
     50                QMap<QString, QString> mapTypes;
    5051               
    5152        signals:
  • branches/release-0.3.0-rc1/src/SearchPlugins/Amazon/purchase.cpp

    r190 r235  
    407407    QString asinCart = item.firstChildElement ( "ASIN" ).text();
    408408    QRegExp reg ( "<ASIN>(.*)<\\/ASIN>" );
    409     int itemData;
     409    int itemData = 0;
    410410
    411411    for ( int j = 0; j < items.size(); j++ ) {
  • branches/release-0.3.0-rc1/src/SearchPlugins/DemoShop/demoshop.cpp

    r165 r235  
    7171}
    7272
    73 QStringList DemoShop::supportedAttributes()
    74 {
    75   QStringList attrs;
    76   // related person "names"
    77   attrs << tr ( "Author" ) << tr ( "Editor" ) << tr ( "Actor" ) << tr ( "Artist" ) << tr ( "Producer" ) << tr ( "Director" );
    78   attrs << tr ( "Publisher" ) << tr ( "Studio" ) << tr ( "Label" );
    79   // titles
    80   attrs << tr ( "Title" );
    81   // common attributes
    82   attrs << tr ( "EAN" ) << tr ( "Image" ) << tr ( "Description" );
    83   // Book specials
    84   attrs << tr ( "Edition" ) << tr ( "Pages" ) << tr ( "Publication Date" ) << tr ( "Publication Place" );
    85   // music specials
    86   attrs << tr ( "Number Of Discs" ) << tr ( "Track" );
    87   // video specials
     73QMap<QString, QString> DemoShop::supportedAttributes()
     74{
     75  QMap<QString, QString> attrs;
    8876  return attrs;
    8977}
    9078
    91 QStringList DemoShop::supportedCategories()
    92 {
    93   QStringList cats;
    94   cats << "Books" << "Music" << "Music Tracks" << "Video" << "Software" << "Magazines";
     79QMap<QString, QString> DemoShop::supportedCategories()
     80{
     81  QMap<QString, QString> cats;
    9582  return cats;
    9683}
  • branches/release-0.3.0-rc1/src/SearchPlugins/DemoShop/demoshop.h

    r211 r235  
    5555    QIcon icon();
    5656    QString description();
    57     QStringList supportedAttributes();
    58     QStringList supportedCategories();
     57    QMap<QString, QString> supportedAttributes();
     58    QMap<QString, QString> supportedCategories();
    5959    SettingsWidget *settingsWidget();
    6060    SetupWizardObject *wizardObject();
  • branches/release-0.3.0-rc1/src/mediadb/eanvalidatorplugin/CMakeLists.txt

    r220 r235  
    22# see http://cmake.org/cmake/help/cmake2.6docs.html#module:FindQt4 for a complete list
    33IF(L10N_DE)
    4         SET(validator_TS ${validator_TS} lang/eanvalidator_de.ts)
     4        SET(validator_TS ${validator_TS} lang/eanvalidatorplugin_de.ts)
    55ENDIF(L10N_DE)
     6IF(L10N_EN)
     7        SET(validator_TS ${validator_TS} lang/eanvalidatorplugin_en.ts)
     8ENDIF(L10N_EN)
    69
    710SET(validator_CPP
  • branches/release-0.3.0-rc1/src/mediadb/project.cpp

    r204 r235  
    3333        myUsersId = 0;
    3434        myResultMedium = 0;
    35         myMaterials = new MediaModel(true, this);
     35        myMaterials = new MediaModel(true, 0, this);
    3636}
    3737
  • branches/release-0.3.0-rc1/src/mediadb/searchwidget.cpp

    r234 r235  
    356356  }
    357357  connectModel(model);
    358         SearchDetailsWidget *widget = 0;
    359         if(detailsBox->isChecked())
    360                 widget = qobject_cast<SearchDetailsWidget*>(stackedWidget->widget(0));
    361   model->load(constraints, searchPlugins, userId, widget);
    362 
     358       
     359        // show result view
    363360        if(!resSum){
    364361                resSum = new ResultSummary ( mediaPlugins, this );
     
    368365        }
    369366        resSum->setResultset(model);
     367       
     368        // start search
     369        SearchDetailsWidget *widget = 0;
     370        if(detailsBox->isChecked())
     371                widget = qobject_cast<SearchDetailsWidget*>(stackedWidget->widget(0));
     372  model->load(constraints, searchPlugins, userId, widget);
    370373       
    371374        // store current stati
Note: See TracChangeset for help on using the changeset viewer.