Index: mythplugins/mythmusic/mythmusic/playbackbox.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/playbackbox.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/playbackbox.cpp	(working copy)
@@ -680,9 +680,9 @@
     SmartPlaylistDialog dialog(gContext->GetMainWindow(), "smartplaylistdialog");
     dialog.setSmartPlaylist(curSmartPlaylistCategory, curSmartPlaylistName);
 
-    int res = dialog.ExecPopup();
+    DialogCode res = dialog.ExecPopup();
 
-    if (res > 0)
+    if (kDialogCodeRejected != res)
     {
         dialog.getSmartPlaylist(curSmartPlaylistCategory, curSmartPlaylistName);
         updatePlaylistFromSmartPlaylist();
@@ -698,9 +698,9 @@
 
     SearchDialog dialog(gContext->GetMainWindow(), "searchdialog");
 
-    int res = dialog.ExecPopupAtXY(-1, 20);
+    DialogCode res = dialog.ExecPopupAtXY(-1, 20);
 
-    if (res != -1)
+    if (kDialogCodeRejected != res)
     {
           QString whereClause;
           dialog.getWhereClause(whereClause);
@@ -999,7 +999,7 @@
 
     EditMetadataDialog editDialog(editMeta, gContext->GetMainWindow(),
                       "edit_metadata", "music-", "edit metadata");
-    if (editDialog.exec())
+    if (kDialogCodeRejected != editDialog.exec())
     {
         // update the metadata copy stored in all_music
         if (all_music->updateMetadata(editMeta->ID(), editMeta))
@@ -2363,18 +2363,22 @@
     dupsCheck->setBackgroundOrigin(ParentOrigin);
     popup->addWidget(dupsCheck);
 
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
     switch (res)
     {
-        case 0:
+        case kDialogCodeButton0:
             insertOption = PL_REPLACE;
             break;
-        case 1:
+        case kDialogCodeButton1:
             insertOption = PL_INSERTAFTERCURRENT;
             break;
-        case 2:
+        case kDialogCodeButton2:
             insertOption = PL_INSERTATEND;
             break;
+        case kDialogCodeRejected:
+        default:
+            delete popup;
+            return false;
     }
 
     bRemoveDups = dupsCheck->isChecked();
@@ -2404,7 +2408,7 @@
 
     delete popup;
 
-    return (res >= 0);
+    return true;
 }
 
 QString PlaybackBoxMusic::getTimeString(int exTime, int maxTime)
Index: mythplugins/mythmusic/mythmusic/search.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/search.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/search.cpp	(working copy)
@@ -46,8 +46,8 @@
     addWidget(listbox);
 
     // buttons
-    okButton = addButton(tr("OK"), this, SLOT(okPressed()));
-    cancelButton = addButton(tr("Cancel"), this, SLOT(cancelPressed()));
+    okButton = addButton(tr("OK"), this, SLOT(accept()));
+    cancelButton = addButton(tr("Cancel"), this, SLOT(reject()));
 
     // Initially, fill list with all music
     runQuery("");
@@ -223,7 +223,7 @@
 {
     unsigned int id = ((SearchListBoxItem*)listbox->item(i))->getId();
     whereClause = QString("WHERE song_id='%1';").arg(id);
-    done(0);
+    accept();
 }
 
 
@@ -236,16 +236,6 @@
 {
 }
 
-void SearchDialog::okPressed(void)
-{
-    done(0);
-}
-
-void SearchDialog::cancelPressed(void)
-{
-    done(-1);
-}
-
 void SearchListBoxItem::paint(QPainter *p)
 {
     int itemHeight = height(listBox());
Index: mythplugins/mythmusic/mythmusic/globalsettings.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/globalsettings.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/globalsettings.cpp	(working copy)
@@ -673,7 +673,7 @@
 {
     VisualizationsEditor *dialog = new VisualizationsEditor(visModesEdit->getValue(),
             gContext->GetMainWindow(), "viseditor");
-    if (dialog->exec() == 1)
+    if (kDialogCodeAccepted == dialog->exec())
         visModesEdit->setValue(dialog->getSelectedModes());
 
     delete dialog;
Index: mythplugins/mythmusic/mythmusic/directoryfinder.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/directoryfinder.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/directoryfinder.cpp	(working copy)
@@ -171,7 +171,7 @@
          || !m_cancelButton || !m_homeButton)
     {
         cout << "DirectoryFinder: Your theme is missing some UI elements! Bailing out." << endl;
-        QTimer::singleShot(100, this, SLOT(done(int)));
+        QTimer::singleShot(100, this, SLOT(reject()));
     }
 
     // load pixmaps
Index: mythplugins/mythmusic/mythmusic/cdrip.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/cdrip.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/cdrip.cpp	(working copy)
@@ -731,30 +731,35 @@
                         dialog.AddButton("No To All");
                         dialog.AddButton("Yes");
                         dialog.AddButton("Yes To All");
-                        int res = dialog.exec();
+                        DialogCode res = dialog.exec();
 
-                        if (res == 1)
+                        if (kDialogCodeButton0 == res)
                         {
                             delete ripTrack;
                             delete metadata;
                         }
-                        else if (res == 2)
+                        else if (kDialogCodeButton1 == res)
                         {
                             noToAll = true;
                             delete ripTrack;
                             delete metadata;
                         }
-                        else if (res == 3)
+                        else if (kDialogCodeButton2 == res)
                         {
                             deleteTrack(m_artistName, m_albumName, title);
                             m_tracks->push_back(ripTrack);
                         }
-                        else if (res == 4)
+                        else if (kDialogCodeButton3 == res)
                         {
                             yesToAll = true;
                             deleteTrack(m_artistName, m_albumName, title);
                             m_tracks->push_back(ripTrack);
                         }
+                        else // treat cancel as no
+                        {
+                            delete ripTrack;
+                            delete metadata;
+                        }
                     }
                 }
             }
@@ -1167,8 +1172,8 @@
 
     RipStatus statusDialog(m_CDdevice, m_tracks, m_qualitySelector->getCurrentInt(),
                            gContext->GetMainWindow(), "edit metadata");
-    int res = statusDialog.exec();
-    if (res == Accepted)
+    DialogCode rescode = statusDialog.exec();
+    if (kDialogCodeAccepted == rescode)
     {
         bool EjectCD = gContext->GetNumSetting("EjectCDAfterRipping", 1);
         if (EjectCD) 
@@ -1375,7 +1380,8 @@
     searchDialog->setCaption(caption);
     searchDialog->setSearchText(value);
     searchDialog->setItems(m_searchList);
-    if (searchDialog->ExecPopupAtXY(-1, 8) == 0)
+    DialogCode rescode = searchDialog->ExecPopupAtXY(-1, 8);
+    if (kDialogCodeRejected != rescode)
     {
         value = searchDialog->getResult();
         res = true;
@@ -1395,7 +1401,7 @@
                                   "edit_metadata", "music-", "edit metadata");
     editDialog.setSaveMetadataOnly();
 
-    if (editDialog.exec())
+    if (kDialogCodeRejected != editDialog.exec())
     {
         updateTrackList();
     }
Index: mythplugins/mythmusic/mythmusic/smartplaylist.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/smartplaylist.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/smartplaylist.cpp	(working copy)
@@ -624,14 +624,15 @@
     
     SmartPLDateDialog *dateDialog = new SmartPLDateDialog(gContext->GetMainWindow(), "");
     dateDialog->setDate(combo->currentText());
-    if (dateDialog->ExecPopup() == 0)
+    if (kDialogCodeAccepted == dateDialog->ExecPopup())
     {
         combo->insertItem(dateDialog->getDate());
         combo->setCurrentText(dateDialog->getDate());
         res = true;
     }
-    
-    delete dateDialog;
+
+    dateDialog->hide();
+    dateDialog->deleteLater();
 }
           
 bool SmartPLCriteriaRow::showList(QString caption, QString &value)
@@ -642,7 +643,7 @@
     searchDialog->setCaption(caption);
     searchDialog->setSearchText(value);
     searchDialog->setItems(searchList);
-    if (searchDialog->ExecPopup() == 0)
+    if (kDialogCodeAccepted == searchDialog->ExecPopup())
     {
         value = searchDialog->getResult();
         res = true;
@@ -1089,7 +1090,7 @@
     connect(titleEdit, SIGNAL(textChanged(void)), this, SLOT(titleChanged(void)));
     connect(categoryButton, SIGNAL(clicked()), this, SLOT(categoryClicked()));
     connect(saveButton, SIGNAL(clicked()), this, SLOT(saveClicked()));
-    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelClicked()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
     connect(showResultsButton, SIGNAL(clicked()), this, SLOT(showResultsClicked()));
     connect(orderByButton, SIGNAL(clicked()), this, SLOT(orderByClicked()));
     
@@ -1211,7 +1212,7 @@
         row->saveToDatabase(ID);
     }
     
-    done(0);        
+    reject();        
 }
 
 void SmartPlaylistEditor::newSmartPlaylist(QString category)
@@ -1308,11 +1309,6 @@
     }
 }
 
-void SmartPlaylistEditor::cancelClicked(void)
-{
-    done(-1);
-}
-
 void SmartPlaylistEditor::categoryClicked(void)
 {
    showCategoryPopup();
@@ -1515,7 +1511,7 @@
     
     orderByDialog->setFieldList(orderByCombo->currentText());
     
-    if (orderByDialog->ExecPopup() == 0)
+    if (kDialogCodeAccepted == orderByDialog->ExecPopup())
         orderByCombo->setCurrentText(orderByDialog->getFieldList());
     
     delete orderByDialog;
@@ -1875,7 +1871,7 @@
             if (action == "ESCAPE")
             {
                 handled = true;
-                done(-1);        
+                reject();
             }
             else if (action == "LEFT")
             {
@@ -2177,7 +2173,7 @@
     connect(moveDownButton, SIGNAL(clicked()), this, SLOT(moveDownPressed()));
     connect(ascendingButton, SIGNAL(clicked()), this, SLOT(ascendingPressed()));
     connect(descendingButton, SIGNAL(clicked()), this, SLOT(descendingPressed()));
-    connect(okButton, SIGNAL(clicked()), this, SLOT(okPressed()));
+    connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
     
     connect(listbox, SIGNAL(selectionChanged(QListBoxItem*)), this, 
             SLOT(listBoxSelectionChanged(QListBoxItem*)));
@@ -2244,7 +2240,7 @@
             if (action == "ESCAPE")
             {
                 handled = true;
-                done(-1);        
+                reject();
             }
             else if (action == "LEFT")
             {
@@ -2299,7 +2295,7 @@
             else if (action == "7")
             {
                 handled = true;
-                okPressed();
+                accept();
             }
         }
     }
@@ -2368,11 +2364,6 @@
     listbox->setSelected(listbox->selectedItem()->next(), true);
 }
 
-void SmartPLOrderByDialog::okPressed(void)
-{
-    done(0);
-}
-
 void SmartPLOrderByDialog::orderByChanged(void)
 {
     bool found = false;
@@ -2552,8 +2543,8 @@
 
     addLayout(vbox, 0);
     
-    connect(okButton, SIGNAL(clicked()), this, SLOT(okPressed()));
-    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelPressed()));
+    connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
 
     connect(fixedRadio, SIGNAL(toggled(bool)), this, SLOT(fixedCheckToggled(bool)));
     connect(nowRadio, SIGNAL(toggled(bool)), this, SLOT(nowCheckToggled(bool)));
@@ -2662,7 +2653,7 @@
             if (action == "ESCAPE")
             {
                 handled = true;
-                done(-1);        
+                reject();
             }
             else if (action == "LEFT")
             {
@@ -2690,16 +2681,6 @@
         MythPopupBox::keyPressEvent(e);
 }
 
-void SmartPLDateDialog::okPressed(void)
-{
-    done(0);
-}
-
-void SmartPLDateDialog::cancelPressed(void)
-{
-    done(-1);
-}
-
 void SmartPLDateDialog::fixedCheckToggled(bool on)
 {
     daySpinEdit->setEnabled(on);
Index: mythplugins/mythmusic/mythmusic/editmetadata.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/editmetadata.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/editmetadata.cpp	(working copy)
@@ -521,7 +521,8 @@
     searchDialog->setCaption(caption);
     searchDialog->setSearchText(value);
     searchDialog->setItems(searchList);
-    if (searchDialog->ExecPopupAtXY(-1, 8) == 0)
+    DialogCode rescode = searchDialog->ExecPopupAtXY(-1, 8);
+    if (kDialogCodeRejected != rescode)
     {
         value = searchDialog->getResult();
         res = true;
@@ -600,7 +601,7 @@
 void EditMetadataDialog::closeDialog()
 {
     cancelPopup();
-    done(1);  
+    accept();
 }
 
 void EditMetadataDialog::showSaveMenu()
@@ -656,7 +657,7 @@
     cancelPopup();
 
     *m_sourceMetadata = m_metadata;
-    done(1);
+    accept();
 }
 
 void EditMetadataDialog::saveToDatabase()
@@ -665,7 +666,7 @@
 
     m_metadata->dumpToDatabase();
     *m_sourceMetadata = m_metadata;
-    done(1);
+    accept();
 }
 
 void EditMetadataDialog::saveToFile()
@@ -687,7 +688,7 @@
         decoder->commitMetadata(m_metadata);
         delete decoder;
     }
-    done(1);
+    accept();
 }
 
 void EditMetadataDialog::saveAll()
@@ -729,9 +730,10 @@
     menu->addButton(albumArt->getTypeName(IT_CD));
     menu->addButton(albumArt->getTypeName(IT_INLAY));
 
-    int res = menu->ExecPopup();
+    DialogCode ret = menu->ExecPopup();
+    int res = MythDialog::CalcItemIndex(ret);
 
-    if ( res != -1)
+    if ((IT_UNKNOWN <= res) && (res < IT_LAST))
     {
         // get selected image in grid
         ImageGridItem *item = coverart_grid->getCurrentItem();
Index: mythplugins/mythmusic/mythmusic/smartplaylist.h
===================================================================
--- mythplugins/mythmusic/mythmusic/smartplaylist.h	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/smartplaylist.h	(working copy)
@@ -112,7 +112,6 @@
     void updateMatches(void);
     void categoryClicked(void);
     void saveClicked(void);
-    void cancelClicked(void);
     void showResultsClicked(void);
     
     // category popup
@@ -232,7 +231,6 @@
     void descendingPressed(void);
     void orderByChanged(void);
     void listBoxSelectionChanged(QListBoxItem *item);
-    void okPressed(void);
     
  protected:
     void keyPressEvent(QKeyEvent *e);
@@ -271,9 +269,6 @@
     void addDaysCheckToggled(bool on);
     void valueChanged(void);
     
-    void okPressed(void);
-    void cancelPressed(void);
-        
  protected:
     void keyPressEvent(QKeyEvent *e);
 
Index: mythplugins/mythmusic/mythmusic/importmusic.h
===================================================================
--- mythplugins/mythmusic/mythmusic/importmusic.h	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/importmusic.h	(working copy)
@@ -150,7 +150,6 @@
     void copyPressed(void);
     void prevPressed(void);
     void nextPressed(void);
-    void exitPressed(void);
     void selectorChanged(int item);
 
   private:
Index: mythplugins/mythmusic/mythmusic/search.h
===================================================================
--- mythplugins/mythmusic/mythmusic/search.h	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/search.h	(working copy)
@@ -33,8 +33,6 @@
 
     void searchTextChanged(const QString &searchText);
     void itemSelected(int i);
-    void okPressed(void);
-    void cancelPressed(void);
 
   private:
 
Index: mythplugins/mythmusic/mythmusic/importmusic.cpp
===================================================================
--- mythplugins/mythmusic/mythmusic/importmusic.cpp	(revision 14863)
+++ mythplugins/mythmusic/mythmusic/importmusic.cpp	(working copy)
@@ -359,9 +359,9 @@
 {
     DirectoryFinder finder(m_location_edit->getText(),
                            gContext->GetMainWindow(), "directory finder");
-    bool res = finder.exec();
+    DialogCode res = finder.exec();
 
-    if (res)
+    if (kDialogCodeRejected != res)
     {
         m_location_edit->setText(finder.getSelected());
         editLostFocus();
@@ -674,7 +674,7 @@
                                   "edit_metadata", "music-", "edit metadata");
     editDialog.setSaveMetadataOnly();
 
-    if (editDialog.exec())
+    if (kDialogCodeRejected != editDialog.exec())
     {
         m_tracks->at(m_currentTrack)->metadataHasChanged = true;
         m_tracks->at(m_currentTrack)->isNewTune = Ripper::isNewTune(
@@ -1010,7 +1010,7 @@
     if (m_exit_button)
     {
         m_exit_button->setText(tr("Exit"));
-        connect(m_exit_button, SIGNAL(pushed()), this, SLOT(exitPressed()));
+        connect(m_exit_button, SIGNAL(pushed()), this, SLOT(reject()));
     }
 
     m_prev_button = getUIPushButtonType("prev_button");
@@ -1045,11 +1045,6 @@
     updateStatus();
 }
 
-void ImportCoverArtDialog::exitPressed()
-{
-    done(0);
-}
-
 void ImportCoverArtDialog::copyPressed()
 {
     if (m_filelist.size() > 0)
Index: mythplugins/mytharchive/mytharchive/videoselector.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/videoselector.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/videoselector.cpp	(working copy)
@@ -55,7 +55,7 @@
 
         if (action == "ESCAPE")
         {
-            done(0);
+            reject();
         }
         else if (action == "DOWN")
         {
Index: mythplugins/mytharchive/mytharchive/logviewer.h
===================================================================
--- mythplugins/mytharchive/mytharchive/logviewer.h	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/logviewer.h	(working copy)
@@ -21,7 +21,6 @@
     void setFilenames(const QString &progressLog, const QString &fullLog);
 
   protected slots:
-    void exitClicked(void);
     void cancelClicked(void);
     void updateClicked(void);
     void updateTimerTimeout(void);
Index: mythplugins/mytharchive/mytharchive/fileselector.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/fileselector.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/fileselector.cpp	(working copy)
@@ -206,7 +206,7 @@
          || !m_cancelButton || !m_homeButton)
     {
         cout << "FileSelector: Your theme is missing some UI elements! Bailing out." << endl;
-        QTimer::singleShot(100, this, SLOT(done(int)));
+        QTimer::singleShot(100, this, SLOT(reject()));
     }
 
     // load pixmaps
Index: mythplugins/mytharchive/mytharchive/main.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/main.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/main.cpp	(working copy)
@@ -103,8 +103,6 @@
 void runCreateDVD(void)
 {
 #ifdef CREATE_DVD 
-    int res;
-
     QString commandline;
     QString tempDir = getTempDirectory(true);
 
@@ -132,12 +130,12 @@
     burnWiz = new MythburnWizard(gContext->GetMainWindow(),
                              "mythburn_wizard", "mythburn-");
     qApp->unlock();
-    res = burnWiz->exec();
+    DialogCode res = burnWiz->exec();
     qApp->lock();
     qApp->processEvents();
     delete burnWiz;
 
-    if (res == 0)
+    if (kDialogCodeRejected == res)
         return;
 
     // now show the log viewer
@@ -152,8 +150,6 @@
 void runCreateArchive(void)
 {
 #ifdef CREATE_NATIVE
-    int res;
-
     QString commandline;
     QString tempDir = getTempDirectory(true);
 
@@ -181,12 +177,12 @@
     nativeWiz = new ExportNativeWizard(gContext->GetMainWindow(),
                                  "exportnative_wizard", "mythnative-");
     qApp->unlock();
-    res = nativeWiz->exec();
+    DialogCode res = nativeWiz->exec();
     qApp->lock();
     qApp->processEvents();
     delete nativeWiz;
 
-    if (res == 0)
+    if (kDialogCodeRejected == res)
         return;
 
     // now show the log viewer
@@ -231,10 +227,10 @@
     ImportNativeWizard wiz("/", filter, gContext->GetMainWindow(),
                           "import_native_wizard", "mythnative-", "import native wizard");
     qApp->unlock();
-    int res = wiz.exec();
+    DialogCode res = wiz.exec();
     qApp->lock();
 
-    if (res == 0)
+    if (kDialogCodeRejected == res)
         return;
 
     // now show the log viewer
@@ -311,8 +307,6 @@
         return;
     }
 
-    int res;
-
     // ask the user what type of disk to burn to
     DialogBox *dialog = new DialogBox(gContext->GetMainWindow(),
             QObject::tr("\nPlace a blank DVD in the drive and select an option below."));
@@ -322,13 +316,17 @@
     dialog->AddButton(QObject::tr("Burn DVD Rewritable (Force Erase)"));
     dialog->AddButton(QObject::tr("Cancel"));
 
-    res = dialog->exec();
+    DialogCode res = dialog->exec();
     delete dialog;
 
-    // cancel pressed?
-    if (res == 4)
+    // cancel pressed or escape hit?
+    if ((kDialogCodeButton3 == res) || (kDialogCodeRejected == res))
         return;
 
+    int fmt = MythDialog::CalcItemIndex(res);
+    if ((fmt < 0) || (fmt > 2))
+        return;
+
     QString tempDir = getTempDirectory(true);
 
     if (tempDir == "")
@@ -346,8 +344,8 @@
     if (QFile::exists(logDir + "/mythburncancel.lck"))
         QFile::remove(logDir + "/mythburncancel.lck");
 
-    QString sArchiveFormat = QString::number(res - 1);
-    QString sEraseDVDRW = (res == 3 ? "1" : "0");
+    QString sArchiveFormat = QString::number(fmt);
+    QString sEraseDVDRW = (kDialogCodeButton2 == res) ? "1" : "0";
     QString sNativeFormat = (gContext->GetSetting("MythArchiveLastRunType").startsWith("Native") ? "1" : "0");
 
     commandline = "mytharchivehelper -b " + sArchiveFormat + " " + sEraseDVDRW  + " " + sNativeFormat;
Index: mythplugins/mytharchive/mytharchive/editmetadata.h
===================================================================
--- mythplugins/mytharchive/mytharchive/editmetadata.h	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/editmetadata.h	(working copy)
@@ -32,7 +32,6 @@
     void closeDialog();
     void showSaveMenu();
     void savePressed();
-    void cancelPressed();
     void editLostFocus();
 
   private:
Index: mythplugins/mytharchive/mytharchive/importnativewizard.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/importnativewizard.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/importnativewizard.cpp	(working copy)
@@ -259,7 +259,7 @@
          || !m_prevButton || !m_cancelButton || !m_homeButton)
     {
         cout << "ImportNativeWizard: Your theme is missing some UI elements! Bailing out." << endl;
-        QTimer::singleShot(100, this, SLOT(done(int)));
+        QTimer::singleShot(100, this, SLOT(reject()));
     }
 
     // load pixmaps
@@ -718,7 +718,8 @@
     searchDialog->setCaption(caption);
     searchDialog->setSearchText(value);
     searchDialog->setItems(m_searchList);
-    if (searchDialog->ExecPopupAtXY(-1, 8) == 0)
+    DialogCode rescode = searchDialog->ExecPopupAtXY(-1, 8);
+    if (kDialogCodeRejected != rescode)
     {
         value = searchDialog->getResult();
         res = true;
Index: mythplugins/mytharchive/mytharchive/logviewer.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/logviewer.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/logviewer.cpp	(working copy)
@@ -100,7 +100,7 @@
 
     hbox->addWidget(m_exitButton);
 
-    connect(m_exitButton, SIGNAL(clicked()), this, SLOT(exitClicked()));
+    connect(m_exitButton, SIGNAL(clicked()), this, SLOT(reject()));
     connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(cancelClicked()));
     connect(m_updateButton, SIGNAL(clicked()), this, SLOT(updateClicked()));
     connect(m_autoupdateCheck, SIGNAL(toggled(bool)), this, SLOT(toggleAutoUpdate(bool)));
@@ -150,11 +150,6 @@
     m_updateTimer->changeInterval(value * 1000);
 }
 
-void LogViewer::exitClicked(void)
-{
-    done(-1);
-}
-
 void LogViewer::cancelClicked(void)
 {
     QString tempDir = gContext->GetSetting("MythArchiveTempDir", "");
Index: mythplugins/mytharchive/mytharchive/exportnativewizard.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/exportnativewizard.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/exportnativewizard.cpp	(working copy)
@@ -680,7 +680,7 @@
     FileSelector selector(FSTYPE_FILE, "/", "*.*", gContext->GetMainWindow(),
                           "file_selector", "mytharchive-", "file selector");
     qApp->unlock();
-    bool res = selector.exec();
+    bool res = (kDialogCodeRejected != selector.exec());
 
     if (res)
     {
Index: mythplugins/mytharchive/mytharchive/recordingselector.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/recordingselector.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/recordingselector.cpp	(working copy)
@@ -56,7 +56,7 @@
 
         if (action == "ESCAPE")
         {
-            done(0);
+            done(kDialogCodeRejected);
         }
         else if (action == "DOWN")
         {
Index: mythplugins/mytharchive/mytharchive/editmetadata.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/editmetadata.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/editmetadata.cpp	(working copy)
@@ -146,7 +146,7 @@
     if (cancel_button)
     {
         cancel_button->setText(tr("Cancel"));
-        connect(cancel_button, SIGNAL(pushed()), this, SLOT(cancelPressed()));
+        connect(cancel_button, SIGNAL(pushed()), this, SLOT(reject()));
     }
 
     buildFocusList();
@@ -182,14 +182,9 @@
 {
     *sourceMetadata = workMetadata;
     sourceMetadata->editedDetails = true;
-    done(1);
+    done(kDialogCodeAccepted);
 }
 
-void EditMetadataDialog::cancelPressed()
-{
-    done(Rejected);
-}
-
 EditMetadataDialog::~EditMetadataDialog()
 {
 }
Index: mythplugins/mytharchive/mytharchive/mythburnwizard.cpp
===================================================================
--- mythplugins/mytharchive/mytharchive/mythburnwizard.cpp	(revision 14863)
+++ mythplugins/mytharchive/mytharchive/mythburnwizard.cpp	(working copy)
@@ -1403,7 +1403,7 @@
 
     EditMetadataDialog editDialog(curItem, gContext->GetMainWindow(),
                                   "edit_metadata", "mythburn-", "edit metadata");
-    if (editDialog.exec())
+    if (kDialogCodeRejected != editDialog.exec())
     {
         // update widgets to reflect any changes
         titleChanged(item);
@@ -1477,7 +1477,7 @@
     FileSelector selector(FSTYPE_FILE, "/", "*.*", gContext->GetMainWindow(),
                           "file_selector", "mytharchive-", "file selector");
     qApp->unlock();
-    bool res = selector.exec();
+    bool res = (kDialogCodeRejected != selector.exec());
 
     if (res)
     {
Index: mythplugins/mythbrowser/mythbrowser/tabview.cpp
===================================================================
--- mythplugins/mythbrowser/mythbrowser/tabview.cpp	(revision 14863)
+++ mythplugins/mythbrowser/mythbrowser/tabview.cpp	(working copy)
@@ -38,8 +38,8 @@
 #include "mythtv/mythdbcon.h"
 #include "mythtv/mythwidgets.h"
 #include "mythtv/virtualkeyboard.h"
+#include "mythtv/mythdialogs.h"
 
-
 using namespace std;
 
 TabView::TabView(MythMainWindow *parent, const char *name, QStringList urls, 
@@ -322,14 +322,14 @@
     url->setText(((WebPage*)mytab->currentPage())->browser->baseURL().htmlURL());
     popup->addWidget(url);
 
-    popup->addButton(tr("OK"));
-    popup->addButton(tr("Cancel"));
+    popup->addButton(tr("OK"),     popup, SLOT(accept()));
+    popup->addButton(tr("Cancel"), popup, SLOT(reject()));
 
     qApp->removeEventFilter(this);
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
     qApp->installEventFilter(this);
 
-    if (res == 0)
+    if (kDialogCodeAccepted == res)
     {
         QString sGroup = group->text();
         QString sDesc = desc->text();
@@ -391,14 +391,14 @@
     popup->addWidget(editor);
     editor->setFocus(); 
 
-    popup->addButton(tr("OK"));
-    popup->addButton(tr("Cancel"));
+    popup->addButton(tr("OK"),     popup, SLOT(accept()));
+    popup->addButton(tr("Cancel"), popup, SLOT(reject()));
 
     qApp->removeEventFilter(this);
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
     qApp->installEventFilter(this);
 
-    if (res == 0)
+    if (kDialogCodeAccepted == res)
     {
         QString sURL = editor->text();
         if (!sURL.startsWith("http://") && !sURL.startsWith("https://") &&
Index: mythplugins/mythweather/mythweather/sourceManager.h
===================================================================
--- mythplugins/mythweather/mythweather/sourceManager.h	(revision 14863)
+++ mythplugins/mythweather/mythweather/sourceManager.h	(working copy)
@@ -28,8 +28,8 @@
     bool findScripts();
     bool findScriptsDB();
     void setupSources();
-    void connectScreen(uint id, WeatherScreen *screen);
-    void disconnectScreen(WeatherScreen *screen);
+    bool connectScreen(uint id, WeatherScreen *screen);
+    bool disconnectScreen(WeatherScreen *screen);
     ScriptInfo *getSourceByName(const QString &name);
 
   private slots:
Index: mythplugins/mythweather/mythweather/weatherSetup.cpp
===================================================================
--- mythplugins/mythweather/mythweather/weatherSetup.cpp	(revision 14863)
+++ mythplugins/mythweather/mythweather/weatherSetup.cpp	(working copy)
@@ -518,6 +518,57 @@
     }
 }
 
+inline QString format_msg(
+    const QStringList &notDefined, uint rows, uint columns)
+{
+    const QString etc = QObject::tr("etc...");
+    uint elen = etc.length();
+    QStringList lines;
+    lines += "";
+    QStringList::iterator oit = lines.begin();
+    QStringList::const_iterator iit = notDefined.begin();
+    while (iit != notDefined.end())
+    {
+        QStringList::const_iterator nit = iit;
+        nit++;
+
+        uint olen = (*oit).length();
+        uint ilen = (*iit).length();
+
+        if (lines.size() >= rows)
+        {
+            if (((olen + 2 + ilen + 2 + elen) < columns) ||
+                (((olen + 2 + ilen) < columns) && (nit == notDefined.end())))
+            {
+                *oit += ", " + *iit;
+            }
+            else
+            {
+                *oit += ", " + etc;
+                nit = notDefined.end();
+            }
+        }
+        else
+        {
+            if ((olen + 2 + ilen) < columns)
+            {
+                *oit += ", " + *iit;
+            }
+            else
+            {
+                *oit += ",";
+                lines += "";
+                oit++;
+                *oit += *iit;
+            }
+        }
+
+        iit = nit;
+    }
+
+    return lines.join("\n").mid(2);
+}
+
 void ScreenSetup::saveData()
 {
     // check if all active screens have sources/locations defined
@@ -547,8 +598,9 @@
 
     if (notDefined.size())
     {
-        QString msg = tr("Cannot proceed, the following data items do not have sources defined:\n");
-        msg += notDefined.join("\n");
+        QString msg = tr("Can not proceed, the following data "
+                         "items do not have sources defined:\n");
+        msg += format_msg(notDefined, 1, 400);
         MythPopupBox::showOkPopup(gContext->GetMainWindow(),
                                   "Undefined Sources", msg);
         return;
@@ -627,44 +679,69 @@
     accept();
 }
 
-void ScreenSetup::doListSelect(UIListBtnType *list, UIListBtnTypeItem *selected)
+typedef QMap<DialogCode, QString> CommandMap;
+
+static DialogCode add_button(QStringList   &buttons,
+                             CommandMap    &commands,
+                             const QString &button_text,
+                             const QString &command)
 {
+    int idx = buttons.size();
+    buttons += button_text;
+    commands[(DialogCode)((int)kDialogCodeButton0 + idx)] = command;
+
+    return (DialogCode)((int)kDialogCodeButton0 + idx);
+}
+
+void ScreenSetup::doListSelect(UIListBtnType *list,
+                               UIListBtnTypeItem *selected)
+{
     QString txt = selected->text();
     if (list == m_active_list)
     {
         ScreenListInfo *si = (ScreenListInfo *) selected->getData();
         QStringList buttons;
+        CommandMap commands;
+
         if (!si->multiLoc)
-            buttons << tr("Change Location");
+            add_button(buttons, commands, tr("Change Location"), "change_loc");
 
         if (si->hasUnits)
-            buttons << tr("Change Units");
+            add_button(buttons, commands, tr("Change Units"), "change_units");
 
-        buttons << tr("Move Up") << tr("Move Down") << tr("Remove") <<
-                tr("Cancel");
-        QString result = buttons[MythPopupBox::showButtonPopup(
-                    gContext->GetMainWindow(), "Manipulate Screen",
-                    tr("Action to take on screen ") + selected->text(),
-                    buttons, buttons.count() - 1)];
-        if (result == tr ("Change Location"))
+        add_button(buttons, commands, tr("Move Up"),   "move_up");
+        add_button(buttons, commands, tr("Move Down"), "move_down");
+        add_button(buttons, commands, tr("Remove"),    "remove");
+
+        DialogCode cancelbtn =
+            add_button(buttons, commands, tr("Cancel"), "cancel");
+        commands[kDialogCodeRejected] = "cancel";
+
+        DialogCode res = MythPopupBox::ShowButtonPopup(
+            gContext->GetMainWindow(), "Manipulate Screen",
+            tr("Action to take on screen ") + selected->text(),
+            buttons, cancelbtn);
+
+        QString cmd = commands[res];
+        if (cmd == "change_loc")
         {
             doLocationDialog(si, true);
         }
-        else if (result == tr("Change Units"))
+        else if (cmd == "change_units")
         {
             showUnitsPopup(selected->text(),
                            (ScreenListInfo *) selected->getData());
             updateHelpText();
         }
-        else if (result == tr("Move Up"))
+        else if (cmd == "move_up")
         {
             list->MoveItemUpDown(selected, true);
         }
-        else if (result == tr("Move Down"))
+        else if (cmd == "move_down")
         {
             list->MoveItemUpDown(selected, false);
         }
-        else if (result == tr("Remove"))
+        else if (cmd == "remove")
         {
             deleteScreen(list);
         }
@@ -798,16 +875,17 @@
     units_t *units = &si->units;
     QStringList unitsBtns;
     unitsBtns << tr("English Units") << tr("SI Units");
-    int ret = MythPopupBox::showButtonPopup(
-            gContext->GetMainWindow(), "Change Units",
-            tr("Select units for screen ") + name, unitsBtns,
-            *units == ENG_UNITS ? 0 : 1);
+    DialogCode ret = MythPopupBox::ShowButtonPopup(
+        gContext->GetMainWindow(), "Change Units",
+        tr("Select units for screen ") + name, unitsBtns,
+        *units == ENG_UNITS ? kDialogCodeButton0 : kDialogCodeButton1);
+
     switch (ret)
     {
-        case 0:
+        case kDialogCodeButton0:
             *units = ENG_UNITS;
             break;
-        case 1:
+        case kDialogCodeButton1:
             *units = SI_UNITS;
             break;
         default:
Index: mythplugins/mythweather/mythweather/sourceManager.cpp
===================================================================
--- mythplugins/mythweather/mythweather/sourceManager.cpp	(revision 14863)
+++ mythplugins/mythweather/mythweather/sourceManager.cpp	(working copy)
@@ -296,14 +296,46 @@
         return false;
 }
 
-void SourceManager::connectScreen(uint id, WeatherScreen *screen)
+bool SourceManager::connectScreen(uint id, WeatherScreen *screen)
 {
+    if (!screen)
+    {
+        VERBOSE(VB_IMPORTANT, LOC_ERR +
+                "Can not connect nonexistent screen "<<screen);
+
+        return false;
+    }
+
     WeatherSource *ws = m_sourcemap[id];
+    if (!ws)
+    {
+        VERBOSE(VB_IMPORTANT, LOC_ERR +
+                "Can not connect nonexistent source "<<id);
+
+        return false;
+    }
     ws->connectScreen(screen);
+    return true;
 }
 
-void SourceManager::disconnectScreen(WeatherScreen *screen)
+bool SourceManager::disconnectScreen(WeatherScreen *screen)
 {
+    if (!screen)
+    {
+        VERBOSE(VB_IMPORTANT, LOC_ERR +
+                "Can not disconnect nonexistent screen "<<screen);
+
+        return false;
+    }
+
     WeatherSource *ws = m_sourcemap[screen->getId()];
+    if (!ws)
+    {
+        VERBOSE(VB_IMPORTANT, LOC_ERR +
+                "Can not disconnect nonexistent source "<<screen->getId());
+
+        return false;
+    }
     ws->disconnectScreen(screen);
+    return true;
 }
Index: mythplugins/mythgallery/mythgallery/iconview.cpp
===================================================================
--- mythplugins/mythgallery/mythgallery/iconview.cpp	(revision 14863)
+++ mythplugins/mythgallery/mythgallery/iconview.cpp	(working copy)
@@ -1332,7 +1332,7 @@
     DialogBox importDiag(gContext->GetMainWindow(), tr("Import pictures?"));
     importDiag.AddButton(tr("No"));
     importDiag.AddButton(tr("Yes"));
-    if (importDiag.exec() != 2)
+    if (importDiag.exec() != kDialogCodeButton1)
         return;
 
     // Makes import directory samba/windows friendly (no colon)
Index: mythplugins/mythcontrols/mythcontrols/keygrabber.h
===================================================================
--- mythplugins/mythcontrols/mythcontrols/keygrabber.h	(revision 14863)
+++ mythplugins/mythcontrols/mythcontrols/keygrabber.h	(working copy)
@@ -46,10 +46,6 @@
     ///        modifier keys. (note: result not thread-safe)
     QString GetCapturedKey(void) const { return m_capturedKey; }
 
-  public slots:
-    void Accept(void) { done(1); }
-    void Cancel(void) { done(0); }
-
   protected:
     void keyPressEvent(QKeyEvent *e);
     void keyReleaseEvent(QKeyEvent *e);
@@ -82,10 +78,10 @@
                         const QString  &context);
 
     /// \brief Execute the error popup
-    int GetOption(void) { return ExecPopup(this, SLOT(Finish())); }
+    DialogCode GetOption(void) { return ExecPopup(this, SLOT(Finish())); }
 
   protected slots:
-    void Finish(void) { done(0); }
+    void Finish(void) { reject(); }
 };
 
 
@@ -97,18 +93,20 @@
     Q_OBJECT
 
   public:
-    enum actions { kSave, kChangeView, kCancel, };
+    static const DialogCode kSave       = kDialogCodeButton0;
+    static const DialogCode kChangeView = kDialogCodeButton1;
+    static const DialogCode kCancel     = kDialogCodeRejected;
 
     /// \brief Create a new action window. Does not pop-up menu.
     OptionsMenu(MythMainWindow *window);
 
     /// \brief Execute the option popup.
-    int GetOption(void) { return ExecPopup(this,SLOT(Cancel())); }
+    DialogCode GetOption(void) { return ExecPopup(this,SLOT(Cancel())); }
 
   public slots:
-    void Save(void)       { done(OptionsMenu::kSave);       }
-    void ChangeView(void) { done(OptionsMenu::kChangeView); }
-    void Cancel(void)     { done(OptionsMenu::kCancel);     }
+    void Save(void)       { done(kSave);       }
+    void ChangeView(void) { done(kChangeView); }
+    void Cancel(void)     { done(kCancel);     }
 };
 
 
@@ -120,18 +118,20 @@
     Q_OBJECT
 
   public:
-    enum actions { kSet, kRemove, kCancel, };
+    static const DialogCode kSet        = kDialogCodeButton0;
+    static const DialogCode kRemove     = kDialogCodeButton1;
+    static const DialogCode kCancel     = kDialogCodeRejected;
 
     /// \brief Create a new action window. Does not pop-up menu.
     ActionMenu(MythMainWindow *window);
 
     /// \brief Execute the option popup.
-    int GetOption(void) { return ExecPopup(this, SLOT(Cancel())); }
+    DialogCode GetOption(void) { return ExecPopup(this, SLOT(Cancel())); }
 
   public slots:
-    void Set(void)      { done(ActionMenu::kSet);    }
-    void Remove(void)   { done(ActionMenu::kRemove); }
-    void Cancel(void)   { done(ActionMenu::kCancel); }
+    void Set(void)      { done(kSet);    }
+    void Remove(void)   { done(kRemove); }
+    void Cancel(void)   { done(kCancel); }
 };
 
 
@@ -143,17 +143,18 @@
     Q_OBJECT
 
   public:
-    enum actions { kSave, kExit, };
+    static const DialogCode kSave       = kDialogCodeAccepted;
+    static const DialogCode kExit       = kDialogCodeRejected;
 
     /// \brief Create a new action window. Does not pop-up menu.
     UnsavedMenu(MythMainWindow *window);
 
     /// \brief Execute the option popup.
-    int GetOption(void) { return ExecPopup(this, SLOT(Cancel())); }
+    DialogCode GetOption(void) { return ExecPopup(this, SLOT(Cancel())); }
 
   public slots:
-    void Save(void)     { done(UnsavedMenu::kSave); }
-    void Cancel(void)   { done(UnsavedMenu::kExit); }
+    void Save(void)     { done(kSave); }
+    void Cancel(void)   { done(kExit); }
 };
 
 /** \class ConfirmMenu
@@ -164,17 +165,18 @@
     Q_OBJECT
 
   public:
-    enum actions { kConfirm, kCancel, };
+    static const DialogCode kConfirm    = kDialogCodeAccepted;
+    static const DialogCode kCancel     = kDialogCodeRejected;
 
     /// \brief Create a new action window. Does not pop-up menu.
     ConfirmMenu(MythMainWindow *window, const QString &msg);
 
     /// \brief Execute the option popup.
-    int GetOption(void) { return ExecPopup(this,SLOT(Cancel())); }
+    DialogCode GetOption(void) { return ExecPopup(this,SLOT(Cancel())); }
 
   public slots:
-    void Confirm(void)  { done(ConfirmMenu::kConfirm); }
-    void Cancel(void)   { done(ConfirmMenu::kCancel);  }
+    void Confirm(void)  { done(kConfirm); }
+    void Cancel(void)   { done(kCancel);  }
 };
 
 #endif // KEYGRABBER_H_
Index: mythplugins/mythcontrols/mythcontrols/mythcontrols.cpp
===================================================================
--- mythplugins/mythcontrols/mythcontrols/mythcontrols.cpp	(revision 14863)
+++ mythplugins/mythcontrols/mythcontrols/mythcontrols.cpp	(working copy)
@@ -233,7 +233,7 @@
     QStringList contents;
     QString leftcaption, rightcaption;
 
-    switch(popup.GetOption())
+    switch (popup.GetOption())
     {
         case ViewMenu::kContextAction:
             leftcaption = tr(CAPTION_CONTEXT);
@@ -290,7 +290,7 @@
 
             OptionsMenu popup(gContext->GetMainWindow());
 
-            switch(popup.GetOption())
+            switch (popup.GetOption())
             {
                 case OptionsMenu::kSave:
                     Save();
@@ -321,7 +321,7 @@
                 if (!key.isEmpty())
                 {
                     ActionMenu popup(gContext->GetMainWindow());
-                    int result = popup.GetOption();
+                    DialogCode result = popup.GetOption();
                     if (result == ActionMenu::kSet)
                         AddKeyToAction();
                     else if (result == ActionMenu::kRemove)
@@ -698,14 +698,11 @@
            "Do you want to bind it anyway?")
         .arg(conflict->GetAction()).arg(conflict->GetContext());
 
-    if (MythPopupBox::show2ButtonPopup(
-            gContext->GetMainWindow(), tr("Conflict Warning"),
-            msg, tr("Bind Key"), QObject::tr("Cancel"), 0))
-    {
-        return false;
-    }
+    DialogCode res = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(), tr("Conflict Warning"),
+        msg, tr("Bind Key"), QObject::tr("Cancel"), kDialogCodeButton1);
 
-    return true;
+    return (kDialogCodeButton0 == res);
 }
 
 /** \fn MythControls::AddKeyToAction(void)
@@ -720,7 +717,7 @@
 {
     /* grab a key from the user */
     KeyGrabPopupBox getkey(gContext->GetMainWindow());
-    if (0 == getkey.ExecPopup(&getkey, SLOT(Cancel())))
+    if (kDialogCodeRejected == getkey.ExecPopup(&getkey, SLOT(Cancel())))
         return; // user hit Cancel button
 
     QString     key     = getkey.GetCapturedKey();
Index: mythplugins/mythcontrols/mythcontrols/mythcontrols.h
===================================================================
--- mythplugins/mythcontrols/mythcontrols/mythcontrols.h	(revision 14863)
+++ mythplugins/mythcontrols/mythcontrols/mythcontrols.h	(working copy)
@@ -43,16 +43,19 @@
     ViewMenu(MythMainWindow *window);
 
     /// \brief Execute the option popup.
-    int GetOption(void) { return ExecPopup(this, SLOT(Cancel())); }
+    DialogCode GetOption(void) { return ExecPopup(this, SLOT(Cancel())); }
 
     /// \brief The available views
-    enum actions { kContextAction, kContextKey, kKeyContext, kCancel, };
+    static const DialogCode kContextAction = kDialogCodeButton0;
+    static const DialogCode kContextKey    = kDialogCodeButton1;
+    static const DialogCode kKeyContext    = kDialogCodeButton2;
+    static const DialogCode kCancel        = kDialogCodeRejected;
 
   public slots:
-    void ActionsByContext(void) { done(ViewMenu::kContextAction); }
-    void KeysByContext(void)    { done(ViewMenu::kContextKey);    }
-    void ContextsByKey(void)    { done(ViewMenu::kKeyContext);    }
-    void Cancel(void)           { done(ViewMenu::kCancel);        }
+    void ActionsByContext(void) { done(kContextAction); }
+    void KeysByContext(void)    { done(kContextKey);    }
+    void ContextsByKey(void)    { done(kKeyContext);    }
+    void Cancel(void)           { done(kCancel);        }
 };
 
 /** \class MythControls
Index: mythplugins/mythcontrols/mythcontrols/keygrabber.cpp
===================================================================
--- mythplugins/mythcontrols/mythcontrols/keygrabber.cpp	(revision 14863)
+++ mythplugins/mythcontrols/mythcontrols/keygrabber.cpp	(working copy)
@@ -36,8 +36,8 @@
 {
     addLabel(tr("Press A Key"), Large, false);
     m_label  = addLabel(tr("Waiting for key press"), Small, false);
-    m_ok     = addButton(QObject::tr("OK"),     this, SLOT(Accept()));
-    m_cancel = addButton(QObject::tr("Cancel"), this, SLOT(Cancel()));
+    m_ok     = addButton(QObject::tr("OK"),     this, SLOT(accept()));
+    m_cancel = addButton(QObject::tr("Cancel"), this, SLOT(reject()));
 
     grabKeyboard();
 }
@@ -127,7 +127,7 @@
     addLabel(tr("Options"), Large, false);
     addButton(QObject::tr("Save"),   this, SLOT(Save()));
     addButton(QObject::tr("Change View"), this, SLOT(ChangeView()));
-    addButton(QObject::tr("Cancel"), this, SLOT(Cancel()))->setFocus();
+    addButton(QObject::tr("Cancel"), this, SLOT(reject()))->setFocus();
 }
     
 //////////////////////////////////////////////////////////////////////
@@ -138,7 +138,7 @@
     addLabel(tr("Modify Action"), Large, false);
     addButton(tr("Set Binding"),     this, SLOT(Set()));
     addButton(tr("Remove Binding"),  this, SLOT(Remove()));
-    addButton(QObject::tr("Cancel"), this, SLOT(Cancel()))->setFocus();
+    addButton(QObject::tr("Cancel"), this, SLOT(reject()))->setFocus();
 }
 
 //////////////////////////////////////////////////////////////////////
@@ -149,7 +149,7 @@
     addLabel(tr("Unsaved Changes"), Large, false);
     addLabel(tr("Exiting...") + "\n\n" + tr("Save Changes?"));
     addButton(QObject::tr("Yes"), this, SLOT(Save()))->setFocus();
-    addButton(QObject::tr("No"),  this, SLOT(Cancel()));
+    addButton(QObject::tr("No"),  this, SLOT(reject()));
 }
 
 //////////////////////////////////////////////////////////////////////
@@ -160,5 +160,5 @@
     addLabel(tr("Confirm"), Large, false);
     addLabel(msg);
     addButton(tr("Confirm"),         this, SLOT(Confirm()))->setFocus();
-    addButton(QObject::tr("Cancel"), this, SLOT(Cancel()));
+    addButton(QObject::tr("Cancel"), this, SLOT(reject()));
 }
Index: mythplugins/mythvideo/mythvideo/videotree.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/videotree.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/videotree.cpp	(working copy)
@@ -296,7 +296,7 @@
             {
                 if (m_imp->m_use_arrow_accel)
                 {
-                    done(1);
+                    accept();
                 }
                 else
                     handled = false;
@@ -522,7 +522,8 @@
                                               MythPopupBox::Small,true);
         plotLabel->setAlignment(Qt::AlignJustify | Qt::WordBreak);
 
-        QButton * okButton = plotbox->addButton(tr("Ok"));
+        QButton *okButton = plotbox->addButton(
+            tr("OK"), plotbox, SLOT(accept()));
         okButton->setFocus();
 
         plotbox->ExecPopup();
Index: mythplugins/mythvideo/mythvideo/videodlg.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/videodlg.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/videodlg.cpp	(working copy)
@@ -159,7 +159,8 @@
                                               MythPopupBox::Small,true);
         plotLabel->setAlignment(Qt::AlignJustify | Qt::WordBreak);
 
-        QButton * okButton = plotbox->addButton(tr("Ok"));
+        QButton *okButton = plotbox->addButton(
+            tr("OK"), plotbox, SLOT(accept()));
         okButton->setFocus();
 
         plotbox->ExecPopup();
Index: mythplugins/mythvideo/mythvideo/titledialog.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/titledialog.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/titledialog.cpp	(working copy)
@@ -440,7 +440,7 @@
             os << job_string << "\n" ;
         }
     }
-    done(0);
+    reject();
 }
 
 void TitleDialog::takeFocusAwayFromEditor(bool up_or_down)
Index: mythplugins/mythvideo/mythvideo/fileassoc.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/fileassoc.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/fileassoc.cpp	(working copy)
@@ -330,7 +330,7 @@
 void FileAssocDialog::saveAndExit()
 {
     saveFileAssociations();
-    done(0);
+    reject();
 }
 
 void FileAssocDialog::toggleDefault(bool yes_or_no)
Index: mythplugins/mythvideo/mythvideo/videoscan.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/videoscan.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/videoscan.cpp	(working copy)
@@ -110,20 +110,26 @@
     buttonText += QObject::tr("Yes");
     buttonText += QObject::tr("Yes to all");
 
-    int result = MythPopupBox::showButtonPopup(gContext->GetMainWindow(),
-            QObject::tr("File Missing"),
-            QString(QObject::tr("%1 appears to be missing.\nRemove it "
-                                "from the database?")).arg(filename),
-            buttonText, 1);
+    DialogCode result = MythPopupBox::ShowButtonPopup(
+        gContext->GetMainWindow(),
+        QObject::tr("File Missing"),
+        QObject::tr("%1 appears to be missing.\n"
+                    "Remove it from the database?").arg(filename),
+        buttonText, kDialogCodeButton0);
+
     switch (result)
     {
-        case 1:
+        case kDialogCodeRejected:
+        case kDialogCodeButton0:
+        default:
+            break;
+        case kDialogCodeButton1:
             m_KeepAll = true;
             break;
-        case 2:
+        case kDialogCodeButton2:
             m_dbmetadata->purgeByID(id);
             break;
-        case 3:
+        case kDialogCodeButton3:
             m_RemoveAll = true;
             m_dbmetadata->purgeByID(id);
             break;
Index: mythplugins/mythvideo/mythvideo/videofilter.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/videofilter.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/videofilter.cpp	(working copy)
@@ -671,7 +671,7 @@
 void VideoFilterDialog::saveAndExit()
 {
     m_fsp->setSettings(m_settings);
-    done(0);
+    reject();
 }
 
 void VideoFilterDialog::setYear(int new_year)
Index: mythplugins/mythvideo/mythvideo/editmetadata.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/editmetadata.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/editmetadata.cpp	(working copy)
@@ -367,7 +367,7 @@
     //  All done
     //
 
-    done(0);
+    reject();
 }
 
 void EditMetadataDialog::setTitle(QString new_title)
Index: mythplugins/mythvideo/mythvideo/parentalcontrols.cpp
===================================================================
--- mythplugins/mythvideo/mythvideo/parentalcontrols.cpp	(revision 14863)
+++ mythplugins/mythvideo/mythvideo/parentalcontrols.cpp	(working copy)
@@ -228,7 +228,7 @@
          ++p)
     {
         if (password == *p)
-            done(1);
+            accept();
     }
 }
 
@@ -363,7 +363,7 @@
             new MythMultiPasswordDialog(QObject::tr("Parental Pin:"),
                                         valid_passwords,
                                         gContext->GetMainWindow());
-    bool ok = pwd->exec();
+    bool ok = (kDialogCodeRejected != pwd->exec());
     delete pwd;
 
     if (ok)
Index: mythplugins/mythgame/mythgame/gamesettings.h
===================================================================
--- mythplugins/mythgame/mythgame/gamesettings.h	(revision 14863)
+++ mythplugins/mythgame/mythgame/gamesettings.h	(working copy)
@@ -121,7 +121,7 @@
     virtual MythDialog *dialogWidget(MythMainWindow *parent,
                                      const char     *widgetName=0);
 
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() { };
 
Index: mythplugins/mythgame/mythgame/gamehandler.cpp
===================================================================
--- mythplugins/mythgame/mythgame/gamehandler.cpp	(revision 14863)
+++ mythplugins/mythgame/mythgame/gamehandler.cpp	(working copy)
@@ -206,20 +206,26 @@
     buttonText += QObject::tr("Yes to all");
 
 
-    int result = MythPopupBox::showButtonPopup(gContext->GetMainWindow(), 
-                               QObject::tr("File Missing"),
-                               QString(QObject::tr("%1 appears to be missing.\nRemove it"
-                                                   " from the database?")).arg(filename),
-                                                    buttonText, 0 );
+    DialogCode result = MythPopupBox::ShowButtonPopup(
+        gContext->GetMainWindow(), 
+        QObject::tr("File Missing"),
+        QString(QObject::tr("%1 appears to be missing.\nRemove it"
+                            " from the database?")).arg(filename),
+        buttonText, kDialogCodeButton0);
+
     switch (result)
     {
-        case 1:
+        case kDialogCodeButton0:
+        case kDialogCodeRejected:
+        default:
+            break;
+        case kDialogCodeButton1:
             m_KeepAll = true;
             break;
-        case 2:
+        case kDialogCodeButton2:
             purgeGameDB(filename , RomPath);
             break;
-        case 3:
+        case kDialogCodeButton3:
             m_RemoveAll = true;
             purgeGameDB(filename , RomPath);
             break;
@@ -529,18 +535,22 @@
     buttonText += QObject::tr("No");
     buttonText += QObject::tr("Yes");
 
-    int result = MythPopupBox::showButtonPopup(gContext->GetMainWindow(),
-                               QObject::tr("Are you sure?"),
-                               QString(QObject::tr("This will clear all Game Meta Data\n"
-                                                   "from the database. Are you sure you\n"
-                                                   "want to do this?" )),
-                                                    buttonText, 0 );
+    DialogCode result = MythPopupBox::ShowButtonPopup(
+        gContext->GetMainWindow(),
+        QObject::tr("Are you sure?"),
+        QString(QObject::tr("This will clear all Game Meta Data\n"
+                            "from the database. Are you sure you\n"
+                            "want to do this?" )),
+        buttonText, kDialogCodeButton0);
+
     switch (result)
     {
-        case 0:
+        case kDialogCodeRejected:
+        case kDialogCodeButton0:
+        default:
             // Do Nothing
             break;
-        case 1:
+        case kDialogCodeButton1:
             MSqlQuery query(MSqlQuery::InitCon());
             QString thequery = "DELETE FROM gamemetadata;";
             query.exec(thequery);
Index: mythplugins/mythgame/mythgame/rominfo.cpp
===================================================================
--- mythplugins/mythgame/mythgame/rominfo.cpp	(revision 14863)
+++ mythplugins/mythgame/mythgame/rominfo.cpp	(working copy)
@@ -20,9 +20,13 @@
     QString rom_ver = Version();
 
     GameEditDialog romeditdlg(Romname().latin1());
-    int res = romeditdlg.exec();
 
-    if (res) {
+    DialogCode res = romeditdlg.exec();
+
+    if (kDialogCodeRejected == res)
+        return;
+
+    {
         MSqlQuery query(MSqlQuery::InitCon());
         QString thequery = QString("SELECT gamename,genre,year,country,publisher,favorite FROM gamemetadata "
                                        " WHERE gametype = '%1' AND romname = '%2'; ")
Index: mythplugins/mythgame/mythgame/gametree.cpp
===================================================================
--- mythplugins/mythgame/mythgame/gametree.cpp	(revision 14863)
+++ mythplugins/mythgame/mythgame/gametree.cpp	(working copy)
@@ -360,14 +360,20 @@
                 GameHandler::Launchgame(item->getRomInfo(),NULL);
             else if (item->getRomInfo()->RomCount() > 1)
             {
-                QStringList players = QStringList::split(",", item->getRomInfo()->AllSystems());
-                players += "Cancel";
+                QString all_systems = item->getRomInfo()->AllSystems();
+                QStringList players = QStringList::split(",", all_systems);
+                players += QObject::tr("Cancel");
 
-                int val = MythPopupBox::showButtonPopup(gContext->GetMainWindow(), "", tr("Players Available. \n\n Please pick one."), players,0);
+                DialogCode val = MythPopupBox::ShowButtonPopup(
+                    gContext->GetMainWindow(),
+                    "", tr("Players Available. \n\n Please pick one."),
+                    players, kDialogCodeButton0);
 
-                if (val != -1) {
-                    QString systemname = getElement(players,val);
-                    if ((systemname) && (systemname != "Cancel"))
+                int idx = MythDialog::CalcItemIndex(val);
+                if ((0 <= idx) && (idx < ((int)players.size() - 1)))
+                {
+                    QString systemname = getElement(players, idx);
+                    if (!systemname.isEmpty())
                         GameHandler::Launchgame(item->getRomInfo(),systemname);
                 }
             } 
Index: mythplugins/mythgame/mythgame/gamesettings.cpp
===================================================================
--- mythplugins/mythgame/mythgame/gamesettings.cpp	(revision 14863)
+++ mythplugins/mythgame/mythgame/gamesettings.cpp	(working copy)
@@ -251,11 +251,12 @@
     addChild(listbox);
 }
 
-int MythGamePlayerEditor::exec() {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+DialogCode MythGamePlayerEditor::exec(void)
+{
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         edit();
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void MythGamePlayerEditor::load(void)
@@ -284,14 +285,14 @@
     }
     else
     {   
-        int val = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                 "",
-                                                 tr("Game Player Menu"),
-                                                 tr("Edit.."),                                                                   tr("Delete.."), 1);
-
-        if (val == 0)
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
+            gContext->GetMainWindow(),
+            "", tr("Game Player Menu"),
+            tr("Edit.."), tr("Delete.."), kDialogCodeButton1);
+        
+        if (kDialogCodeButton0 == val)
             edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             del();
     }
 }
@@ -309,13 +310,14 @@
 
 void MythGamePlayerEditor::del(void)
 {
-    int val = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(), "",
-                                          tr("Are you sure you want to delete "
-                                             "this item?"),
-                                             tr("Yes, delete It"),
-                                             tr("No, don't"), 2);
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(), "",
+        tr("Are you sure you want to delete "
+           "this item?"),
+        tr("Yes, delete It"),
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM gameplayers "
Index: mythplugins/mythphone/mythphone/phoneui.cpp
===================================================================
--- mythplugins/mythphone/mythphone/phoneui.cpp	(revision 14863)
+++ mythplugins/mythphone/mythphone/phoneui.cpp	(working copy)
@@ -617,19 +617,23 @@
 {
     if ((!loopbackMode) && (rtpAudio == 0) && (rtpVideo == 0))
     {
-        int loop = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(), "AskLoopback", "Loopback Audio and video at ...", "Socket on this machine", "NAT Device", 1);
+        DialogCode loop = MythPopupBox::Show2ButtonPopup(
+            gContext->GetMainWindow(),
+            "AskLoopback", tr("Loopback Audio and video at ..."),
+            tr("Socket on this machine"), tr("NAT Device"),
+            kDialogCodeButton0);
         QString loopIp;
         switch (loop)
         {
-        default:
-        case -1:
-            return;
-        case 0:
-            loopIp = sipStack->getLocalIpAddress();
-            break;
-        case 1:
-            loopIp = sipStack->getNatIpAddress();
-            break;
+            default:
+            case kDialogCodeRejected:
+                return;
+            case kDialogCodeButton0:
+                loopIp = sipStack->getLocalIpAddress();
+                break;
+            case kDialogCodeButton1:
+                loopIp = sipStack->getNatIpAddress();
+                break;
         }
         phoneUIStatusBar->DisplayCallState(QString(tr("Audio and Video Looped to ") + loopIp));
         int lvPort = atoi((const char *)gContext->GetSetting("VideoLocalPort"));
Index: mythplugins/mythzoneminder/mythzoneminder/zmevents.cpp
===================================================================
--- mythplugins/mythzoneminder/mythzoneminder/zmevents.cpp	(revision 14863)
+++ mythplugins/mythzoneminder/mythzoneminder/zmevents.cpp	(working copy)
@@ -611,14 +611,14 @@
 
     popup->addButton(tr("Delete All"));
 
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
     switch (res)
     {
-        case 0:
+        case kDialogCodeButton0:
             // refresh event list;
                 getEventList();
             break;
-        case 1:
+        case kDialogCodeButton1:
             if (getContext() == 1)
             {
                 // switch to grid view;
@@ -630,7 +630,7 @@
                 setView(false);
             }
             break;
-        case 2:
+        case kDialogCodeButton2:
             //delete all events
             if (class ZMClient *zm = ZMClient::get())
             {
@@ -649,6 +649,9 @@
                 delete busy;
             }
             break;
+        case kDialogCodeRejected:
+        default:
+            break;
     }
 
     delete popup;
Index: mythplugins/mythzoneminder/mythzoneminder/zmliveplayer.cpp
===================================================================
--- mythplugins/mythzoneminder/mythzoneminder/zmliveplayer.cpp	(revision 14863)
+++ mythplugins/mythzoneminder/mythzoneminder/zmliveplayer.cpp	(working copy)
@@ -74,7 +74,7 @@
     {
         MythPopupBox::showOkPopup(gContext->GetMainWindow(), "No monitors",
                                   tr("Cannot find any monitors. Bailing out!"));
-        done(0);
+        reject();
         return;
     }
 
Index: mythplugins/mythnews/mythnews/mythnews.cpp
===================================================================
--- mythplugins/mythnews/mythnews/mythnews.cpp	(revision 14863)
+++ mythplugins/mythnews/mythnews/mythnews.cpp	(working copy)
@@ -1038,8 +1038,8 @@
 
     popup->addLayout(vbox, 0);
 
-    popup->addButton(tr("OK"));
-    popup->addButton(tr("Cancel"));
+    popup->addButton(tr("OK"),     popup, SLOT(accept()));
+    popup->addButton(tr("Cancel"), popup, SLOT(reject()));
 
     QString siteName = "";
     if (edit)
@@ -1058,9 +1058,9 @@
         }
     }
 
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
 
-    if (res == 0)
+    if (kDialogCodeAccepted == res)
     {
         if (edit && siteName != "")
             removeFromDB(siteName);
@@ -1070,7 +1070,7 @@
 
     delete popup;
 
-    return (res == 0);
+    return (kDialogCodeAccepted == res);
 }
 
 void MythNews::showMenu()
Index: mythtv/libs/libmythtv/channeleditor.cpp
===================================================================
--- mythtv/libs/libmythtv/channeleditor.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/channeleditor.cpp	(working copy)
@@ -326,13 +326,12 @@
          tr("Are you sure you would like to delete the channels on %1?")
          .arg(currentLabel));
 
-    int val = MythPopupBox::show2ButtonPopup(
-        gContext->GetMainWindow(), "",
-        chan_msg,
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(), "", chan_msg,
         tr("Yes, delete the channels"),
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val != 0) 
+    if (kDialogCodeButton0 != val)
         return;
 
     MSqlQuery query(MSqlQuery::InitCon());
@@ -389,10 +388,10 @@
     return dialog;
 }
 
-int ChannelEditor::exec()
+DialogCode ChannelEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)  {}
-    return QDialog::Rejected;
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)  {}
+    return kDialogCodeRejected;
 }
 
 void ChannelEditor::edit()
@@ -414,13 +413,13 @@
 {
     id = list->getValue().toInt();
 
-    int val = MythPopupBox::show2ButtonPopup(
-        gContext->GetMainWindow(), "",
-        tr("Are you sure you would like to delete this channel?"),
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(),
+        "", tr("Are you sure you would like to delete this channel?"),
         tr("Yes, delete the channel"),
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 0) 
+    if (kDialogCodeButton0 == val)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM channel WHERE chanid = :CHID ;");
@@ -439,15 +438,14 @@
        edit();
     else
     {
-        int val = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                 "",
-                                                 tr("Channel Menu"),
-                                                 tr("Edit.."),
-                                                 tr("Delete.."), 1);
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
+            gContext->GetMainWindow(),
+            "", tr("Channel Menu"),
+            tr("Edit.."), tr("Delete.."), kDialogCodeButton0);
 
-        if (val == 0)
+        if (kDialogCodeButton0 == val)
             emit edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             emit del();
         else
             list->setFocus();
Index: mythtv/libs/libmythtv/customedit.cpp
===================================================================
--- mythtv/libs/libmythtv/customedit.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/customedit.cpp	(working copy)
@@ -570,7 +570,7 @@
     msg += m_description->text();
 
     DialogBox *storediag = new DialogBox(gContext->GetMainWindow(), msg);
-    int button = 1, sebtn = -1, exbtn = -1, deletebtn = -1, cancelbtn = -1;
+    int button = 0, sebtn = -1, exbtn = -1, deletebtn = -1, cancelbtn = -1;
 
     QString action = QObject::tr("Store");
     if (nameExists)
@@ -600,7 +600,8 @@
     storediag->AddButton(QObject::tr("Cancel"));
     cancelbtn = button++;
 
-    int ret = storediag->exec();
+    DialogCode code = storediag->exec();
+    int ret = MythDialog::CalcItemIndex(code);
     delete storediag;
 
     if (ret == sebtn || ret == exbtn)
Index: mythtv/libs/libmythtv/progdetails.h
===================================================================
--- mythtv/libs/libmythtv/progdetails.h	(revision 14863)
+++ mythtv/libs/libmythtv/progdetails.h	(working copy)
@@ -21,7 +21,6 @@
 
   protected slots:
     virtual void keyPressEvent(QKeyEvent *e);
-    void done(void);
 
   private:
     void wireUpTheme(void);
Index: mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- mythtv/libs/libmythtv/NuppelVideoPlayer.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -3146,7 +3146,7 @@
          !gContext->GetNumSetting("PVR350InternalAudioOnly")))
     {
         QString errMsg = ReinitAudio();
-        int ret = 1;
+        DialogCode ret = kDialogCodeButton0;
         if ((errMsg != QString::null) && !using_null_videoout &&
             gContext->GetNumSetting("AudioNag", 1))
         {
@@ -3169,11 +3169,11 @@
             qApp->unlock();
         }
             
-        if (ret == 2)
+        if (kDialogCodeButton1 == ret)
             gContext->SaveSetting("AudioNag", 0);
-        if (ret == 3)
+        if (kDialogCodeButton2 == ret)
             gContext->SetSetting("AudioNag", 0);
-        else if (ret == 4)
+        else if ((kDialogCodeButton3 == ret) || (kDialogCodeRejected == ret))
             return;
     }
 
Index: mythtv/libs/libmythtv/previouslist.cpp
===================================================================
--- mythtv/libs/libmythtv/previouslist.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/previouslist.cpp	(working copy)
@@ -330,7 +330,7 @@
 
     int view = chooseListBox->currentItem();
 
-    choosePopup->done(0);
+    choosePopup->AcceptItem(view);
 
     if (view == curView)
         return;
@@ -706,7 +706,7 @@
                              "delete any recordings.");
     
     DialogBox diag(gContext->GetMainWindow(), message);
-    int button = 1, ok = -1, cleardup = -1, setdup = -1, rm_episode = -1,
+    int button = 0, ok = -1, cleardup = -1, setdup = -1, rm_episode = -1,
         rm_title = -1;
     // int rm_generics = -1;
 
@@ -732,7 +732,8 @@
     // diag.AddButton(tr("Remove all that cannot be used for duplicate matching"));
     // rm_generics = button++;
 
-    int ret = diag.exec();
+    DialogCode code = diag.exec();
+    int ret = MythDialog::CalcItemIndex(code);
 
     if (ret == rm_episode)
     {
Index: mythtv/libs/libmythtv/proglist.h
===================================================================
--- mythtv/libs/libmythtv/proglist.h	(revision 14863)
+++ mythtv/libs/libmythtv/proglist.h	(working copy)
@@ -40,7 +40,7 @@
     void cursorUp(bool page = false);
     void prevView(void);
     void nextView(void);
-    void setViewFromList(void);
+    void setViewFromList(int);
     void chooseEditChanged(void);
     void chooseListBoxChanged(void);
     void setViewFromEdit(void);
Index: mythtv/libs/libmythtv/playgroup.cpp
===================================================================
--- mythtv/libs/libmythtv/playgroup.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/playgroup.cpp	(working copy)
@@ -262,12 +262,13 @@
     QString message = tr("Delete playback group:") +
         QString("\n'%1'?").arg(name);
 
-    int value = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                               "", message,
-                                               tr("Yes, delete group"),
-                                               tr("No, Don't delete group"), 2);
+    DialogCode value = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(),
+        "", message,
+        tr("Yes, delete group"),
+        tr("No, Don't delete group"), kDialogCodeButton1);
 
-    if (value == 0)
+    if (kDialogCodeButton0 == value)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM playgroup WHERE name = :NAME;");
@@ -302,12 +303,12 @@
     listbox->setValue(lastValue);
 }
 
-int PlayGroupEditor::exec(void)
+DialogCode PlayGroupEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         open(listbox->getValue());
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 MythDialog* PlayGroupEditor::dialogWidget(MythMainWindow* parent,
Index: mythtv/libs/libmythtv/videosource.h
===================================================================
--- mythtv/libs/libmythtv/videosource.h	(revision 14863)
+++ mythtv/libs/libmythtv/videosource.h	(working copy)
@@ -542,7 +542,7 @@
 
     virtual MythDialog* dialogWidget(MythMainWindow* parent,
                                      const char* widgetName=0);
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() { };
 
@@ -568,7 +568,7 @@
     bool cardTypesInclude(const int& SourceID, 
                           const QString& thecardtype);
 
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() { };
 
@@ -588,7 +588,7 @@
   public:
     CardInputEditor();
 
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() { };
 
Index: mythtv/libs/libmythtv/proglist.cpp
===================================================================
--- mythtv/libs/libmythtv/proglist.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/proglist.cpp	(working copy)
@@ -391,13 +391,13 @@
     refillAll = true;
 }
 
-void ProgLister::setViewFromList(void)
+void ProgLister::setViewFromList(int item)
 {
+    int view = item;
+
     if (!choosePopup || (!chooseListBox && !chooseEditButton))
         return;
 
-    int view = chooseListBox->currentItem();
-
     if (type == plTitleSearch || type == plKeywordSearch || 
         type == plPeopleSearch)
     {
@@ -420,7 +420,7 @@
         }
     }
 
-    choosePopup->done(0);
+    choosePopup->AcceptItem(item);
 
     if (view == curView)
         return;
@@ -511,7 +511,7 @@
 
     updateKeywordInDB(text);
   
-    choosePopup->done(0);
+    choosePopup->accept();
 
     fillViewList(text);
 
@@ -543,7 +543,7 @@
 
     updateKeywordInDB(text);
 
-    powerPopup->done(0);
+    powerPopup->accept();
 
     fillViewList(text);
 
@@ -670,7 +670,7 @@
     viewList[curView] = searchTime.toString(fullDateFormat);
     viewTextList[curView] = viewList[curView];
 
-    choosePopup->done(0);
+    choosePopup->accept();
 
     curItem = -1;
     refillAll = true;
@@ -710,7 +710,8 @@
             chooseListBox->setCurrentItem(curView);
         choosePopup->addWidget(chooseListBox);
 
-        connect(chooseListBox, SIGNAL(accepted(int)), this, SLOT(setViewFromList()));
+        connect(chooseListBox, SIGNAL(accepted(int)),
+                this,          SLOT(setViewFromList(int)));
 
         chooseListBox->setFocus();
         choosePopup->ExecPopup();
@@ -765,7 +766,8 @@
         chooseRecordButton->setEnabled(chooseLineEdit->text()
                                        .stripWhiteSpace().length() > 0);
 
-        connect(chooseListBox, SIGNAL(accepted(int)), this, SLOT(setViewFromList()));
+        connect(chooseListBox, SIGNAL(accepted(int)),
+                this,          SLOT(setViewFromList(int)));
         connect(chooseListBox, SIGNAL(menuButtonPressed(int)), chooseLineEdit, SLOT(setFocus()));
         connect(chooseListBox, SIGNAL(selectionChanged()), this, SLOT(chooseListBoxChanged()));
         connect(chooseLineEdit, SIGNAL(textChanged()), this, SLOT(chooseEditChanged()));
@@ -831,8 +833,8 @@
         chooseDeleteButton->setEnabled(curView >= 0);
         chooseRecordButton->setEnabled(curView >= 0);
 
-        connect(chooseListBox, SIGNAL(accepted(int)), this,
-                               SLOT(setViewFromList()));
+        connect(chooseListBox, SIGNAL(accepted(int)),
+                this,          SLOT(setViewFromList(int)));
         connect(chooseListBox, SIGNAL(menuButtonPressed(int)),chooseEditButton,
                                SLOT(setFocus()));
         connect(chooseListBox, SIGNAL(selectionChanged()), this,
@@ -1028,7 +1030,7 @@
     powerDescEdit->setText(field[2]);
 
     powerTitleEdit->setFocus();
-    choosePopup->done(0);
+    choosePopup->accept();
     powerPopup->ExecPopup();
 
     powerTitleEdit    = NULL; // deleted by popup delete
Index: mythtv/libs/libmythtv/playgroup.h
===================================================================
--- mythtv/libs/libmythtv/playgroup.h	(revision 14863)
+++ mythtv/libs/libmythtv/playgroup.h	(working copy)
@@ -29,7 +29,7 @@
 
   public:
     PlayGroupEditor(void);
-    virtual int exec(void);
+    virtual DialogCode exec(void);
     virtual void load(void);
     virtual void save(void) { };
     virtual void save(QString) { };
Index: mythtv/libs/libmythtv/scanwizardhelpers.h
===================================================================
--- mythtv/libs/libmythtv/scanwizardhelpers.h	(revision 14863)
+++ mythtv/libs/libmythtv/scanwizardhelpers.h	(working copy)
@@ -65,7 +65,7 @@
   public:
     ScanProgressPopup(bool lock, bool strength, bool snr);
 
-    virtual int exec(void);
+    virtual DialogCode exec(void);
 
     void SetStatusSignalToNoise(int value);
     void SetStatusSignalStrength(int value);
Index: mythtv/libs/libmythtv/progdetails.cpp
===================================================================
--- mythtv/libs/libmythtv/progdetails.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/progdetails.cpp	(working copy)
@@ -94,7 +94,7 @@
             QString action = actions[i];
             handled = true;
             if (action == "ESCAPE" || action == "SELECT")
-                done();
+                reject();
             else if (action == "UP")
             {
                 if (getCurrentFocusWidget() == m_richText)
@@ -144,15 +144,10 @@
     if (m_okButton)
     {
         m_okButton->setText(tr("OK"));
-        connect(m_okButton, SIGNAL(pushed()), this, SLOT(done()));
+        connect(m_okButton, SIGNAL(pushed()), this, SLOT(accept()));
     }
 
     m_richText = getUIRichTextType("richtext");
 
     buildFocusList();
 }
-
-void ProgDetails::done()
-{
-    MythDialog::done(0);
-}
Index: mythtv/libs/libmythtv/scanwizardscanner.cpp
===================================================================
--- mythtv/libs/libmythtv/scanwizardscanner.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/scanwizardscanner.cpp	(working copy)
@@ -634,7 +634,7 @@
 
 void ScanWizardScanner::RunPopup(void)
 {
-    int ret = popupProgress->exec();
+    DialogCode ret = popupProgress->exec();
 
     popupLock.lock();
     popupProgress->deleteLater();
Index: mythtv/libs/libmythtv/profilegroup.h
===================================================================
--- mythtv/libs/libmythtv/profilegroup.h	(revision 14863)
+++ mythtv/libs/libmythtv/profilegroup.h	(working copy)
@@ -119,7 +119,7 @@
         listbox(new ListBoxSetting(this)), dialog(NULL), redraw(true)
         { addChild(listbox); }
 
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() {};
 
Index: mythtv/libs/libmythtv/channeleditor.h
===================================================================
--- mythtv/libs/libmythtv/channeleditor.h	(revision 14863)
+++ mythtv/libs/libmythtv/channeleditor.h	(working copy)
@@ -12,7 +12,7 @@
     Q_OBJECT
 public:
     ChannelEditor();
-    virtual int exec();
+    virtual DialogCode exec(void);
 
     MythDialog* dialogWidget(MythMainWindow *parent, const char* name);
 
Index: mythtv/libs/libmythtv/scheduledrecording.h
===================================================================
--- mythtv/libs/libmythtv/scheduledrecording.h	(revision 14863)
+++ mythtv/libs/libmythtv/scheduledrecording.h	(working copy)
@@ -111,7 +111,7 @@
     virtual void modifyPowerSearchByID(int rid, QString textname,
                                        QString from, QString forwhat);
 
-    virtual int exec(bool saveOnExec = true, bool doLoad = false);
+    virtual DialogCode exec(bool saveOnExec = true, bool doLoad = false);
         
     void remove();
     int getRecordID(void) const { return id->intValue(); };
@@ -275,7 +275,7 @@
     ScheduledRecordingEditor() : listbox(new ListBoxSetting(this))
         { addChild(listbox); }
 
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() { };
 
Index: mythtv/libs/libmythtv/recordingprofile.h
===================================================================
--- mythtv/libs/libmythtv/recordingprofile.h	(revision 14863)
+++ mythtv/libs/libmythtv/recordingprofile.h	(working copy)
@@ -85,7 +85,7 @@
     virtual void loadByID(int id);
     virtual bool loadByType(QString name, QString cardtype);
     virtual bool loadByGroup(QString name, QString group);
-    virtual int exec();
+    virtual DialogCode exec(void);
 
     // sets
     void setCodecTypes();
@@ -135,7 +135,7 @@
   public:
     RecordingProfileEditor(int id, QString profName);
 
-    virtual int exec();
+    virtual DialogCode exec(void);
     virtual void load();
     virtual void save() { };
     virtual void save(QString /*destination*/) { }
Index: mythtv/libs/libmythtv/tv_play.cpp
===================================================================
--- mythtv/libs/libmythtv/tv_play.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/tv_play.cpp	(working copy)
@@ -145,15 +145,17 @@
                         recTitles.append(buttonTitle);
                         it++;
                     }
-                    int ret = MythPopupBox::showButtonPopup(
-                                    gContext->GetMainWindow(),
-                                    "",
-                                    tr("All Tuners are Busy.\n"
-                                       "Select a Current Recording"),
-                                    recTitles, 1);
-                    if ((0 < ret) && (ret <= (int)reclist->size()))
+                    DialogCode ret = MythPopupBox::ShowButtonPopup(
+                        gContext->GetMainWindow(),
+                        "",
+                        tr("All Tuners are Busy.\n"
+                           "Select a Current Recording"),
+                        recTitles, kDialogCodeButton1);
+
+                    int idx = MythDialog::CalcItemIndex(ret) - 1;
+                    if ((0 <= idx) && (idx < (int)reclist->size()))
                     {
-                        p = reclist->at(ret - 1);
+                        p = reclist->at(idx);
                         curProgram = new ProgramInfo(*p);
                     }
                     else
Index: mythtv/libs/libmythtv/storagegroup.cpp
===================================================================
--- mythtv/libs/libmythtv/storagegroup.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/storagegroup.cpp	(working copy)
@@ -418,12 +418,13 @@
     QString message =
         tr("Remove '%1'\nDirectory From Storage Group?").arg(name);
 
-    int value =
-        MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(), "", message,
-                                       tr("Yes, remove directory"),
-                                       tr("No, Don't remove directory"), 2);
+    DialogCode value = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(), "", message,
+        tr("Yes, remove directory"),
+        tr("No, Don't remove directory"),
+        kDialogCodeButton1);
 
-    if (value == 0)
+    if (kDialogCodeButton0 == value)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM storagegroup "
@@ -476,11 +477,12 @@
     listbox->setValue(lastValue);
 }
 
-int StorageGroupEditor::exec() {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+DialogCode StorageGroupEditor::exec(void)
+{
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         open(listbox->getValue());
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 MythDialog* StorageGroupEditor::dialogWidget(MythMainWindow* parent,
@@ -557,12 +559,13 @@
 
     QString message = tr("Delete '%1' Storage Group?").arg(dispGroup);
 
-    int value = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                               "", message,
-                                               tr("Yes, delete group"),
-                                               tr("No, Don't delete group"), 2);
+    DialogCode value = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(),
+        "", message,
+        tr("Yes, delete group"),
+        tr("No, Don't delete group"), kDialogCodeButton1);
 
-    if (value == 0)
+    if (kDialogCodeButton0 == value)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM storagegroup "
@@ -673,11 +676,12 @@
     listbox->setValue(lastValue);
 }
 
-int StorageGroupListEditor::exec() {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+DialogCode StorageGroupListEditor::exec(void)
+{
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         open(listbox->getValue());
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 MythDialog* StorageGroupListEditor::dialogWidget(MythMainWindow* parent,
Index: mythtv/libs/libmythtv/videosource.cpp
===================================================================
--- mythtv/libs/libmythtv/videosource.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/videosource.cpp	(working copy)
@@ -2009,12 +2009,12 @@
     addChild(listbox);
 }
 
-int CaptureCardEditor::exec(void)
+DialogCode CaptureCardEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         edit();
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void CaptureCardEditor::load(void)
@@ -2046,17 +2046,17 @@
     } 
     else 
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(),
             "",
             tr("Capture Card Menu"),
             tr("Edit.."),
             tr("Delete.."),
-            1);
+            kDialogCodeButton0);
 
-        if (val == 0)
+        if (kDialogCodeButton0 == val)
             edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             del();
     }
 }
@@ -2066,14 +2066,14 @@
     const int cardid = listbox->getValue().toInt();
     if (-1 == cardid)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), "",
             tr("Are you sure you want to delete "
                "ALL capture cards on %1?").arg(gContext->GetHostName()),
             tr("Yes, delete capture cards"),
-            tr("No, don't"), 2);
+            tr("No, don't"), kDialogCodeButton1);
 
-        if (0 == val)
+        if (kDialogCodeButton0 == val)
         {
             MSqlQuery cards(MSqlQuery::InitCon());
 
@@ -2102,14 +2102,14 @@
     }
     else if (-2 == cardid)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), "",
             tr("Are you sure you want to delete "
                "ALL capture cards?"),
             tr("Yes, delete capture cards"),
-            tr("No, don't"), 2);
+            tr("No, don't"), kDialogCodeButton1);
 
-        if (0 == val)
+        if (kDialogCodeButton0 == val)
         {
             MSqlQuery query(MSqlQuery::InitCon());
             query.exec("TRUNCATE TABLE capturecard;");
@@ -2128,13 +2128,13 @@
 
 void CaptureCardEditor::del(void)
 {
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), "",
         tr("Are you sure you want to delete this capture card?"),
         tr("Yes, delete capture card"),
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
     {
         CardUtil::DeleteCard(listbox->getValue().toUInt());
         load();
@@ -2157,11 +2157,12 @@
     return dialog;
 }
 
-int VideoSourceEditor::exec() {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+DialogCode VideoSourceEditor::exec(void)
+{
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         edit();
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void VideoSourceEditor::load(void)
@@ -2181,17 +2182,17 @@
     } 
     else 
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(),
             "",
             tr("Video Source Menu"),
             tr("Edit.."),
             tr("Delete.."),
-            1);
+            kDialogCodeButton0);
 
