Changeset 77647 in vbox
- Timestamp:
- Mar 11, 2019 10:43:02 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 129277
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
r76581 r77647 151 151 template<> SHARED_LIBRARY_STUFF bool canConvert<KChipsetType>(); 152 152 template<> SHARED_LIBRARY_STUFF bool canConvert<KNATProtocol>(); 153 template<> SHARED_LIBRARY_STUFF bool canConvert<KGuestSessionStatus>(); 154 template<> SHARED_LIBRARY_STUFF bool canConvert<KProcessStatus>(); 153 155 154 156 … … 302 304 template<> SHARED_LIBRARY_STUFF QString toInternalString(const KNATProtocol &protocol); 303 305 template<> SHARED_LIBRARY_STUFF KNATProtocol fromInternalString<KNATProtocol>(const QString &strProtocol); 306 template<> SHARED_LIBRARY_STUFF QString toInternalString(const KGuestSessionStatus &status); 307 template<> SHARED_LIBRARY_STUFF KGuestSessionStatus fromInternalString<KGuestSessionStatus>(const QString &strStatus); 308 template<> SHARED_LIBRARY_STUFF QString toInternalString(const KProcessStatus &status); 309 template<> SHARED_LIBRARY_STUFF KProcessStatus fromInternalString<KProcessStatus>(const QString &strStatus); 304 310 305 311 -
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
r76606 r77647 54 54 template<> bool canConvert<KChipsetType>() { return true; } 55 55 template<> bool canConvert<KNATProtocol>() { return true; } 56 56 template<> bool canConvert<KGuestSessionStatus>() { return true; } 57 template<> bool canConvert<KProcessStatus>() { return true; } 57 58 58 59 /* QColor <= KMachineState: */ … … 678 679 return values.at(keys.indexOf(QRegExp(strProtocol, Qt::CaseInsensitive))); 679 680 } 681 682 template<> QString toInternalString(const KGuestSessionStatus &enmStatus) 683 { 684 switch (enmStatus) 685 { 686 case KGuestSessionStatus_Undefined: return QApplication::translate("VBoxGlobal", "Undefined", "GuestSessionStatus"); 687 case KGuestSessionStatus_Starting: return QApplication::translate("VBoxGlobal", "Starting", "GuestSessionStatus"); 688 case KGuestSessionStatus_Started: return QApplication::translate("VBoxGlobal", "Started", "GuestSessionStatus"); 689 case KGuestSessionStatus_Terminating: return QApplication::translate("VBoxGlobal", "Terminating", "GuestSessionStatus"); 690 case KGuestSessionStatus_Terminated: return QApplication::translate("VBoxGlobal", "Terminated", "GuestSessionStatus"); 691 case KGuestSessionStatus_TimedOutKilled: return QApplication::translate("VBoxGlobal", "TimedOutKilled", "GuestSessionStatus"); 692 case KGuestSessionStatus_TimedOutAbnormally: return QApplication::translate("VBoxGlobal", "TimedOutAbnormally", "GuestSessionStatus"); 693 case KGuestSessionStatus_Down: return QApplication::translate("VBoxGlobal", "Down", "GuestSessionStatus"); 694 case KGuestSessionStatus_Error: return QApplication::translate("VBoxGlobal", "Error", "GuestSessionStatus"); 695 default: AssertMsgFailed(("No text for %d", enmStatus)); break; 696 } 697 return QString(); 698 } 699 700 template<> KGuestSessionStatus fromInternalString<KGuestSessionStatus>(const QString &strStatus) 701 { 702 QHash<QString, KGuestSessionStatus> list; 703 list.insert(QApplication::translate("VBoxGlobal", "Undefined", "GuestSessionStatus"), KGuestSessionStatus_Undefined); 704 list.insert(QApplication::translate("VBoxGlobal", "Starting", "GuestSessionStatus"), KGuestSessionStatus_Starting); 705 list.insert(QApplication::translate("VBoxGlobal", "Started", "GuestSessionStatus"), KGuestSessionStatus_Started); 706 list.insert(QApplication::translate("VBoxGlobal", "Terminating", "GuestSessionStatus"), KGuestSessionStatus_Terminating); 707 list.insert(QApplication::translate("VBoxGlobal", "Terminated", "GuestSessionStatus"), KGuestSessionStatus_Terminated); 708 list.insert(QApplication::translate("VBoxGlobal", "TimedOutKilled", "GuestSessionStatus"), KGuestSessionStatus_TimedOutKilled); 709 list.insert(QApplication::translate("VBoxGlobal", "TimedOutAbnormally", "GuestSessionStatus"), KGuestSessionStatus_TimedOutAbnormally); 710 list.insert(QApplication::translate("VBoxGlobal", "Down", "GuestSessionStatus"), KGuestSessionStatus_Down); 711 list.insert(QApplication::translate("VBoxGlobal", "Error", "GuestSessionStatus"), KGuestSessionStatus_Error); 712 if (!list.contains(strStatus)) 713 { 714 AssertMsgFailed(("No value for '%s'", strStatus.toUtf8().constData())); 715 } 716 return list.value(strStatus, KGuestSessionStatus_Error); 717 } 718 719 template<> QString toInternalString(const KProcessStatus &enmStatus) 720 { 721 switch (enmStatus) 722 { 723 case KProcessStatus_Undefined: return QApplication::translate("VBoxGlobal", "Undefined", "ProcessStatus"); 724 case KProcessStatus_Starting: return QApplication::translate("VBoxGlobal", "Starting", "ProcessStatus"); 725 case KProcessStatus_Started: return QApplication::translate("VBoxGlobal", "Started", "ProcessStatus"); 726 case KProcessStatus_Paused: return QApplication::translate("VBoxGlobal", "Paused", "ProcessStatus"); 727 case KProcessStatus_Terminating: return QApplication::translate("VBoxGlobal", "Terminating", "ProcessStatus"); 728 case KProcessStatus_TerminatedNormally: return QApplication::translate("VBoxGlobal", "TerminatedNormally", "ProcessStatus"); 729 case KProcessStatus_TerminatedSignal: return QApplication::translate("VBoxGlobal", "TerminatedSignal", "ProcessStatus"); 730 case KProcessStatus_TerminatedAbnormally: return QApplication::translate("VBoxGlobal", "TerminatedAbnormally", "ProcessStatus"); 731 case KProcessStatus_TimedOutKilled: return QApplication::translate("VBoxGlobal", "TimedOutKilled", "ProcessStatus"); 732 case KProcessStatus_TimedOutAbnormally: return QApplication::translate("VBoxGlobal", "TimedOutAbnormally", "ProcessStatus"); 733 case KProcessStatus_Down: return QApplication::translate("VBoxGlobal", "Down", "ProcessStatus"); 734 case KProcessStatus_Error: return QApplication::translate("VBoxGlobal", "Error", "ProcessStatus"); 735 default: AssertMsgFailed(("No text for %d", enmStatus)); break; 736 } 737 return QString(); 738 } 739 740 template<> KProcessStatus fromInternalString<KProcessStatus>(const QString &strStatus) 741 { 742 QHash<QString, KProcessStatus> list; 743 list.insert(QApplication::translate("VBoxGlobal", "Undefined", "GuestSessionStatus"), KProcessStatus_Undefined); 744 list.insert(QApplication::translate("VBoxGlobal", "Starting", "GuestSessionStatus"), KProcessStatus_Starting); 745 list.insert(QApplication::translate("VBoxGlobal", "Started", "GuestSessionStatus"), KProcessStatus_Started); 746 list.insert(QApplication::translate("VBoxGlobal", "Paused", "GuestSessionStatus"), KProcessStatus_Paused); 747 list.insert(QApplication::translate("VBoxGlobal", "Terminating", "GuestSessionStatus"), KProcessStatus_Terminating); 748 list.insert(QApplication::translate("VBoxGlobal", "TerminatedNormally", "GuestSessionStatus"), KProcessStatus_TerminatedNormally); 749 list.insert(QApplication::translate("VBoxGlobal", "TerminatedSignal", "GuestSessionStatus"), KProcessStatus_TerminatedSignal); 750 list.insert(QApplication::translate("VBoxGlobal", "TerminatedAbnormally", "GuestSessionStatus"), KProcessStatus_TerminatedAbnormally); 751 list.insert(QApplication::translate("VBoxGlobal", "TimedOutKilled", "GuestSessionStatus"), KProcessStatus_TimedOutKilled); 752 list.insert(QApplication::translate("VBoxGlobal", "TimedOutAbnormally", "GuestSessionStatus"), KProcessStatus_TimedOutAbnormally); 753 list.insert(QApplication::translate("VBoxGlobal", "Down", "GuestSessionStatus"), KProcessStatus_Down); 754 list.insert(QApplication::translate("VBoxGlobal", "Error", "GuestSessionStatus"), KProcessStatus_Error); 755 756 if (!list.contains(strStatus)) 757 { 758 AssertMsgFailed(("No value for '%s'", strStatus.toUtf8().constData())); 759 } 760 return list.value(strStatus, KProcessStatus_Error); 761 762 } -
trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.cpp
r77279 r77647 542 542 return; 543 543 544 m_pPropertiesDialog = new UIPropertiesDialog( );544 m_pPropertiesDialog = new UIPropertiesDialog(this); 545 545 if (!m_pPropertiesDialog) 546 546 return; -
trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlTreeItem.cpp
r77584 r77647 17 17 18 18 /* GUI includes: */ 19 #include "UIConverter.h" 19 20 #include "UIExtraDataManager.h" 20 21 #include "UIGuestControlTreeItem.h" 22 #include "UIGuestProcessControlWidget.h" 21 23 #include "VBoxGlobal.h" 22 24 … … 26 28 #include "CGuestProcessStateChangedEvent.h" 27 29 #include "CGuestSessionStateChangedEvent.h" 28 29 30 QString sessionStatusString(KGuestSessionStatus status)31 {32 QString statusString;33 switch (status)34 {35 case KGuestSessionStatus_Undefined:36 statusString = "Undefined";37 break;38 case KGuestSessionStatus_Starting:39 statusString = "Starting";40 break;41 case KGuestSessionStatus_Started:42 statusString = "Started";43 break;44 case KGuestSessionStatus_Terminating:45 statusString = "Terminating";46 break;47 case KGuestSessionStatus_Terminated:48 statusString = "Terminated";49 break;50 case KGuestSessionStatus_TimedOutKilled:51 statusString = "TimedOutKilled";52 break;53 case KGuestSessionStatus_TimedOutAbnormally:54 statusString = "TimedOutAbnormally";55 break;56 case KGuestSessionStatus_Down:57 statusString = "Down";58 break;59 case KGuestSessionStatus_Error:60 statusString = "Error";61 break;62 default:63 statusString = "Undefined";64 break;65 }66 return statusString;67 }68 69 QString processStatusString(KProcessStatus status)70 {71 QString statusString;72 switch (status)73 {74 case KProcessStatus_Undefined:75 statusString = "Undefined";76 break;77 case KProcessStatus_Starting:78 statusString = "Starting";79 break;80 case KProcessStatus_Started:81 statusString = "Started";82 break;83 case KProcessStatus_Paused:84 statusString = "Terminating";85 break;86 case KProcessStatus_Terminating:87 statusString = "Terminating";88 break;89 case KProcessStatus_TerminatedNormally:90 statusString = "TerminatedNormally";91 break;92 case KProcessStatus_TerminatedSignal:93 statusString = "TerminatedSignal";94 break;95 case KProcessStatus_TerminatedAbnormally:96 statusString = "TerminatedAbnormally";97 break;98 case KProcessStatus_TimedOutKilled:99 statusString = "TimedOutKilled";100 break;101 case KProcessStatus_TimedOutAbnormally:102 statusString = "TimedOutAbnormally";103 break;104 case KProcessStatus_Down:105 statusString = "Down";106 break;107 case KProcessStatus_Error:108 statusString = "Error";109 break;110 default:111 break;112 }113 return statusString;114 }115 30 116 31 … … 247 162 return; 248 163 QVector<CGuestProcess> processes = m_comGuestSession.GetProcesses(); 164 printf("processes # %d\n", processes.size()); 249 165 for (int i =0; i < processes.size(); ++i) 250 166 addGuestProcess(processes[i]); … … 267 183 void UIGuestSessionTreeItem::sltGuestProcessRegistered(CGuestProcess guestProcess) 268 184 { 185 const ULONG waitTimeout = 2000; 186 KProcessWaitResult waitResult = guestProcess.WaitFor(KProcessWaitForFlag_Start, waitTimeout); 187 if (waitResult != KProcessWaitResult_Start) 188 { 189 return ; 190 } 191 269 192 if (!guestProcess.isOk()) 270 193 return; … … 285 208 connect(newItem, &UIGuestProcessTreeItem::sigGuestProcessErrorText, 286 209 this, &UIGuestSessionTreeItem::sigGuestSessionErrorText); 210 setExpanded(true); 287 211 } 288 212 … … 292 216 } 293 217 218 KGuestSessionStatus UIGuestSessionTreeItem::status() const 219 { 220 if (!m_comGuestSession.isOk()) 221 return KGuestSessionStatus_Undefined; 222 return m_comGuestSession.GetStatus(); 223 } 224 225 QString UIGuestSessionTreeItem::propertyString() const 226 { 227 QString strProperty; 228 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Session Name")).arg(m_comGuestSession.GetName()); 229 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Session Id")).arg(m_comGuestSession.GetId()); 230 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Session Status")).arg(gpConverter->toInternalString(m_comGuestSession.GetStatus())); 231 return strProperty; 232 } 233 294 234 void UIGuestSessionTreeItem::sltGuestProcessUnregistered(CGuestProcess guestProcess) 295 235 { 236 if (!UIGuestProcessControlWidget::m_fDeleteAfterUnregister) 237 return; 296 238 for (int i = 0; i < childCount(); ++i) 297 239 { … … 311 253 setText(0, QString("%1").arg(m_comGuestSession.GetId())); 312 254 setText(1, QString("%1").arg(m_comGuestSession.GetName())); 313 setText(2, QString("%1").arg( sessionStatusString(m_comGuestSession.GetStatus())));255 setText(2, QString("%1").arg(gpConverter->toInternalString(m_comGuestSession.GetStatus()))); 314 256 } 315 257 … … 346 288 } 347 289 290 KProcessStatus UIGuestProcessTreeItem::status() const 291 { 292 if (!m_comGuestProcess.isOk()) 293 return KProcessStatus_Undefined; 294 return m_comGuestProcess.GetStatus(); 295 } 296 297 QString UIGuestProcessTreeItem::propertyString() const 298 { 299 QString strProperty; 300 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Process Name")).arg(m_comGuestProcess.GetName()); 301 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Process Id")).arg(m_comGuestProcess.GetPID()); 302 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Process Status")).arg(gpConverter->toInternalString(m_comGuestProcess.GetStatus())); 303 strProperty += QString("<b>%1: </b>%2<br/>").arg(tr("Executable Path")).arg(m_comGuestProcess.GetExecutablePath()); 304 return strProperty; 305 } 306 348 307 void UIGuestProcessTreeItem::prepareListener() 349 308 { … … 355 314 } 356 315 357 358 316 void UIGuestProcessTreeItem::cleanupListener() 359 317 { … … 376 334 processStatus != KProcessStatus_Paused) 377 335 { 378 this->deleteLater(); 336 if (UIGuestProcessControlWidget::m_fDeleteAfterUnregister) 337 this->deleteLater(); 379 338 } 380 339 } … … 384 343 if (!m_comGuestProcess.isOk()) 385 344 return; 386 setText(0, QString("PID: %1").arg(m_comGuestProcess.GetPID())); 387 setText(1, QString("Process Name: %1").arg(m_comGuestProcess.GetName())); 388 setText(2, QString("Process Status: %1").arg(processStatusString(m_comGuestProcess.GetStatus()))); 389 345 setText(0, QString("%1").arg(m_comGuestProcess.GetPID())); 346 setText(1, QString("%1").arg(m_comGuestProcess.GetExecutablePath())); 347 setText(2, QString("%1").arg(gpConverter->toInternalString(m_comGuestProcess.GetStatus()))); 390 348 } 391 349 -
trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlTreeItem.h
r77528 r77647 27 27 28 28 /* COM includes: */ 29 #include "COMEnums.h" 29 30 #include "CEventListener.h" 30 31 #include "CGuestSession.h" … … 47 48 UIGuestControlTreeItem(UIGuestControlTreeItem *pTreeWidgetItem, const QStringList &strings = QStringList()); 48 49 virtual ~UIGuestControlTreeItem(); 50 virtual QString propertyString() const = 0; 49 51 50 52 private slots: … … 88 90 const CGuestSession& guestSession() const; 89 91 void errorString(QString strError); 92 KGuestSessionStatus status() const; 93 virtual QString propertyString() const /* override */; 90 94 91 95 protected: … … 128 132 const CGuestProcess& guestProcess() const; 129 133 virtual ~UIGuestProcessTreeItem(); 130 134 KProcessStatus status() const; 135 virtual QString propertyString() const /* override */; 131 136 132 137 protected: -
trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlDialog.cpp
r77584 r77647 83 83 { 84 84 /* Create widget: */ 85 UIGuestProcessControlWidget *pWidget = new UIGuestProcessControlWidget(EmbedTo_Dialog, m_comGuest, this );85 UIGuestProcessControlWidget *pWidget = new UIGuestProcessControlWidget(EmbedTo_Dialog, m_comGuest, this, m_strMachineName); 86 86 87 87 if (pWidget) -
trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlWidget.cpp
r77584 r77647 23 23 24 24 /* GUI includes: */ 25 #include "QITreeWidget.h" 25 #include "QIDialog.h" 26 #include "QIDialogButtonBox.h" 26 27 #include "UIExtraDataManager.h" 27 28 #include "UIGuestControlConsole.h" … … 38 39 #include "CEventSource.h" 39 40 41 const bool UIGuestProcessControlWidget::m_fDeleteAfterUnregister = false; 42 43 /** A QIDialog child to display properties of a guest session on process. */ 44 class UISessionProcessPropertiesDialog : public QIDialog 45 { 46 47 Q_OBJECT; 48 49 public: 50 51 UISessionProcessPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0); 52 void setPropertyText(const QString &strProperty); 53 54 private: 55 56 QVBoxLayout *m_pMainLayout; 57 QTextEdit *m_pInfoEdit; 58 QString m_strProperty; 59 }; 60 61 62 /********************************************************************************************************************************* 63 * UIGuestControlTreeWidget definition. * 64 *********************************************************************************************************************************/ 40 65 41 66 class UIGuestControlTreeWidget : public QITreeWidget … … 47 72 48 73 void sigCloseSessionOrProcess(); 74 void sigShowProperties(); 49 75 50 76 public: 51 77 52 UIGuestControlTreeWidget(QWidget *pParent = 0) 53 :QITreeWidget(pParent) 54 { 55 setSelectionMode(QAbstractItemView::SingleSelection); 56 } 57 58 UIGuestControlTreeItem *selectedItem() 59 { 60 QList<QTreeWidgetItem*> selectedList = selectedItems(); 61 if (selectedList.isEmpty()) 62 return 0; 63 UIGuestControlTreeItem *item = 64 dynamic_cast<UIGuestControlTreeItem*>(selectedList[0]); 65 /* Return the firstof the selected items */ 66 return item; 67 } 78 UIGuestControlTreeWidget(QWidget *pParent = 0); 79 UIGuestControlTreeItem *selectedItem(); 68 80 69 81 protected: 70 82 71 void contextMenuEvent(QContextMenuEvent *pEvent) /* override */ 72 { 73 QMenu *menu = new QMenu(this); 74 QList<QTreeWidgetItem *> selectedList = selectedItems(); 75 76 UIGuestSessionTreeItem *sessionTreeItem = 0; 77 if (!selectedList.isEmpty()) 78 sessionTreeItem = dynamic_cast<UIGuestSessionTreeItem*>(selectedList[0]); 79 QAction *pSessionCloseAction = 0; 80 81 /* Create a guest session related context menu */ 82 if (sessionTreeItem) 83 void contextMenuEvent(QContextMenuEvent *pEvent) /* override */; 84 85 private slots: 86 87 void sltExpandAll(); 88 void sltCollapseAll(); 89 void sltRemoveAllTerminateSessionsProcesses(); 90 91 private: 92 93 void expandCollapseAll(bool bFlag); 94 }; 95 96 97 /********************************************************************************************************************************* 98 * UISessionProcessPropertiesDialog implementation. * 99 *********************************************************************************************************************************/ 100 101 UISessionProcessPropertiesDialog::UISessionProcessPropertiesDialog(QWidget *pParent /* = 0 */, Qt::WindowFlags flags /*= 0 */) 102 :QIDialog(pParent, flags) 103 , m_pMainLayout(new QVBoxLayout) 104 , m_pInfoEdit(new QTextEdit) 105 { 106 setLayout(m_pMainLayout); 107 108 if (m_pMainLayout) 109 m_pMainLayout->addWidget(m_pInfoEdit); 110 if (m_pInfoEdit) 111 { 112 m_pInfoEdit->setReadOnly(true); 113 m_pInfoEdit->setFrameStyle(QFrame::NoFrame); 114 } 115 QIDialogButtonBox *pButtonBox = 116 new QIDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this); 117 m_pMainLayout->addWidget(pButtonBox); 118 connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UISessionProcessPropertiesDialog::accept); 119 } 120 121 void UISessionProcessPropertiesDialog::setPropertyText(const QString &strProperty) 122 { 123 if (!m_pInfoEdit) 124 return; 125 m_strProperty = strProperty; 126 m_pInfoEdit->setHtml(strProperty); 127 } 128 129 130 /********************************************************************************************************************************* 131 * UIGuestControlTreeWidget implementation. * 132 *********************************************************************************************************************************/ 133 134 UIGuestControlTreeWidget::UIGuestControlTreeWidget(QWidget *pParent /* = 0 */) 135 :QITreeWidget(pParent) 136 { 137 setSelectionMode(QAbstractItemView::SingleSelection); 138 } 139 140 UIGuestControlTreeItem *UIGuestControlTreeWidget::selectedItem() 141 { 142 QList<QTreeWidgetItem*> selectedList = selectedItems(); 143 if (selectedList.isEmpty()) 144 return 0; 145 UIGuestControlTreeItem *item = 146 dynamic_cast<UIGuestControlTreeItem*>(selectedList[0]); 147 /* Return the firstof the selected items */ 148 return item; 149 } 150 151 void UIGuestControlTreeWidget::contextMenuEvent(QContextMenuEvent *pEvent) /* override */ 152 { 153 QMenu menu(this); 154 QList<QTreeWidgetItem *> selectedList = selectedItems(); 155 156 UIGuestSessionTreeItem *sessionTreeItem = 0; 157 if (!selectedList.isEmpty()) 158 sessionTreeItem = dynamic_cast<UIGuestSessionTreeItem*>(selectedList[0]); 159 QAction *pSessionCloseAction = 0; 160 bool fHasAnyItems = topLevelItemCount() != 0; 161 /* Create a guest session related context menu */ 162 if (sessionTreeItem) 163 { 164 pSessionCloseAction = menu.addAction(tr("Terminate Session")); 165 if (pSessionCloseAction) 166 connect(pSessionCloseAction, &QAction::triggered, 167 this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess); 168 } 169 UIGuestProcessTreeItem *processTreeItem = 0; 170 if (!selectedList.isEmpty()) 171 processTreeItem = dynamic_cast<UIGuestProcessTreeItem*>(selectedList[0]); 172 QAction *pProcessTerminateAction = 0; 173 if (processTreeItem) 174 { 175 pProcessTerminateAction = menu.addAction(tr("Terminate Process")); 176 if (pProcessTerminateAction) 83 177 { 84 pSessionCloseAction = menu->addAction(tr("Close Session")); 85 if (pSessionCloseAction) 86 connect(pSessionCloseAction, &QAction::triggered, 87 this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess); 178 connect(pProcessTerminateAction, &QAction::triggered, 179 this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess); 180 pProcessTerminateAction->setIcon(UIIconPool::iconSet(":/file_manager_delete_16px.png")); 88 181 } 89 UIGuestProcessTreeItem *processTreeItem = 0; 90 if (!selectedList.isEmpty()) 91 processTreeItem = dynamic_cast<UIGuestProcessTreeItem*>(selectedList[0]); 92 QAction *pProcessTerminateAction = 0; 93 if (processTreeItem) 182 } 183 if (pProcessTerminateAction || pSessionCloseAction) 184 menu.addSeparator(); 185 186 QAction *pRemoveAllTerminated = menu.addAction(tr("Remove All Terminated Sessions/Processes")); 187 if (pRemoveAllTerminated) 188 { 189 190 pRemoveAllTerminated->setEnabled(fHasAnyItems); 191 pRemoveAllTerminated->setIcon(UIIconPool::iconSet(":/state_aborted_16px.png")); 192 193 connect(pRemoveAllTerminated, &QAction::triggered, 194 this, &UIGuestControlTreeWidget::sltRemoveAllTerminateSessionsProcesses); 195 } 196 197 // Add actions to expand/collapse all tree items 198 QAction *pExpandAllAction = menu.addAction(tr("Expand All")); 199 if (pExpandAllAction) 200 { 201 pExpandAllAction->setIcon(UIIconPool::iconSet(":/expand_all_16px.png")); 202 connect(pExpandAllAction, &QAction::triggered, 203 this, &UIGuestControlTreeWidget::sltExpandAll); 204 } 205 206 QAction *pCollapseAllAction = menu.addAction(tr("Collapse All")); 207 if (pCollapseAllAction) 208 { 209 pCollapseAllAction->setIcon(UIIconPool::iconSet(":/collapse_all_16px.png")); 210 connect(pCollapseAllAction, &QAction::triggered, 211 this, &UIGuestControlTreeWidget::sltCollapseAll); 212 } 213 menu.addSeparator(); 214 QAction *pShowPropertiesAction = menu.addAction(tr("Properties")); 215 if (pShowPropertiesAction) 216 { 217 pShowPropertiesAction->setIcon(UIIconPool::iconSet(":/file_manager_properties_16px.png")); 218 pShowPropertiesAction->setEnabled(fHasAnyItems); 219 connect(pShowPropertiesAction, &QAction::triggered, 220 this, &UIGuestControlTreeWidget::sigShowProperties); 221 } 222 223 menu.exec(pEvent->globalPos()); 224 } 225 226 void UIGuestControlTreeWidget::sltExpandAll() 227 { 228 expandCollapseAll(true); 229 } 230 231 void UIGuestControlTreeWidget::sltCollapseAll() 232 { 233 expandCollapseAll(false); 234 } 235 236 void UIGuestControlTreeWidget::sltRemoveAllTerminateSessionsProcesses() 237 { 238 for (int i = 0; i < topLevelItemCount(); ++i) 239 { 240 if (!topLevelItem(i)) 241 break; 242 UIGuestSessionTreeItem *pSessionItem = dynamic_cast<UIGuestSessionTreeItem*>(topLevelItem(i)); 243 244 if (!pSessionItem) 245 continue; 246 247 if (pSessionItem->status() != KGuestSessionStatus_Starting && 248 pSessionItem->status() != KGuestSessionStatus_Started) 94 249 { 95 pProcessTerminateAction = menu->addAction(tr("Terminate Process")); 96 if (pProcessTerminateAction) 97 connect(pProcessTerminateAction, &QAction::triggered, 98 this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess); 250 delete pSessionItem; 251 continue; 99 252 } 100 if (pProcessTerminateAction || pSessionCloseAction) 101 menu->addSeparator(); 102 // Add actions to expand/collapse all tree items 103 QAction *pExpandAllAction = menu->addAction(tr("Expand All")); 104 if (pExpandAllAction) 253 254 for (int j = 0; j < topLevelItem(i)->childCount(); ++j) 105 255 { 106 pExpandAllAction->setIcon(UIIconPool::iconSet(":/expand_all_16px.png")); 107 connect(pExpandAllAction, &QAction::triggered, 108 this, &UIGuestControlTreeWidget::sltExpandAll); 109 } 110 111 QAction *pCollapseAllAction = menu->addAction(tr("Collapse All")); 112 if (pCollapseAllAction) 113 { 114 pCollapseAllAction->setIcon(UIIconPool::iconSet(":/collapse_all_16px.png")); 115 connect(pCollapseAllAction, &QAction::triggered, 116 this, &UIGuestControlTreeWidget::sltCollapseAll); 117 } 118 menu->exec(pEvent->globalPos()); 119 120 if (pSessionCloseAction) 121 disconnect(pSessionCloseAction, &QAction::triggered, 122 this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess); 123 if (pProcessTerminateAction) 124 disconnect(pProcessTerminateAction, &QAction::triggered, 125 this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess); 126 127 if (pExpandAllAction) 128 disconnect(pExpandAllAction, &QAction::triggered, 129 this, &UIGuestControlTreeWidget::sltExpandAll); 130 131 if (pCollapseAllAction) 132 disconnect(pCollapseAllAction, &QAction::triggered, 133 this, &UIGuestControlTreeWidget::sltCollapseAll); 134 135 delete menu; 136 } 137 138 private slots: 139 140 void sltExpandAll() 141 { 142 expandCollapseAll(true); 143 } 144 145 void sltCollapseAll() 146 { 147 expandCollapseAll(false); 148 } 149 150 void expandCollapseAll(bool bFlag) 151 { 152 for (int i = 0; i < topLevelItemCount(); ++i) 153 { 154 if (!topLevelItem(i)) 155 break; 156 topLevelItem(i)->setExpanded(bFlag); 157 for (int j = 0; j < topLevelItem(i)->childCount(); ++j) 256 UIGuestProcessTreeItem *pProcessItem = dynamic_cast<UIGuestProcessTreeItem*>(topLevelItem(i)->child(j)); 257 258 if (pProcessItem) 158 259 { 159 if (topLevelItem(i)->child(j)) 160 { 161 topLevelItem(i)->child(j)->setExpanded(bFlag); 162 } 260 if (pProcessItem->status() != KProcessStatus_Starting && 261 pProcessItem->status() != KProcessStatus_Started) 262 delete pProcessItem; 163 263 } 164 264 } 165 265 } 166 }; 266 267 } 268 269 void UIGuestControlTreeWidget::expandCollapseAll(bool bFlag) 270 { 271 for (int i = 0; i < topLevelItemCount(); ++i) 272 { 273 if (!topLevelItem(i)) 274 break; 275 topLevelItem(i)->setExpanded(bFlag); 276 for (int j = 0; j < topLevelItem(i)->childCount(); ++j) 277 { 278 if (topLevelItem(i)->child(j)) 279 { 280 topLevelItem(i)->child(j)->setExpanded(bFlag); 281 } 282 } 283 } 284 } 285 286 287 /********************************************************************************************************************************* 288 * UIGuestProcessControlWidget implementation. * 289 *********************************************************************************************************************************/ 167 290 168 291 UIGuestProcessControlWidget::UIGuestProcessControlWidget(EmbedTo enmEmbedding, const CGuest &comGuest, 169 QWidget *pParent, bool fShowToolbar /* = false */) 292 QWidget *pParent, QString strMachineName /* = QString()*/, 293 bool fShowToolbar /* = false */) 170 294 :QIWithRetranslateUI<QWidget>(pParent) 171 295 , m_comGuest(comGuest) … … 179 303 , m_pQtListener(0) 180 304 , m_fShowToolbar(fShowToolbar) 181 , m_ fDeleteAfterSessionUnregister(false)305 , m_strMachineName(strMachineName) 182 306 { 183 307 prepareListener(); … … 200 324 { 201 325 QStringList labels; 202 labels << tr("Session ID") << tr("Session Name") << tr("SessionStatus");326 labels << tr("Session/Process ID") << tr("Session Name/Process Command") << tr("Session/Process Status"); 203 327 m_pTreeWidget->setHeaderLabels(labels); 204 328 } … … 273 397 274 398 if (m_pTreeWidget) 399 { 275 400 connect(m_pTreeWidget, &UIGuestControlTreeWidget::sigCloseSessionOrProcess, 276 401 this, &UIGuestProcessControlWidget::sltCloseSessionOrProcess); 402 connect(m_pTreeWidget, &UIGuestControlTreeWidget::sigShowProperties, 403 this, &UIGuestProcessControlWidget::sltShowProperties); 404 } 277 405 278 406 if (m_pQtListener) … … 333 461 return; 334 462 guestSession.Close(); 463 } 464 465 void UIGuestProcessControlWidget::sltShowProperties() 466 { 467 UIGuestControlTreeItem *pItem = m_pTreeWidget->selectedItem(); 468 if (!pItem) 469 return; 470 471 UISessionProcessPropertiesDialog *pPropertiesDialog = new UISessionProcessPropertiesDialog(this); 472 if (!m_strMachineName.isEmpty()) 473 { 474 pPropertiesDialog->setWindowTitle(m_strMachineName); 475 } 476 if (!pPropertiesDialog) 477 return; 478 479 pPropertiesDialog->setPropertyText(pItem->propertyString()); 480 pPropertiesDialog->exec(); 481 482 delete pPropertiesDialog; 335 483 } 336 484 … … 477 625 } 478 626 } 479 if (m_fDeleteAfter SessionUnregister)627 if (m_fDeleteAfterUnregister) 480 628 delete selectedItem; 481 629 } -
trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlWidget.h
r77584 r77647 53 53 public: 54 54 55 UIGuestProcessControlWidget(EmbedTo enmEmbedding, const CGuest &comGuest, QWidget *pParent, bool fShowToolbar = false); 55 UIGuestProcessControlWidget(EmbedTo enmEmbedding, const CGuest &comGuest, QWidget *pParent, 56 QString strMachineName = QString(), bool fShowToolbar = false); 56 57 ~UIGuestProcessControlWidget(); 58 /** When true we delete the corresponding tree item as soon as the guest session/process is unregistered. */ 59 static const bool m_fDeleteAfterUnregister; 57 60 58 61 protected: … … 65 68 void sltConsoleCommandEntered(const QString &strCommand); 66 69 void sltConsoleOutputReceived(const QString &strOutput); 67 68 70 void sltGuestSessionRegistered(CGuestSession guestSession); 69 71 void sltGuestSessionUnregistered(CGuestSession guestSession); 70 72 void sltGuestControlErrorText(QString strError); 71 72 73 void sltTreeItemUpdated(); 73 74 void sltCloseSessionOrProcess(); 75 void sltShowProperties(); 74 76 75 77 private: … … 100 102 CEventListener m_comEventListener; 101 103 const bool m_fShowToolbar; 102 /** When true we delete the corresponding tree item as soon as the guest session is unregistered. */ 103 bool m_fDeleteAfterSessionUnregister; 104 QString m_strMachineName; 104 105 }; 105 106 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp
r77594 r77647 239 239 m_pTabWidget->addTab(m_tabs.value(1), QString()); 240 240 } 241 241 QString strMachineName; 242 if (m_pMachineWindow && m_pMachineWindow->console().isOk()) 243 { 244 CMachine comMachine = m_pMachineWindow->console().GetMachine(); 245 if (comMachine.isOk()) 246 strMachineName = comMachine.GetName(); 247 } 242 248 UIGuestProcessControlWidget *pGuestProcessControlWidget = 243 new UIGuestProcessControlWidget(EmbedTo_Dialog, m_pMachineWindow->console().GetGuest(), this, false /* fShowToolbar */); 249 new UIGuestProcessControlWidget(EmbedTo_Dialog, m_pMachineWindow->console().GetGuest(), 250 this, strMachineName, false /* fShowToolbar */); 244 251 245 252 if (pGuestProcessControlWidget)
Note:
See TracChangeset
for help on using the changeset viewer.