Changeset 78 in tspsg-svn for trunk


Ignore:
Timestamp:
Dec 18, 2009, 1:57:39 PM (15 years ago)
Author:
laleppa
Message:

+ Added an ability to disable showing of the solution steps' matrices in solution output.

  • Replaced Ok and Cancel buttons in SettingsDialog? with QButtonBox. Now the buttons conform the interface guidelines of the target platform.
  • Increased the allowed maximum number of cities to 50. Solution steps' matrices aren't shown by default if the number of cities in task is more than 15.
  • For WinCE the size of the toolbar buttons is now determined based on the device DPI instead of its resolution.
  • Open and save file dialogs are now using native dialogs where supported.
  • Reworked About dialog a little bit.
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/globals.h

    r67 r78  
    4646//! Default number of cities
    4747#define DEF_NUM_CITIES 5
     48//! Default value for showing or not solution step matrices
     49#define DEF_SHOW_MATRIX true
     50//! Default value for using or not city limit for showing solution steps matrices
     51#define DEF_USE_SHOW_MATRIX_LIMIT true
     52//! Default maximum number of cities to show solution step matrices
     53#define DEF_SHOW_MATRIX_CITY_LIMIT 15
    4854//! Default font name
    4955#define DEF_FONT_FAMILY "Courier New"
     
    5460
    5561//! Maximum available number of cities
    56 #define MAX_NUM_CITIES 30
     62#define MAX_NUM_CITIES 50
    5763//! Maximum allowed value for random generation limits
    5864#define MAX_RAND_VALUE 1000
  • trunk/src/mainwindow.cpp

    r76 r78  
    4747        solutionText->setWordWrapMode(QTextOption::WordWrap);
    4848#ifdef Q_OS_WINCE
    49         // A little hack for toolbar icons to have sane size.
    50 int s = qMin(QApplication::desktop()->screenGeometry().width(),QApplication::desktop()->screenGeometry().height());
    51         toolBar->setIconSize(QSize(s / 10,s / 10));
     49        // A little hack for toolbar icons to have a sane size.
     50        toolBar->setIconSize(QSize(logicalDpiX() / 4, logicalDpiY() / 4));
    5251#endif
    5352#ifndef QT_NO_PRINTER
     
    129128        tabWidget->setCurrentIndex(0);
    130129        solutionText->clear();
    131         enableSolutionActions(false);
     130        toggleSolutionActions(false);
    132131        QApplication::restoreOverrideCursor();
    133132}
     
    137136        if (!maybeSave())
    138137                return;
    139 QFileDialog od(this);
    140         od.setAcceptMode(QFileDialog::AcceptOpen);
    141         od.setFileMode(QFileDialog::ExistingFile);
     138
    142139QStringList filters(trUtf8("All Supported Formats") + " (*.tspt *.zkt)");
    143140        filters.append(trUtf8("%1 Task Files").arg("TSPSG") + " (*.tspt)");
    144141        filters.append(trUtf8("%1 Task Files").arg("ZKomModRd") + " (*.zkt)");
    145142        filters.append(trUtf8("All Files") + " (*)");
    146         od.setNameFilters(filters);
    147         if (od.exec() != QDialog::Accepted)
    148                 return;
    149 QStringList files = od.selectedFiles();
    150         if (files.empty())
    151                 return;
    152         if (!tspmodel->loadTask(files.first()))
    153                 return;
    154         setFileName(files.first());
     143
     144QString file = QFileDialog::getOpenFileName(this, trUtf8("Task Load"), QString(), filters.join(";;"));
     145        if (file.isEmpty() || !QFileInfo(file).isFile())
     146                return;
     147        if (!tspmodel->loadTask(file))
     148                return;
     149        setFileName(file);
    155150        tabWidget->setCurrentIndex(0);
    156151        setWindowModified(false);
    157152        solutionText->clear();
    158         enableSolutionActions(false);
     153        toggleSolutionActions(false);
    159154}
    160155
     
    176171{
    177172static QString selectedFile;
    178         if (selectedFile.isEmpty())
    179 #ifndef QT_NO_PRINTER
    180                 selectedFile = "solution.pdf";
     173        if (selectedFile.isEmpty()) {
     174                if (fileName == trUtf8("Untitled") + ".tspt") {
     175#ifndef QT_NO_PRINTER
     176                        selectedFile = "solution.pdf";
    181177#else
    182                 selectedFile = "solution.html";
     178                        selectedFile = "solution.html";
    183179#endif // QT_NO_PRINTER
    184 QFileDialog sd(this);
    185         sd.setAcceptMode(QFileDialog::AcceptSave);
     180                } else {
     181#ifndef QT_NO_PRINTER
     182                        selectedFile = QFileInfo(fileName).canonicalPath() + "/" + QFileInfo(fileName).completeBaseName() + ".pdf";
     183#else
     184                        selectedFile = QFileInfo(fileName).canonicalPath() + "/" + QFileInfo(fileName).completeBaseName() + ".html";
     185#endif // QT_NO_PRINTER
     186                }
     187        }
     188
    186189QStringList filters;
    187190#ifndef QT_NO_PRINTER
    188         filters.append(trUtf8("PDF Files") + "(*.pdf)");
     191        filters.append(trUtf8("PDF Files") + " (*.pdf)");
    189192#endif
    190193        filters.append(trUtf8("HTML Files") + " (*.html *.htm)");
     
    193196#endif // QT_VERSION >= 0x040500
    194197        filters.append(trUtf8("All Files") + " (*)");
    195         sd.setNameFilters(filters);
    196         sd.selectFile(selectedFile);
    197         if (sd.exec() != QDialog::Accepted)
    198                 return;
    199 QStringList files = sd.selectedFiles();
    200         if (files.empty())
    201                 return;
    202         selectedFile = files.first();
     198
     199QString file = QFileDialog::getSaveFileName(this, QString(), selectedFile, filters.join(";;"));
     200        if (file.isEmpty())
     201                return;
     202        selectedFile = file;
    203203        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
    204204#ifndef QT_NO_PRINTER
     
    302302{
    303303//! \todo TODO: Normal about window :-)
    304 QString about = QString::fromUtf8("<b>TSPSG: TSP Solver and Generator</b><br>");
    305         about += QString::fromUtf8("&nbsp;&nbsp;&nbsp;&nbsp;Version: <b>"BUILD_VERSION"</b><br>");
    306         about += QString::fromUtf8("&nbsp;&nbsp;&nbsp;&nbsp;Copyright: <b>&copy; 2007-%1 Lёppa</b><br>").arg(QDate::currentDate().toString("yyyy"));
    307         about += QString::fromUtf8("&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"http://tspsg.sourceforge.net/\">http://tspsg.sourceforge.net/</a></b><br>");
    308         about += "<br>";
     304QString title;
     305#ifdef Q_OS_WINCE
     306        title += QString::fromUtf8("<b>TSPSG<br>TSP Solver and Generator</b><br>");
     307#else
     308        title += QString::fromUtf8("<b>TSPSG: TSP Solver and Generator</b><br>");
     309#endif // Q_OS_WINCE
     310        title += QString::fromUtf8("Version: <b>"BUILD_VERSION"</b><br>");
     311        title += QString::fromUtf8("<b>&copy; 2007-%1 Lёppa</b><br>").arg(QDate::currentDate().toString("yyyy"));
     312        title += QString::fromUtf8("<b><a href=\"http://tspsg.sourceforge.net/\">http://tspsg.sf.net/</a></b><br>");
     313QString about;
    309314        about += QString::fromUtf8("Target OS: <b>%1</b><br>").arg(OS);
    310         about += "Qt library:<br>";
     315#ifndef STATIC_BUILD
     316        about += "Qt library (shared):<br>";
    311317        about += QString::fromUtf8("&nbsp;&nbsp;&nbsp;&nbsp;Build time: <b>%1</b><br>").arg(QT_VERSION_STR);
    312318        about += QString::fromUtf8("&nbsp;&nbsp;&nbsp;&nbsp;Runtime: <b>%1</b><br>").arg(qVersion());
     319#else
     320        about += QString::fromUtf8("Qt library: <b>%1</b> (static)<br>").arg(QT_VERSION_STR);
     321#endif // STATIC_BUILD
    313322        about += QString::fromUtf8("Built on <b>%1</b> at <b>%2</b><br>").arg(__DATE__).arg(__TIME__);
     323        about += "<br>";
    314324        about += QString::fromUtf8("Id: <b>"VERSIONID"</b><br>");
    315325        about += QString::fromUtf8("Algorithm: <b>%1</b><br>").arg(CTSPSolver::getVersionId());
     
    329339
    330340QDialog *dlg = new QDialog(this);
    331 QLabel *lblIcon = new QLabel(dlg);
     341QLabel *lblIcon = new QLabel(dlg),
     342        *lblTitle = new QLabel(dlg);
    332343QTextBrowser *txtAbout = new QTextBrowser(dlg);
    333 QVBoxLayout *vb1 = new QVBoxLayout(),
    334         *vb2 = new QVBoxLayout();
     344QVBoxLayout *vb = new QVBoxLayout();
    335345QHBoxLayout *hb = new QHBoxLayout();
    336346QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, dlg);
    337347
    338         lblIcon->setPixmap(QPixmap(":/images/tspsg.png").scaledToWidth(64, Qt::SmoothTransformation));
    339 
    340         vb1->addWidget(lblIcon);
    341         vb1->addStretch();
     348        lblIcon->setPixmap(QPixmap(":/images/tspsg.png").scaledToWidth(logicalDpiX() * 2 / 3, Qt::SmoothTransformation));
     349        lblIcon->setAlignment(Qt::AlignTop);
     350        lblTitle->setText(title);
     351
     352        hb->addWidget(lblIcon);
     353        hb->addWidget(lblTitle);
     354        hb->addStretch();
    342355
    343356//      txtAbout->setTextInteractionFlags(txtAbout->textInteractionFlags() ^ Qt::TextEditable);
     
    347360        txtAbout->moveCursor(QTextCursor::Start);
    348361
    349         hb->addLayout(vb1);
    350         hb->addWidget(txtAbout);
    351 
    352         vb2->addLayout(hb);
    353         vb2->addWidget(bb);
    354 
     362        vb->addLayout(hb);
     363        vb->addWidget(txtAbout);
     364        vb->addWidget(bb);
     365
     366        dlg->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
    355367        dlg->setWindowTitle(trUtf8("About TSPSG"));
    356         dlg->setLayout(vb2);
     368        dlg->setLayout(vb);
    357369
    358370        connect(bb, SIGNAL(accepted()), dlg, SLOT(accept()));
    359371
    360         dlg->resize(475, 350);
     372        dlg->resize(410, 300);
    361373        dlg->exec();
    362374
     
    402414        output.append("<p>" + trUtf8("Variant #%1").arg(spinVariant->value()) + "</p>");
    403415        output.append("<p>" + trUtf8("Task:") + "</p>");
    404         outputMatrix(matrix,output);
     416        outputMatrix(matrix, output);
    405417        output.append("<hr>");
    406418        output.append("<p>" + trUtf8("Solution of Variant #%1 task").arg(spinVariant->value()) + "</p>");
     
    411423                        if (n != spinCities->value()) {
    412424                                output.append("<p>" + trUtf8("Step #%1").arg(n++) + "</p>");
    413                                 outputMatrix(*step, output);
     425                                if (settings->value("Output/ShowMatrix", DEF_SHOW_MATRIX).toBool() && settings->value("Output/UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT).toBool() && (spinCities->value() <= settings->value("Output/ShowMatrixCitiesLimit", DEF_SHOW_MATRIX_CITY_LIMIT).toInt())) {
     426                                        outputMatrix(*step, output);
     427                                }
    414428                                output.append("<p>" + trUtf8("Selected candidate for branching: %1.").arg(trUtf8("(%1;%2)").arg(step->candidate.nRow + 1).arg(step->candidate.nCol + 1)) + "</p>");
    415429                                if (!step->alts.empty()) {
     
    444458        }
    445459        output.append("<p></p>");
     460
    446461        solutionText->setHtml(output.join(""));
    447462        solutionText->setDocumentTitle(trUtf8("Solution of Variant #%1 task").arg(spinVariant->value()));
     
    450465        solutionText->moveCursor(QTextCursor::End);
    451466
    452         enableSolutionActions();
     467        toggleSolutionActions();
    453468        tabWidget->setCurrentIndex(1);
    454469        QApplication::restoreOverrideCursor();
     
    515530
    516531        QMainWindow::closeEvent(ev);
    517 }
    518 
    519 void MainWindow::enableSolutionActions(bool enable)
    520 {
    521         buttonSaveSolution->setEnabled(enable);
    522         actionFileSaveAsSolution->setEnabled(enable);
    523         solutionText->setEnabled(enable);
    524         if (!enable)
    525                 output.clear();
    526 #ifndef QT_NO_PRINTER
    527         actionFilePrint->setEnabled(enable);
    528         actionFilePrintPreview->setEnabled(enable);
    529 #endif // QT_NO_PRINTER
    530532}
    531533
     
    688690
    689691bool MainWindow::saveTask() {
    690 QFileDialog sd(this);
    691         sd.setAcceptMode(QFileDialog::AcceptSave);
    692692QStringList filters(trUtf8("%1 Task File").arg("TSPSG") + " (*.tspt)");
    693693        filters.append(trUtf8("All Files") + " (*)");
    694         sd.setNameFilters(filters);
    695         sd.setDefaultSuffix("tspt");
    696         if (fileName.endsWith(".tspt",Qt::CaseInsensitive))
    697                 sd.selectFile(fileName);
     694QString file;
     695        if (fileName.endsWith(".tspt", Qt::CaseInsensitive))
     696                file = fileName;
    698697        else
    699                 sd.selectFile(QFileInfo(fileName).canonicalPath() + "/" + QFileInfo(fileName).completeBaseName() + ".tspt");
    700         if (sd.exec() != QDialog::Accepted)
     698                file = QFileInfo(fileName).canonicalPath() + "/" + QFileInfo(fileName).completeBaseName() + ".tspt";
     699
     700        file = QFileDialog::getSaveFileName(this, trUtf8("Task Save"), file, filters.join(";;"));
     701        if (file.isEmpty())
    701702                return false;
    702 QStringList files = sd.selectedFiles();
    703         if (files.empty())
    704                 return false;
    705         if (tspmodel->saveTask(files.first())) {
    706                 setFileName(files.first());
     703        if (tspmodel->saveTask(file)) {
     704                setFileName(file);
    707705                setWindowModified(false);
    708706                return true;
     
    716714        setWindowTitle(QString("%1[*] - %2").arg(QFileInfo(fileName).completeBaseName()).arg(trUtf8("Travelling Salesman Problem")));
    717715}
     716
     717void MainWindow::toggleSolutionActions(bool enable)
     718{
     719        buttonSaveSolution->setEnabled(enable);
     720        actionFileSaveAsSolution->setEnabled(enable);
     721        solutionText->setEnabled(enable);
     722        if (!enable)
     723                output.clear();
     724#ifndef QT_NO_PRINTER
     725        actionFilePrint->setEnabled(enable);
     726        actionFilePrintPreview->setEnabled(enable);
     727#endif // QT_NO_PRINTER
     728}
  • trunk/src/mainwindow.h

    r74 r78  
    8787
    8888        void closeEvent(QCloseEvent *ev);
    89         void enableSolutionActions(bool enable = true);
    9089        void initDocStyleSheet();
    9190        void loadLangList();
     
    9695        bool saveTask();
    9796        void setFileName(const QString &fileName = trUtf8("Untitled") + ".tspt");
     97        void toggleSolutionActions(bool enable = true);
    9898};
    9999
  • trunk/src/settingsdialog.cpp

    r67 r78  
    3535        setupUi(this);
    3636        // Laying out elements
     37        layoutCitiesLimit = new QHBoxLayout();
     38        layoutCitiesLimit->setMargin(0);
     39        layoutCitiesLimit->setSpacing(0);
     40        layoutCitiesLimit->addSpacing(10);
     41        layoutCitiesLimit->addWidget(cbCitiesLimit);
     42        layoutCitiesLimit->addWidget(spinCitiesLimit);
     43        layoutCitiesLimit->addStretch();
     44
     45        buttonBox->button(QDialogButtonBox::Save)->setIcon(QIcon(":/images/icons/button_ok.png"));
     46        buttonBox->button(QDialogButtonBox::Save)->setStatusTip(trUtf8("Save new preferences"));
     47        buttonBox->button(QDialogButtonBox::Save)->setCursor(QCursor(Qt::PointingHandCursor));
     48        buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QIcon(":/images/icons/button_cancel.png"));
     49        buttonBox->button(QDialogButtonBox::Cancel)->setStatusTip(trUtf8("Close without saving preferences"));
     50        buttonBox->button(QDialogButtonBox::Cancel)->setCursor(QCursor(Qt::PointingHandCursor));
     51
    3752#ifdef Q_OS_WINCE
    3853        // Layout helper elements
    3954QVBoxLayout *vbox1, *vbox2;
    4055QHBoxLayout *hbox1, *hbox2;
    41 QSpacerItem *spacer;
    4256
    4357        labelRandMin->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
     
    4862        vbox2->addWidget(groupRandomSettings);
    4963        vbox2->addWidget(groupOutputSettings);
    50         spacer = new QSpacerItem(0,0,QSizePolicy::Minimum,QSizePolicy::Expanding);
    51         vbox2->addItem(spacer);
     64        vbox2->addStretch();
     65        vbox2->addWidget(cbShowMatrix);
     66        vbox2->addLayout(layoutCitiesLimit);
    5267        vbox2->addWidget(cbAutosize);
    5368
     
    6277        hbox2->setSpacing(6);
    6378        hbox2->addWidget(buttonHelp);
    64         spacer = new QSpacerItem(0,0,QSizePolicy::Expanding);
    65         hbox2->addItem(spacer);
    66         hbox2->addWidget(buttonOK);
    67         hbox2->addWidget(buttonCancel);
     79        hbox2->addStretch();
     80        hbox2->addWidget(buttonBox);
    6881
    6982        // Central layout
     
    7891QVBoxLayout *vbox1, *vbox2, *vbox3;
    7992QHBoxLayout *hbox1, *hbox2, *hbox3;
    80 QSpacerItem *spacer;
    8193
    8294        cbSaveState = new QCheckBox(bgWhite);
     
    93105        imgIcon->setFrameShape(QFrame::Panel);
    94106        imgIcon->setLineWidth(0);
    95         imgIcon->setPixmap(QPixmap(QString::fromUtf8(":/images/icons/preferences_system.png")));
     107        imgIcon->setPixmap(QPixmap(":/images/icons/preferences_system.png"));
    96108        imgIcon->setStyleSheet("background-color: #0080C0;");
    97109        imgIcon->setAlignment(Qt::AlignCenter);
     110        imgIcon->setMinimumWidth(150);
    98111
    99112        labelHint = new QLabel(bgGrey);
     
    131144        hbox2->addWidget(groupRandomSettings);
    132145        hbox2->addWidget(groupOutputSettings);
    133         spacer = new QSpacerItem(0,0,QSizePolicy::Expanding);
    134         hbox2->addItem(spacer);
     146        hbox2->addStretch();
    135147
    136148        // Top right part (with white bg)
    137149        vbox2 = new QVBoxLayout(bgWhite);
    138         spacer = new QSpacerItem(0,0,QSizePolicy::Minimum,QSizePolicy::Expanding);
    139         vbox2->addItem(spacer);
     150        vbox2->addStretch();
    140151        vbox2->addLayout(hbox2);
     152        vbox2->addWidget(cbShowMatrix);
     153        vbox2->addLayout(layoutCitiesLimit);
    141154        vbox2->addWidget(cbAutosize);
    142155        vbox2->addWidget(cbSaveState);
    143         spacer = new QSpacerItem(0,0,QSizePolicy::Minimum,QSizePolicy::Expanding);
    144         vbox2->addItem(spacer);
     156        vbox2->addStretch();
    145157
    146158        // Bottom part (with grey bg)
     
    150162        hbox3->addWidget(buttonHelp);
    151163        hbox3->addWidget(labelHint);
    152         hbox3->addWidget(buttonOK);
    153         hbox3->addWidget(buttonCancel);
     164        hbox3->addWidget(buttonBox);
    154165
    155166        // Central layout
     
    161172        vbox1->addWidget(bgGrey);
    162173#endif // Q_OS_WINCE
    163         connect(buttonOK,SIGNAL(clicked()),this,SLOT(accept()));
    164         connect(buttonCancel,SIGNAL(clicked()),this,SLOT(reject()));
    165174        connect(spinRandMin,SIGNAL(valueChanged(int)),this,SLOT(spinRandMinValueChanged(int)));
    166175        connect(buttonFont,SIGNAL(clicked()),this,SLOT(buttonFontClicked()));
     
    169178        setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
    170179#ifndef Q_OS_WINCE
    171         // Setting initial text of dialog hint label to own status tip
    172         // text.
     180        // Setting initial text of dialog hint label to own status tip text.
    173181        labelHint->setText(labelHint->statusTip());
    174182#endif // Q_OS_WINCE
     
    182190        cbSaveState->setChecked(settings->value("SavePos",false).toBool());
    183191#endif // Q_OS_WINCE
     192
    184193        settings->beginGroup("Output");
     194        cbShowMatrix->setChecked(settings->value("ShowMatrix", DEF_SHOW_MATRIX).toBool());
     195        cbCitiesLimit->setEnabled(cbShowMatrix->isChecked());
     196        cbCitiesLimit->setChecked(settings->value("UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT && cbShowMatrix->isChecked()).toBool());
     197        spinCitiesLimit->setEnabled(cbShowMatrix->isChecked());
     198        spinCitiesLimit->setValue(settings->value("ShowMatrixCitiesLimit", DEF_SHOW_MATRIX_CITY_LIMIT).toInt());
     199        spinCitiesLimit->setMaximum(MAX_NUM_CITIES);
     200
    185201        font = settings->value("Font",QFont(DEF_FONT_FAMILY,DEF_FONT_SIZE)).value<QFont>();
    186202        color = settings->value("Color",DEF_FONT_COLOR).value<QColor>();
    187203        settings->endGroup();
     204
     205        adjustSize();
    188206}
    189207
     
    211229{
    212230#ifndef Q_OS_WINCE
    213         settings->setValue("SavePos",cbSaveState->isChecked());
    214 #endif // Q_OS_WINCE
    215         settings->setValue("Autosize",cbAutosize->isChecked());
    216         settings->setValue("MinCost",spinRandMin->value());
    217         settings->setValue("MaxCost",spinRandMax->value());
     231        settings->setValue("SavePos", cbSaveState->isChecked());
     232#endif // Q_OS_WINCE
     233        settings->setValue("Autosize", cbAutosize->isChecked());
     234        settings->setValue("MinCost", spinRandMin->value());
     235        settings->setValue("MaxCost", spinRandMax->value());
     236
    218237        settings->beginGroup("Output");
     238        settings->setValue("ShowMatrix", cbShowMatrix->isChecked());
     239        settings->setValue("UseShowMatrixLimit", cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
     240        if (cbCitiesLimit->isChecked())
     241                settings->setValue("ShowMatrixCitiesLimit", spinCitiesLimit->value());
    219242        if (newFont)
    220                 settings->setValue("Font",font);
     243                settings->setValue("Font", font);
    221244        if (newColor)
    222                 settings->setValue("Color",color);
     245                settings->setValue("Color", color);
    223246        settings->endGroup();
    224247        QDialog::accept();
     
    261284                        labelHint->setText(labelHint->statusTip());
    262285                return true;
    263         // Making imgIcon square.
    264         } else if (ev->type() == QEvent::Show) {
    265 bool result = QDialog::event(ev);
    266                 if (result)
    267                         imgIcon->setMinimumWidth(imgIcon->height());
    268                 return result;
    269286        } else
    270287                return QDialog::event(ev);
  • trunk/src/settingsdialog.h

    r71 r78  
    5151        bool newColor;
    5252        QSettings *settings;
     53        QHBoxLayout *layoutCitiesLimit;
    5354#ifndef Q_OS_WINCE
    5455        QCheckBox *cbSaveState;
  • trunk/src/tspsolver.cpp

    r77 r78  
    211211void CTSPSolver::cleanup()
    212212{
     213        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
    213214        route.clear();
    214215        mayNotBeOptimal = false;
    215216        if (root != NULL)
    216217                deleteNode(root);
     218        QApplication::restoreOverrideCursor();
    217219}
    218220
    219221void CTSPSolver::deleteNode(SStep *&node)
    220222{
     223static int x;
     224        x++;
     225qDebug() << ">>>" << x;
    221226        if (node->plNode != NULL)
    222227                deleteNode(node->plNode);
     
    225230        delete node;
    226231        node = NULL;
     232qDebug() << "<<<" << x;
     233        x--;
    227234}
    228235
  • trunk/ui/settingsdialog.ui

    r73 r78  
    33 <author>Lёppa: $Id$</author>
    44 <class>SettingsDialog</class>
    5  <widget class="QWidget" name="SettingsDialog">
     5 <widget class="QDialog" name="SettingsDialog">
    66  <property name="windowTitle">
    77   <string>Preferences</string>
     
    7575    <bool>true</bool>
    7676   </property>
    77    <widget class="QPushButton" name="buttonCancel">
    78     <property name="cursor">
    79      <cursorShape>PointingHandCursor</cursorShape>
    80     </property>
    81     <property name="statusTip">
    82      <string>Close without saving preferences</string>
    83     </property>
    84     <property name="text">
    85      <string>&amp;Cancel</string>
    86     </property>
    87     <property name="icon">
    88      <iconset resource="../resources/tspsg.qrc">
    89       <normaloff>:/images/icons/button_cancel.png</normaloff>:/images/icons/button_cancel.png</iconset>
    90     </property>
    91    </widget>
    92    <widget class="QPushButton" name="buttonOK">
    93     <property name="cursor">
    94      <cursorShape>PointingHandCursor</cursorShape>
    95     </property>
    96     <property name="statusTip">
    97      <string>Save new preferences</string>
    98     </property>
    99     <property name="text">
    100      <string>&amp;OK</string>
    101     </property>
    102     <property name="icon">
    103      <iconset resource="../resources/tspsg.qrc">
    104       <normaloff>:/images/icons/button_ok.png</normaloff>:/images/icons/button_ok.png</iconset>
    105     </property>
    106     <property name="default">
    107      <bool>true</bool>
    108     </property>
    109    </widget>
    11077   <widget class="QToolButton" name="buttonHelp">
    11178    <property name="enabled">
     
    13097    <property name="autoRaise">
    13198     <bool>true</bool>
     99    </property>
     100   </widget>
     101   <widget class="QDialogButtonBox" name="buttonBox">
     102    <property name="sizePolicy">
     103     <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
     104      <horstretch>0</horstretch>
     105      <verstretch>0</verstretch>
     106     </sizepolicy>
     107    </property>
     108    <property name="standardButtons">
     109     <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
    132110    </property>
    133111   </widget>
     
    287265    </property>
    288266   </widget>
     267   <widget class="QCheckBox" name="cbShowMatrix">
     268    <property name="cursor">
     269     <cursorShape>PointingHandCursor</cursorShape>
     270    </property>
     271    <property name="statusTip">
     272     <string>Show solution steps' matrices for every solution step</string>
     273    </property>
     274    <property name="text">
     275     <string>Show solution steps' matrices</string>
     276    </property>
     277   </widget>
     278   <widget class="QCheckBox" name="cbCitiesLimit">
     279    <property name="cursor">
     280     <cursorShape>PointingHandCursor</cursorShape>
     281    </property>
     282    <property name="statusTip">
     283     <string>Use the number of cities in task to determine whether to show solution steps' matrices</string>
     284    </property>
     285    <property name="text">
     286     <string>Only when &lt;=</string>
     287    </property>
     288   </widget>
     289   <widget class="QSpinBox" name="spinCitiesLimit">
     290    <property name="statusTip">
     291     <string>Maximum number of cities for showing solution steps' matrices</string>
     292    </property>
     293    <property name="suffix">
     294     <string comment="Don't forget a space at the beginning!"> cities</string>
     295    </property>
     296    <property name="minimum">
     297     <number>1</number>
     298    </property>
     299   </widget>
    289300  </widget>
    290301 </widget>
     
    292303  <include location="../resources/tspsg.qrc"/>
    293304 </resources>
    294  <connections/>
     305 <connections>
     306  <connection>
     307   <sender>buttonBox</sender>
     308   <signal>accepted()</signal>
     309   <receiver>SettingsDialog</receiver>
     310   <slot>accept()</slot>
     311   <hints>
     312    <hint type="sourcelabel">
     313     <x>155</x>
     314     <y>252</y>
     315    </hint>
     316    <hint type="destinationlabel">
     317     <x>306</x>
     318     <y>231</y>
     319    </hint>
     320   </hints>
     321  </connection>
     322  <connection>
     323   <sender>buttonBox</sender>
     324   <signal>rejected()</signal>
     325   <receiver>SettingsDialog</receiver>
     326   <slot>reject()</slot>
     327   <hints>
     328    <hint type="sourcelabel">
     329     <x>155</x>
     330     <y>252</y>
     331    </hint>
     332    <hint type="destinationlabel">
     333     <x>262</x>
     334     <y>245</y>
     335    </hint>
     336   </hints>
     337  </connection>
     338  <connection>
     339   <sender>cbShowMatrix</sender>
     340   <signal>toggled(bool)</signal>
     341   <receiver>cbCitiesLimit</receiver>
     342   <slot>setEnabled(bool)</slot>
     343   <hints>
     344    <hint type="sourcelabel">
     345     <x>81</x>
     346     <y>8</y>
     347    </hint>
     348    <hint type="destinationlabel">
     349     <x>46</x>
     350     <y>8</y>
     351    </hint>
     352   </hints>
     353  </connection>
     354  <connection>
     355   <sender>cbShowMatrix</sender>
     356   <signal>toggled(bool)</signal>
     357   <receiver>cbCitiesLimit</receiver>
     358   <slot>setChecked(bool)</slot>
     359   <hints>
     360    <hint type="sourcelabel">
     361     <x>81</x>
     362     <y>8</y>
     363    </hint>
     364    <hint type="destinationlabel">
     365     <x>46</x>
     366     <y>8</y>
     367    </hint>
     368   </hints>
     369  </connection>
     370  <connection>
     371   <sender>cbCitiesLimit</sender>
     372   <signal>toggled(bool)</signal>
     373   <receiver>spinCitiesLimit</receiver>
     374   <slot>setEnabled(bool)</slot>
     375   <hints>
     376    <hint type="sourcelabel">
     377     <x>46</x>
     378     <y>8</y>
     379    </hint>
     380    <hint type="destinationlabel">
     381     <x>29</x>
     382     <y>9</y>
     383    </hint>
     384   </hints>
     385  </connection>
     386 </connections>
    295387</ui>
Note: See TracChangeset for help on using the changeset viewer.