-        if (val == 0)
+        if (kDialogCodeButton0 == val)
             edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             del();
     }
 }
@@ -2201,14 +2202,14 @@
     const int sourceid = listbox->getValue().toInt();
     if (-1 == sourceid)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), "",
             tr("Are you sure you want to delete "
                "ALL video sources?"),
             tr("Yes, delete video sources"),
-            tr("No, don't"), 2);
+            tr("No, don't"), kDialogCodeButton1);
 
-        if (0 == val)
+        if (kDialogCodeButton0 == val)
         {
             MSqlQuery query(MSqlQuery::InitCon());
             query.exec("TRUNCATE TABLE channel;");
@@ -2233,15 +2234,15 @@
 
 void VideoSourceEditor::del() 
 {
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), "",
         tr("Are you sure you want to delete "
            "this video source?"),
         tr("Yes, delete video source"),
         tr("No, don't"),
-        2);
+        kDialogCodeButton1);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
     {
         MSqlQuery query(MSqlQuery::InitCon());
 
@@ -2285,12 +2286,12 @@
     addChild(listbox);
 }
 
-int CardInputEditor::exec(void)
+DialogCode CardInputEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         cardinputs[listbox->getValue().toInt()]->exec();
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void CardInputEditor::load() 
Index: mythtv/libs/libmythtv/diseqcsettings.cpp
===================================================================
--- mythtv/libs/libmythtv/diseqcsettings.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/diseqcsettings.cpp	(working copy)
@@ -461,10 +461,10 @@
         addChild(new RotorPosMap(rotor));
     }
 
