Ticket #4571: popup_menu_rev20834.patch

File popup_menu_rev20834.patch, 5.6 KB (added by james.meyer@…, 11 years ago)

updated patch for main_menu popup. This patch replaces all others

  • libs/libmythui/myththemedmenu.h

     
    22#define MYTHTHEMEDMENU_H_
    33
    44#include "mythscreentype.h"
     5#include "mythdialogbox.h"
    56#include "mythuistatetype.h"
    67#include "mythuibuttonlist.h"
    78#include "xmlparsebase.h"
     
    7980    void ReloadExitKey(void);
    8081    virtual void aboutToShow(void);
    8182
     83    void doMenu();
     84    void aboutScreen();
     85    MythDialogBox* m_menuPopup;
     86    void customEvent(QEvent *event);
     87
    8288  protected:
    8389    virtual bool keyPressEvent(QKeyEvent *e);
    8490
  • libs/libmythui/myththemedmenu.cpp

     
    8888      m_state(state), m_allocedstate(false), m_foundtheme(false),
    8989      m_exitModifier(0), m_ignorekeys(false), m_wantpop(false)
    9090{
     91    m_menuPopup = NULL;
     92
    9193    if (!m_state)
    9294    {
    9395        m_state = new MythThemedMenuState(parent, "themedmenustate");
     
    267269                }
    268270            }
    269271        }
     272        else if (action == "MENU")
     273        {
     274            doMenu();
     275        }
    270276        else
    271277            handled = false;
    272278    }
     
    287293    MythScreenType::aboutToShow();
    288294}
    289295
     296void MythThemedMenu::doMenu()
     297{
     298    if( m_menuPopup != NULL )
     299        return;
     300
     301    int allowsd =  GetMythDB()->GetNumSetting("AllowQuitShutdown");
     302    int override_menu = GetMythDB()->GetNumSetting("OverRideExitMenu");
     303    QString label = "System Menu";
     304    MythScreenStack* mainStack = GetMythMainWindow()->GetMainStack();
     305    m_menuPopup = new MythDialogBox(label, mainStack, "menuPopup");
     306
     307    if (m_menuPopup->Create())
     308        mainStack->AddScreen(m_menuPopup);
     309
     310    if (override_menu == 0)
     311    {
     312        if ( (allowsd != 0) && (allowsd != 4)  )
     313        {
     314            m_menuPopup->SetReturnEvent(this,"popmenu_exit");
     315            m_menuPopup->AddButton("Shutdown");
     316            m_menuPopup->AddButton("Reboot");
     317        }
     318        else
     319        {
     320            m_menuPopup->SetReturnEvent(this,"popmenu_noexit");
     321        }
     322    }
     323    if (override_menu == 5)
     324    { // reboot
     325        m_menuPopup->SetReturnEvent(this,"popmenu_reboot");
     326        m_menuPopup->AddButton("Reboot");
     327    }
     328    else if (override_menu == 2 || override_menu == 4)
     329    { // shutdown
     330            m_menuPopup->SetReturnEvent(this,"popmenu_shutdown");
     331            m_menuPopup->AddButton("Shutdown");
     332    }
     333    else if (override_menu == 3 || override_menu == 6)
     334    { //    both
     335        m_menuPopup->SetReturnEvent(this,"popmenu_exit");
     336        m_menuPopup->AddButton("Shutdown");
     337        m_menuPopup->AddButton("Reboot");
     338    }
     339    else
     340    {
     341        m_menuPopup->SetReturnEvent(this,"popmenu_noexit");
     342    }
     343
     344    m_menuPopup->AddButton("About");
     345    m_menuPopup->AddButton("Cancel");
     346
     347}
     348
     349void MythThemedMenu::aboutScreen()
     350{
     351
     352    extern const char* myth_source_version;
     353    extern const char* myth_source_path;
     354    QString distro_line;
     355    distro_line = "";
     356
     357    QFile file("/etc/os_myth_release");
     358    if (file.open(QFile::ReadOnly))
     359    {
     360        QTextStream t( &file );        // use a text stream
     361        distro_line = t.readLine();
     362        file.close();
     363    }
     364
     365    QString label = "";
     366    label.append(QObject::tr("Revision: ") + myth_source_version   + "  \n  Branch:" +  myth_source_path  + "\n" + distro_line );
     367
     368    MythScreenStack* mainStack = GetMythMainWindow()->GetMainStack();
     369    m_menuPopup = new MythDialogBox(label, mainStack, "About");
     370    if (m_menuPopup->Create())
     371        mainStack->AddScreen(m_menuPopup);
     372
     373    m_menuPopup->SetReturnEvent(this, "About");
     374    m_menuPopup->AddButton("OK!");
     375
     376}
     377
     378void MythThemedMenu::customEvent(QEvent *event)
     379{
     380    if (event->type() == kMythDialogBoxCompletionEventType)
     381    {
     382        DialogCompletionEvent *dce =
     383                dynamic_cast<DialogCompletionEvent*>(event);
     384
     385        QString resultid = dce->GetId();
     386        int buttonnum = dce->GetResult();
     387        QString halt_cmd = GetMythDB()->GetSetting("HaltCommand");
     388        QString reboot_cmd = GetMythDB()->GetSetting("RebootCommand");
     389
     390        if (resultid == "popmenu_exit")
     391        {
     392            if (buttonnum == 0)
     393            {
     394                if (!halt_cmd.isEmpty())
     395                    system(halt_cmd.toAscii());
     396            }
     397
     398            if (buttonnum == 1)
     399            {
     400                if (!reboot_cmd.isEmpty())
     401                    system(reboot_cmd.toAscii());
     402            }
     403
     404            if (buttonnum == 2)
     405            {
     406                aboutScreen();
     407            }
     408        }
     409
     410        if (resultid == "popmenu_noexit")
     411        {
     412            if (buttonnum == 0)
     413                aboutScreen();
     414        }
     415
     416        if (resultid == "popmenu_reboot")
     417        {
     418            if (buttonnum == 0)
     419            {
     420                if (!reboot_cmd.isEmpty())
     421                    system(reboot_cmd.toAscii());
     422            }
     423
     424            if (buttonnum == 1)
     425            {
     426                aboutScreen();
     427            }
     428        }
     429
     430        if (resultid == "popmenu_shutdown")
     431        {
     432            if (buttonnum == 0)
     433            {
     434                if (!halt_cmd.isEmpty())
     435                    system(halt_cmd.toAscii());
     436            }
     437
     438            if (buttonnum == 1)
     439            {
     440                aboutScreen();
     441            }
     442        }
     443
     444        m_menuPopup = NULL;
     445    }
     446}
     447
    290448/** \brief Parses the element's tags and set the ThemeButton's type,
    291449 *         text, depends, and action, then adds the button.
    292450 *