Index: mythtv/libs/libmythtv/transporteditor.cpp
===================================================================
--- mythtv/libs/libmythtv/transporteditor.cpp	(revision 20205)
+++ mythtv/libs/libmythtv/transporteditor.cpp	(working copy)
@@ -39,6 +39,12 @@
 #include "mythcontext.h"
 #include "mythdb.h"
 
+// MythUI
+#include "mythuitext.h"
+#include "mythuibutton.h"
+#include "mythuibuttonlist.h"
+#include "mythdialogbox.h"
+
 #define LOC QString("DTVMux: ")
 #define LOC_ERR QString("DTVMux, Error: ")
 
@@ -79,77 +85,10 @@
     return mod.toUpper();
 }
 
-void TransportList::fillSelections(void)
-{
-    //VERBOSE(VB_IMPORTANT, "TransportList::fillSelections() "<<sourceid);
-
-    clearSelections();
-    addSelection("(" + tr("New Transport") + ")", "0");
-
-    setHelpText(QObject::tr(
-                    "This section lists each transport that MythTV "
-                    "currently knows about. The display fields are "
-                    "video source, modulation, frequency, and when "
-                    "relevant symbol rate, network id, and transport id."));
-
-    if (!sourceid)
-        return;
-
-    MSqlQuery query(MSqlQuery::InitCon());
-    query.prepare(
-        "SELECT mplexid, modulation, frequency, "
-        "       symbolrate, networkid, transportid, constellation "
-        "FROM dtv_multiplex, videosource "
-        "WHERE dtv_multiplex.sourceid = :SOURCEID AND "
-        "      dtv_multiplex.sourceid = videosource.sourceid "
-        "ORDER by networkid, transportid, frequency, mplexid");
-    query.bindValue(":SOURCEID", sourceid);
-
-    if (!query.exec() || !query.isActive())
-    {
-        MythDB::DBError("TransportList::fillSelections", query);
-        return;
-    }
-
-    while (query.next())
-    {
-        QString rawmod = (CardUtil::OFDM == cardtype) ?
-            query.value(6).toString() : query.value(1).toString();
-
-        QString mod = pp_modulation(rawmod);
-        while (mod.length() < 7)
-            mod += " ";
-
-        QString rate  = query.value(3).toString();
-        rate = (rate == "0") ? "" : QString("rate %1").arg(rate);
-
-        QString netid = query.value(4).toUInt() ?
-            QString("netid %1").arg(query.value(4).toUInt(), 5) : "";
-
-        QString tid = query.value(5).toUInt() ?
-            QString("tid %1").arg(query.value(5).toUInt(), 5) : "";
-
-        QString hz = (CardUtil::QPSK == cardtype) ? "kHz" : "Hz";
-
-        QString type = "";
-        if (CardUtil::OFDM == cardtype)
-            type = "(DVB-T)";
-        if (CardUtil::QPSK == cardtype)
-            type = "(DVB-S)";
-        if (CardUtil::QAM == cardtype)
-            type = "(DVB-C)";
-
-        QString txt = QString("%1 %2 %3 %4 %5 %6 %7")
-            .arg(mod).arg(query.value(2).toString())
-            .arg(hz).arg(rate).arg(netid).arg(tid).arg(type);
-
-        addSelection(txt, query.value(0).toString());
-    }
-}
-
 static CardUtil::CARD_TYPES get_cardtype(uint sourceid)
-{
+{   
     vector<uint> cardids;
+    QString msg;
 
     // Work out what card we have.. (doesn't always work well)
     MSqlQuery query(MSqlQuery::InitCon());
@@ -175,12 +114,11 @@
 
     if (cardids.empty())
     {
-        MythPopupBox::showOkPopup(
-            gContext->GetMainWindow(), 
-            QObject::tr("Transport Editor"), 
-            QObject::tr(
-                "Sorry, the Transport Editor can only be used to "
-                "edit transports which are connected to a card input."));
+        msg = QObject::tr(
+              "Sorry, the Transport Editor can only be used to "
+              "edit transports which are connected to a card input."
+              "\nThe cards must be local to this machine.");
+        ShowOkPopup(msg, gContext->GetMainWindow());
 
         return CardUtil::ERROR_PROBE;
     }
@@ -200,13 +138,11 @@
             (CardUtil::ERROR_UNKNOWN == nType) ||
             (CardUtil::ERROR_PROBE   == nType))
         {
-            MythPopupBox::showOkPopup(
-                gContext->GetMainWindow(), 
-                QObject::tr("Transport Editor"), 
-                QObject::tr(
-                    "Failed to probe a capture card connected to this "
-                    "transport's video source. Please make sure the "
-                    "backend is not running."));
+            msg = QObject::tr(
+                  "Failed to probe a capture card connected to this "
+                  "transport's video source. Please make sure the "
+                  "backend is not running.");
+            ShowOkPopup(msg, gContext->GetMainWindow());
 
             return CardUtil::ERROR_PROBE;
         }
@@ -231,134 +167,400 @@
         if (typeA == typeB)
             continue;
 
-        MythPopupBox::showOkPopup(
-            gContext->GetMainWindow(), 
-            QObject::tr("Transport Editor"), 
-            QObject::tr(
-                "The Video Sources to which this Transport is connected "
-                "are incompatible, please create seperate video sources "
-                "for these cards. "));
-
+        msg = QObject::tr(
+              "The Video Sources to which this Transport is connected "
+              "are incompatible, please create seperate video sources "
+              "for these cards. ");
+        ShowOkPopup(msg, gContext->GetMainWindow());
+        
         return CardUtil::ERROR_PROBE;
     }
 
     return cardtypes[0];
 }
 
-void TransportList::SetSourceID(uint _sourceid)
+/////////////////////////////////////////////////////////
+
+TransportListEditor::TransportListEditor(MythScreenStack *parent, int sourceid)
+              : MythScreenType(parent, "transporteditor")
 {
-    //VERBOSE(VB_IMPORTANT, "TransportList::SetSourceID("<<_sourceid<<")");
+    if (sourceid > 0)
+        m_sourceid = sourceid;
+    else
+        m_sourceid = 1;
+    
+    m_deleteAllTransports = false;
+}
 
-    if (!_sourceid)
+bool TransportListEditor::Create()
+{
+    bool foundtheme = false;
+
+    // Load the theme for this screen
+    foundtheme = LoadWindowFromXML("config-ui.xml", "transportoverview", this);
+
+    if (!foundtheme)
+        return false;
+
+    m_sourceList = dynamic_cast<MythUIButtonList *>(GetChild("source"));
+    m_transportList = dynamic_cast<MythUIButtonList *>(GetChild("transports"));
+
+    if (!m_sourceList || !m_transportList)
     {
-        sourceid = 0;
+        return false;
     }
-    else
+
+    // Source List
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare("SELECT name, sourceid FROM videosource");
+    if (query.exec())
     {
-        cardtype = get_cardtype(_sourceid);
-        sourceid = ((CardUtil::ERROR_OPEN    == cardtype) ||
-                    (CardUtil::ERROR_UNKNOWN == cardtype) ||
-                    (CardUtil::ERROR_PROBE   == cardtype)) ? 0 : _sourceid;
+        MythUIButtonListItem *item;
+        while(query.next())
+        {
+            item = new MythUIButtonListItem(m_sourceList, query.value(0).toString(),
+                                     query.value(1).toInt());
+            if (query.value(1).toInt() == m_sourceid)
+                m_sourceList->SetItemCurrent(item);
+        }
     }
+        
+    connect(m_sourceList, SIGNAL(itemSelected(MythUIButtonListItem *)),
+            SLOT(setSourceID(MythUIButtonListItem *)));
 
-    fillSelections();
+    // Other signals
+    connect(m_transportList, SIGNAL(itemClicked(MythUIButtonListItem *)),
+            SLOT(edit()));
+
+    MythUIText *infoLabel = dynamic_cast<MythUIText *>(GetChild("infolabel"));
+    infoLabel->SetText(QObject::tr(
+                    "This section lists each transport that MythTV "
+                    "currently knows about. The display fields are "
+                    "transport id, network id, frequency, modulation, symbol rate "
+                    "and constellation."));
+    
+    fillList();
+
+    BuildFocusList();
+
+    return true;
 }
 