-    virtual int exec(void)
+    virtual DialogCode exec(void)
     {
-        while (ConfigurationDialog::exec() == QDialog::Accepted);
-        return QDialog::Rejected;
+        while (ConfigurationDialog::exec() == kDialogCodeAccepted);
+        return kDialogCodeRejected;
     }
 };
 
@@ -944,16 +944,16 @@
 
     popup->addWidget(list);
     connect(list,  SIGNAL(accepted(int)),
-            popup, SLOT(  done(    int)));
+            popup, SLOT(  AcceptItem(int)));
     list->setFocus();
 
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
     type = (DiSEqCDevDevice::dvbdev_t)list->currentItem();
 
     popup->hide();
     popup->deleteLater();
 
-    return res >= 0;
+    return kDialogCodeRejected != res;
 }
 
 void DeviceTree::CreateRootNodeDialog(void)
@@ -1084,10 +1084,10 @@
     addChild(new DeviceTree(tree));
 }
 
-int DTVDeviceTreeWizard::exec(void)
+DialogCode DTVDeviceTreeWizard::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted);
-    return QDialog::Rejected;
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted);
+    return kDialogCodeRejected;
 }
 
 //////////////////////////////////////// SwitchSetting
Index: mythtv/libs/libmythtv/profilegroup.cpp
===================================================================
--- mythtv/libs/libmythtv/profilegroup.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/profilegroup.cpp	(working copy)
@@ -244,9 +244,9 @@
     listbox->addSelection(QObject::tr("(Create new profile group)"), "0");
 }
 
