VirtualBox

Changeset 75018 in vbox for trunk


Ignore:
Timestamp:
Oct 24, 2018 8:15:35 AM (6 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:6699. Some prep. work for moving the guest control widgets into a separate dialog

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
7 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk

    r75015 r75018  
    845845        src/runtime/information/UIVMInformationDialog.h \
    846846        src/runtime/guestctrl/UIGuestControlConsole.h \
     847        src/runtime/guestctrl/UIGuestControlDialog.h \
    847848        src/runtime/guestctrl/UIGuestControlFileManager.h \
    848849        src/runtime/guestctrl/UIGuestControlFileModel.h \
     
    993994        src/runtime/information/UIVMInformationDialog.h \
    994995        src/runtime/guestctrl/UIGuestControlConsole.h \
     996        src/runtime/guestctrl/UIGuestControlDialog.h \
    995997        src/runtime/guestctrl/UIGuestControlFileManager.h \
    996998        src/runtime/guestctrl/UIGuestControlFileModel.h \
     
    15421544        src/runtime/information/UIVMInformationDialog.cpp \
    15431545        src/runtime/guestctrl/UIGuestControlConsole.cpp \
     1546        src/runtime/guestctrl/UIGuestControlDialog.cpp \
    15441547        src/runtime/guestctrl/UIGuestControlFileManager.cpp \
    15451548        src/runtime/guestctrl/UIGuestControlFileModel.cpp \
     
    17141717        src/runtime/information/UIVMInformationDialog.cpp \
    17151718        src/runtime/guestctrl/UIGuestControlConsole.cpp \
     1719        src/runtime/guestctrl/UIGuestControlDialog.cpp \
    17161720        src/runtime/guestctrl/UIGuestControlFileManager.cpp \
    17171721        src/runtime/guestctrl/UIGuestControlFileModel.cpp \
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp

    r75016 r75018  
    546546    switch (runtimeMenuMachineActionType)
    547547    {
    548         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SettingsDialog:    strResult = "SettingsDialog"; break;
    549         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeSnapshot:      strResult = "TakeSnapshot"; break;
    550         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog: strResult = "InformationDialog"; break;
    551         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause:             strResult = "Pause"; break;
    552         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset:             strResult = "Reset"; break;
    553         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Detach:            strResult = "Detach"; break;
    554         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SaveState:         strResult = "SaveState"; break;
    555         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Shutdown:          strResult = "Shutdown"; break;
    556         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_PowerOff:          strResult = "PowerOff"; break;
    557         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Nothing:           strResult = "Nothing"; break;
    558         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_All:               strResult = "All"; break;
     548        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SettingsDialog:     strResult = "SettingsDialog"; break;
     549        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeSnapshot:       strResult = "TakeSnapshot"; break;
     550        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog:  strResult = "InformationDialog"; break;
     551        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlDialog: strResult = "GuestControlDialog"; break;
     552        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause:              strResult = "Pause"; break;
     553        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset:              strResult = "Reset"; break;
     554        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Detach:             strResult = "Detach"; break;
     555        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SaveState:          strResult = "SaveState"; break;
     556        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Shutdown:           strResult = "Shutdown"; break;
     557        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_PowerOff:           strResult = "PowerOff"; break;
     558        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Nothing:            strResult = "Nothing"; break;
     559        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_All:                strResult = "All"; break;
    559560        default:
    560561        {
     
    571572    /* Here we have some fancy stuff allowing us
    572573     * to search through the keys using 'case-insensitive' rule: */
    573     QStringList keys;            QList<UIExtraDataMetaDefs::RuntimeMenuMachineActionType> values;
    574     keys << "SettingsDialog";    values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SettingsDialog;
    575     keys << "TakeSnapshot";      values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeSnapshot;
    576     keys << "InformationDialog"; values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog;
    577     keys << "Pause";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause;
    578     keys << "Reset";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset;
    579     keys << "Detach";            values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Detach;
    580     keys << "SaveState";         values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SaveState;
    581     keys << "Shutdown";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Shutdown;
    582     keys << "PowerOff";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_PowerOff;
    583     keys << "Nothing";           values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Nothing;
    584     keys << "All";               values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_All;
     574    QStringList keys;             QList<UIExtraDataMetaDefs::RuntimeMenuMachineActionType> values;
     575    keys << "SettingsDialog";     values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SettingsDialog;
     576    keys << "TakeSnapshot";       values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeSnapshot;
     577    keys << "InformationDialog";  values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog;
     578    keys << "GuestControlDialog"; values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlDialog;
     579    keys << "Pause";              values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause;
     580    keys << "Reset";              values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset;
     581    keys << "Detach";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Detach;
     582    keys << "SaveState";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SaveState;
     583    keys << "Shutdown";           values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Shutdown;
     584    keys << "PowerOff";           values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_PowerOff;
     585    keys << "Nothing";            values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Nothing;
     586    keys << "All";                values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_All;
    585587    /* Invalid type for unknown words: */
    586588    if (!keys.contains(strRuntimeMenuMachineActionType, Qt::CaseInsensitive))
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h

    r75017 r75018  
    460460    enum RuntimeMenuMachineActionType
    461461    {
    462         RuntimeMenuMachineActionType_Invalid           = 0,
    463         RuntimeMenuMachineActionType_SettingsDialog    = RT_BIT(0),
    464         RuntimeMenuMachineActionType_TakeSnapshot      = RT_BIT(1),
    465         RuntimeMenuMachineActionType_InformationDialog = RT_BIT(2),
    466         RuntimeMenuMachineActionType_Pause             = RT_BIT(3),
    467         RuntimeMenuMachineActionType_Reset             = RT_BIT(4),
    468         RuntimeMenuMachineActionType_Detach            = RT_BIT(5),
    469         RuntimeMenuMachineActionType_SaveState         = RT_BIT(6),
    470         RuntimeMenuMachineActionType_Shutdown          = RT_BIT(7),
    471         RuntimeMenuMachineActionType_PowerOff          = RT_BIT(8),
    472         RuntimeMenuMachineActionType_Nothing           = RT_BIT(9),
    473         RuntimeMenuMachineActionType_All               = 0xFFFF
     462        RuntimeMenuMachineActionType_Invalid            = 0,
     463        RuntimeMenuMachineActionType_SettingsDialog     = RT_BIT(0),
     464        RuntimeMenuMachineActionType_TakeSnapshot       = RT_BIT(1),
     465        RuntimeMenuMachineActionType_InformationDialog  = RT_BIT(2),
     466        RuntimeMenuMachineActionType_GuestControlDialog = RT_BIT(3),
     467        RuntimeMenuMachineActionType_Pause              = RT_BIT(4),
     468        RuntimeMenuMachineActionType_Reset              = RT_BIT(5),
     469        RuntimeMenuMachineActionType_Detach             = RT_BIT(6),
     470        RuntimeMenuMachineActionType_SaveState          = RT_BIT(7),
     471        RuntimeMenuMachineActionType_Shutdown           = RT_BIT(8),
     472        RuntimeMenuMachineActionType_PowerOff           = RT_BIT(9),
     473        RuntimeMenuMachineActionType_Nothing            = RT_BIT(10),
     474        RuntimeMenuMachineActionType_All                = 0xFFFF
    474475    };
    475476
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp

    r74942 r75018  
    230230};
    231231
     232/** Simple action extension, used as 'Show Guest Control Dialog' action class. */
     233class UIActionSimpleRuntimeShowGuestControlDialog : public UIActionSimple
     234{
     235    Q_OBJECT;
     236
     237public:
     238
     239    /** Constructs action passing @a pParent to the base-class. */
     240    UIActionSimpleRuntimeShowGuestControlDialog(UIActionPool *pParent)
     241        : UIActionSimple(pParent, ":/session_info_16px.png", ":/session_info_disabled_16px.png", true)
     242    {}
     243
     244protected:
     245
     246    /** Returns action extra-data ID. */
     247    virtual int extraDataID() const /* override */
     248    {
     249        return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlDialog;
     250    }
     251    /** Returns action extra-data key. */
     252    virtual QString extraDataKey() const /* override */
     253    {
     254        return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlDialog);
     255    }
     256    /** Returns whether action is allowed. */
     257    virtual bool isAllowed() const /* override */
     258    {
     259        return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlDialog);
     260    }
     261
     262    /** Returns shortcut extra-data ID. */
     263    virtual QString shortcutExtraDataID() const /* override */
     264    {
     265        return QString("GuestControlDialog");
     266    }
     267
     268    /** Returns default shortcut. */
     269    virtual QKeySequence defaultShortcut(UIActionPoolType) const /* override */
     270    {
     271        return QKeySequence();
     272    }
     273
     274    /** Handles translation event. */
     275    virtual void retranslateUi() /* override */
     276    {
     277        setName(QApplication::translate("UIActionPool", "Guest Control..."));
     278        setStatusTip(QApplication::translate("UIActionPool", "Display the virtual machine guest control window"));
     279    }
     280};
     281
    232282/** Toggle action extension, used as 'Pause' action class. */
    233283class UIActionToggleRuntimePause : public UIActionToggle
     
    31843234    m_pool[UIActionIndexRT_M_Machine_S_TakeSnapshot] = new UIActionSimpleRuntimePerformTakeSnapshot(this);
    31853235    m_pool[UIActionIndexRT_M_Machine_S_ShowInformation] = new UIActionSimpleRuntimeShowInformationDialog(this);
     3236    m_pool[UIActionIndexRT_M_Machine_S_ShowGuestControl] = new UIActionSimpleRuntimeShowGuestControlDialog(this);
    31863237    m_pool[UIActionIndexRT_M_Machine_T_Pause] = new UIActionToggleRuntimePause(this);
    31873238    m_pool[UIActionIndexRT_M_Machine_S_Reset] = new UIActionSimpleRuntimePerformReset(this);
     
    34853536    /* 'Information Dialog' action: */
    34863537    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowInformation)) || fSeparator;
     3538    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowGuestControl)) || fSeparator;
    34873539
    34883540    /* Separator: */
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h

    r74942 r75018  
    4646    UIActionIndexRT_M_Machine_S_TakeSnapshot,
    4747    UIActionIndexRT_M_Machine_S_ShowInformation,
     48    UIActionIndexRT_M_Machine_S_ShowGuestControl,
    4849    UIActionIndexRT_M_Machine_T_Pause,
    4950    UIActionIndexRT_M_Machine_S_Reset,
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp

    r74942 r75018  
    6666# include "UIAddDiskEncryptionPasswordDialog.h"
    6767# include "UIVMInformationDialog.h"
     68# include "UIGuestControlDialog.h"
    6869# ifdef VBOX_WS_MAC
    6970#  include "DockIconPreview.h"
     
    853854    , m_fIsHidLedsSyncEnabled(false)
    854855    , m_pLogViewerDialog(0)
     856    , m_pGuestControlDialog(0)
    855857{
    856858}
     
    11081110    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation), SIGNAL(triggered()),
    11091111            this, SLOT(sltShowInformationDialog()));
     1112    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowGuestControl), SIGNAL(triggered()),
     1113            this, SLOT(sltShowGuestControlDialog()));
    11101114    connect(actionPool()->action(UIActionIndexRT_M_Machine_T_Pause), SIGNAL(toggled(bool)),
    11111115            this, SLOT(sltPause(bool)));
     
    17771781}
    17781782
     1783void UIMachineLogic::sltShowGuestControlDialog()
     1784{
     1785    if (machine().isNull() || !activeMachineWindow())
     1786        return;
     1787
     1788    /* Create a logviewer only if we don't have one already */
     1789    if (m_pGuestControlDialog)
     1790        return;
     1791
     1792    QIManagerDialog *pGuestControlDialog;
     1793    UIGuestControlDialogFactory dialogFactory(actionPool(), machine());
     1794    dialogFactory.prepare(pGuestControlDialog, activeMachineWindow());
     1795    if (pGuestControlDialog)
     1796    {
     1797        m_pGuestControlDialog = pGuestControlDialog;
     1798
     1799        /* Show instance: */
     1800        pGuestControlDialog->show();
     1801        pGuestControlDialog->setWindowState(pGuestControlDialog->windowState() & ~Qt::WindowMinimized);
     1802        pGuestControlDialog->activateWindow();
     1803        connect(pGuestControlDialog, &QIManagerDialog::sigClose,
     1804                this, &UIMachineLogic::sltCloseGuestControlWindow);
     1805    }
     1806
     1807}
     1808
    17791809void UIMachineLogic::sltReset()
    17801810{
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h

    r73976 r75018  
    274274    void sltTakeSnapshot();
    275275    void sltShowInformationDialog();
     276    void sltShowGuestControlDialog();
    276277    void sltReset();
    277278    void sltPause(bool fOn);
     
    427428    /** Holds the log viewer dialog instance. */
    428429    QIManagerDialog *m_pLogViewerDialog;
     430    QIManagerDialog *m_pGuestControlDialog;
    429431
    430432    /* Friend classes: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlDialog.cpp

    r75010 r75018  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIVMLogViewerDialog class implementation.
     3 * VBox Qt GUI - UIGuestControlDialog class implementation.
    44 */
    55
     
    3636# include "UIExtraDataManager.h"
    3737# include "UIIconPool.h"
    38 # include "UIVMLogViewerDialog.h"
     38# include "UIGuestControlDialog.h"
    3939# include "UIVMLogViewerWidget.h"
    4040# include "VBoxGlobal.h"
     
    4747
    4848/*********************************************************************************************************************************
    49 *   Class UIVMLogViewerDialogFactory implementation.                                                                             *
     49*   Class UIGuestControlDialogFactory implementation.                                                                            *
    5050*********************************************************************************************************************************/
    5151
    52 UIVMLogViewerDialogFactory::UIVMLogViewerDialogFactory(UIActionPool *pActionPool /* = 0 */,
     52UIGuestControlDialogFactory::UIGuestControlDialogFactory(UIActionPool *pActionPool /* = 0 */,
    5353                                                       const CMachine &comMachine /* = CMachine() */)
    5454    : m_pActionPool(pActionPool)
     
    5757}
    5858
    59 void UIVMLogViewerDialogFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterWidget)
     59void UIGuestControlDialogFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterWidget)
    6060{
    61     pDialog = new UIVMLogViewerDialog(pCenterWidget, m_pActionPool, m_comMachine);
     61    pDialog = new UIGuestControlDialog(pCenterWidget, m_pActionPool, m_comMachine);
    6262}
    6363
    6464
    6565/*********************************************************************************************************************************
    66 *   Class UIVMLogViewerDialog implementation.                                                                                    *
     66*   Class UIGuestControlDialog implementation.                                                                                   *
    6767*********************************************************************************************************************************/
    6868
    69 UIVMLogViewerDialog::UIVMLogViewerDialog(QWidget *pCenterWidget, UIActionPool *pActionPool, const CMachine &comMachine)
     69UIGuestControlDialog::UIGuestControlDialog(QWidget *pCenterWidget, UIActionPool *pActionPool, const CMachine &comMachine)
    7070    : QIWithRetranslateUI<QIManagerDialog>(pCenterWidget)
    7171    , m_pActionPool(pActionPool)
     
    7474}
    7575
    76 void UIVMLogViewerDialog::retranslateUi()
     76void UIGuestControlDialog::retranslateUi()
    7777{
    7878    /* Translate window title: */
     
    8686}
    8787
    88 void UIVMLogViewerDialog::configure()
     88void UIGuestControlDialog::configure()
    8989{
    9090    /* Apply window icons: */
     
    9292}
    9393
    94 void UIVMLogViewerDialog::configureCentralWidget()
     94void UIGuestControlDialog::configureCentralWidget()
    9595{
    9696    /* Create widget: */
     
    105105#endif
    106106        connect(pWidget, &UIVMLogViewerWidget::sigSetCloseButtonShortCut,
    107                 this, &UIVMLogViewerDialog::sltSetCloseButtonShortCut);
     107                this, &UIGuestControlDialog::sltSetCloseButtonShortCut);
    108108
    109109        /* Add into layout: */
     
    112112}
    113113
    114 void UIVMLogViewerDialog::finalize()
     114void UIGuestControlDialog::finalize()
    115115{
    116116    /* Apply language settings: */
     
    121121}
    122122
    123 void UIVMLogViewerDialog::loadSettings()
     123void UIGuestControlDialog::loadSettings()
    124124{
    125125    /* Acquire widget: */
     
    152152}
    153153
    154 void UIVMLogViewerDialog::saveSettings() const
     154void UIGuestControlDialog::saveSettings() const
    155155{
    156156    /* Save window geometry to extradata: */
     
    167167}
    168168
    169 bool UIVMLogViewerDialog::shouldBeMaximized() const
     169bool UIGuestControlDialog::shouldBeMaximized() const
    170170{
    171171    return gEDataManager->logWindowShouldBeMaximized();
    172172}
    173173
    174 void UIVMLogViewerDialog::sltSetCloseButtonShortCut(QKeySequence shortcut)
     174void UIGuestControlDialog::sltSetCloseButtonShortCut(QKeySequence shortcut)
    175175{
    176176    if (button(ButtonType_Close))
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlDialog.h

    r75010 r75018  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIVMLogViewerDialog class declaration.
     3 * VBox Qt GUI - UIGuestControlDialog class declaration.
    44 */
    55
     
    1616 */
    1717
    18 #ifndef ___UIVMLogViewerDialog_h___
    19 #define ___UIVMLogViewerDialog_h___
     18#ifndef ___UIGuestControlDialog_h___
     19#define ___UIGuestControlDialog_h___
    2020
    2121/* Qt includes: */
     
    3636class QVBoxLayout;
    3737class UIActionPool;
    38 class UIVMLogViewerDialog;
     38class UIGuestControlDialog;
    3939class CMachine;
    4040
    4141
    4242/** QIManagerDialogFactory extension used as a factory for Log Viewer dialog. */
    43 class SHARED_LIBRARY_STUFF UIVMLogViewerDialogFactory : public QIManagerDialogFactory
     43class SHARED_LIBRARY_STUFF UIGuestControlDialogFactory : public QIManagerDialogFactory
    4444{
    4545public:
     
    4848      * @param  pActionPool  Brings the action-pool reference.
    4949      * @param  comMachine   Brings the machine for which VM Log-Viewer is requested. */
    50     UIVMLogViewerDialogFactory(UIActionPool *pActionPool = 0, const CMachine &comMachine = CMachine());
     50    UIGuestControlDialogFactory(UIActionPool *pActionPool = 0, const CMachine &comMachine = CMachine());
    5151
    5252protected:
     
    6464
    6565/** QIManagerDialog extension providing GUI with the dialog displaying machine logs. */
    66 class SHARED_LIBRARY_STUFF UIVMLogViewerDialog : public QIWithRetranslateUI<QIManagerDialog>
     66class SHARED_LIBRARY_STUFF UIGuestControlDialog : public QIWithRetranslateUI<QIManagerDialog>
    6767{
    6868    Q_OBJECT;
     
    7474      * @param  pActionPool    Brings the action-pool reference.
    7575      * @param  comMachine     Brings the machine reference. */
    76     UIVMLogViewerDialog(QWidget *pCenterWidget, UIActionPool *pActionPool, const CMachine &comMachine);
     76    UIGuestControlDialog(QWidget *pCenterWidget, UIActionPool *pActionPool, const CMachine &comMachine);
    7777
    7878protected:
     
    119119
    120120
    121 #endif /* !___UIVMLogViewerDialog_h___ */
     121#endif /* !___UIGuestControlDialog_h___ */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette