Changeset 31 in tspsg-svn for trunk/src/tspmodel.cpp


Ignore:
Timestamp:
Jun 30, 2009, 1:02:31 AM (16 years ago)
Author:
laleppa
Message:

+ Opening task file
+ Saving task file

  • Translations update to reflect recent changes.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/tspmodel.cpp

    r29 r31  
    2222 */
    2323
    24 #include <QtGui>
    2524#include "tspmodel.h"
    2625
     
    109108}
    110109
    111 int CTSPModel::numCities() const
     110quint16 CTSPModel::numCities() const
    112111{
    113112        return nCities;
     
    116115void CTSPModel::setNumCities(int n)
    117116{
    118 int randMin = settings->value("MinCost",DEF_RAND_MIN).toInt();
    119 int randMax = settings->value("MaxCost",DEF_RAND_MAX).toInt();
     117// int randMin = settings->value("MinCost",DEF_RAND_MIN).toInt();
     118// int randMax = settings->value("MaxCost",DEF_RAND_MAX).toInt();
    120119        if (n == nCities)
    121120                return;
     
    127126                                        table[r][c] = INFINITY;
    128127                                else
    129                                         table[r][c] = rand(randMin,randMax);
     128                                        table[r][c] = 0; // rand(randMin,randMax);
    130129                }
    131130                for (int r = nCities; r < n; r++) {
     
    134133                                        table[r][c] = INFINITY;
    135134                                else
    136                                         table[r][c] = rand(randMin,randMax);
     135                                        table[r][c] = 0; // rand(randMin,randMax);
    137136                }
    138137        }
     
    148147                                table[r][c] = 0;
    149148        emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
     149}
     150
     151void CTSPModel::loadTask(QString fname)
     152{
     153QFile f(fname);
     154        f.open(QIODevice::ReadOnly);
     155QDataStream ds(&f);
     156        ds.setVersion(QDataStream::Qt_4_4);
     157quint32 sig;
     158        ds >> sig;
     159        ds.device()->reset();
     160        if (sig == TSPT)
     161                loadTSPT(&ds);
     162        else if ((sig >> 16) == ZKT)
     163                loadZKT(&ds);
     164        else
     165                QMessageBox(QMessageBox::Critical,trUtf8("Task Load"),trUtf8("Unable to load task:\nUnknown file format or file is corrupted."),QMessageBox::Ok).exec();
     166        f.close();
     167}
     168
     169void CTSPModel::loadTSPT(QDataStream *ds)
     170{
     171        // Skipping signature
     172        ds->skipRawData(sizeof(TSPT));
     173        // File version
     174quint8 version;
     175        *ds >> version;
     176        if (version > TSPT_VERSION) {
     177                QMessageBox(QMessageBox::Critical,trUtf8("Task Load"),trUtf8("Unable to load task:\nFile version is newer than application supports.\nPlease, try to update application."),QMessageBox::Ok).exec();
     178                return;
     179        }
     180        // Skipping metadata
     181        ds->skipRawData(TSPT_META_SIZE);
     182        // Cities number
     183quint16 size;
     184        *ds >> size;
     185        if (nCities != size)
     186                emit numCitiesChanged(size);
     187        // Costs
     188        for (int r = 0; r < size; r++)
     189                for (int c = 0; c < size; c++)
     190                        if (r != c)
     191                                *ds >> table[r][c];
     192        emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
     193}
     194
     195void CTSPModel::loadZKT(QDataStream *ds)
     196{
     197        // Skipping signature
     198        ds->skipRawData(sizeof(ZKT));
     199        // File version
     200quint16 version;
     201        ds->readRawData(reinterpret_cast<char *>(&version),2);
     202        if (version > ZKT_VERSION) {
     203                QMessageBox(QMessageBox::Critical,trUtf8("Task Load"),trUtf8("Unable to load task:\nFile version is newer than application supports.\nPlease, try to update application."),QMessageBox::Ok).exec();
     204                return;
     205        }
     206        // Cities number
     207quint8 size;
     208        ds->readRawData(reinterpret_cast<char *>(&size),1);
     209        if (nCities != size)
     210                emit numCitiesChanged(size);
     211        // Costs
     212double val;
     213        for (int r = 0; r < size; r++)
     214                for (int c = 0; c < size; c++)
     215                        if (r != c) {
     216                                ds->readRawData(reinterpret_cast<char *>(&val),8);
     217                                table[r][c] = val;
     218                        } else
     219                                ds->skipRawData(8);
     220        emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
     221}
     222
     223void CTSPModel::saveTask(QString fname)
     224{
     225QFile f(fname);
     226        f.open(QIODevice::WriteOnly);
     227QDataStream ds(&f);
     228        ds.setVersion(QDataStream::Qt_4_4);
     229        // File signature
     230        ds << TSPT;
     231        // File version
     232        ds << TSPT_VERSION;
     233        // File metadata version
     234        ds << TSPT_META_VERSION;
     235        // Metadata
     236        ds << OSID;
     237        // Number of cities
     238        ds << nCities;
     239        // Costs
     240        for (int r = 0; r < nCities; r++)
     241                for (int c = 0; c < nCities; c++)
     242                        if (r != c)
     243                                ds << table[r][c];
     244        f.close();
    150245}
    151246
Note: See TracChangeset for help on using the changeset viewer.