-int ProfileGroupEditor::exec() 
+DialogCode ProfileGroupEditor::exec(void)
 {
-    int ret = QDialog::Accepted;
+    DialogCode ret = kDialogCodeAccepted;
     redraw = true;
 
     while ((QDialog::Accepted == ret) || redraw)
@@ -278,7 +278,7 @@
             open(listbox->getValue().toInt());
     }
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void ProfileGroupEditor::callDelete(void)
@@ -296,12 +296,13 @@
         QString message = QObject::tr("Delete profile group:") + 
                           QString("\n'%1'?").arg(ProfileGroup::getName(id));
 
-        int value = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                   "", message, 
-                                     QObject::tr("Yes, delete group"),
-                                     QObject::tr("No, Don't delete group"), 2);
+        DialogCode value = MythPopupBox::Show2ButtonPopup(
+            gContext->GetMainWindow(),
+            "", message, 
+            QObject::tr("Yes, delete group"),
+            QObject::tr("No, Don't delete group"), kDialogCodeButton1);
 
-        if (value == 0)
+        if (kDialogCodeButton0 == value)
         {
             querystr = QString("DELETE codecparams FROM codecparams, "
                             "recordingprofiles WHERE " 
Index: mythtv/libs/libmythtv/transporteditor.h
===================================================================
--- mythtv/libs/libmythtv/transporteditor.h	(revision 14863)
+++ mythtv/libs/libmythtv/transporteditor.h	(working copy)
@@ -74,7 +74,7 @@
   public:
     TransportListEditor(uint initial_sourceid);
 
-    virtual int exec(void);
+    virtual DialogCode exec(void);
 
   public slots:
     void Menu(void);
Index: mythtv/libs/libmythtv/programinfo.cpp
===================================================================
--- mythtv/libs/libmythtv/programinfo.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/programinfo.cpp	(working copy)
@@ -4168,7 +4168,7 @@
     message += RecStatusDesc();
 
     DialogBox diag(gContext->GetMainWindow(), message);
-    int button = 1, ok = -1, react = -1, stop = -1, addov = -1, forget = -1,
+    int button = 0, ok = -1, react = -1, stop = -1, addov = -1, forget = -1,
         clearov = -1, edend = -1, ednorm = -1, edcust = -1;
 
     diag.AddButton(QObject::tr("OK"));
@@ -4248,7 +4248,8 @@
         }
     }
 
-    int ret = diag.exec();
+    DialogCode code = diag.exec();
+    int ret = MythDialog::CalcItemIndex(code);
 
     if (ret == react)
         ReactivateRecording();
@@ -4336,7 +4337,7 @@
     }
 
     DialogBox diag(gContext->GetMainWindow(), message);
-    int button = 1, ok = -1, react = -1, addov = -1, clearov = -1,
+    int button = 0, ok = -1, react = -1, addov = -1, clearov = -1,
         ednorm = -1, edcust = -1, forget = -1, addov1 = -1, forget1 = -1;
 
     diag.AddButton(QObject::tr("OK"));
@@ -4422,7 +4423,8 @@
         }
     }
 
-    int ret = diag.exec();
+    DialogCode code = diag.exec();
+    int ret = MythDialog::CalcItemIndex(code);
 
     if (ret == react)
         ReactivateRecording();
Index: mythtv/libs/libmythtv/scheduledrecording.cpp
===================================================================
--- mythtv/libs/libmythtv/scheduledrecording.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/scheduledrecording.cpp	(working copy)
@@ -721,12 +721,12 @@
 }
 
 
-int ScheduledRecordingEditor::exec(void) 
+DialogCode ScheduledRecordingEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         open(listbox->getValue().toInt());
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void ScheduledRecordingEditor::open(int id) {
@@ -743,7 +743,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-int ScheduledRecording::exec(bool saveOnExec, bool doLoad)
+DialogCode ScheduledRecording::exec(bool saveOnExec, bool doLoad)
 {
     if (!dialog)
         dialog = new ScheduledRecordingDialog(this);
Index: mythtv/libs/libmythtv/recordingprofile.cpp
===================================================================
--- mythtv/libs/libmythtv/recordingprofile.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/recordingprofile.cpp	(working copy)
@@ -1319,7 +1319,7 @@
         audioSettings->selectCodecs(groupType());
 }
 
-int RecordingProfile::exec(void)
+DialogCode RecordingProfile::exec(void)
 {
     MythDialog *dialog = dialogWidget(
         gContext->GetMainWindow(), "Recording Profile");
@@ -1333,7 +1333,7 @@
     if (tr_filters)
         FiltersChanged(tr_filters->getValue());
     
-    int ret = dialog->exec();
+    DialogCode ret = dialog->exec();
 
     dialog->deleteLater();
 
@@ -1414,12 +1414,12 @@
     RecordingProfile::fillSelections(listbox, group);
 }
 
-int RecordingProfileEditor::exec(void)
+DialogCode RecordingProfileEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted)
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted)
         open(listbox->getValue().toInt());
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void RecordingProfile::fillSelections(SelectSetting *setting, int group,
Index: mythtv/libs/libmythtv/transporteditor.cpp
===================================================================
--- mythtv/libs/libmythtv/transporteditor.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/transporteditor.cpp	(working copy)
@@ -288,11 +288,11 @@
     connect(m_list, SIGNAL(deleteButtonPressed(int)), this, SLOT(Delete()));
 }
 
-int TransportListEditor::exec(void)
+DialogCode TransportListEditor::exec(void)
 {
-    while (ConfigurationDialog::exec() == QDialog::Accepted);
+    while (ConfigurationDialog::exec() == kDialogCodeAccepted);
 
-    return QDialog::Rejected;
+    return kDialogCodeRejected;
 }
 
 void TransportListEditor::Edit(void)
@@ -315,13 +315,13 @@
 {
     uint mplexid = m_list->getValue().toInt();
 
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), "", 
         tr("Are you sure you would like to delete this transport?"), 
         tr("Yes, delete the transport"), 
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 1)
+    if (kDialogCodeButton0 != val)
         return;
 
     MSqlQuery query(MSqlQuery::InitCon());
@@ -350,16 +350,16 @@
        return;
     }
 
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), 
         "", 
         tr("Transport Menu"), 
         tr("Edit.."), 
-        tr("Delete.."), 1);
+        tr("Delete.."), kDialogCodeButton0);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
         emit Edit();
-    else if (val == 1)
+    else if (kDialogCodeButton1 == val)
         emit Delete();
     else
         m_list->setFocus();
Index: mythtv/libs/libmythtv/storagegroup.h
===================================================================
--- mythtv/libs/libmythtv/storagegroup.h	(revision 14863)
+++ mythtv/libs/libmythtv/storagegroup.h	(working copy)
@@ -36,7 +36,7 @@
     Q_OBJECT
   public:
     StorageGroupEditor(QString group);
-    virtual int exec(void);
+    virtual DialogCode exec(void);
     virtual void load(void);
     virtual void save(void) { };
     virtual void save(QString) { };
@@ -59,7 +59,7 @@
     Q_OBJECT
   public:
     StorageGroupListEditor(void);
-    virtual int exec(void);
+    virtual DialogCode exec(void);
     virtual void load(void);
     virtual void save(void) { };
     virtual void save(QString) { };
Index: mythtv/libs/libmythtv/scanwizardhelpers.cpp
===================================================================
--- mythtv/libs/libmythtv/scanwizardhelpers.cpp	(revision 14863)
+++ mythtv/libs/libmythtv/scanwizardhelpers.cpp	(working copy)
@@ -165,7 +165,7 @@
     setLabel(msg);
 }
 
-int ScanProgressPopup::exec(void)
+DialogCode ScanProgressPopup::exec(void)
 {
     if (!dialog)
     {
@@ -173,7 +173,7 @@
             dialogWidget(gContext->GetMainWindow(),
                          "ConfigurationPopupDialog");
     }
-    dialog->setResult(0);
+    dialog->setResult(kDialogCodeRejected);
 
     done = false;
     dialog->ShowPopup(this, SLOT(PopupDone(int)));
Index: mythtv/libs/libmythtv/diseqcsettings.h
===================================================================
--- mythtv/libs/libmythtv/diseqcsettings.h	(revision 14863)
+++ mythtv/libs/libmythtv/diseqcsettings.h	(working copy)
@@ -130,7 +130,7 @@
   public:
     DTVDeviceTreeWizard(DiSEqCDevTree &tree);
 
-    virtual int exec(void);
+    virtual DialogCode exec(void);
 };
 
 class DTVDeviceConfigGroup : public VerticalConfigurationGroup
Index: mythtv/libs/libmyth/settings.cpp
===================================================================
--- mythtv/libs/libmyth/settings.cpp	(revision 14863)
+++ mythtv/libs/libmyth/settings.cpp	(working copy)
@@ -1488,7 +1488,7 @@
     return dialog;
 }
 
-int ConfigurationDialog::exec(bool saveOnAccept, bool doLoad) 
+DialogCode ConfigurationDialog::exec(bool saveOnAccept, bool doLoad) 
 {
     if (doLoad)
         load();
@@ -1498,7 +1498,7 @@
 
     dialog->Show();
 
-    int ret = dialog->exec();
+    DialogCode ret = dialog->exec();
 
     if ((QDialog::Accepted == ret) && saveOnAccept)
         save();
@@ -2086,7 +2086,7 @@
         label->setText(str);
 }
 
-int ConfigurationPopupDialog::exec(bool saveOnAccept)
+DialogCode ConfigurationPopupDialog::exec(bool saveOnAccept)
 {
     storage->load();
 
@@ -2094,7 +2094,7 @@
         dialogWidget(gContext->GetMainWindow(), "ConfigurationPopupDialog");
     dialog->ShowPopup(this);
 
-    int ret = dialog->exec();
+    DialogCode ret = dialog->exec();
 
     if ((QDialog::Accepted == ret) && saveOnAccept)
         storage->save();
Index: mythtv/libs/libmyth/mythdialogs.cpp
===================================================================
--- mythtv/libs/libmyth/mythdialogs.cpp	(revision 14863)
+++ mythtv/libs/libmyth/mythdialogs.cpp	(working copy)
@@ -40,10 +40,8 @@
 #include "mythdbcon.h"
 
 MythDialog::MythDialog(MythMainWindow *parent, const char *name, bool setsize)
-          : QFrame(parent, name)
+    : QFrame(parent, name), rescode(kDialogCodeAccepted)
 {
-    rescode = 0;
-
     if (!parent)
     {
         cerr << "Trying to create a dialog without a parent.\n";
@@ -114,18 +112,43 @@
     show();
 }
 
+void MythDialog::setResult(DialogCode r)
+{
+    if ((r < kDialogCodeRejected) ||
+        ((kDialogCodeAccepted < r) && (r < kDialogCodeListStart)))
+    {
+        VERBOSE(VB_IMPORTANT, "Programmer Error: MythDialog::setResult("
+                <<r<<") called with invalid DialogCode");
+    }
+
+    rescode = r;
+}
+
 void MythDialog::done(int r)
 {
     hide();
-    setResult(r);
+    setResult((DialogCode) r);
     close();
 }
 
 void MythDialog::AcceptItem(int i)
 {
-    done(ListStart + i);
+    if (i < 0)
+    {
+        VERBOSE(VB_IMPORTANT, "Programmer Error: MythDialog::AcceptItem("
+                <<i<<") called with negative index");
+        reject();
+        return;
+    }
+
+    done((DialogCode)((int)kDialogCodeListStart + (int)i));
 }
 
+int MythDialog::CalcItemIndex(DialogCode code)
+{
+    return (int)code - (int)kDialogCodeListStart;
+}
+
 void MythDialog::accept()
 {
     done(Accepted);
@@ -136,22 +159,22 @@
     done(Rejected);
 }
 
-int MythDialog::exec()
+DialogCode MythDialog::exec(void)
 {
     if (in_loop) 
     {
         qWarning("MythDialog::exec: Recursive call detected.");
-        return -1;
+        return kDialogCodeRejected;
     }
 
-    setResult(Rejected);
+    setResult(kDialogCodeRejected);
 
     Show();
 
     in_loop = TRUE;
     qApp->enter_loop();
 
-    int res = result();
+    DialogCode res = result();
 
     return res;
 }
@@ -464,6 +487,12 @@
         MythDialog::keyPressEvent(e);
 }
 
+void MythPopupBox::AcceptItem(int i)
+{
+    MythDialog::AcceptItem(i);
+    emit popupDone(rescode);
+}
+
 void MythPopupBox::accept(void)
 {
     MythDialog::done(MythDialog::Accepted);
@@ -476,21 +505,21 @@
     emit popupDone(MythDialog::Rejected);
 }
 
-int MythPopupBox::ExecPopup(QObject *target, const char *slot)
+DialogCode MythPopupBox::ExecPopup(QObject *target, const char *slot)
 {
     if (!target)
-        ShowPopup(this, SLOT(defaultExitHandler(int)));
+        ShowPopup(this, SLOT(done(int)));
     else
         ShowPopup(target, slot);
 
     return exec();
 }
 
-int MythPopupBox::ExecPopupAtXY(int destx, int desty,
-                            QObject *target, const char *slot)
+DialogCode MythPopupBox::ExecPopupAtXY(int destx, int desty,
+                                       QObject *target, const char *slot)
 {
     if (!target)
-        ShowPopupAtXY(destx, desty, this, SLOT(defaultExitHandler(int)));
+        ShowPopupAtXY(destx, desty, this, SLOT(done(int)));
     else
         ShowPopupAtXY(destx, desty, target, slot);
 
@@ -525,7 +554,7 @@
     }
     if (foundbutton)
     {
-        done(i);
+        AcceptItem(i);
         return;
     }
 
@@ -552,25 +581,20 @@
     }
     if (foundbutton)
     {
-        done(i);
+        AcceptItem(i);
         return;
     }
 
     VERBOSE(VB_IMPORTANT, "MythPopupBox::defaultButtonPressedHandler(void)"
             "\n\t\t\tWe should never get here!");
-    done(Rejected);
+    done(kDialogCodeRejected);
 }
 
-void MythPopupBox::defaultExitHandler(int r)
-{
-    done(r);
-}
-
-static int show_ok_popup(
+bool MythPopupBox::showOkPopup(
     MythMainWindow *parent,
     const QString  &title,
     const QString  &message,
-    QString         button_msg = QString::null)
+    QString         button_msg)
 {
     if (button_msg.isEmpty())
         button_msg = QObject::tr("OK");
@@ -580,7 +604,7 @@
     popup->addLabel(message, MythPopupBox::Medium, true);
     QButton *okButton = popup->addButton(button_msg, popup, SLOT(accept()));
     okButton->setFocus();
-    int ret = popup->ExecPopup();
+    bool ret = (kDialogCodeAccepted == popup->ExecPopup());
 
     popup->hide();
     popup->deleteLater();
@@ -588,18 +612,6 @@
     return ret;
 }
 
-void MythPopupBox::showOkPopup(MythMainWindow *parent, QString title,
-                               QString message)
-{
-    show_ok_popup(parent, title, message);
-}
-
-void MythPopupBox::showExitPopup(MythMainWindow *parent, QString title,
-                                 QString message)
-{
-    show_ok_popup(parent, title, message, tr("Exit"));
-}
-
 bool MythPopupBox::showOkCancelPopup(MythMainWindow *parent, QString title,
                                      QString message, bool focusOk)
 {
@@ -651,49 +663,27 @@
     return ok;
 }
 
-
-int MythPopupBox::show2ButtonPopup(MythMainWindow *parent, QString title,
-                                   QString message, QString button1msg,
-                                   QString button2msg, int defvalue)
+DialogCode MythPopupBox::ShowButtonPopup(
+    MythMainWindow    *parent,
+    const QString     &title,
+    const QString     &message,
+    const QStringList &buttonmsgs,
+    DialogCode         default_button)
 {
     MythPopupBox *popup = new MythPopupBox(parent, title);
 
     popup->addLabel(message, Medium, true);
     popup->addLabel("");
 
-    QButton *but1 = popup->addButton(button1msg);
-    QButton *but2 = popup->addButton(button2msg);
-
-    if (defvalue == 1)
-        but1->setFocus();
-    else
-        but2->setFocus();
-
-    int ret = popup->ExecPopup();
-
-    popup->hide();
-    popup->deleteLater();
-
-    return ret;
-}
-
-int MythPopupBox::showButtonPopup(MythMainWindow *parent, QString title,
-                                  QString message, QStringList buttonmsgs,
-                                  int defvalue)
-{
-    MythPopupBox *popup = new MythPopupBox(parent, title);
-
-    popup->addLabel(message, Medium, true);
-    popup->addLabel("");
-
+    const uint def = CalcItemIndex(default_button);
     for (unsigned int i = 0; i < buttonmsgs.size(); i++ )
     {
         QButton *but = popup->addButton(buttonmsgs[i]);
-        if (defvalue == (int)i)
+        if (def == i)
             but->setFocus();
     }
 
-    int ret = popup->ExecPopup();
+    DialogCode ret = popup->ExecPopup();
 
     popup->hide();
     popup->deleteLater();
@@ -881,7 +871,7 @@
             .arg(window_name).arg(theme_filename);
         MythPopupBox::showOkPopup(gContext->GetMainWindow(),
                                   tr("Missing UI Element"), msg);
-        done(-1);
+        reject();
         return;
     }
 }
@@ -1895,7 +1885,7 @@
     if (the_text == target_text)
     {
         *success_flag = true;
-        done(0);
+        accept();
     }
     else
     {
@@ -1926,11 +1916,11 @@
     listbox = new MythListBox(this);
     listbox->setScrollBar(false);
     listbox->setBottomScrollBar(false);
-    connect(listbox, SIGNAL(accepted(int)), this, SLOT(itemSelected(int)));
+    connect(listbox, SIGNAL(accepted(int)), this, SLOT(AcceptItem(int)));
     addWidget(listbox);
-    
-    ok_button = addButton(tr("OK"), this, SLOT(okPressed()));
-    cancel_button = addButton(tr("Cancel"), this, SLOT(cancelPressed()));
+
+    ok_button     = addButton(tr("OK"),     this, SLOT(accept()));
+    cancel_button = addButton(tr("Cancel"), this, SLOT(reject()));
 }
 
 void MythSearchDialog::keyPressEvent(QKeyEvent *e)