-TransportListEditor::TransportListEditor(uint sourceid) :
-    m_videosource(new VideoSourceSelector(sourceid, QString::null, false)), 
-    m_list(new TransportList())
+bool TransportListEditor::keyPressEvent(QKeyEvent *event)
 {
-    setLabel(tr("Multiplex Editor"));
+    if (GetFocusWidget()->keyPressEvent(event))
+        return true;
 
-    m_list->SetSourceID(m_videosource->GetSourceID());
+    bool handled = false;
+    QStringList actions;
+    gContext->GetMainWindow()->TranslateKeyPress("Global", event, actions);
 
-    addChild(m_videosource);
-    addChild(m_list);
+    for (int i = 0; i < actions.size() && !handled; i++)
+    {
+        QString action = actions[i];
+        handled = true;
 
-    connect(m_videosource, SIGNAL(valueChanged(const QString&)), 
-            m_list,        SLOT(  SetSourceID( const QString&)));
-    
-    connect(m_list, SIGNAL(accepted(int)),            this, SLOT(Edit()));
-    connect(m_list, SIGNAL(menuButtonPressed(int)),   this, SLOT(Menu()));
-    connect(m_list, SIGNAL(editButtonPressed(int)),   this, SLOT(Edit()));
-    connect(m_list, SIGNAL(deleteButtonPressed(int)), this, SLOT(Delete()));
+        if (action == "MENU")
+        {
+            menu();
+        }
+        else if (action == "DELETE")
+        {
+            uint mplexid = getMplexID();
+            if (mplexid > 0)
+            {
+                deleteTransportMenu();            
+            }
+            else 
+                handled = true;
+        }
+        else
+            handled = false;
+    }
+
+    if (!handled && MythScreenType::keyPressEvent(event))
+        handled = true;
+
+    return handled;
 }
 
-DialogCode TransportListEditor::exec(void)
+void TransportListEditor::customEvent(QEvent *event)
 {
-    while (ConfigurationDialog::exec() == kDialogCodeAccepted);
+    if (event->type() == kMythDialogBoxCompletionEventType)
+    {
+        DialogCompletionEvent *dce =
+                                dynamic_cast<DialogCompletionEvent*>(event);
 
-    return kDialogCodeRejected;
+        QString resultid= dce->GetId();
+        int buttonnum  = dce->GetResult();
+
+        if (resultid == "transportopts")
+        {
+            switch (buttonnum)
+            {
+                case 0 : // Edit Transport
+                    edit();
+                    break;
+                case 1 : // Delete Transport
+                    m_deleteAllTransports = false;
+                    deleteTransportMenu();
+                    break;
+                case 2 : // Delete All Transports for source
+                    m_deleteAllTransports = true;
+                    deleteTransportMenu();
+                    break;
+            }
+        }
+        else if (resultid == "deletetransportmenu")
+        {
+            switch (buttonnum)
+            {
+                case 0 : // Confirm transport(s) delete
+                    deleteTransport();
+                    break;
+                case 1 : // Cancel transport(s) delete
+                    break;
+            }
+        } 
+    }
 }
 
-void TransportListEditor::Edit(void)
+void TransportListEditor::setSourceID(MythUIButtonListItem *item)
 {
-    uint sourceid = m_videosource->getValue().toUInt();
-    CardUtil::CARD_TYPES cardtype = get_cardtype(sourceid);
+    if (!item)
+        return;
 
-    if ((CardUtil::ERROR_OPEN    != cardtype) &&
-        (CardUtil::ERROR_UNKNOWN != cardtype) &&
-        (CardUtil::ERROR_PROBE   != cardtype))
+    int sourceid = item->GetData().toInt();
+
+    if (!sourceid)
     {
-        uint mplexid = m_list->getValue().toUInt();
-        TransportWizard wiz(mplexid, sourceid, cardtype);
-        wiz.exec();
-        m_list->fillSelections();
+        sourceid = 0;
     }
+
+    if (m_sourceid != sourceid)
+    {
+        m_sourceid = sourceid;
+        fillList();
+    }
 }
 
