/************************************************************************** f i c l T e r m S y s t e m ** Tear the system down by deleting the dictionaries and all VMs. ** This saves you from having to keep track of all that stuff. **************************************************************************/ void ficlTermSystem(FICL_SYSTEM *pSys) { if (pSys->dp) dictDelete(pSys->dp); pSys->dp = NULL; if (pSys->envp) dictDelete(pSys->envp); pSys->envp = NULL; #if FICL_WANT_LOCALS if (pSys->localp) dictDelete(pSys->localp); pSys->localp = NULL; #endif while (pSys->vmList != NULL) { FICL_VM *pVM = pSys->vmList; pSys->vmList = pSys->vmList->link; vmDelete(pVM); } ficlFree(pSys); pSys = NULL; return; }
/************************************************************************** f i c l F r e e V M ** Removes the VM in question from the system VM list and deletes the ** memory allocated to it. This is an optional call, since ficlTermSystem ** will do this cleanup for you. This function is handy if you're going to ** do a lot of dynamic creation of VMs. **************************************************************************/ void ficlFreeVM(FICL_VM *pVM) { FICL_SYSTEM *pSys = pVM->pSys; FICL_VM *pList = pSys->vmList; assert(pVM != 0); if (pSys->vmList == pVM) { pSys->vmList = pSys->vmList->link; } else for (; pList != NULL; pList = pList->link) { if (pList->link == pVM) { pList->link = pVM->link; break; } } if (pList) vmDelete(pVM); return; }
void VBoxTrayIcon::showSubMenu () { if (!mActive) return; UIVMItem* pItem = NULL; QMenu *pMenu = NULL; QVariant vID; if ((pMenu = qobject_cast<QMenu*>(sender()))) { vID = pMenu->menuAction()->data(); if (vID.canConvert<QString>() && mVMModel) pItem = mVMModel->itemById (qvariant_cast<QString>(vID)); } mVmConfigAction->setData (vID); mVmDeleteAction->setData (vID); mVmDiscardAction->setData (vID); mVmStartAction->setData (vID); mVmPauseAction->setData (vID); mVmShowLogsAction->setData (vID); if (pItem && pItem->accessible()) { /* look at vmListViewCurrentChanged() */ CMachine m = pItem->machine(); KMachineState s = pItem->machineState(); bool running = pItem->sessionState() != KSessionState_Unlocked; bool modifyEnabled = !running && s != KMachineState_Saved; /* Settings */ mVmConfigAction->setEnabled (modifyEnabled); /* Delete */ mVmDeleteAction->setEnabled (!running); /* Discard */ mVmDiscardAction->setEnabled (s == KMachineState_Saved && !running); /* Change the Start button text accordingly */ if ( s == KMachineState_PoweredOff || s == KMachineState_Saved || s == KMachineState_Teleported || s == KMachineState_Aborted ) { mVmStartAction->setText (UIVMListView::tr ("S&tart")); mVmStartAction->setStatusTip ( UIVMListView::tr ("Start the selected virtual machine")); mVmStartAction->setEnabled (!running); } else { mVmStartAction->setText (UIVMListView::tr ("S&how")); mVmStartAction->setStatusTip ( UIVMListView::tr ("Switch to the window of the selected virtual machine")); mVmStartAction->setEnabled (pItem->canSwitchTo()); } /* Change the Pause/Resume button text accordingly */ mVmPauseAction->setEnabled ( s == KMachineState_Running || s == KMachineState_Teleporting || s == KMachineState_LiveSnapshotting || s == KMachineState_Paused || s == KMachineState_TeleportingPausedVM ); if ( s == KMachineState_Paused || s == KMachineState_TeleportingPausedVM /*?*/ ) { mVmPauseAction->setText (UIVMListView::tr ("R&esume")); mVmPauseAction->setStatusTip ( UIVMListView::tr ("Resume the execution of the virtual machine")); mVmPauseAction->blockSignals (true); mVmPauseAction->setChecked (true); mVmPauseAction->blockSignals (false); } else { mVmPauseAction->setText (UIVMListView::tr ("&Pause")); mVmPauseAction->setStatusTip ( UIVMListView::tr ("Suspend the execution of the virtual machine")); mVmPauseAction->blockSignals (true); mVmPauseAction->setChecked (false); mVmPauseAction->blockSignals (false); } mVmShowLogsAction->setEnabled (true); /* Disconnect old slot which maybe was connected from another selected sub menu. */ disconnect (mVmConfigAction, SIGNAL (triggered()), this, SLOT (vmSettings())); disconnect (mVmDeleteAction, SIGNAL (triggered()), this, SLOT (vmDelete())); disconnect (mVmDiscardAction, SIGNAL (triggered()), this, SLOT (vmDiscard())); disconnect (mVmStartAction, SIGNAL (triggered()), this, SLOT (vmStart())); disconnect (mVmPauseAction, SIGNAL (toggled (bool)), this, SLOT (vmPause (bool))); disconnect (mVmShowLogsAction, SIGNAL (triggered()), this, SLOT (vmShowLogs())); /* Connect new sub menu with slots. */ connect (mVmConfigAction, SIGNAL (triggered()), this, SLOT (vmSettings())); connect (mVmDeleteAction, SIGNAL (triggered()), this, SLOT (vmDelete())); connect (mVmDiscardAction, SIGNAL (triggered()), this, SLOT (vmDiscard())); connect (mVmStartAction, SIGNAL (triggered()), this, SLOT (vmStart())); connect (mVmPauseAction, SIGNAL (toggled (bool)), this, SLOT (vmPause (bool))); connect (mVmShowLogsAction, SIGNAL (triggered()), this, SLOT (vmShowLogs())); }