@@ -1945,7 +1935,7 @@
             if (action == "ESCAPE")
             {
                 handled = true;
-                done(-1);        
+                reject();
             }
             if (action == "LEFT")
             {
@@ -1960,7 +1950,7 @@
             if (action == "SELECT")
             {
                 handled = true;
-                done(0);
+                accept();
             }
         }
     }
@@ -1968,12 +1958,6 @@
         MythPopupBox::keyPressEvent(e);
 }
 
-void MythSearchDialog::itemSelected(int index)
-{
-    (void)index;
-    done(0);
-}
-
 void MythSearchDialog::setCaption(QString text)
 {
     caption->setText(text);
@@ -2002,16 +1986,6 @@
    searchTextChanged();
 }
 
-void MythSearchDialog::okPressed(void)
-{
-    done(0);  
-}
-
-void MythSearchDialog::cancelPressed(void)
-{
-    done(-1);
-}
-
 MythSearchDialog::~MythSearchDialog()
 {
     if (listbox)
@@ -2074,7 +2048,7 @@
                        "element. \n\nReturning to the previous menu."));
         MythPopupBox::showOkPopup(gContext->GetMainWindow(),
                                   tr("Missing UI Element"), msg);
-        done(-1);
+        reject();
         return;
     }
 
@@ -2109,7 +2083,7 @@
                        "\n\nReturning to the previous menu."));
         MythPopupBox::showOkPopup(gContext->GetMainWindow(),
                                   tr("Missing UI Element"), msg);
-        done(-1);
+        reject();
         return;
     }    
     
@@ -2316,7 +2290,7 @@
     if (type > -1)
     {
         *selected_file = image_files[type];
-        done(0);
+        accept();
     }   
 }
 
@@ -2342,14 +2316,14 @@
         VERBOSE(VB_IMPORTANT, 
                 "MythScrollDialog: Programmer error, trying to create "
                 "a dialog without a parent.");
-        done(-1);
+        done(kDialogCodeRejected);
         return;
     }
 
     m_parent     = parent;
     m_scrollMode = mode;
         
-    m_resCode    = 0;
+    m_resCode    = kDialogCodeRejected;
     m_inLoop     = false;
     
     gContext->GetScreenSettings(m_xbase, m_screenWidth, m_wmult,
@@ -2444,7 +2418,7 @@
                    m_screenHeight*areaHTimes);
 }
 
-int MythScrollDialog::result() const
+DialogCode MythScrollDialog::result(void) const
 {
     return m_resCode;    
 }
@@ -2468,23 +2442,23 @@
     }
 }
 
-int MythScrollDialog::exec()
+DialogCode MythScrollDialog::exec(void)
 {
     if (m_inLoop) 
     {
         std::cerr << "MythScrollDialog::exec: Recursive call detected."
                   << std::endl;
-        return -1;
+        return kDialogCodeRejected;
     }
 
-    setResult(Rejected);
+    setResult(kDialogCodeRejected);
 
     show();
 
     m_inLoop = true;
     qApp->enter_loop();
 
-    int res = result();
+    DialogCode res = result();
 
     return res;
 }
@@ -2492,21 +2466,21 @@
 void MythScrollDialog::done(int r)
 {
     hide();
-    setResult(r);
+    setResult((DialogCode)r);
     close();
 }
 
 void MythScrollDialog::accept()
 {
-    done(Accepted);
+    done(kDialogCodeAccepted);
 }
 
 void MythScrollDialog::reject()
 {
-    done(Rejected);
+    done(kDialogCodeRejected);
 }
 
-void MythScrollDialog::setResult(int r)
+void MythScrollDialog::setResult(DialogCode r)
 {
     m_resCode = r;    
 }
Index: mythtv/libs/libmyth/dialogbox.cpp
===================================================================
--- mythtv/libs/libmyth/dialogbox.cpp	(revision 14863)
+++ mythtv/libs/libmyth/dialogbox.cpp	(working copy)
@@ -59,5 +59,5 @@
 void DialogBox::buttonPressed(int which)
 {
     if (buttongroup->find(which) != checkbox)
-        done(which + 1);
+        AcceptItem(which);
 }
Index: mythtv/libs/libmyth/uilistbtntype.cpp
===================================================================
--- mythtv/libs/libmyth/uilistbtntype.cpp	(revision 14863)
+++ mythtv/libs/libmyth/uilistbtntype.cpp	(working copy)
@@ -1503,11 +1503,11 @@
     searchEdit->setFocus();
 
     popup->addButton(tr("Search"));
-    popup->addButton(tr("Cancel"));
+    popup->addButton(tr("Cancel"), popup, SLOT(reject()));
 
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
 
-    if (res == 0)
+    if (kDialogCodeButton0 == res)
     {
         m_incSearch = searchEdit->text();
         m_bIncSearchContains = (modeCombo->currentItem() == 1);
@@ -1517,7 +1517,7 @@
     popup->hide();
     popup->deleteLater();
 
-    return (res == 0);
+    return (kDialogCodeButton0 == res);
 }
 
 bool UIListBtnType::incSearchNext(void)
Index: mythtv/libs/libmyth/uitypes.cpp
===================================================================
--- mythtv/libs/libmyth/uitypes.cpp	(revision 14863)
+++ mythtv/libs/libmyth/uitypes.cpp	(working copy)
@@ -4334,9 +4334,9 @@
     popup->addButton(tr("Search"));
     popup->addButton(tr("Cancel"));
 
-    int res = popup->ExecPopup();
+    DialogCode res = popup->ExecPopup();
 
-    if (res == 0)
+    if (kDialogCodeButton0 == res)
     {
         incSearch = searchEdit->text();
         bIncSearchContains = (modeCombo->currentItem() == 1);
@@ -4346,7 +4346,7 @@
     popup->hide();
     popup->deleteLater();
 
-    return (res == 0);
+    return (kDialogCodeButton0 == res);
 }
 
 bool UIManagedTreeListType::incSearchNext(void)
@@ -5947,7 +5947,7 @@
     if (!m_parentDialog)
         return;
 
-    m_parentDialog->done(0);
+    m_parentDialog->done(kDialogCodeAccepted);
 }
 
 void UIKeyboardType::updateButtons()
Index: mythtv/libs/libmyth/mythcontext.cpp
===================================================================
--- mythtv/libs/libmyth/mythcontext.cpp	(revision 14863)
+++ mythtv/libs/libmyth/mythcontext.cpp	(working copy)
@@ -3060,41 +3060,48 @@
         }
 
         if (returnValue == MYTH_SCHEMA_ERROR)
-            MythPopupBox::showExitPopup(d->mainWindow,
-                                        "Database Upgrade Error", message);
+        {
+            MythPopupBox::showOkPopup(
+                d->mainWindow, "Database Upgrade Error",
+                message, QObject::tr("Exit"));
+        }
         else
         {
             QStringList buttonNames;
-            int         selected;
 
             buttonNames += QObject::tr("Exit");
             buttonNames += QObject::tr("Upgrade");
             if (expertMode)
                 buttonNames += QObject::tr("Use current schema");
 
-            selected = MythPopupBox::showButtonPopup(d->mainWindow,
-                                                     "Database Upgrade",
-                                                     message, buttonNames, -1);
+            DialogCode selected = MythPopupBox::ShowButtonPopup(
+                d->mainWindow, "Database Upgrade", message,
+                buttonNames, kDialogCodeButton0);
+
             // The annoying extra confirmation:
-            if (selected == 1)
+            if (kDialogCodeButton1 == selected)
             {
                 message = tr("This cannot be un-done, so having a"
                              " database backup would be a good idea.");
                 if (connections)
                     message += "\n\n" + warnOtherCl;
 
-                selected = MythPopupBox::showButtonPopup(d->mainWindow,
-                                                         "Database Upgrade",
-                                                         message,
-                                                         buttonNames, -1);
+                selected = MythPopupBox::ShowButtonPopup(
+                    d->mainWindow, "Database Upgrade", message,
+                    buttonNames, kDialogCodeButton0);
             }
 
             switch (selected)
             {
-                case 0:  returnValue = MYTH_SCHEMA_EXIT;         break;
-                case 1:  returnValue = MYTH_SCHEMA_UPGRADE;      break;
-                case 2:  returnValue = MYTH_SCHEMA_USE_EXISTING; break;
-                default: returnValue = MYTH_SCHEMA_ERROR;
+                case kDialogCodeRejected:
+                case kDialogCodeButton0:
+                    returnValue = MYTH_SCHEMA_EXIT;         break;
+                case kDialogCodeButton1:
+                    returnValue = MYTH_SCHEMA_UPGRADE;      break;
+                case kDialogCodeButton2:
+                    returnValue = MYTH_SCHEMA_USE_EXISTING; break;
+                default:
+                    returnValue = MYTH_SCHEMA_ERROR;
             }
         }
 
Index: mythtv/libs/libmyth/mythcontext.h
===================================================================
--- mythtv/libs/libmyth/mythcontext.h	(revision 14863)
+++ mythtv/libs/libmyth/mythcontext.h	(working copy)
@@ -209,7 +209,7 @@
 
 /// Update this whenever the plug-in API changes.
 /// Including changes in the libmythtv class methods used by plug-ins.
-#define MYTH_BINARY_VERSION "0.21.20071107-2"
+#define MYTH_BINARY_VERSION "0.21.20071110-1"
 
 /** \brief Increment this whenever the MythTV network protocol changes.
  *
Index: mythtv/libs/libmyth/settings.h
===================================================================
--- mythtv/libs/libmyth/settings.h	(revision 14863)
+++ mythtv/libs/libmyth/settings.h	(working copy)
@@ -1153,7 +1153,7 @@
     virtual MythDialog *dialogWidget(
         MythMainWindow *parent, const char* widgetName);
 
-    int exec(bool saveOnAccept = true);
+    virtual DialogCode exec(bool saveOnAccept = true);
 
     virtual void setLabel(QString str);
 
@@ -1206,7 +1206,7 @@
                                      const char     *widgetName);
 
     // Show a dialogWidget, and save if accepted
-    virtual int exec(bool saveOnExec = true, bool doLoad = true);
+    virtual DialogCode exec(bool saveOnExec = true, bool doLoad = true);
 
     virtual void load(void) { cfgGrp->load(); }
     virtual void save(void) { cfgGrp->save(); }
Index: mythtv/libs/libmyth/mythmediamonitor.cpp
===================================================================
--- mythtv/libs/libmyth/mythmediamonitor.cpp	(revision 14863)
+++ mythtv/libs/libmyth/mythmediamonitor.cpp	(working copy)
@@ -144,25 +144,24 @@
         return drives.front();
     }
 
-    MythPopupBox *popup = new MythPopupBox(
-        gContext->GetMainWindow(), "select drive");
-
-    popup->addLabel(label);
+    QStringList buttonmsgs;
     for (it = drives.begin(); it != drives.end(); ++it)
-        popup->addButton(DevName(*it));
+        buttonmsgs += DevName(*it);
+    buttonmsgs += tr("Cancel");
+    const DialogCode cancelbtn = (DialogCode)
+        (((int)kDialogCodeButton0) + buttonmsgs.size() - 1);
 
-    popup->addButton(tr("Cancel"))->setFocus();
+    DialogCode ret = MythPopupBox::ShowButtonPopup(
+        gContext->GetMainWindow(), "select drive", label,
+        buttonmsgs, cancelbtn);
 
-    int ret = popup->ExecPopup();
-    popup->hide();
-    popup->deleteLater();
-
     // If the user cancelled, return a special value
-    if (ret < 0)
+    if ((kDialogCodeRejected == ret) || (cancelbtn == ret))
         return (MythMediaDevice *)-1;
 
-    if ((uint)ret < drives.count())
-        return drives[ret];
+    uint idx = MythDialog::CalcItemIndex(ret);
+    if (idx < drives.count())
+        return drives[idx];
 
     return NULL;
 }
Index: mythtv/libs/libmyth/mythdialogs.h
===================================================================
--- mythtv/libs/libmyth/mythdialogs.h	(revision 14863)
+++ mythtv/libs/libmyth/mythdialogs.h	(working copy)
@@ -50,6 +50,32 @@
 
 #include "libmythui/mythmainwindow.h"
 
+typedef enum DialogCode
+{
+    kDialogCodeRejected  = QDialog::Rejected,
+    kDialogCodeAccepted  = QDialog::Accepted,
+    kDialogCodeListStart = 0x10,
+    kDialogCodeButton0   = 0x10,
+    kDialogCodeButton1   = 0x11,
+    kDialogCodeButton2   = 0x12,
+    kDialogCodeButton3   = 0x13,
+    kDialogCodeButton4   = 0x14,
+    kDialogCodeButton5   = 0x15,
+    kDialogCodeButton6   = 0x16,
+    kDialogCodeButton7   = 0x17,
+    kDialogCodeButton8   = 0x18,
+    kDialogCodeButton9   = 0x19,
+} DialogCode;
+
+inline bool operator==(const DialogCode &a, const QDialog::DialogCode &b)
+{ return ((int)a) == ((int)b); }
+inline bool operator==(const QDialog::DialogCode &a, const DialogCode &b)
+{ return ((int)a) == ((int)b); }
+inline bool operator!=(const DialogCode &a, const QDialog::DialogCode &b)
+{ return ((int)a) == ((int)b); }
+inline bool operator!=(const QDialog::DialogCode &a, const DialogCode &b)
+{ return ((int)a) == ((int)b); }
+
 class MPUBLIC MythDialog : public QFrame
 {
     Q_OBJECT
@@ -57,14 +83,12 @@
     MythDialog(MythMainWindow *parent, const char *name = 0, 
                bool setsize = true);
 
-    enum DialogCode
-    {
-        Rejected  = 0,
-        Accepted  = 1,
-        ListStart = 0x10,
-    };
+    // these are for backward compatibility..
+    static const DialogCode Rejected  = kDialogCodeRejected;
+    static const DialogCode Accepted  = kDialogCodeAccepted;
+    static const DialogCode ListStart = kDialogCodeListStart;
 
-    int result(void) const { return rescode; }
+    DialogCode result(void) const { return rescode; }
 
     virtual void Show(void);
 
@@ -74,18 +98,18 @@
    
     virtual bool onMediaEvent(MythMediaDevice * mediadevice); 
     
-    void setResult(int r) { rescode = r; }
+    void setResult(DialogCode r);
 
     virtual void deleteLater(void);
 
+    static int CalcItemIndex(DialogCode code);
+
  signals:
     void menuButtonPressed();
 
   public slots:
-    int exec();
-    virtual void done( int );
-
-  protected slots:
+    DialogCode exec(void);
+    virtual void done(int); // Must be given a valid DialogCode
     virtual void AcceptItem(int);
     virtual void accept();
     virtual void reject();
@@ -102,7 +126,7 @@
  
     MythMainWindow *m_parent;
 
-    int rescode;
+    DialogCode rescode;
 
     bool in_loop;
 
@@ -133,26 +157,44 @@
     void ShowPopupAtXY(int destx, int desty, 
                        QObject *target = NULL, const char *slot = NULL);
 
-    int ExecPopup(QObject *target = NULL, const char *slot = NULL);
-    int ExecPopupAtXY(int destx, int desty,
-                      QObject *target = NULL, const char *slot = NULL);
+    DialogCode ExecPopup(QObject *target = NULL, const char *slot = NULL);
+    DialogCode ExecPopupAtXY(int destx, int desty,
+                             QObject *target = NULL, const char *slot = NULL);
 
-    static void showOkPopup(MythMainWindow *parent, QString title,
-                            QString message);
-    static void showExitPopup(MythMainWindow *parent, QString title,
-                              QString message);
+    static bool showOkPopup(MythMainWindow *parent,
+                            const QString  &title,
+                            const QString  &message,
+                            QString         button_msg = QString::null);
+
     static bool showOkCancelPopup(MythMainWindow *parent, QString title,
                                   QString message, bool focusOk);
-    static int show2ButtonPopup(MythMainWindow *parent, QString title,
-                                QString message, QString button1msg,
-                                QString button2msg, int defvalue);
-    static int showButtonPopup(MythMainWindow *parent, QString title,
-                               QString message, QStringList buttonmsgs,
-                               int defvalue);
 
+    static DialogCode Show2ButtonPopup(
+        MythMainWindow *parent,
+        const QString &title, const QString &message,
+        const QString &button1msg, const QString &button2msg,
+        DialogCode default_button)
+    {
+        QStringList buttonmsgs;
+        buttonmsgs += (button1msg.isEmpty()) ?
+            QString("Button 1") : button1msg;
+        buttonmsgs += (button2msg.isEmpty()) ?
+            QString("Button 2") : button2msg;
+        return ShowButtonPopup(
+            parent, title, message, buttonmsgs, default_button);
+    }
+
+    static DialogCode ShowButtonPopup(
+        MythMainWindow *parent,
+        const QString &title, const QString &message,
+        const QStringList &buttonmsgs,
+        DialogCode default_button);
+
     static bool showGetTextPopup(MythMainWindow *parent, QString title,
                                  QString message, QString& text);
 
+  public slots:
+    virtual void AcceptItem(int);
     virtual void accept(void);
     virtual void reject(void);
 
@@ -165,7 +207,6 @@
 
   protected slots:
     void defaultButtonPressedHandler(void);
-    void defaultExitHandler(int);
 
   private:
     QVBoxLayout *vbox;
@@ -402,10 +443,7 @@
     QString getResult(void);
     
  protected slots:
-    void okPressed(void);
-    void cancelPressed(void);   
     void searchTextChanged(void);
-    void itemSelected(int index);
      
  protected:
     void keyPressEvent(QKeyEvent *e);
@@ -472,11 +510,6 @@
     
   public:
 
-    enum DialogCode {
-        Rejected,
-        Accepted
-    };
-
     enum ScrollMode {
         HScroll=0,
         VScroll
@@ -489,11 +522,11 @@
     void setArea(int w, int h);
     void setAreaMultiplied(int areaWTimes, int areaHTimes);
 
-    int  result() const;
+    DialogCode result(void) const;
 
   public slots:
 
-    int  exec();
+    DialogCode exec(void);
     virtual void done(int);
     virtual void show();
     virtual void hide();
@@ -509,7 +542,7 @@
     void         keyPressEvent(QKeyEvent *e);
     virtual void paintEvent(QRegion& region, int x, int y, int w, int h);
 
-    void setResult(int r);
+    void setResult(DialogCode r);
     void viewportPaintEvent(QPaintEvent *pe);
 
     MythMainWindow *m_parent;
@@ -523,7 +556,7 @@
     QFont           m_defaultMediumFont;
     QFont           m_defaultSmallFont;
 
-    int             m_resCode;
+    DialogCode      m_resCode;
     bool            m_inLoop;
     
     QPixmap        *m_bgPixmap;
Index: mythtv/libs/libmyth/virtualkeyboard.cpp
===================================================================
--- mythtv/libs/libmyth/virtualkeyboard.cpp	(revision 14863)
+++ mythtv/libs/libmyth/virtualkeyboard.cpp	(working copy)
@@ -51,7 +51,7 @@
         if (!loadThemedWindow("keyboard", "keyboard/en_us_"))
         {
             VERBOSE(VB_IMPORTANT, "VirtualKeyboard: cannot find layout for US English");
-            done(-1);
+            reject();
             return;
         }
     }
@@ -63,7 +63,7 @@
     {
         cerr << "VirtualKeyboard: cannot find the 'keyboard_container'"
                 " in your theme" << endl;
-        done(-1);
+        reject();
         return;
     }
 
@@ -162,7 +162,7 @@
     if (!m_keyboard)
     {
         cerr << "VirtualKeyboard: cannot find the UIKeyboardType in your theme" << endl;
-        done(-1);
+        reject();
         return;
     }
 
@@ -212,7 +212,7 @@
             QString action = actions[i];
             handled = true;
             if (action == "ESCAPE")
-                done(0);
+                accept();
             else
                 handled = false;
         }
Index: mythtv/programs/mythfrontend/playbackbox.cpp
===================================================================
--- mythtv/programs/mythfrontend/playbackbox.cpp	(revision 14863)
+++ mythtv/programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -485,7 +485,7 @@
     }
 }
 
-int PlaybackBox::exec(void)
+DialogCode PlaybackBox::exec(void)
 {
     if (recGroup != "")
         return MythDialog::exec();
@@ -496,7 +496,7 @@
         return MythDialog::exec();
     }
 
-    return 0;
+    return kDialogCodeRejected;
 }
 
 /* blocks until playing has stopped */
@@ -4557,7 +4557,8 @@
 
     iconhelp->addLayout(grid);
 
-    QButton *button = iconhelp->addButton(tr("Ok"));
+    QButton *button = iconhelp->addButton(
+        QObject::tr("OK"), iconhelp, SLOT(accept()));
     button->setFocus();
 
     iconhelp->ExecPopup();
@@ -4687,7 +4688,7 @@
     recGroupPopup->addWidget(exitbutton);
     connect(exitbutton, SIGNAL(clicked()), recGroupPopup, SLOT(reject()));
 
-    int result = recGroupPopup->ExecPopup();
+    DialogCode result = recGroupPopup->ExecPopup();
 
     if (result != MythDialog::Rejected)
     {
@@ -4853,7 +4854,7 @@
     connect(recGroupListBox, SIGNAL(currentChanged(QListBoxItem *)), this,
             SLOT(recGroupChooserListBoxChanged()));
 
-    int result = recGroupPopup->ExecPopup();
+    DialogCode result = recGroupPopup->ExecPopup();
 
     if (result != MythDialog::Rejected)
         setGroupFilter();
@@ -5055,7 +5056,7 @@
             SLOT(recGroupChangerListBoxChanged()));
     connect(recGroupOkButton, SIGNAL(clicked()), recGroupPopup, SLOT(accept()));
 
-    int result = recGroupPopup->ExecPopup();
+    DialogCode result = recGroupPopup->ExecPopup();
 
     if (result != MythDialog::Rejected)
         setRecGroup();
@@ -5106,7 +5107,7 @@
     connect(recGroupListBox, SIGNAL(accepted(int)),
             recGroupPopup,   SLOT(AcceptItem(int)));
 
-    int result = recGroupPopup->ExecPopup();
+    DialogCode result = recGroupPopup->ExecPopup();
 
     if (result != MythDialog::Rejected)
         setPlayGroup();
@@ -5143,7 +5144,7 @@
 
     connect(recGroupOkButton, SIGNAL(clicked()), recGroupPopup, SLOT(accept()));
 
-    int result = recGroupPopup->ExecPopup();
+    DialogCode result = recGroupPopup->ExecPopup();
 
     if (result == MythDialog::Accepted)
         setRecTitle();
Index: mythtv/programs/mythfrontend/main.cpp
===================================================================
--- mythtv/programs/mythfrontend/main.cpp	(revision 14863)
+++ mythtv/programs/mythfrontend/main.cpp	(working copy)
@@ -359,10 +359,10 @@
     else if (sel == "settings appearance") 
     {
         AppearanceSettings *settings = new AppearanceSettings();
-        int res = settings->exec();
+        DialogCode res = settings->exec();
         delete settings;
 
-        if (res)
+        if (kDialogCodeRejected != res)
         {
             qApp->processEvents();
             GetMythMainWindow()->JumpTo("Reload Theme");
@@ -458,7 +458,7 @@
     DialogBox diag(gContext->GetMainWindow(), title);
 
     diag.AddButton(QObject::tr("No"));
-    int result;
+    DialogCode result = kDialogCodeRejected;
 
     switch (exitMenuStyle)
     {
@@ -469,9 +469,9 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return QUIT;
-                case 3: return HALT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return QUIT;
+                case kDialogCodeButton2: return HALT;
                 default: return NO_EXIT;
             }
         case 1:
@@ -479,8 +479,8 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return QUIT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return QUIT;
                 default: return NO_EXIT;
             }
         case 2:
@@ -489,9 +489,9 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return QUIT;
-                case 3: return HALT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return QUIT;
+                case kDialogCodeButton2: return HALT;
                 default: return NO_EXIT;
             }
         case 3:
@@ -501,10 +501,10 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return QUIT;
-                case 3: return REBOOT;
-                case 4: return HALT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return QUIT;
+                case kDialogCodeButton2: return REBOOT;
+                case kDialogCodeButton3: return HALT;
                 default: return NO_EXIT;
             }
         case 4:
@@ -512,8 +512,8 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return HALT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return HALT;
                 default: return NO_EXIT;
             }
         case 5:
@@ -521,8 +521,8 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return REBOOT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return REBOOT;
                 default: return NO_EXIT;
             }
         case 6:
@@ -531,9 +531,9 @@
             result = diag.exec();
             switch (result)
             {
-                case 1: return NO_EXIT;
-                case 2: return REBOOT;
-                case 3: return HALT;
+                case kDialogCodeButton0: return NO_EXIT;
+                case kDialogCodeButton1: return REBOOT;
+                case kDialogCodeButton2: return HALT;
                 default: return NO_EXIT;
             }
     }
@@ -701,18 +701,19 @@
                     long long pos = (long long)(atoi((*++it).ascii()) & 0xffffffffLL);
                     if (pos > 0)
                     {
-                        QString msg = QString("DVD contains a bookmark");
-                        QString button1msg = QString("Play from bookmark");
-                        QString button2msg = QString("Play from beginning");
+                        QString msg = QObject::tr("DVD contains a bookmark");
+                        QString btn0msg = QObject::tr("Play from bookmark");
+                        QString btn1msg = QObject::tr("Play from beginning");
         
-                        int ret = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                            "", msg,
-                                                            button1msg,
-                                                            button2msg,
-                                                            1);
-                        if (ret == 1)
+                        DialogCode ret = MythPopupBox::Show2ButtonPopup(
+                            gContext->GetMainWindow(),
+                            "", msg,
+                            btn0msg,
+                            btn1msg,
+                            kDialogCodeButton0);
+                        if (kDialogCodeButton1 == ret)
                             pginfo->setIgnoreBookmark(true);
-                        else if (ret == -1)
+                        else if (kDialogCodeRejected == ret)
                         {
                             delete tmprbuf;
                             delete pginfo;
Index: mythtv/programs/mythfrontend/statusbox.cpp
===================================================================
--- mythtv/programs/mythfrontend/statusbox.cpp	(revision 14863)
+++ mythtv/programs/mythfrontend/statusbox.cpp	(working copy)
@@ -361,12 +361,14 @@
             if ((inContent) &&
                 (currentItem == QObject::tr("Log Entries")))
             {
-                int retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                 QString("AckLogEntry"),
-                                 QObject::tr("Acknowledge all log entries at "
-                                             "this priority level or lower?"),
-                                 QObject::tr("Yes"), QObject::tr("No"), 0);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                    my_parent, QString("AckLogEntry"),
+                    QObject::tr("Acknowledge all log entries at "
+                                "this priority level or lower?"),
+                    QObject::tr("Yes"), QObject::tr("No"),
+                    kDialogCodeButton0);
+
+                if (kDialogCodeButton0 == retval)
                 {
                     MSqlQuery query(MSqlQuery::InitCon());
                     query.prepare("UPDATE mythlog SET acknowledged = 1 "
@@ -552,13 +554,13 @@
     {
         if (currentItem == QObject::tr("Log Entries"))
         {
-            int retval;
+            DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                my_parent,
+                QString("AckLogEntry"),
+                QObject::tr("Acknowledge this log entry?"),
+                QObject::tr("Yes"), QObject::tr("No"), kDialogCodeButton0);
 
-            retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                   QString("AckLogEntry"),
-                                   QObject::tr("Acknowledge this log entry?"),
-                                   QObject::tr("Yes"), QObject::tr("No"), 0);
-            if (retval == 0)
+            if (kDialogCodeButton0 == retval)
             {
                 MSqlQuery query(MSqlQuery::InitCon());
                 query.prepare("UPDATE mythlog SET acknowledged = 1 "
@@ -572,20 +574,17 @@
         {
             QStringList msgs;
             int jobStatus;
-            int retval;
 
             jobStatus = JobQueue::GetJobStatus(
                                 contentData[contentPos].toInt());
 
             if (jobStatus == JOB_QUEUED)
             {
-                retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Delete Job?"),
-                                       QObject::tr("Yes"),
-                                       QObject::tr("No"), 2);
-                cout << "Popup result = " << retval << endl;
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"), QObject::tr("Delete Job?"),
+                    QObject::tr("Yes"), QObject::tr("No"), kDialogCodeButton1);
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::DeleteJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
@@ -598,16 +597,17 @@
                 msgs << QObject::tr("Pause");
                 msgs << QObject::tr("Stop");
                 msgs << QObject::tr("No Change");
-                retval = MythPopupBox::showButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Job Queue Actions:"),
-                                       msgs, 2);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::ShowButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"),
+                    QObject::tr("Job Queue Actions:"),
+                    msgs, kDialogCodeButton2);
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::PauseJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
                 }
-                else if (retval == 1)
+                else if (kDialogCodeButton1 == retval)
                 {
                     JobQueue::StopJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
@@ -618,16 +618,18 @@
                 msgs << QObject::tr("Resume");
                 msgs << QObject::tr("Stop");
                 msgs << QObject::tr("No Change");
-                retval = MythPopupBox::showButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Job Queue Actions:"),
-                                       msgs, 2);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::ShowButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"),
+                    QObject::tr("Job Queue Actions:"),
+                    msgs, kDialogCodeButton2);
+
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::ResumeJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
                 }
-                else if (retval == 1)
+                else if (kDialogCodeButton1 == retval)
                 {
                     JobQueue::StopJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
@@ -635,12 +637,13 @@
             }
             else if (jobStatus & JOB_DONE)
             {
-                retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Requeue Job?"),
-                                       QObject::tr("Yes"),
-                                       QObject::tr("No"), 1);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"),
+                    QObject::tr("Requeue Job?"),
+                    QObject::tr("Yes"), QObject::tr("No"), kDialogCodeButton0);
+
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::ChangeJobStatus(contentData[contentPos].toInt(),
                                               JOB_QUEUED);
@@ -657,22 +660,22 @@
             if (rec) 
             {
                 QStringList msgs;
-                int retval;
 
                 msgs << QObject::tr("Delete Now");
                 msgs << QObject::tr("Disable AutoExpire");
                 msgs << QObject::tr("No Change");
                 
-                retval = MythPopupBox::showButtonPopup(my_parent,
-                             QString("AutoExpirePopup"),
-                             QObject::tr("AutoExpire Actions:"),
-                             msgs, 2);
+                DialogCode retval = MythPopupBox::ShowButtonPopup(
+                    my_parent,
+                    QString("AutoExpirePopup"),
+                    QObject::tr("AutoExpire Actions:"),
+                    msgs, kDialogCodeButton2);
 
-                if (retval == 0 && REC_CAN_BE_DELETED(rec))
+                if ((kDialogCodeButton0 == retval) && REC_CAN_BE_DELETED(rec))
                 {
                     RemoteDeleteRecording(rec, false, false);
                 }
-                else if (retval == 1)
+                else if (kDialogCodeButton1 == retval)
                 {
                     rec->SetAutoExpire(0);
                     if ((rec)->recgroup == "LiveTV")
Index: mythtv/programs/mythfrontend/playbackbox.h
===================================================================
--- mythtv/programs/mythfrontend/playbackbox.h	(revision 14863)
+++ mythtv/programs/mythfrontend/playbackbox.h	(working copy)
@@ -106,7 +106,7 @@
     static ProgramInfo *RunPlaybackBox(void *player);
 
   public slots:
-    int exec();
+    DialogCode exec();
 
   protected slots:
     void timeout(void);
Index: mythtv/programs/mythtv-setup/main.cpp
===================================================================
--- mythtv/programs/mythtv-setup/main.cpp	(revision 14863)
+++ mythtv/programs/mythtv-setup/main.cpp	(working copy)
@@ -310,15 +310,14 @@
 
     if (backendIsRunning)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), QObject::tr("WARNING"),
             warn,
             QObject::tr("Continue"),
-            QObject::tr("Exit"), 1);
-        if (1 == val)
-            return 0;
+            QObject::tr("Exit"), kDialogCodeButton0);
 
-        backendIsRunning = true;
+        if (kDialogCodeButton1 == val)
+            return 0;
     }
 
     REG_KEY("qt", "DELETE", "Delete", "D");
@@ -348,7 +347,7 @@
             dia->AddButton(QObject::tr("Yes please"));
             dia->AddButton(QObject::tr("No, I know what I am doing"));
 
-            if (dia->exec() == 2)
+            if (kDialogCodeButton1 == dia->exec())
                 haveProblems = false;
             delete dia;
         }
Index: mythtv/programs/mythwelcome/welcomedialog.h
===================================================================
--- mythtv/programs/mythwelcome/welcomedialog.h	(revision 14863)
+++ mythtv/programs/mythwelcome/welcomedialog.h	(working copy)
@@ -23,7 +23,7 @@
     void keyPressEvent(QKeyEvent *e);
     void customEvent(QCustomEvent *e);
     void wireUpTheme();
-    int exec(void);
+    DialogCode exec(void);
     
   protected slots:
     void startFrontendClick(void);
Index: mythtv/programs/mythwelcome/welcomedialog.cpp
===================================================================
--- mythtv/programs/mythwelcome/welcomedialog.cpp	(revision 14863)
+++ mythtv/programs/mythwelcome/welcomedialog.cpp	(working copy)
@@ -84,7 +84,7 @@
     QTimer::singleShot(500, this, SLOT(startFrontend()));
 }
 
-int WelcomeDialog::exec()
+DialogCode WelcomeDialog::exec(void)
 {
     // mythshutdown --startup returns 0 for automatic startup
     //                                1 for manual startup 
@@ -203,7 +203,7 @@
         else if (action == "INFO")
         {
             MythWelcomeSettings settings;
-            if (settings.exec() == 1)
+            if (kDialogCodeAccepted == settings.exec())
             {
                 RemoteSendMessage("CLEAR_SETTINGS_CACHE");
                 updateStatus();
@@ -213,7 +213,7 @@
         else if (action == "SHOWSETTINGS")
         {
             MythShutdownSettings settings;
-            if (settings.exec() == 1)
+            if (kDialogCodeAccepted == settings.exec())
                 RemoteSendMessage("CLEAR_SETTINGS_CACHE");
         }
         else if (action == "0")
@@ -296,7 +296,7 @@
 
 void WelcomeDialog::closeDialog()
 {
-    done(1);
+    done(kDialogCodeAccepted);
 }
 
 WelcomeDialog::~WelcomeDialog()
@@ -703,7 +703,7 @@
                          SLOT(shutdownNow()));
     popup->addButton(tr("Exit"), this,
                          SLOT(closeDialog()));
-    popup->addButton(tr("Cancel"), this, SLOT(cancelPopup()));
+    popup->addButton(tr("Cancel"), popup, SLOT(reject()));
 
     popup->ShowPopup(this, SLOT(donePopup(int)));
 