-void TransportListEditor::Delete(void)
+void TransportListEditor::fillList(void)
 {
-    uint mplexid = m_list->getValue().toInt();
+    QString currentValue = m_transportList->GetValue();
+    uint    currentIndex = qMax(m_transportList->GetCurrentPos(), 0);
+    m_transportList->Reset();
+    MythUIButtonListItem *item = new MythUIButtonListItem(m_transportList, "");
+    // FIXME: There must be a better way of adding this?
+    item->SetText(" ( ", "transportid");
+    item->SetText(tr("Add"), "networkid");
+    item->SetText(tr("New Transport"), "frequency");
+    item->SetText(" ) ", "modulation");
 
-    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"), kDialogCodeButton1);
-
-    if (kDialogCodeButton0 != val)
+    if (!m_sourceid)
         return;
 
+    QString querystr = "SELECT mplexid, modulation, frequency, symbolrate,"
+                       "networkid, transportid, constellation, visible "
+                       "FROM dtv_multiplex, videosource "
+                       "WHERE dtv_multiplex.sourceid = :SOURCEID AND "
+                       "dtv_multiplex.sourceid = videosource.sourceid "
+                       "ORDER by networkid, transportid, frequency, mplexid";
+    
+    CardUtil::CARD_TYPES cardtype = get_cardtype(m_sourceid);
+
     MSqlQuery query(MSqlQuery::InitCon());
-    query.prepare("DELETE FROM dtv_multiplex WHERE mplexid = :MPLEXID");
+    query.prepare(querystr);
+    query.bindValue(":SOURCEID", m_sourceid);
+
+    uint selidx = 0, idx = 1;
+    if (query.exec() && query.size() > 0)
+    {
+        for (; query.next() ; idx++)
+        {
+            QString mplexid = query.value(0).toString();
+
+            QString rawmod = (CardUtil::OFDM == cardtype) ?
+                query.value(6).toString() : query.value(1).toString();
+
+            QString modulation = pp_modulation(rawmod);
+            while (modulation.length() < 7)
+                modulation += " ";
+
+            QString frequency = query.value(2).toString();
+
+            QString symbolrate = query.value(3).toString();
+            symbolrate = ( symbolrate == "0" ) ? "" : symbolrate + " S/s";
+
+            QString networkid = query.value(4).toString();
+
+            QString transportid = query.value(5).toString();
+
+            QString hz = (CardUtil::QPSK == cardtype) ? "kHz" : "Hz";
+
+            QString constellation = "";
+            if (CardUtil::OFDM == cardtype)
+                constellation = "(DVB-T)";
+            if (CardUtil::QPSK == cardtype)
+                constellation = "(DVB-S)";
+            if (CardUtil::QAM == cardtype)
+                constellation = "(DVB-C)";
+
+            QString txt = QString("%1 %2 %3 symbolrate %4 networkid %5 transportid %6 %7")
+                .arg(modulation).arg(frequency).arg(hz)
+                .arg(symbolrate).arg(networkid).arg(transportid).arg(constellation);
+
+            bool visible =  query.value(7).toBool();
+
+            QString state = "normal";
+            if (!visible)
+                state = "disabled";
+
+            bool sel = (mplexid == currentValue);
+            selidx = (sel) ? idx : selidx;
+            item = new MythUIButtonListItem(m_transportList, "",
+                                                     qVariantFromValue(mplexid));
+            item->SetText(transportid, "transportid");
+            item->SetText(frequency + " " + hz, "frequency");
+            item->SetText(modulation, "modulation");
+            item->SetText(symbolrate, "symbolrate");
+            item->SetText(networkid, "networkid");
+            item->SetText(constellation, "constellation");
+            item->DisplayState(state, "status");
+        }
+    }
+
+    // Make sure we select the current item, or the following one after
+    // deletion, with wrap around to "(New Transport)" after deleting last item.
+    m_transportList->SetItemCurrent((!selidx && currentIndex < idx) ? currentIndex : selidx);
+}
+
+uint TransportListEditor::getMplexID(void)
+{
+    MythUIButtonListItem *item = m_transportList->GetItemCurrent();
+    if (!item)
+        return 0;
+
+    return item->GetData().toUInt();
+}
+
+QString TransportListEditor::getTransportID(uint mplexid)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare("SELECT transportid FROM dtv_multiplex "
+            "WHERE mplexid = :MPLEXID");
     query.bindValue(":MPLEXID", mplexid);
+    if (!query.exec() || !query.next())
+    {
+        MythDB::DBError("TransportListEditor()", query);
+        return "";
+    }
+    return query.value(0).toString();
+}
 
+void TransportListEditor::edit(void)
+{
+    MythUIButtonListItem *item = m_transportList->GetItemCurrent();
+    if (!item)
+        return;
+
+    CardUtil::CARD_TYPES cardtype = get_cardtype(m_sourceid);
+
+    if ((CardUtil::ERROR_OPEN    != cardtype) &&
+        (CardUtil::ERROR_UNKNOWN != cardtype) &&
+        (CardUtil::ERROR_PROBE   != cardtype)) 
+    {
+        TransportWizard wiz(getMplexID(), m_sourceid, cardtype);
+        wiz.exec();
+        fillList();
+    }
+}
+
+void TransportListEditor::deleteTransport(void)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+    
+    if ( m_deleteAllTransports )
+    {
+        query.prepare("DELETE FROM dtv_multiplex WHERE sourceid = :SOURCEID");
+        query.bindValue(":SOURCEID", m_sourceid);
+    }
+    else
+    {
+        query.prepare("DELETE FROM dtv_multiplex WHERE mplexid = :MPLEXID");
+        query.bindValue(":MPLEXID", getMplexID());
+    }
+    
     if (!query.exec() || !query.isActive())
         MythDB::DBError("TransportEditor -- delete multiplex", query);
+    
+    m_deleteAllTransports = false;
 
-    query.prepare("DELETE FROM channel WHERE mplexid = :MPLEXID");
-    query.bindValue(":MPLEXID", mplexid);
+    fillList();
+}
 
-    if (!query.exec() || !query.isActive())
-        MythDB::DBError("TransportEditor -- delete channels", query);
+void TransportListEditor::deleteTransportMenu(void)
+{
+    QString msg;
+    
+    if ( m_deleteAllTransports )
+    {
+        msg = tr("Are you sure you would like to delete the transports on %1?")
+                       .arg(m_sourceList->GetValue());
+    }
+    else
+    {
+        msg = tr("Are you sure you would like to delete transport %1?")
+                       .arg(getTransportID(getMplexID()));
+    }
 
-    m_list->fillSelections();
+    MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
+    MythDialogBox *delTransportMenu = new MythDialogBox(msg, popupStack, "deletetransportmenu");
+    if (delTransportMenu->Create())
+    {
+        delTransportMenu->SetReturnEvent(this, "deletetransportmenu");
+ 
+        delTransportMenu->AddButton(tr("Yes, delete the transport(s)"));
+        delTransportMenu->AddButton(tr("No, don't"));
+ 
+        popupStack->AddScreen(delTransportMenu);
+    }
+    else
+        delete delTransportMenu;
 }
 
-void TransportListEditor::Menu(void)
+void TransportListEditor::menu(void)
 {
-    uint mplexid = m_list->getValue().toInt();
+    uint mplexid = getMplexID();
 
     if (!mplexid)
     {
-       Edit();
-       return;
+       edit();
     }
+    else
+    {
+        QString label = tr("Transport Options");
 
-    DialogCode val = MythPopupBox::Show2ButtonPopup(
-        gContext->GetMainWindow(), 
-        "", 
-        tr("Transport Menu"), 
-        tr("Edit.."), 
-        tr("Delete.."), kDialogCodeButton0);
+        MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
 
-    if (kDialogCodeButton0 == val)
-        emit Edit();
-    else if (kDialogCodeButton1 == val)
-        emit Delete();
-    else
-        m_list->setFocus();
+        MythDialogBox *menu = new MythDialogBox(label, popupStack, "transportoptmenu");
+
+        if (menu->Create())
+        {
+            menu->SetReturnEvent(this, "transportopts");
+
+            QString tsID = getTransportID(mplexid);
+            menu->AddButton(tr("Edit transport %1").arg(tsID));
+            menu->AddButton(tr("Delete transport %1").arg(tsID));
+            menu->AddButton(tr("Delete ALL transports on %1").arg(m_sourceList->GetValue()));
+
+            popupStack->AddScreen(menu);
+        }
+        else
+        {
+            delete menu;
+            return;
+        }
+    }
 }
 
 class MuxDBStorage : public SimpleDBStorage
Index: mythtv/libs/libmythtv/transporteditor.h
===================================================================
--- mythtv/libs/libmythtv/transporteditor.h	(revision 20205)
+++ mythtv/libs/libmythtv/transporteditor.h	(working copy)
@@ -32,6 +32,8 @@
 #ifndef _TRANSPORT_EDITOR_H_
 #define _TRANSPORT_EDITOR_H_
 
+#include "mythscreentype.h"
+
 #include <qobject.h>
 #include "settings.h"
 
@@ -41,52 +43,32 @@
 /*
  *  Objects added for Transport Editing section
  */
-
-class TransportList : public ListBoxSetting, public TransientStorage
+class MPUBLIC TransportListEditor : public MythScreenType
 {
     Q_OBJECT
-
   public:
-    TransportList() : ListBoxSetting(this), sourceid(0), cardtype(0) { }
+    TransportListEditor(MythScreenStack *parent, int sourceId);
 
-    virtual void Load(void) { fillSelections(); }
-    virtual void fillSelections(void);
+    bool Create(void);
+    bool keyPressEvent(QKeyEvent *);
+    void customEvent(QEvent *event);
 
-    void SetSourceID(uint _sourceid);
+  protected slots:
+    void menu(void);
+    void edit(void);
+    void deleteTransport(void);
+    void deleteTransportMenu(void);
+    void fillList(void);
+    void setSourceID(MythUIButtonListItem *item);
+    uint getMplexID(void);
+    QString getTransportID(uint mplexid);
 
-  public slots:
-    void SetSourceID(const QString &_sourceid)
-        { SetSourceID(_sourceid.toUInt()); }
-
   private:
-    ~TransportList() { }
+    int m_sourceid;
+    bool m_deleteAllTransports;
 
-  private:
-    uint sourceid;
-    uint cardtype;
+    MythUIButtonList *m_transportList;
+    MythUIButtonList *m_sourceList;
 };
 
-// Page for selecting a transport to be created/edited
-class MPUBLIC TransportListEditor : public QObject, public ConfigurationDialog
-{
-    Q_OBJECT
-
-  public:
-    TransportListEditor(uint initial_sourceid);
-
-    virtual DialogCode exec(void);
-
-  public slots:
-    void Menu(void);
-    void Delete(void);
-    void Edit(void);
-
-  private:
-    ~TransportListEditor() { }
-
-  private:
-    VideoSourceSelector *m_videosource;
-    TransportList       *m_list;
-};
-
 #endif // _TRANSPORT_EDITOR_H_
Index: mythtv/programs/mythtv-setup/channeleditor.cpp
===================================================================
--- mythtv/programs/mythtv-setup/channeleditor.cpp	(revision 20205)
+++ mythtv/programs/mythtv-setup/channeleditor.cpp	(working copy)
@@ -158,8 +158,8 @@
     // Sort List
     new MythUIButtonListItem(sortList, tr("Channel Name"));
     new MythUIButtonListItem(sortList, tr("Channel Number"));
-    connect(m_sourceList, SIGNAL(itemSelected(MythUIButtonListItem *)),
-            SLOT(setSourceID(MythUIButtonListItem *)));
+    connect(sortList, SIGNAL(itemSelected(MythUIButtonListItem *)),
+            SLOT(setSortMode(MythUIButtonListItem *)));
     sortList->SetValue(m_currentSortMode);
 
 
@@ -178,8 +178,8 @@
     }
     new MythUIButtonListItem(m_sourceList,tr("(Unassigned)"),
                              qVariantFromValue((int)FILTER_UNASSIGNED));
-    connect(sortList, SIGNAL(itemSelected(MythUIButtonListItem *)),
-            SLOT(setSortMode(MythUIButtonListItem *)));
+    connect(m_sourceList, SIGNAL(itemSelected(MythUIButtonListItem *)),
+            SLOT(setSourceID(MythUIButtonListItem *)));
 
     // Hide/Show channels without channum checkbox
     hideCheck->SetCheckState(m_currentHideMode);
@@ -556,10 +556,15 @@
 
 void ChannelEditor::transportEditor(void)
 {
-    TransportListEditor *editor = new TransportListEditor(m_sourceFilter);
-    editor->exec();
-    editor->deleteLater();
+    MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
 
+    TransportListEditor *transportedit = new TransportListEditor(mainStack, m_sourceFilter);
+
+    if (transportedit->Create())
+        mainStack->AddScreen(transportedit);
+    else
+        delete transportedit;
+
     fillList();
 }
 
Index: mythtv/themes/default/config-ui.xml
===================================================================
--- mythtv/themes/default/config-ui.xml	(revision 20205)
+++ mythtv/themes/default/config-ui.xml	(working copy)
@@ -178,4 +168,79 @@
         </button>
 
     </window>
+    
+    <window name="transportoverview">
+
+        <textarea name="pagetitle">
+            <area>20,5,570,40</area>
+            <font>baselarge</font>
+            <value>Transport Editor</value>
+        </textarea>
+
+        <imagetype name="filler">
+            <filename>cr-background.png</filename>
+            <position>0,39</position>
+        </imagetype>
+
+        <imagetype name="transportid_column">
+            <area>51,50,80,260</area>
+            <gradient start="#333333" end="#333333" alpha="180" />
+        </imagetype>
+        
+        <imagetype name="frequency_column">
+            <area>207,50,160,260</area>
+            <gradient start="#333333" end="#333333" alpha="180" />
+        </imagetype>
+
+        <imagetype name="symbolrate_column">
+            <area>467,50,160,260</area>
+            <gradient start="#333333" end="#333333" alpha="180" />
+        </imagetype>
+
+        <buttonlist name="transports" from="basebuttonlist2">
+            <position>19,50</position>
+            <statetype name="buttonitem">
+                <state name="active">
+                    <textarea name="transportid" from="buttontext">
+                        <area>36,1,80,24</area>
+                    </textarea>
+                    <textarea name="networkid" from="buttontext">
+                        <area>116,1,80,24</area>
+                    </textarea>
+                    <textarea name="frequency" from="buttontext">
+                        <area>192,1,160,24</area>
+                    </textarea>
+                    <textarea name="modulation" from="buttontext">
+                        <area>352,1,100,24</area>
+                    </textarea>
+                    <textarea name="symbolrate" from="buttontext">
+                        <area>452,1,160,24</area>
+                    </textarea>
+                    <textarea name="constellation" from="buttontext">
+                        <area>616,1,161,24</area>
+                    </textarea>
+                </state>
+                <state name="selected" from="active" />
+                <state name="inactive" from="active" />
+            </statetype>
+        </buttonlist>
+
+        <textarea name="sourcelabel" from="basetextarea">
+            <area>30,375,170,30</area>
+            <value>Video Source:</value>
+            <font>basemedium</font>
+        </textarea>
+
+        <buttonlist name="source" from="basewideselector">
+            <position>210,370</position>
+        </buttonlist>
+
+        <textarea name="infolabel" from="basetextarea">
+            <area>30,435,750,150</area>
+            <font>basemedium</font>
+            <multiline>true</multiline>
+        </textarea>
+
+    </window>
+
 </mythuitheme>
\ No newline at end of file
